Section 5-1. Rolling Updates and Rollbacks
udemy의 Certified Kubernetes Administrator (CKA) with Practice Tests 강의 및 쿠버네티스 인 액션 (마르코 룩샤)를 참고하여 정리한 글입니다.
Section05. Application Lifecycle Management
Rolling Updates and Rollbacks
배포 전략
아래와 같이 파드가 Controller를 통해서 배포되어 있는 경우 업데이트를 어떻게 해야할까?
파드를 업데이트 해야하는 상황일 때 모든 파드를 업데이트하는 데에는 두 가지 방법이 있다.
- 기존의 모든 파드 삭제 후 새로운 파드를 시작하는 방법
- 새로운 파드를 순차적으로 추가하고 이전 파드를 점차 제거하는 방법 (Rolling Update)
기존의 모든 파드 삭제 후 새로운 파드를 시작하는 방법
컨트롤러의 파드 템플릿 변경
- v1 버전의 파드 세트를 관리하는 ReplicationController가 있는 경우 버전 v2 이미지를 참조하도록 파드 템플릿을 수정하는 방법이다.
- ReplicationController의 파드 템플릿을 v2로 변경하게 되면 v1 파드들이 삭제가 되고 새로운 v2 파드들이 시작되는 동안 짧은 시간의 다운타임이 있다.
블루-그린 Deployment
- 다운타임이 발생하기를 원하지 않고 두배의 자원을 실행시킬 수 있는 하드웨어 리소스가 있을 경우 실행할 수 있는 방법이다.
- 새 버전을 실행하는 파드를 가져오는 동안 초기 버전의 파드만 서비스와 연결된다. 기존에 실행된 파드 개수만큼 신규 파드를 모두 실행시킨다.
- 이후 새 파드가 모두 올라오면 서비스의 라벨 셀렉터를 변경해 서비스를 새 파드로 전환할 수 있다.
새로운 파드를 순차적으로 추가하고 이전 파드를 점차 제거하는 방법 (롤링 업데이트)
한 번에 모든 파드를 제거하지 않고 이전 버전을 제거하고 새 버전을 추가하는 방법이다.
- 기존에는 rolling-update 옵션을 통해
kubectl rolling-update Pod-v1 Pod-v2 --image=Pod-v2
를 사용하여 롤링 업데이트를 할 수 있었으나 지금은 deprecated 되었다. - rolling-update 옵션 대신 쿠버네티스에서는 Deployment라는 새로운 리소스를 도입하였다.
Deployments
- 이전과 달리 Deployments에서 업데이트를 위해 필요한 일은 디플로이먼트 리소스에 정의된 파드 템플릿을 수정하는 것이다.
예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# deployment-definition.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deployment
lebels:
app: myapp
type: front-end
spec:
template:
metadata:
name: myapp-pod
labels:
app: myapp
type: front-end
spec:
containers:
- name: nginx-container
image: nginx
replicas: 3
selector:
matchLables:
type: front-end
Deployment 생성
- kubectl create -f deployment-definition.yaml
Deployment 조회
- kubectl get deployments
Deployment 업데이트
- kubectl apply -f deployment-definition.yaml
- kubectl apply -f deployment-definition.yaml
Deployment 상태확인
- kubectl rollout status deployment/myapp-deployment
- kubectl rollout history deployment/myapp-deployment
Deployment 롤백
- kubectl rollout undo deployment/myapp-deployment
This post is licensed under CC BY 4.0 by the author.