-
[따배쿠] Controller - Deploymentkubernetes 2024. 12. 5. 09:27
Deployment
- ReplicaSet을 제어해주는 부모 역할
- ReplicaSet을 컨트롤해서 Pod 수 조절
- Deployment -> ReplicaSet -> Pod 순으로 컨트롤
- Deployment가 ReplicaSet을 Control하고, ReplicaSet이 Pod를 컨트롤
- 목적 : Pod 수 조절 & Rolling update & Rolling back
- Rolling update?
- 애플리케이션의 새로운 버전을 점진적으로 배포하는 방법으로, 서비스의 가용성을 유지하면서 업데이트를 수행할 수 있도록 돕습니다.
- kubectl set image deployment <deploy_name> <container_name> = <new_version_image>
- kubectl rollout history deployment <deploy_name> # 업데이트 히스토리 확인
- Rolling Back?
- 애플리케이션의 이전 버전으로 되돌리는 과정입니다. 이는 주로 새로운 버전의 배포 중에 문제가 발생했을 때 사용되며, 서비스의 가용성을 유지하면서 신속하게 안정적인 상태로 복구할 수 있도록 돕습니다.
- kubectl rollout undo deploy <deploy_name>
- Rolling update control
- kubectl rollout status deployment app-deploy # 업데이트 상태 확인
- kubectl rollout pause deployment app-deploy # 업데이트 중지
- kubectl rollout resume deployment app-deploy # 업데이트 재개
- Rolling update?
Deployment Definition
ReplicaSet과 Deployment definition의 차이점이 크게 없다. (kind만 달라짐)
즉, Deployment를 가지고도 Replicaset 운영하듯이 가능하다.
예시
# deploy-nginx.yaml 파일 작성
root@master:~/Getting-Start-Kubernetes/6# vi deploy-nginx.yaml apiVersion: apps/v1 kind: Deployment metadata: name: deploy-nginx spec: replicas: 3 selector: matchLabels: app: webui template: metadata: name: nginx-pod labels: app: webui spec: containers: - name: nginx-container image: nginx:1.14
# 생성 및 확인
root@master:~/Getting-Start-Kubernetes/6# kubectl create -f deploy-nginx.yaml deployment.apps/deploy-nginx created
root@master:~/Getting-Start-Kubernetes/6# kubectl get deploy,rs,pod NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/deploy-nginx 3/3 3 3 4m24s NAME DESIRED CURRENT READY AGE replicaset.apps/deploy-nginx-5f67dcf6d 3 3 3 4m24s NAME READY STATUS RESTARTS AGE pod/deploy-nginx-5f67dcf6d-b55l7 1/1 Running 0 4m24s pod/deploy-nginx-5f67dcf6d-fm58s 1/1 Running 0 4m24s pod/deploy-nginx-5f67dcf6d-s9wq9 1/1 Running 0 4m24s
이름만 보고도 유추 가능
pod의 부모가 replicaset, replicaset의 부모가 deployment
Deployment Rolling Update & Rolling back 기능
Flow
1. Deployment 배포 (replicas=3, nginx:1.14)
2. Deployment에 의해 Replicaset(xxx)가 만들어지고, Replicaset에 의해 pod 3개(nginx:1.14)가 만들어진다.
3. kubectl set image deployment app-deploy app=nginx:1.15 --record 명령어로 Rolling Update 요청
4. 새로운 Replicaset(yyy)이 만들어지고, 해당 Replicaset은 pod를 1개(nginx:1.15) 생성한다.
5. pod(nginx:1.15) 1개가 생성되면, Deployment는 Replicaset(xxx)의 갯수를 2개로 줄이면서, pod(nginx:1.14) 1개를 삭제한다.
(현재 pod는 1.14, 1.14, 1.15 이렇게 배포되어있는 상황)
6. 이제 Replicaset(yyy)의 갯수가 2개로 늘어난다. 이에 따라 pod가 (nginx:1.15) 1개 더 생성 되었다.
7. 다시 Replicaset(xxx)의 갯수가 1개로 줄어든다.
(현재 pod는 1.14, 1.15, 1.15 이렇게 배포되어있는 상황)
8. Replicaset(yyy)의 갯수가 3개로 늘어났고, pod가 (nginx:1.15) 1개 더 생성 되었다.
9. 다시 Replicaset(xxx)의 갯수가 0개로 줄어든다.
(현재 pod는 1.15, 1.15, 1.15 이렇게 배포되어있는 상황)
10. 이에 따라 서비스 운영 중에도 중단 없이 update가 가능하다.
예시 (Rolling update)
# deployment-exam1.yaml 파일 작성
apiVersion: apps/v1 kind: Deployment metadata: name: app-deploy spec: selector: matchLabels: app: webui replicas: 3 template: metadata: labels: app: webui spec: containers: - image: nginx:1.14 name: web ports: - containerPort: 80
# 생성 및 확인
root@master:~/Getting-Start-Kubernetes/6# kubectl create -f deployment-exam1.yaml --record deployment.apps/app-deploy created
--record 옵션은 업데이트 과정을 history로 기록합니당NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES app-deploy-5486c74cb4-8q2cs 0/1 ContainerCreating 0 1s <none> node1 <none> <none> app-deploy-5486c74cb4-qx625 1/1 Running 0 12s 192.168.104.45 node2 <none> <none> app-deploy-5486c74cb4-r4khm 1/1 Running 0 3s 192.168.166.184 node1 <none> <none> app-deploy-76b844f55f-7g2tx 1/1 Running 0 6m44s 192.168.166.182 node1 <none> <none> app-deploy-76b844f55f-m2g8m 0/1 Terminating 0 6m44s 192.168.104.44 node2 <none> <none>
새로운 pod가 생성됨과 동시에, 기존 pod는 종료됩니당
root@master:~/Getting-Start-Kubernetes/6# kubectl describe pod app-deploy-5486c74cb4-8q2cs Name: app-deploy-5486c74cb4-8q2cs Namespace: default Priority: 0 Service Account: default Node: node1/10.100.0.101 Start Time: Thu, 05 Dec 2024 02:08:53 +0000 Labels: app=webui pod-template-hash=5486c74cb4 Annotations: cni.projectcalico.org/containerID: 3bf28eca57348bbb3496a5cd8cc03ea90f9611e252db0b413fe6f5d0eeda7d7d cni.projectcalico.org/podIP: 192.168.166.185/32 cni.projectcalico.org/podIPs: 192.168.166.185/32 Status: Running IP: 192.168.166.185 IPs: IP: 192.168.166.185 Controlled By: ReplicaSet/app-deploy-5486c74cb4 Containers: web: Container ID: containerd://5b2780cd9f4410c564ebff4e11903d0149ffc524620b473be7aa6516a61e3b97 Image: nginx:1.15 Image ID: docker.io/library/nginx@sha256:23b4dcdf0d34d4a129755fc6f52e1c6e23bb34ea011b315d87e193033bcd1b68 Port: 80/TCP Host Port: 0/TCP State: Running Started: Thu, 05 Dec 2024 02:08:54 +0000 Ready: True Restart Count: 0 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-6gt5w (ro) Conditions: Type Status PodReadyToStartContainers True Initialized True Ready True ContainersReady True PodScheduled True Volumes: kube-api-access-6gt5w: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt ConfigMapOptional: <nil> DownwardAPI: true QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 41s default-scheduler Successfully assigned default/app-deploy-5486c74cb4-8q2cs to node1 Normal Pulled 40s kubelet Container image "nginx:1.15" already present on machine Normal Created 40s kubelet Created container web Normal Started 40s kubelet Started container web
describe 명령어로 확인 시, nginx:1.15 버전으로 잘 Rolling update가 된 것을 확인 가능합니당
# Rolling update 실행
kubectl set image deployment app-deploy web=nginx:1.16 --record
1.16 버전으로 업데이트를 해봅시당
# Rolling update control
kubectl rollout status deployment app-deploy # 상태 확인 kubectl rollout pause deployment app-deploy # 업데이트 중지 kubectl rollout resume deployment app-deploy # 업데이트 재개
참고로, Rolling update 진행 시 상태 확인 / 중단 / 재개도 해당 명령어로 가능합니당
# Rolling update history 확인
root@master:~/Getting-Start-Kubernetes/6# kubectl rollout history deployment app-deploy deployment.apps/app-deploy REVISION CHANGE-CAUSE 1 kubectl create --filename=deployment-exam1.yaml --record=true 2 kubectl set image deployment app-deploy web=nginx:1.15 --record=true 3 kubectl set image deployment app-deploy web=nginx:1.16 --record=true 4 kubectl set image deployment app-deploy web=nginx:1.17 --record=true
해당 명령어 조회 시, Rolling update history 확인 가능
예시2 (Rolling back)
# Rolling update history 확인
root@master:~# kubectl rollout history deployment app-deploy deployment.apps/app-deploy REVISION CHANGE-CAUSE 1 kubectl create --filename=deployment-exam1.yaml --record=true 2 kubectl set image deployment app-deploy web=nginx:1.15 --record=true 3 kubectl set image deployment app-deploy web=nginx:1.16 --record=true 4 kubectl set image deployment app-deploy web=nginx:1.17 --record=true
여기서 nginx:1.16 버전으로 rollback 해보자
# kubectl rollout undo ~ 명령으로 rollback
root@master:~# kubectl rollout undo deployment app-deploy --to-revision=3 deployment.apps/app-deploy rolled back
*--to-revision=[REVISION 값] : REVISION 값으로 롤백
즉 여기서는 revision 값을 3으로 지정해주었고, 해당 값인 nginx:1.16 버전으로 rollback 된다.
# 확인
root@master:~# kubectl get pods NAME READY STATUS RESTARTS AGE app-deploy-6f8cb5d6bf-25w6f 1/1 Running 0 2m45s app-deploy-6f8cb5d6bf-6wj7p 1/1 Running 0 2m46s app-deploy-6f8cb5d6bf-956k9 1/1 Running 0 2m43s root@master:~# kubectl describe pod app-deploy-6f8cb5d6bf-956k9 Name: app-deploy-6f8cb5d6bf-956k9 Namespace: default Priority: 0 Service Account: default Node: node2/10.100.0.102 Start Time: Thu, 05 Dec 2024 04:16:10 +0000 Labels: app=webui pod-template-hash=6f8cb5d6bf Annotations: cni.projectcalico.org/containerID: fd39a35a53a9f76530bf62f2ed6ce9289db875a2776dc915e37699d325e666ae cni.projectcalico.org/podIP: 192.168.104.49/32 cni.projectcalico.org/podIPs: 192.168.104.49/32 Status: Running IP: 192.168.104.49 IPs: IP: 192.168.104.49 Controlled By: ReplicaSet/app-deploy-6f8cb5d6bf Containers: web: Container ID: containerd://475018c40bd25575aa7c9717d5c089ace262d7f91fddad741235a8d3f8a70c7e Image: nginx:1.16 Image ID: docker.io/library/nginx@sha256:d20aa6d1cae56fd17cd458f4807e0de462caf2336f0b70b5eeb69fcaaf30dd9c Port: 80/TCP Host Port: 0/TCP State: Running Started: Thu, 05 Dec 2024 04:16:11 +0000 Ready: True Restart Count: 0 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-vtlll (ro) Conditions: Type Status PodReadyToStartContainers True Initialized True Ready True ContainersReady True PodScheduled True Volumes: kube-api-access-vtlll: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt ConfigMapOptional: <nil> DownwardAPI: true QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 2m54s default-scheduler Successfully assigned default/app-deploy-6f8cb5d6bf-956k9 to node2 Normal Pulled 2m53s kubelet Container image "nginx:1.16" already present on machine Normal Created 2m53s kubelet Created container web Normal Started 2m53s kubelet Started container web
nginx:1.16 버전으로 rollback된 것을 확인 가능하다.
# history 확인
root@master:~# kubectl rollout history deployment app-deploy deployment.apps/app-deploy REVISION CHANGE-CAUSE 1 kubectl create --filename=deployment-exam1.yaml --record=true 2 kubectl set image deployment app-deploy web=nginx:1.15 --record=true 4 kubectl set image deployment app-deploy web=nginx:1.17 --record=true 5 kubectl set image deployment app-deploy web=nginx:1.16 --record=true
revision 3번 값으로 rollback이 됨과 동시에, history에 사라진 것을 확인 가능하다.
제일 최신 history인 5번에 위치하고 있다.
# rollback 및 확인
root@master:~# kubectl rollout undo deployment app-deploy deployment.apps/app-deploy rolled back root@master:~# kubectl rollout history deployment app-deploy deployment.apps/app-deploy REVISION CHANGE-CAUSE 1 kubectl create --filename=deployment-exam1.yaml --record=true 2 kubectl set image deployment app-deploy web=nginx:1.15 --record=true 5 kubectl set image deployment app-deploy web=nginx:1.16 --record=true 6 kubectl set image deployment app-deploy web=nginx:1.17 --record=true
다시 rollback을 하면, 직전 rollback 기록인 1.17로 되돌아가고, history에도 남는다.
Deployment Rolling Update & Rolling back 세부 기능
- yaml 파일 내 annotations을 통해서, 쿠버네티스에게 특정 정보 전달이 가능하다.
- annotations:
kubernetes.io/change-cause: version 1.15
- annotations:
- yaml 파일 내 spec을 통해서 Deployment의 Rolling update 세부 기능 조정이 가능하다.
- progressDeadlineSeconds:
Deployment가 진행 중인 상태에서 완료되기까지의 최대 시간을 초 단위로 설정합니다. - revisionHistoryLimit:
보관할 이전 리비전의 최대 수를 설정합니다. - strategy:
rollingUpdate:
maxSurge:
업데이트 중에 추가로 생성할 수 있는 파드의 최대 비율입니다
maxUnavailable:
업데이트 중에 사용할 수 없는 파드의 최대 비율입니다.
type: RollingUpdate
업데이트 전략의 유형을 지정합니다. 여기서는 롤링 업데이트 방식입니다.
- progressDeadlineSeconds:
예시
# deployment-exam2.yaml 파일 작성 (nginx:1.15)
root@master:~/Getting-Start-Kubernetes/6# vi deployment-exam2.yaml apiVersion: apps/v1 kind: Deployment metadata: name: deploy-nginx annotations: kubernetes.io/change-cause: version 1.15 spec: progressDeadlineSeconds: 600 revisionHistoryLimit: 10 strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate replicas: 3 selector: matchLabels: app: webui template: metadata: labels: app: webui spec: containers: - name: web image: nginx:1.15 ports: - containerPort: 80
# 생성 및 확인
root@master:~/Getting-Start-Kubernetes/6# kubectl apply -f deployment-exam2.yaml deployment.apps/deploy-nginx created root@master:~/Getting-Start-Kubernetes/6# kubectl get pods NAME READY STATUS RESTARTS AGE deploy-nginx-5486c74cb4-5djfj 1/1 Running 0 37s deploy-nginx-5486c74cb4-ptwq6 1/1 Running 0 37s deploy-nginx-5486c74cb4-swhxm 1/1 Running 0 37s
root@master:~/Getting-Start-Kubernetes/6# kubectl describe pod deploy-nginx-5486c74cb4-5djfj Name: deploy-nginx-5486c74cb4-5djfj Namespace: default Priority: 0 Service Account: default Node: node2/10.100.0.102 Start Time: Thu, 05 Dec 2024 04:32:12 +0000 Labels: app=webui pod-template-hash=5486c74cb4 Annotations: cni.projectcalico.org/containerID: 266241526d50f381599f0ed3d629a70eb91bb5a674c05379566f5c96ac4d6e01 cni.projectcalico.org/podIP: 192.168.104.52/32 cni.projectcalico.org/podIPs: 192.168.104.52/32 Status: Running IP: 192.168.104.52 IPs: IP: 192.168.104.52 Controlled By: ReplicaSet/deploy-nginx-5486c74cb4 Containers: web: Container ID: containerd://50af925c388d6531b4271be9770293f34d15df757e67a75528a8e8c9423e9d30 Image: nginx:1.15 Image ID: docker.io/library/nginx@sha256:23b4dcdf0d34d4a129755fc6f52e1c6e23bb34ea011b315d87e193033bcd1b68 Port: 80/TCP Host Port: 0/TCP State: Running Started: Thu, 05 Dec 2024 04:32:13 +0000 Ready: True Restart Count: 0 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-9nld6 (ro) Conditions: Type Status PodReadyToStartContainers True Initialized True Ready True ContainersReady True PodScheduled True Volumes: kube-api-access-9nld6: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt ConfigMapOptional: <nil> DownwardAPI: true QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 58s default-scheduler Successfully assigned default/deploy-nginx-5486c74cb4-5djfj to node2 Normal Pulled 58s kubelet Container image "nginx:1.15" already present on machine Normal Created 58s kubelet Created container web Normal Started 57s kubelet Started container web
nginx:1.15 버전으로 배포된 것을 확인 가능하다.
# deployment-exam2.yaml 파일 작성 (nginx:1.16)
root@master:~/Getting-Start-Kubernetes/6# vi deployment-exam2.yaml apiVersion: apps/v1 kind: Deployment metadata: name: deploy-nginx annotations: kubernetes.io/change-cause: version 1.16 spec: progressDeadlineSeconds: 600 revisionHistoryLimit: 10 strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate replicas: 3 selector: matchLabels: app: webui template: metadata: labels: app: webui spec: containers: - name: web image: nginx:1.16 ports: - containerPort: 80
annotation 부분과 spec 내 image를 1.16 버전으로 수정해준다.
사실 중요한건 spec 내 image 버전을 수정해줘야 진짜 버전 업데이트가 됨 !!
# 수정 및 확인
root@master:~/Getting-Start-Kubernetes/6# kubectl apply -f deployment-exam2.yaml deployment.apps/deploy-nginx configured
root@master:~/Getting-Start-Kubernetes/6# kubectl get pods NAME READY STATUS RESTARTS AGE deploy-nginx-6f8cb5d6bf-f8pz4 1/1 Running 0 14s deploy-nginx-6f8cb5d6bf-n8gc8 1/1 Running 0 15s deploy-nginx-6f8cb5d6bf-q2rg2 1/1 Running 0 12s root@master:~/Getting-Start-Kubernetes/6# kubectl describe pods deploy-nginx-6f8cb5d6bf-f8pz4 Name: deploy-nginx-6f8cb5d6bf-f8pz4 Namespace: default Priority: 0 Service Account: default Node: node1/10.100.0.101 Start Time: Thu, 05 Dec 2024 04:34:21 +0000 Labels: app=webui pod-template-hash=6f8cb5d6bf Annotations: cni.projectcalico.org/containerID: 85514dcf9e0d5684391e42c593b68bb64ea16e4991c788aca53e4de1435ef227 cni.projectcalico.org/podIP: 192.168.166.130/32 cni.projectcalico.org/podIPs: 192.168.166.130/32 Status: Running IP: 192.168.166.130 IPs: IP: 192.168.166.130 Controlled By: ReplicaSet/deploy-nginx-6f8cb5d6bf Containers: web: Container ID: containerd://fe08432282f3b22cd7eeda93f8c9e198050e1b94b4e848fee9500461ad0712af Image: nginx:1.16 Image ID: docker.io/library/nginx@sha256:d20aa6d1cae56fd17cd458f4807e0de462caf2336f0b70b5eeb69fcaaf30dd9c Port: 80/TCP Host Port: 0/TCP State: Running Started: Thu, 05 Dec 2024 04:34:22 +0000 Ready: True Restart Count: 0 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-hq6dz (ro) Conditions: Type Status PodReadyToStartContainers True Initialized True Ready True ContainersReady True PodScheduled True Volumes: kube-api-access-hq6dz: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt ConfigMapOptional: <nil> DownwardAPI: true QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 41s default-scheduler Successfully assigned default/deploy-nginx-6f8cb5d6bf-f8pz4 to node1 Normal Pulled 40s kubelet Container image "nginx:1.16" already present on machine Normal Created 40s kubelet Created container web Normal Started 40s kubelet Started container web
# rollout history 확인
root@master:~/Getting-Start-Kubernetes/6# kubectl rollout history deployment deploy-nginx deployment.apps/deploy-nginx REVISION CHANGE-CAUSE 1 version 1.15 2 version 1.16
퀴즈
- 다음의 조건으로 Deployment를 사용하는 dep-lab.yaml 파일을 생성하고 apply 명령으로 동작시킵니다.
- labels (name: apache, app: main, rel: stable)을 가지는 httpd:2.2 버전의 Pod를 2개 히스토리로 기록하며 운영합니다.
- annotations (kubernetes.io/change-cause : version 2.2)를 추가로 설정합니다.
- deployment name: dep-mainui
- container: httpd:2.2
root@master:~/Getting-Start-Kubernetes/6# vi dep-lab.yaml apiVersion: apps/v1 kind: Deployment metadata: name: dep-mainui annotations: kubernetes.io/change-cause: version 2.2 spec: replicas: 2 selector: matchLabels: app: main template: metadata: labels: name: apache app: main rel: stable spec: containers: - name: web image: httpd:2.2 ports: - containerPort: 80
root@master:~/Getting-Start-Kubernetes/6# kubectl apply -f dep-lab.yaml --record Flag --record has been deprecated, --record will be removed in the future deployment.apps/dep-mainui created
- 동작 되는 dep-lab.yaml의 이미지를 httpd:2.4 버전으로 rolling update 합니다.
- 단, apply 명령을 통해 rolling update를 진행합니다.
root@master:~/Getting-Start-Kubernetes/6# vi dep-lab.yaml apiVersion: apps/v1 kind: Deployment metadata: name: dep-mainui annotations: kubernetes.io/change-cause: version 2.4 spec: replicas: 2 selector: matchLabels: app: main template: metadata: labels: name: apache app: main rel: stable spec: containers: - name: web image: httpd:2.4 ports: - containerPort: 80
root@master:~/Getting-Start-Kubernetes/6# kubectl apply -f dep-lab.yaml --record Flag --record has been deprecated, --record will be removed in the future deployment.apps/dep-mainui configured
- 현재의 dep-mainui 히스토리를 확인하고, rollback 시킵니다.
root@master:~/Getting-Start-Kubernetes/6# kubectl rollout history deployment dep-mainui deployment.apps/dep-mainui REVISION CHANGE-CAUSE 1 kubectl apply --filename=dep-lab.yaml --record=true 2 kubectl apply --filename=dep-lab.yaml --record=true
root@master:~/Getting-Start-Kubernetes/6# kubectl rollout undo deployment dep-mainui deployment.apps/dep-mainui rolled back
- 현재 동작중인 Pod의 httpd 이미지 버전은 어떻게 되는지 확인합니다.
root@master:~/Getting-Start-Kubernetes/6# kubectl get pods NAME READY STATUS RESTARTS AGE dep-mainui-67b9689c9f-6zjdz 1/1 Running 0 43s dep-mainui-67b9689c9f-98b92 1/1 Running 0 44s root@master:~/Getting-Start-Kubernetes/6# kubectl describe pods dep-mainui-67b9689c9f-6zjdz Name: dep-mainui-67b9689c9f-6zjdz Namespace: default Priority: 0 Service Account: default Node: node2/10.100.0.102 Start Time: Thu, 05 Dec 2024 05:21:11 +0000 Labels: app=main name=apache pod-template-hash=67b9689c9f rel=stable Annotations: cni.projectcalico.org/containerID: f095f48da1c70d2ad5a229fd3323c506e1450dc1f8057b67b6a1f3dfab496a82 cni.projectcalico.org/podIP: 192.168.104.57/32 cni.projectcalico.org/podIPs: 192.168.104.57/32 Status: Running IP: 192.168.104.57 IPs: IP: 192.168.104.57 Controlled By: ReplicaSet/dep-mainui-67b9689c9f Containers: web: Container ID: containerd://eeb4a90bd2ee0d4bb75232834e739327bb8a5f4045f1e0a74829c6ae818de3ff Image: httpd:2.2 Image ID: docker.io/library/httpd@sha256:9784d70c8ea466fabd52b0bc8cde84980324f9612380d22fbad2151df9a430eb Port: 80/TCP Host Port: 0/TCP State: Running Started: Thu, 05 Dec 2024 05:21:12 +0000 Ready: True Restart Count: 0 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-l7ltt (ro) Conditions: Type Status PodReadyToStartContainers True Initialized True Ready True ContainersReady True PodScheduled True Volumes: kube-api-access-l7ltt: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt ConfigMapOptional: <nil> DownwardAPI: true QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 62s default-scheduler Successfully assigned default/dep-mainui-67b9689c9f-6zjdz to node2 Normal Pulled 61s kubelet Container image "httpd:2.2" already present on machine Normal Created 61s kubelet Created container web Normal Started 61s kubelet Started container web
참고 영상
https://www.youtube.com/watch?v=L5LDBWrP6QU
'kubernetes' 카테고리의 다른 글
[따배쿠] Controller - StatefulSet (0) 2024.12.05 [따배쿠] Controller - DaemonSet (0) 2024.12.05 [따배쿠] Controller - Replicaset (0) 2024.12.04 [따배쿠] Controller - ReplicationController란? (1) 2024.12.04 [따배쿠] Pod - Pod 환경변수 설정과 실행 패턴 (0) 2024.12.03