[쿠버네티스 워크로드] 롤링 업데이트와 롤백 실습

hi·2023년 7월 31일
0

쿠버네티스

목록 보기
30/60

애플리케이션 롤링 업데이트와 롤백


기존 모든 파드를 삭제 후 새로운 파드 생성

  • 잠깐의 다운 타임 발생


새로운 파드를 실행시키고 작업이 완료되면 오래된 파드를 삭제

  • 새 버전을 실행하는 동안 구 버전 파드와 연결
  • 서비스의 레이블셀렉터를 수정하여 간단하게 수정가능


레플리케이션 컨트롤러가 제공하는 롤링 업데이트

  • 이전에는 kubectl을 사용해 스케일링을 사용하여 수동으로 롤링 업데이트 진행 가능
  • kubectl 중단되면 업데이트는 어떻게 할까?
  • 레플리케이션컨트롤러 또는 레플리카셋을 통제할 수 있는 시스템이 필요

디플로이먼트 업데이트 전략 (Strategy Type)

  • Rolling Update (기본값)
    • 오래된 파드를 하나씩 제거하는 동시에 새로운 파드 추가
    • 요청을 처리할 수 있는 양은 그대로 유지
    • 반드시 이전 버전과 새 버전을 동시에 처리 가능하도록 설계한 경우에만 사용해야 함.
  • Recreate
    • 새 파드를 만들기 이전에 파드를 모두 삭제
    • 여러 버전을 동시에 실행 불가능
    • 잠깐의 다운 타임 존재

롤백 실행하기

  • 롤백을 실행하면 이전 업데이트 상태로 돌아감
  • 롤백을 하여도 히스토리의 리비전 상태는 이전 상태로 돌아가지 않음

롤링 업데이터 전략 세부 설정

  • maxSurge
    • 기본값 25%, 개수로도 설정이 가능
    • 최대로 추가 배포를 허용할 개수 설정
    • 4개인 경우 25%이면 1개가 설정 (총 개수 5개까지 동시 파드 운영)
  • maxUnavailable
    • 기본값 25%, 개수로도 설정이 가능
    • 동작하지 않는 파드 개수 설정
    • 4개인 경우 25%이면 1개가 설정 (총 개수 4-1개는 운영해야 함)


kubectl get deploy
kubectl describe deploy http-go
kubectl get deploy http-go -o yaml
kubectl create -f http-go-deployment.yaml --record=true

--record=true는 히스토리 저장


성공적으로 배포되었는지 확인

kubectl rollout status deploy http-go
kubectl rollout history deploy http-go deployment.apps/http-go
kubectl patch deploy http-go -p '{"spec":{"minReadySeconds":10}}'
kubectl get svc
kubectl expose deploy http-go service/http-go exposed

kubectl run -it --rm --image busybox -- bash

"kubectl run -it --rm --image busybox -- bash" 명령어는 Kubernetes 클러스터에서 BusyBox 이미지를 사용하여 인터랙티브한 컨테이너를 실행하는 명령어

"run": 새로운 Pod을 생성하고 실행하는 명령어

"-it": 컨테이너와 터미널 간의 인터랙티브한 세션을 생성

"--rm": 실행이 완료된 후에 컨테이너를 자동으로 제거

"--image busybox": 실행할 컨테이너에 사용할 이미지를 지정합니다. 여기서는 BusyBox 이미지를 사용

"-- bash": 컨테이너 내에서 바로 bash 셸을 실행하도록 지정

imkunyoung@master-1:~$ kubectl get pods
NAME                       READY   STATUS    RESTARTS   AGE
bash                       1/1     Running   0          2m22s
http-go-5569c6b9d7-sfqxb   1/1     Running   0          13m
http-go-5569c6b9d7-tmfj6   1/1     Running   0          13m
http-go-5569c6b9d7-twj9k   1/1     Running   0          13m

wget -O- -q 10.111.99.186:8080
while true; do wget -O- -q 10.111.99.186:8080; sleep 1; done

