Skip to content

Commit d0bdbd4

Browse files
authored
Merge pull request #51371 from jonathancecilj/51195-k8s_1_34_branch
Document pod `status.observedGeneration`
2 parents 11af619 + 070dda9 commit d0bdbd4

File tree

1 file changed

+51
-8
lines changed
  • content/en/docs/concepts/workloads/pods

1 file changed

+51
-8
lines changed

content/en/docs/concepts/workloads/pods/_index.md

Lines changed: 51 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -227,17 +227,12 @@ have some limitations:
227227

228228
- Most of the metadata about a Pod is immutable. For example, you cannot
229229
change the `namespace`, `name`, `uid`, or `creationTimestamp` fields.
230-
- The `generation` field is unique. It will be automatically set by the
231-
system such that new pods have a `generation` of 1, and every update to
232-
mutable fields in the pod's spec will increment the `generation` by 1. If the
233-
alpha feature gate PodObservedGenerationTracking is set, the
234-
pod's `status.observedGeneration` will reflect the `metadata.generation` of
235-
the pod at the point that the pod status is being reported.
230+
236231
- If the `metadata.deletionTimestamp` is set, no new entry can be added to the
237232
`metadata.finalizers` list.
238233
- Pod updates may not change fields other than `spec.containers[*].image`,
239-
`spec.initContainers[*].image`, `spec.activeDeadlineSeconds` or
240-
`spec.tolerations`. For `spec.tolerations`, you can only add new entries.
234+
`spec.initContainers[*].image`, `spec.activeDeadlineSeconds`, `spec.terminationGracePeriodSeconds`,
235+
`spec.tolerations` or `spec.schedulingGates`. For `spec.tolerations`, you can only add new entries.
241236
- When updating the `spec.activeDeadlineSeconds` field, two types of updates
242237
are allowed:
243238

@@ -260,6 +255,54 @@ The above update rules apply to regular pod updates, but other pod fields can be
260255
- **Binding:** The `binding` subresource allows setting the pod's `spec.nodeName` via a `Binding` request.
261256
This is typically only used by the {{< glossary_tooltip text="scheduler" term_id="kube-scheduler" >}}.
262257

258+
### Pod generation
259+
260+
- The `metadata.generation` field is unique. It will be automatically set by the
261+
system such that new pods have a `metadata.generation` of 1, and every update to
262+
mutable fields in the pod's spec will increment the `metadata.generation` by 1.
263+
264+
{{< feature-state feature_gate_name="PodObservedGenerationTracking" >}}
265+
266+
- `observedGeneration` is a field that is captured in the `status` section of the Pod
267+
object. If the feature gate `PodObservedGenerationTracking` is set, the Kubelet will set `status.observedGeneration`
268+
to track the pod state to the current pod status. The pod's `status.observedGeneration` will reflect the
269+
`metadata.generation` of the pod at the point that the pod status is being reported.
270+
271+
{{< note >}}
272+
The `status.observedGeneration` field is managed by the kubelet and external controllers should **not** modify this field.
273+
{{< /note >}}
274+
275+
Different status fields may either be associated with the `metadata.generation` of the current sync loop, or with the
276+
`metadata.generation` of the previous sync loop. The key distinction is whether a change in the `spec` is reflected
277+
directly in the `status` or is an indirect result of a running process.
278+
279+
#### Direct Status Updates
280+
281+
For status fields where the allocated spec is directly reflected, the `observedGeneration` will
282+
be associated with the current `metadata.generation` (Generation N).
283+
284+
This behavior applies to:
285+
286+
- **Resize Status**: The status of a resource resize operation.
287+
- **Allocated Resources**: The resources allocated to the Pod after a resize.
288+
- **Ephemeral Containers**: When a new ephemeral container is added, and it is in `Waiting` state.
289+
290+
#### Indirect Status Updates
291+
292+
For status fields that are an indirect result of running the spec, the `observedGeneration` will be associated
293+
with the `metadata.generation` of the previous sync loop (Generation N-1).
294+
295+
This behavior applies to:
296+
297+
- **Container Image**: The `ContainerStatus.ImageID` reflects the image from the previous generation until the new image
298+
is pulled and the container is updated.
299+
- **Actual Resources**: During an in-progress resize, the actual resources in use still belong to the previous generation's
300+
request.
301+
- **Container state**: During an in-progress resize, with require restart policy reflects the previous generation's
302+
request.
303+
- **activeDeadlineSeconds** & **terminationGracePeriodSeconds** & **deletionTimestamp**: The effects of these fields on the
304+
Pod's status are a result of the previously observed specification.
305+
263306
## Resource sharing and communication
264307

265308
Pods enable data sharing and communication among their constituent

0 commit comments

Comments
 (0)