1. 정의
Deployment는 Pod와 Replicaset(복제본)에 대한 관리를 제공하는 단위로 정의 합니다. 여기서 관리의 의미는 self-healing, scaling(뒤에 소개할 예정), Rollout(무중단 업데이트)와 같은 기능을 포함하며, Pod를 Deployment로 배포함으로써 여러 개로 복제된 Pod와 여러 버전의 Pod를 안전하게 관리를 할 수 있습니다.
2. Deployment 생성하기
YAML을 살펴보면 Pod의 틀과 비슷하지만 조금의 차이점을 볼 수 있습니다.(api version, kind, spec의 replica 등)
apiVersion: apps/v1 # kubernetes resource 의 API Version
kind: Deployment # kubernetes resource name
metadata: # 메타데이터 : name, namespace, labels, annotations 등을 포함
name: nginx-deployment
labels:
app: nginx
spec: # 메인 파트 : resource 의 desired state 를 명시
replicas: 3 # 동일한 template 의 pod 을 3 개 복제본으로 생성
selector:
matchLabels:
app: nginx
template: # Pod 의 template 을 의미합니다.
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx # container 의 이름
image: nginx:1.14.2 # container 의 image
ports:
- containerPort: 80 # container 의 내부 Port
위의 내용대로 Deployment를 생성("vi deployment.yaml")하고 minikube를 실행(minikube start --driver=docker)한 후 수행해보겠습니다.
kubectl apply -f deployment.yaml
3. Deployment 조회하기
생성한 Deployment의 상태를 확인하려면 아래와 같이 수행합니다.
kubectl get deployment
Pod 때와 마찬가지로 describe를 이용해보면 다음과 같습니다. pod의 정보를 자세히 조회하면 "Controlled By"로 부터 Deployment에 의해 생성 및 관리되고 있다는 것이 확인 가능합니다.
kubectl describe pod <pod-name>
4. Deployment Auto-healing
우선적으로 pod들을 살펴보겠습니다.
pod 하나를 삭제할때에는 다음과 같이 수행합니다.
kubectl delete pod <pod-name>
기존 pod가 삭제를 했지만 3개임을 확인할 수 있는데, 삭제한 pod name과 다른 것이 생긴 것을 알 수 있습니다. 즉, 동일한 pod가 새로 하나 생성된 것을 확인할 수 있습니다. 이 부분이 관리를 당하고 있다는 것이고, auto-healing되었다는 뜻 입니다.
kubectl get pod
5. Deployment Scaling
scale을 활용하여 replica의 개수를 늘려보고, 줄여볼 수 있습니다.
# 5개로 늘리기
kubectl scale deployment/nginx-deployment --replicas=5
kubectl get deployment
kubectl get pod
# 1개로 줄이기
kubectl scale deployment/nginx-deployment --replicas=1
kubectl get deployment
kubectl get pod
6. Deployment 삭제
이전 pod때와 똑같다고 볼 수 있습니다.
kubectl delete deployment <deployment-name>
kubectl get deployment
kubectl get pod
실행해보면 Deployment의 Control을 받던 Pod 역시 모두 삭제된 것을 확인이 가능하며 Pod때와 마찬가지로 -f 옵션으로 YAML 파일을 사용해 삭제가 가능합니다.
kubectl delete -f <YAML-file-path>
* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'AI > MLOps' 카테고리의 다른 글
[패스트캠퍼스 챌린지 13일차] DataManagement 개념 (0) | 2022.02.05 |
---|---|
[패스트캠퍼스 챌린지 12일차] Service & PVC (0) | 2022.02.04 |
[패스트캠퍼스 챌린지 10일차] POD (0) | 2022.02.02 |
[패스트캠퍼스 챌린지 9일차] YAML (0) | 2022.02.01 |
[패스트캠퍼스 챌린지 8일차] Kubernetes 개념 (0) | 2022.01.31 |