[Kube] Kubernetes - Deployment (6)

2024. 7. 22. 23:27·System/Server
728x90

본 게시글은 인프런 subicura 강사님의 초보를 위한 쿠버네티스 안내서 강의 수강 후 작성한 내용입니다.


Deployment (배포)

  • Deployment는 쿠버네티스에서 가장 널리 사용되는 오브젝트이다.
  • ReplicaSet을 이용하여 Pod을 업데이트하고 이력을 관리하여 롤백(Rollback)하거나 특정 버전(revision)으로 돌아갈 수 있다.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: echo-deploy
spec:
  replicas: 4
  selector:
    matchLabels:
      app: echo
      tier: app
  template:
    metadata:
      labels:
        app: echo
        tier: app
    spec:
      containers:
        - name: echo
          image: ghcr.io/subicura/echo:v1
# Deployment 생성
kubectl apply -f echo-deployment.yml

# 리소스 확인
kubectl get po,rs,deploy

#---------
NAME                               READY   STATUS    RESTARTS   AGE
pod/echo-deploy-5f9566c4d9-7pmrp   1/1     Running   0          9s
pod/echo-deploy-5f9566c4d9-j97jb   1/1     Running   0          9s
pod/echo-deploy-5f9566c4d9-l47nd   1/1     Running   0          9s
pod/echo-deploy-5f9566c4d9-sxchs   1/1     Running   0          9s

NAME                                     DESIRED   CURRENT   READY   AGE
replicaset.apps/echo-deploy-5f9566c4d9   4         4         4       9s

NAME                          READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/echo-deploy   4/4     4            4           9s
#---------

 

image: ghcr.io/subicura/echo:v1 을 image: ghcr.io/subicura/echo:v2 으로 변경 후 다시 배포

# Deployment 생성
kubectl apply -f echo-deployment.yml

# 리소스 확인
kubectl get po,rs,deploy

#---------
NAME                               READY   STATUS    RESTARTS   AGE
pod/echo-deploy-54c84dd47b-x44s6   1/1     Running   0          4s
pod/echo-deploy-54c84dd47b-xdx22   1/1     Running   0          6s
pod/echo-deploy-54c84dd47b-xf6sd   1/1     Running   0          6s
pod/echo-deploy-54c84dd47b-xpzx8   1/1     Running   0          4s

NAME                                     DESIRED   CURRENT   READY   AGE
replicaset.apps/echo-deploy-54c84dd47b   4         4         4       6s
replicaset.apps/echo-deploy-5f9566c4d9   0         0         0       99s

NAME                          READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/echo-deploy   4/4     4            4           99s
#---------

Deployment 버전 업데이트 절차

  • Deployment 새로운 버전을 업데이트하기 위해 레플리카 셋을 이용한다.
    1. 버전을 업데이트하면 새로운 ReplicaSet을 생성하고 해당 ReplicaSet이 새로운 버전의 Pod을 생성한다.
    2. 새로운 ReplicaSet을 0 -> 1개로 조정하고 정상적으로 Pod이 동작하면 기존 ReplicaSet을 4 -> 3개로 조정한다.
    3. 새로운 ReplicaSet을 1 -> 2개로 조정하고 정상적으로 Pod이 동작하면 기존 ReplicaSet을 3 -> 2개로 조정한다.
    4. 새로운 ReplicaSet을 2 -> 3개로 조정하고 정상적으로 Pod이 동작하면 기존 ReplicaSet을 2 -> 1개로 조정한다.
    5. 최종적으로 새로운 ReplicaSet을 4개로 조정하고 정상적으로 Pod이 동작하면 기존 ReplicaSet을 0개로 조정한다
    6. 업데이트 완료

버전관리

  • Deployment는 변경된 상태를 기록한다.
# 히스토리 확인
$ kubectl rollout history deploy/echo-deploy

# revision 1 히스토리 상세 확인
$ kubectl rollout history deploy/echo-deploy --revision=1

# 바로 전으로 롤백
$ kubectl rollout undo deploy/echo-deploy

# 특정 버전으로 롤백
$ kubectl rollout undo deploy/echo-deploy --to-revision=2

배포 전략 설정

  • Deployment 다양한 방식의 배포 전략이 있다.
  • 롤링업데이트(RollingUpdate) 방식을 사용할 때 동시에 업데이트하는 Pod의 개수를 변경한다.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: echo-deploy-st
spec:
  replicas: 4
  selector:
    matchLabels:
      app: echo
      tier: app
  minReadySeconds: 5
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 3
      maxUnavailable: 3 
  template:
    metadata:
      labels:
        app: echo
        tier: app
    spec:
      containers:
        - name: echo
          image: ghcr.io/subicura/echo:v1
          livenessProbe:
            httpGet:
              path: /
              port: 3000

 

 


참고 사이트

  • https://subicura.com/k8s/guide/deployment.html
728x90
저작자표시 비영리 변경금지 (새창열림)

'System > Server' 카테고리의 다른 글

[Docker] Docker Private Image Registry  (0) 2025.04.10
[Kube] Kubernetes - Pod (5)  (2) 2024.07.22
[Kube] Kubernetes - kubectl 명령어 (4)  (2) 2024.07.19
[Kube] Kubernetes - 실습 환경 구성 (3)  (2) 2024.07.16
[Kube] Kubernetes - 특징 및 아키텍처 (2)  (4) 2024.07.16
'System/Server' 카테고리의 다른 글
  • [Docker] Docker Private Image Registry
  • [Kube] Kubernetes - Pod (5)
  • [Kube] Kubernetes - kubectl 명령어 (4)
  • [Kube] Kubernetes - 실습 환경 구성 (3)
dev.parkjh
dev.parkjh
Jay Blog. Github: https://github.com/GreatPark96
  • dev.parkjh
    0과 1을 공부하다.
    dev.parkjh
  • 전체
    오늘
    어제
    • 분류 전체보기 (114)
      • Profile (2)
      • Paper (6)
      • Column (3)
      • Project (8)
        • Smart Home (3)
        • 3D Printing (5)
      • Front-End (0)
        • Web (3)
      • Back-End (8)
        • API (1)
        • DB (1)
        • Laravel (4)
      • Language (16)
        • Kotlin (11)
        • C, C++ (3)
        • JAVA (0)
        • python (2)
      • System (28)
        • Server (15)
        • Security (1)
        • Network (1)
        • Linux (8)
        • Cloud (3)
      • ETC (34)
        • Book Recommend (Computer) (3)
        • IoT (7)
        • BlockChain (7)
        • ETC (17)
      • My YOLO (1)
      • Note (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    3D
    3D프린터 입문
    linux job
    코틀린개발환경
    Notification
    docker
    3D모델링
    nas
    NAS HDD교체
    Kotlin
    ci/cd
    Jenkins
    github
    3d프린터 초보
    docker private register
    3D프린터
    docker container
    네이버클라우드
    데이터 직렬화 포맷
    Database
    ai code review
    work hour
    ncp container registry
    kubernetes
    coderabbit
    data serialization formats
    git
    리눅스 파일동기화
    gitlab
    C언어
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
dev.parkjh
[Kube] Kubernetes - Deployment (6)
상단으로

티스토리툴바