디플로이먼트
쿠버네티스 클러스터에서 실행되는 어플리케이션을 업데이트 하는 방법과 무중단 업데이트를 어떤 프로세스로 하는지 살펴보자
파드에서 실행중인 어플리케이션 업데이트
여기서 컨테이너 이미지 버전을 업데이트 하려면 어떻게 해야할까
2가지 방법이 있다.
- 기존 파드를 모두 삭제하고 새로운 파드를 시작
- 새로운 파드를 시작하고 기동하면 기존 파드 삭제
첫번째는 짧은 시간 동안 어플리케이션을 사용 할 수 없게 된다.
두번째는 동시에 두가지 버전이 실행된다.
기존 파드를 삭제하고 새 파드로 교체
레플리카 셋이 있는 경우 변경된 이미지 버전을 참조하게 파드 템플릿을 변경해놓고
이전 파드를 삭제 후 새롭게 실행한다.
새로운 파드 시작 후 이전 파드 삭제
잠시동안 두배의 파드가 실행되서 하드웨어 리소스를 사용하는 방식
새 파드를 시작하고 기존 파드를 삭제한다.
한번에 이전 버전에서 새 버전으로 변경
새파드가 모두 실행이 되면 서비스의 레이블 셀렉터를 변경해서 새 파드로 변경한다 (블루-그린 배포)
롤링 업데이트
파드를 단계별로 교체해서 롤링 업데이트 수행
이전 레플리카셋은 천천히 스케일 다운하고 새 파드를 스케일 업해 수행함
애플리케이션을 선언적으로 업데이트하기 위한 디플로이먼트 사용하기
디플로이먼트는 낮은 수준의 개념으로 간주되는 레플레카셋을 통해 수행되는 대신
어플리케이션을 배포하고 선언적으로 업데이트 하기 위한 높은 수준의 리소스다.
디플로이먼트 아래 레플리카셋이 생성된다.
어플리케이션을 업데이트 할때 추가 레플리케이션 컨트롤러가 도입되고 두 컨트롤러가 조화되도록 조정해야하는데
이걸 관리하는게 디플로이먼트다.
디플로이먼트 생성
apiVersion: apps/v1 #디플로이먼트는 API 그룹 app의 v1beta1버전
kind: Deployment #kind를 레플리케이션 컨트롤러에서 디플로이먼트로 변경
metadata:
name: kubia # 버전 포함할 필요x
spec:
replicas: 3
template:
metadata:
name: kubia
labels:
app: kubia
spec:
containers:
- image: luksa/kubia:v1
name: nodejs
selector:
matchLabels:
app: kubia
디플로이먼트 리소스 생성
kubectl create -f kubia-deployment-v1.yaml --record
디플로이먼트가 레플리카셋을 생성하는 방법과 레플리카셋이 파드를 생성하는 방식 이해
디플로이먼트로 생성한 파드에는 중간에 숫자 값이 추가로 포함이 된다.
숫자값은 파드 템플릿 해시값이다.
디플로이먼트 업데이트
디플로이먼트는 파드 템플릿을 수정하기만 하면 쿠버네티스가 변경시키는 모든 단계를 수행한다.
기본 업데이트 전략은 RollingUpdate 고 이 전략은 이전 버전과 새 버전을 동시에 실행 할 수 있는 경우만 사용해야 한다.
디플로이먼트는 템플릿을 변경하는 것만으로도 어플리케이션을 최신 버전으로 업데이트 할 수 있다.
중요한건 업데이트 후에도 기존 레플리카셋이 남아있어서 롤백이 가능하다는 점
디플로이먼트 롤백
마지막 롤아웃을 취소해서 이전 배포 버전으로 쉽게 롤백 할 수 있다.
kubectl rollout undo deployment kubia
롤아웃이 완료되면 이전 레플리카셋은 삭제되지 않기 때문에 버전을 골라 롤백할 수 도 있다.
개정 이력 보기
kubectl rollout history deploytment kubia
특정 디플로이먼트 개정으로 롤백
특정 버전으로 롤백 할 수 있다.
kubectl rollout undo deployment kubia --to-revision=1
revision 이 보이는 수는 editionHistoryLimit 으로 제한한다. default 값은 2
이보다 이전 레플리카셋은 삭제된다.
'인프라 > kubernetes' 카테고리의 다른 글
kubernetes 내부 이해 (0) | 2021.08.26 |
---|---|
kubernetes 스테이트풀셋 (0) | 2021.08.25 |
kubernetes 컨피그맵과 시크릿 (0) | 2021.08.24 |
kubernetes 볼륨 (0) | 2021.08.24 |
kubernetes 서비스 (0) | 2021.08.24 |