Kubbernetes Drain 및 Pod Disruption Budget(PDB)
5855 단어 Kubernetespodtech
개요
개인의 메모로 Kubernetes의 Drain과 Disruption을 총괄했다.
참고 자료
Drain
kubectl drain
명령을 사용하여 노드(ex: 커널 업데이트 또는 하드웨어 업데이트 등)를 유지하기 전에 노드의 모든 Pod를 안전하게 삭제할 수 있습니다.Drain을 안전하게 삭제할 때는 Pod 컨테이너의 graceful shutdown 또는 PDB(후술)를 고려하여 삭제할 수 있습니다.kubectl get nodes
kubectl drain <node name>
상기 명령이 잘못 집행되지 않으면 노드를 정지할 수 있습니다.유지 보수 과정에서 노드가 그룹에 남아 있을 때 다음 명령을 실행해야 합니다.
kubectl uncordon <node name>
위에서 설명한 대로 Kubernetes에서 노드의 새 Pod를 다시 시작하는 일정을 지정할 수 있습니다.Voluntary 및 involuntary disruptions
사용자 또는 컨트롤러가 Pod를 제거하지 않는 한 불가피한 하드웨어 또는 시스템 소프트웨어 오류가 발생하지 않는 한 Pod는 사라지지 않습니다.
Kubernetes에서 이러한 불가피한 상황을 involungtary disruptions라고 부른다.예를 들면 다음과 같은 경우가 있다.
응용 프로그램 소유자가 설정한 동작과 그룹 관리자가 설정한 동작 등을 포함한다.
예를 들어, 일반적인 애플리케이션 매니저의 작업이 포함됩니다.
클러스터 관리자 또는 클라우드 관리자가 volungtary disruptions를 생성할 수 없는 경우에는 Pod Disruption Budgets를 만들 필요가 없습니다.
회피 처리의 대응
involuny disruptions에 대응하기 위해서는 다음과 같은 몇 가지 방법이 있습니다.
Pod disruption budget(PDB)
Kubernetes는 빈번한volungtary disruption이 발생할 때 고가용성을 위한 기능을 제공합니다.
응용 프로그램 소유자로서 각 응용 프로그램에 PodDisruptionBudget(PDB)을 작성할 수 있습니다.PDB는 복제 응용 프로그램의 Pod 수를 제한하는 동시에 voluntary disruption을 통해 줄입니다.예를 들어 자원량 기초 응용 프로그램에서 실행 중인 복제품 수는 할당량 이하에 미치지 않아야 한다.웹 전면에서 처리 하중의 복사본 수는 특정 비율보다 낮지 않아야 한다.
집단 관리자와 클라우드 서비스 공급자는 Pod와 DeploymentEviction API를 직접 삭제하는 대신PodDisruptionBudget 도구를 사용해야 한다.
예를 들어
kubectl drain
하위 명령은 노드를 서비스 정지로 표시할 수 있다.kubectl drain
를 실행하면 서비스를 중지할 노드의 모든 Pod가 제거됩니다.kubectl
명령에 의해 전송된 삭제 요청은 일시적으로 거부될 수 있으므로 대상에 있는 모든 Pod가 종료되거나 시간이 초과되기 전에 실패한 삭제 요청을 정기적으로 다시 시도합니다.PDB는 응용 프로그램이 사용할 수 있는 복사본 수를 지정합니다. 응용 프로그램이 예상한 보존 수량과 비교합니다.예를 들어 Deployment에서 복제품 수를 5로 지정할 때, PDB가 4로 지정할 때, Eviction API에서 허용하는volungtary disruption의 수는 1이다.
PDB에서 Involungtary disruption을 제어할 수 없습니다.그리고 Involungtary disruption의 삭제 수는 budget이라고 할 수 없습니다.
스크롤 업데이트를 통해 삭제하거나 사용할 수 없는Pod은 disruption budget으로 계산되지만, Deployment와StatefulSet 같은 작업 로드 자원은 스크롤 업데이트를 할 때 PDB의 제한을 받지 않습니다.반대로 프로그램 업데이트 과정 중의 실패 처리는workload 자원의 스펙트럼에 따라 설정됩니다.
Pod가 Eviction API에서 제거되면 Pod는 Pod의 spec
terminationGracePeriodSeconds
설정에 따라 정상적으로 종료됩니다.PodDisruptionBudge의 예
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: zk-pdb
spec:
minAvailable: 2
selector:
matchLabels:
app: zk-a
PDB 작업 예
Reference
이 문제에 관하여(Kubbernetes Drain 및 Pod Disruption Budget(PDB)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/sasakiki/articles/a71d9158020266텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)