참고
롤링 업데이트 - 레코드 , record
https://brunch.co.kr/@topasvga/1674
순차적 업데이트하는 롤링 업데이트하고, 원복 해보자
1
cat << EOF > roll-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: roll-nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx-pod
template:
metadata:
name: nginx-pod
labels:
app: nginx-pod
spec:
containers:
- name: nginx
image: nginx:1.15.12
EOF
2
kubectl apply -f roll-nginx.yaml --record
3
확인
kubectl get pod -o yaml | grep "image: nginx"
(admin-k8s:default) root@k8s-m:~# kubectl get pod -o yaml | grep "image: nginx"
- image: nginx:1.15.12
image: nginx:1.15.12
- image: nginx:1.15.12
image: nginx:1.15.12
- image: nginx:1.15.12
image: nginx:1.15.12
4
히스토리 확인
kubectl rollout history deployment roll-nginx
(admin-k8s:default) root@k8s-m:~# kubectl rollout history deployment roll-nginx
deployment.apps/roll-nginx
REVISION CHANGE-CAUSE
1 kubectl apply --filename=roll-nginx.yaml --record=true
5
배포한 파드 정보 확인 ?
k get pods -o=custom-columns=NAME:.metadata.name,STATUS:,NODE:.spec.nodeName
(admin-k8s:default) root@k8s-m:~# k get pods -o=custom-columns=NAME:.metadata.name,STATUS:,NODE:.spec.nodeName
NAME STATUS NODE
roll-nginx-86965779d6-2prg2 <none> k8s-w1
roll-nginx-86965779d6-98dmj <none> k8s-w2
roll-nginx-86965779d6-dn454 <none> k8s-w1
6
1.16 으로 변경해보기
kubectl set image deployment deployment-nginx nginx=nginx:1.16 --record && kubectl get pod -w
kubectl get pod -o yaml | grep "image: nginx"
하나씩 순차적으로 지우고 생성 된다.
(admin-k8s:default) root@k8s-m:~# kubectl set image deployment roll-nginx nginx=nginx:1.16 --record && kubectl get pod -w
deployment.apps/roll-nginx image updated
NAME READY STATUS RESTARTS AGE
roll-nginx-864cb98d98-4vlxp 0/1 ContainerCreating 0 0s
roll-nginx-86965779d6-2prg2 1/1 Running 0 9m50s
roll-nginx-86965779d6-98dmj 1/1 Running 0 9m50s
roll-nginx-86965779d6-dn454 1/1 Running 0 9m50s
roll-nginx-864cb98d98-4vlxp 0/1 ContainerCreating 0 1s
(admin-k8s:default) root@k8s-m:~# kubectget pod -o yaml | grep "image: nginx"-w
- image: nginx:1.16
- image: nginx:1.16
- image: nginx:1.15.12
image: nginx:1.15.12
- image: nginx:1.15.12
image: nginx:1.15.12
- image: nginx:1.15.12
image: nginx:1.15.12
(admin-k8s:default) root@k8s-m:~# kubectl get pod -o yaml | grep "image: nginx"
- image: nginx:1.16
- image: nginx:1.16
- image: nginx:1.15.12
image: nginx:1.15.12
- image: nginx:1.15.12
image: nginx:1.15.12
- image: nginx:1.15.12
image: nginx:1.15.12
(admin-k8s:default) root@k8s-m:~# kubectl get pod -o yaml | grep "image: nginx"
- image: nginx:1.16
image: nginx:1.16
- image: nginx:1.16
image: nginx:1.16
- image: nginx:1.16
image: nginx:1.16
7
pod 확인
하나씩 순차적으로 지우고 새로 생성 되었다.
k get pod -w
(admin-k8s:default) root@k8s-m:~# k get pod -w
NAME READY STATUS RESTARTS AGE
roll-nginx-864cb98d98-4vlxp 1/1 Running 0 2m41s
roll-nginx-864cb98d98-g8mw9 1/1 Running 0 2m9s
roll-nginx-864cb98d98-gghtq 1/1 Running 0 2m25s
8
히스토리 확인
kubectl rollout history deployment roll-nginx
(admin-k8s:default) root@k8s-m:~# kubectl rollout history deployment roll-nginx
deployment.apps/roll-nginx
REVISION CHANGE-CAUSE
1 kubectl apply --filename=roll-nginx.yaml --record=true
2 kubectl set image deployment roll-nginx nginx=nginx:1.16 --record=true
9
라벨이 구분되어 있어 롤백이 가능하다.
kubectl get replicasets.apps --show-labels
(admin-k8s:default) root@k8s-m:~# kubectl get replicasets.apps --show-labels
NAME DESIRED CURRENT READY AGE LABELS
roll-nginx-864cb98d98 3 3 3 7m25s app=nginx-pod,pod-template-hash=864cb98d98
roll-nginx-86965779d6 0 0 0 17m app=nginx-pod,pod-template-hash=86965779d6
10
ssh를 하나 더 띠워 모니터링 하자~
모니터링
watch -d 'kubectl get pods,rs,deploy -o wide'
11
상세 확인
문제가 있으면 여기에 나온다~
kubectl describe deployments.apps deployment-nginx
12
1.17 로 업그레이드
kubectl set image deployment roll-nginx nginx=nginx:1.17 --record && kubectl get pod -w
변경 확인
kubectl get pod -o yaml | grep "image: nginx"
(admin-k8s:default) root@k8s-m:~# kubectl get pod -o yaml | grep "image: nginx"
- image: nginx:1.17
image: nginx:1.17
- image: nginx:1.17
image: nginx:1.17
- image: nginx:1.17
image: nginx:1.17
watch -d 'kubectl get pods,rs,deploy -o wide'
히스토리 확인
kubectl rollout history deployment roll-nginx
(admin-k8s:default) root@k8s-m:~# kubectl rollout history deployment roll-nginx
deployment.apps/roll-nginx
REVISION CHANGE-CAUSE
1 kubectl apply --filename=roll-nginx.yaml --record=true
2 kubectl set image deployment roll-nginx nginx=nginx:1.16 --record=true
3 kubectl set image deployment roll-nginx nginx=nginx:1.17 --record=true
1
바로 앞으로 원복 ??
k rollout undo deployment roll-nginx
(admin-k8s:default) root@k8s-m:~# k rollout undo deployment roll-nginx
deployment.apps/roll-nginx rolled back
확인
kubectl get pod -o yaml | grep "image: nginx"
(admin-k8s:default) root@k8s-m:~# kubectl get pod -o yaml | grep "image: nginx"
- image: nginx:1.16
image: nginx:1.16
- image: nginx:1.16
image: nginx:1.16
- image: nginx:1.16
image: nginx:1.16
2
특정 시점으로 원복 ??
히스토리 확인
히스토리 4로 변경됨
kubectl rollout history deployment roll-nginx
(admin-k8s:default) root@k8s-m:~# kubectl rollout history deployment roll-nginx
deployment.apps/roll-nginx
REVISION CHANGE-CAUSE
1 kubectl apply --filename=roll-nginx.yaml --record=true
3 kubectl set image deployment roll-nginx nginx=nginx:1.17 --record=true
4 kubectl set image deployment roll-nginx nginx=nginx:1.16 --record=true
특정 시점으로 원복 ?
k rollout undo deployment roll-nginx --to-revision=1
(admin-k8s:default) root@k8s-m:~# k rollout undo deployment roll-nginx --to-revision=1
deployment.apps/roll-nginx rolled back
3
확인?
kubectl get pod -o yaml | grep "image: nginx"
(admin-k8s:default) root@k8s-m:~# kubectl get pod -o yaml | grep "image: nginx"
- image: nginx:1.15.12
image: nginx:1.15.12
- image: nginx:1.15.12
image: nginx:1.15.12
- image: nginx:1.15.12
image: nginx:1.15.12
4
삭제
k delete deploy roll-nginx
1
blue / green 업데이트
https://brunch.co.kr/@topasvga/1683
2
카나리 업데이트
https://brunch.co.kr/@topasvga/1710
다음 공부는
82. 외부로 노출하는 nodeport서비스
https://brunch.co.kr/@topasvga/2105
감사합니다.