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 を使用しますが、consul と ZooKeeper も使用できます。
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_ENFORCED
がtrue
に設定されている場合、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_BACKEND
がKeystone
に設定されている場合、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_QUOTA
がtrue
に設定されている場合、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 管理ノードを含む)に対して ping
と ssh
を実行することにより、クラスタのリモート接続をテストします
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 ヘルプの取得¶
- FIWARE Docker Container Service Users Guide
- Docker homepage
- Docker Hub
- Docker blog
- Docker documentation
- Docker Getting Started Guide
- Docker code on GitHub
- Docker mailing list
- Docker on IRC: irc.freenode.net and channel #docker
- Docker on Twitter
- Get Docker help on StackOverflow
- Docker.com