반응형
1. 개념
- 쿠버네티스는 서비스의 무중단 업데이트를 위해 3가지 배포 방식을 지원
- 롤링 업데이트 : 정해진 비율만큼의 파드만 점진적으로 배포
- 블루/그린 : ver 1.0과 ver 2.0을 구성해놓고, 트래픽을 ver 2.0으로 전환
- 카나리 : ver 2.0을 일부만 배포하고, 트래픽도 일부만 ver 2.0으로 전환. 배포에 문제가 없을 경우 ver 2.0을 점진적으로 배포 및 트래픽 전환
- 쿠버네티스는 롤링 업데이트를 디폴트 배포 전략으로 설정
- 또한 배포 이후 장애 시 복구를 위해 이전 버전으로 되돌리는 롤백 지원
2. 롤링 업데이트 옵션
- maxSurge
- 롤링 업데이트를 위해 최대로 생성할 수 있는 파드 갯수
- maxSurge를 높게 설정하면 롤링 배포를 빠르게 적용 가능
- % 단위 또는 갯수 단위로 지정 가능
- 설정하지 않을 경우 기본 값은 25%
- maxUnavailable
- 롤링 업데이트 중 최대로 삭제할 파드 갯수
- maxUnavailable를 높게 설정하면 롤링 배포를 빠르게 적용 가능
- 다만 한번에 많은 파드를 삭제할 경우 트래픽이 남아있는 소수의 파드로 집중될 수 있어 값을 적절히 설정 필요
- % 단위 또는 갯수 단위로 지정 가능
- 설정하지 않을 경우 기본 값은 25%
3. YAML을 활용한 디플로이먼트 생성
- 디플로이먼트에 롤링 배포 적용
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: deploy-test
name: deploy-test
spec:
replicas: 6
selector:
matchLabels:
app: deploy-test
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 2
maxUnavailable: 1
template:
metadata:
labels:
app: deploy-test
spec:
containers:
- image: nginx:1.9.0
name: nginx
4. 명령어를 활용한 롤링 업데이트 핸들링
- 이미지 업데이트
kubectl set image deployment/[디플로이먼트_이름] [컨테이너_이름]=[이미지]:[버전]
ex) kubectl set image deployment/deploy-test nginx=nginx:1.9.2
- 롤링 업데이트 상태 확인
kubectl rollout status deployment [디플로이먼트_이름]
ex) kubectl rollout status deployment deploy-test
or
kubectl describe deployments.apps [디플로이먼트_이름]
ex) kubectl describe deployments.apps deploy-test
- 롤백 적용
kubectl rollout undo deployment [디플로이먼트_이름]
ex) kubectl rollout undo deployment deploy-test
- 롤링 업데이트/롤백 히스토리 확인
kubectl rollout history deployment [디플로이먼트_이름]
ex) kubectl rollout history deployment deploy-test
and
kubectl rollout history deployment [디플로이먼트_이름] --revision=[리비전_버전]
ex) kubectl rollout history deployment deploy-test --revision=3
5. 롤링 업데이트 적용
- 컨테이너 이름과 이미지 버전 확인
- 디플로이먼트 이미지 업데이트
- 롤링 업데이트 적용 상태 확인
- 업데이트 적용 확인
- 롤백 적용
- 롤백 적용 확인
- 롤링 업데이트/롤백 히스토리 확인
반응형
'Kubernetes' 카테고리의 다른 글
Kubernetes 환경변수(env), 컨피그맵(ConfigMap), 시크릿(Secrets) 개념 및 설정 (0) | 2023.03.16 |
---|---|
Kubernetes 커맨드(Command) 및 인자(Arguments) 설정 (0) | 2023.03.16 |
Kubernetes 리소스 모니터링을 위한 metrics-server 설치 (0) | 2023.03.16 |
Kubernetes 다중 스케줄러(Multiple Scheduler) 개념과 설정 (0) | 2023.03.16 |
Kubernetes 정적 파드(Static Pod) 개념과 설정 (0) | 2023.03.16 |