mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-09-02 01:39:02 +00:00
fix grace period set for force pod deletion
Signed-off-by: Olga Shestopalova <oshestopalova1@gmail.com>
This commit is contained in:
@@ -979,10 +979,12 @@ func calculateEffectiveGracePeriod(status *podSyncStatus, pod *v1.Pod, options *
|
|||||||
// enforce the restriction that a grace period can only decrease and track whatever our value is,
|
// enforce the restriction that a grace period can only decrease and track whatever our value is,
|
||||||
// then ensure a calculated value is passed down to lower levels
|
// then ensure a calculated value is passed down to lower levels
|
||||||
gracePeriod := status.gracePeriod
|
gracePeriod := status.gracePeriod
|
||||||
|
overridden := false
|
||||||
// this value is bedrock truth - the apiserver owns telling us this value calculated by apiserver
|
// this value is bedrock truth - the apiserver owns telling us this value calculated by apiserver
|
||||||
if override := pod.DeletionGracePeriodSeconds; override != nil {
|
if override := pod.DeletionGracePeriodSeconds; override != nil {
|
||||||
if gracePeriod == 0 || *override < gracePeriod {
|
if gracePeriod == 0 || *override < gracePeriod {
|
||||||
gracePeriod = *override
|
gracePeriod = *override
|
||||||
|
overridden = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// we allow other parts of the kubelet (namely eviction) to request this pod be terminated faster
|
// we allow other parts of the kubelet (namely eviction) to request this pod be terminated faster
|
||||||
@@ -990,12 +992,13 @@ func calculateEffectiveGracePeriod(status *podSyncStatus, pod *v1.Pod, options *
|
|||||||
if override := options.PodTerminationGracePeriodSecondsOverride; override != nil {
|
if override := options.PodTerminationGracePeriodSecondsOverride; override != nil {
|
||||||
if gracePeriod == 0 || *override < gracePeriod {
|
if gracePeriod == 0 || *override < gracePeriod {
|
||||||
gracePeriod = *override
|
gracePeriod = *override
|
||||||
|
overridden = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// make a best effort to default this value to the pod's desired intent, in the event
|
// make a best effort to default this value to the pod's desired intent, in the event
|
||||||
// the kubelet provided no requested value (graceful termination?)
|
// the kubelet provided no requested value (graceful termination?)
|
||||||
if gracePeriod == 0 && pod.Spec.TerminationGracePeriodSeconds != nil {
|
if !overridden && gracePeriod == 0 && pod.Spec.TerminationGracePeriodSeconds != nil {
|
||||||
gracePeriod = *pod.Spec.TerminationGracePeriodSeconds
|
gracePeriod = *pod.Spec.TerminationGracePeriodSeconds
|
||||||
}
|
}
|
||||||
// no matter what, we always supply a grace period of 1
|
// no matter what, we always supply a grace period of 1
|
||||||
|
@@ -2382,3 +2382,52 @@ func Test_allowPodStart(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Test_calculateEffectiveGracePeriod(t *testing.T) {
|
||||||
|
zero := int64(0)
|
||||||
|
two := int64(2)
|
||||||
|
five := int64(5)
|
||||||
|
thirty := int64(30)
|
||||||
|
// no overrides, use what's on the spec
|
||||||
|
pod := newNamedPod("1", "ns", "running-pod", false)
|
||||||
|
pod.Spec.TerminationGracePeriodSeconds = &thirty
|
||||||
|
gracePeriod, _ := calculateEffectiveGracePeriod(&podSyncStatus{}, pod, &KillPodOptions{})
|
||||||
|
expectedGracePeriod := int64(30)
|
||||||
|
if gracePeriod != expectedGracePeriod {
|
||||||
|
t.Errorf("Expected a grace period of %v, but was %v", expectedGracePeriod, gracePeriod)
|
||||||
|
}
|
||||||
|
|
||||||
|
// pod DeletionGracePeriodSeconds is set
|
||||||
|
pod.DeletionGracePeriodSeconds = &five
|
||||||
|
gracePeriod, _ = calculateEffectiveGracePeriod(&podSyncStatus{}, pod, &KillPodOptions{})
|
||||||
|
expectedGracePeriod = five
|
||||||
|
if gracePeriod != expectedGracePeriod {
|
||||||
|
t.Errorf("Expected a grace period of %v, but was %v", expectedGracePeriod, gracePeriod)
|
||||||
|
}
|
||||||
|
|
||||||
|
// grace period override
|
||||||
|
gracePeriod, _ = calculateEffectiveGracePeriod(&podSyncStatus{}, pod, &KillPodOptions{
|
||||||
|
PodTerminationGracePeriodSecondsOverride: &two,
|
||||||
|
})
|
||||||
|
expectedGracePeriod = two
|
||||||
|
if gracePeriod != expectedGracePeriod {
|
||||||
|
t.Errorf("Expected a grace period of %v, but was %v", expectedGracePeriod, gracePeriod)
|
||||||
|
}
|
||||||
|
|
||||||
|
// pod DeletionGracePeriodSeconds is zero
|
||||||
|
pod.DeletionGracePeriodSeconds = &zero
|
||||||
|
gracePeriod, _ = calculateEffectiveGracePeriod(&podSyncStatus{}, pod, &KillPodOptions{})
|
||||||
|
expectedGracePeriod = int64(1)
|
||||||
|
if gracePeriod != expectedGracePeriod {
|
||||||
|
t.Errorf("Expected a grace period of %v, but was %v", expectedGracePeriod, gracePeriod)
|
||||||
|
}
|
||||||
|
|
||||||
|
// grace period override is zero
|
||||||
|
gracePeriod, _ = calculateEffectiveGracePeriod(&podSyncStatus{}, pod, &KillPodOptions{
|
||||||
|
PodTerminationGracePeriodSecondsOverride: &zero,
|
||||||
|
})
|
||||||
|
expectedGracePeriod = int64(1)
|
||||||
|
if gracePeriod != expectedGracePeriod {
|
||||||
|
t.Errorf("Expected a grace period of %v, but was %v", expectedGracePeriod, gracePeriod)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user