FIWARE Docker Container Service インストール&管理ガイド

デプロイ手順

この節では、OpenStack に FIWARE Docker Container Service (FDCS) を手動でデプロイする手順について説明します。要約すると、FDCS はマルチテナント Swarm です。マルチテナント Swarm manager が Swarm 管理ノードとして動作しているノードと、Docker エンジンが Docker ノードとして動作しているノードを参照します。次の手順が必要です :

1. Swarm 管理ノード、Swarm クラスタの Dockerノード、および NFSサーバにアクセスするために使用される SSH 鍵ペアを作成します

2. Swarm 管理ノード用のセキュリティ・グループを作成します。Swarm 管理ポート、SSH ポート、および Ping へのパブリックアクセスを許可するコンテナ・ルール。例えば:

service IP Protocol From Port To Port Source
SSH TCP 22 22 0.0.0.0/0 (CIDR)
Ping ICMP 0 0 0.0.0.0/0 (CIDR)
Swarmp Manager TCP 2376 2376 0.0.0.0/0 (CIDR)

3. Swarm 管理ノードの VM インスタンスを作成します。セキュリティ・グループと鍵のペアに関連付けます。Swarm 管理ノードに Docker をインストールします。これはマルチテナント Swarm のDocker イメージを起動するために使用されます。

4. Dockerノード用のセキュリティ・グループを作成します。このコンテナ・ルールは、SSH ポート、Ping、および Docker の自動割り当てポートへのパブリック・アクセスを許可するためのルールです。Docker の自動割り当てポートは、Docker が Docker コマンドで特に指定されていないときに外部ポートと同様に自動的にコンテナに割り当てられるポートです。また、Swarm 管理ノードから Docker ポートへの排他的アクセスのルールもコンテナに収められています。Swarm 管理ノードのパブリック IP を使用します。最後に、プライベート・ネットワークを介したクラスタの Docker ホストのノード間の相互作用によって、ユーザ定義オーバーレイ・ネットワークをサポートできます。

service IP Protocol From Port To Port Source
SSH TCP 22 22 0.0.0.0/0 (CIDR)
Ping ICMP 0 0 0.0.0.0/0 (CIDR)
Docker Engine TCP 2375 2375 Swarm Manager Public IP/32 (CIDR)
Docker Containers auto assigned by docker engine TCP/UDP 32768 61000 0.0.0.0/0 (CIDR)
Docker Overlay Network Control Plane TCP/UDP 7946 7946 Cluster's private network
Docker Overlay Network Data Plane UDP 4789 4789 Cluster's private network

5. Docker ノードを作成します。それらをセキュリティ・グループと ssh 鍵ペアに関連付けます。すべての Docker ノード・インスタンスに Docker をインストールしますdocker documentation の手順にしたがって、swap cgroup メモリ制限を有効にします。

6. NFS サーバのセキュリティ・グループを作成します。これには、クラスタの Docker ホストが NFS ボリュームをマウントし、管理者のために ssh アクセスできるようにするルールが含まれています。

service IP Protocol From Port To Port Source
SSH TCP 22 22 0.0.0.0/0 (CIDR)
Ping ICMP 0 0 0.0.0.0/0 (CIDR)
NFS Server TCP 2049 2049 Cluster's private network
NFS Server UDP 2049 2049 Cluster's private network

7. NFS サーバを作成します。 セキュリティ・グループと鍵のペアに関連付けます。

8. NFS サーバをインストール、設定、起動します。

8.1. NFS サーバをインストール

apt-get install nfs-kernel-server

8.2. Docker ノードに Docker ボリュームをマウントするためのディレクトリを作成します :

sudo mkdir /var/lib/openstorage/nfs
sudo mkdir /var/lib/osd/mounts

8.3. '/etc/hosts/' に、Docker ボリューム・ディレクトリへの Docker ノードへのアクセスを許可します。例えば :

/var/lib/openstorage/nfs cluster private network(rw,sync,no_subtree_check,no_root_squash)
/var/lib/osd/mounts cluster private network/24(rw,sync,no_subtree_check,no_root_squash)

8.4. NFS サーバを起動します :

sudo service nfs-kernel-server restart

9. Key-Value ストア・サーバのセキュリティ・グループを作成します。ssh アクセスと Docker ノードのサービスのためのルールが含まれています。Key-Value ストアは、Docker Overlay Networksと NFS Plugin ドライバをサポートするために使用されます。

service IP Protocol From Port To Port Source
SSH TCP 22 22 0.0.0.0/0 (CIDR)
Ping ICMP 0 0 0.0.0.0/0 (CIDR)
Key-Value Store Server's listening ports TCP 2049, 4001, etc. 2049, 4001, etc. Cluster's private network

10. Key-Value ストア・サーバを作成します。セキュリティ・グループと鍵のペアに関連付けます

