- Created by Sansae, last modified on Mar 07, 2024
목차
Deployment 개요
Deployment는 쿠버네티스에서 가장 널리 사용되는 오브젝트입니다. ReplicaSet을 이용하여 Pod을 업데이트하고 이력을 관리하여 롤백Rollback하거나 특정 버전revision으로 돌아갈 수 있습니다.
http://wiki.ciscolinux.co.uk/index.php/Kubernetes/Deployment,_ReplicaSet_and_Pod

Deployment Manifest
https://dev-k8sref-io.web.app/docs/workloads/deployment-v1/
apiVersion: apps/v1 #쿠버네티스 API버전을 가리킴
kind: Deployment #리소스 유형
metadata (ObjectMeta): 포드와 관련된 이름, 네임스페이스, 라벨, 그밖의 정보
- namespace
- name
- labels
spec (DeploymentSpec): PodTemplate
template (PodTemplateSpec) # Pods 명세
- metadata
- name
- labels
- spec
- containers
- volumes
- metadata
- selector # Pods 선택자
- replicas # 복제본수
- strategy # RollingUpdate(default) #배포 전략
- status(DeploymentStatus) : 포드의 상태, 각 컨테이너의 설명 및 상태, 포드 내부의 IP 및 그밖의 기본 정보 등
nginx-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
labels:
app: myapp-deploy
type: front-end
spec:
template:
metadata:
name: nginx
labels:
app: myapp
type: front-end
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
selector:
matchLabels:
type: front-end
replicas: 3
Deployment Strategy

- 무중단 배포를 위해서는 Pod에 대하여 StartupProbe, livenessProbe, readinessProbe, terminationGracePeriodSeconds 설정등이 요구 됩니다.
Deployment 실습
sansae@sansaeAir15m2 ~ % k apply -f nginx-deploy.yaml deployment.apps/nginx-deploy created sansae@sansaeAir15m2 ~ % k get all NAME READY STATUS RESTARTS AGE pod/nginx-deploy-d4d6c7dd8-4zx7v 1/1 Running 0 3s pod/nginx-deploy-d4d6c7dd8-m6p7j 1/1 Running 0 3s pod/nginx-deploy-d4d6c7dd8-rm5hj 1/1 Running 0 3s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 8h NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/nginx-deploy 3/3 3 3 3s NAME DESIRED CURRENT READY AGE replicaset.apps/nginx-deploy-d4d6c7dd8 3 3 3 3s
sansae@sansaeAir15m2 ~ % k get pod
NAME READY STATUS RESTARTS AGE
nginx-deploy-d4d6c7dd8-67vfc 1/1 Running 0 15s
nginx-deploy-d4d6c7dd8-d6zrj 1/1 Running 0 17s
nginx-deploy-d4d6c7dd8-zhq6g 1/1 Running 0 16s
sansae@sansaeAir15m2 ~ % k set image deploy/nginx-deploy nginx=nginx:1.15.12
deployment.apps/nginx-deploy image updated
sansae@sansaeAir15m2 k8s-lab-workspace % k rollout status deploy/nginx-deploy
deployment "nginx-deploy" successfully rolled out
sansae@sansaeAir15m2 ~ % k describe deploy nginx-deploy
Name: nginx-deploy
Namespace: default
CreationTimestamp: Fri, 08 Mar 2024 23:17:39 +0900
Labels: app=myapp-deploy
type=front-end
Annotations: deployment.kubernetes.io/revision: 2
Selector: type=front-end
Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=myapp
type=front-end
Containers:
nginx:
Image: nginx:1.15.12
Port: 80/TCP
Host Port: 0/TCP
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets: nginx-deploy-d4d6c7dd8 (0/0 replicas created)
NewReplicaSet: nginx-deploy-77978cf89b (3/3 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 38s deployment-controller Scaled up replica set nginx-deploy-d4d6c7dd8 to 3
Normal ScalingReplicaSet 15s deployment-controller Scaled up replica set nginx-deploy-77978cf89b to 1
Normal ScalingReplicaSet 14s deployment-controller Scaled down replica set nginx-deploy-d4d6c7dd8 to 2 from 3
Normal ScalingReplicaSet 14s deployment-controller Scaled up replica set nginx-deploy-77978cf89b to 2 from 1
Normal ScalingReplicaSet 13s deployment-controller Scaled down replica set nginx-deploy-d4d6c7dd8 to 1 from 2
Normal ScalingReplicaSet 13s deployment-controller Scaled up replica set nginx-deploy-77978cf89b to 3 from 2
Normal ScalingReplicaSet 12s deployment-controller Scaled down replica set nginx-deploy-d4d6c7dd8 to 0 from 1
sansae@sansaeAir15m2 k8s-lab-workspace % k rollout history deploy/nginx-deploy
deployment.apps/nginx-deploy
REVISION CHANGE-CAUSE
1 <none>
2 <none>
sansae@sansaeAir15m2 k8s-lab-workspace % k rollout undo deploy/nginx-deploy
deployment.apps/nginx-deploy rolled back
sansae@sansaeAir15m2 k8s-lab-workspace % k get pod
NAME READY STATUS RESTARTS AGE
nginx-deploy-d4d6c7dd8-g6chm 1/1 Running 0 2s
nginx-deploy-d4d6c7dd8-hs9xx 1/1 Running 0 3s
nginx-deploy-d4d6c7dd8-vsgbf 1/1 Running 0 5s
util 1/1 Running 2 (21m ago) 142m
- 실제 운영에서는 rollout기능을 사용하지 않고, CI/CD를 구축하여 Container Image버전을 컨트롤 하여 배포 합니다.
- No labels