Mac + Virtualbox + CoreOS + etcd2 + fleet の基本設定(完)
CoreOSクラスタ構築 3台 + Worker 3台構成
前提
coreosクラスタ構築 3台構成 が出来ていること
目指す構成
アドレッッシング
環境 | hostname | IPアドレス | meta |
---|---|---|---|
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台分クローンを実施していきます。 ※クローンの方法については、前回記事を参照ください
workerに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の読み込み実施
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の確認
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の確認
ssh core@192.168.0.10 fleetctl list-machines --full 5b1639bd3cc347cf8fac0b9f597369e3 192.168.0.10 cabinet=one,role=services 6d28316711484f039eca4408627fdb0c 192.168.0.11 cabinet=two,role=workers
・・・本来であればクラスタ及びworkerも全部出てくるはずなのですが。。。
調べてみると以下の記事が出てきました。
また etcd の name 属性はユニークである必要があるので注意すること。 略するとマシンIDが使われる。マシンIDは /etc/machine_id で確認できる。マシンIDは環境を作成すると固定化されてしまうのでqemuのimgやvmを使いまわすとマシンIDが変わらず正しくクラスタが構築できないので注意すること。 rootをマウントして /etc/machine_id を削除し、再生成させるという方法もある。
なるほど。。。
というところで全てのサーバーにアクセスし、以下のコマンドを実行しました。
ssh 192.168.0.10 sudo mv /etc/machine-id /etc/machine-id.bk sudo reboot #この動作を全てのサーバーに
再度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を利用しなかったことについて
https://github.com/coreos/coreos-vagrant
にて既に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-cloudinit so that it would work gracefully with 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の内容に触れていきたいと思います。