디플로이먼트(Deployment)

https://kubernetes.io/ko/docs/concepts/workloads/controllers/deployment/

레플리카셋을 관리하고 컨트롤한다. 애플리케이션의 업데이트와 배포를 쉽게 하기 위해 만든 개념

디플로이먼트 생성 확인

vagrant@ubuntu:~/kub01$ vi deployment-nginx.yml
`YAML
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-nginx
  template:
    metadata:
      name: my-nginx-pod
      labels:
        app: my-nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.10
        ports:
        - containerPort: 80
`
vagrant@ubuntu:~/kub01$ kubectl apply -f deployment-nginx.yml
deployment.apps/my-nginx-deployment created

vagrant@ubuntu:~/kub01$ kubectl get deployment
NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
my-nginx-deployment   3/3     3            3           17s

vagrant@ubuntu:~/kub01$ kubectl get replicasets
NAME                             DESIRED   CURRENT   READY   AGE
my-nginx-deployment-7484748b57   3         3         3       30s

vagrant@ubuntu:~/kub01$ kubectl get pods
NAME                                   READY   STATUS    RESTARTS   AGE
my-nginx-deployment-7484748b57-dlhbn   1/1     Running   0          38s
my-nginx-deployment-7484748b57-sc6bk   1/1     Running   0          38s
my-nginx-deployment-7484748b57-vr74n   1/1     Running   0          38s

디플로이먼트를 삭제했을 때, replicaset, pod도 함께 삭제됨 확인

vagrant@ubuntu:~/kub01$ kubectl delete deployment my-nginx-deployment
deployment.apps "my-nginx-deployment" deleted

vagrant@ubuntu:~/kub01$ kubectl get deployment
No resources found in default namespace.

vagrant@ubuntu:~/kub01$ kubectl get replicasets
No resources found in default namespace.

vagrant@ubuntu:~/kub01$ kubectl get pods
No resources found in default namespace.

디플로이먼트 사용 이유?

디플로이먼트는 컨테이너 애플리케이션을 배포하고 관리하는 역할

애플리케이션을 업데이트 할 때 레플리카셋의 변경 사항을 저장하는 리비전을 남겨 롤백 가능하게 해 주고, 무중단 서비스를 위한 파드의 롤링 업데이트 전략을 지정할 있음

--record 옵션을 추가해 디플로이먼트 생성

vagrant@ubuntu:~/kub01$ kubectl apply -f deployment-nginx.yml --record
deployment.apps/my-nginx-deployment created

vagrant@ubuntu:~/kub01$ kubectl get pods
NAME                                   READY   STATUS    RESTARTS   AGE
my-nginx-deployment-7484748b57-8ph87   1/1     Running   0          8s
my-nginx-deployment-7484748b57-fkc2q   1/1     Running   0          8s
my-nginx-deployment-7484748b57-v7hkr   1/1     Running   0          8s

kubectl set image 명령으로 pod 이미지 변경

vagrant@ubuntu:~/kub01$ kubectl set image deployment my-nginx-deployment nginx=nginx:1.11 --record
                                                     디플로이먼트 이름    컨테이너 이름
deployment.apps/my-nginx-deployment image updated

vagrant@ubuntu:~/kub01$ kubectl get pods
NAME                                   READY   STATUS    RESTARTS   AGE
my-nginx-deployment-556b57945d-mlj7s   1/1     Running   0          14s
my-nginx-deployment-556b57945d-sklj2   1/1     Running   0          6s
my-nginx-deployment-556b57945d-tdg2t   1/1     Running   0          4s

pods 의 NAME을 보면 바뀐것을 확인 할 수 있다. 실습 예제에선 nginx 버전을 바꿨기 때문에 기존 pod이 전부 내려가고 새로운 pod 가 replicasetd규칙에 의해 3개가 올라옴

replicas 값만 변경해서는 레플리카셋의 교체가 일어나지는 않는다.

리비전 정보를 확인

--record=true 옵션으로 디플로이먼트를 변경하면 변경 사항을 기록하여 해당 버전의 레플리카셋을 보관할 수 있다.

