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

  • 최근 글

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

티스토리툴바