본문 바로가기

Kubernetes

쿠버네티스 기초 Rolling Update

Container v1 을 Containerv2로 업데이트 하기 위해서는 두가지 방법을 떠올릴것이다.

  1. 기존의 v1 을 다 삭제하고 새로운 v2 를 삭제 하는 방법 하지만 다운타임이 발생하게 된다.

  2. v2를 미리 추가하고 v1 을 지우는 방법

    #rollout 명령어
    kubectl rollout status deployment/myapp-deployment
    #rollout history
    kubecyl rollout history deployment/mtapp-deployment

Rolling update

롤링업데이트를 사용하면 다운타임을 최소한으로 줄일수 있다.

기존 deployment_test.yml

apiVersion: apps/v1
kind: Deployment
metatdata:
  name: myapp-deployment
  labels:
    app: myapp
    type: front-end
spec:
  template:
    metadata:
      name: myapp-pod
      labels:
        app: myapp
        type: front-end
    spec:
      containers:
      - name: nginx-container
        image: nginx:1.7.1
  replicas: 3
  selector:
    matchLabels:
      type: front-end

기존 pod 구성을 보면 1.7.1 버전의 nginx 를 볼수있다.

KDS-2:yaml kimdaesung$ kubectl create -f deployment_test.yml --record
deployment.apps/nginx-deployment created
KDS-2:yaml kimdaesung$ kubectl describe deployments.apps nginx-deployment 
Name:                   nginx-deployment
Namespace:              default
CreationTimestamp:      Tue, 31 Mar 2020 17:03:54 +0900
Labels:                 app=nginx
                        type=front-end
Annotations:            deployment.kubernetes.io/revision: 1
                        kubernetes.io/change-cause: kubectl create --filename=deployment_test.yml --record=true
Selector:               type=front-end
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=nginx
           type=front-end
  Containers:
   nginx-container:
    Image:        nginx:1.7.1
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   nginx-deployment-695c98f8c (3/3 replicas created)
Events:
  Type    Reason             Age    From                   Message
  ----    ------             ----   ----                   -------
  Normal  ScalingReplicaSet  4m42s  deployment-controller  Scaled up replica set nginx-deployment-695c98f8c to 3
KDS-2:yaml kimdaesung$ kubectl get deployments.apps nginx-deployment 
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3/3     3            3           16m

nginx 버전을 최신으로 업그레이드

 image: nginx #:[버전] 을 적어주지 않으면 자동으로 최신버전을 가져오게 된다.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
    type: front-end
spec:
  template:
    metadata:
      name: nginx-pod
      labels:
        app: nginx
        type: front-end
    spec:
      containers:
        - name: nginx-container
          image: nginx
  replicas: 3
  selector:
    matchLabels:
      type: front-end

수정된 yml 파일 적용 후 확인

KDS-2:yaml kimdaesung$ kubectl apply -f deployment_test.yml 
Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
deployment.apps/nginx-deployment configured
KDS-2:yaml kimdaesung$ kubectl rollout status deployment/nginx-deployment
deployment "nginx-deployment" successfully rolled out

KDS-2:yaml kimdaesung$ kubectl get pods
NAME                                READY   STATUS    RESTARTS   AGE
1pod-2container                     2/2     Running   16         9d
myapp-deployment-7c87d856d5-5hhpd   1/1     Running   2          2d19h
myapp-deployment-7c87d856d5-7f5mh   1/1     Running   2          2d19h
myapp-deployment-7c87d856d5-tbtb9   1/1     Running   2          2d19h
nginx-deployment-68dd9f6c6d-ddx4t   1/1     Running   0          48s
nginx-deployment-68dd9f6c6d-ntlq8   1/1     Running   0          46s
nginx-deployment-68dd9f6c6d-sz9qf   1/1     Running   0          45s
redis-pod                           1/1     Running   8          9d
replication-1pod-2container-9ntqv   2/2     Running   12         6d11h
KDS-2:yaml kimdaesung$ kubectl describe deployments.apps nginx-deployment 
Name:                   nginx-deployment
Namespace:              default
CreationTimestamp:      Tue, 31 Mar 2020 17:21:35 +0900
Labels:                 app=nginx
                        type=front-end
Annotations:            deployment.kubernetes.io/revision: 2
                        kubectl.kubernetes.io/last-applied-configuration:
                          {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"labels":{"app":"nginx","type":"front-end"},"name":"nginx-deploym...
                        kubernetes.io/change-cause: kubectl create --filename=deployment_test.yml --record=true
Selector:               type=front-end
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=nginx
           type=front-end
  Containers:
   nginx-container:
    Image:        nginx
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   nginx-deployment-68dd9f6c6d (3/3 replicas created)
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  18h   deployment-controller  Scaled up replica set nginx-deployment-fbb556bdb to 3
  Normal  ScalingReplicaSet  57s   deployment-controller  Scaled up replica set nginx-deployment-68dd9f6c6d to 1
  Normal  ScalingReplicaSet  55s   deployment-controller  Scaled down replica set nginx-deployment-fbb556bdb to 2
  Normal  ScalingReplicaSet  55s   deployment-controller  Scaled up replica set nginx-deployment-68dd9f6c6d to 2
  Normal  ScalingReplicaSet  54s   deployment-controller  Scaled down replica set nginx-deployment-fbb556bdb to 1
  Normal  ScalingReplicaSet  54s   deployment-controller  Scaled up replica set nginx-deployment-68dd9f6c6d to 3
  Normal  ScalingReplicaSet  53s   deployment-controller  Scaled down replica set nginx-deployment-fbb556bdb to 0

Events 쪽을 보면 pod의 로그를 볼수 있다.

Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  18h   deployment-controller  Scaled up replica set nginx-deployment-fbb556bdb to 3
  Normal  ScalingReplicaSet  57s   deployment-controller  Scaled up replica set nginx-deployment-68dd9f6c6d to 1
  Normal  ScalingReplicaSet  55s   deployment-controller  Scaled down replica set nginx-deployment-fbb556bdb to 2
  Normal  ScalingReplicaSet  55s   deployment-controller  Scaled up replica set nginx-deployment-68dd9f6c6d to 2
  Normal  ScalingReplicaSet  54s   deployment-controller  Scaled down replica set nginx-deployment-fbb556bdb to 1
  Normal  ScalingReplicaSet  54s   deployment-controller  Scaled up replica set nginx-deployment-68dd9f6c6d to 3
  Normal  ScalingReplicaSet  53s   deployment-controller  Scaled down replica set nginx-deployment-fbb556bdb to 0

'Kubernetes' 카테고리의 다른 글

쿠버네티스 노드 추가하기  (0) 2020.04.18
쿠버네티스 설치하기  (0) 2020.04.09
쿠버네티스 기초 Deployment  (0) 2020.03.29
쿠버네티스 기초 ReplicaSet  (0) 2020.03.27
쿠버네티스 기초 Replication Controller  (0) 2020.03.26