728x90
반응형
SMALL
Deloyment
1)Deployment -> ReplicaSet-> pod 컨트롤
-ReplicaSet 을 컨트롤해서 Pod 수를 조정
-Rolling Update & Rolling Back
-Rolling Update & Rolling Back란
목표
kubectl을 이용하여 롤링 업데이트 수행하기
애플리케이션 업데이트하기
사용자들은 애플리케이션이 항상 가용한 상태일 것이라 여기고 개발자들은 하루에 여러번씩 새로운 버전을 배포하도록 요구 받고있다. 쿠버네티스에서는 이것을 롤링 업데이트를 통해 이루고 있다. 롤링 업데이트는 파드 인스턴스를 점진적으로 새로운 것으로 업데이트하여 디플로이먼트 업데이트가 서비스 중단 없이 이루어질 수 있도록 해준다. 새로운 파드는 가용한 자원을 보유한 노드로 스케줄될 것이다.
* ps https://kubernetes.io/ko/docs/tutorials/kubernetes-basics/update/update-intro/
두개의 yaml파일을 비교 합니다
apiVersion: apps/v1 kind: ReplicaSet metadata: name: rs-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 |
apiVersion: apps/v1 kind: Deloyment 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 |
# 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 |
# kubectl create -f deploy-nginx.yaml deployment.apps/deploy-nginx created |
# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES deploy-nginx-bd76d5967-945ds 1/1 Running 0 20s 10.101.1.150 worker2 deploy-nginx-bd76d5967-pgm9w 1/1 Running 0 20s 10.101.1.97 worker1 deploy-nginx-bd76d5967-qcbg8 1/1 Running 0 20s 10.101.1.96 worker1 |
전체 보기 명령어
# watch kubectl get deploy,rs,pod |
Every 2.0s: kubectl get deploy,rs,pod master: Fri Sep 8 13:27:33 2023 NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/deploy-nginx 3/3 3 3 2m4s NAME DESIRED CURRENT READY AGE replicaset.apps/deploy-nginx-bd76d5967 3 3 3 2m4s NAME READY STATUS RESTARTS AGE pod/deploy-nginx-bd76d5967-945ds 1/1 Running 0 2m4s pod/deploy-nginx-bd76d5967-pgm9w 1/1 Running 0 2m4s pod/deploy-nginx-bd76d5967-qcbg8 1/1 Running 0 2m4s |
순서대로 확인 가능하다.
pod/deploy-nginx-bd76d5967-945ds
디플로이먼트 레플리카 파드
삭제 시도 시
디플로이먼트를 지워야지만 다지워집니다.
# kubectl delete deployment.apps deploy-nginx deployment.apps "deploy-nginx" deleted |
Deployment Rolling Update & Rolling Back란 Roling update - kubectl set image deployment <deploy_name> <container_name> = <new_virsion_image> rollback - kucuctl rollout history deployment <deploy_name> - kucuctl rollout undo deploy <deploy_name> |
롤링 업데이트 및 복원 진행입니다.
deplotment app |
replica=3 nginx=1.14 |
ReplicaSet xxx 1.14 x 3 |
kubectl set image deployment app-deploy app=nginx:1.15--record |
ReplicaSet yyy 하나씩 xxx(1.14) 서버가 사라지고 하나씩 yyy(1.15)서버가 늘어난다 |
# vi 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 |
# kubectl create -f deployment-exam1.yaml deployment.apps/app-deploy created |
# kubectl get deploy,rs,pod NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/app-deploy 3/3 3 3 29s NAME DESIRED CURRENT READY AGE replicaset.apps/app-deploy-d599fcdf4 3 3 3 29s NAME READY STATUS RESTARTS AGE pod/app-deploy-d599fcdf4-bcc85 1/1 Running 0 29s pod/app-deploy-d599fcdf4-kpq9b 1/1 Running 0 29s pod/app-deploy-d599fcdf4-lc46z 1/1 Running 0 29s |
# kubectl describe pod/app-deploy-d599fcdf4-lc46z ... Image: nginx:1.14 ... 버전확인 가능 |
# kubectl rollout history deployment app-deploy deployment.apps/app-deploy REVISION CHANGE-CAUSE 1 <none> --record 옵션 안쓰면 히스토리 확인 불가 # kubectl delete -f deployment-exam1.yaml 삭제 |
# kubectl create -f deployment-exam1.yaml --record Flag --record has been deprecated, --record will be removed in the future deployment.apps/app-deploy created |
# kubectl rollout history deployment app-deploy deployment.apps/app-deploy REVISION CHANGE-CAUSE 1 kubectl create --filename=deployment-exam1.yaml --record=true |
# kubectl set image deploy app-deploy web=nginx:1.15 --record 실행시 |
# kubectl describe pod/app-deploy-854cc64799-t7dr2 ... Image: nginx:1.15 ... 변환된걸 볼수있다 . |
# kubectl set image deploy app-deploy web=nginx:1.16 --record 실행시 업데이트 이력 # 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 deploy app-deploy web=nginx:1.15 --record=true 3 kubectl set image deploy app-deploy web=nginx:1.16 --record=true |
rolling 멈춤 재시작 명령어
# kubectl rollout pause deploymnet app-deploy 멈춤 # kubectl rollout resumed deploymnet app-deploy 재시작 |
# vi deployment-exam2.yaml |
apiVersion: apps/v1 kind: Deployment metadata: name: deploy-nginx annotations: kubernetes.io/change-cause: version 1.14 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: - image: nginx:1.14 name: web ports: - containerPort: 80 |
# 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 deploy app-deploy web=nginx:1.15 --record=true 3 kubectl set image deploy app-deploy web=nginx:1.16 --record=true |
# kubectl rollout undo deployment app-deploy --to-revision=2 |
# kubectl rollout history deployment app-deploy deployment.apps/app-deploy REVISION CHANGE-CAUSE 1 kubectl create --filename=deployment-exam1.yaml --record=true 3 kubectl set image deploy app-deploy web=nginx:1.16 --record=true 4 kubectl set image deploy app-deploy web=nginx:1.15 --record=true |
변경된것을 볼수있습니다 .
yaml파일을 통해 롤링 작업
# vi deployment-exam2.yaml apiVersion: apps/v1 kind: Deployment metadata: name: deploy-nginx annotations: kubernetes.io/change-cause: version 1.14 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: - image: nginx:1.14 name: web ports: - containerPort: 80 |
# kubectl apply -f deployment-exam2.yaml deployment.apps/deploy-nginx created |
# kubectl describe pod deploy-nginx-d599fcdf4-nwqdl kubernetes.io/change-cause: version 1.15 - image: nginx:1.15 로 변경 |
# kubectl apply -f deployment-exam2.yaml deployment.apps/deploy-nginx configured |
이력 # kubectl rollout history deployment deploy-nginx deployment.apps/deploy-nginx REVISION CHANGE-CAUSE 1 version 1.14 2 version 1.15 |
# kubectl delete deployment.apps deploy-nginx deployment.apps "deploy-nginx" deleted |
728x90
반응형
LIST
'Linux&Ubuntu > Docker&kuber' 카테고리의 다른 글
StatefulSet 사용하기 (0) | 2023.09.11 |
---|---|
DaemonSet 사용하기. (0) | 2023.09.11 |
ReplicaSet 사용하기 (0) | 2023.09.08 |
controller종류와 Replication controller (0) | 2023.09.07 |
pod 환경변수, 패턴의 종류 3가지 (0) | 2023.09.07 |