diff --git a/pkg/cloudprovider/cloudprovider.go b/pkg/cloudprovider/cloudprovider.go index 20927921ca..8d03ebfa36 100644 --- a/pkg/cloudprovider/cloudprovider.go +++ b/pkg/cloudprovider/cloudprovider.go @@ -28,11 +28,12 @@ import ( // Config describes externally-configurable cloud provider configuration. // This is normally unmarshalled from a JSON config file. type Config struct { - LBEnabled bool `json:"lbEnabled"` - LBImage string `json:"lbImage"` - LBNamespace string `json:"lbNamespace"` - NodeEnabled bool `json:"nodeEnabled"` - Rootless bool `json:"rootless"` + LBDefaultPriorityClassName string `json:"lbDefaultPriorityClassName"` + LBEnabled bool `json:"lbEnabled"` + LBImage string `json:"lbImage"` + LBNamespace string `json:"lbNamespace"` + NodeEnabled bool `json:"nodeEnabled"` + Rootless bool `json:"rootless"` } type k3s struct { @@ -56,10 +57,11 @@ func init() { var err error k := k3s{ Config: Config{ - LBEnabled: true, - LBImage: DefaultLBImage, - LBNamespace: DefaultLBNS, - NodeEnabled: true, + LBDefaultPriorityClassName: DefaultLBPriorityClassName, + LBEnabled: true, + LBImage: DefaultLBImage, + LBNamespace: DefaultLBNS, + NodeEnabled: true, }, } diff --git a/pkg/cloudprovider/servicelb.go b/pkg/cloudprovider/servicelb.go index 20d699b427..79d34159a2 100644 --- a/pkg/cloudprovider/servicelb.go +++ b/pkg/cloudprovider/servicelb.go @@ -41,12 +41,14 @@ var ( daemonsetNodeLabel = "svccontroller." + version.Program + ".cattle.io/enablelb" daemonsetNodePoolLabel = "svccontroller." + version.Program + ".cattle.io/lbpool" nodeSelectorLabel = "svccontroller." + version.Program + ".cattle.io/nodeselector" + priorityAnnotation = "svccontroller." + version.Program + ".cattle.io/priorityclassname" controllerName = ccmapp.DefaultInitFuncConstructors["service"].InitContext.ClientName ) const ( - Ready = condition.Cond("Ready") - DefaultLBNS = meta.NamespaceSystem + Ready = condition.Cond("Ready") + DefaultLBNS = meta.NamespaceSystem + DefaultLBPriorityClassName = "system-node-critical" ) var ( @@ -428,6 +430,7 @@ func (k *k3s) deleteDaemonSet(ctx context.Context, svc *core.Service) error { func (k *k3s) newDaemonSet(svc *core.Service) (*apps.DaemonSet, error) { name := generateName(svc) oneInt := intstr.FromInt(1) + priorityClassName := k.getPriorityClassName(svc) localTraffic := servicehelper.RequestsOnlyLocalTraffic(svc) sourceRangesSet, err := servicehelper.GetLoadBalancerSourceRanges(svc) if err != nil { @@ -472,6 +475,7 @@ func (k *k3s) newDaemonSet(svc *core.Service) (*apps.DaemonSet, error) { }, }, Spec: core.PodSpec{ + PriorityClassName: priorityClassName, ServiceAccountName: "svclb", AutomountServiceAccountToken: utilsptr.To(false), SecurityContext: &core.PodSecurityContext{ @@ -682,6 +686,17 @@ func (k *k3s) removeFinalizer(ctx context.Context, svc *core.Service) (*core.Ser return svc, nil } +// getPriorityClassName returns the value of the priority class name annotation on the service, +// or the system default priority class name. +func (k *k3s) getPriorityClassName(svc *core.Service) string { + if svc != nil { + if v, ok := svc.Annotations[priorityAnnotation]; ok { + return v + } + } + return k.LBDefaultPriorityClassName +} + // generateName generates a distinct name for the DaemonSet based on the service name and UID func generateName(svc *core.Service) string { return fmt.Sprintf("svclb-%s-%s", svc.Name, svc.UID[:8]) diff --git a/pkg/daemons/control/deps/deps.go b/pkg/daemons/control/deps/deps.go index 59c8e6346e..c405d8f232 100644 --- a/pkg/daemons/control/deps/deps.go +++ b/pkg/daemons/control/deps/deps.go @@ -829,11 +829,12 @@ func genEgressSelectorConfig(controlConfig *config.Control) error { func genCloudConfig(controlConfig *config.Control) error { cloudConfig := cloudprovider.Config{ - LBEnabled: !controlConfig.DisableServiceLB, - LBNamespace: controlConfig.ServiceLBNamespace, - LBImage: cloudprovider.DefaultLBImage, - Rootless: controlConfig.Rootless, - NodeEnabled: !controlConfig.DisableCCM, + LBDefaultPriorityClassName: cloudprovider.DefaultLBPriorityClassName, + LBEnabled: !controlConfig.DisableServiceLB, + LBNamespace: controlConfig.ServiceLBNamespace, + LBImage: cloudprovider.DefaultLBImage, + Rootless: controlConfig.Rootless, + NodeEnabled: !controlConfig.DisableCCM, } if controlConfig.SystemDefaultRegistry != "" { cloudConfig.LBImage = controlConfig.SystemDefaultRegistry + "/" + cloudConfig.LBImage