Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: karmadactl adds a karmada-metrics-adapter addons. #3717

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions pkg/karmadactl/addons/addons.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,9 @@ var (
These addons are currently supported:
1. karmada-descheduler
2. karmada-scheduler-estimator
3. karmada-search`)
2. karmada-metrics-adapter
3. karmada-scheduler-estimator
4. karmada-search`)

addonsExamples = templates.Examples(`
# Enable or disable Karmada addons to the karmada-host cluster
Expand Down
14 changes: 8 additions & 6 deletions pkg/karmadactl/addons/enable.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,12 +68,14 @@ 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.StringVar(&opts.KarmadaSearchImage, "karmada-search-image", addoninit.DefaultKarmadaSearchImage, "karmada search image")
flags.Int32Var(&opts.KarmadaSearchReplicas, "karmada-search-replicas", 1, "Karmada search replica set")
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.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)")
Expand Down
3 changes: 3 additions & 0 deletions pkg/karmadactl/addons/init/addon.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ const (

// SearchResourceName define Search Addon and component installed name
SearchResourceName = "karmada-search"

// MetricsAdapterResourceName define metrics-adapter Addon and component installed name
MetricsAdapterResourceName = "karmada-metrics-adapter"
)

// Addons hosts the optional components that support by karmada
Expand Down
17 changes: 16 additions & 1 deletion pkg/karmadactl/addons/init/enable_option.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ type CommandAddonsEnableOption struct {

KarmadaDeschedulerReplicas int32

KarmadaMetricsAdapterImage string

KarmadaMetricsAdapterReplicas int32

KarmadaSchedulerEstimatorImage string

KarmadaEstimatorReplicas int32
Expand All @@ -51,8 +55,10 @@ var (
DefaultKarmadaDeschedulerImage string
// DefaultKarmadaSchedulerEstimatorImage Karmada scheduler-estimator image
DefaultKarmadaSchedulerEstimatorImage string
// DefaultKarmadaSearchImage Karmada search estimator image
// DefaultKarmadaSearchImage Karmada search image
DefaultKarmadaSearchImage string
// DefaultKarmadaMetricsAdapterImage Karmada metrics adapter image
DefaultKarmadaMetricsAdapterImage string

karmadaRelease string
)
Expand All @@ -68,6 +74,7 @@ func init() {
DefaultKarmadaDeschedulerImage = fmt.Sprintf("docker.io/karmada/karmada-descheduler:%s", releaseVer.ReleaseVersion())
DefaultKarmadaSchedulerEstimatorImage = fmt.Sprintf("docker.io/karmada/karmada-scheduler-estimator:%s", releaseVer.ReleaseVersion())
DefaultKarmadaSearchImage = fmt.Sprintf("docker.io/karmada/karmada-search:%s", releaseVer.ReleaseVersion())
DefaultKarmadaMetricsAdapterImage = fmt.Sprintf("docker.io/karmada/karmada-metrics-adapter:%s", releaseVer.ReleaseVersion())
}

// KarmadaDeschedulerImage get karmada descheduler image
Expand All @@ -94,6 +101,14 @@ func KarmadaSearchImage(o *CommandAddonsEnableOption) string {
return o.KarmadaSearchImage
}

// KarmadaMetricsAdapterImage get karmada metrics adapter image
func KarmadaMetricsAdapterImage(o *CommandAddonsEnableOption) string {
if o.ImageRegistry != "" && o.KarmadaMetricsAdapterImage == DefaultKarmadaMetricsAdapterImage {
return o.ImageRegistry + "/karmada-metrics-adapter:" + karmadaRelease
}
return o.KarmadaMetricsAdapterImage
}

// Complete the conditions required to be able to run enable.
func (o *CommandAddonsEnableOption) Complete() error {
err := o.GlobalCommandOptions.Complete()
Expand Down
4 changes: 3 additions & 1 deletion pkg/karmadactl/addons/install/install.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,14 @@ import (
"github.com/karmada-io/karmada/pkg/karmadactl/addons/descheduler"
"github.com/karmada-io/karmada/pkg/karmadactl/addons/estimator"
addonsinit "github.com/karmada-io/karmada/pkg/karmadactl/addons/init"
"github.com/karmada-io/karmada/pkg/karmadactl/addons/metricsadapter"
"github.com/karmada-io/karmada/pkg/karmadactl/addons/search"
)

// Install intall the karmada addons process in Addons
func Install() {
addonsinit.Addons["karmada-search"] = search.AddonSearch
addonsinit.Addons["karmada-descheduler"] = descheduler.AddonDescheduler
addonsinit.Addons["karmada-metrics-adapter"] = metricsadapter.AddonMetricsAdapter
addonsinit.Addons["karmada-scheduler-estimator"] = estimator.AddonEstimator
addonsinit.Addons["karmada-search"] = search.AddonSearch
}
150 changes: 150 additions & 0 deletions pkg/karmadactl/addons/metricsadapter/manifests.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
package metricsadapter

const (
karmadaMetricsAdapterDeployment = `
apiVersion: apps/v1
kind: Deployment
metadata:
name: karmada-metrics-adapter
namespace: {{ .Namespace }}
labels:
app: karmada-metrics-adapter
apiserver: "true"
spec:
selector:
matchLabels:
app: karmada-metrics-adapter
apiserver: "true"
replicas: {{ .Replicas }}
template:
metadata:
labels:
app: karmada-metrics-adapter
apiserver: "true"
spec:
automountServiceAccountToken: false
containers:
- name: karmada-metrics-adapter
image: {{ .Image }}
imagePullPolicy: IfNotPresent
volumeMounts:
- name: k8s-certs
mountPath: /etc/karmada/pki
readOnly: true
- name: kubeconfig
subPath: kubeconfig
mountPath: /etc/kubeconfig
command:
- /bin/karmada-metrics-adapter
- --kubeconfig=/etc/kubeconfig
- --authentication-kubeconfig=/etc/kubeconfig
- --authorization-kubeconfig=/etc/kubeconfig
- --client-ca-file=/etc/karmada/pki/ca.crt
- --audit-log-path=-
- --audit-log-maxage=0
- --audit-log-maxbackup=0
readinessProbe:
httpGet:
path: /readyz
port: 443
scheme: HTTPS
initialDelaySeconds: 1
failureThreshold: 3
periodSeconds: 3
timeoutSeconds: 15
livenessProbe:
httpGet:
path: /healthz
port: 443
scheme: HTTPS
initialDelaySeconds: 10
failureThreshold: 3
periodSeconds: 10
timeoutSeconds: 15
resources:
requests:
cpu: 100m
volumes:
- name: k8s-certs
secret:
secretName: karmada-cert
- name: kubeconfig
secret:
secretName: kubeconfig
`

karmadaMetricsAdapterService = `
apiVersion: v1
kind: Service
metadata:
name: karmada-metrics-adapter
namespace: {{ .Namespace }}
labels:
app: karmada-metrics-adapter
apiserver: "true"
spec:
ports:
- port: 443
protocol: TCP
targetPort: 443
selector:
app: karmada-metrics-adapter
`

karmadaMetricsAdapterAAAPIService = `
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
name: {{ .Name }}
spec:
service:
name: karmada-metrics-adapter
namespace: {{ .Namespace }}
group: {{ .Group }}
version: {{ .Version }}
insecureSkipTLSVerify: true
groupPriorityMinimum: 100
versionPriority: 200
`

karmadaMetricsAdapterAAService = `
apiVersion: v1
kind: Service
metadata:
name: karmada-metrics-adapter
namespace: {{ .Namespace }}
spec:
type: ExternalName
externalName: karmada-metrics-adapter.{{ .Namespace }}.svc.{{ .HostClusterDomain }}
`
)

// DeploymentReplace is a struct to help to concrete
// the karmada-metrics-adapter deployment bytes with the deployment template
type DeploymentReplace struct {
Namespace string
Replicas *int32
Image string
}

// ServiceReplace is a struct to help to concrete
// the karmada-metrics-adapter Service bytes with the Service template
type ServiceReplace struct {
Namespace string
}

// AAApiServiceReplace is a struct to help to concrete
// the karmada-metrics-adapter ApiService bytes with the AAApiService template
type AAApiServiceReplace struct {
Name string
Namespace string
Group string
Version string
}

// AAServiceReplace is a struct to help to concrete
// the karmada-metrics-adapter AA Service bytes with the AAService template
type AAServiceReplace struct {
Namespace string
HostClusterDomain string
}
Loading