このセクションでは、Kubernetes クラスタ上の Pod リソースの削除と更新の方法について紹介します。

リソースの削除

Master サーバーから Kubernetes クラスタ上の Pod の稼働状況を確認します。ここでは、sample-pod の名前の Pod が稼働していることが確認できます。

[root@kube-master ~]# kubectl get pods
NAME         READY   STATUS    RESTARTS   AGE
sample-pod   1/1     Running   0          37m
[root@kube-master ~]# 

Master サーバーから sample-pod の Pod リソースを削除します。下記コマンドで削除が失敗する場合には、下記コマンド の後ろにオプション – – grace-period 0 – – force を付けて実行すると強制的に即時に削除されます。

[root@kube-master ~]# kubectl delete pods sample-pod
pod "sample-pod" deleted
[root@kube-master ~]# 

Master サーバーから Kubernetes クラスタ上の Pod の稼働状況を確認します。ここでは、sample-pod の名前の Pod が存在していないことが確認できます。

[root@kube-master ~]# kubectl get pods
No resources found.
[root@kube-master ~]# 

Pod リソースが稼働していた kube-work2 の Node サーバーで、docker イメージを確認します。ここでは、 nginx のイメージが存在していないことが確認できます。

[root@kube-work2 ~]# docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
k8s.gcr.io/kube-proxy    v1.13.1             fdb321fd30a0        3 weeks ago         80.2MB
k8s.gcr.io/coredns       1.2.6               f59dcacceff4        2 months ago        40MB
nginx                    1.12                4037a5562b03        8 months ago        108MB
quay.io/coreos/flannel   v0.10.0-amd64       f0fad859c909        11 months ago       44.6MB
k8s.gcr.io/pause         3.1                 da86e6ba6ca1        12 months ago       742kB
[root@kube-work2 ~]# 

Pod リソースが稼働している kube-work2 の Node サーバーで、コンテナの稼働状況を確認します。ここでは、 nginx のコンテナが存在していないことが確認できます。

[root@kube-work2 ~]# docker ps
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS               NAMES
b6b0ecf61d9d        f0fad859c909           "/opt/bin/flanneld -…"   6 hours ago         Up 6 hours                              k8s_kube-flannel_kube-flannel-ds-amd64-w64mv_kube-system_fc268074-1093-11e9-94ad-525400bc2a02_0
93c2a0827484        fdb321fd30a0           "/usr/local/bin/kube…"   6 hours ago         Up 6 hours                              k8s_kube-proxy_kube-proxy-k76gv_kube-system_fc269cf7-1093-11e9-94ad-525400bc2a02_0
b9b608d6b23a        k8s.gcr.io/pause:3.1   "/pause"                 6 hours ago         Up 6 hours                              k8s_POD_kube-proxy-k76gv_kube-system_fc269cf7-1093-11e9-94ad-525400bc2a02_0
93f7ab33300b        k8s.gcr.io/pause:3.1   "/pause"                 6 hours ago         Up 6 hours                              k8s_POD_kube-flannel-ds-amd64-w64mv_kube-system_fc268074-1093-11e9-94ad-525400bc2a02_0
[root@kube-work2 ~]# 

リソースの更新

Master サーバーから sample-pod の 詳細情報を確認します。ここでは、 kube-work1 の Node サーバー上で nginx:1.12 のイメージでコンテナが作成され稼働していることが確認できます。

[root@kube-master ~]# kubectl describe pods sample-pod
Name:               sample-pod
Namespace:          default
Priority:           0
PriorityClassName:  <none>
Node:               kube-work1/192.168.25.101
Start Time:         Sat, 05 Jan 2019 18:02:00 +0900
Labels:             <none>
Annotations:        kubectl.kubernetes.io/last-applied-configuration:
                      {"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{},"name":"sample-pod","namespace":"default"},"spec":{"containers":[{"image":"ng...
Status:             Running
IP:                 10.244.1.91
Containers:
  nginx-container:
    Container ID:   docker://8cc775afcb53f40f49320149f0f8f0f06d9a0c1b3720dca248e75e9c88839732
    Image:          nginx:1.12
    Image ID:       docker-pullable://nginx@sha256:72daaf46f11cc753c4eab981cbf869919bd1fee3d2170a2adeac12400f494728
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Sat, 05 Jan 2019 18:02:01 +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  5s    default-scheduler    Successfully assigned default/sample-pod to kube-work1
  Normal  Pulled     4s    kubelet, kube-work1  Container image "nginx:1.12" already present on machine
  Normal  Created    4s    kubelet, kube-work1  Created container
  Normal  Started    4s    kubelet, kube-work1  Started container
[root@kube-master ~]# 

サンプルのマニフェストを新規作成し、下記編集します。

[root@kube-master ~]# vi manifest/sample-pod.yaml 

Pod 上のコンテナイメージを nginx:1.12 から nginx:1.13 に変更します。

apiVersion: v1
kind: Pod
metadata:
  name: sample-pod
spec:
  containers:
    - name: nginx-container
      image: nginx:1.13

Master サーバーから変更したサンプルマニフェストを実行し、Kubernetes クラスタに Pod リソースを更新します。

[root@kube-master ~]# kubectl apply -f manifest/sample-pod.yaml 
pod/sample-pod configured
[root@kube-master ~]# 

Master サーバーから sample-pod の 詳細情報を確認します。ここでは、 kube-work1 の Node サーバー上でコンテナイメージが nginx:1.13 に更新されていることが確認できます。

[root@kube-master ~]# kubectl describe pods sample-pod
Name:               sample-pod
Namespace:          default
Priority:           0
PriorityClassName:  <none>
Node:               kube-work1/192.168.25.101
Start Time:         Sat, 05 Jan 2019 18:02:00 +0900
Labels:             <none>
Annotations:        kubectl.kubernetes.io/last-applied-configuration:
                      {"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{},"name":"sample-pod","namespace":"default"},"spec":{"containers":[{"image":"ng...
Status:             Running
IP:                 10.244.1.91
Containers:
  nginx-container:
    Container ID:   docker://8cc775afcb53f40f49320149f0f8f0f06d9a0c1b3720dca248e75e9c88839732
    Image:          nginx:1.13
    Image ID:       docker-pullable://nginx@sha256:72daaf46f11cc753c4eab981cbf869919bd1fee3d2170a2adeac12400f494728
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Sat, 05 Jan 2019 18:02:01 +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  4m2s  default-scheduler    Successfully assigned default/sample-pod to kube-work1
  Normal  Pulled     4m1s  kubelet, kube-work1  Container image "nginx:1.12" already present on machine
  Normal  Created    4m1s  kubelet, kube-work1  Created container
  Normal  Started    4m1s  kubelet, kube-work1  Started container
  Normal  Killing    18s   kubelet, kube-work1  Killing container with id docker://nginx-container:Container spec hash changed (2625125644 vs 3322312453).. Container will be killed and recreated.
  Normal  Pulling    18s   kubelet, kube-work1  pulling image "nginx:1.13"
[root@kube-master ~]#