호돌찌의 AI 연구소
article thumbnail

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

최초 조회를 했을 때 1개의 pod가 생성되어있지만 시간이 좀 지나면 3개의 pod를 생성된 것이 확인 가능하다.

Pod 때와 마찬가지로 describe를 이용해보면 다음과 같습니다. pod의 정보를 자세히 조회하면 "Controlled By"로 부터 Deployment에 의해 생성 및 관리되고 있다는 것이 확인 가능합니다.

kubectl describe pod <pod-name>

nginx-deployment로 부터 replicaset생성이 되었고, replicaset으로 부터 pod가 생성되며 컨트롤 당하고 있음을 알 수 있다.

 

 

 

 

 

 

 

 

4. Deployment Auto-healing 

우선적으로 pod들을 살펴보겠습니다.

pod 하나를 삭제할때에는 다음과 같이 수행합니다. 

kubectl delete pod <pod-name>

 

 

 

기존 pod가 삭제를 했지만 3개임을 확인할 수 있는데, 삭제한 pod name과 다른 것이 생긴 것을 알 수 있습니다. 즉, 동일한 pod가 새로 하나 생성된 것을 확인할 수 있습니다. 이 부분이 관리를 당하고 있다는 것이고, auto-healing되었다는 뜻 입니다. 

kubectl get pod

"7q5kb"로 끝나는 pod가 지워지고 "dh8mc"로 끝나는 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>

3개 replica가 삭제된 것을 알 수 있다. 

 

 


https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

 

 

 

 


profile

호돌찌의 AI 연구소

@hotorch's AI Labs

포스팅이 도움이 되셨다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!