기본 개념
디플로이먼트는 여러 레플리카셋을관리하여 롤링업데이트나 롤백등을 구현하는 리소스
디플로이먼트> 레플리카> 파드 순으로 관리
1) 신규 레플리카셋을 생성
2) 신규 레플리카셋의 레플리카 수를 단계적으로 늘림
3) 이전 레플리카셋의 레플리카 수를 단계적으로 줄임
2,3 반복
이전 레플리카 셋은 레플리카수를 0으로 유지
* 안정적인 파드 기동 방법으로 추천됨
- 파드 장애시 자동으로 파드 재생성
- 레플리카만으로 배포할 경우 롤링 업데이트 등의 기능을 사용할 수 없음
디플로이먼트가 업데이트(레플리카셋이 생성되는) 되는 조건
레플리카 수 등의 변경등은 업데이트 되지 않는다
실질적으로 파드의 내용 변경이 필요함
즉 레플리카 spec.template의 내용이 변경되어야 실제로 업데이트된다.
(spec.template 아래의 해시값을 계산하고 이 값을 사용한 레이블로 관리)
롤백
사실상 레플리카셋의 전환과 같은 기능
기존의 레플리카셋의 푸드사를 0인 상태로 남겨놨기 때문에 기존의 레플리카셋으로 복구가 가능함
디플로이먼트 업데이트 전략
1) recreate : 완전히 기존내역을 삭제 후 재생성
2) 롤링 업데이트 : 새로운 버전으로 하나씩 전환
3) blue-green : 기존 버전과 새로운 버전을 모두 배포하고 LB가 새로운 버전으로만 연결
4) Canary : 일부에만 배포 후 문제가 없을 시에 전체 배포
참고)
상세 업데이트 파라미터
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 |