롤링 업데이트
<한줄 요약>
- 새 버전을 배포하면서, 기존 Pod를 제거하고, 새로운 버전의 pod를 지정한 개수만큼 생성하는 방식.
<세줄 요약>
- 새로운 버전의 Pod를 생성하고 기존 Pod를 제거한다.
- 무중단 배포라고도 한다.
- Deployment의 업데이트방식 기본값이다.
<특징>
maxUnavailable
- 롤링 업데이트 중에 사용할 수 없는 최대 파드의 수(=롤링 업데이트 중에 동시에 삭제할 수 있는 파드의 최대 개수)
- 퍼센트(%) 혹은 개수를 지정해줄 수 있다.(3으로 지정하면 기존 Pod 3개가 삭제, 10%로 지정하면 기존 Pod들의 10%가 삭제)
- maxUnavailable의 값을 높게 설정하면, 롤링 업데이트 시간이 줄어드는 대신, 기존 남아있는 Pod들에 Request수가 몰릴 수 있다. 따라서 1로 설정해서 Pod를 하나씩 교체하는 것이 비교적 안전하다
maxSurge
- 생성할 수 있는 최대 파드의 개수
- 즉, 롤링 업데이트 중 동시에 생성하는 파드의 갯수를 의미한다.
- 값을 높게 설정하면 Pod를 더 빨리 더 많이 생성하므로 파드의 교체 시간이 단축되지만, 그만큼 필요한 시스템 자원이 급증할 수 있다.
<장단점(한계)>
- 장점 : 무중단 배포
- 단점 : 이전 버전과 새로운 버전이 공존하는 시간이 있으므로 시스템 자원이 2배 발생한다.
<만드는 법>
deployment 의 strategy 항목에 RollingUpdate 에 해당하는 manifest 를 지정한다
apiVersion: apps/v1
kind: Deployment
metadata:
name: rolling-dp
spec:
replicas: 10
selector:
matchLabels:
app: rolling-dp
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
app: rolling-dp
spec:
containers:
- image: nginx
name: nginx
Rolling updates 히스토리 보는 방법
롤백하기 전, 버전들을 확인할 때 쓰인다.
kubectl rollout history deployment {deployment 이름}
<미래> : --record 가 Deprecated 되었으므로 annotation을 붙인다
# deployment 생성
kubectl create deployment {deployment이름}
# kubectl set image로 업데이트하는 법
kubectl set image deployment {deployment이름} {기존 spec.containers.name}={새로운 spec.containers.image}
# 업데이트 후 어노테이션 붙이기
kubectl annotate deployment {deployment이름} kubernetes.io/change-cause="어노테이션 내용"
# 어노테이션 예시
kubectl annotate deployment frontend kubernetes.io/change-cause="image updated to v2"
# 롤링 히스토리 보기
kubectl rollout history deployment {deployment이름}
# 히스토리 중에서 1번으로 리비전하기
kubectl rollout undo deployment {deployment이름} --to-revision=1
<참고>
https://nearhome.tistory.com/106
반응형
'Kubernetes' 카테고리의 다른 글
Limit Ranges (0) | 2023.02.11 |
---|---|
Ingress (2) | 2023.02.07 |
ServiceAccount (0) | 2023.01.29 |
Resource requirements(Request & Limit) (0) | 2023.01.22 |
쿠버네티스 apiVersion이란? (0) | 2023.01.15 |