Skip to content

Commit

Permalink
feat: karmadactl adds the karmada-metrics-adapter addons.
Browse files Browse the repository at this point in the history
Signed-off-by: chaunceyjiang <chaunceyjiang@gmail.com>
  • Loading branch information
chaunceyjiang committed Jun 28, 2023
1 parent b005d5b commit fc975e8
Show file tree
Hide file tree
Showing 7 changed files with 389 additions and 10 deletions.
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

0 comments on commit fc975e8

Please sign in to comment.