Add Support for Component Priority Class Configuration in karmadactl init

Signed-off-by: zhzhuang-zju <m17799853869@163.com>
This commit is contained in:
zhzhuang-zju 2025-02-11 20:20:07 +08:00
parent 7cea9dd66f
commit 8949f3351d
4 changed files with 102 additions and 58 deletions

View File

@ -150,6 +150,7 @@ func NewCmdInit(parentCommand string) *cobra.Command {
flags.StringVar(&opts.ExternalEtcdClientKeyPath, "external-etcd-client-key-path", "", "The path of client side private key to the external etcd cluster in pem format.") flags.StringVar(&opts.ExternalEtcdClientKeyPath, "external-etcd-client-key-path", "", "The path of client side private key to the external etcd cluster in pem format.")
flags.StringVar(&opts.ExternalEtcdServers, "external-etcd-servers", "", "The server urls of external etcd cluster, to be used by kube-apiserver through --etcd-servers.") flags.StringVar(&opts.ExternalEtcdServers, "external-etcd-servers", "", "The server urls of external etcd cluster, to be used by kube-apiserver through --etcd-servers.")
flags.StringVar(&opts.ExternalEtcdKeyPrefix, "external-etcd-key-prefix", "", "The key prefix to be configured to kube-apiserver through --etcd-prefix.") flags.StringVar(&opts.ExternalEtcdKeyPrefix, "external-etcd-key-prefix", "", "The key prefix to be configured to kube-apiserver through --etcd-prefix.")
flags.StringVar(&opts.EtcdPriorityClass, "etcd-priority-class", "system-node-critical", "The priority class name for the component etcd.")
// karmada // karmada
flags.StringVar(&opts.CRDs, "crds", kubernetes.DefaultCrdURL, "Karmada crds resource.(local file e.g. --crds /root/crds.tar.gz)") flags.StringVar(&opts.CRDs, "crds", kubernetes.DefaultCrdURL, "Karmada crds resource.(local file e.g. --crds /root/crds.tar.gz)")
flags.StringVar(&opts.KarmadaInitFilePath, "config", "", "Karmada init file path") flags.StringVar(&opts.KarmadaInitFilePath, "config", "", "Karmada init file path")
@ -157,19 +158,31 @@ func NewCmdInit(parentCommand string) *cobra.Command {
flags.Int32VarP(&opts.KarmadaAPIServerNodePort, "port", "p", 32443, "Karmada apiserver service node port") flags.Int32VarP(&opts.KarmadaAPIServerNodePort, "port", "p", 32443, "Karmada apiserver service node port")
flags.StringVarP(&opts.KarmadaDataPath, "karmada-data", "d", "/etc/karmada", "Karmada data path. kubeconfig cert and crds files") flags.StringVarP(&opts.KarmadaDataPath, "karmada-data", "d", "/etc/karmada", "Karmada data path. kubeconfig cert and crds files")
flags.StringVarP(&opts.KarmadaPkiPath, "karmada-pki", "", "/etc/karmada/pki", "Karmada pki path. Karmada cert files") flags.StringVarP(&opts.KarmadaPkiPath, "karmada-pki", "", "/etc/karmada/pki", "Karmada pki path. Karmada cert files")
flags.IntVarP(&opts.WaitComponentReadyTimeout, "wait-component-ready-timeout", "", cmdinitoptions.WaitComponentReadyTimeout, "Wait for karmada component ready timeout. 0 means wait forever")
// karmada-apiserver
flags.StringVarP(&opts.KarmadaAPIServerImage, "karmada-apiserver-image", "", "", "Kubernetes apiserver image") flags.StringVarP(&opts.KarmadaAPIServerImage, "karmada-apiserver-image", "", "", "Kubernetes apiserver image")
flags.Int32VarP(&opts.KarmadaAPIServerReplicas, "karmada-apiserver-replicas", "", 1, "Karmada apiserver replica set") flags.Int32VarP(&opts.KarmadaAPIServerReplicas, "karmada-apiserver-replicas", "", 1, "Karmada apiserver replica set")
flags.StringVar(&opts.KarmadaAPIServerPriorityClass, "karmada-apiserver-priority-class", "system-node-critical", "The priority class name for the component karmada-apiserver.")
// karmada-scheduler
flags.StringVarP(&opts.KarmadaSchedulerImage, "karmada-scheduler-image", "", kubernetes.DefaultKarmadaSchedulerImage, "Karmada scheduler image") flags.StringVarP(&opts.KarmadaSchedulerImage, "karmada-scheduler-image", "", kubernetes.DefaultKarmadaSchedulerImage, "Karmada scheduler image")
flags.Int32VarP(&opts.KarmadaSchedulerReplicas, "karmada-scheduler-replicas", "", 1, "Karmada scheduler replica set") flags.Int32VarP(&opts.KarmadaSchedulerReplicas, "karmada-scheduler-replicas", "", 1, "Karmada scheduler replica set")
flags.StringVar(&opts.KarmadaSchedulerPriorityClass, "karmada-scheduler-priority-class", "system-node-critical", "The priority class name for the component karmada-scheduler.")
// karmada-kube-controller-manager
flags.StringVarP(&opts.KubeControllerManagerImage, "karmada-kube-controller-manager-image", "", "", "Kubernetes controller manager image") flags.StringVarP(&opts.KubeControllerManagerImage, "karmada-kube-controller-manager-image", "", "", "Kubernetes controller manager image")
flags.Int32VarP(&opts.KubeControllerManagerReplicas, "karmada-kube-controller-manager-replicas", "", 1, "Karmada kube controller manager replica set") flags.Int32VarP(&opts.KubeControllerManagerReplicas, "karmada-kube-controller-manager-replicas", "", 1, "Karmada kube controller manager replica set")
flags.StringVar(&opts.KubeControllerManagerPriorityClass, "karmada-kube-controller-manager-priority-class", "system-node-critical", "The priority class name for the component karmada-kube-controller-manager.")
// karamda-controller-manager
flags.StringVarP(&opts.KarmadaControllerManagerImage, "karmada-controller-manager-image", "", kubernetes.DefaultKarmadaControllerManagerImage, "Karmada controller manager image") flags.StringVarP(&opts.KarmadaControllerManagerImage, "karmada-controller-manager-image", "", kubernetes.DefaultKarmadaControllerManagerImage, "Karmada controller manager image")
flags.Int32VarP(&opts.KarmadaControllerManagerReplicas, "karmada-controller-manager-replicas", "", 1, "Karmada controller manager replica set") flags.Int32VarP(&opts.KarmadaControllerManagerReplicas, "karmada-controller-manager-replicas", "", 1, "Karmada controller manager replica set")
flags.StringVar(&opts.KarmadaControllerManagerPriorityClass, "karmada-controller-manager-priority-class", "system-node-critical", "The priority class name for the component karmada-controller-manager.")
// karmada-webhook
flags.StringVarP(&opts.KarmadaWebhookImage, "karmada-webhook-image", "", kubernetes.DefaultKarmadaWebhookImage, "Karmada webhook image") flags.StringVarP(&opts.KarmadaWebhookImage, "karmada-webhook-image", "", kubernetes.DefaultKarmadaWebhookImage, "Karmada webhook image")
flags.Int32VarP(&opts.KarmadaWebhookReplicas, "karmada-webhook-replicas", "", 1, "Karmada webhook replica set") flags.Int32VarP(&opts.KarmadaWebhookReplicas, "karmada-webhook-replicas", "", 1, "Karmada webhook replica set")
flags.StringVar(&opts.KarmadaWebhookPriorityClass, "karmada-webhook-priority-class", "system-node-critical", "The priority class name for the component karmada-webhook.")
// karmada-aggregated-apiserver
flags.StringVarP(&opts.KarmadaAggregatedAPIServerImage, "karmada-aggregated-apiserver-image", "", kubernetes.DefaultKarmadaAggregatedAPIServerImage, "Karmada aggregated apiserver image") flags.StringVarP(&opts.KarmadaAggregatedAPIServerImage, "karmada-aggregated-apiserver-image", "", kubernetes.DefaultKarmadaAggregatedAPIServerImage, "Karmada aggregated apiserver image")
flags.Int32VarP(&opts.KarmadaAggregatedAPIServerReplicas, "karmada-aggregated-apiserver-replicas", "", 1, "Karmada aggregated apiserver replica set") flags.Int32VarP(&opts.KarmadaAggregatedAPIServerReplicas, "karmada-aggregated-apiserver-replicas", "", 1, "Karmada aggregated apiserver replica set")
flags.IntVarP(&opts.WaitComponentReadyTimeout, "wait-component-ready-timeout", "", cmdinitoptions.WaitComponentReadyTimeout, "Wait for karmada component ready timeout. 0 means wait forever") flags.StringVar(&opts.KarmadaAggregatedAPIServerPriorityClass, "karmada-aggregated-apiserver-priority-class", "system-node-critical", "The priority class name for the component karmada-aggregated-apiserver.")
return cmd return cmd
} }

