Merge pull request #138030 from askervin/5gH-kubelet-fix-nodeAllocatableResourceClaimStatuses

kubelet: do not destroy nodeAllocatableResourceClaimStatuses
This commit is contained in:
Kubernetes Prow Robot
2026-04-01 07:12:12 +05:30
committed by GitHub
2 changed files with 14 additions and 1 deletions

View File

@@ -224,7 +224,8 @@ func NewManager(kubeClient clientset.Interface, podManager PodManager, podDeleti
// isPodStatusByKubeletEqual returns true if the given pod statuses are equal, ignoring
// fields not managed by the kubelet (including non-kubelet-owned pod conditions,
// ResourceClaimStatuses, and ExtendedResourceClaimStatus). Statuses are assumed to be
// ResourceClaimStatuses, ExtendedResourceClaimStatus, and
// NodeAllocatableResourceClaimStatuses). Statuses are assumed to be
// normalized before calling this function.
func isPodStatusByKubeletEqual(oldStatus, status *v1.PodStatus) bool {
oldCopy := oldStatus.DeepCopy()
@@ -257,6 +258,8 @@ func isPodStatusByKubeletEqual(oldStatus, status *v1.PodStatus) bool {
oldCopy.ResourceClaimStatuses = status.ResourceClaimStatuses
// ExtendedResourceClaimStatus is not owned and not modified by kubelet.
oldCopy.ExtendedResourceClaimStatus = status.ExtendedResourceClaimStatus
// NodeAllocatableResourceClaimStatuses is not owned and not modified by kubelet.
oldCopy.NodeAllocatableResourceClaimStatuses = status.NodeAllocatableResourceClaimStatuses
return apiequality.Semantic.DeepEqual(oldCopy, status)
}
@@ -1393,6 +1396,8 @@ func mergePodStatus(pod *v1.Pod, oldPodStatus, newPodStatus v1.PodStatus, couldH
newPodStatus.ResourceClaimStatuses = oldPodStatus.ResourceClaimStatuses
// ExtendedResourceClaimStatus is not owned and not modified by kubelet.
newPodStatus.ExtendedResourceClaimStatus = oldPodStatus.ExtendedResourceClaimStatus
// NodeAllocatableResourceClaimStatuses is not owned and not modified by kubelet.
newPodStatus.NodeAllocatableResourceClaimStatuses = oldPodStatus.NodeAllocatableResourceClaimStatuses
// Delay transitioning a pod to a terminal status unless the pod is actually terminal.
// The Kubelet should never transition a pod to terminal status that could have running

View File

@@ -33,6 +33,7 @@ import (
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
@@ -525,6 +526,13 @@ func TestStatusEquality(t *testing.T) {
}
oldPodStatus.ResourceClaimStatuses = []v1.PodResourceClaimStatus{claimStatusA}
oldPodStatus.ExtendedResourceClaimStatus = extendedClaimStatusA
oldPodStatus.NodeAllocatableResourceClaimStatuses = []v1.NodeAllocatableResourceClaimStatus{
{
ResourceClaimName: "my-claim",
Containers: []string{"ctr0"},
Resources: map[v1.ResourceName]resource.Quantity{v1.ResourceMemory: resource.MustParse("100Mi")},
},
}
normalizeStatus(&pod, &oldPodStatus)
normalizeStatus(&pod, &podStatus)