Infra/Kubernetes & EKS

쿠버네티스 Deployment yaml 파일 작성 및 명령어 예제 정리

jimmy_AI 2024. 7. 10. 19:38
반응형

Kubernetes(K8s)에서 애플리케이션 배포 및 관리를 자동화하는데 필수적인

deployment의 yaml 파일을 작성하는 방법과 이용하는 명령어를

예제들을 중심으로 간략하게 정리해보도록 하겠습니다.

 

 

Deployment 이점 / 사용하는 이유

k8s에서 pod를 수동으로 배포하는 것도 얼마든지 가능하지만,

실무에서는 deployment를 이용한 배포를 많이 활용합니다.

 

이에는 다음과 같은 이점이 있습니다.

  • pod가 실행 중 오류가 발생하더라도 지정된 개수의 pod를 유지할 수 있도록 관리해줍니다.
  • 애플리케이션 업데이트 시 안정적으로 진행할 수 있는 기능을 제공합니다.
  • 새로운 버전에 오류가 생긴 경우, 이전 버전으로 롤백이 용이합니다.

 

 

Deployment yaml 파일 예제

기본적인 deployment를 다루는 yaml 파일의 예시는 다음과 같습니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.4
        ports:
        - containerPort: 80

 

각 필드에 대해서 간략한 설명을 진행하면 다음과 같습니다.

 

apiVersion: 일반적으로 apps/v1을 사용하며, deployment 리소스의 API 버전입니다.

kind: 생성하려는 리소스의 종류로, deployment를 의미합니다.

metadata: 리소스의 이름 및 기타 메타데이터를 정의합니다.

replicas: 생성 및 유지할 pod의 개수입니다.

selector: deployment가 관리할 pod를 선택하는 기준입니다

template: 생성할 pod의 템플릿입니다.

 

물론, 위의 예제에서 다룬 예시 말고도, 자원 requests/limits나 liveness/readness probe,

volume mount 혹은 affinity/toleration 등의 pod에서 다룰 수 있는 요소들도

pod에 대한 yaml 파일을 작성할 때처럼 마찬가지로 추가 명시가 가능합니다.

 

 

Deployment 관련 명령어

작성한 deployment의 yaml 파일로 애플리케이션을 배포하는 명령어는 다음과 같습니다.

(deployment를 작성한 yaml 파일의 이름은 자유이지만, 디렉토리를 정확히 명시해야 합니다.)

kubectl apply -f deployment.yaml

 

배포된 deployment 및 pod를 확인하는 명령어는 다음과 같습니다.

kubectl get deployments
kubectl get pods

 

배포된 deployment를 롤백하는 명령어는 다음과 같습니다.

여기서는 yaml 파일 이름이 아니라 deployment/{메타데이터 이름} 형태임을 유의해야 합니다.

kubectl rollout undo deployment/nginx-deployment

 

deployment를 삭제하여 애플리케이션 배포를 회수하는 방법은 다음과 같습니다.

kubectl delete -f deployment.yaml