vagrant@ubuntu:~/kub01$ kubectl rollout history deployment my-nginx-deployment
deployment.apps/my-nginx-deployment
REVISION  CHANGE-CAUSE
1         kubectl apply --filename=deployment-nginx.yml --record=true
2         kubectl set image deployment my-nginx-deployment nginx=nginx:1.11 --record=true

이전 버전의 레플리카셋으로 롤백

vagrant@ubuntu:~/kub01$ kubectl rollout undo deployment my-nginx-deployment --to-revision=1
deployment.apps/my-nginx-deployment rolled back

vagrant@ubuntu:~/kub01$ kubectl get pods
NAME                                   READY   STATUS    RESTARTS   AGE
my-nginx-deployment-7484748b57-2mks2   1/1     Running   0          12s
my-nginx-deployment-7484748b57-2xpsw   1/1     Running   0          15s
my-nginx-deployment-7484748b57-ngcd4   1/1     Running   0          14s

vagrant@ubuntu:~/kub01$ kubectl get replicasets
NAME                             DESIRED   CURRENT   READY   AGE
my-nginx-deployment-556b57945d   0         0         0       11m
my-nginx-deployment-7484748b57   3         3         3       15m

vagrant@ubuntu:~/kub01$ kubectl rollout history deployment my-nginx-deployment
deployment.apps/my-nginx-deployment
REVISION  CHANGE-CAUSE
2         kubectl set image deployment my-nginx-deployment nginx=nginx:1.11 --record=true
3         kubectl apply --filename=deployment-nginx.yml --record=true

디플로이먼트 상세 정보 확인

vagrant@ubuntu:~/kub01$ kubectl describe deploy my-nginx-deployment
Name:                   my-nginx-deployment
Namespace:              default
CreationTimestamp:      Mon, 21 Sep 2020 04:13:55 +0000
Labels:                 <none>
Annotations:            deployment.kubernetes.io/revision: 3
                        kubernetes.io/change-cause: kubectl apply --filename=deployment-nginx.yml --record=true
Selector:               app=my-nginx
Replicas:               3 desired | 3 updated | 3 total | 3 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=my-nginx
  Containers:
   nginx:
    Image:        nginx:1.10
    Port:         80/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   my-nginx-deployment-7484748b57 (3/3 replicas created)
Events:
  Type    Reason             Age                  From                   Message
  ----    ------             ----                 ----                   -------
  Normal  ScalingReplicaSet  15m                  deployment-controller  Scaled up replica set my-nginx-deployment-556b57945d to 1
  Normal  ScalingReplicaSet  15m                  deployment-controller  Scaled down replica set my-nginx-deployment-7484748b57 to 2
  Normal  ScalingReplicaSet  15m                  deployment-controller  Scaled up replica set my-nginx-deployment-556b57945d to 2
  Normal  ScalingReplicaSet  14m                  deployment-controller  Scaled down replica set my-nginx-deployment-7484748b57 to 1
  Normal  ScalingReplicaSet  14m                  deployment-controller  Scaled up replica set my-nginx-deployment-556b57945d to 3
  Normal  ScalingReplicaSet  14m                  deployment-controller  Scaled down replica set my-nginx-deployment-7484748b57 to 0
  Normal  ScalingReplicaSet  3m43s                deployment-controller  Scaled up replica set my-nginx-deployment-7484748b57 to 1
  Normal  ScalingReplicaSet  3m42s                deployment-controller  Scaled down replica set my-nginx-deployment-556b57945d to 2
  Normal  ScalingReplicaSet  3m42s                deployment-controller  Scaled up replica set my-nginx-deployment-7484748b57 to 2
  Normal  ScalingReplicaSet  3m40s (x2 over 19m)  deployment-controller  Scaled up replica set my-nginx-deployment-7484748b57 to 3
  Normal  ScalingReplicaSet  3m40s                deployment-controller  Scaled down replica set my-nginx-deployment-556b57945d to 1
  Normal  ScalingReplicaSet  3m37s                deployment-controller  Scaled down replica set my-nginx-deployment-556b57945d to 0

 

반응형

+ Recent posts