Pod를 정해진 수만큼 복제하고 관리
Kubernetes 사용 목적 - 사용자가 요청한 상태를 유지 관리( 자동으로 )가 목적
예시
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: replicaset-nginx
spec:
replicas: 3
selector:
matchLabels:
app: my-nginx-pods-label
template:
metadata:
name: my-nginx-pod
labels:
app: my-nginx-pods-label
spec:
containers:
- name: nginx
image: nginx:1.20.0
ports:
- containerPort: 80
spec.replicas - 동일한 Pod 유지할 개수
spec.selector.matchLabels - label 체크 조건
spec.template - 생성할 Pod 명세
kubectl get replicasets -> ReplicaSet 목록
kubectl describe replicaset/<ReplicaSet 이름> -> 특정 ReplicaSet 상세 정보
kubectl get pod --show-labels -> Pod 정보에 label 포함
kubectl label pod/<Pod 이름> app- -> 특정 Pod의 label 내용 변경
kubectl delete -f <ReplicaSet 이름> -> ReplicaSet 삭제, Pod도 삭제
ReplicaSet을 이용하여 Pod를 Update하고 이력을 관리하여 Rollback 하기나 특정버전( Revision )으로 돌아가는 기능 제공
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-nginx
labels:
app: deployment-nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx-pods
template:
metadata:
name: nginx-pod
labels:
app: nginx-pods
spec:
containers:
- name: nginx
image: nginx:1.20.2
ports:
- containerPort: 80
사용 중인 인스턴스 내에서 새 버전을 점진적으로 교체
무중단 방식의 가장 기본적인 방식
장점
단점
운영중인 구버전과 동일한 신버전의 인스턴스를 구성한 후 Load Balancer를 통해 모든 트래픽을 한 번에 신버전 쪽으로 전환하는 방식
장점
단점
옛날 광부들이 유독 가스 감지를 위해 Canary 새를 이용한 것을 유래로 한 것으로 잠재적 문제 상황을 미리 발견하는 방식
신버전을 소수의 사용자에게 배포해서 문제가 없는지 확인한 후 점차 사용자를 늘려 배포하는 기법
Blue/Green Deployment와 유사한 면이 있지만 트래픽을 한 번에 바꾸는 것이 아니라 단계적으로 전환하기 때문에 부정적 영향 최소화하고 트래픽 양을 조절하여 Rollback할 수 있다.
장점
단점
점진적으로 Pod를 교체하면서 update 수행
기존 Pod를 일부 제거하고 새롭게 Update된 Pod를 일부 배포하는 과정을 반복하는 방식
점진적 배포과정 때문에 완료까지 시간이 더 걸리겠지만 일부의 Pod는 계속 running 상태를 유지하기 때문에 downtime이 발생하지 않는다.
Deployment YAML 파일에 추가 설정 내용
strategy.rollingUpdate.maxSurge
strategy.rollingUpdate.maxUnavailable
새로운 애플리케이션을 배포하였다가 문제가 생겨 이전 버전으로 되돌리는 과정을 Rollback 이라 한다.
Deployment 는 Rollback 기능을 사용할 수 있다.
배포 이력 확인
이전 버전으로 Rollback