3장. PodDisruptionBudget [policy/v1]
- 설명
- PodDisruptionBudget은 Pod 컬렉션으로 인해 발생할 수 있는 최대 중단을 정의하는 오브젝트입니다.
- 유형
-
object
3.1. 사양
속성 | 유형 | 설명 |
---|---|---|
|
| APIVersion은 버전이 지정된 이 오브젝트 표현의 스키마를 정의합니다. 서버는 인식된 스키마를 최신 내부 값으로 변환해야 하며, 인식되지 않는 값을 거부할 수 있습니다. 자세한 내용은 https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources |
|
| kind는 이 오브젝트가 나타내는 REST 리소스에 해당하는 문자열 값입니다. 서버는 클라이언트에서 요청을 제출한 끝점에서 이를 유추할 수 있습니다. CamelCase로 업데이트할 수 없습니다. 자세한 내용은 https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds |
| 표준 오브젝트의 메타데이터입니다. 자세한 내용은 https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata | |
|
| PodDisruptionBudgetSpec은 PodDisruptionBudget에 대한 설명입니다. |
|
| PodDisruptionBudgetStatus는 PodDisruptionBudget의 상태에 대한 정보를 나타냅니다. 상태는 시스템의 실제 상태를 추적할 수 있습니다. |
3.1.1. .spec
- 설명
- PodDisruptionBudgetSpec은 PodDisruptionBudget에 대한 설명입니다.
- 유형
-
object
속성 | 유형 | 설명 |
---|---|---|
| 제거된 Pod가 없는 경우에도 "selector"에서 선택한 대부분의 "maxUnavailable" Pod를 제거할 수 없는 경우 제거가 허용됩니다. 예를 들어 0을 지정하여 모든 자발적으로 제거되는 것을 방지할 수 있습니다. 이는 "minAvailable"과 함께 사용할 수 있는 설정입니다. | |
| 제거된 Pod가 없는 경우에도 "selector"에서 선택한 "minAvailable" Pod를 제거 후에도 계속 사용할 수 있는 경우에도 제거할 수 있습니다. 예를 들어 "100%"를 지정하여 모든 자발적으로 제거되는 것을 방지할 수 있습니다. | |
| 중단 예산에서 제거를 관리하는 Pod에 대한 라벨 쿼리입니다. null 선택기는 Pod와 일치하지 않지만 비어 있는 ({}) 선택기는 네임스페이스 내의 모든 Pod를 선택합니다. | |
|
| UnhealthyPodEvictionPolicy는 비정상 Pod를 제거로 고려해야 하는 시기에 대한 기준을 정의합니다. 현재 구현은 정상 Pod를 type="Ready",status="True"가 있는 status.conditions 항목이 있는 Pod로 간주합니다. 유효한 정책은 IfHealthyBudget 및 AlwaysAllow입니다. 정책을 지정하지 않으면 IfHealthyBudget 정책에 해당하는 기본 동작이 사용됩니다. IfHealthyBudget 정책은 실행 중인 Pod(status.phase="Running")를 의미하지만 보호된 애플리케이션이 중단되지 않는 경우에만 제거할 수 있습니다(status.currentHealthy는 적어도 status.desiredHealthy와 동일). 정상 Pod는 제거를 위해 PDB가 적용됩니다. AlwaysAllow 정책은 실행 중인 모든 Pod(status.phase="Running")를 의미하지만 아직 정상적이지 않은 것으로 간주되며 PDB의 기준이 충족되는지 여부와 관계없이 제거할 수 있습니다. 즉, 중단된 애플리케이션에서 실행 중인 Pod가 정상 상태가 되지 않을 수 있습니다. 정상 Pod는 제거를 위해 PDB가 적용됩니다. 향후에 추가 정책이 추가될 수 있습니다. 제거 결정을 수행하는 클라이언트는 이 필드에서 인식되지 않는 정책이 발생하면 비정상 Pod를 제거할 수 없습니다. 이 필드는 베타 수준입니다. 제거 API는 기능 게이트 PDBUnhealthyPodEvictionPolicy가 활성화된 경우(기본적으로 활성화) 이 필드를 사용합니다.
가능한 enum 값: - |
3.1.2. .status
- 설명
- PodDisruptionBudgetStatus는 PodDisruptionBudget의 상태에 대한 정보를 나타냅니다. 상태는 시스템의 실제 상태를 추적할 수 있습니다.
- 유형
-
object
- 필수 항목
-
disruptionsAllowed
-
currentHealthy
-
desiredHealthy
-
expectedPods
-
속성 | 유형 | 설명 |
---|---|---|
| 조건에는 PDB 조건이 포함됩니다. 중단 컨트롤러에서 DisruptionAllowed 조건을 설정합니다. 다음은 reason 필드의 알려진 값입니다( 향후 추가 이유는 추가할 수 있습니다. - SyncFailed: 컨트롤러에 오류가 발생하여 허용된 중단 수를 계산할 수 없었습니다. 따라서 중단이 허용되지 않으며 조건 상태는 False입니다. - InsufficientPods: PodDisruptionBudget에 필요한 수 또는 그 이하의 Pod 수입니다. 중단이 허용되지 않으며 조건 상태는 False입니다. - SufficientPods: PodDisruptionBudget에 필요한 것보다 더 많은 Pod가 있습니다. 조건은 True이고, 허용되는 중단 횟수는 disruptionsAllowed 속성에서 제공합니다. | |
|
| 현재 정상 Pod 수 |
|
| 원하는 최소 정상 Pod 수 |
| DisruptedPods에는 API 서버 제거 하위 리소스에서 제거가 처리되었지만 PodDisruptionBudget 컨트롤러에서 아직 관찰되지 않은 Pod에 대한 정보가 포함되어 있습니다. Pod는 PDB 컨트롤러에서 삭제 또는 시간 초과로 표시된 것으로 표시되는 시간에 API 서버가 제거 요청을 처리할 때 이 맵에 있습니다. 맵의 키는 Pod 이름이며 값은 API 서버가 제거 요청을 처리하는 시간입니다. 삭제가 발생하지 않고 Pod가 여전히 있는 경우 일정 시간 후에 PodDisruptionBudget 컨트롤러에서 자동으로 목록에서 제거됩니다. 모든 것이 순조롭게 진행되면 이 맵은 대부분의 시간 동안 비어 있어야 합니다. 맵의 많은 수의 항목은 Pod 삭제 관련 문제를 나타낼 수 있습니다. | |
|
| 현재 허용되는 Pod 중단 수입니다. |
|
| 이 중단 예산으로 계산되는 총 Pod 수 |
|
| 이 PDB 상태를 업데이트할 때 관찰된 대부분의 최근 생성 DisruptionsAllowed 및 기타 상태 정보는 observedGeneration이 PDB의 개체 생성과 동일한 경우에만 유효합니다. |