2015年11月26日木曜日

CoreOSでクラスタ構成を組む準備をする(etcd2 + fleet)



以下、参考URL

https://coreos.com/os/docs/latest/cloud-config.html
https://coreos.com/os/docs/latest/cluster-discovery.html

「共有ディスクもなしにクラスタなんてどうやるの?」と典型的なインフラエンジニアの思考をしていたため
理解に時間がかかりました・・・。

①コンテナをサービス化することでCoreOSホスト障害時に他のCoreOSでサービス化したコンテナを動かす。
②サービス化したコンテナはDocker pullでコンテナをダウンロードしてから起動する
という理解でしょうか。
いうまでもなくデータセンター向きですねDocker

etcd2とfleetの役割ですがetcd2が複数のCoreOSを束ねてfleetが束ねたCoreOS群を管理、コンテナを起動するイメージ
でしょうか。
https://coreos.com/using-coreos/clustering/


【事前準備】
クラスタ管理するためのディスカバリの仕組みを構成します。
ディスカバリサーバによって動的にクラスタが構成されるため容易にクラスタ管理が可能となります。
従来はクラスタ追加、削除に一苦労でしたがこれは便利ですね。
ディスカバリサーバは自前構築も可能ですがCoreOSでサービス提供されているのでこちらを使います。
以下コマンドを実行するのみ


curl -w "\n" 'https://discovery.etcd.io/new?size=3'


上記コマンド実行結果を後述するcloud-configに記載します。

今回はVMwarePlayerでCoreOS3台を構築してクラスタ構成を組みます。
VMwarePlayerでのCoreOSの作り方は以下を参照ください。
http://qiita.com/umchifre/items/3ed0d1e5fea53f3fcc61

cloud-configは以下のようになります。
 [1-3]はCoreOS3台でそれぞれ置き換えてください。(IPアドレス、ホスト名)
 discovery: にて下記コマンド結果のURLを貼り付けてください
  curl -w "\n" 'https://discovery.etcd.io/new?size=3'
 listen-client-urls: は0.0.0.0でOKです。


#cloud-config

hostname: core[1-3]
coreos:
  units:
    - name: vmtoolsd.service
      command: start
      content: |
        [Unit]
        Description=VMware Tools Agent
        Documentation=http://open-vm-tools.sourceforge.net/
        ConditionVirtualization=vmware

        [Service]
        ExecStartPre=/usr/bin/ln -sfT /usr/share/oem/vmware-tools /etc/vmware-tools
        ExecStart=/usr/share/oem/bin/vmtoolsd
        TimeoutStopSec=5

    - name: 10-static.network
      runtime: no
      content: |
        [Match]
        Name=eno16777984

        [Network]
        Address=192.168.1.[1-3]/24
        Gateway=192.168.1.254
        DNS=192.168.1.1
    - name: etcd2.service
      command: start
    - name: fleet.service
      command: start
    - name: docker.service
      command: start
  oem:
    bug-report-url: "https://github.com/coreos/bugs/issues"
    id: vmware
    name: VMWare
    version-id: "9.10.0-r1"
  etcd2:
    discovery: "[curl -w "\n" 'https://discovery.etcd.io/new?size=3']"
    advertise-client-urls: "http://192.168.1.[1-3]:2379"
    initial-advertise-peer-urls: "http://192.168.1.[1-3]:2380"
    listen-client-urls: "http://0.0.0.0:2379,http://0.0.0.0:4001"
    listen-peer-urls: "http://192.168.1.[1-3]:2380,http://192.168.1.[1-3]:7001"

  users:
   - name: core
     passwd: [生成された乱数]
     groups:
     - sudo
     - docker
     ssh-authorized-keys:

上記にて3台のCoreOSインストール後以下コマンドで正常にクラスタ構成されていることを確認します。


core@core01 ~ $ etcdctl cluster-health

member 71d3cca95eb7fd22 is healthy: got healthy result from http://192.168.1.1:2379
member a44a8c7958024a51 is healthy: got healthy result from http://192.168.1.2:2379
member c8b976e5dd43adfd is healthy: got healthy result from http://192.168.1.3:2379
cluster is healthy

core@core01 ~ $ fleetctl list-machines

MACHINE         IP              METADATA
1e0536bd...     192.168.1.2 -
708896cf...     192.168.1.2 -
c8fce403...     192.168.1.3 -


NGの場合はcloud-configが正常に稼働しているか確認するために構成ファイルを再読み込みしてみてください。
errorが記録される場合はNGです。


coreos-cloudinit --from-file=./usr/share/oem/cloud-config.yml


あとはコンテナをサービス化してfleetで登録するのみです。
それはまた後程・・・。

0 件のコメント:

コメントを投稿