Mac + Virtualbox + CoreOS + etcd2 + fleet 기본 설정(완료)

CoreOS 클러스터 구축 3대 + Worker 3대 구성



전제



coreos 클러스터 구축 3대 구성
할 수있는 일

목표로 하는 구성





어드레싱




환경
hostname
IP 주소
메타


MacbookAir 4GB
hostserver
xxx.xxx.xxx.xxx
role=services,cabinet=one

virtualbox1
coreos-01
192.168.0.10
role=services,cabinet=one

virtualbox2
coreos-02
192.168.0.20
role=services,cabinet=one

virtualbox3
coreos-03
192.168.0.30
role=services,cabinet=one

virtualbox4
coreos-04
192.168.0.11
role=workers,cabinet=two

virtualbox5
coreos-05
192.168.0.21
role=workers,cabinet=two

virtualbox6
coreos-06
192.168.0.31
role=workers,cabinet=two


work의 3대를 신규 구축



Mac + Virtualbox + CoreOS + etcd2 + fleet 기본 설정 (1) 에서 작성한 coreos의 이미지를 3대분 클론을 실시해 갑니다.
※클론의 방법에 대해서는, 전회 기사를 참조해 주세요

작업자에게 cloud-config.yml을 설정합니다.



cloud-config.yml
vim cloud-config.yml

#cloud-config

hostname: coreos-04

write_files:
- path: /etc/environment
  content: |
    COREOS_PUBLIC_IPV4=192.168.0.11
    COREOS_PRIVATE_IPV4=192.168.0.11

coreos:
  update:
    reboot-strategy: 'off'
  etcd2:
    proxy: on 
    name: coreos-04
    heartbeat-interval: 1000
    election-timeout: 5000
    listen-client-urls: http://0.0.0.0:2379
    initial-cluster: coreos-01=http://192.168.0.10:2380,coreos-02=http://192.168.0.20:2380,coreos-03=http://192.168.0.30:2380

  fleet:
    etcd_servers: http://127.0.0.1:2379
    public-ip: 192.168.0.11
    metadata: "role=workers,cabinet=two"
  flannel:
    interface: 192.168.0.11
  units:
  - name: etcd2.service
    command: start
  - name: fleet.service
    command: start
  - name: docker.service
    command: start
  - name: timezone.service
    command: start
    content: |
      [Unit]
      Description=timezone
      [Service]
      Type=oneshot
      RemainAfterExit=yes
      ExecStart=/usr/bin/ln -sf ../usr/share/zoneinfo/Japan /etc/localtime
  - name: 10-static.network
    runtime: false
    content: |
      [Match]
      Name=enp0s3

      [Network]
      Address=192.168.0.11/24
      DNS=8.8.8.8
      DNS=8.8.4.4

ssh_authorized_keys:
- ssh-rsa ※ご自身の公開鍵

users:
- name: coreuser
  passwd: $1$VIyj3wZe$HVVOEAc/H6a6YZGKCBWSD/
  groups:
  - sudo
  - docker
  ssh-authorized-keys:
  - ssh-rsa ※ご自身の公開鍵


위를 "어드레싱"에 있는 hostname과 IP 주소를 맞춥니다.



cloud-config.yml 로드 수행



cloud-init

sudo coreos-cloudinit -from-file=./cloud-config.yml
sudo cp -a cloud-config.yml /var/lib/coreos-install/user_data
sudo reboot


※cloud-init 커멘드로 반영되지 않는 부분이 있으므로, 직접 user_data도 재기록해 둡니다.

etcdctl cluster-health 확인



cluster-health
etcdctl cluster-health
member 59d0611e956db7d1 is healthy: got healthy result from http://192.168.0.20:2379
member 6fb0d145a155e8ee is healthy: got healthy result from http://192.168.0.30:2379
member 7a0fb1a3031d4c79 is healthy: got healthy result from http://192.168.0.10:2379

위에서 언급했듯이 클러스터 된 IP가 표시되면 문제가 없습니다.

