OnDelete배포전략이란?
spec.updateStrategy가 OnDelete로 설정되어 있으면 onDelete 배포전략을 사용한다고 말합니다.
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: ondelete
spec:
replicas: 3
updateStrategy:
type: OnDelete
onDelete 전략은 pod가 삭제될 때만 업데이트된 내용이 적용되는 방식입니다. 자동으로 pod가 업데이트되는 것을 방지하고, 사용자가 직접 pod를 하나씩 수동으로 업데이트할 때 사용합니다. 특히 pod 변경 사항이 큰 영향을 미칠 때 유용합니다.
언제 사용할까?
onDelete 전략은 스토리지에 영향을 주는 애플리케이션에서 사용됩니다. StatefulSet을 사용하는 애플리케이션은 보통 클러스터 모드로 구성되며, 각 애플리케이션은 자체 스토리지를 가지고 데이터를 동기화합니다. pod가 종료되고 다시 생성되면 클러스터에 합류하고, 그 사이의 공백 시간 동안 누락된 데이터를 동기화합니다. 관리자는 데이터 동기화 상태를 실시간으로 모니터링하고, 이를 기반으로 다음 pod를 업데이트하고 싶어할 겁니다. 이럴 때 onDelete 전략이 적합합니다.
OnDelete 배포 전략 실습
아래 statefulset을 배포합니다. nginx컨테이너를 사용하는 간단한 예제입니다.
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: ondelete
spec:
serviceName: "ondelete-headless"
replicas: 3
updateStrategy:
type: OnDelete
selector:
matchLabels:
app: ondelete
template:
metadata:
labels:
app: ondelete
spec:
containers:
- name: nginx
image: nginx:1.21
volumes:
- name: emptydir-storage
emptyDir: {}
pod를 조회하면 nginx pod 3개가 있습니다.
steatefulset에서 nginx 컨테이너 이미지 태그를 1.22로 변경하세요.
$ kubectl edit sts ondelete
image: nginx:1.22
실행중인 pod 컨테이너 이미지 태그가 변경되었는지 확인해보세요. 놀랍게도 컨테이너 이미지 태그가 변경이 안되었습니다.
kubectl get pod -o custom-columns="NAME:.metadata.name,IMAGE:.spec.containers[*].image"
컨테이너 이미지 태그를nginx 1.22로 변경했지만 변경이 안되었습니다. 그 이유가 onDelete모드이기 때문입니다. pod를 종료해야 새로운 pod가 생성되면서 컨테이너 이미지가 변경됩니다. ondelete-2번 pod를 종료시키고 다시 pod목록을 조회해보세요. ondelete-2번 pod만 컨테이너 이미지가 변경되었습니다.
onDelete모드의 단점
pod업데이트가 사람이 수동으로 한땀한땀 하다보니 휴먼에러가 발생할 수 있습니다. 작업자가 깜박하고 pod몇 개를 업데이트 안할 수 있습니다.
따라서 작업자는 작업을 마치기전에 모든 pod가 업데이트 되었는지 확인해야 합니다. steatefulset은 controllerrevisions로 버전관리를 합니다. 이 특징을 이용해서 마지막 statefulset revision과 pod revision이 일치하는지 검사합니다.
kubectl get controllerrevisions.apps
kubectl get pods -o custom-columns="NAME:.metadata.name,REVISION_HASH:.metadata.labels.controller-revision-hash"
'전공영역 공부 기록' 카테고리의 다른 글
hashicorp vault secret엔진을 v2로 업그레이드하는 방법 (0) | 2024.10.13 |
---|---|
Hashicorp vault 소개 (0) | 2024.10.11 |
쿠버네티스 cpu limit을 설정해야할까? 안해야할까? (1) | 2024.10.06 |
아키텍처 이야기 - 애플리케이션 개수를 증가시키면 요청 처리속도가 빨라질까? (1) | 2024.10.06 |
리눅스 컨테이너는 cpu 자원이 어떻게 제어될까? (0) | 2024.09.22 |