Kubernetes : StatefulSet에서 관리하는 특정 포드를 다시 만들지 않고 삭제하는 방법?
나는 2개의 포드가 있는 스테이트풀 세트를 가지고 있다. 헤드리스(headless) 서비스가 있으며 각 포드에는 로드밸런서(LoadBalancer) 서비스가 있어 전 세계에서 이용할 수 있다.
pod name이 pod-0과 pod-1이라고 하자.
만약 내가 pod-0을 삭제하고 싶지만 pod-1을 계속 활성화하고 싶다면, 나는 그것을 할 수 없다.
나는 노력했다.
kubectl delete pod pod-0
StatefulSet 복제본이 2로 설정되어 있으므로 삭제한 후 재시작합니다.
그래서 노력했다
kubectl delete pod pod-0
kubectl scale statefulset some-name --replicas=1
그러면 pod-0이 삭제되고 pod-1이 삭제된 후 pod-0이 재시작됩니다. 복제본을 1로 설정하면 StatefulSet은 pod-0을 활성화 상태로 유지하지만 pod-1은 유지하지 않기 때문인 것 같습니다.
하지만 어떻게 하면 pod-1을 활성화하고 pod-0을 삭제할 수 있을까?
StatefulSet 컨트롤러에서 지원되지 않습니다. 아마도 당신이 할 수 있는 최선의 방법은 수면 심으로 직접 그 꼬투리를 만드는 것일 것이고 아마도 당신은 더 빠를 수 있을 것이다. 하지만 그러면 sts controller는 영원히 불행해질 것이다.
- Statefulset은 항상 인덱스가 0인 포드를 생성한다..(replica-1).
- 개별 포드를 보다 세밀하게 제어하려면 별도의 STS 개체를 만들어야 할 것 같습니다(레플리카 = 1 포함)
다음과 같은 사용자 지정 컨트롤러를 사용해 볼 수 있습니다:
맞춤형 자원을 사용하면 선택적 포드 제거로 더 많은 미세한 곡물 조절을 할 수 있다.
apiVersion: apps.kruise.io/v1alpha1
kind: CloneSet
spec:
# ...
replicas: 4
scaleStrategy:
podsToDelete:
- sample-9m4hp # you select which pod to remove
https://openkruise.io/en-us/docs/cloneset.html
또는 의 특정 포드를 제거하는 문제는 수년 동안 해결책이 없이 열려 왔습니다:
K8s 1.21+의 ReplicaSet에는 배포의 경우 해당 문제를 해결하기 위한 POD 주석이 있지만 STS의 경우에는 현재까지 아무것도 없습니다.
StatefulSet을 선택했지만 옵션을 추가하면 StatefulSet은 삭제되지만 포드는 그대로 유지됩니다. 그러면 당신이 원하는 순서대로 그들을 죽일 수 있어요. StatefulSet을 재생성할 때 남은 포드를 채택하고 누락된 포드를 대체할 새 포드를 생성해야 합니다.
'개발하자' 카테고리의 다른 글
Jupyter 노트북에서 셀 출력을 지우기 위한 키보드 단축키 (1) | 2023.11.02 |
---|---|
Uncatched ReferenceError: 내보내기가 Typescript에 의해 생성된 파일에 정의되지 않았습니다 (0) | 2023.11.02 |
Flutter 데스크탑 응용 프로그램에서 글로벌 키보드 단축키를 등록하는 방법은 무엇입니까? (1) | 2023.11.01 |
호스트를 Kubernetes의 서비스 경로로 리디렉션할 수 있습니까? (0) | 2023.10.31 |
펄럭이는 지속적인 티커 (1) | 2023.10.31 |