디플로이먼트
- 디플로이먼트는 파드와 레플리카셋에 대한 선언적 업데이트를 제공
- 디플로이먼트는 상태를 갖고 있고, 디플로이먼트 컨트롤러는 현재 상태에서 의도하는 상태로 비율을 조정하며 변경할 수 있다.
- 새 레플리카셋을 생성하는 디플로이먼트를 정의하거나 기존 디플로이먼트를 제거하고, 모든 리소스를 새 디플로이먼트에 적용할 수 있다.
- 3개의 Nginx 파드를 불러오기 위한 레플리카셋을 생성
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
디플로이먼트 업데이트
- 디플로이먼트의 파드 템플릿이 변경된 경우에만 디플로이먼트의 롤아웃이 트리거된다. 예를 들면 템플릿의 레이블이나 컨테이너 이미지가 업데이트된 경우이다. 디플로이먼트의 스케일링과 같은 다른 업데이트는 롤아웃을 트리거하지 말아야 한다.
- 최소 가용 파드 수 보장 (Max Unavailable)
- 업데이트가 진행되는 동안, 의도한 파드 수의 75% 이상이 항상 동작하도록 보장합니다. 즉, 의도된 파드 수의 최대 25%까지만 중단될 수 있도록 합니다.
- 예: 의도한 파드 수가 4개라면, 업데이트 동안 최대 1개의 파드만 중단될 수 있습니다. 나머지 3개(4개의 75%)는 항상 가용 상태를 유지합니다.
- 최대 추가 파드 수 제한 (Max Surge)
디플로이먼트는 의도한 파드 수를 초과하는 추가 파드의 수를 제한합니다. 기본 설정에서는 최대 의도한 파드 수의 125%까지 추가 파드가 생성될 수 있습니다.
- 예: 의도한 파드 수가 4개라면, 최대 1개의 추가 파드(4개의 25%)가 생성될 수 있어 총 5개까지 생성될 수 있습니다.
즉, 디플로이먼트는 의도한 파드 수에 비해 75% 이상의 가용성을 유지하면서도, 필요 시 최대 25%의 추가 파드를 생성하여 안전하게 업데이트가 완료되도록 합니다
- 의도한 파드 수가 4개일 때는, 최소 3개에서 최대 5개의 파드를 가질 수 있다.
롤오버
- 디플로이먼트 컨트롤러는 각 시간마다 새로운 디플로이먼트에서 레플리카셋이 의도한 파드를 생성하고 띄우는 것을 주시한다.
스케일링
상태
진행중
- 디플로이먼트로 새 레플리카셋을 생성.
- 디플로이먼트로 새로운 레플리카셋을 스케일 업.
- 디플로이먼트로 기존 레플리카셋을 스케일 다운.
- 새 파드가 준비되거나 이용할 수 있음(최소 준비 시간(초) 동안 준비됨).
완료
- 디플로이먼트과 관련된 모든 레플리카가 지정된 최신 버전으로 업데이트 되었을 때. 즉, 요청한 모든 업데이트가 완료되었을 때.
- 디플로이먼트와 관련한 모든 레플리카를 사용할 수 있을 때.
- 디플로이먼트에 대해 이전 복제본이 실행되고 있지 않을 때.
실패
- 할당량 부족
- 준비성 프로브(readiness probe)의 실패
- 이미지 풀 에러
- 권한 부족
- 범위 제한
- 애플리케이션 런타임의 잘못된 구성
롤링 업데이트