0과 1을 공부하다.

[Kube] Kubernetes - Deployment (6) 본문

Study/Server

[Kube] Kubernetes - Deployment (6)

Developer_Jay 2024. 7. 22. 23:27
728x90

본 게시글은 인프런 subicura 강사님의 초보를 위한 쿠버네티스 안내서 강의 수강 후 작성한 내용입니다.


Deployment (배포)

  • Deployment는 쿠버네티스에서 가장 널리 사용되는 오브젝트이다.
  • ReplicaSet을 이용하여 Pod을 업데이트하고 이력을 관리하여 롤백(Rollback)하거나 특정 버전(revision)으로 돌아갈 수 있다.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: echo-deploy
spec:
  replicas: 4
  selector:
    matchLabels:
      app: echo
      tier: app
  template:
    metadata:
      labels:
        app: echo
        tier: app
    spec:
      containers:
        - name: echo
          image: ghcr.io/subicura/echo:v1
# Deployment 생성
kubectl apply -f echo-deployment.yml

# 리소스 확인
kubectl get po,rs,deploy

#---------
NAME                               READY   STATUS    RESTARTS   AGE
pod/echo-deploy-5f9566c4d9-7pmrp   1/1     Running   0          9s
pod/echo-deploy-5f9566c4d9-j97jb   1/1     Running   0          9s
pod/echo-deploy-5f9566c4d9-l47nd   1/1     Running   0          9s
pod/echo-deploy-5f9566c4d9-sxchs   1/1     Running   0          9s

NAME                                     DESIRED   CURRENT   READY   AGE
replicaset.apps/echo-deploy-5f9566c4d9   4         4         4       9s

NAME                          READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/echo-deploy   4/4     4            4           9s
#---------

 

image: ghcr.io/subicura/echo:v1 을 image: ghcr.io/subicura/echo:v2 으로 변경 후 다시 배포

# Deployment 생성
kubectl apply -f echo-deployment.yml

# 리소스 확인
kubectl get po,rs,deploy

#---------
NAME                               READY   STATUS    RESTARTS   AGE
pod/echo-deploy-54c84dd47b-x44s6   1/1     Running   0          4s
pod/echo-deploy-54c84dd47b-xdx22   1/1     Running   0          6s
pod/echo-deploy-54c84dd47b-xf6sd   1/1     Running   0          6s
pod/echo-deploy-54c84dd47b-xpzx8   1/1     Running   0          4s

NAME                                     DESIRED   CURRENT   READY   AGE
replicaset.apps/echo-deploy-54c84dd47b   4         4         4       6s
replicaset.apps/echo-deploy-5f9566c4d9   0         0         0       99s

NAME                          READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/echo-deploy   4/4     4            4           99s
#---------

Deployment 버전 업데이트 절차

  • Deployment 새로운 버전을 업데이트하기 위해 레플리카 셋을 이용한다.
    1. 버전을 업데이트하면 새로운 ReplicaSet을 생성하고 해당 ReplicaSet이 새로운 버전의 Pod을 생성한다.
    2. 새로운 ReplicaSet을 0 -> 1개로 조정하고 정상적으로 Pod이 동작하면 기존 ReplicaSet을 4 -> 3개로 조정한다.
    3. 새로운 ReplicaSet을 1 -> 2개로 조정하고 정상적으로 Pod이 동작하면 기존 ReplicaSet을 3 -> 2개로 조정한다.
    4. 새로운 ReplicaSet을 2 -> 3개로 조정하고 정상적으로 Pod이 동작하면 기존 ReplicaSet을 2 -> 1개로 조정한다.
    5. 최종적으로 새로운 ReplicaSet을 4개로 조정하고 정상적으로 Pod이 동작하면 기존 ReplicaSet을 0개로 조정한다
    6. 업데이트 완료

버전관리

  • Deployment는 변경된 상태를 기록한다.
# 히스토리 확인
$ kubectl rollout history deploy/echo-deploy

# revision 1 히스토리 상세 확인
$ kubectl rollout history deploy/echo-deploy --revision=1

# 바로 전으로 롤백
$ kubectl rollout undo deploy/echo-deploy

# 특정 버전으로 롤백
$ kubectl rollout undo deploy/echo-deploy --to-revision=2

배포 전략 설정

  • Deployment 다양한 방식의 배포 전략이 있다.
  • 롤링업데이트(RollingUpdate) 방식을 사용할 때 동시에 업데이트하는 Pod의 개수를 변경한다.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: echo-deploy-st
spec:
  replicas: 4
  selector:
    matchLabels:
      app: echo
      tier: app
  minReadySeconds: 5
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 3
      maxUnavailable: 3 
  template:
    metadata:
      labels:
        app: echo
        tier: app
    spec:
      containers:
        - name: echo
          image: ghcr.io/subicura/echo:v1
          livenessProbe:
            httpGet:
              path: /
              port: 3000

 

 


참고 사이트

728x90
Comments