11. Key-Value ストア・サーバのインストール、設定、起動 :

この例では etcd を使用しますが、consulZooKeeper も使用できます。

11.1. Dockerのインストール

11.2. Dockerコンテナとして etcd を実行する

 sudo docker run -d --restart always -v /etcd0.etcd:/etcd0.etcd -v /usr/share/ca-certificates/:/etc/ssl/certs -p 4001:4001 -p 2380:2380 -p 2379:2379 --name etcd quay.io/coreos/etcd etcd  -name etcd0  -advertise-client-urls http:// key-value server internal network ip:2379,http://192.168.209.52:4001  -listen-client-urls http://0.0.0.0:2379,http://0.0.0.0:4001  -initial-advertise-peer-urls http:// key-value server internal network ip:2380  -listen-peer-urls http://0.0.0.0:2380  -initial-cluster-token etcd-cluster-1  -initial-cluster etcd0=http:// key-value server internal network ip:2380  -initial-cluster-state new

12. すべてのクラスタの Docker ホストで Docker エンジンのデーモンを起動します。クラスタは、ユーザ定義のオーバーレイ・ネットワークと NFS ボリュームをサポートします。上記の Docker ノードのセキュリティ・グループを作成したときに指定されたポートで待機するようにエンジンを設定し、Docker オーバーレイ・ネットワークをサポートするために key-value ストアと対話します。また、デバッグを簡略化するために、Linux ファイルソケットで待機することも許可する必要があります。

12.1. DOCKER_OPTS="-H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375 --icc=false --cluster-store=etcd://key-value store ip:port --cluster-advertise=docker node ip:2375" で、/etc/default/docker を更新します

12.2. Docker をサービスとして再起動します :

sudo service docker restart

12.3. ユーザー定義のNFSボリュームをサポートするために、OpenStorage Docker ボリュームプラグインドライブを設定して起動します。

12.3.1. yaml 設定ファイル を作成します

12.3.2. NFS クライアントをインストールします

sudo apt-get install common-nfs

12.3.3. NFS をディレクトリにマウントします : /var/lib/openstorage/nfs and /var/lib/osd/mounts /var/lib/osd/mounts 。例えば :

sudo mount -t nfs -o proto=tcp,port=2049 nfs server ip:/var/lib/openstorage/nfs /var/lib/openstorage/nfs
sudo mount -t nfs -o proto=tcp,port=2049 nfs server ip:/var/lib/osd/mounts /var/lib/osd/mounts

12.3.4. マウントを確認します :

sudo df -P -T /var/lib/openstorage/nfs  | tail -n +2 | awk '{print $2}'
nfs
sudo df -P -T /var/lib/osd/mounts  | tail -n +2 | awk '{print $2}'
nfs

12.3.5. Dokcer コンテナとしてドライバを起動します :

sudo docker run  -d --restart always   --privileged -v /tmp:/tmp -v /var/lib/openstorage/:/var/lib/openstorage/ -v /var/lib/osd/:/var/lib/osd/   -v /run/docker/plugins:/run/docker/plugins  -v /var/lib/docker:/var/lib/docker --name osd openstorage/osd -d -f /tmp/config_nfs.yaml --kvdb etcd-kv://key-value store ip:port/

13. Swarm の設定:FDCS は環境変数を設定することで設定できます。FDCS 環境変数について簡単に説明します :

  • SWARM_ADMIN_TENANT_ID: Docker コマンドを admin として実行できるテナントの ID を含みます。管理者は、テナント・コンテナ、ボリューム、ネットワークなどの Docker リソースを管理し、フィルタリングなしですべての Docker リクエストを発行することができます
  • SWARM_APIFILTER_FILE: サービスのインストールが除外したい Docker のコマンドを記述する json ファイルを指定しています。ファイルが指されていない場合、デフォルトでは swarm が起動しているディレクトリの apifilter.json になります。現在、無効にするコマンドのカンマ区切りのリストを含む disableapi 配列のみサポートします。これは、インストールによってネットワークのサポートが無効になる例です。
{
  "disableapi": [ networkslist, networkinspect, networkconnect, networkdisconnect, networkcreate, networkdelete ]
}
  • SWARM_AUTH_BACKEND: Keystone に設定されている場合、Keystone は、Docker がリクエストヘッダ内の認可トークンとテナント ID に基づいてリクエストするテナントを認証するために使用されます
  • SWARM_ENFORCE_QUOTA: true に設定すると、マルチテナント Swarm クォータ機能が有効になり、それ以外の場合は無効になります。クォータの指定方法については、SWARM_QUOTA_FILE を参照してください
  • SWARM_FLAVORS_ENFORCED: true に設定すると、マルチテナント Swarm フレーバが有効になります。それ以外の場合は無効になります。フレーバ指定は、コンテナ・リクエストの作成に現れる可能性のある有効なリソースの組み合わせを記述したマップを含む json ファイルで具体化されています。現在、メモリはフレーバとして指定できる唯一のリソースです。メモリ・リソースは、メガバイトのメモリを表す整数として指定する必要があります。フレーバの指定方法については、SWARM_FLAVORS_FILE を参照してください
  • SWARM_FLAVORS_FILE: SWARM_FLAVORS_ENFORCEDtrue に設定されている場合、SWARM_FLAVORS_FILE はフレーバ指定のファイルを指します。指定されているファイルがない場合は、swarm が開始されているディレクトリの flavors.json がデフォルトになります。指定には"デフォルト"フレーバが含まれていなければなりません。コンテナの作成パラメータが指定されたフレーバのいずれとも一致しない場合、元のパラメータを置き換えるデフォルトのフレーバが作成コンテナに適用されます。これは、マルチテナン Swarm に同梱されている json フレーバ指定の例です :
{
  "default":{
   "Memory": 64
  },
  "medium":{
   "Memory": 128
  },
  "large":{
   "Memory": 256
  }

}

