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>