[k8s] 4. 디플로이먼트 - 레플리카셋, 파드 배포 관리

sightstudio

·

2020. 10. 11. 08:47

 

 

실제 운영환경에서는 레플리카셋을 YAML 파일에서 사용하는 경우는 거의 없습니다.

대부분 레플리카 셋과 파드의 정보를 정의하는 Deployment라는 이름의 오브젝트를

YAML 파일에 정의해 사용합니다.

 

1. 디플로이먼트

레플리카 셋의 상위 오브젝트이기 때문에 디플로이먼트를 생성하면 레플리카 셋도 함께 생성됩니다.

따라서 디플로이먼트를 사용하면 파드와 레플리카 셋을 직접 사용할 필요가 없습니다.

 

생성 예시)

 

deployment-nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata: 
  name: my-nginx-deployment
spec: 
  replicas: 3
  selector: 
    matchLabels: 
      app: my-nginx
  template:
    metadata: 
      name: my-nginx-pod
      labels: 
        app: my-nginx
    spec: 
      containers:
      - name: nginx
        image: nginx:latest
        ports: 
        - containerPort: 80
kubectl apply -f depoyment-nginx.yaml

 

아래와 같이 deployment 오브젝트를 조회할 수 있습니다.

 

위에서 우리는 3개의 레플리카셋을 지정했기 때문에 파드개 3개로 항상 유지되는걸 볼 수 있습니다.

 

그냥 레플리카 셋으로  쓰면 안되나요?

디플로이먼트는 애플리케이션의 업데이트와 배포를 더욱 편하게 해줍니다.

--record 옵션과 함께 디플로이먼트를 생성합니다.

 

 

이때 이미지를 nginx:latest에서 nginx:1.11로 변경해보겠습니다.

kubectl set imgae deployment my-nginx-deployment nginx=nginx:1.11 --record

 

이미지가 변경되었기 때문에 k8s는 레플리카셋의 파드들을 전부 변경합니다. 

이는 deployment에 기록으로 남습니다.

즉, 버저닝이 가능하며 아래와 같이 이전 버전으로 롤백 할 수 있습니다.

 

2. 마치며

디플로이먼트는 여러개의 레플리카셋을 편리하게 관리할 수 있는 상위 오브젝트입니다.

디플로이먼트를 사용하면 레플리카 셋의 리비전 관리 뿐 아니라 다양한 파드들의

롤링 업데이트 정책을 사용할 수 있다는 장점이 있습니다.

 

아래의 명령어를 통해 실습한 모든 리소스를 삭제 할 수 있습니다. (주의)

kubectl delete deployment,pod,rs --all

 

 

kubernetes.io/docs/concepts/workloads/controllers/deployment/

 

Deployments

A Deployment provides declarative updates for Pods ReplicaSets. You describe a desired state in a Deployment, and the Deployment Controller changes the actual state to the desired state at a controlled rate. You can define Deployments to create new Replica

kubernetes.io

 

www.yes24.com/Product/Goods/84927385

 

시작하세요! 도커/쿠버네티스

본서는 도커를 처음 접하는 개발자를 위한 도커 컨테이너와 이미지의 기본적인 개념을 먼저 설명한 뒤, 도커 컴포즈와 스웜 모드를 통해 컨테이너 애플리케이션을 YAML 파일로 작성하고 클러스��

www.yes24.com