Deployment란???
- ReplicaSet의 선언적 업데이트를 제공하는 워크로드.
- Deployment Controller는 현재 상태에서 의도하는 상태로 비율을 조정하며 변경한다.
- Deployment가 ReplicaSet을 만들고, ReplicaSet이 Pod를 만든다.
- 즉 Deployment를 선언하면 ReplicaSet부터 파드까지 만든다. 그렇기 때문에 ReplicaSet을 직접 생성하는 것보다는 일반적으로 Deployment를 많이 사용한다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-deployment
labels:
tier: orange
app: nginx
spec:
selector:
matchLabels:
app: apple
replicas: 6
template:
metadata:
name: nginx-2
labels:
app: apple
spec:
containers:
- name: nginx
image: nginx:latest
- kind: 오브젝트 종류를 명시하는 항목.
- metadata: 해당 오브젝트의 정보를 입력하는 항목.
- metadata.name: 해당 오브젝트 이름.
- metadata.labels: 다른 워크로드가 해당 오브젝트를 참조할 때 특정하기 위한 라벨
- spec.replicas: 복제 파드의 개수.
- spec.selctor: 복제할 파드를 참조하기 위한 항목.
- spec.template: 복제된 파드의 정보를 입력하는 항목.
roll out, roll back
- spec.template가 변경되는 경우에만 디플로이먼트의 roll out 업데이트가 발동된다.
- 레플리카셋이 새 복제 파드를 로드하고 이전 복제 파드를 삭제해 복구가 불가능한 반면, 디플로이먼트는 변경된 복제 파드 템플릿을 가진 레플리카셋을 새로 생성하고 이전 레플리카셋의 복제 파드 스케일을 0으로 줄이는 방법으로 배포를 업데이트한다. 이 경우 스케일이 0인 레플리카셋이 노드에 남아있어 roll back할 수 있다.
Deployment 생성
디플로이먼트 생성 명령을 모의 실행하여 파일에 옮겨 담은 방식을 통해 빈 파일에 새로 작성하는 것보다 편리하게 작성할 수 있다.
kubectl create deployment --image=nginx:latest test-deployment --replicas=6 --dry-run=client -o yaml > test-dp.yaml
- nginx 컨테이너 이미지를 사용하는 복제 파드 6를 갖는다.
- 디플로이먼트를 구성하는 yaml 형식을 test-dp.yaml 파일에 담는다.
- 위처럼 해당 기본 구조가 만들어지면 vi나 edit을 통해 선언적 방식으로 원하는 구성으로 바꾼다.
# 구성한 test-dp.yaml 파일을 디플로이먼트 생성하기.
kubectl apply -f test-dp.yaml
- 파드 test-deployment가 6개, 레플리카셋, 디플로이먼트가 생성된 것을 확인할 수 있다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: example-deployment
spec:
replicas: 2
selector:
matchLabels:
app: example
template:
metadata:
labels:
app: example
spec:
containers:
- name: nginx
image: nginx:latest
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
- resources: 컨테이너의 CPU 및 메모리 자원 요청과 제한을 설정하는데 사용된다.
- resources.requests.memory: 최소 64MI의 메모리를 필요로 한다.
- resouces.requests.cpu: 최소 250 밀리코어의 cpu를 필요로 한다.
- resouces.limits: 최대를 나타낸다. ex) 최대 128의 메모리를 사용할 수 있다.
디플로이먼트 스케일링
- replicas를 명령적 선언으로 변경할 수 있다.
kubectl scale deploy [디플로이먼트 명] --replicas=[개수]
배포 업데이트
Roll out
- 디플로이먼트는 파드를 통해 배포를 실행 중일 때 새 배포를 업데이트할 수 있다.
- kubectl set image 명령을 통해 새 배포 버전을 선언적으로 지정하여 업데이트한다.
kubectl set image deployment/[디플로이먼트 이름] [컨테이너 이름]=[새 배포 태그]
- 디플로이먼트는 배포 업데이트를 실행하면 이전 배포의 정보를 삭제하지 않는다.
- 대신 새 배포 컨테이너를 담은 레플리카셋을 새로 생성해 이전 레플리카셋은 스케일 다운, 새 레플리카셋은 스케일 업 하는 방식으로 배포한다.
Roll back
- rollout stauts를 통해 현재 상태를 저장할 수 있다.
kubectl rollout status deploy/[디플로이먼트 명]
만약 nginx 버전을 1.6.1을 실수로 1.1612로 변경했다면 어떻게 해야할까?
- 이미지가 update 되었다는 텍스트가 나오고
- rollout status로 현재 상태를 저장하려고 하면 업데이트가 진행중이라고 나온다.
rollout undo를 통해 전에 저장 했던 상태로 roll back 할 수 있다.
kubectlk rollout undo deploy/[디플로이먼트 명]
728x90
반응형
'DevOps > Kubernetes' 카테고리의 다른 글
[kubernetes] Node란 (0) | 2024.07.10 |
---|---|
[kubernetes] Pod 외부 접속 연결하기 (0) | 2024.07.09 |
[kubernetes] ReplicaSet이란? (0) | 2024.07.03 |
[Kubernetes] Pod란? (0) | 2024.07.02 |
[Kubernetes] Kubernetes란? (0) | 2024.07.02 |