mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-26 05:03:09 +00:00
Merge pull request #128236 from carlory/automated-cherry-pick-of-#128182-upstream-release-1.31
Automated cherry pick of #128182: Fix crash on kube manager's service-lb-controller after v1.31.0.
This commit is contained in:
commit
c9e75e73f4
@ -219,3 +219,29 @@ func TestTaintEvictionControllerGating(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestNoCloudProviderControllerStarted(t *testing.T) {
|
||||||
|
_, ctx := ktesting.NewTestContext(t)
|
||||||
|
ctx, cancel := context.WithCancel(ctx)
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
controllerCtx := ControllerContext{
|
||||||
|
Cloud: nil,
|
||||||
|
LoopMode: IncludeCloudLoops,
|
||||||
|
}
|
||||||
|
controllerCtx.ComponentConfig.Generic.Controllers = []string{"*"}
|
||||||
|
for _, controller := range NewControllerDescriptors() {
|
||||||
|
if !controller.IsCloudProviderController() {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
controllerName := controller.Name()
|
||||||
|
checker, err := StartController(ctx, controllerCtx, controller, nil)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Error starting controller %q: %v", controllerName, err)
|
||||||
|
}
|
||||||
|
if checker != nil {
|
||||||
|
t.Errorf("Controller %q should not be started", controllerName)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -92,6 +92,12 @@ func newServiceLBControllerDescriptor() *ControllerDescriptor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func startServiceLBController(ctx context.Context, controllerContext ControllerContext, controllerName string) (controller.Interface, bool, error) {
|
func startServiceLBController(ctx context.Context, controllerContext ControllerContext, controllerName string) (controller.Interface, bool, error) {
|
||||||
|
logger := klog.FromContext(ctx)
|
||||||
|
if controllerContext.Cloud == nil {
|
||||||
|
logger.Info("Warning: service-controller is set, but no cloud provider specified. Will not configure service controller.")
|
||||||
|
return nil, false, nil
|
||||||
|
}
|
||||||
|
|
||||||
serviceController, err := servicecontroller.New(
|
serviceController, err := servicecontroller.New(
|
||||||
controllerContext.Cloud,
|
controllerContext.Cloud,
|
||||||
controllerContext.ClientBuilder.ClientOrDie("service-controller"),
|
controllerContext.ClientBuilder.ClientOrDie("service-controller"),
|
||||||
@ -102,7 +108,7 @@ func startServiceLBController(ctx context.Context, controllerContext ControllerC
|
|||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// This error shouldn't fail. It lives like this as a legacy.
|
// This error shouldn't fail. It lives like this as a legacy.
|
||||||
klog.FromContext(ctx).Error(err, "Failed to start service controller")
|
logger.Error(err, "Failed to start service controller.")
|
||||||
return nil, false, nil
|
return nil, false, nil
|
||||||
}
|
}
|
||||||
go serviceController.Run(ctx, int(controllerContext.ComponentConfig.ServiceController.ConcurrentServiceSyncs), controllerContext.ControllerManagerMetrics)
|
go serviceController.Run(ctx, int(controllerContext.ComponentConfig.ServiceController.ConcurrentServiceSyncs), controllerContext.ControllerManagerMetrics)
|
||||||
@ -261,6 +267,11 @@ func newCloudNodeLifecycleControllerDescriptor() *ControllerDescriptor {
|
|||||||
|
|
||||||
func startCloudNodeLifecycleController(ctx context.Context, controllerContext ControllerContext, controllerName string) (controller.Interface, bool, error) {
|
func startCloudNodeLifecycleController(ctx context.Context, controllerContext ControllerContext, controllerName string) (controller.Interface, bool, error) {
|
||||||
logger := klog.FromContext(ctx)
|
logger := klog.FromContext(ctx)
|
||||||
|
if controllerContext.Cloud == nil {
|
||||||
|
logger.Info("Warning: node-controller is set, but no cloud provider specified. Will not configure node lifecyle controller.")
|
||||||
|
return nil, false, nil
|
||||||
|
}
|
||||||
|
|
||||||
cloudNodeLifecycleController, err := cloudnodelifecyclecontroller.NewCloudNodeLifecycleController(
|
cloudNodeLifecycleController, err := cloudnodelifecyclecontroller.NewCloudNodeLifecycleController(
|
||||||
controllerContext.InformerFactory.Core().V1().Nodes(),
|
controllerContext.InformerFactory.Core().V1().Nodes(),
|
||||||
// cloud node lifecycle controller uses existing cluster role from node-controller
|
// cloud node lifecycle controller uses existing cluster role from node-controller
|
||||||
|
@ -110,6 +110,7 @@ func New(
|
|||||||
featureGate featuregate.FeatureGate,
|
featureGate featuregate.FeatureGate,
|
||||||
) (*Controller, error) {
|
) (*Controller, error) {
|
||||||
registerMetrics()
|
registerMetrics()
|
||||||
|
|
||||||
s := &Controller{
|
s := &Controller{
|
||||||
cloud: cloud,
|
cloud: cloud,
|
||||||
kubeClient: kubeClient,
|
kubeClient: kubeClient,
|
||||||
@ -128,6 +129,10 @@ func New(
|
|||||||
lastSyncedNodes: make(map[string][]*v1.Node),
|
lastSyncedNodes: make(map[string][]*v1.Node),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := s.init(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
serviceInformer.Informer().AddEventHandlerWithResyncPeriod(
|
serviceInformer.Informer().AddEventHandlerWithResyncPeriod(
|
||||||
cache.ResourceEventHandlerFuncs{
|
cache.ResourceEventHandlerFuncs{
|
||||||
AddFunc: func(cur interface{}) {
|
AddFunc: func(cur interface{}) {
|
||||||
@ -182,10 +187,6 @@ func New(
|
|||||||
nodeSyncPeriod,
|
nodeSyncPeriod,
|
||||||
)
|
)
|
||||||
|
|
||||||
if err := s.init(); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return s, nil
|
return s, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user