본문 바로가기
Linux&Ubuntu/Docker&kuber

Deloyment 사용하기

by Vittorio_Lee 2023. 9. 8.
728x90
반응형
SMALL

Deloyment 
1)Deployment -> ReplicaSet-> pod 컨트롤
-ReplicaSet 을 컨트롤해서 Pod 수를 조정
-Rolling Update & Rolling Back
 
-Rolling Update & Rolling Back란
목표
kubectl을 이용하여 롤링 업데이트 수행하기
애플리케이션 업데이트하기
사용자들은 애플리케이션이 항상 가용한 상태일 것이라 여기고 개발자들은 하루에 여러번씩 새로운 버전을 배포하도록 요구 받고있다. 쿠버네티스에서는 이것을 롤링 업데이트를 통해 이루고 있다. 롤링 업데이트는 파드 인스턴스를 점진적으로 새로운 것으로 업데이트하여 디플로이먼트 업데이트가 서비스 중단 없이 이루어질 수 있도록 해준다. 새로운 파드는 가용한 자원을 보유한 노드로 스케줄될 것이다.
* ps https://kubernetes.io/ko/docs/tutorials/kubernetes-basics/update/update-intro/
두개의 yaml파일을 비교 합니다 

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: rs-nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: webui
  template:
    metadata:
      name: nginx-pod
      labels:
        app: webui
    spec:
      containers:
      - name: nginx-container
        image: nginx:1.14
apiVersion: apps/v1
kind: Deloyment
metadata:
  name: deploy-nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: webui
  template:
    metadata:
      name: nginx-pod
      labels:
        app: webui
    spec:
      containers:
      - name: nginx-container
        image: nginx:1.14

                  

# vi deploy-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: webui
  template:
    metadata:
      name: nginx-pod
      labels:
        app: webui
    spec:
      containers:
      - name: nginx-container
        image: nginx:1.14

 

# kubectl create -f deploy-nginx.yaml 
deployment.apps/deploy-nginx created

  

# kubectl get pods -o wide
NAME                           READY   STATUS    RESTARTS   AGE   IP             NODE      NOMINATED NODE   READINESS GATES
deploy-nginx-bd76d5967-945ds   1/1     Running   0          20s   10.101.1.150   worker2              
deploy-nginx-bd76d5967-pgm9w   1/1     Running   0          20s   10.101.1.97    worker1              
deploy-nginx-bd76d5967-qcbg8   1/1     Running   0          20s   10.101.1.96    worker1              

전체 보기 명령어 

# watch kubectl get deploy,rs,pod
Every 2.0s: kubectl get deploy,rs,pod                                                                    master: Fri Sep  8 13:27:33 2023

NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/deploy-nginx   3/3     3            3           2m4s

NAME                                     DESIRED   CURRENT   READY   AGE
replicaset.apps/deploy-nginx-bd76d5967   3         3         3       2m4s

NAME                               READY   STATUS    RESTARTS   AGE
pod/deploy-nginx-bd76d5967-945ds   1/1     Running   0          2m4s
pod/deploy-nginx-bd76d5967-pgm9w   1/1     Running   0          2m4s
pod/deploy-nginx-bd76d5967-qcbg8   1/1     Running   0          2m4s

순서대로 확인 가능하다.
pod/deploy-nginx-bd76d5967-945ds 
디플로이먼트        레플리카    파드 

삭제 시도 시 
디플로이먼트를 지워야지만 다지워집니다.

# kubectl delete deployment.apps deploy-nginx
deployment.apps "deploy-nginx" deleted
Deployment Rolling Update & Rolling Back란

Roling update 
 - kubectl set image deployment <deploy_name> <container_name> = <new_virsion_image>


rollback
 - kucuctl rollout history deployment <deploy_name>
 - kucuctl rollout undo deploy <deploy_name>

롤링 업데이트 및 복원 진행입니다. 

deplotment 
 app
 replica=3
nginx=1.14
ReplicaSet xxx  
1.14 x 3
kubectl set image deployment app-deploy app=nginx:1.15--record

ReplicaSet yyy
 하나씩 xxx(1.14) 서버가 사라지고 하나씩 yyy(1.15)서버가 늘어난다
# vi deployment-exam1.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-deploy
spec:
  selector:
    matchLabels:
      app: webui
  replicas: 3
  template:
    metadata:
      labels:
        app: webui
    spec:
      containers:
      - image: nginx:1.14
        name: web
        ports:
        -containerPort: 80

 

# kubectl create -f deployment-exam1.yaml 
deployment.apps/app-deploy created

 

# kubectl get deploy,rs,pod
NAME                         READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/app-deploy   3/3     3            3           29s

NAME                                   DESIRED   CURRENT   READY   AGE
replicaset.apps/app-deploy-d599fcdf4   3         3         3       29s

