check sidecar featuregate in getFinishedTime

This commit is contained in:
AxeZhan 2024-05-30 10:27:42 +08:00
parent 3a2a500182
commit d97282052e
2 changed files with 19 additions and 10 deletions

View File

@ -23,9 +23,11 @@ import (
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/util/sets"
utilfeature "k8s.io/apiserver/pkg/util/feature"
"k8s.io/client-go/tools/cache"
"k8s.io/klog/v2"
apipod "k8s.io/kubernetes/pkg/api/v1/pod"
"k8s.io/kubernetes/pkg/features"
"k8s.io/utils/clock"
"k8s.io/utils/ptr"
)
@ -185,18 +187,21 @@ func getFinishedTime(p *v1.Pod) time.Time {
func getFinishTimeFromContainers(p *v1.Pod) *time.Time {
finishTime := latestFinishTime(nil, p.Status.ContainerStatuses, nil)
// We need to check InitContainerStatuses here also,
// because with the sidecar (restartable init) containers,
// sidecar containers will always finish later than regular containers.
names := sets.New[string]()
for _, c := range p.Spec.InitContainers {
if c.RestartPolicy != nil && *c.RestartPolicy == v1.ContainerRestartPolicyAlways {
names.Insert(c.Name)
if utilfeature.DefaultFeatureGate.Enabled(features.SidecarContainers) {
// We need to check InitContainerStatuses here also,
// because with the sidecar (restartable init) containers,
// sidecar containers will always finish later than regular containers.
names := sets.New[string]()
for _, c := range p.Spec.InitContainers {
if c.RestartPolicy != nil && *c.RestartPolicy == v1.ContainerRestartPolicyAlways {
names.Insert(c.Name)
}
}
finishTime = latestFinishTime(finishTime, p.Status.InitContainerStatuses, func(status v1.ContainerStatus) bool {
return names.Has(status.Name)
})
}
return latestFinishTime(finishTime, p.Status.InitContainerStatuses, func(status v1.ContainerStatus) bool {
return names.Has(status.Name)
})
return finishTime
}
func latestFinishTime(prevFinishTime *time.Time, cs []v1.ContainerStatus, check func(status v1.ContainerStatus) bool) *time.Time {

View File

@ -23,7 +23,10 @@ import (
"github.com/google/go-cmp/cmp"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
utilfeature "k8s.io/apiserver/pkg/util/feature"
featuregatetesting "k8s.io/component-base/featuregate/testing"
"k8s.io/klog/v2/ktesting"
"k8s.io/kubernetes/pkg/features"
clocktesting "k8s.io/utils/clock/testing"
"k8s.io/utils/ptr"
)
@ -200,6 +203,7 @@ func TestNewBackoffRecord(t *testing.T) {
}
func TestGetFinishedTime(t *testing.T) {
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.SidecarContainers, true)
defaultTestTime := time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC)
defaultTestTimeMinus30s := defaultTestTime.Add(-30 * time.Second)
containerRestartPolicyAlways := v1.ContainerRestartPolicyAlways