このセクションでは、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 ~]#