ABOUT ME

Today
Yesterday
Total
  • Kubernetes) Kubernetes Deployment
    Cloud/Kubernetes 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 번호>


    'Cloud > Kubernetes' 카테고리의 다른 글

    댓글

Designed by Tistory.