fleetctl 확인



fleetctl
ssh [email protected]

fleetctl list-machines --full
5b1639bd3cc347cf8fac0b9f597369e3    192.168.0.10    cabinet=one,role=services
6d28316711484f039eca4408627fdb0c    192.168.0.11    cabinet=two,role=workers

··· 본래라면 클러스터 및 worker도 전부 나올 것입니다만. . .

조사해 보면 다음 기사가 나왔습니다.

CoreOS 입문

또한 etcd의 name 속성은 고유해야 하기 때문에 주의해야 한다.
약어하면 기계 ID가 사용됩니다. 머신 ID는/etc/machine_id 에서 확인할 수 있다. 머신 ID는 환경을 작성하면 고정화되어 버리므로 qemu의 img나 vm을 사용해 주면 머신 ID가 변함없이 올바르게 클러스터를 구축할 수 없기 때문에 주의할 것.
루트를 마운트하여/etc/machine_id 를 삭제하고 재생성시키는 방법도 있다.

과연. . .

그래서 모든 서버에 액세스하고 다음 명령을 실행했습니다.

machinid_rename
ssh 192.168.0.10
sudo mv /etc/machine-id /etc/machine-id.bk
sudo reboot
#この動作を全てのサーバーに

다시 fleetctl 표시 확인



fleetctl
fleetctl list-machines --full
MACHINE                 IP      METADATA
4fb30e282c004f1794df9e91e56b14fb    192.168.0.31    cabinet=two,role=workers
5b1639bd3cc347cf8fac0b9f597369e3    192.168.0.10    cabinet=one,role=services
6d28316711484f039eca4408627fdb0c    192.168.0.11    cabinet=two,role=workers
703c849bcb924af5891ca5aae95e4e89    192.168.0.21    cabinet=two,role=workers
a6776a02935e4f01857364587836e338    192.168.0.20    cabinet=one,role=services
fffe34c5dcfa4aabbb1ba684101e521e    192.168.0.30    cabinet=one,role=services


6대분의 서버가 표시되게 되었습니다!

이제 CoreOS+etcd2+fleet을 사용하여 클러스터링 구성을 완료했습니다.

이번에 vagarant를 이용하지 않은 것에 대해



에서 이미 vagrant의 box 및 프로비저닝 파일이 배포되고 있습니다만, 우리 쪽에서 이하의 사건을 확인했습니다.

1. $num_instance를 3으로 실행하고 coreos를 vagrant up으로 부팅하면 문제없이 클러스터 구성에서 UP됩니다.
2. 클러스터가 정상적인지 확인하기 위해 vagrant halt**에서 특정 단말기를 떨어뜨리고 vagrant up | vagrant resume로 부팅해도 IP 주소가 바뀝니다. ※user_data가 보존되지 않음
3.user_data를 작성하기 위해 cloud-init/coreos-install해도 역시 휘발성이 있어 검증을 할 수 없었다.

나의 vagrant의 사용법이 좋지 않았다고 생각합니다만, 상기의 이벤트가 일어나 버렸기 때문에 단념하고 있습니다.
※단, vagrant로 이용할 수 있으면 cloud-config.yml에 기재되어 있는 IP주소등을 $public_ipv4등 변수에 옮겨놓을 수도 있으므로 매우 편리합니다.

This was intended but we should probably revise it if folks are depending on the old contents of/etc/environment. For EC2/OpenStack instances we moved the detection of $public_ipv4 and $private_ipv4 directly into coreos-cloudi both EC2-style metadata services and config drive. The old/usr/share/oem/bin/coreos-setup-environment shipped with those images hung if no metadata service was available, breaking config drive based OpenStack systems.

다음 번



본 구성을 기본 구성으로 fleetctl을 사용한 Unit, docker의 배치 방법과 failover의 내용을 접하고 싶습니다.

참고



CoreOS 입문

좋은 웹페이지 즐겨찾기