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 統合管理[実践]入門』(共著:技術評論社)
 所要時間わずか10分で「Docker」を体験しよう――Azureで始めるDocker入門
所要時間わずか10分で「Docker」を体験しよう――Azureで始めるDocker入門 Linux/OSSに不慣れでも大丈夫! WindowsでDockerを扱う際のポイント
Linux/OSSに不慣れでも大丈夫! WindowsでDockerを扱う際のポイント Docker代替のコンテナーランタイム「Rocket」をCoreOSが公開
Docker代替のコンテナーランタイム「Rocket」をCoreOSが公開 Docker、そしてCloud FoundryとPaaSの価値とは
Docker、そしてCloud FoundryとPaaSの価値とは レッドハットが発表したOpenShift Enterprise 3は「Dockerを知らなくても使える」基盤
レッドハットが発表したOpenShift Enterprise 3は「Dockerを知らなくても使える」基盤 米グーグルのDockerコンテナ管理サービスが一般提供開始
米グーグルのDockerコンテナ管理サービスが一般提供開始Copyright © ITmedia, Inc. All Rights Reserved.