Kubernetes Deployment
2024. 12. 30. 23:02ㆍ쿠버네티스/쿠버네티스
728x90
반응형
1. 배경 및 필요성
- 애플리케이션 배포 시 고려사항:
- 여러 인스턴스가 동시에 실행되어야 함(고가용성).
- 새로운 애플리케이션 빌드가 Docker Registry에 업로드되면 무중단 업그레이드 필요.
- 업그레이드 시 모든 인스턴스를 동시에 업데이트하지 않고, 순차적 업데이트(롤링 업데이트) 수행.
- 업그레이드 중 문제가 발생하면 롤백 가능해야 함.
- 여러 변경 사항(버전 업그레이드, 스케일링, 리소스 할당 변경 등)을 한 번에 적용하기 위해 변경 일시 중지 및 재개 기능 필요.
- Deployment의 역할:
- 위와 같은 요구사항을 해결하기 위해 Kubernetes는 Deployment 객체를 제공.
- Deployment는 Pod와 ReplicaSet을 관리하는 상위 계층의 Kubernetes 객체.
2. Deployment의 주요 기능
- 롤링 업데이트(Rolling Updates):
- Pod를 순차적으로 업데이트하여 서비스 중단 없이 새로운 버전으로 전환.
- 롤백(Rollbacks):
- 문제가 발생한 경우 이전 상태로 쉽게 복구 가능.
- 변경 일시 중지 및 재개(Pause and Resume):
- 여러 변경 사항을 한 번에 적용하기 위해 변경 작업을 일시 중지하고, 준비가 완료되면 재개 가능.
3. Deployment 생성 방법
- Deployment 정의 파일 작성:
- ReplicaSet 정의 파일과 유사하지만, kind가 Deployment로 설정됨.
- 주요 필드:
- apiVersion: apps/v1
- kind: Deployment
- metadata: 이름과 레이블 포함.
- spec:
- replicas: 생성할 Pod 수.
- selector: 관리할 Pod를 선택하는 기준(레이블 기반).
- template: Pod 템플릿 정의(Pod의 메타데이터 및 컨테이너 정보 포함).
- 예제 YAML 파일:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deployment
labels:
app: myapp
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: nginx-container
image: nginx
kubectl get replicaset
kubectl get pods
kubectl get all
4. Deployment와 ReplicaSet의 관계
- Deployment는 내부적으로 ReplicaSet을 생성하여 Pod를 관리함.
- Deployment → ReplicaSet → Pod의 계층 구조로 동작.
- Deployment를 통해 생성된 ReplicaSet과 Pod는 Deployment 이름을 기반으로 자동으로 연결됨.
5. Deployment와 ReplicaSet 차이점
- Kubernetes Deployment는 애플리케이션 배포를 위한 고급 기능(롤링 업데이트, 롤백, 일시 중지 등)을 제공하는 객체.
- Deployment는 내부적으로 ReplicaSet과 Pod를 관리하며, YAML 파일을 통해 정의하고 관리 가능.
- 주요 명령어로 Deployment 생성, 상태 확인, 롤백 등을 수행할 수 있음.
https://www.qovery.com/blog/what-is-kubernetes-deployment-guide-how-to-use/
Kubernetes Deployment: Our Complete Guide - Qovery
Wondering what is Kubernetes Deployment? Discover insights into deploying and managing containerized applications with Kubernetes on Qovery. ➤ Explore our guide now
www.qovery.com
Certification Tip!
https://kubernetes.io/docs/reference/kubectl/conventions/
kubectl Usage Conventions
Recommended usage conventions for kubectl. Using kubectl in Reusable Scripts For a stable output in a script: Request one of the machine-oriented output forms, such as -o name, -o json, -o yaml, -o go-template, or -o jsonpath. Fully-qualify the version. Fo
kubernetes.io
1. YAML 파일 작성의 어려움
- CLI 환경에서 YAML 파일을 작성하고 수정하는 것은 번거로울 수 있음.
- 특히 시험 상황에서는 브라우저에서 터미널로 YAML 파일을 복사/붙여넣기하는 과정이 비효율적일 수 있음.
2. kubectl run 명령어의 장점
- YAML 파일 없이도 간단히 Pod나 Deployment를 생성 가능.
- 특정 이름과 이미지를 기반으로 빠르게 리소스를 생성할 수 있음.
- YAML 템플릿을 자동으로 생성하는 데 유용.
3. kubectl run 명령어 사용법
kubectl run <pod-name> --image=<image-name>
# Nginx Pod 생성 예
kubectl run nginx-pod --image=nginx
kubectl create deployment <deployment-name> --image=<image-name>
#Nginx Deployment 생성 예
kubectl create deployment nginx-deployment --image=nginx
# Yaml 탬플릿 생성
kubectl run nginx-pod --image=nginx --dry-run=client -o yaml > pod-template.yaml
반응형
'쿠버네티스 > 쿠버네티스' 카테고리의 다른 글
Imperative vs Declarative (0) | 2024.12.31 |
---|---|
Namespaces (0) | 2024.12.31 |
Kubernetes Replication Controller와 Replica Set (0) | 2024.12.30 |
Kubernetes Pods 요약 (0) | 2024.12.30 |
쿠버네티스 파드 (0) | 2024.12.14 |