@@ -227,7 +227,7 @@ func (m *kubeGenericRuntimeManager) startContainer(podSandboxID string, podSandb
227
227
msg , handlerErr := m .runner .Run (kubeContainerID , pod , container , container .Lifecycle .PostStart )
228
228
if handlerErr != nil {
229
229
m .recordContainerEvent (pod , container , kubeContainerID .ID , v1 .EventTypeWarning , events .FailedPostStartHook , msg )
230
- if err := m .killContainer (pod , kubeContainerID , container .Name , "FailedPostStartHook" , nil ); err != nil {
230
+ if err := m .killContainer (pod , kubeContainerID , container .Name , "FailedPostStartHook" , reasonFailedPostStartHook , nil ); err != nil {
231
231
klog .ErrorS (fmt .Errorf ("%s: %v" , ErrPostStartHook , handlerErr ), "Failed to kill container" , "pod" , klog .KObj (pod ),
232
232
"podUID" , pod .UID , "containerName" , container .Name , "containerID" , kubeContainerID .String ())
233
233
}
@@ -596,7 +596,7 @@ func (m *kubeGenericRuntimeManager) restoreSpecsFromContainerLabels(containerID
596
596
// killContainer kills a container through the following steps:
597
597
// * Run the pre-stop lifecycle hooks (if applicable).
598
598
// * Stop the container.
599
- func (m * kubeGenericRuntimeManager ) killContainer (pod * v1.Pod , containerID kubecontainer.ContainerID , containerName string , message string , gracePeriodOverride * int64 ) error {
599
+ func (m * kubeGenericRuntimeManager ) killContainer (pod * v1.Pod , containerID kubecontainer.ContainerID , containerName string , message string , reason containerKillReason , gracePeriodOverride * int64 ) error {
600
600
var containerSpec * v1.Container
601
601
if pod != nil {
602
602
if containerSpec = kubecontainer .GetContainerSpec (pod , containerName ); containerSpec == nil {
@@ -619,6 +619,19 @@ func (m *kubeGenericRuntimeManager) killContainer(pod *v1.Pod, containerID kubec
619
619
gracePeriod = * pod .DeletionGracePeriodSeconds
620
620
case pod .Spec .TerminationGracePeriodSeconds != nil :
621
621
gracePeriod = * pod .Spec .TerminationGracePeriodSeconds
622
+
623
+ if utilfeature .DefaultFeatureGate .Enabled (features .ProbeTerminationGracePeriod ) {
624
+ switch reason {
625
+ case reasonStartupProbe :
626
+ if containerSpec .StartupProbe != nil && containerSpec .StartupProbe .TerminationGracePeriodSeconds != nil {
627
+ gracePeriod = * containerSpec .StartupProbe .TerminationGracePeriodSeconds
628
+ }
629
+ case reasonLivenessProbe :
630
+ if containerSpec .LivenessProbe != nil && containerSpec .LivenessProbe .TerminationGracePeriodSeconds != nil {
631
+ gracePeriod = * containerSpec .LivenessProbe .TerminationGracePeriodSeconds
632
+ }
633
+ }
634
+ }
622
635
}
623
636
624
637
if len (message ) == 0 {
@@ -672,7 +685,7 @@ func (m *kubeGenericRuntimeManager) killContainersWithSyncResult(pod *v1.Pod, ru
672
685
defer wg .Done ()
673
686
674
687
killContainerResult := kubecontainer .NewSyncResult (kubecontainer .KillContainer , container .Name )
675
- if err := m .killContainer (pod , container .ID , container .Name , "" , gracePeriodOverride ); err != nil {
688
+ if err := m .killContainer (pod , container .ID , container .Name , "" , reasonUnknown , gracePeriodOverride ); err != nil {
676
689
killContainerResult .Fail (kubecontainer .ErrKillContainer , err .Error ())
677
690
klog .ErrorS (err , "Kill container failed" , "pod" , klog .KObj (pod ), "podUID" , pod .UID ,
678
691
"containerName" , container .Name , "containerID" , container .ID )
0 commit comments