mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-11 04:52:08 +00:00
Fix ResizeStatus state transitions
This commit is contained in:
parent
04aeb40793
commit
84201658c3
@ -115,6 +115,7 @@ import (
|
||||
kubetypes "k8s.io/kubernetes/pkg/kubelet/types"
|
||||
"k8s.io/kubernetes/pkg/kubelet/userns"
|
||||
"k8s.io/kubernetes/pkg/kubelet/util"
|
||||
"k8s.io/kubernetes/pkg/kubelet/util/format"
|
||||
"k8s.io/kubernetes/pkg/kubelet/util/manager"
|
||||
"k8s.io/kubernetes/pkg/kubelet/util/queue"
|
||||
"k8s.io/kubernetes/pkg/kubelet/util/sliceutils"
|
||||
@ -2813,6 +2814,14 @@ func (kl *Kubelet) canResizePod(pod *v1.Pod) (bool, v1.PodResizeStatus) {
|
||||
func (kl *Kubelet) handlePodResourcesResize(pod *v1.Pod) (*v1.Pod, error) {
|
||||
allocatedPod, updated := kl.statusManager.UpdatePodFromAllocation(pod)
|
||||
if !updated {
|
||||
// Unless a resize is in-progress, clear the resize status.
|
||||
resizeStatus, _ := kl.statusManager.GetPodResizeStatus(string(pod.UID))
|
||||
if resizeStatus != v1.PodResizeStatusInProgress {
|
||||
if err := kl.statusManager.SetPodResizeStatus(pod.UID, ""); err != nil {
|
||||
klog.ErrorS(err, "Failed to clear resize status", "pod", format.Pod(pod))
|
||||
}
|
||||
}
|
||||
|
||||
// Pod is not resizing, nothing more to do here.
|
||||
return allocatedPod, nil
|
||||
}
|
||||
|
@ -60,6 +60,7 @@ import (
|
||||
"k8s.io/kubernetes/pkg/kubelet/metrics"
|
||||
"k8s.io/kubernetes/pkg/kubelet/status"
|
||||
kubetypes "k8s.io/kubernetes/pkg/kubelet/types"
|
||||
"k8s.io/kubernetes/pkg/kubelet/util/format"
|
||||
utilfs "k8s.io/kubernetes/pkg/util/filesystem"
|
||||
utilkernel "k8s.io/kubernetes/pkg/util/kernel"
|
||||
utilpod "k8s.io/kubernetes/pkg/util/pod"
|
||||
@ -1740,19 +1741,30 @@ func getPhase(pod *v1.Pod, info []v1.ContainerStatus, podIsTerminal bool) v1.Pod
|
||||
}
|
||||
}
|
||||
|
||||
func (kl *Kubelet) determinePodResizeStatus(allocatedPod *v1.Pod, podStatus *kubecontainer.PodStatus) v1.PodResizeStatus {
|
||||
var podResizeStatus v1.PodResizeStatus
|
||||
if allocatedResourcesMatchStatus(allocatedPod, podStatus) {
|
||||
// Clear last resize state from checkpoint
|
||||
if err := kl.statusManager.SetPodResizeStatus(allocatedPod.UID, ""); err != nil {
|
||||
klog.ErrorS(err, "SetPodResizeStatus failed", "pod", allocatedPod.Name)
|
||||
}
|
||||
} else {
|
||||
if resizeStatus, found := kl.statusManager.GetPodResizeStatus(string(allocatedPod.UID)); found {
|
||||
podResizeStatus = resizeStatus
|
||||
}
|
||||
func (kl *Kubelet) determinePodResizeStatus(allocatedPod *v1.Pod, podStatus *kubecontainer.PodStatus, podIsTerminal bool) v1.PodResizeStatus {
|
||||
if kubetypes.IsStaticPod(allocatedPod) {
|
||||
return ""
|
||||
}
|
||||
return podResizeStatus
|
||||
|
||||
// If pod is terminal, clear the resize status.
|
||||
if podIsTerminal {
|
||||
if err := kl.statusManager.SetPodResizeStatus(allocatedPod.UID, ""); err != nil {
|
||||
klog.ErrorS(err, "SetPodResizeStatus failed for terminal pod", "pod", format.Pod(allocatedPod))
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
resizeStatus, _ := kl.statusManager.GetPodResizeStatus(string(allocatedPod.UID))
|
||||
// If the resize was in-progress and the actual resources match the allocated resources, mark
|
||||
// the resize as complete by clearing the resize status.
|
||||
if resizeStatus == v1.PodResizeStatusInProgress &&
|
||||
allocatedResourcesMatchStatus(allocatedPod, podStatus) {
|
||||
if err := kl.statusManager.SetPodResizeStatus(allocatedPod.UID, ""); err != nil {
|
||||
klog.ErrorS(err, "SetPodResizeStatus failed", "pod", format.Pod(allocatedPod))
|
||||
}
|
||||
return ""
|
||||
}
|
||||
return resizeStatus
|
||||
}
|
||||
|
||||
// allocatedResourcesMatchStatus tests whether the resizeable resources in the pod spec match the
|
||||
@ -1798,7 +1810,7 @@ func (kl *Kubelet) generateAPIPodStatus(pod *v1.Pod, podStatus *kubecontainer.Po
|
||||
}
|
||||
s := kl.convertStatusToAPIStatus(pod, podStatus, oldPodStatus)
|
||||
if utilfeature.DefaultFeatureGate.Enabled(features.InPlacePodVerticalScaling) {
|
||||
s.Resize = kl.determinePodResizeStatus(pod, podStatus)
|
||||
s.Resize = kl.determinePodResizeStatus(pod, podStatus, podIsTerminal)
|
||||
}
|
||||
// calculate the next phase and preserve reason
|
||||
allStatus := append(append([]v1.ContainerStatus{}, s.ContainerStatuses...), s.InitContainerStatuses...)
|
||||
|
Loading…
Reference in New Issue
Block a user