Merge pull request #6111 from zhzhuang-zju/priorityclass-addon

Add Support for Component Priority Class Configuration in karmadactl addon
This commit is contained in:
karmada-bot 2025-02-19 11:41:15 +08:00 committed by GitHub
commit b763c681d8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
14 changed files with 94 additions and 60 deletions

View File

@ -63,6 +63,7 @@ var enableDescheduler = func(opts *addoninit.CommandAddonsEnableOption) error {
Namespace: opts.Namespace,
Replicas: &opts.KarmadaDeschedulerReplicas,
Image: addoninit.KarmadaDeschedulerImage(opts),
PriorityClassName: opts.KarmadaDeschedulerPriorityClass,
})
if err != nil {
return fmt.Errorf("error when parsing karmada descheduler deployment template :%v", err)

View File

@ -39,6 +39,7 @@ import (
func TestStatus(t *testing.T) {
name, namespace := names.KarmadaDeschedulerComponentName, "test"
var replicas int32 = 2
var priorityClass = "system-node-critical"
tests := []struct {
name string
listOpts *addoninit.CommandAddonsListOption
@ -80,7 +81,7 @@ func TestStatus(t *testing.T) {
},
},
prep: func(listOpts *addoninit.CommandAddonsListOption) error {
if err := createKarmadaDeschedulerDeployment(listOpts.KubeClientSet, replicas, listOpts.Namespace); err != nil {
if err := createKarmadaDeschedulerDeployment(listOpts.KubeClientSet, replicas, listOpts.Namespace, priorityClass); err != nil {
return fmt.Errorf("failed to create karmada descheduler deployment, got error: %v", err)
}
return addonutils.SimulateDeploymentUnready(listOpts.KubeClientSet, name, listOpts.Namespace)
@ -96,7 +97,7 @@ func TestStatus(t *testing.T) {
},
},
prep: func(listOpts *addoninit.CommandAddonsListOption) error {
if err := createKarmadaDeschedulerDeployment(listOpts.KubeClientSet, replicas, listOpts.Namespace); err != nil {
if err := createKarmadaDeschedulerDeployment(listOpts.KubeClientSet, replicas, listOpts.Namespace, priorityClass); err != nil {
return fmt.Errorf("failed to create karmada descheduler deployment, got error: %v", err)
}
return nil
@ -246,10 +247,11 @@ func TestDisableDescheduler(t *testing.T) {
// createKarmadaDeschedulerDeployment creates or updates a Deployment for the Karmada descheduler
// in the specified namespace with the provided number of replicas.
// It parses and decodes the template for the Deployment before applying it to the cluster.
func createKarmadaDeschedulerDeployment(c clientset.Interface, replicas int32, namespace string) error {
func createKarmadaDeschedulerDeployment(c clientset.Interface, replicas int32, namespace, priorityClass string) error {
karmadaDeschedulerDeploymentBytes, err := addonutils.ParseTemplate(karmadaDeschedulerDeployment, DeploymentReplace{
Namespace: namespace,
Replicas: ptr.To[int32](replicas),
PriorityClassName: priorityClass,
})
if err != nil {
return fmt.Errorf("error when parsing karmada descheduler deployment template: %v", err)

View File

@ -38,6 +38,7 @@ spec:
- key: node-role.kubernetes.io/master
operator: Exists
automountServiceAccountToken: false
priorityClassName: {{ .PriorityClassName }}
containers:
- name: karmada-descheduler
image: {{ .Image }}
@ -86,4 +87,5 @@ type DeploymentReplace struct {
Namespace string
Replicas *int32
Image string
PriorityClassName string
}

View File

@ -84,16 +84,28 @@ func NewCmdAddonsEnable(parentCommand string) *cobra.Command {
flags.StringVarP(&opts.ImageRegistry, "private-image-registry", "", "", "Private image registry where pull images from. If set, all required images will be downloaded from it, it would be useful in offline installation scenarios.")
flags.IntVar(&opts.WaitComponentReadyTimeout, "pod-timeout", options.WaitComponentReadyTimeout, "Wait pod ready timeout.")
flags.IntVar(&opts.WaitAPIServiceReadyTimeout, "apiservice-timeout", 30, "Wait apiservice ready timeout.")
flags.Int32Var(&opts.KarmadaSearchReplicas, "karmada-search-replicas", 1, "Karmada-search replica set")
flags.StringVar(&opts.KarmadaSearchImage, "karmada-search-image", addoninit.DefaultKarmadaSearchImage, "karmada-search image")
flags.Int32Var(&opts.KarmadaMetricsAdapterReplicas, "karmada-metrics-adapter-replicas", 1, "karmada-metrics-adapter replica set")
flags.StringVar(&opts.KarmadaMetricsAdapterImage, "karmada-metrics-adapter-image", addoninit.DefaultKarmadaMetricsAdapterImage, "karmada-metrics-adapter image")
flags.StringVar(&opts.KarmadaDeschedulerImage, "karmada-descheduler-image", addoninit.DefaultKarmadaDeschedulerImage, "karmada-descheduler image")
flags.Int32Var(&opts.KarmadaDeschedulerReplicas, "karmada-descheduler-replicas", 1, "karmada descheduler replica set")
flags.StringVar(&opts.KarmadaSchedulerEstimatorImage, "karmada-scheduler-estimator-image", addoninit.DefaultKarmadaSchedulerEstimatorImage, "karmada-scheduler-estimator image")
flags.Int32Var(&opts.KarmadaEstimatorReplicas, "karmada-estimator-replicas", 1, "karmada-scheduler-estimator replica set")
flags.StringVar(&opts.MemberKubeConfig, "member-kubeconfig", "", "Member cluster's kubeconfig which to deploy scheduler estimator")
flags.StringVar(&opts.MemberContext, "member-context", "", "Member cluster's context which to deploy scheduler estimator")
flags.StringVar(&opts.HostClusterDomain, "host-cluster-domain", globaloptions.DefaultHostClusterDomain, "The cluster domain of karmada host cluster. (e.g. --host-cluster-domain=host.karmada)")
// Karmada-descheduler config
flags.StringVar(&opts.KarmadaDeschedulerImage, "karmada-descheduler-image", addoninit.DefaultKarmadaDeschedulerImage, "karmada-descheduler image")
flags.Int32Var(&opts.KarmadaDeschedulerReplicas, "karmada-descheduler-replicas", 1, "karmada descheduler replica set")
flags.StringVar(&opts.KarmadaDeschedulerPriorityClass, "descheduler-priority-class", "system-node-critical", "The priority class name for the component karmada-descheduler.")
// Karmada-estimator config
flags.StringVar(&opts.KarmadaSchedulerEstimatorImage, "karmada-scheduler-estimator-image", addoninit.DefaultKarmadaSchedulerEstimatorImage, "karmada-scheduler-estimator image")
flags.Int32Var(&opts.KarmadaEstimatorReplicas, "karmada-estimator-replicas", 1, "karmada-scheduler-estimator replica set")
flags.StringVar(&opts.EstimatorPriorityClass, "estimator-priority-class", "system-node-critical", "The priority class name for the component karmada-scheduler-estimator.")
// Karmada-metrics-adapter config
flags.Int32Var(&opts.KarmadaMetricsAdapterReplicas, "karmada-metrics-adapter-replicas", 1, "karmada-metrics-adapter replica set")
flags.StringVar(&opts.KarmadaMetricsAdapterImage, "karmada-metrics-adapter-image", addoninit.DefaultKarmadaMetricsAdapterImage, "karmada-metrics-adapter image")
flags.StringVar(&opts.KarmadaMetricsAdapterPriorityClass, "metrics-adapter-priority-class", "system-node-critical", "The priority class name for the component karmada-metrics-adaptor.")
// Karmada-search config
flags.Int32Var(&opts.KarmadaSearchReplicas, "karmada-search-replicas", 1, "Karmada-search replica set")
flags.StringVar(&opts.KarmadaSearchImage, "karmada-search-image", addoninit.DefaultKarmadaSearchImage, "karmada-search image")
flags.StringVar(&opts.SearchPriorityClass, "search-priority-class", "system-node-critical", "The priority class name for the component karmada-search.")
return cmd
}

View File

@ -114,6 +114,7 @@ var enableEstimator = func(opts *addoninit.CommandAddonsEnableOption) error {
Replicas: &opts.KarmadaEstimatorReplicas,
Image: addoninit.KarmadaSchedulerEstimatorImage(opts),
MemberClusterName: opts.Cluster,
PriorityClassName: opts.EstimatorPriorityClass,
})
if err != nil {
return fmt.Errorf("error when parsing karmada scheduler estimator deployment template :%v", err)

View File

@ -40,6 +40,7 @@ spec:
- key: node-role.kubernetes.io/master
operator: Exists
automountServiceAccountToken: false
priorityClassName: {{ .PriorityClassName }}
containers:
- name: karmada-scheduler-estimator
image: {{ .Image }}
@ -108,6 +109,7 @@ type DeploymentReplace struct {
Replicas *int32
Image string
MemberClusterName string
PriorityClassName string
}
// ServiceReplace is a struct to help to concrete

View File

@ -36,21 +36,25 @@ import (
type CommandAddonsEnableOption struct {
GlobalCommandOptions
// Karmada-search config
KarmadaSearchImage string
KarmadaSearchReplicas int32
SearchPriorityClass string
// Karmada-descheduler config
KarmadaDeschedulerImage string
KarmadaDeschedulerReplicas int32
KarmadaDeschedulerPriorityClass string
// Karmada-metrics-adapter config
KarmadaMetricsAdapterImage string
KarmadaMetricsAdapterReplicas int32
KarmadaMetricsAdapterPriorityClass string
// Karmada-estimator config
KarmadaSchedulerEstimatorImage string
KarmadaEstimatorReplicas int32
EstimatorPriorityClass string
KarmadaKubeClientSet *kubernetes.Clientset

View File

@ -33,7 +33,7 @@ type GlobalCommandOptions struct {
KubeConfig string
Context string
// KubeConfig holds karmada control plane KUBECONFIG file path.
// KarmadaConfig holds karmada control plane KUBECONFIG file path.
KarmadaConfig string
KarmadaContext string

View File

@ -39,6 +39,7 @@ spec:
apiserver: "true"
spec:
automountServiceAccountToken: false
priorityClassName: {{ .PriorityClassName }}
containers:
- name: karmada-metrics-adapter
image: {{ .Image }}
@ -144,6 +145,7 @@ type DeploymentReplace struct {
Namespace string
Replicas *int32
Image string
PriorityClassName string
}
// ServiceReplace is a struct to help to concrete

View File

@ -157,6 +157,7 @@ func installComponentsOnHostCluster(opts *addoninit.CommandAddonsEnableOption) e
Namespace: opts.Namespace,
Replicas: &opts.KarmadaMetricsAdapterReplicas,
Image: addoninit.KarmadaMetricsAdapterImage(opts),
PriorityClassName: opts.KarmadaMetricsAdapterPriorityClass,
})
if err != nil {
return fmt.Errorf("error when parsing karmada metrics adapter deployment template :%v", err)

View File

@ -42,6 +42,7 @@ import (
func TestStatus(t *testing.T) {
name, namespace := names.KarmadaMetricsAdapterComponentName, "test"
var replicas int32 = 2
var priorityClassName = "system-node-critical"
tests := []struct {
name string
listOpts *addoninit.CommandAddonsListOption
@ -83,7 +84,7 @@ func TestStatus(t *testing.T) {
},
},
prep: func(listOpts *addoninit.CommandAddonsListOption) error {
if err := createKarmadaMetricsDeployment(listOpts.KubeClientSet, replicas, listOpts.Namespace); err != nil {
if err := createKarmadaMetricsDeployment(listOpts.KubeClientSet, replicas, listOpts.Namespace, priorityClassName); err != nil {
return fmt.Errorf("failed to create karmada metrics deployment, got error: %v", err)
}
return addonutils.SimulateDeploymentUnready(listOpts.KubeClientSet, name, listOpts.Namespace)
@ -100,7 +101,7 @@ func TestStatus(t *testing.T) {
},
},
prep: func(listOpts *addoninit.CommandAddonsListOption) error {
return createKarmadaMetricsDeployment(listOpts.KubeClientSet, replicas, listOpts.Namespace)
return createKarmadaMetricsDeployment(listOpts.KubeClientSet, replicas, listOpts.Namespace, priorityClassName)
},
wantStatus: addoninit.AddonDisabledStatus,
},
@ -114,7 +115,7 @@ func TestStatus(t *testing.T) {
},
},
prep: func(listOpts *addoninit.CommandAddonsListOption) error {
if err := createKarmadaMetricsDeployment(listOpts.KubeClientSet, replicas, listOpts.Namespace); err != nil {
if err := createKarmadaMetricsDeployment(listOpts.KubeClientSet, replicas, listOpts.Namespace, priorityClassName); err != nil {
return fmt.Errorf("failed to create karmada metrics deployment, got error: %v", err)
}
@ -136,7 +137,7 @@ func TestStatus(t *testing.T) {
},
},
prep: func(listOpts *addoninit.CommandAddonsListOption) error {
if err := createKarmadaMetricsDeployment(listOpts.KubeClientSet, replicas, listOpts.Namespace); err != nil {
if err := createKarmadaMetricsDeployment(listOpts.KubeClientSet, replicas, listOpts.Namespace, priorityClassName); err != nil {
return fmt.Errorf("failed to create karmada metrics deployment, got error: %v", err)
}
return createAndMarkAAAPIServicesAvailable(listOpts.KarmadaAggregatorClientSet)
@ -169,10 +170,11 @@ func TestStatus(t *testing.T) {
// createKarmadaMetricsDeployment creates or updates a Deployment for the Karmada metrics adapter
// in the specified namespace with the provided number of replicas.
// It parses and decodes the template for the Deployment before applying it to the cluster.
func createKarmadaMetricsDeployment(c clientset.Interface, replicas int32, namespace string) error {
func createKarmadaMetricsDeployment(c clientset.Interface, replicas int32, namespace, priorityClass string) error {
karmadaMetricsAdapterDeploymentBytes, err := addonutils.ParseTemplate(karmadaMetricsAdapterDeployment, DeploymentReplace{
Namespace: namespace,
Replicas: ptr.To[int32](replicas),
PriorityClassName: priorityClass,
})
if err != nil {
return fmt.Errorf("error when parsing karmada metrics adapter deployment template :%v", err)

View File

@ -38,6 +38,7 @@ spec:
app: karmada-search
apiserver: "true"
spec:
priorityClassName: {{ .PriorityClassName }}
automountServiceAccountToken: false
containers:
- name: karmada-search
@ -143,6 +144,7 @@ type DeploymentReplace struct {
Image string
ETCDSevers string
KeyPrefix string
PriorityClassName string
}
// ServiceReplace is a struct to help to concrete

View File

@ -170,6 +170,7 @@ func installComponentsOnHostCluster(opts *addoninit.CommandAddonsEnableOption) e
ETCDSevers: etcdServers,
KeyPrefix: keyPrefix,
Image: addoninit.KarmadaSearchImage(opts),
PriorityClassName: opts.SearchPriorityClass,
})
if err != nil {
return fmt.Errorf("error when parsing karmada search deployment template :%v", err)

View File

@ -41,6 +41,7 @@ import (
func TestKarmadaSearchAddonStatus(t *testing.T) {
name, namespace := names.KarmadaSearchComponentName, "test"
var replicas int32 = 2
var priorityClass = "system-node-critical"
tests := []struct {
name string
listOpts *addoninit.CommandAddonsListOption
@ -82,7 +83,7 @@ func TestKarmadaSearchAddonStatus(t *testing.T) {
},
},
prep: func(listOpts *addoninit.CommandAddonsListOption) error {
if err := createKarmadaSearchDeployment(listOpts.KubeClientSet, replicas, listOpts.Namespace); err != nil {
if err := createKarmadaSearchDeployment(listOpts.KubeClientSet, replicas, listOpts.Namespace, priorityClass); err != nil {
return fmt.Errorf("failed to create karmada search deployment, got error: %v", err)
}
return addonutils.SimulateDeploymentUnready(listOpts.KubeClientSet, name, listOpts.Namespace)
@ -100,7 +101,7 @@ func TestKarmadaSearchAddonStatus(t *testing.T) {
},
},
prep: func(listOpts *addoninit.CommandAddonsListOption) error {
return createKarmadaSearchDeployment(listOpts.KubeClientSet, replicas, listOpts.Namespace)
return createKarmadaSearchDeployment(listOpts.KubeClientSet, replicas, listOpts.Namespace, priorityClass)
},
wantStatus: addoninit.AddonDisabledStatus,
},
@ -114,7 +115,7 @@ func TestKarmadaSearchAddonStatus(t *testing.T) {
},
},
prep: func(listOpts *addoninit.CommandAddonsListOption) error {
if err := createKarmadaSearchDeployment(listOpts.KubeClientSet, replicas, listOpts.Namespace); err != nil {
if err := createKarmadaSearchDeployment(listOpts.KubeClientSet, replicas, listOpts.Namespace, priorityClass); err != nil {
return fmt.Errorf("failed to create karmada search deployment, got error: %v", err)
}
@ -136,7 +137,7 @@ func TestKarmadaSearchAddonStatus(t *testing.T) {
},
},
prep: func(listOpts *addoninit.CommandAddonsListOption) error {
if err := createKarmadaSearchDeployment(listOpts.KubeClientSet, replicas, listOpts.Namespace); err != nil {
if err := createKarmadaSearchDeployment(listOpts.KubeClientSet, replicas, listOpts.Namespace, priorityClass); err != nil {
return fmt.Errorf("failed to create karmada search deployment, got error: %v", err)
}
return createAndMarkAAAPIServiceAvailable(listOpts.KarmadaAggregatorClientSet)
@ -169,10 +170,11 @@ func TestKarmadaSearchAddonStatus(t *testing.T) {
// createKarmadaSearchDeployment creates or updates a Deployment for the Karmada search deployment
// in the specified namespace with the provided number of replicas.
// It parses and decodes the template for the Deployment before applying it to the cluster.
func createKarmadaSearchDeployment(c clientset.Interface, replicas int32, namespace string) error {
func createKarmadaSearchDeployment(c clientset.Interface, replicas int32, namespace, priorityClass string) error {
karmadaSearchDeploymentBytes, err := addonutils.ParseTemplate(karmadaSearchDeployment, DeploymentReplace{
Namespace: namespace,
Replicas: ptr.To(replicas),
PriorityClassName: priorityClass,
})
if err != nil {
return fmt.Errorf("error when parsing karmada search deployment template :%v", err)