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' 카테고리의 다른 글

    Kubernetes) Ingress  (0) 2022.10.30
    Kubernetes) Service Object  (0) 2022.10.30
    Kubernetes) Application 배포  (0) 2022.10.24
    Kubernetes) Kubernetes ReplicaSet  (0) 2022.10.21
    Kubernetes) AWS 기반 쿠버네티스 H.A 구축 프로젝트 2편  (1) 2022.10.18

    댓글

Designed by Tistory.