@@ -314,7 +314,7 @@ will always be `True` when the condition is present - if there is no longer a pe
314
314
(either the resize was allocated or reverted), the condition will be removed.
315
315
316
316
** PodResizeInProgress** will track in-progress resizes, and should be present whenever allocated resources
317
- != acknowledged resources (see [ Resource States] ( #resource-states ) ). For successful synchronous
317
+ != actuated resources (see [ Resource States] ( #resource-states ) ). For successful synchronous
318
318
resizes, this condition should be short lived, and ` reason ` and ` message ` will be left blank. If an
319
319
error occurs while actuating the resize, the ` reason ` will be set to ` Error ` , and ` message ` will be
320
320
populated with the error message. In the future, this condition will also be used for long-running
@@ -419,7 +419,7 @@ The Kubelet now tracks 4 sets of resources for each pod/container:
419
419
- Reported in the API through the ` .status.containerStatuses[i].allocatedResources ` field
420
420
(allocated requests only)
421
421
- Persisted locally on the node (requests + limits) in a checkpoint file
422
- 3 . Acknowledged resources
422
+ 3 . Actuated resources
423
423
- The resource configuration that the Kubelet passed to the runtime to actuate
424
424
- Not reported in the API
425
425
- Persisted locally on the node in a checkpoint file
@@ -433,7 +433,7 @@ The Kubelet now tracks 4 sets of resources for each pod/container:
433
433
Changes are always propogated through these 4 resource states in order:
434
434
435
435
```
436
- Desired --> Allocated --> Acknowledged --> Actual
436
+ Desired --> Allocated --> Actuated --> Actual
437
437
```
438
438
439
439
@@ -513,7 +513,7 @@ This is intentionally hitting various edge-cases for demonstration.
513
513
1 . kubelet runs the pod and updates the API
514
514
- ` spec.containers[0].resources.requests[cpu] ` = 1
515
515
- ` status.containerStatuses[0].allocatedResources[cpu] ` = 1
516
- - ` acknowledged [cpu]` = 1
516
+ - ` actuated [cpu]` = 1
517
517
- ` status.containerStatuses[0].resources.requests[cpu] ` = 1
518
518
- actual CPU shares = 1024
519
519
@@ -522,23 +522,23 @@ This is intentionally hitting various edge-cases for demonstration.
522
522
` requests ` , ResourceQuota not exceeded, etc) and accepts the operation
523
523
- ` spec.containers[0].resources.requests[cpu] ` = 1.5
524
524
- ` status.containerStatuses[0].allocatedResources[cpu] ` = 1
525
- - ` acknowledged [cpu]` = 1
525
+ - ` actuated [cpu]` = 1
526
526
- ` status.containerStatuses[0].resources.requests[cpu] ` = 1
527
527
- actual CPU shares = 1024
528
528
529
529
1 . Kubelet Restarts!
530
- - The allocated & acknowledged resources are read back from checkpoint
530
+ - The allocated & actuated resources are read back from checkpoint
531
531
- Pods are resynced from the API server, but admitted based on the allocated resources
532
532
- ` spec.containers[0].resources.requests[cpu] ` = 1.5
533
533
- ` status.containerStatuses[0].allocatedResources[cpu] ` = 1
534
- - ` acknowledged [cpu]` = 1
534
+ - ` actuated [cpu]` = 1
535
535
- ` status.containerStatuses[0].resources.requests[cpu] ` = 1
536
536
- actual CPU shares = 1024
537
537
538
538
1 . Kubelet syncs the pod, sees resize #1 and admits it
539
539
- ` spec.containers[0].resources.requests[cpu] ` = 1.5
540
540
- ` status.containerStatuses[0].allocatedResources[cpu] ` = 1.5
541
- - ` acknowledged [cpu]` = 1
541
+ - ` actuated [cpu]` = 1
542
542
- ` status.containerStatuses[0].resources.requests[cpu] ` = 1
543
543
- ` status.conditions[type==PodResizeInProgress] ` added
544
544
- actual CPU shares = 1024
@@ -554,7 +554,7 @@ This is intentionally hitting various edge-cases for demonstration.
554
554
1 . Container runtime applied cpu=1.5
555
555
- ` spec.containers[0].resources.requests[cpu] ` = 2
556
556
- ` status.containerStatuses[0].allocatedResources[cpu] ` = 1.5
557
- - ` acknowledged [cpu]` = 1.5
557
+ - ` actuated [cpu]` = 1.5
558
558
- ` status.containerStatuses[0].resources.requests[cpu] ` = 1
559
559
- ` status.conditions[type==PodResizeInProgress] `
560
560
- actual CPU shares = 1536
@@ -563,7 +563,7 @@ This is intentionally hitting various edge-cases for demonstration.
563
563
- kubelet decides this is feasible, but currently insufficient available resources
564
564
- ` spec.containers[0].resources.requests[cpu] ` = 2
565
565
- ` status.containerStatuses[0].allocatedResources[cpu] ` = 1.5
566
- - ` acknowledged [cpu]` = 1.5
566
+ - ` actuated [cpu]` = 1.5
567
567
- ` status.containerStatuses[0].resources.requests[cpu] ` = 1.5
568
568
- ` status.conditions[type==PodResizePending].type ` = ` "Deferred" `
569
569
- ` status.conditions[type==PodResizeInProgress] ` removed
@@ -573,15 +573,15 @@ This is intentionally hitting various edge-cases for demonstration.
573
573
- apiserver validates the request and accepts the operation
574
574
- ` spec.containers[0].resources.requests[cpu] ` = 1.6
575
575
- ` status.containerStatuses[0].allocatedResources[cpu] ` = 1.5
576
- - ` acknowledged [cpu]` = 1.5
576
+ - ` actuated [cpu]` = 1.5
577
577
- ` status.containerStatuses[0].resources.requests[cpu] ` = 1.5
578
578
- ` status.conditions[type==PodResizePending].type ` = ` "Deferred" `
579
579
- actual CPU shares = 1536
580
580
581
581
1 . Kubelet syncs the pod, and sees resize #3 and admits it
582
582
- ` spec.containers[0].resources.requests[cpu] ` = 1.6
583
583
- ` status.containerStatuses[0].allocatedResources[cpu] ` = 1.6
584
- - ` acknowledged [cpu]` = 1.5
584
+ - ` actuated [cpu]` = 1.5
585
585
- ` status.containerStatuses[0].resources.requests[cpu] ` = 1.5
586
586
- ` status.conditions[type==PodResizePending] ` removed
587
587
- ` status.conditions[type==PodResizeInProgress] ` added
@@ -590,15 +590,15 @@ This is intentionally hitting various edge-cases for demonstration.
590
590
1 . Container runtime applied cpu=1.6
591
591
- ` spec.containers[0].resources.requests[cpu] ` = 1.6
592
592
- ` status.containerStatuses[0].allocatedResources[cpu] ` = 1.6
593
- - ` acknowledged [cpu]` = 1.6
593
+ - ` actuated [cpu]` = 1.6
594
594
- ` status.containerStatuses[0].resources.requests[cpu] ` = 1.5
595
595
- ` status.conditions[type==PodResizeInProgress] `
596
596
- actual CPU shares = 1638
597
597
598
598
1 . Kubelet syncs the pod
599
599
- ` spec.containers[0].resources.requests[cpu] ` = 1.6
600
600
- ` status.containerStatuses[0].allocatedResources[cpu] ` = 1.6
601
- - ` acknowledged [cpu]` = 1.6
601
+ - ` actuated [cpu]` = 1.6
602
602
- ` status.containerStatuses[0].resources.requests[cpu] ` = 1.6
603
603
- ` status.conditions[type==PodResizeInProgress] ` removed
604
604
- actual CPU shares = 1638
@@ -607,15 +607,15 @@ This is intentionally hitting various edge-cases for demonstration.
607
607
- apiserver validates the request and accepts the operation
608
608
- ` spec.containers[0].resources.requests[cpu] ` = 100
609
609
- ` status.containerStatuses[0].allocatedResources[cpu] ` = 1.6
610
- - ` acknowledged [cpu]` = 1.6
610
+ - ` actuated [cpu]` = 1.6
611
611
- ` status.containerStatuses[0].resources.requests[cpu] ` = 1.6
612
612
- actual CPU shares = 1638
613
613
614
614
1 . Kubelet syncs the pod, and sees resize #4
615
615
- this node does not have 100 CPUs, so kubelet cannot admit it
616
616
- ` spec.containers[0].resources.requests[cpu] ` = 100
617
617
- ` status.containerStatuses[0].allocatedResources[cpu] ` = 1.6
618
- - ` acknowledged [cpu]` = 1.6
618
+ - ` actuated [cpu]` = 1.6
619
619
- ` status.containerStatuses[0].resources.requests[cpu] ` = 1.6
620
620
- ` status.conditions[type==PodResizePending].type ` = ` "Infeasible" `
621
621
- actual CPU shares = 1638
@@ -708,7 +708,7 @@ Impacts of a restart outside of resource configuration are out of scope.
708
708
- Restart before checkpointing: pod goes through admission again as if new
709
709
- Restart after checkpointing: pod goes through admission using the allocated resources
710
710
1 . Kubelet creates a container
711
- - Resources acknowledged after CreateContainer call succeeds
711
+ - Resources actuated after CreateContainer call succeeds
712
712
- Restart before acknowledgement: Kubelet issues a superfluous UpdatePodResources request
713
713
- Restart after acknowledgement: No resize needed
714
714
1 . Container starts, triggering a pod sync event
@@ -724,17 +724,17 @@ Impacts of a restart outside of resource configuration are out of scope.
724
724
- Restart: redo admission check, still deferred.
725
725
- Yes: add ` PodResizeInProgress ` condition, update allocated checkpoint
726
726
- Restart before update: readmit, then update allocated
727
- - Restart after update: allocated != acknowledged --> proceed with resize
728
- 1 . Allocated != Acknowledged
729
- - Trigger an ` UpdateContainerResources ` CRI call, then update Acknowledged resources on success
730
- - Restart before CRI call: allocated != acknowledged , will still trigger the update call
731
- - Restart after CRI call, before acknowledged update: will redo update call
732
- - Restart after acknowledged update: allocated == acknowledged , condition removed
727
+ - Restart after update: allocated != actuated --> proceed with resize
728
+ 1 . Allocated != Actuated
729
+ - Trigger an ` UpdateContainerResources ` CRI call, then update Actuated resources on success
730
+ - Restart before CRI call: allocated != actuated , will still trigger the update call
731
+ - Restart after CRI call, before actuated update: will redo update call
732
+ - Restart after actuated update: allocated == actuated , condition removed
733
733
- In all restart cases, ` LastTransitionTime ` is propagated from the old pod status ` PodResizeInProgress `
734
734
condition, and remains unchanged.
735
735
1 . PLEG updates PodStatus cache, triggers pod sync
736
736
- Pod status updated with actual resources, ` PodResizeInProgress ` condition removed
737
- - Desired == Allocated == Acknowledged , no resize changes needed.
737
+ - Desired == Allocated == Actuated , no resize changes needed.
738
738
739
739
#### Notes
740
740
@@ -794,10 +794,10 @@ a pod or container. Examples include:
794
794
Therefore the Kubelet cannot reliably compare desired & actual resources to know whether to trigger
795
795
a resize (a level-triggered approach).
796
796
797
- To accommodate this, the Kubelet stores the set of "acknowledged " resources per container.
798
- Acknowledged resources represent the resource configuration that was passed to the runtime (either
797
+ To accommodate this, the Kubelet stores the set of "actuated " resources per container.
798
+ Actuated resources represent the resource configuration that was passed to the runtime (either
799
799
via a CreateContainer or UpdateContainerResources call) and received a successful response. The
800
- acknowledged resources are checkpointed alongside the allocated resources to persist across
800
+ actuated resources are checkpointed alongside the allocated resources to persist across
801
801
restarts. There is the possibility that a poorly timed restart could lead to a resize request being
802
802
repeated, so ` UpdateContainerResources ` must be idempotent.
803
803
@@ -1538,7 +1538,7 @@ _This section must be completed when targeting beta graduation to a release._
1538
1538
- Rename ResizeRestartPolicy ` NotRequired ` to ` PreferNoRestart ` ,
1539
1539
and update CRI ` UpdateContainerResources ` contract
1540
1540
- Add back ` AllocatedResources ` field to resolve a scheduler corner case
1541
- - Introduce Acknowledged resources for actuation
1541
+ - Introduce Actuated resources for actuation
1542
1542
1543
1543
## Drawbacks
1544
1544
0 commit comments