NAME                             READY   STATUS    RESTARTS   AGE
pod/app-deploy-d599fcdf4-bcc85   1/1     Running   0          29s
pod/app-deploy-d599fcdf4-kpq9b   1/1     Running   0          29s
pod/app-deploy-d599fcdf4-lc46z   1/1     Running   0          29s

 

# kubectl describe pod/app-deploy-d599fcdf4-lc46z
...
    Image:          nginx:1.14
...

버전확인 가능 
# kubectl rollout history deployment app-deploy
deployment.apps/app-deploy 
REVISION  CHANGE-CAUSE
1              <none>
--record 옵션 안쓰면 히스토리 확인 불가 

# kubectl delete -f deployment-exam1.yaml 
삭제

 

# kubectl create -f deployment-exam1.yaml --record
Flag --record has been deprecated, --record will be removed in the future
deployment.apps/app-deploy created
# kubectl rollout history deployment app-deploy
deployment.apps/app-deploy 
REVISION  CHANGE-CAUSE
1         kubectl create --filename=deployment-exam1.yaml --record=true
# kubectl set image deploy app-deploy web=nginx:1.15 --record 실행시 

 

# kubectl describe pod/app-deploy-854cc64799-t7dr2
...
    Image:          nginx:1.15
...

변환된걸 볼수있다 . 
# kubectl set image deploy app-deploy web=nginx:1.16 --record 실행시 


업데이트 이력 
# kubectl rollout history deployment app-deploy
deployment.apps/app-deploy 
REVISION  CHANGE-CAUSE
1         kubectl create --filename=deployment-exam1.yaml --record=true
2         kubectl set image deploy app-deploy web=nginx:1.15 --record=true
3         kubectl set image deploy app-deploy web=nginx:1.16 --record=true

rolling 멈춤 재시작 명령어 

# kubectl rollout pause deploymnet app-deploy   멈춤 
# kubectl rollout resumed deploymnet app-deploy 재시작
# vi deployment-exam2.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-nginx
  annotations:
    kubernetes.io/change-cause: version 1.14
spec:
  progressDeadlineSeconds: 600
  revisionHistoryLimit: 10
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  replicas: 3
  selector :
    matchLabels:
      app: webui
  template:
    metadata:
      labels:
        app: webui
    spec:
      containers:
      - image: nginx:1.14
        name: web
        ports:
        - containerPort: 80
# kubectl rollout history deployment app-deploy
deployment.apps/app-deploy 
REVISION  CHANGE-CAUSE
1         kubectl create --filename=deployment-exam1.yaml --record=true
2         kubectl set image deploy app-deploy web=nginx:1.15 --record=true
3         kubectl set image deploy app-deploy web=nginx:1.16 --record=true
# kubectl rollout undo deployment app-deploy --to-revision=2 
# kubectl rollout history deployment app-deploy
deployment.apps/app-deploy 
REVISION  CHANGE-CAUSE
1         kubectl create --filename=deployment-exam1.yaml --record=true
3         kubectl set image deploy app-deploy web=nginx:1.16 --record=true
4         kubectl set image deploy app-deploy web=nginx:1.15 --record=true

변경된것을 볼수있습니다 .


yaml파일을 통해 롤링 작업 

# vi deployment-exam2.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-nginx
  annotations:
    kubernetes.io/change-cause: version 1.14
spec:
  progressDeadlineSeconds: 600
  revisionHistoryLimit: 10
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  replicas: 3
  selector :
    matchLabels:
      app: webui
  template:
    metadata:
      labels:
        app: webui
    spec:
      containers:
      - image: nginx:1.14
        name: web
        ports:
        - containerPort: 80
# kubectl apply -f deployment-exam2.yaml 
deployment.apps/deploy-nginx created

 

# kubectl describe pod deploy-nginx-d599fcdf4-nwqdl

    kubernetes.io/change-cause: version 1.15
      - image: nginx:1.15
로 변경 

 

# kubectl apply -f deployment-exam2.yaml 
deployment.apps/deploy-nginx configured
이력 
# kubectl rollout history deployment deploy-nginx 
deployment.apps/deploy-nginx 
REVISION  CHANGE-CAUSE
1         version 1.14
2         version 1.15
# kubectl delete deployment.apps deploy-nginx
deployment.apps "deploy-nginx" deleted

 

728x90
반응형
LIST

'Linux&Ubuntu > Docker&kuber' 카테고리의 다른 글

StatefulSet 사용하기  (0) 2023.09.11
DaemonSet 사용하기.  (0) 2023.09.11
ReplicaSet 사용하기  (0) 2023.09.08
controller종류와 Replication controller  (0) 2023.09.07
pod 환경변수, 패턴의 종류 3가지  (0) 2023.09.07