このセクションでは、Kubernetes クラスタ上で複数のコンテナを含む Pod を作成する方法について紹介します。

サンプルのマニフェストファイルを新規作成し、以下コードを記述します。

[root@kube-master sample-multicontainer]# vi sample-multicontainer.yaml 

containers に複数のコンテナ情報を記述します。ここでは、nginxのコンテナと redis のコンテナを記述しています。

apiVersion: v1
kind: Pod
metadata:
  name: sample-multicontainer
spec:
  containers:
    - name: nginx-container
      image: nginx:1.13
    - name: redis-container
      image: redis:3.2

Master サーバーから 作成したマニフェストを実行し、Kubernetes クラスタ上にリソースを作成します。

[root@kube-master sample-multicontainer]# kubectl apply -f sample-multicontainer.yaml 
pod/sample-multicontainer created
[root@kube-master sample-multicontainer]# 

Master サーバーから Kubernetes クラスタ上のリソースを確認します。 sample-multicontainer という名前の Pod に 2つのコンテナ( 2/2 )が稼働していることが確認できます。

[root@kube-master sample-multicontainer]# kubectl get pod
NAME                    READY   STATUS    RESTARTS   AGE
sample-multicontainer   2/2     Running   0          32s
[root@kube-master sample-multicontainer]# 

Master サーバーから Pod リソースの詳細情報を確認します。ここでは、sample-multicontainer の Pod 内で nginx のコンテナと redis のコンテナが稼働していることが確認できます。

[root@kube-master sample-multicontainer]# kubectl describe pod sample-multicontainer
Name:               sample-multicontainer
Namespace:          default
Priority:           0
PriorityClassName:  <none>
Node:               kube-work1/192.168.25.101
Start Time:         Sun, 13 Jan 2019 20:49:33 +0900
Labels:             <none>
Annotations:        kubectl.kubernetes.io/last-applied-configuration:
                      {"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{},"name":"sample-multicontainer","namespace":"default"},"spec":{"containers":[{...
Status:             Running
IP:                 10.244.1.118
Containers:
  nginx-container:
    Container ID:   docker://3a5a924c50bbaf4927b32a1b48abc97993fe6a88aade43c8ca2a5e9fcbf1288a
    Image:          nginx:1.13
    Image ID:       docker-pullable://nginx@sha256:b1d09e9718890e6ebbbd2bc319ef1611559e30ce1b6f56b2e3b479d9da51dc35
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Sun, 13 Jan 2019 20:49:34 +0900
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-75dfq (ro)
  redis-container:
    Container ID:   docker://5f6c963ddeebed7907a66e37beb3e8e0d0318c7bc4afb35abef9f0196b0b8689
    Image:          redis:3.2
    Image ID:       docker-pullable://redis@sha256:7b0a40301bc1567205e6461c5bf94c38e1e1ad0169709e49132cafc47f6b51f3
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Sun, 13 Jan 2019 20:49:46 +0900
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-75dfq (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  default-token-75dfq:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-75dfq
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type    Reason     Age    From                 Message
  ----    ------     ----   ----                 -------
  Normal  Scheduled  9m34s  default-scheduler    Successfully assigned default/sample-multicontainer to kube-work1
  Normal  Pulled     9m34s  kubelet, kube-work1  Container image "nginx:1.13" already present on machine
  Normal  Created    9m33s  kubelet, kube-work1  Created container
  Normal  Started    9m33s  kubelet, kube-work1  Started container
  Normal  Pulling    9m33s  kubelet, kube-work1  pulling image "redis:3.2"
  Normal  Pulled     9m21s  kubelet, kube-work1  Successfully pulled image "redis:3.2"
  Normal  Created    9m21s  kubelet, kube-work1  Created container
  Normal  Started    9m21s  kubelet, kube-work1  Started container
[root@kube-master sample-multicontainer]#