mirror of
https://github.com/kubernetes/kubernetes.git
synced 2026-06-09 00:34:10 -04:00
Merge pull request #137755 from HirazawaUi/remove-SidecarContainers-feature-gate
Remove SidecarContainers feature gate
This commit is contained in:
commit
b36864202b
14 changed files with 50 additions and 257 deletions
|
|
@ -775,14 +775,6 @@ func dropDisabledFields(
|
|||
}
|
||||
}
|
||||
|
||||
if !utilfeature.DefaultFeatureGate.Enabled(features.SidecarContainers) && !restartableInitContainersInUse(oldPodSpec) {
|
||||
// Drop the RestartPolicy field of init containers.
|
||||
for i := range podSpec.InitContainers {
|
||||
podSpec.InitContainers[i].RestartPolicy = nil
|
||||
}
|
||||
// For other types of containers, validateContainers will handle them.
|
||||
}
|
||||
|
||||
if !utilfeature.DefaultFeatureGate.Enabled(features.ContainerRestartRules) && !containerRestartRulesInUse(oldPodSpec) {
|
||||
dropContainerRestartRules(podSpec)
|
||||
}
|
||||
|
|
@ -1480,23 +1472,6 @@ func procMountInUse(podSpec *api.PodSpec) bool {
|
|||
return inUse
|
||||
}
|
||||
|
||||
// restartableInitContainersInUse returns true if the pod spec is non-nil and
|
||||
// it has any init container with ContainerRestartPolicyAlways.
|
||||
func restartableInitContainersInUse(podSpec *api.PodSpec) bool {
|
||||
if podSpec == nil {
|
||||
return false
|
||||
}
|
||||
var inUse bool
|
||||
VisitContainers(podSpec, InitContainers, func(c *api.Container, containerType ContainerType) bool {
|
||||
if c.RestartPolicy != nil && *c.RestartPolicy == api.ContainerRestartPolicyAlways {
|
||||
inUse = true
|
||||
return false
|
||||
}
|
||||
return true
|
||||
})
|
||||
return inUse
|
||||
}
|
||||
|
||||
func clusterTrustBundleProjectionInUse(podSpec *api.PodSpec) bool {
|
||||
if podSpec == nil {
|
||||
return false
|
||||
|
|
|
|||
|
|
@ -3276,113 +3276,6 @@ func TestDropPodLevelResources(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestDropSidecarContainers(t *testing.T) {
|
||||
containerRestartPolicyAlways := api.ContainerRestartPolicyAlways
|
||||
|
||||
podWithSidecarContainers := func() *api.Pod {
|
||||
return &api.Pod{
|
||||
Spec: api.PodSpec{
|
||||
InitContainers: []api.Container{
|
||||
{
|
||||
Name: "c1",
|
||||
Image: "image",
|
||||
RestartPolicy: &containerRestartPolicyAlways,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
podWithoutSidecarContainers := func() *api.Pod {
|
||||
return &api.Pod{
|
||||
Spec: api.PodSpec{
|
||||
InitContainers: []api.Container{
|
||||
{
|
||||
Name: "c1",
|
||||
Image: "image",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
podInfo := []struct {
|
||||
description string
|
||||
hasSidecarContainer bool
|
||||
pod func() *api.Pod
|
||||
}{
|
||||
{
|
||||
description: "has a sidecar container",
|
||||
hasSidecarContainer: true,
|
||||
pod: podWithSidecarContainers,
|
||||
},
|
||||
{
|
||||
description: "does not have a sidecar container",
|
||||
hasSidecarContainer: false,
|
||||
pod: podWithoutSidecarContainers,
|
||||
},
|
||||
{
|
||||
description: "is nil",
|
||||
hasSidecarContainer: false,
|
||||
pod: func() *api.Pod { return nil },
|
||||
},
|
||||
}
|
||||
|
||||
for _, enabled := range []bool{true, false} {
|
||||
for _, oldPodInfo := range podInfo {
|
||||
for _, newPodInfo := range podInfo {
|
||||
oldPodHasSidecarContainer, oldPod := oldPodInfo.hasSidecarContainer, oldPodInfo.pod()
|
||||
newPodHasSidecarContainer, newPod := newPodInfo.hasSidecarContainer, newPodInfo.pod()
|
||||
if newPod == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
t.Run(fmt.Sprintf("feature enabled=%v, old pod %v, new pod %v", enabled, oldPodInfo.description, newPodInfo.description), func(t *testing.T) {
|
||||
if !enabled {
|
||||
// TODO: Remove this in v1.36
|
||||
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.32"))
|
||||
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.SidecarContainers, false)
|
||||
}
|
||||
|
||||
var oldPodSpec *api.PodSpec
|
||||
if oldPod != nil {
|
||||
oldPodSpec = &oldPod.Spec
|
||||
}
|
||||
dropDisabledFields(&newPod.Spec, nil, oldPodSpec, nil)
|
||||
|
||||
// old pod should never be changed
|
||||
if !reflect.DeepEqual(oldPod, oldPodInfo.pod()) {
|
||||
t.Errorf("old pod changed: %v", cmp.Diff(oldPod, oldPodInfo.pod()))
|
||||
}
|
||||
|
||||
switch {
|
||||
case enabled || oldPodHasSidecarContainer:
|
||||
// new pod shouldn't change if feature enabled or if old pod has
|
||||
// any sidecar container
|
||||
if !reflect.DeepEqual(newPod, newPodInfo.pod()) {
|
||||
t.Errorf("new pod changed: %v", cmp.Diff(newPod, newPodInfo.pod()))
|
||||
}
|
||||
case newPodHasSidecarContainer:
|
||||
// new pod should be changed
|
||||
if reflect.DeepEqual(newPod, newPodInfo.pod()) {
|
||||
t.Errorf("new pod was not changed")
|
||||
}
|
||||
// new pod should not have any sidecar container
|
||||
if !reflect.DeepEqual(newPod, podWithoutSidecarContainers()) {
|
||||
t.Errorf("new pod has a sidecar container: %v", cmp.Diff(newPod, podWithoutSidecarContainers()))
|
||||
}
|
||||
default:
|
||||
// new pod should not need to be changed
|
||||
if !reflect.DeepEqual(newPod, newPodInfo.pod()) {
|
||||
t.Errorf("new pod changed: %v", cmp.Diff(newPod, newPodInfo.pod()))
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestDropClusterTrustBundleProjectedVolumes(t *testing.T) {
|
||||
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ClusterTrustBundle, true)
|
||||
|
||||
|
|
|
|||
|
|
@ -6408,39 +6408,37 @@ func ValidatePodResize(newPod, oldPod *core.Pod, opts PodValidationOptions) fiel
|
|||
|
||||
// Ensure that only CPU and memory resources are mutable for restartable init containers.
|
||||
var newInitContainers []core.Container
|
||||
if utilfeature.DefaultFeatureGate.Enabled(features.SidecarContainers) {
|
||||
for ix, container := range newPodSpecCopy.InitContainers {
|
||||
isRestartable := isRestartableInitContainer(&container)
|
||||
canResize := isRestartable || utilfeature.DefaultFeatureGate.Enabled(features.InPlacePodVerticalScalingInitContainers)
|
||||
modifiedContainer := !apiequality.Semantic.DeepEqual(container, oldPod.Spec.InitContainers[ix])
|
||||
for ix, container := range newPodSpecCopy.InitContainers {
|
||||
isRestartable := isRestartableInitContainer(&container)
|
||||
canResize := isRestartable || utilfeature.DefaultFeatureGate.Enabled(features.InPlacePodVerticalScalingInitContainers)
|
||||
modifiedContainer := !apiequality.Semantic.DeepEqual(container, oldPod.Spec.InitContainers[ix])
|
||||
|
||||
if canResize {
|
||||
dropCPUMemoryResourcesFromContainer(&container, &oldPod.Spec.InitContainers[ix])
|
||||
if !apiequality.Semantic.DeepEqual(container, oldPod.Spec.InitContainers[ix]) {
|
||||
// This likely means that the user has made changes to resources other than CPU and memory for sidecar container.
|
||||
errs := field.Forbidden(specPath.Child("initContainers").Index(ix), "only cpu and memory resources for init or sidecar containers are mutable")
|
||||
allErrs = append(allErrs, errs)
|
||||
}
|
||||
if modifiedContainer && !isRestartable {
|
||||
for _, resizePolicy := range container.ResizePolicy {
|
||||
if resizePolicy.RestartPolicy == core.RestartContainer {
|
||||
// TODO: This validation check can eventually be removed in 1.40,
|
||||
// as https://github.com/kubernetes/kubernetes/pull/137458 prohibits
|
||||
// the ability to set RestartContainer resize policy for non-sidecar init containers.
|
||||
errs := field.Forbidden(specPath.Child("initContainers").Index(ix), "non-sidecar init containers with a resize policy of RestartContainer cannot be resized")
|
||||
allErrs = append(allErrs, errs)
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if modifiedContainer { // modified non-resizable init container
|
||||
// This likely means that the user has modified resources of non-sidecar init container.
|
||||
errs := field.Forbidden(specPath, "resources for non-sidecar init containers are immutable")
|
||||
if canResize {
|
||||
dropCPUMemoryResourcesFromContainer(&container, &oldPod.Spec.InitContainers[ix])
|
||||
if !apiequality.Semantic.DeepEqual(container, oldPod.Spec.InitContainers[ix]) {
|
||||
// This likely means that the user has made changes to resources other than CPU and memory for sidecar container.
|
||||
errs := field.Forbidden(specPath.Child("initContainers").Index(ix), "only cpu and memory resources for init or sidecar containers are mutable")
|
||||
allErrs = append(allErrs, errs)
|
||||
}
|
||||
newInitContainers = append(newInitContainers, container)
|
||||
if modifiedContainer && !isRestartable {
|
||||
for _, resizePolicy := range container.ResizePolicy {
|
||||
if resizePolicy.RestartPolicy == core.RestartContainer {
|
||||
// TODO: This validation check can eventually be removed in 1.40,
|
||||
// as https://github.com/kubernetes/kubernetes/pull/137458 prohibits
|
||||
// the ability to set RestartContainer resize policy for non-sidecar init containers.
|
||||
errs := field.Forbidden(specPath.Child("initContainers").Index(ix), "non-sidecar init containers with a resize policy of RestartContainer cannot be resized")
|
||||
allErrs = append(allErrs, errs)
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if modifiedContainer { // modified non-resizable init container
|
||||
// This likely means that the user has modified resources of non-sidecar init container.
|
||||
errs := field.Forbidden(specPath, "resources for non-sidecar init containers are immutable")
|
||||
allErrs = append(allErrs, errs)
|
||||
}
|
||||
newPodSpecCopy.InitContainers = newInitContainers
|
||||
newInitContainers = append(newInitContainers, container)
|
||||
}
|
||||
newPodSpecCopy.InitContainers = newInitContainers
|
||||
|
||||
if len(allErrs) > 0 {
|
||||
return allErrs
|
||||
|
|
|
|||
|
|
@ -23,11 +23,9 @@ 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"
|
||||
)
|
||||
|
|
@ -187,20 +185,19 @@ func getFinishedTime(p *v1.Pod) time.Time {
|
|||
|
||||
func getFinishTimeFromContainers(p *v1.Pod) *time.Time {
|
||||
finishTime := latestFinishTime(nil, p.Status.ContainerStatuses, nil)
|
||||
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)
|
||||
}
|
||||
// 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)
|
||||
})
|
||||
}
|
||||
finishTime = latestFinishTime(finishTime, p.Status.InitContainerStatuses, func(status v1.ContainerStatus) bool {
|
||||
return names.Has(status.Name)
|
||||
})
|
||||
|
||||
return finishTime
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1019,14 +1019,6 @@ const (
|
|||
// When enabled, the apiserver ignores changes to status fields in writes to the ServiceCIDR root resource.
|
||||
ServiceCIDRStatusFieldWiping featuregate.Feature = "ServiceCIDRStatusFieldWiping"
|
||||
|
||||
// owner: @gjkim42 @SergeyKanzhelev @matthyx @tzneal
|
||||
// kep: http://kep.k8s.io/753
|
||||
//
|
||||
// Introduces sidecar containers, a new type of init container that starts
|
||||
// before other containers but remains running for the full duration of the
|
||||
// pod's lifecycle and will not block pod termination.
|
||||
SidecarContainers featuregate.Feature = "SidecarContainers"
|
||||
|
||||
// owner: @michaelasp
|
||||
// kep: http://kep.k8s.io/5647
|
||||
//
|
||||
|
|
@ -1979,12 +1971,6 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
|
|||
{Version: version.MustParse("1.36"), Default: true, PreRelease: featuregate.Deprecated},
|
||||
},
|
||||
|
||||
SidecarContainers: {
|
||||
{Version: version.MustParse("1.28"), Default: false, PreRelease: featuregate.Alpha},
|
||||
{Version: version.MustParse("1.29"), Default: true, PreRelease: featuregate.Beta},
|
||||
{Version: version.MustParse("1.33"), Default: true, LockToDefault: true, PreRelease: featuregate.GA}, // GA in 1.33 remove in 1.36
|
||||
},
|
||||
|
||||
StaleControllerConsistencyDaemonSet: {
|
||||
{Version: version.MustParse("1.36"), Default: true, PreRelease: featuregate.Beta},
|
||||
},
|
||||
|
|
@ -2669,8 +2655,6 @@ var defaultKubernetesFeatureGateDependencies = map[featuregate.Feature][]feature
|
|||
|
||||
ServiceCIDRStatusFieldWiping: {},
|
||||
|
||||
SidecarContainers: {},
|
||||
|
||||
StaleControllerConsistencyDaemonSet: {featuregate.Feature(clientfeatures.AtomicFIFO)},
|
||||
|
||||
StaleControllerConsistencyJob: {featuregate.Feature(clientfeatures.AtomicFIFO)},
|
||||
|
|
|
|||
|
|
@ -384,9 +384,7 @@ func dropNonResizeUpdates(newPod, oldPod *api.Pod) *api.Pod {
|
|||
metav1.ResetObjectMetaForStatus(&newPod.ObjectMeta, &oldPod.ObjectMeta)
|
||||
|
||||
newPod.Spec.Containers = containers
|
||||
if utilfeature.DefaultFeatureGate.Enabled(features.SidecarContainers) {
|
||||
newPod.Spec.InitContainers = initContainers
|
||||
}
|
||||
newPod.Spec.InitContainers = initContainers
|
||||
|
||||
return newPod
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3665,7 +3665,6 @@ func TestPodResizePrepareForUpdate(t *testing.T) {
|
|||
t.Run(tc.name, func(t *testing.T) {
|
||||
featuregatetesting.SetFeatureGatesDuringTest(t, utilfeature.DefaultFeatureGate, featuregatetesting.FeatureOverrides{
|
||||
features.InPlacePodVerticalScaling: true,
|
||||
features.SidecarContainers: true,
|
||||
})
|
||||
ctx := context.Background()
|
||||
ResizeStrategy.PrepareForUpdate(ctx, tc.newPod, tc.oldPod)
|
||||
|
|
|
|||
|
|
@ -43,7 +43,6 @@ type Features struct {
|
|||
EnableNodeInclusionPolicyInPodTopologySpread bool
|
||||
EnableMatchLabelKeysInPodTopologySpread bool
|
||||
EnableInPlacePodVerticalScaling bool
|
||||
EnableSidecarContainers bool
|
||||
EnableSchedulingQueueHint bool
|
||||
EnableAsyncPreemption bool
|
||||
EnablePodLevelResources bool
|
||||
|
|
@ -76,7 +75,6 @@ func NewSchedulerFeaturesFromGates(featureGate featuregate.FeatureGate) Features
|
|||
EnableNodeInclusionPolicyInPodTopologySpread: featureGate.Enabled(features.NodeInclusionPolicyInPodTopologySpread),
|
||||
EnableMatchLabelKeysInPodTopologySpread: featureGate.Enabled(features.MatchLabelKeysInPodTopologySpread),
|
||||
EnableInPlacePodVerticalScaling: featureGate.Enabled(features.InPlacePodVerticalScaling),
|
||||
EnableSidecarContainers: featureGate.Enabled(features.SidecarContainers),
|
||||
EnableSchedulingQueueHint: featureGate.Enabled(features.SchedulerQueueingHints),
|
||||
EnableAsyncPreemption: featureGate.Enabled(features.SchedulerAsyncPreemption),
|
||||
EnablePodLevelResources: featureGate.Enabled(features.PodLevelResources),
|
||||
|
|
|
|||
|
|
@ -94,7 +94,6 @@ type Fit struct {
|
|||
ignoredResources sets.Set[string]
|
||||
ignoredResourceGroups sets.Set[string]
|
||||
enableInPlacePodVerticalScaling bool
|
||||
enableSidecarContainers bool
|
||||
enableSchedulingQueueHint bool
|
||||
enablePodLevelResources bool
|
||||
enableDRAExtendedResource bool
|
||||
|
|
@ -237,7 +236,6 @@ func NewFit(_ context.Context, plArgs runtime.Object, h fwk.Handle, fts feature.
|
|||
ignoredResources: sets.New(args.IgnoredResources...),
|
||||
ignoredResourceGroups: sets.New(args.IgnoredResourceGroups...),
|
||||
enableInPlacePodVerticalScaling: fts.EnableInPlacePodVerticalScaling,
|
||||
enableSidecarContainers: fts.EnableSidecarContainers,
|
||||
enableSchedulingQueueHint: fts.EnableSchedulingQueueHint,
|
||||
handle: h,
|
||||
enablePodLevelResources: fts.EnablePodLevelResources,
|
||||
|
|
@ -332,14 +330,6 @@ func computePodResourceRequest(pod *v1.Pod, opts ResourceRequestsOptions) *preFi
|
|||
|
||||
// PreFilter invoked at the prefilter extension point.
|
||||
func (f *Fit) PreFilter(ctx context.Context, cycleState fwk.CycleState, pod *v1.Pod, nodes []fwk.NodeInfo) (*fwk.PreFilterResult, *fwk.Status) {
|
||||
if !f.enableSidecarContainers && hasRestartableInitContainer(pod) {
|
||||
// Scheduler will calculate resources usage for a Pod containing
|
||||
// restartable init containers that will be equal or more than kubelet will
|
||||
// require to run the Pod. So there will be no overbooking. However, to
|
||||
// avoid the inconsistency in resource calculation between the scheduler
|
||||
// and the older (before v1.28) kubelet, make the Pod unschedulable.
|
||||
return nil, fwk.NewStatus(fwk.UnschedulableAndUnresolvable, "Pod has a restartable init container and the SidecarContainers feature is disabled")
|
||||
}
|
||||
result := computePodResourceRequest(pod, ResourceRequestsOptions{EnablePodLevelResources: f.enablePodLevelResources})
|
||||
|
||||
cycleState.Write(preFilterStateKey, result)
|
||||
|
|
@ -647,15 +637,6 @@ func (f *Fit) Filter(ctx context.Context, cycleState fwk.CycleState, pod *v1.Pod
|
|||
return nil
|
||||
}
|
||||
|
||||
func hasRestartableInitContainer(pod *v1.Pod) bool {
|
||||
for _, c := range pod.Spec.InitContainers {
|
||||
if c.RestartPolicy != nil && *c.RestartPolicy == v1.ContainerRestartPolicyAlways {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// InsufficientResource describes what kind of resource limit is hit and caused the pod to not fit the node.
|
||||
type InsufficientResource struct {
|
||||
ResourceName v1.ResourceName
|
||||
|
|
|
|||
|
|
@ -912,42 +912,28 @@ func testRestartableInitContainers(tCtx ktesting.TContext) {
|
|||
}
|
||||
|
||||
testCases := []struct {
|
||||
name string
|
||||
pod *v1.Pod
|
||||
enableSidecarContainers bool
|
||||
wantPreFilterStatus *fwk.Status
|
||||
wantFilterStatus *fwk.Status
|
||||
name string
|
||||
pod *v1.Pod
|
||||
wantPreFilterStatus *fwk.Status
|
||||
wantFilterStatus *fwk.Status
|
||||
}{
|
||||
{
|
||||
name: "allow pod without restartable init containers if sidecar containers is disabled",
|
||||
name: "allow pod without restartable init containers",
|
||||
pod: newPod(),
|
||||
},
|
||||
{
|
||||
name: "not allow pod with restartable init containers if sidecar containers is disabled",
|
||||
pod: newPodWithRestartableInitContainers(nil, nil),
|
||||
wantPreFilterStatus: fwk.NewStatus(fwk.UnschedulableAndUnresolvable, "Pod has a restartable init container and the SidecarContainers feature is disabled"),
|
||||
name: "allow pod with restartable init containers",
|
||||
pod: newPodWithRestartableInitContainers(nil, nil),
|
||||
},
|
||||
{
|
||||
name: "allow pod without restartable init containers if sidecar containers is enabled",
|
||||
enableSidecarContainers: true,
|
||||
pod: newPod(),
|
||||
},
|
||||
{
|
||||
name: "allow pod with restartable init containers if sidecar containers is enabled",
|
||||
enableSidecarContainers: true,
|
||||
pod: newPodWithRestartableInitContainers(nil, nil),
|
||||
},
|
||||
{
|
||||
name: "allow pod if the total requested resources do not exceed the node's allocatable resources",
|
||||
enableSidecarContainers: true,
|
||||
name: "allow pod if the total requested resources do not exceed the node's allocatable resources",
|
||||
pod: newPodWithRestartableInitContainers(
|
||||
&v1.ResourceList{v1.ResourceCPU: *resource.NewMilliQuantity(1, resource.DecimalSI)},
|
||||
&v1.ResourceList{v1.ResourceCPU: *resource.NewMilliQuantity(1, resource.DecimalSI)},
|
||||
),
|
||||
},
|
||||
{
|
||||
name: "not allow pod if the total requested resources do exceed the node's allocatable resources",
|
||||
enableSidecarContainers: true,
|
||||
name: "not allow pod if the total requested resources do exceed the node's allocatable resources",
|
||||
pod: newPodWithRestartableInitContainers(
|
||||
&v1.ResourceList{v1.ResourceCPU: *resource.NewMilliQuantity(1, resource.DecimalSI)},
|
||||
&v1.ResourceList{v1.ResourceCPU: *resource.NewMilliQuantity(2, resource.DecimalSI)},
|
||||
|
|
@ -962,7 +948,7 @@ func testRestartableInitContainers(tCtx ktesting.TContext) {
|
|||
nodeInfo := framework.NewNodeInfo()
|
||||
nodeInfo.SetNode(&node)
|
||||
|
||||
p, err := NewFit(tCtx, &config.NodeResourcesFitArgs{ScoringStrategy: defaultScoringStrategy}, nil, plfeature.Features{EnableSidecarContainers: test.enableSidecarContainers})
|
||||
p, err := NewFit(tCtx, &config.NodeResourcesFitArgs{ScoringStrategy: defaultScoringStrategy}, nil, plfeature.Features{})
|
||||
tCtx.ExpectNoError(err, "create fit plugin")
|
||||
cycleState := framework.NewCycleState()
|
||||
_, preFilterStatus := p.(fwk.PreFilterPlugin).PreFilter(tCtx, cycleState, test.pod, nil)
|
||||
|
|
|
|||
|
|
@ -195,7 +195,6 @@
|
|||
| ServiceAccountTokenPodNodeInfo | :ballot_box_with_check: 1.30+ | :closed_lock_with_key: 1.32+ | 1.29 | 1.30–1.31 | 1.32– | | | [code](https://cs.k8s.io/?q=%5CbServiceAccountTokenPodNodeInfo%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/kubernetes) [KEPs](https://cs.k8s.io/?q=%5CbServiceAccountTokenPodNodeInfo%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/enhancements) |
|
||||
| ServiceCIDRStatusFieldWiping | :ballot_box_with_check: 1.36+ | | | | 1.0–1.35 | 1.36– | | [code](https://cs.k8s.io/?q=%5CbServiceCIDRStatusFieldWiping%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/kubernetes) [KEPs](https://cs.k8s.io/?q=%5CbServiceCIDRStatusFieldWiping%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/enhancements) |
|
||||
| ShardedListAndWatch | | | 1.36– | | | | | [code](https://cs.k8s.io/?q=%5CbShardedListAndWatch%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/kubernetes) [KEPs](https://cs.k8s.io/?q=%5CbShardedListAndWatch%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/enhancements) |
|
||||
| SidecarContainers | :ballot_box_with_check: 1.29+ | :closed_lock_with_key: 1.33+ | 1.28 | 1.29–1.32 | 1.33– | | | [code](https://cs.k8s.io/?q=%5CbSidecarContainers%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/kubernetes) [KEPs](https://cs.k8s.io/?q=%5CbSidecarContainers%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/enhancements) |
|
||||
| SizeBasedListCostEstimate | :ballot_box_with_check: 1.34+ | | | 1.34– | | | | [code](https://cs.k8s.io/?q=%5CbSizeBasedListCostEstimate%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/kubernetes) [KEPs](https://cs.k8s.io/?q=%5CbSizeBasedListCostEstimate%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/enhancements) |
|
||||
| StaleControllerConsistencyDaemonSet | :ballot_box_with_check: 1.36+ | | | 1.36– | | | AtomicFIFO | [code](https://cs.k8s.io/?q=%5CbStaleControllerConsistencyDaemonSet%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/kubernetes) [KEPs](https://cs.k8s.io/?q=%5CbStaleControllerConsistencyDaemonSet%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/enhancements) |
|
||||
| StaleControllerConsistencyJob | :ballot_box_with_check: 1.36+ | | | 1.36– | | | AtomicFIFO | [code](https://cs.k8s.io/?q=%5CbStaleControllerConsistencyJob%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/kubernetes) [KEPs](https://cs.k8s.io/?q=%5CbStaleControllerConsistencyJob%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/enhancements) |
|
||||
|
|
|
|||
|
|
@ -1915,20 +1915,6 @@
|
|||
lockToDefault: false
|
||||
preRelease: Alpha
|
||||
version: "1.36"
|
||||
- name: SidecarContainers
|
||||
versionedSpecs:
|
||||
- default: false
|
||||
lockToDefault: false
|
||||
preRelease: Alpha
|
||||
version: "1.28"
|
||||
- default: true
|
||||
lockToDefault: false
|
||||
preRelease: Beta
|
||||
version: "1.29"
|
||||
- default: true
|
||||
lockToDefault: true
|
||||
preRelease: GA
|
||||
version: "1.33"
|
||||
- name: SizeBasedListCostEstimate
|
||||
versionedSpecs:
|
||||
- default: true
|
||||
|
|
|
|||
|
|
@ -34,7 +34,6 @@ import (
|
|||
clientset "k8s.io/client-go/kubernetes"
|
||||
"k8s.io/client-go/tools/cache"
|
||||
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
|
||||
"k8s.io/kubernetes/pkg/features"
|
||||
"k8s.io/kubernetes/pkg/kubelet/events"
|
||||
"k8s.io/kubernetes/test/e2e/framework"
|
||||
e2eevents "k8s.io/kubernetes/test/e2e/framework/events"
|
||||
|
|
@ -729,7 +728,7 @@ done
|
|||
})
|
||||
})
|
||||
|
||||
var _ = SIGDescribe(framework.WithNodeConformance(), framework.WithFeatureGate(features.SidecarContainers), "Probing restartable init container", func() {
|
||||
var _ = SIGDescribe(framework.WithNodeConformance(), "Probing restartable init container", func() {
|
||||
f := framework.NewDefaultFramework("container-probe")
|
||||
f.NamespacePodSecurityLevel = admissionapi.LevelBaseline
|
||||
var podClient *e2epod.PodClient
|
||||
|
|
|
|||
|
|
@ -277,7 +277,7 @@ var _ = SIGDescribe("Container Lifecycle Hook", func() {
|
|||
})
|
||||
})
|
||||
|
||||
var _ = SIGDescribe(framework.WithNodeConformance(), framework.WithFeatureGate(features.SidecarContainers), "Restartable Init Container Lifecycle Hook", func() {
|
||||
var _ = SIGDescribe(framework.WithNodeConformance(), "Restartable Init Container Lifecycle Hook", func() {
|
||||
f := framework.NewDefaultFramework("restartable-init-container-lifecycle-hook")
|
||||
f.NamespacePodSecurityLevel = admissionapi.LevelBaseline
|
||||
var podClient *e2epod.PodClient
|
||||
|
|
|
|||
Loading…
Reference in a new issue