上記のフレーバ指定の例では、default、medium、および large の3つのフレーバがあります。default は 64メガバイトのメモリを表します。medium は1 28メガバイトのメモリを表します。large は 256メガバイトのメモリを表します。これは、作成コンテナがメモリを 64MB、128MB、または 256MBに指定することに限定されていることを意味します。何も指定されていない場合、システムはデフォルトの 64MBを適用します。

  • SWARM_KEYSTONE_URL: SWARM_AUTH_BACKENDKeystone に設定されている場合、SWARM_KEYSTONE_URL は Keystone の URL を指定する必要があります (例 : http://cloud.lab.fi-ware.org:4730/v2.0/)
  • SWARM_NETWORK_AUTHORIZATION: false に設定されている場合、マルチテナント Swarm ネットワーク認証機能は無効になります。そうでない場合は有効になります。
  • SWARM_MEMBERS_TENANT_ID: メンバがサービスを利用できるテナント ID を含みます。設定されていない場合、任意の有効なトークンのテナント ID がサービスを使用することができます。SWARM_MEMBERS_TENANT_ID は、SWARM_AUTH_BACKEND が Keystone に設定されている場合にのみ有効です。
  • SWARM_MULTI_TENANT: false に設定されている場合、マルチテナント Swarm は無効になります。そうでない場合はマルチテナント Swarm が有効になります。マルチテナント Swarmが無効になると、サービスはバニラ Swarm として開始されます。一般的にマルチテナント Swarmを無効にするのは、バグが Swarm Docker設定またはマルチテナント Swarm機能に関連しているかどうかを検出するためにデバッグ目的で使用されます。
  • SWARM_QUOTA_FILE: SWARM_ENFORCE_QUOTAtrue に設定されている場合、SWARM_QUOTA_FILE はクォータ設定を指定できます。ポイントされているファイルがない場合、デフォルトでは swarm が起動されているディレクトリに quota.json があります。現在、クォータのサポートはテナントのメモリ消費に限られており、すべてのテナントで同じです。これは json のクォータの仕様例です :
{
   "Memory": 300
}

14. Swarm 管理ノードで、マルチテナント Swarm 管理デーモン(TLSなし)を起動します。マルチテナント Swarm Docker イメージは、fiware/swarm_multi_tenantの FIWARE Docker Hub リポジトリにあります。トークン検出を使用する場合は、検出フラグを追加します。ファイルフラグを使用して、すべての Docker ノードのパブリック ips と Docker ポートのリストを含むファイルを指定します。例:

docker run -t -p 2376:2375 -v /tmp/cluster.ipstmp/cluster.ips -e SWARM_AUTH_BACKEND=Keystone -e SWARM_KEYSTONE_URL=http://cloud.lab.fi-ware.org:4730/v2.0/ -t fiware/swarm_multi_tenant:v0 --debug manage file:///tmp/cluster.ips

15. すべてのインスタンス(Swarm 管理ノードを含む)に対して pingssh を実行することにより、クラスタのリモート接続をテストします

16. ローカルの Docker クライアントで docker コマンドを使用して、マルチテナント Swarm クラスタが期待通りに機能するかどうかをテストします。docker -H フラグは、Swarm 管理ノードとSwarm ポートを指定します。docker -config は、有効なトークンと有効なテナント idでconfig.json ファイルが準備されているディレクトリを指定します。例 :

docker –H tcp://<Swam Manager Node IP>:2376  --config $HOME/dir docker command

サービスの使用方法の詳細については、"FIWARE Docker Container Service ユーザズ・ガイド"を参照してください。

Docker ヘルプの取得