쿠버네티스에서 상태가 없는 앱을 배포할 때 사용하는 가장 기본적인 컨트롤러이다.
Deployment는 Pod와 ReplicaSet에 대한 선언적 업데이트를 제공한다.
참고: Deployment가 소유하는 ReplicaSet은 관리하지 말아야 한다.
Example - Deployment
deployment-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx-deployment
spec:
replicas: 3 # 생성할 pod 개수
selector:
matchLabels: # metadata.labels 하위 필드와 같은 설정
app: nginx-deployment
template:
metadata:
labels:
app: nginx-deployment
spec:
containers: # 실제 사용하려는 컨테이너 이름과 이미지 정보 작성
- name: nginx-deployment
image: nginx:latest
ports:
- containerPort: 80
deployment 생성 & 확인
$ kubectl apply -f deployment-nginx.yaml
deployment.apps/nginx-deployment created
$ k get deploy,rs,rc,pods | grep nginx-deployment
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx-deployment 3/3 3 3 66s
NAME DESIRED CURRENT READY AGE
replicaset.apps/nginx-deployment-69cfdf5bc7 3 3 3 66s
NAME READY STATUS RESTARTS AGE
pod/nginx-deployment-69cfdf5bc7-89djk 1/1 Running 0 66s
pod/nginx-deployment-69cfdf5bc7-r7dln 1/1 Running 0 66s
pod/nginx-deployment-69cfdf5bc7-shzw9 1/1 Running 0 66s
- Deployment → nginx-deployment
- 이 Deployment가 관리하는 ReplicaSet → nginx-deployment-69cfdf5bc7
- ReplicaSet이 관리하는 pod → nginx-deployment-69cfdf5bc7-89djk
- 69cfdf5bc7 → 레플리카세트를 구분하는 UUID 해쉬 문자
디플로이먼트 상태 (status)
Progressing → complete/ failed
Progressing
- 새로운 ReplicaSet을 만들때
- 새로운 ReplicaSet의 Pod 개수를 늘릴 때
- 예전 ReplicaSet의 Pod 개수를 줄일 때
- 새로운 Pod가 준비 상태가 되거나 이용 가능한 상태가 되었을 때
Complete
- Deployment가 관리하는 모든 ReplicaSet가 업데이트 완료되었을 때
- 모든 ReplicaSet가 사용 가능해졌을 때
- 예전 ReplicaSet가 모두 종료 되었을 때
Failed
- 쿼터 부족
- readinessProbe 진단 실패
- 컨테이너 이미지 가져오기 에러
- 권한 부족
- 제한 범위 초과
- 앱 실행 조건을 잘못 지정
.spec.progressDeadlineSeconds
시간이 지났을 때 상태를 False로 바꾼다.
$ kubectl get deploy nginx-deployment -o=jsonpath="{.spec.progressDeadlineSeconds}{'\n'}"
600
$ kubectl patch deployment/nginx-deployment -p "{\"spec\":{\"progressDeadlineSeconds\":2}}"
deployment.apps/nginx-deployment patched
$ kubectl get deploy nginx-deployment -o=jsonpath="{.spec.progressDeadlineSeconds}{'\n'}"
2
2초를 넘어갈 경우 Status= False가 된다.
$ kubectl describe deploy nginx-deployment
Name: nginx-deployment
Namespace: kube-system
Pod Template:
Labels: app=nginx-deployment
Annotations: kubectl.kubernetes.io/restartedAt: 2020-09-19T09:11:51Z
Containers:
nginx-deployment:
Image: nginx:1.14
Port: 80/TCP
Host Port: 0/TCP
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable # 2초를 넘어갈 경우 Status= False가 된다.
https://kubernetes.io/docs/concepts/workloads/controllers/deployment/
'Cloud-native > Kubernetes' 카테고리의 다른 글
[Kubernetes]Deplyoment Pausing and Resuming a rollout of a Deployment - 디플로이먼트 배포 일시 중지, 배포 재개, 재시작하기 (0) | 2022.05.07 |
---|---|
[Kubernetes]Rolling Back a Kubernetes Deployment - 디플로이먼트 롤백 (0) | 2022.05.07 |
[Kubernetes]What is Kubernetes ReplicaSet(레플리카세트) (0) | 2022.05.07 |
[Kubernetes]PODs Design Patterns - POD 구성 패턴 (0) | 2022.05.07 |
[Kubernetes]Static pods (0) | 2022.05.07 |