궁금한게 많은 개발자 노트

[ k8s ] Deployment YAML 본문

DevOps

[ k8s ] Deployment YAML

궁금한게 많은 개발자 2023. 2. 7. 15:12

Deployment:

Replicaset의 상위 개념으로 볼 수 있으며 Deployment로 Replicaset을 생성할 수도 있고, 배포 작업을 좀 더 세분화하여 롤링 업데이트 등을 컨트롤 할 수 있습니다. 이러한 이유로 Replicaset만을 사용하기보다 Deployment사용이 보편적입니다.

 

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

 

Deployments

A Deployment provides declarative updates for Pods and 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 Rep

kubernetes.io

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
  • apiVersion apps/v1 → 쿠버네티스의 apps/v1 API를 사용 합니다.
  • kind: Deployment → Deployment의 작업으로 명시 합니다.
  • metadata.name → Deployment의 이름을 설정 합니다.
  • metadata.labels.app → Deployment의 레이블을 설정 합니다.
  • spec.replicas → 파드의 개수를 몇개 유지할 것 인지 설정 합니다. 기본값은 1 입니다. (Deployment는 Replicaset을 생성하고, 생성된 Replicaset이 spec.replicas에 기술한 Pod개수를 유지해줍니다.
  • spec.selector어떤 레이블의 파드를 선택하여 관리할지에 대한 설정 입니다. 생성된 Replicaset이 관리할 Pod를 찾는 방법을 정의합니다. Pod template에서 규칙을 충족한다면 더 정교한 규칙도 가능합니다. 즉, Pod의 레이블을 식별하여 해당되는 파드들을 관리하며, 이 필드가 없을 경우 spec.template.metadata.labels에 설정된 내용들을 기본값으로 사용 합니다. .spec.selector.matchLabels 필드는 {key,value}의 쌍으로 매핑되어있다. matchLabels 에 매핑된 단일 {key,value}은 matchExpressions 의 요소에 해당하며, key 필드는 "key"에 그리고 operator는 "In"에 대응되며 value 배열은 "value"만 포함한다. 매칭을 위해서는 matchLabels 와 matchExpressions 의 모든 요건이 충족되어야 한다.
  • spec.template.metadata어떤 파드를 실행할지에 대한 정보를 하위에 설정 합니다.
  • spec.template.metadata.name → 생성될 파드의 이름을 지정 합니다.
  • spec.template.metadata.labels.app→ 파드는 metadata.lables.app필드를 이용하여 식별될 레이블을 생성합니다.
  • spec.spec → 이 하위의 옵션들은 컨테이너에 대한 설정을 합니다. 위 코드에선 컨테이너 명, 이미지, 포트를 지정 했습니다.
  • containers  하나 이상의 container가 포함될 수 있으며 container의 name, image, ports들을 기술합니다.

 

YAML validator: https://onlineyamltools.com/validate-yaml

 

Validate YAML - Online YAML Tools

Free, quick and easy online utility that validates YAML syntax right in your browser. There are no ads or downloads. Simply enter YAML and it will be checked for errors. Created by developers for developers.

onlineyamltools.com

 

 

 

deployment관련 kubectl명령어

 

deployment container image update:

  • kubectl set image deployment/[디플로이먼트이름] [컨테이너이름]=[이미지]:[버전]

deployment rollback/rollout history조회: deployment로 이전으로 돌아가거나, 작업했던 기록을 확인 가능합니다.  롤아웃 기록은 기본적으로 10까지 저장하며 더 많은 기록을 저장하기 위해서는 따로 설정이 필요 합니다. 

롤아웃 기록 조회 명령은 아래와 같습니다.

  • kubectl rollout history deployment [디플로이먼트 이름]

롤백할 때는 아래 명령어를 사용하면 됩니다.

  • kubectl rollout undo deployment [디플로이먼트 이름] --to-revision=[숫자]

deployment 일시 중지, 시작, 재시작

  • 배포 일시 중지 : kubectl rollout pause deployment/[디플로이먼트 이름]
  • 배포 시작 : kubectl rollout resume deployment/[디플로이먼트 이름]

전체 파드 재시작이 필요할 경우에는 아래 명령어를 사용합니다. deployment 재 시작 시
새로운 레플리카셋 생성 -> 새로운 파드 생성 -> 기존 파드 종료 -> 기존 레플리카셋 비활성화 과정을 거칩니다.

  • kubectl rollout restart deployment/[디플로이먼트 이름]

'DevOps' 카테고리의 다른 글

[ k8s ] kubernetes 개념 (node, control plane)  (0) 2023.02.13
[ k8s ] Service YAML 작성  (0) 2023.02.07
[ k8s ] pod, deployment, service  (0) 2023.02.06
[ AWS ] ECR이란?  (0) 2023.02.05
[ AWS ] Auto Scaling Group  (0) 2023.01.25
Comments