Deployment 란?
애플리케이션을 선언적 방식으로 관리하고,
업데이트와 확장을 효율적으로 수행할 수 있게 도와주는 리소스입니다.
Deployment는 애플리케이션의 Pod와 해당 Pod를 관리하는 ReplicaSet을 생성하고 관리합니다.
이를 통해 사용자는 안정적으로 애플리케이션을 배포하고 관리할 수 있습니다.
즉, Deployment는 POD의 배포와 상태를 더 쉽고 안정적으로
관리 하는 리소스라고 볼 수 있습니다.
Deployment의 구조
아래 그림과 같이 Deployment에서 POD는 ReplicaSet이 관리를 합니다.
ReplicaSet은 업그레이드된 ReplicationController 라고 생각하시면 됩니다.
예시로 Deployment를 생성하기 위해 작성한 Yaml 파일로 구조를 알아보면,
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3 # 생성할 POD의 갯수 정의
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.21.6
ports:
- containerPort: 80
- 리소스의 종류는 Deployment로 정의
- spec.replicas에서 생성할 POD의 갯수 정의
- 이후 containers에서 생성할 이미지를 정의
작성된 Yaml 파일의 내용을 보다시피 위의 구조 이미지와 같이,
Deployment -> Replicaset -> POD 순으로 정의를 해줍니다.
이제 실습을 통해 Deployment 생성, POD의 배포 및 롤백 등을 해보겠습니다.
먼저 Deployment 생성에 대해 설명을 해보도록 하겠습니다.
apiVersion: apps/v1 kind: Deployment metadata: name: kubia # 1번 spec: replicas: 3 # 2번 selector: # 3번 matchLabels: app: kubia template: # 4번 metadata: name: kubia labels: app: kubia spec: containers: - image: luksa/kubia:v1 name: nodejs
- 1번: 생성할 Deployment의 이름
- 2번: 생성할 POD의 갯수 정의
- 3번: Deployment가 관리할 POD 지정 (Label로 지정을 함)
- 4번: POD 내에서 동작될 애플리케이션 정의
(Selector에서 지정한 Label과 동일하게 맞춰야 정상적으로 생성 가능)해당 Yaml 파일로 Deployment를 생성하면 아래와 같이 생성됩니다.
# kubectl get deployment
이제 Deployment를 사용하면 POD의 변경사항에 대한 배포를 어떻게 되는지
알아보도록 하겠습니다.
기본적으로 Deployment의 배포 전략은 RollingUpdate 입니다.
POD의 이미지를 변경하면 기존에 생성되었던 POD가 하나씩 제거되고
이와 동시에 새로운 POD가 생성이 됩니다.
실습을 통해 보도록 하겠습니다.
생성해두었던 Deployment에서 POD의 이미지만 변경해보도록 하겠습니다.
# kubectl set image deployment kubia nodej=luksa/kubia:v2
명령어를 입력함과 동시에 새로운 파드가 생성되고 기존에 있던 파드가 삭제됩니다.
이와 같이 Deployment의 기본 배포전략인 RollingUpdate에 대해 알아보았습니다.
이제 잘못 배포가 되었을 경우에 롤백 하는 방법도 알아보도록 하겠습니다.
# kubectl rollout undo deployment kubia
아래 명령어로 Deployment로 관리하는 POD의 이미지 버전을 확인해줍니다.# kubectl describe deployment kubia
그러면 아래의 이미지와 같이 v1 버전으로 다시 돌아온 것을 확인 할 수 있습니다.
이상 입니다.
'쿠버네티스 > 이론' 카테고리의 다른 글
쿠버네티스 네트워크 이해하기 (0) | 2025.02.12 |
---|---|
스테이트풀셋(StatefulSet) 이란 ? (0) | 2025.01.02 |
쿠버네티스 Downward API 란? (2) | 2024.11.28 |
쿠버네티스 ConfigMap, Secret 이란 ? (0) | 2024.11.26 |
쿠버네티스 퍼시스턴트볼륨(PV) 퍼시스턴트볼륨 클레임(PVC) 이란? (0) | 2024.11.12 |