Kubernetes Deployment

2024. 12. 30. 23:02쿠버네티스/쿠버네티스

728x90
반응형

1. 배경 및 필요성

  • 애플리케이션 배포 시 고려사항:
    1. 여러 인스턴스가 동시에 실행되어야 함(고가용성).
    2. 새로운 애플리케이션 빌드가 Docker Registry에 업로드되면 무중단 업그레이드 필요.
    3. 업그레이드 시 모든 인스턴스를 동시에 업데이트하지 않고, 순차적 업데이트(롤링 업데이트) 수행.
    4. 업그레이드 중 문제가 발생하면 롤백 가능해야 함.
    5. 여러 변경 사항(버전 업그레이드, 스케일링, 리소스 할당 변경 등)을 한 번에 적용하기 위해 변경 일시 중지 및 재개 기능 필요.
  • Deployment의 역할:
    • 위와 같은 요구사항을 해결하기 위해 Kubernetes는 Deployment 객체를 제공.
    • Deployment는 Pod와 ReplicaSet을 관리하는 상위 계층의 Kubernetes 객체.

2. Deployment의 주요 기능

  1. 롤링 업데이트(Rolling Updates):
    • Pod를 순차적으로 업데이트하여 서비스 중단 없이 새로운 버전으로 전환.
  2. 롤백(Rollbacks):
    • 문제가 발생한 경우 이전 상태로 쉽게 복구 가능.
  3. 변경 일시 중지 및 재개(Pause and Resume):
    • 여러 변경 사항을 한 번에 적용하기 위해 변경 작업을 일시 중지하고, 준비가 완료되면 재개 가능.

3. Deployment 생성 방법

  1. Deployment 정의 파일 작성:
    • ReplicaSet 정의 파일과 유사하지만, kind Deployment로 설정됨.
    • 주요 필드:
      • apiVersion: apps/v1
      • kind: Deployment
      • metadata: 이름과 레이블 포함.
      • spec:
        • replicas: 생성할 Pod 수.
        • selector: 관리할 Pod를 선택하는 기준(레이블 기반).
        • template: Pod 템플릿 정의(Pod의 메타데이터 및 컨테이너 정보 포함).
  2. 예제 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