학습 목표 : k8s의 Replicaset 를 관리하기 위한 Deployment 에대해 알아본다.
Deployment 란?
ReplicaSet을 관리하며 앱 배포에 특화되어있다.
Pod 실행 개수를 유지시키는것 뿐만 아니라, Rolling Update나 Rollback 등 유용한 기능을 가지고 있다.
Deployment 사용 예
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-nginx
labels:
app: deployment-nginx
spec:
replicas: 3 # pod 실행개수 지정, ReplicaSet과 마찬가지로 .spec.replicas 필드에 지정
selector:
matchLabels:
app: nginx-pods # .metadata.labels의 하위 필드와 같게 설정
template:
metadata:
name: nginx-pod
labels:
app: nginx-pods
spec:
containers:
- name: nginx # pod에서 사용할 컨테이너 이름
image: nginx:1.20.2
ports:
-containerPort: 80
기본적으로 ReplicaSet의 YAML 내용의 차이가 거의 없다.
ReplicaSet과 차이점은 kind에 Deployment를 명시한다.
Deployment 생성
kubectl apply -f <Deployment YAML명>
Deployment와 생성된 replicaset, pod 확인
kubectl get deploy,rs,pods
Deployment 를 YAML형식으로 출력
kubectl get deployments/nginx-deploy -o yaml
# kubectl get deployments/<deployment 이름> -o yaml
Deployment 업데이트
kubectl set image deployment/deployment-nginx nginx=nginx:1.22.0
# kubectl set <set 대상필드> <set 대상 필드를 가지고있는 Object> <변경 내용>
Rolling Update 방식으로 Deployment 업데이트
Deployment YAML 파일에 strategy 를 추가한다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-nginx
labels:
app: deployment-nginx
spec:
replicas: 3
strategy: # rolling Update strategy
type: RollingUpdate # strategy type
rollingUpdate: # rolling Update option
maxSurge: 1 # maxSurge - update 할 때 최대 얼마만큼의 Pod를 더 생성할지 설정
maxUnavailable: 0 # maxUnavailable - update 할 때 최대 얼마만큼의 pod가 비활성상태여도 되는지 설정
selector:
matchLabels:
app: nginx-pods
template:
metadata:
name: nginx-pod
labels:
app: nginx-pods
spec:
containers:
- name: nginx
image: nginx:1.20.2
ports:
-containerPort: 80
strategy.rollingUpdate.maxSurge는 최대 Pod 생성 수를 설정하며 정수값 또는 %를 사용가능
strategy.rollingUpdate.maxUnavailable은 최소 동작 Pod 수를 설정하며 정수값 또는 %를 사용가능
Deployment YAML 변경사항 적용
kubectl apply -f <Deployment YAML 파일명>
rollingUpdate 설정이 잘 적용되는지 확인하기 위해 모니터링 명령 실행
watch "kubectl get deployment" # deployment 상태 모니터링
watch "kubectl get pods" # pod 상태 모니터링
업데이트 진행
kubectl set image deployment/deployment-nginx nginx=nginx:1.23.0
업데이트 배포상태 확인
kubectl rollout status deployment/deployment-nginx
Deployment Rollback 하기
배포이력 확인하기
# Deployment 배포이력 확인
kubectl rollout history deployment/<Deployment 이름>
# Deployment revision 배포 정보 확인
kubectl rollout history deployment/<Deployment 이름> --revision=<revision 번호>