replica 수 보장 및 scaling 가능Rolling update 또는 Roll back 지원쿠버네티스 공식 문서 - Deployment를 참고하세요.
replicas: 파드 개수 보장selector: 어떤 파드?template: 파드에 대한 정보apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
# 입력을 저장하려면 [Ctrl] + [D]
% cat > nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
% kubectl apply -f nginx-deployment.yaml
# nginx-deployment-xxxxxx가 접두사로 붙은 3개의 파드 확인
% kubectl get pod
NAME READY STATUS RESTARTS AGE
eshop-cart-app 2/2 Running 0 163m
eshop-frontend 4/4 Running 0 3h22m
front-end-8dc556958-2hfqt 1/1 Running 0 3h59m
front-end-8dc556958-4qcd9 1/1 Running 0 3h59m
front-end-8dc556958-fvlpx 1/1 Terminating 2 (111d ago) 134d
front-end-8dc556958-vcr4s 1/1 Terminating 3 (111d ago) 134d
nginx-79488c9578-5f5q7 1/1 Running 0 3h59m
nginx-79488c9578-qwnfk 1/1 Running 2 (110d ago) 111d
nginx-79488c9578-xpsvp 1/1 Terminating 1 (111d ago) 111d
nginx-deployment-66b6c48dd5-8kmjk 1/1 Running 0 46s
nginx-deployment-66b6c48dd5-8mwqt 1/1 Running 0 46s
nginx-deployment-66b6c48dd5-rpmwd 1/1 Running 0 46s
# nginx-deployment-66b6c48dd5은 ReplicaSet의 이름
% kubectl get replicaset nginx-deployment-66b6c48dd5
NAME DESIRED CURRENT READY AGE
nginx-deployment-66b6c48dd5 3 3 3 34s
# 임의로 파드 하나를 삭제해보기
% kubectl delete pod nginx-deployment-66b6c48dd5-8kmjk
pod "nginx-deployment-66b6c48dd5-8kmjk" deleted
# 파드가 자동으로 재생성된 것을 확인
% kubectl get pod
NAME READY STATUS RESTARTS AGE
eshop-cart-app 2/2 Running 0 165m
eshop-frontend 4/4 Running 0 3h24m
front-end-8dc556958-2hfqt 1/1 Running 0 4h1m
front-end-8dc556958-4qcd9 1/1 Running 0 4h1m
front-end-8dc556958-fvlpx 1/1 Terminating 2 (111d ago) 134d
front-end-8dc556958-vcr4s 1/1 Terminating 3 (111d ago) 134d
nginx-79488c9578-5f5q7 1/1 Running 0 4h1m
nginx-79488c9578-qwnfk 1/1 Running 2 (110d ago) 111d
nginx-79488c9578-xpsvp 1/1 Terminating 1 (111d ago) 111d
nginx-deployment-66b6c48dd5-8mwqt 1/1 Running 0 2m51s
nginx-deployment-66b6c48dd5-g98sg 1/1 Running 0 5s
nginx-deployment-66b6c48dd5-rpmwd 1/1 Running 0 2m51s
% kubectl scale deployment <deploy_name> --replicas=N
Scale-out : 애플리케이션 Pod 수를 확장하여 처리 능력을 향상Scale-in : 애플리케이션 Pod 수를 축소하여 리소스 낭비 최소화# scale-out
% kubectl scale deployment nginx-deployment --replicas=4
deployment.apps/nginx-deployment scaled
% kubectl get pod
NAME READY STATUS RESTARTS AGE
eshop-cart-app 2/2 Running 0 167m
eshop-frontend 4/4 Running 0 3h26m
front-end-8dc556958-2hfqt 1/1 Running 0 4h3m
front-end-8dc556958-4qcd9 1/1 Running 0 4h3m
front-end-8dc556958-fvlpx 1/1 Terminating 2 (111d ago) 134d
front-end-8dc556958-vcr4s 1/1 Terminating 3 (111d ago) 134d
nginx-79488c9578-5f5q7 1/1 Running 0 4h3m
nginx-79488c9578-qwnfk 1/1 Running 2 (110d ago) 111d
nginx-79488c9578-xpsvp 1/1 Terminating 1 (111d ago) 111d
nginx-deployment-66b6c48dd5-8mwqt 1/1 Running 0 4m50s
nginx-deployment-66b6c48dd5-g98sg 1/1 Running 0 2m4s
nginx-deployment-66b6c48dd5-gk49c 1/1 Running 0 4s
nginx-deployment-66b6c48dd5-rpmwd 1/1 Running 0 4m50s
# scale-in
% kubectl scale deployment nginx-deployment --replicas=2
deployment.apps/nginx-deployment scaled
% kubectl get pod
NAME READY STATUS RESTARTS AGE
eshop-cart-app 2/2 Running 0 167m
eshop-frontend 4/4 Running 0 3h27m
front-end-8dc556958-2hfqt 1/1 Running 0 4h4m
front-end-8dc556958-4qcd9 1/1 Running 0 4h4m
front-end-8dc556958-fvlpx 1/1 Terminating 2 (111d ago) 134d
front-end-8dc556958-vcr4s 1/1 Terminating 3 (111d ago) 134d
nginx-79488c9578-5f5q7 1/1 Running 0 4h4m
nginx-79488c9578-qwnfk 1/1 Running 2 (110d ago) 111d
nginx-79488c9578-xpsvp 1/1 Terminating 1 (111d ago) 111d
nginx-deployment-66b6c48dd5-8mwqt 1/1 Running 0 5m11s
nginx-deployment-66b6c48dd5-rpmwd 1/1 Running 0 5m11s
a. webserver 라는 이름으로 deployment를 생성하세요.
b. 다음, webserver Deployment의 pod 수를 3개로 확장하세요.
% cat > webserver.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
% vim webserver.yaml
# 아래 내용대로 수정
apiVersion: apps/v1
kind: Deployment
metadata:
name: webserver
spec:
replicas: 2
selector:
matchLabels:
app_env_stage: dev
template:
metadata:
labels:
app_env_stage: dev
spec:
containers:
- name: webserver
image: nginx:1.14
% kubectl apply -f webserver.yaml
deployment.apps/webserver created
% kubectl get pod
NAME READY STATUS RESTARTS AGE
eshop-cart-app 2/2 Running 0 3h22m
eshop-frontend 4/4 Running 0 4h2m
front-end-8dc556958-2hfqt 1/1 Running 0 4h39m
front-end-8dc556958-4qcd9 1/1 Running 0 4h39m
front-end-8dc556958-fvlpx 1/1 Terminating 2 (111d ago) 134d
front-end-8dc556958-vcr4s 1/1 Terminating 3 (111d ago) 134d
nginx-79488c9578-5f5q7 1/1 Running 0 4h39m
nginx-79488c9578-qwnfk 1/1 Running 2 (110d ago) 111d
nginx-79488c9578-xpsvp 1/1 Terminating 1 (111d ago) 111d
nginx-deployment-66b6c48dd5-8mwqt 1/1 Running 0 40m
nginx-deployment-66b6c48dd5-rpmwd 1/1 Running 0 40m
webserver-5586594bbf-6xvnm 1/1 Running 0 4s
webserver-5586594bbf-c9p5f 1/1 Running 0 4s
# ReplicaSet 조회
% kubectl get rs
NAME DESIRED CURRENT READY AGE
front-end-8dc556958 2 2 2 134d
nginx-79488c9578 2 2 2 111d
nginx-deployment-66b6c48dd5 2 2 2 41m
webserver-5586594bbf 2 2 2 75s
# scale-out
% kubectl scale deployment webserver-5586594bbf --replicas=3
replicaset.apps/webserver-5586594bbf scaled
# 파드가 3개로 늘었는지 조회
% kubectl get pod
NAME READY STATUS RESTARTS AGE
eshop-cart-app 2/2 Running 0 3h24m
eshop-frontend 4/4 Running 0 4h3m
front-end-8dc556958-2hfqt 1/1 Running 0 4h40m
front-end-8dc556958-4qcd9 1/1 Running 0 4h40m
front-end-8dc556958-fvlpx 1/1 Terminating 2 (111d ago) 134d
front-end-8dc556958-vcr4s 1/1 Terminating 3 (111d ago) 134d
nginx-79488c9578-5f5q7 1/1 Running 0 4h40m
nginx-79488c9578-qwnfk 1/1 Running 2 (110d ago) 111d
nginx-79488c9578-xpsvp 1/1 Terminating 1 (111d ago) 111d
nginx-deployment-66b6c48dd5-8mwqt 1/1 Running 0 41m
nginx-deployment-66b6c48dd5-rpmwd 1/1 Running 0 41m
webserver-5586594bbf-6xvnm 1/1 Running 0 89s
webserver-5586594bbf-c9p5f 1/1 Running 0 89s
webserver-5586594bbf-ws8t6 1/1 Running 0 2s
devops 네임스페이스를 통해 eshop-order 애플리케이션이 배포되었습니다. 서비스 트래픽 증가로 eshop-order에서 동작되는 Pod 수를 scale-out 해야 합니다. Pod 수를 5개로 확장하고, 동작중인 5개의 Pod 이름을 /opt/REPORT/2022/eshop-order-pod-list에 기록하세요.
Rolling Update: 동작 중인 애플리케이션의 서비스 중단 없이 점진적으로 Pod 업데이트하는 방법% kubectl set image deployment <deploy_name> <container_name>=<new_version_image> --record
ReplicaSet을 생성한 후 새로운 ReplicaSet에 업데이트된 버전의 파드를 하나씩 생성하고, 파드가 running되면 기존 ReplicaSet에 있는 파드의 수를 하나씩 줄입니다. 이러한 방식으로 점진적으로 서비스 중단 없이 Pod를 업데이트하게 됩니다.Rollback을 하기 위해 history를 남겨주는 역할을 합니다.앞서 생성한 nginx-deployment deployment를 이용합니다.
# nginx-deployment의 정보 확인
% kubectl describe deployments.apps nginx-deployment
Name: nginx-deployment
Namespace: default
CreationTimestamp: Fri, 15 Jul 2022 13:34:06 +0900
Labels: app=nginx
Annotations: deployment.kubernetes.io/revision: 1
Selector: app=nginx
Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=nginx
Containers:
nginx:
Image: nginx:1.14.2
Port: 80/TCP
Host Port: 0/TCP
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Progressing True NewReplicaSetAvailable
Available True MinimumReplicasAvailable
OldReplicaSets: <none>
NewReplicaSet: nginx-deployment-66b6c48dd5 (3/3 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet <invalid> (x2 over <invalid>) deployment-controller Scaled down replica set nginx-deployment-66b6c48dd5 to 2
Normal ScalingReplicaSet <invalid> (x2 over <invalid>) deployment-controller Scaled up replica set nginx-deployment-66b6c48dd5 to 3
# nginx를 1.15 버전으로 업데이트
% kubectl set image deployment nginx-deployment nginx=nginx:1.15 --record
Flag --record has been deprecated, --record will be removed in the future
deployment.apps/nginx-deployment image updated
# 기존에 있던 deployment는 replicas가 0이 되고, 새로 생성된 deployment의 replicas가 3이 된 것을 확인
% kubectl get rs
NAME DESIRED CURRENT READY AGE
front-end-8dc556958 2 2 2 134d
nginx-79488c9578 2 2 2 111d
nginx-deployment-66b6c48dd5 0 0 0 70m
nginx-deployment-698676d7f8 3 3 3 69s
webserver-5586594bbf 3 3 3 30m
# deployment가 nginx:1.15로 잘 업데이트 되었는지 확인
% kubectl describe deployments.apps nginx-deployment
Name: nginx-deployment
Namespace: default
CreationTimestamp: Fri, 15 Jul 2022 13:34:06 +0900
Labels: app=nginx
Annotations: deployment.kubernetes.io/revision: 2
kubernetes.io/change-cause: kubectl set image deployment nginx-deployment nginx=nginx:1.15 --record=true
Selector: app=nginx
Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=nginx
Containers:
nginx:
Image: nginx:1.15
Port: 80/TCP
Host Port: 0/TCP
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets: <none>
NewReplicaSet: nginx-deployment-698676d7f8 (3/3 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet <invalid> (x2 over <invalid>) deployment-controller Scaled up replica set nginx-deployment-66b6c48dd5 to 3
Normal ScalingReplicaSet <invalid> deployment-controller Scaled up replica set nginx-deployment-698676d7f8 to 1
Normal ScalingReplicaSet <invalid> (x3 over <invalid>) deployment-controller Scaled down replica set nginx-deployment-66b6c48dd5 to 2
Normal ScalingReplicaSet <invalid> deployment-controller Scaled up replica set nginx-deployment-698676d7f8 to 2
Normal ScalingReplicaSet <invalid> deployment-controller Scaled down replica set nginx-deployment-66b6c48dd5 to 1
Normal ScalingReplicaSet <invalid> deployment-controller Scaled up replica set nginx-deployment-698676d7f8 to 3
Normal ScalingReplicaSet <invalid> deployment-controller Scaled down replica set nginx-deployment-66b6c48dd5 to 0
# 파드 정보를 통해 nginx:1.15로 업데이트 되었다는 이벤트 로그 확인
% kubectl describe pod nginx-deployment-698676d7f8-2g4mc
Name: nginx-deployment-698676d7f8-2g4mc
Namespace: default
Priority: 0
Node: k8s-worker1/10.0.2.11
Start Time: Fri, 15 Jul 2022 14:43:39 +0900
Labels: app=nginx
pod-template-hash=698676d7f8
Annotations: <none>
Status: Running
IP: 10.244.1.49
IPs:
IP: 10.244.1.49
Controlled By: ReplicaSet/nginx-deployment-698676d7f8
Containers:
nginx:
Container ID: docker://da7389994e4994a5c750ab407987b3858d251c8ed26f24ef9de04397973dbd04
Image: nginx:1.15
Image ID: docker-pullable://nginx@sha256:23b4dcdf0d34d4a129755fc6f52e1c6e23bb34ea011b315d87e193033bcd1b68
Port: 80/TCP
Host Port: 0/TCP
State: Running
Started: Fri, 15 Jul 2022 14:43:40 +0900
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-nqflw (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
kube-api-access-nqflw:
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 <invalid> default-scheduler Successfully assigned default/nginx-deployment-698676d7f8-2g4mc to k8s-worker1
Normal Pulled <invalid> kubelet Container image "nginx:1.15" already present on machine
Normal Created <invalid> kubelet Created container nginx
Normal Started <invalid> kubelet Started container nginx
% kubectl rollout history deployment <deployment 이름>
# 바로 이전 단계로 되돌리기
% kubectl rollout undo deployment <deployment 이름>
# 특정 히스토리로 되돌리기
% kubectl rollout undo deployment <deployment 이름> --to-revision=NUMBER
# nginx-deployment 의 히스토리 조회
% kubectl rollout history deployment nginx-deployment
deployment.apps/nginx-deployment
REVISION CHANGE-CAUSE
1 <none>
2 kubectl set image deployment nginx-deployment nginx=nginx:1.15 --record=true
# nginx:1.14 버전으로 되돌리기
% kubectl rollout undo deployment nginx-deployment --to-revision=1
deployment.apps/nginx-deployment rolled back
# Rollback 되었는지 확인
% kubectl get pod
NAME READY STATUS RESTARTS AGE
eshop-cart-app 2/2 Running 0 4h13m
eshop-frontend 4/4 Running 0 4h52m
front-end-8dc556958-2hfqt 1/1 Running 0 5h29m
front-end-8dc556958-4qcd9 1/1 Running 0 5h29m
front-end-8dc556958-fvlpx 1/1 Terminating 2 (111d ago) 134d
front-end-8dc556958-vcr4s 1/1 Terminating 3 (111d ago) 134d
nginx-79488c9578-5f5q7 1/1 Running 0 5h29m
nginx-79488c9578-qwnfk 1/1 Running 2 (110d ago) 111d
nginx-79488c9578-xpsvp 1/1 Terminating 1 (111d ago) 111d
nginx-deployment-66b6c48dd5-bgl5t 1/1 Running 0 53s
nginx-deployment-66b6c48dd5-cck85 1/1 Running 0 52s
nginx-deployment-66b6c48dd5-nsmz9 1/1 Running 0 55s
webserver-5586594bbf-6xvnm 1/1 Running 0 50m
webserver-5586594bbf-c9p5f 1/1 Running 0 50m
webserver-5586594bbf-ws8t6 1/1 Running 0 26m
% kubectl describe pod nginx-deployment-66b6c48dd5-bgl5t
Name: nginx-deployment-66b6c48dd5-bgl5t
Namespace: default
Priority: 0
Node: k8s-worker1/10.0.2.11
Start Time: Fri, 15 Jul 2022 15:04:14 +0900
Labels: app=nginx
pod-template-hash=66b6c48dd5
Annotations: <none>
Status: Running
IP: 10.244.1.55
IPs:
IP: 10.244.1.55
Controlled By: ReplicaSet/nginx-deployment-66b6c48dd5
Containers:
nginx:
Container ID: docker://74ac2dc9ee30a68cd4060197d4f62a469e02b0b383db88af997c5cb514faf28f
Image: nginx:1.14.2
Image ID: docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d
Port: 80/TCP
Host Port: 0/TCP
State: Running
Started: Fri, 15 Jul 2022 15:04:15 +0900
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-c4ddz (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
kube-api-access-c4ddz:
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 <invalid> default-scheduler Successfully assigned default/nginx-deployment-66b6c48dd5-bgl5t to k8s-worker1
Normal Pulled <invalid> kubelet Container image "nginx:1.14.2" already present on machine
Normal Created <invalid> kubelet Created container nginx
Normal Started <invalid> kubelet Started container nginx
# history 확인
% kubectl rollout history deployment nginx-deployment
deployment.apps/nginx-deployment
REVISION CHANGE-CAUSE
2 kubectl set image deployment nginx-deployment nginx=nginx:1.15 --record=true
3 <none>
a. Deployment를 이용해 nginx 파드를 3개 배포한 다음 컨테이너 이미지 버전을 rolling update하고 update record를 기록합니다.
b. 컨테이너 이미지를 previous version으로 roll back 합니다.
% cat > eshop-payment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
% vim eshop-payment.yaml
# 아래와 같이 수정
apiVersion: apps/v1
kind: Deployment
metadata:
name: eshop-payment
spec:
replicas: 3
selector:
matchLabels:
app: payment
environment: production
template:
metadata:
labels:
app: payment
environment: production
spec:
containers:
- name: nginx
image: nginx:1.16
# deployment 생성
% kubectl apply -f eshop-payment.yaml
deployment.apps/eshop-payment created
# 파드가 제대로 생성되었는지 조회
% kubectl get pod
NAME READY STATUS RESTARTS AGE
eshop-cart-app 2/2 Running 0 4h27m
eshop-frontend 4/4 Running 0 5h6m
eshop-payment-54cb87c674-k9zjn 0/1 ContainerCreating 0 4s
eshop-payment-54cb87c674-lj6mw 0/1 ContainerCreating 0 4s
eshop-payment-54cb87c674-lxlmb 0/1 ContainerCreating 0 4s
front-end-8dc556958-2hfqt 1/1 Running 0 5h43m
front-end-8dc556958-4qcd9 1/1 Running 0 5h43m
front-end-8dc556958-fvlpx 1/1 Terminating 2 (111d ago) 134d
front-end-8dc556958-vcr4s 1/1 Terminating 3 (111d ago) 134d
nginx-79488c9578-5f5q7 1/1 Running 0 5h43m
nginx-79488c9578-qwnfk 1/1 Running 2 (110d ago) 111d
nginx-79488c9578-xpsvp 1/1 Terminating 1 (111d ago) 111d
nginx-deployment-66b6c48dd5-bgl5t 1/1 Running 0 14m
nginx-deployment-66b6c48dd5-cck85 1/1 Running 0 14m
nginx-deployment-66b6c48dd5-nsmz9 1/1 Running 0 14m
webserver-5586594bbf-6xvnm 1/1 Running 0 64m
webserver-5586594bbf-c9p5f 1/1 Running 0 64m
webserver-5586594bbf-ws8t6 1/1 Running 0 39m
# nginx:1.16 -> nginx:1.17로 Rolling Update
% kubectl set image deployment eshop-payment nginx=nginx:1.17 --record
Flag --record has been deprecated, --record will be removed in the future
deployment.apps/eshop-payment image updated
# 업데이트 확인
% kubectl get pod
NAME READY STATUS RESTARTS AGE
eshop-cart-app 2/2 Running 0 4h31m
eshop-frontend 4/4 Running 0 5h11m
eshop-payment-856fdc9db9-5vkdp 1/1 Running 0 37s
eshop-payment-856fdc9db9-b5f6k 1/1 Running 0 50s
eshop-payment-856fdc9db9-jbckr 1/1 Running 0 38s
front-end-8dc556958-2hfqt 1/1 Running 0 5h47m
front-end-8dc556958-4qcd9 1/1 Running 0 5h47m
front-end-8dc556958-fvlpx 1/1 Terminating 2 (111d ago) 134d
front-end-8dc556958-vcr4s 1/1 Terminating 3 (111d ago) 134d
nginx-79488c9578-5f5q7 1/1 Running 0 5h47m
nginx-79488c9578-qwnfk 1/1 Running 2 (110d ago) 111d
nginx-79488c9578-xpsvp 1/1 Terminating 1 (111d ago) 111d
nginx-deployment-66b6c48dd5-bgl5t 1/1 Running 0 18m
nginx-deployment-66b6c48dd5-cck85 1/1 Running 0 18m
nginx-deployment-66b6c48dd5-nsmz9 1/1 Running 0 18m
webserver-5586594bbf-6xvnm 1/1 Running 0 68m
webserver-5586594bbf-c9p5f 1/1 Running 0 68m
webserver-5586594bbf-ws8t6 1/1 Running 0 44m
% kubectl describe pod eshop-payment-856fdc9db9-5vkdp
Name: eshop-payment-856fdc9db9-5vkdp
Namespace: default
Priority: 0
Node: k8s-worker1/10.0.2.11
Start Time: Fri, 15 Jul 2022 15:22:32 +0900
Labels: app=payment
environment=production
pod-template-hash=856fdc9db9
Annotations: <none>
Status: Running
IP: 10.244.1.62
IPs:
IP: 10.244.1.62
Controlled By: ReplicaSet/eshop-payment-856fdc9db9
Containers:
nginx:
Container ID: docker://4bf70d504ccd3e93894884fa0e939c59b074570faafa6990b1ffaf5c5e0daef8
Image: nginx:1.17
Image ID: docker-pullable://nginx@sha256:6fff55753e3b34e36e24e37039ee9eae1fe38a6420d8ae16ef37c92d1eb26699
Port: <none>
Host Port: <none>
State: Running
Started: Fri, 15 Jul 2022 15:22:33 +0900
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-4hnlh (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
kube-api-access-4hnlh:
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 <invalid> default-scheduler Successfully assigned default/eshop-payment-856fdc9db9-5vkdp to k8s-worker1
Normal Pulled <invalid> kubelet Container image "nginx:1.17" already present on machine
Normal Created <invalid> kubelet Created container nginx
Normal Started <invalid> kubelet Started container nginx
# nginx:1.17 -> nginx:1.16로 Rollback
% kubectl rollout history deployment eshop-payment
deployment.apps/eshop-payment
REVISION CHANGE-CAUSE
1 <none>
2 kubectl set image deployment eshop-payment nginx=nginx:1.17 --record=true
% kubectl rollout undo deployment eshop-payment
deployment.apps/eshop-payment rolled back
# 롤백 확인
% kubectl get pod
NAME READY STATUS RESTARTS AGE
eshop-cart-app 2/2 Running 0 4h34m
eshop-frontend 4/4 Running 0 5h14m
eshop-payment-54cb87c674-7sn2k 1/1 Running 0 15s
eshop-payment-54cb87c674-btfbm 1/1 Running 0 16s
eshop-payment-54cb87c674-n4ldd 1/1 Running 0 18s
front-end-8dc556958-2hfqt 1/1 Running 0 5h51m
front-end-8dc556958-4qcd9 1/1 Running 0 5h51m
front-end-8dc556958-fvlpx 1/1 Terminating 2 (111d ago) 134d
front-end-8dc556958-vcr4s 1/1 Terminating 3 (111d ago) 134d
nginx-79488c9578-5f5q7 1/1 Running 0 5h51m
nginx-79488c9578-qwnfk 1/1 Running 2 (110d ago) 111d
nginx-79488c9578-xpsvp 1/1 Terminating 1 (111d ago) 111d
nginx-deployment-66b6c48dd5-bgl5t 1/1 Running 0 22m
nginx-deployment-66b6c48dd5-cck85 1/1 Running 0 22m
nginx-deployment-66b6c48dd5-nsmz9 1/1 Running 0 22m
webserver-5586594bbf-6xvnm 1/1 Running 0 72m
webserver-5586594bbf-c9p5f 1/1 Running 0 72m
webserver-5586594bbf-ws8t6 1/1 Running 0 47m
% kubectl describe pod eshop-payment-54cb87c674-7sn2k
Name: eshop-payment-54cb87c674-7sn2k
Namespace: default
Priority: 0
Node: k8s-worker1/10.0.2.11
Start Time: Fri, 15 Jul 2022 15:26:03 +0900
Labels: app=payment
environment=production
pod-template-hash=54cb87c674
Annotations: <none>
Status: Running
IP: 10.244.1.65
IPs:
IP: 10.244.1.65
Controlled By: ReplicaSet/eshop-payment-54cb87c674
Containers:
nginx:
Container ID: docker://e71e0728451e67363d05b88a875145853d619a45e493d1dbc59e9ccdd4de76db
Image: nginx:1.16
Image ID: docker-pullable://nginx@sha256:d20aa6d1cae56fd17cd458f4807e0de462caf2336f0b70b5eeb69fcaaf30dd9c
Port: <none>
Host Port: <none>
State: Running
Started: Fri, 15 Jul 2022 15:26:03 +0900
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-s2d94 (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
kube-api-access-s2d94:
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 <invalid> default-scheduler Successfully assigned default/eshop-payment-54cb87c674-7sn2k to k8s-worker1
Normal Pulled <invalid> kubelet Container image "nginx:1.16" already present on machine
Normal Created <invalid> kubelet Created container nginx
Normal Started <invalid> kubelet Started container nginx
% kubectl rollout history deployment eshop-payment
deployment.apps/eshop-payment
REVISION CHANGE-CAUSE
2 kubectl set image deployment eshop-payment nginx=nginx:1.17 --record=true
3 <none>