Pod内のコンテナーで共有される情報にはIPやストレージがありますが、下記yamlファイルでPodを作成し検証しました。
apiVersion: v1beta3 kind: Pod metadata: labels: name: redis redis-sentinel: ""true"" role: master name: redis-master spec: containers: - name: master image: kubernetes/redis:v1 env: - name: MASTER value: ""true"" ports: - containerPort: 6379 resources: limits: cpu: ""1"" volumeMounts: - mountPath: /redis-master-data-1 name: data - name: sentinel image: kubernetes/redis:v1 env: - name: SENTINEL value: ""true"" ports: - containerPort: 26379 volumeMounts: - mountPath: /redis-master-data-2 name: data volumes: - name: data emptyDir: {}
このyamlファイルでPodを作成すると内部的にはコンテナーが3つ作成されます。そして、「22d8f822d44f」のコンテナーのみが「eth0」を持ち、他2つのコンテナーはこのeth0を共有する形で外部と通信します。
[root@ip-kubernetes]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES eed1da6d179f kubernetes/redis:v1 "sh -c /run.sh" 2 minutes ago Up 2 minutes k8s_sentinel.62d3959a_redis-master_default_e43859f1-05e6-11e5-9d75-0a30794a454d_6d5d5dff 11441ec66ee9 kubernetes/redis:v1 "sh -c /run.sh" 2 minutes ago Up 2 minutes k8s_master.d16ec183_redis-master_default_e43859f1-05e6-11e5-9d75-0a30794a454d_3753e6d4 22d8f822d44f gcr.io/google_containers/pause:0.8.0 "/pause" 2 minutes ago Up 2 minutes k8s_POD.39750b55_redis-master_default_e43859f1-05e6-11e5-9d75-0a30794a454d_af6f0593 [root@ip-kubernetes]# docker inspect --format '{{ .NetworkSettings.IPAddress }}' eed1da6d179f [root@ip-kubernetes]# docker inspect --format '{{ .NetworkSettings.IPAddress }}' 11441ec66ee9 [root@ip-kubernetes]# docker inspect --format '{{ .NetworkSettings.IPAddress }}' 22d8f822d44f 172.17.0.3 [root@ip-kubernetes]# curl http://172.17.0.3:6379 -ERR wrong number of arguments for 'get' command -ERR unknown command 'User-Agent:' -ERR unknown command 'Host:' -ERR unknown command 'Accept:' ^C [root@ip-kubernetes]# curl http://172.17.0.3:26379 -ERR unknown command 'GET' -ERR unknown command 'User-Agent:' -ERR unknown command 'Host:' -ERR unknown command 'Accept:' c^H^C
次に、ストレージの共有を確認しました。ストレージの共有は「volumeMounts:/volumes」オプションを設定することによって行われ、ホストのディスクスペースを使ってデータの共有を行います。
[root@ip-kubernetes]# docker exec -it eed1da6d179f bash root@redis-master:/data# ls /redis-master-data-1/ appendonly.aof root@redis-master:/data# echo "aaa" > /redis-master-data-1/201505291845.txt root@redis-master:/data# cat /redis-master-data-1/201505291845.txt aaa [root@ip-kubernetes]# docker exec -it 11441ec66ee9 bash root@redis-master:/data# echo "bbb" > /redis-master-data-2/201505291845.txt root@redis-master:/data# cat /redis-master-data-2/201505291845.txt bbb
共有のディスクスペースにあるファイルは双方のコンテナーから書き込みが可能です。また、双方のコンテナーからwhile文でテキストに大量の文字列を書き込んでみましたが、文字が混ざることなく排他的に書き込みが行われていました。
今回は、グーグルが開発するOSSの運用管理ツールを紹介しましたが、いかがでしたでしょうか。記事では基本的にKubernetes 0.17についての情報を扱いましたが、2015年7月21日にリリースされたKubernetes 1.0では、flannelがコンテナーでインストールされているようになるなど、設定が簡単になりました。また、監視機能に「Prometheus」が追加されています。
次回は、Kubernetesの管理サービスGoogle Container Engine(GKE)について解説します。
富山県出身。株式会社NTTデータに入社後、PostgresForestやHinemosの開発、保守、導入支援に携わり、今はHinemosのクラウドへの普及展開を進めている。休日は仕事を離れ、宝塚観劇のため日比谷や兵庫に訪れるなど趣味を満喫している。
Software Design plusシリーズ『Hinemos 統合管理[実践]入門』(共著:技術評論社)
Copyright © ITmedia, Inc. All Rights Reserved.