개요
k8s Rolling update와 Rollback 방식을 알아보겠습니다.
업데이트 방식
1. Recreate update
2. Rolling update
Recreate Update
기존에 배포한 pod를 모두 내리고 새로운 pod를 배포하는 방식입니다.
그러나 이방식의 큰문제는 서비스가 중단된다는 것입니다. 그래서 무중단 서비스를 위해서 우리는 Rolling update를 해야 합니다.
Rolling update란?
depolyment를 update할 때 사용되는 update 방식입니다.
k8s에서 기본적으로 사용하는 deployment update 방식 입니다.
검증
deployment yaml 파일을 수정해서 apply를 다시 하거나 배포된 deployment의 image를 아래 명령어로 교체
kubectl set image {deployment 이름} {container 이름}={image 이름}
Ex) kubectl set image deployment/frontend simple-webapp=kodekloud/webapp-color:v2
이렇게 deployment를 update를 하게 되면 strategyType이 rolling update가 되는 것을 확인할 수 있고 Message 부분에서 up down이 반복되는 것을 볼 수 있습니다.
#kubectl describe deployment cluster-nginx-deployment
추가적으로 RollingUpdateStrategy라는것이있는데 이것은 RollingUpdate시 동시에 update할 pod의 수를 제어합니다.
- maxUnavailable: 업데이트 중에 동시에 사용할 수 없게 되는 최대 파드 수를 나타냅니다. 이 값은 정수 또는 백분율로 지정할 수 있습니다. 예를 들어, 3개의 파드를 사용하는 애플리케이션에서 이 값이 "1"로 설정되면 업데이트 중에 사용할 수 없게 되는 파드가 최대 1개가 됩니다.
- maxSurge: 롤링 업데이트 중에 추가로 생성할 수 있는 최대 파드 수를 나타냅니다. 이 값 역시 정수 또는 백분율로 지정할 수 있습니다. 예를 들어, 3개의 파드를 사용하는 애플리케이션에서 이 값이 "1"로 설정되면 업데이트 중에 최대 4개의 Pod가 동시에 실행될 수 있습니다.
RollingUpdate
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 2
...
Recreate
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
strategy:
type: Recreate
Rollback
Rollback은 update 한 yaml에 문제가 생겼을 때 이전 yaml설정으로 돌아가는 것을 말합니다.
Rollback의 원리는 k8s는 deployment update시 replicaset을 2개 만들어서 사용하는 것입니다.
아래 그림을 보시면 현재 deployment의 image 버전을 높여서 rolling update를 진행한 상태입니다.
이 상태에서 replicaset을 보면 2개가 생성된 것을 확인할 수 있습니다.
위에 것(cluster-nginx-deployment-7b9857bc74)은 update 전 replicaset
아래 것(cluster-nginx-deployment-c87868889)은 update 후 replicaset
이 상태에서 이전 yaml 파일 설정으로 돌아가고 싶으면 rollout undo를 실행하면 됩니다.
#kubectl rollout undo {deployment}
Ex) kubectl rollout undo deployment/cluster-nginx-deployment
이렇게 하면 update 전 replicaset으로 deployment가 실행되는 것을 확인하실 수 있습니다.
유용한 명령어 정리
정리
k8s에서는 update 방식이 2개를 지원하는데 한 개는 recreate 나머지는 하나는 rolling update를 지원합니다.
여기서 기본 update 방식은 rolling update입니다.
그리고 rollback 기능도 제공하는 게 rollback 기능의 원리는 2개의 replicaset을 만든 다음 이전 replicaset을 보관하고 있다가 rollout undo 명령을 통해서 이전 replicaset으로 돌아가는 것입니다.
Next Post
[CKA] 17. command and argument
'Cloud > k8s-CKA' 카테고리의 다른 글
[CKA] 18. Environment Variables (0) | 2023.03.28 |
---|---|
[CKA] 17. command and argument (0) | 2023.03.25 |
[CKA] 15. k8s Monitoring (METRIC SERVER) and log (0) | 2023.03.19 |
[CKA] 14. scheduler profile 설정 (0) | 2023.03.07 |
[CKA] 13. multiple scheduler (0) | 2023.03.06 |