2015年12月3日木曜日

CoreOS flannelでホスト間通信を行う

etcd2でクラスタ構成後、複数CoreOSのコンテナ間で通信できるようにflannelを使用します。
設定は簡単で以下のURLに従ってcloud-config.ymlに追記するだけです。

参考URL
https://coreos.com/flannel/docs/latest/flannel-config.html

そのままconfigコピーで行けました。


coreos:
  units:
    - name: flanneld.service
      drop-ins:
        - name: 50-network-config.conf
          content: |
            [Service]
            ExecStartPre=/usr/bin/etcdctl set /coreos.com/network/config '{ "Network": "10.1.0.0/16" }'
      command: start

    - name: redis.service
      content: |
        [Unit]
        Requires=flanneld.service
        After=flanneld.service

        [Service]
        ExecStart=/usr/bin/docker run redis
        Restart=always
      command: start



dockerサービスが起動する前に起動する必要があるとの記載があったため
   - name: docker.service
より上にconfigをコピーします。


#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: flanneld.service
      drop-ins:
        - name: 50-network-config.conf
          content: |
            [Service]
            ExecStartPre=/usr/bin/etcdctl set /coreos.com/network/config '{ "Network": "10.1.0.0/16" }'
      command: start

    - name: redis.service
      content: |
        [Unit]
        Requires=flanneld.service
        After=flanneld.service
        [Service]
        ExecStart=/usr/bin/docker run redis
        Restart=always
      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"



すでにCoreOSでDockerが起動しているのでホストを再起動します。
再起動するとredisというコンテナが作成されていました。
flannelはコンテナとして動作するのですね。

コンテナを新規作成後ipアドレスを確認すると[10.0.0.0/16]セグメントでIPアドレスが割り当てられていました。
コンテナはもちろんCoreOSからでもpingが通ります。


0 件のコメント:

コメントを投稿