@@ -257,16 +257,47 @@ The above update rules apply to regular pod updates, but other pod fields can be
257
257
258
258
### Pod generation
259
259
260
- - The ` generation ` field is unique. It will be automatically set by the
260
+ - The ` metadata. generation` field is unique. It will be automatically set by the
261
261
system such that new pods have a ` metadata.generation ` of 1, and every update to
262
262
mutable fields in the pod's spec will increment the ` metadata.generation ` by 1.
263
263
264
264
{{< feature-state for_k8s_version="v1.34" state="beta" >}}
265
265
266
- - ` observedGeneration ` is an optional field that is captured in the ` status ` section of the Pod
267
- object. Kubelet will set ` status.observedGeneration ` to track the pod state to the current pod status.
268
- The pod's ` status.observedGeneration ` will reflect the ` metadata.generation ` of the pod at the point
269
- that the pod status is being reported.
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
+ The key distinction is whether a change in the ` spec ` is reflected directly in the ` status ` or is an indirect result
272
+ of a running process.
273
+
274
+ #### Direct Status Updates
275
+
276
+ For fields where a change can be directly observed and reflected in the Pod's status, the ` observedGeneration ` will
277
+ match the current ` spec ` generation (Generation N) during the same sync loop.
278
+
279
+ This behavior applies to:
280
+
281
+ - ** Resize Status** : The status of a resource resize operation.
282
+ - ** Allocated Resources** : The resources allocated to the Pod after a resize.
283
+ - ** Ephemeral Containers** : When a new ephemeral container is added, and it is in ` Waiting ` state.
284
+
285
+ #### Indirect Status Updates
286
+
287
+ For changes that require a process to run before the result is visible the status will reflect the outcome of the previous
288
+ ` spec ` generation (Generation N-1) during the current sync loop. The ` observedGeneration ` will update in a subsequent loop
289
+ after the process completes.
290
+
291
+ This behavior applies to:
292
+
293
+ - ** Container Image** : The ` ContainerStatus.ImageID ` reflects the image from the previous generation until the new image
294
+ is pulled and the container is updated.
295
+ - ** Actual Resources** : During an in-progress resize, the actual resources in use still belong to the previous generation's
296
+ request.
297
+ - ** Container state** : During an in-progress resize, with require restart policy reflects the previous generation's
298
+ request.
299
+ - ** activeDeadlineSeconds** & ** terminationGracePeriodSeconds** & ** DeletionTimestamp** : The effects of these fields on the
300
+ Pod's status are a result of the previously observed specification.
270
301
271
302
## Resource sharing and communication
272
303
0 commit comments