*유데미에서 진행하는 Kubernetes for the Absolute Beginners - Hands-on 강의를 바탕으로 제작되었습니다.
쿠버네티스 Deployment에서 응용 프로그램의 업데이트와 롤백에 대해 알아보겠습니다.
쿠버네티스 롤아웃: 새로운 어플리케이션 버전을 클러스터에 배포하고 이전 버전을 대체하는 프로세스
롤아웃은 새로운 replicaset을 만들고 이전 replicaset을 사장 시켜 새로운 것과 바꿔줍니다. 그 과정에서 파드에서 실행되는 응용 프로그램의 버전 업그레이드를 가용성을 지키면서 수행할 수 있습니다.
또한 배포에 일어난 변화를 추적할 수 있게 해주고 필요하다면 배포의 이전 버전으로 되돌리는 작업(Rollback)도 가능합니다
배포에는 2가지가 있는데 recreation(재생성)과 rolling update 방식 2가지가 있습니다.
1. recreation(재생성) 방식
기존에 있던 배포버전을 모두 파괴하고, 새로운 버전을 만드는 것 실행 중인 인스턴스를 먼저 파괴한 다음에 새 응용 프로그램 버전의 새 인스턴스를 생성하는 것
구 버전이 다운되고 새 버전이 업데이트 되는 전 기간 동안 응용 프로그램은 다운되고 사용자 접근이 불가능한 단점이 존재합니다. 기본적으로 선택되는 방법이 아닙니다.
2. rolling update 방식
한꺼번에 다 업데이트 되지 않는 방식, 구 버전을 하나씩 다운시켜 새로운 버전으로 교체하는 방식으로 업데이트 중 어플리케이션이 다운되지 않고 안정성이 올라가는 특징이 있습니다. 배포전략을 따로 설정하지 않으면 쿠버네티스가 디폴트 값으로 가지는 기본적인 방법
위와 같이 rolling update 방식은 1.7.0 버전의 어플리케이션이 하나 다운되고 그것을 대체하기 위해 1.7.1 버전의 어플리케이션이 대체하는 방식으로 진행됩니다.
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deployment
labels:
app: myapp
tier: frontend
spec:
selector:
matchLabels:
app: myapp
replicas: 3
template:
metadata:
name: nginx-2
labels:
app: myapp
spec:
containers:
- name: nginx-container
image: nginx:1.7.0
update 방법
위의 deployment.yaml 파일에서 spec속성의 image를 1.7.1로 변경해주고 kubectl apply -f deployment.yaml 명령어를 이용해 적용하는 방법이 있습니다.
다른 방법으로는 set image를 이용해서 업데이트 하는 방법
# kubectl set image 리소스유형/리소스이름 컨테이너이름=이미지:업데이트할 버전
kubectl set image deployment/myapp-deployment nginx-container=nginx:1.9.1
하지만 이런 방법을 사용하면 배포 정의 파일(deployment.yaml)은 변경되지 않습니다.
업그레이드를 진행한 후에 kubectl get replicaset을 입력하면 replicaset-1과 replicaset-2를 출력하는데 replicaset-1에 있는 파드들은 모두 중지되어 있습니다.
롤백(rollback)
또한 업그레이드를 했는데 무언가 잘못되어 다시 되돌리고 싶을때 롤백을 할 수 있는데 명령어는 다음과 같습니다
# undo 명령어 사용
kubectl rollout undo deployment/myapp-deployment
그러면 위와 같이 Replicaset - 2의 파드들은 중지되고 Replicaset -1 의 파드들만 남게 됩니다. 그리고 롤백의 과정 또한 Replicaset-1의 1번 파드가 살아나고 2, 3, 4, 5 나머지 파드들도 순서대로 rolling update처럼 순차적으로 진행됩니다.
추가) describe 명령어로 deployment 세부사항 확인
kubectl describe deployment frontend
>>>
Name: frontend
Namespace: default
CreationTimestamp: Sun, 26 May 2024 22:21:27 +0000
Labels: <none>
Annotations: deployment.kubernetes.io/revision: 2
Selector: name=webapp
Replicas: 4 desired | 4 updated | 4 total | 4 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 20
RollingUpdateStrategy: 25% max unavailable, 25% max surge
<후략>
kubectl describe로 deployment의 세부사항을 확인할 수 있습니다.
이름, 셀럭터에 넣은 내용(matchLabels), replicas, 배포전략, 롤링업데이트 매개변수를 알 수 있습니다.
여기선 4개의 복제본을 가지고 25%가 최대치니까 롤링업데이트를 할때 한개씩 실행할 수 있습니다.
'[Cloud] > [Kubernetes]' 카테고리의 다른 글
[Kubernetes] 쿠버네티스 서비스 - 1. 노드포트(NodePort) (0) | 2024.05.27 |
---|---|
[Kubenetes] 쿠버네티스 업데이트 & 롤백 2 (0) | 2024.05.25 |
[Kubernetes] deployment 기본 (0) | 2024.05.24 |
[Kubernetes] ReplicaSet 설정 명령어 (0) | 2024.05.23 |
[Kubernetes] 쿠버네티스 ReplicaSet (0) | 2024.05.22 |