[kubernetes] Deployment로 pod 배포하기
Kubernetes는 컨테이너화된 애플리케이션을 자동으로 배포, 확장, 관리하는 오픈 소스 플랫폼이며, 다양한 환경에서 일관된 애플리케이션 실행을 가능하게 해주는 컨테이너 오케스트레이션 도구입니다.
Kubernetes에서 Deployment는 애플리케이션을 선언적으로 배포하고 관리하는 리소스로, Pod의 생성, 업데이트, 확장 및 롤백을 자동화합니다. 이를 통해 안정적인 상태를 유지하며 원하는 개수의 Pod를 보장하고 애플리케이션의 지속적인 배포를 지원합니다.
Kubernetes에서 Deployment를 통해 pod를 배포하는 방법을 알아보도록 하겠습니다.
주요 기능
Kubernetes Deployment는 애플리케이션 배포, 업데이트, 확장 및 롤백을 자동화하는 Kubernetes의 핵심 리소스입니다.
Deployment는 선언적 접근 방식을 사용하여 애플리케이션의 원하는 상태를 정의하고, 이를 기반으로 Kubernetes가 클러스터에서 해당 상태를 유지하도록 관리합니다.
- Pod의 선언적 관리 : 사용자는 YAML 파일로 애플리케이션의 상태를 정의하고, Deployment는 이를 자동으로 관리합니다.
- 롤링 업데이트 : 애플리케이션 버전을 순차적으로 업데이트하여 무중단 배포를 지원합니다.
- 롤백 : 문제가 발생하면 이전 버전으로 쉽게 되돌릴 수 있습니다.
- 자동 복구 : Pod가 비정상 상태일 경우 자동으로 재생성하거나 복제본을 유지합니다.
- 확장 : 수평 확장을 통해 애플리케이션의 Pod 개수를 조정할 수 있습니다.
Deployment를 사용하는 이유
직접 배포된 Pod는 클러스터 내에서 특정 노드가 다운되거나 문제가 발생할 경우 자동으로 재생성되지 않으며, 확장성과 관리의 어려움이 있습니다.또한 새로운 버전의 애플리케이션을 배포하거나 설정을 변경하는 경우, 기존 Pod를 삭제하고 새로운 Pod를 수동으로 생성하고 롤백도 수동 작업이 필요합니다.
이와 같이 직접 Pod를 배포하는 것은 여러 문제점과 관리에 비효율적이기 때문에 Deployment를 사용하여 Pod를 배포하는 것이 좋습니다.
실행 방법
kubectl 명령을 사용하여 Deployment를 생성하거나 YAML 파일을 사용하여 Deployment를 생성할 수 있습니다.
kubectl 명령을 사용한 Deployment 생성
kubectl 명령은 간단한 방식으로 Deployment를 생성할 수 있습니다.
# kubectl create deployment nginx-deployment --image=nginx:1.21 --replicas=3
deployment.apps/nginx-deployment created
YAML 파일을 사용한 Deployment 생성
YAML 파일은 Deployment의 세부 설정을 명시적으로 작성할 때 유용합니다.
# cat nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.21
kubectl create -f nginx-deployment.yaml
deployment.apps/nginx-deployment created
확인
kubectl get deployments
명령어를 통해 deployment의 상태를 확인할 수 있으며 -o wide
옵션을 추가하면 추가 정보 또한 확인할 수 있습니다.
# kubectl get deployments -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
nginx-deployment 3/3 3 3 114s nginx nginx:1.21 app=nginx
- NAME : deployments의 이름
- READY : Ready 상태인 Pod의 수와 Deployment가 관리하는 총 Pod 수를 표시
x/y
x/y 형식으로 표시되며, x는 Ready 상태(정상 실행 중)인 Pod의 수이고, y는 Deployment가 관리하는 총 Pod의 수를 나타냅니다
- UP-TO-DATE : 업데이트된 템플릿(이미지, 설정 등)을 기반으로 생성된 Pod의 수
- AVAILABLE : 사용자 요청을 처리할 준비가 된 Pod의 수
- AGE : Deployment가 생성된 후 경과된 시간
- CONTAINERS : Deployment에서 관리하는 Pod 내 컨테이너 이름
- IMAGES : Deployment에서 사용된 컨테이너 이미지
- SELECTOR : Deployment가 관리하는 Pod를 식별하기 위한 Label
kubectl get deployments
명령어를 통해 deployment를 통해 생성된 pod를 확인할 수 있습니다.
설정한 replicas 값 만큼 총 3개의 pod가 생성되었습니다.
# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-deployment-6c789f6549-42gqp 1/1 Running 0 6m50s
nginx-deployment-6c789f6549-qtn8b 1/1 Running 0 6m50s
nginx-deployment-6c789f6549-zpv46 1/1 Running 0 6m50s
Kubernetes에서 Deployment를 통해 pod를 배포하는 방법을 알아봤습니다.
직접 Pod를 배포할 경우 여러 문제점과 관리에 비효율적이기 때문에 Deployment를 사용하여 Pod를 배포하는 것이 좋습니다. kubectl 명령을 사용하면 빠르게 Deployment를 통해 pod를 배포할 수 있으며, YAML 파일을 활용하면 세부 설정과 재사용 가능한 구성을 작성할 수 있습니다. 또한, kubectl get deployments 명령어를 통해 Pod의 배포 상태 및 상세 정보를 확인할 수 있습니다.
지금까지 Deployment를 통해 pod를 배포하는 방법을 알아보는 시간을 가졌습니다.
유익하게 보셨다면 공감을 눌러주고, 댓글로 의견을 공유해 남겨주시면 감사하겠습니다!
[Reference]
https://kubernetes.io/ko/docs/concepts/workloads/controllers/deployment/
'kubernetes' 카테고리의 다른 글
[kubernetes] pod 실행하기 (0) | 2024.12.31 |
---|---|
[kubernetes] kubectl explain 명령어 (0) | 2024.12.26 |
[kubernetes] kubectl api-resources 명령어 (0) | 2024.12.04 |
[kubernetes] kubeadm join Worker 노드 추가하기 (0) | 2024.11.21 |
[kubernetes] kubeadm join Master 노드 추가하기 (1) | 2024.11.18 |