View File

@ -138,58 +138,82 @@ func init() {
// CommandInitOption holds all flags options for init. // CommandInitOption holds all flags options for init.
type CommandInitOption struct { type CommandInitOption struct {
ImageRegistry string ImageRegistry string
ImagePullPolicy string ImagePullPolicy string
KubeImageRegistry string KubeImageRegistry string
KubeImageMirrorCountry string KubeImageMirrorCountry string
KubeImageTag string KubeImageTag string
EtcdImage string
EtcdReplicas int32 // internal etcd
EtcdInitImage string EtcdImage string
EtcdStorageMode string EtcdReplicas int32
EtcdHostDataPath string EtcdInitImage string
EtcdNodeSelectorLabels string EtcdStorageMode string
EtcdNodeSelectorLabelsMap map[string]string EtcdHostDataPath string
EtcdPersistentVolumeSize string EtcdNodeSelectorLabels string
ExternalEtcdCACertPath string EtcdNodeSelectorLabelsMap map[string]string
ExternalEtcdClientCertPath string EtcdPersistentVolumeSize string
ExternalEtcdClientKeyPath string EtcdPriorityClass string
ExternalEtcdServers string
ExternalEtcdKeyPrefix string // external etcd
KarmadaAPIServerImage string ExternalEtcdCACertPath string
KarmadaAPIServerReplicas int32 ExternalEtcdClientCertPath string
KarmadaAPIServerAdvertiseAddress string ExternalEtcdClientKeyPath string
KarmadaAPIServerNodePort int32 ExternalEtcdServers string
KarmadaSchedulerImage string ExternalEtcdKeyPrefix string
KarmadaSchedulerReplicas int32
// karmada-apiserver
KarmadaAPIServerImage string
KarmadaAPIServerReplicas int32
KarmadaAPIServerAdvertiseAddress string
KarmadaAPIServerNodePort int32
KarmadaAPIServerIP []net.IP
KarmadaAPIServerPriorityClass string
// karmada-scheduler
KarmadaSchedulerImage string
KarmadaSchedulerReplicas int32
KarmadaSchedulerPriorityClass string
// kube-controller-manager
KubeControllerManagerImage string KubeControllerManagerImage string
KubeControllerManagerReplicas int32 KubeControllerManagerReplicas int32
KarmadaControllerManagerImage string KubeControllerManagerPriorityClass string
KarmadaControllerManagerReplicas int32
KarmadaWebhookImage string // karmada-controller-manager
KarmadaWebhookReplicas int32 KarmadaControllerManagerImage string
KarmadaAggregatedAPIServerImage string KarmadaControllerManagerReplicas int32
KarmadaAggregatedAPIServerReplicas int32 KarmadaControllerManagerPriorityClass string
Namespace string
KubeConfig string KarmadaWebhookImage string
Context string KarmadaWebhookReplicas int32
StorageClassesName string KarmadaWebhookPriorityClass string
KarmadaDataPath string
KarmadaPkiPath string // karamda-aggregated-apiserver
CRDs string KarmadaAggregatedAPIServerImage string
ExternalIP string KarmadaAggregatedAPIServerReplicas int32
ExternalDNS string KarmadaAggregatedAPIServerPriorityClass string
PullSecrets []string
CertValidity time.Duration Namespace string
KubeClientSet kubernetes.Interface KubeConfig string
CertAndKeyFileData map[string][]byte Context string
RestConfig *rest.Config StorageClassesName string
KarmadaAPIServerIP []net.IP KarmadaDataPath string
HostClusterDomain string KarmadaPkiPath string
WaitComponentReadyTimeout int CRDs string
CaCertFile string ExternalIP string
CaKeyFile string ExternalDNS string
KarmadaInitFilePath string PullSecrets []string
CertValidity time.Duration
KubeClientSet kubernetes.Interface
CertAndKeyFileData map[string][]byte
RestConfig *rest.Config
HostClusterDomain string
WaitComponentReadyTimeout int
CaCertFile string
CaKeyFile string
KarmadaInitFilePath string
} }
func (i *CommandInitOption) validateLocalEtcd(parentCommand string) error { func (i *CommandInitOption) validateLocalEtcd(parentCommand string) error {

View File

@ -164,7 +164,8 @@ func (i *CommandInitOption) makeKarmadaAPIServerDeployment() *appsv1.Deployment
} }
podSpec := corev1.PodSpec{ podSpec := corev1.PodSpec{
ImagePullSecrets: i.getImagePullSecrets(), ImagePullSecrets: i.getImagePullSecrets(),
PriorityClassName: i.KarmadaAPIServerPriorityClass,
Affinity: &corev1.Affinity{ Affinity: &corev1.Affinity{
PodAntiAffinity: &corev1.PodAntiAffinity{ PodAntiAffinity: &corev1.PodAntiAffinity{
RequiredDuringSchedulingIgnoredDuringExecution: []corev1.PodAffinityTerm{ RequiredDuringSchedulingIgnoredDuringExecution: []corev1.PodAffinityTerm{
@ -278,7 +279,8 @@ func (i *CommandInitOption) makeKarmadaKubeControllerManagerDeployment() *appsv1
} }
podSpec := corev1.PodSpec{ podSpec := corev1.PodSpec{
ImagePullSecrets: i.getImagePullSecrets(), ImagePullSecrets: i.getImagePullSecrets(),
PriorityClassName: i.KubeControllerManagerPriorityClass,
Affinity: &corev1.Affinity{ Affinity: &corev1.Affinity{
PodAntiAffinity: &corev1.PodAntiAffinity{ PodAntiAffinity: &corev1.PodAntiAffinity{
RequiredDuringSchedulingIgnoredDuringExecution: []corev1.PodAffinityTerm{ RequiredDuringSchedulingIgnoredDuringExecution: []corev1.PodAffinityTerm{
@ -423,7 +425,8 @@ func (i *CommandInitOption) makeKarmadaSchedulerDeployment() *appsv1.Deployment
} }
podSpec := corev1.PodSpec{ podSpec := corev1.PodSpec{
ImagePullSecrets: i.getImagePullSecrets(), ImagePullSecrets: i.getImagePullSecrets(),
PriorityClassName: i.KarmadaSchedulerPriorityClass,
Affinity: &corev1.Affinity{ Affinity: &corev1.Affinity{
PodAntiAffinity: &corev1.PodAntiAffinity{ PodAntiAffinity: &corev1.PodAntiAffinity{
RequiredDuringSchedulingIgnoredDuringExecution: []corev1.PodAffinityTerm{ RequiredDuringSchedulingIgnoredDuringExecution: []corev1.PodAffinityTerm{
@ -561,7 +564,8 @@ func (i *CommandInitOption) makeKarmadaControllerManagerDeployment() *appsv1.Dep
} }
podSpec := corev1.PodSpec{ podSpec := corev1.PodSpec{
ImagePullSecrets: i.getImagePullSecrets(), ImagePullSecrets: i.getImagePullSecrets(),
PriorityClassName: i.KarmadaControllerManagerPriorityClass,
Affinity: &corev1.Affinity{ Affinity: &corev1.Affinity{
PodAntiAffinity: &corev1.PodAntiAffinity{ PodAntiAffinity: &corev1.PodAntiAffinity{
RequiredDuringSchedulingIgnoredDuringExecution: []corev1.PodAffinityTerm{ RequiredDuringSchedulingIgnoredDuringExecution: []corev1.PodAffinityTerm{
@ -683,7 +687,8 @@ func (i *CommandInitOption) makeKarmadaWebhookDeployment() *appsv1.Deployment {
} }
podSpec := corev1.PodSpec{ podSpec := corev1.PodSpec{
ImagePullSecrets: i.getImagePullSecrets(), ImagePullSecrets: i.getImagePullSecrets(),
PriorityClassName: i.KarmadaWebhookPriorityClass,
Affinity: &corev1.Affinity{ Affinity: &corev1.Affinity{
PodAntiAffinity: &corev1.PodAntiAffinity{ PodAntiAffinity: &corev1.PodAntiAffinity{
RequiredDuringSchedulingIgnoredDuringExecution: []corev1.PodAffinityTerm{ RequiredDuringSchedulingIgnoredDuringExecution: []corev1.PodAffinityTerm{
@ -858,7 +863,8 @@ func (i *CommandInitOption) makeKarmadaAggregatedAPIServerDeployment() *appsv1.D
command = append(command, fmt.Sprintf("--etcd-prefix=%s", i.ExternalEtcdKeyPrefix)) command = append(command, fmt.Sprintf("--etcd-prefix=%s", i.ExternalEtcdKeyPrefix))
} }
podSpec := corev1.PodSpec{ podSpec := corev1.PodSpec{
ImagePullSecrets: i.getImagePullSecrets(), ImagePullSecrets: i.getImagePullSecrets(),
PriorityClassName: i.KarmadaAggregatedAPIServerPriorityClass,
Affinity: &corev1.Affinity{ Affinity: &corev1.Affinity{
PodAntiAffinity: &corev1.PodAntiAffinity{ PodAntiAffinity: &corev1.PodAntiAffinity{
RequiredDuringSchedulingIgnoredDuringExecution: []corev1.PodAffinityTerm{ RequiredDuringSchedulingIgnoredDuringExecution: []corev1.PodAffinityTerm{

View File

@ -232,7 +232,8 @@ func (i *CommandInitOption) makeETCDStatefulSet() *appsv1.StatefulSet {
// etcd Container // etcd Container
podSpec := corev1.PodSpec{ podSpec := corev1.PodSpec{
ImagePullSecrets: i.getImagePullSecrets(), ImagePullSecrets: i.getImagePullSecrets(),
PriorityClassName: i.EtcdPriorityClass,
Affinity: &corev1.Affinity{ Affinity: &corev1.Affinity{
PodAntiAffinity: &corev1.PodAntiAffinity{ PodAntiAffinity: &corev1.PodAntiAffinity{
PreferredDuringSchedulingIgnoredDuringExecution: []corev1.WeightedPodAffinityTerm{ PreferredDuringSchedulingIgnoredDuringExecution: []corev1.WeightedPodAffinityTerm{