Update PDB documentation to explain new field (#3885)
* update-docs-pdb * Addressed erictune@'s commentsreviewable/pr4151/r1
parent
76cb30a271
commit
09bf855b76
|
@ -1,6 +1,9 @@
|
||||||
---
|
---
|
||||||
assignees:
|
assignees:
|
||||||
- davidopp
|
- davidopp
|
||||||
|
- erictune
|
||||||
|
- foxish
|
||||||
|
- kow3ns
|
||||||
title: Configure a Pod Disruption Budget
|
title: Configure a Pod Disruption Budget
|
||||||
redirect_from:
|
redirect_from:
|
||||||
- "/docs/admin/disruptions/"
|
- "/docs/admin/disruptions/"
|
||||||
|
@ -40,13 +43,37 @@ disruption budget to be violated.
|
||||||
|
|
||||||
## Specifying a PodDisruptionBudget
|
## Specifying a PodDisruptionBudget
|
||||||
|
|
||||||
A `PodDisruptionBudget` has two components: a label selector `selector` to specify the set of
|
A `PodDisruptionBudget` has three fields:
|
||||||
pods to which it applies, and `minAvailable` which is a description of the number of pods from that
|
|
||||||
|
* A label selector `selector` to specify the set of
|
||||||
|
pods to which it applies. This is a required field.
|
||||||
|
* `minAvailable` which is a description of the number of pods from that
|
||||||
set that must still be available after the eviction, i.e. even in the absence
|
set that must still be available after the eviction, i.e. even in the absence
|
||||||
of the evicted pod. `minAvailable` can be either an absolute number or a percentage.
|
of the evicted pod. `minAvailable` can be either an absolute number or a percentage.
|
||||||
So for example, 100% means no voluntary evictions from the set are permitted. In
|
* `maxUnavailable` (available in Kubernetes 1.7 and higher) which is a description
|
||||||
typical usage, a single budget would be used for a collection of pods managed by
|
of the number of pods from that set that can be unavailable after the eviction.
|
||||||
a controller—for example, the pods in a single ReplicaSet.
|
It can also be either an absolute number or a percentage.
|
||||||
|
|
||||||
|
You can specify only one of `maxUnavailable` and `minAvailable` in a single `PodDisruptionBudget`.
|
||||||
|
`maxUnavailable` can only be used to control the eviction of pods
|
||||||
|
that have an associated controller managing them. In the examples below, "desired replicas"
|
||||||
|
is the `scale` of the controller managing the pods being selected by the
|
||||||
|
`PodDisruptionBudget`.
|
||||||
|
|
||||||
|
Example 1: With a `minAvailable` of 5, evictions will be allowed as long as they leave behind
|
||||||
|
5 or more healthy pods among those selected by the PodDisruptionBudget's `selector`.
|
||||||
|
|
||||||
|
Example 2: With a `minAvailable` of 30%, evictions will be allowed as long as at least 30%
|
||||||
|
of the number of desired replicas are healthy.
|
||||||
|
|
||||||
|
Example 3: With a `maxUnavailable` of 5, evictions will be allowed as long as there are at most 5
|
||||||
|
unhealthy replicas among the total number of desired replicas.
|
||||||
|
|
||||||
|
Example 4: With a `maxUnavailable` of 30%, evictions will be allowed as long as no more than 30%
|
||||||
|
of the desired replicas are unhealthy.
|
||||||
|
|
||||||
|
In typical usage, a single budget would be used for a collection of pods managed by
|
||||||
|
a controller—for example, the pods in a single ReplicaSet or StatefulSet.
|
||||||
|
|
||||||
Note that a disruption budget does not truly guarantee that the specified
|
Note that a disruption budget does not truly guarantee that the specified
|
||||||
number/percentage of pods will always be up. For example, a node that hosts a
|
number/percentage of pods will always be up. For example, a node that hosts a
|
||||||
|
@ -55,9 +82,15 @@ specified in the budget, thus bringing the number of available pods from the
|
||||||
collection below the specified size. The budget can only protect against
|
collection below the specified size. The budget can only protect against
|
||||||
voluntary evictions, not all causes of unavailability.
|
voluntary evictions, not all causes of unavailability.
|
||||||
|
|
||||||
You can find an example of a pod disruption budget defined below. It matches pods with the label
|
A `maxUnavailable` of 0% (or 0) or a `minAvailable` of 100% (or equal to the
|
||||||
|
number of replicas) may block node drains entirely. This is permitted as per the
|
||||||
|
semantics of `PodDisruptionBudget`.
|
||||||
|
|
||||||
|
You can find examples of pod disruption budgets defined below. They match pods with the label
|
||||||
`app: zookeeper`.
|
`app: zookeeper`.
|
||||||
|
|
||||||
|
Example PDB Using maxUnavailable:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
apiVersion: policy/v1beta1
|
apiVersion: policy/v1beta1
|
||||||
kind: PodDisruptionBudget
|
kind: PodDisruptionBudget
|
||||||
|
@ -70,8 +103,28 @@ spec:
|
||||||
app: zookeeper
|
app: zookeeper
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Example PDB Using maxUnavailable (Kubernetes 1.7 or higher):
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: policy/v1beta1
|
||||||
|
kind: PodDisruptionBudget
|
||||||
|
metadata:
|
||||||
|
name: zk-pdb
|
||||||
|
spec:
|
||||||
|
maxUnavailable: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: zookeeper
|
||||||
|
```
|
||||||
|
|
||||||
|
For example, if the above `zk-pdb` object selects the pods of a StatefulSet of size 3, both
|
||||||
|
specifications have the exact same meaning. The use of `maxUnavailable` is recommended as it
|
||||||
|
automatically responds to changes in the number of replicas of the corresponding controller.
|
||||||
|
|
||||||
## Requesting an eviction
|
## Requesting an eviction
|
||||||
|
|
||||||
|
See the task explaining [draining nodes](/docs/tasks/administer-cluster/safely-drain-node/) for a higher level construct used to trigger evictions of pods on chosen nodes.
|
||||||
|
|
||||||
If you are writing infrastructure software that wants to produce these voluntary
|
If you are writing infrastructure software that wants to produce these voluntary
|
||||||
evictions, you will need to use the eviction API. The eviction subresource of a
|
evictions, you will need to use the eviction API. The eviction subresource of a
|
||||||
pod can be thought of as a kind of policy-controlled DELETE operation on the pod
|
pod can be thought of as a kind of policy-controlled DELETE operation on the pod
|
||||||
|
|
Loading…
Reference in New Issue