Cloud/Kubernetes

Kubernetes) Kubernetes Deployment

Adım Kim 2022. 10. 27. 00:39
학습 목표 : k8s의 Replicaset 를 관리하기 위한 Deployment 에대해 알아본다.

Deployment 란?

  • ReplicaSet을 관리하며 앱 배포에 특화되어있다.
  • Pod 실행 개수를 유지시키는것 뿐만 아니라, Rolling Update나 Rollback 등 유용한 기능을 가지고 있다.


Deployment  사용 예

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-nginx
  labels: 
    app: deployment-nginx
  spec:
    replicas: 3                    # pod 실행개수 지정, ReplicaSet과 마찬가지로 .spec.replicas 필드에 지정
    selector:
      matchLabels:
        app: nginx-pods            # .metadata.labels의 하위 필드와 같게 설정
    template:
      metadata:
        name: nginx-pod
        labels:
          app: nginx-pods
      spec:
        containers:                
          - name: nginx            # pod에서 사용할 컨테이너 이름
            image: nginx:1.20.2
            ports:
              -containerPort: 80
  • 기본적으로 ReplicaSet의 YAML 내용의 차이가 거의 없다.
  • ReplicaSet과 차이점은 kind에 Deployment를 명시한다.
  • Deployment 생성
kubectl apply -f <Deployment YAML명>
  • Deployment와 생성된 replicaset, pod 확인
kubectl get deploy,rs,pods
  • Deployment 를 YAML형식으로 출력
kubectl get deployments/nginx-deploy -o yaml
# kubectl get deployments/<deployment 이름> -o yaml
  • Deployment  업데이트
kubectl set image deployment/deployment-nginx nginx=nginx:1.22.0
# kubectl set <set 대상필드> <set 대상 필드를 가지고있는 Object> <변경 내용>


Rolling Update 방식으로 Deployment 업데이트

  • Deployment YAML 파일에 strategy 를 추가한다.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-nginx
  labels: 
    app: deployment-nginx
  spec:
    replicas: 3
    strategy:                 # rolling Update strategy
      type: RollingUpdate     # strategy type
      rollingUpdate:          # rolling Update option
        maxSurge: 1           # maxSurge - update 할 때 최대 얼마만큼의 Pod를 더 생성할지 설정
        maxUnavailable: 0     # maxUnavailable - update 할 때 최대 얼마만큼의 pod가 비활성상태여도 되는지 설정
    selector:
      matchLabels:
        app: nginx-pods
    template:
      metadata:
        name: nginx-pod
        labels:
          app: nginx-pods
      spec:
        containers:                
          - name: nginx
            image: nginx:1.20.2
            ports:
              -containerPort: 80
  • strategy.rollingUpdate.maxSurge는 최대 Pod 생성 수를 설정하며 정수값 또는 %를 사용가능
  • strategy.rollingUpdate.maxUnavailable은 최소 동작 Pod 수를 설정하며 정수값 또는 %를 사용가능
  • Deployment YAML 변경사항 적용
kubectl apply -f <Deployment YAML 파일명>
  • rollingUpdate 설정이 잘 적용되는지 확인하기 위해 모니터링 명령 실행
watch "kubectl get deployment"  # deployment 상태 모니터링
watch "kubectl get pods"        # pod 상태 모니터링
  • 업데이트 진행
kubectl set image deployment/deployment-nginx nginx=nginx:1.23.0
  • 업데이트 배포상태 확인

kubectl rollout status deployment/deployment-nginx


Deployment Rollback 하기

  • 배포이력 확인하기
# Deployment 배포이력 확인
kubectl rollout history deployment/<Deployment 이름>
# Deployment revision 배포 정보 확인
kubectl rollout history deployment/<Deployment 이름> --revision=<revision 번호>
  • 이전 버전으로 Rollback
kubectl rollout undo deployment/<Deployment 이름>
  • 특정 revision 번호로 rollback

kubectl rollout undo deployment/<Deployment 이름> --to-revision=<revision 번호>