Tools/K8S

Kubernetes Deployment

칼쵸쵸 2023. 7. 1. 19:14

기본 개념

디플로이먼트는 여러 레플리카셋을관리하여 롤링업데이트나 롤백등을 구현하는 리소스

디플로이먼트> 레플리카> 파드 순으로 관리

1) 신규 레플리카셋을 생성

2) 신규 레플리카셋의 레플리카 수를 단계적으로 늘림

3) 이전 레플리카셋의 레플리카 수를 단계적으로 줄임

2,3 반복

이전 레플리카 셋은 레플리카수를 0으로 유지

 

* 안정적인 파드 기동 방법으로 추천됨

- 파드 장애시 자동으로 파드 재생성

- 레플리카만으로 배포할 경우 롤링 업데이트 등의 기능을 사용할 수 없음

 

디플로이먼트가 업데이트(레플리카셋이 생성되는) 되는 조건 

레플리카 수 등의 변경등은 업데이트 되지 않는다

실질적으로 파드의 내용 변경이 필요함

즉 레플리카 spec.template의 내용이 변경되어야 실제로 업데이트된다.

(spec.template 아래의 해시값을 계산하고 이 값을 사용한 레이블로 관리)

 

롤백

사실상 레플리카셋의 전환과 같은 기능

기존의 레플리카셋의 푸드사를 0인 상태로 남겨놨기 때문에 기존의 레플리카셋으로 복구가 가능함

 

디플로이먼트 업데이트 전략

1) recreate : 완전히 기존내역을 삭제 후 재생성

2) 롤링 업데이트 : 새로운 버전으로 하나씩 전환

3) blue-green : 기존 버전과 새로운 버전을 모두 배포하고 LB가 새로운 버전으로만 연결

4) Canary : 일부에만 배포 후 문제가 없을 시에 전체 배포

 

참고)

https://jocoma.tistory.com/entry/IT-%EC%9A%A9%EC%96%B47-%EB%B0%B0%ED%8F%AC-%EB%B0%A9%EC%8B%9D-%EC%A2%85%EB%A5%98

상세 업데이트 파라미터

1) minReadySeconds

- 최소 대기 시간

- 파드가 Ready상태가 된 다음부터 디플로이먼트 리소스에서 파드 기동이 완료되었다고 판단하기까지의 최소 시간

2) revisionHistoryLimit

- 수정 버전 기록 제한

- 디플로이먼트가 유지할 레플리카셋 수

- 따라서 롤백이 가능한 이력 수

3) progressDeadLineSeconds

- 진행 기한 시간

- 배포 처리의 timeOut시간

- 타임아웃 시간이 경과하면 자동으로 롤백

 

 

Practice

1. How many Deployments exist on the system now?

controlplane ~ ➜  kubectl get deployments
NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
frontend-deployment   0/4     4            0           4s

 

2. Create a new Deployment with the below attributes using your own deployment definition file

Name: httpd-frontend;
Replicas: 3;
Image: httpd:2.4-alpine

 

1) deployment yaml 생성

apiVersion: apps/v1
kind: Deployment 
metadata:
  name: httpd-frontend
spec:
  replicas: 3
  selector:
    matchLabels:
      name: busybox-pod
  template:
    metadata:
      labels:
        name: busybox-pod
    spec:
      containers:
      - name: httpd-frontend
        image: httpd:2.4-alpine
        command:
        - sh
        - "-c"
        - echo Hello Kubernetes! && sleep 3600

 

2) deployment 배포

controlplane ~ ➜  kubectl apply -f sample.yaml 
deployment.apps/httpd-frontend created

controlplane ~ ➜  kubectl get deployments
NAME             READY   UP-TO-DATE   AVAILABLE   AGE
httpd-frontend   3/3     3            3           7s

 

'Tools > K8S' 카테고리의 다른 글

Kubernetes PV & PVC  (0) 2023.08.12
Kubernetes Secret  (0) 2023.07.21
Kubernetes ReplicaSet  (0) 2023.07.01
Kubernetes Config  (1) 2023.06.17
Kubernetes Scheduling  (0) 2023.03.20