LoginSignup
6
5

More than 5 years have passed since last update.

Mac + Virtualbox + CoreOS + etcd2 + fleet の基本設定(完)

Last updated at Posted at 2015-09-23

CoreOSクラスタ構築 3台 + Worker 3台構成

前提

coreosクラスタ構築 3台構成
が出来ていること

目指す構成

cluster02.png

アドレッッシング

環境 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の設定を行っていきます。

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 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も全部出てくるはずなのですが。。。

調べてみると以下の記事が出てきました。

CoreOS 入門

また etcd の name 属性はユニークである必要があるので注意すること。
略するとマシンIDが使われる。マシンIDは /etc/machine_id で確認できる。マシンIDは環境を作成すると固定化されてしまうのでqemuのimgやvmを使いまわすとマシンIDが変わらず正しくクラスタが構築できないので注意すること。
rootをマウントして /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-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の内容に触れていきたいと思います。

参考

CoreOS入門

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5