실행 중인 Deployment인 "http-go"의 컨테이너 이미지를 업데이트

kubectl set image deploy http-go http-go=gasbugs/http-go:v2
kubectl get pods -w
imkunyoung@master-1:~$ kubectl get pods -w
NAME                       READY   STATUS    RESTARTS   AGE
bash                       1/1     Running   0          5m49s
http-go-5569c6b9d7-sfqxb   1/1     Running   0          16m
http-go-5569c6b9d7-tmfj6   1/1     Running   0          16m
http-go-5569c6b9d7-twj9k   1/1     Running   0          16m
http-go-754564c56-bj8hb    1/1     Running   0          11s
http-go-754564c56-jwnws    0/1     Pending   0          0s
http-go-754564c56-jwnws    0/1     Pending   0          0s
http-go-5569c6b9d7-sfqxb   1/1     Terminating   0          16m
http-go-754564c56-jwnws    0/1     ContainerCreating   0          0s
http-go-5569c6b9d7-sfqxb   0/1     Terminating         0          16m
http-go-5569c6b9d7-sfqxb   0/1     Terminating         0          16m
http-go-5569c6b9d7-sfqxb   0/1     Terminating         0          16m
http-go-5569c6b9d7-sfqxb   0/1     Terminating         0          16m
http-go-754564c56-jwnws    1/1     Running             0          3s
http-go-5569c6b9d7-tmfj6   1/1     Terminating         0          17m
http-go-754564c56-5t4r4    0/1     Pending             0          0s
http-go-754564c56-5t4r4    0/1     Pending             0          0s
http-go-754564c56-5t4r4    0/1     ContainerCreating   0          0s
http-go-5569c6b9d7-tmfj6   0/1     Terminating         0          17m
http-go-5569c6b9d7-tmfj6   0/1     Terminating         0          17m
http-go-5569c6b9d7-tmfj6   0/1     Terminating         0          17m
http-go-5569c6b9d7-tmfj6   0/1     Terminating         0          17m
http-go-754564c56-5t4r4    1/1     Running             0          2s
http-go-5569c6b9d7-twj9k   1/1     Terminating         0          17m
http-go-5569c6b9d7-twj9k   0/1     Terminating         0          17m
http-go-5569c6b9d7-twj9k   0/1     Terminating         0          17m
http-go-5569c6b9d7-twj9k   0/1     Terminating         0          17m
http-go-5569c6b9d7-twj9k   0/1     Terminating         0          17m
Welcome! v1
Welcome! v1
Welcome! v1
Welcome! v1
Welcome! v1
Welcome! v1
Welcome! v1
Welcome! v1
Welcome! v1
Welcome! v1
Welcome! v2
Welcome! v1
Welcome! v1
Welcome! v2
Welcome! v1
Welcome! v1
Welcome! v1
Welcome! v2
Welcome! v1
Welcome! v1
Welcome! v1
Welcome! v2
Welcome! v2
Welcome! v2
Welcome! v2
Welcome! v2
Welcome! v2
Welcome! v2
Welcome! v1
Welcome! v2
Welcome! v1
Welcome! v2
Welcome! v2
Welcome! v2
Welcome! v2
Welcome! v2
Welcome! v2
Welcome! v2
kubectl rollout history deploy http-go
kubectl set image deploy http-go http-go=gasbugs/http-go:v2 --record=true
kubectl get rs
kubectl edit deploy http-go --record=true

undo

kubectl rollout undo deploy http-go
kubectl rollout history deploy http-go

특정 revision으로 undo

kubectl rollout undo deploy http-go --to-revision=1
kubectl rollout history deploy

http-go-deploy-v1.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: http-go
  labels:
    app: http-go
spec:
  replicas: 3
  selector:
    matchLabels:
      app: http-go
  template:
    metadata:
      labels:
        app: http-go
    spec:
      containers:
      - name: http-go
        image: gasbugs/http-go:v1
        ports:
        - containerPort: 8080

0개의 댓글