Karmada (Kubernetes Armada) is a Kubernetes management system that enables you to run your cloud-native applications across multiple Kubernetes clusters and clouds, with no changes to your applications. By speaking Kubernetes-native APIs and providing advanced scheduling capabilities, Karmada enables truly open, multi-cloud Kubernetes.
Karmada aims to provide turnkey automation for multi-cluster application management in multi-cloud and hybrid cloud scenarios, with key features such as centralized multi-cloud management, high availability, failure recovery, and traffic scheduling.
Switch to the root
directory of the repo.
$ helm install karmada -n karmada-system --create-namespace ./charts
- Kubernetes 1.16+
- helm v3+
To install the chart with the release name karmada
in namespace karmada-system
:
Switch to the root
directory of the repo.
$ helm install karmada -n karmada-system --create-namespace ./charts
Get kubeconfig from the cluster:
$ kubectl get secret -n karmada-system karmada-kubeconfig -o jsonpath={.data.kubeconfig} | base64 -d
Tip: List all releases using
helm list
To uninstall/delete the karmada
helm release in namespace karmada-system
:
$ helm uninstall karmada -n karmada-system
The command removes all the Kubernetes components associated with the chart and deletes the release.
Edited values.yaml
installMode: "agent"
agent:
clusterName: "member"
## kubeconfig of the karmada
kubeconfig:
caCrt: |
-----BEGIN CERTIFICATE-----
XXXXXXXXXXXXXXXXXXXXXXXXXXX
-----END CERTIFICATE-----
crt: |
-----BEGIN CERTIFICATE-----
XXXXXXXXXXXXXXXXXXXXXXXXXXX
-----END CERTIFICATE-----
key: |
-----BEGIN RSA PRIVATE KEY-----
XXXXXXXXXXXXXXXXXXXXXXXXXXX
-----END RSA PRIVATE KEY-----
server: "https://apiserver.karmada"
Execute command (switch to the root
directory of the repo, and sets the current-context
in a kubeconfig file)
$ kubectl config use-context member
$ helm install karmada-agent -n karmada-system --create-namespace ./charts
Edited values.yaml
installMode: "component"
components: [
"schedulerEstimator"
]
schedulerEstimator:
clusterName: "member"
## kubeconfig of the member cluster
kubeconfig:
caCrt: |
-----BEGIN CERTIFICATE-----
XXXXXXXXXXXXXXXXXXXXXXXXXXX
-----END CERTIFICATE-----
crt: |
-----BEGIN CERTIFICATE-----
XXXXXXXXXXXXXXXXXXXXXXXXXXX
-----END CERTIFICATE-----
key: |
-----BEGIN RSA PRIVATE KEY-----
XXXXXXXXXXXXXXXXXXXXXXXXXXX
-----END RSA PRIVATE KEY-----
server: "https://apiserver.member"
Execute command (switch to the root
directory of the repo, and sets the current-context
in a kubeconfig file)
$ kubectl config use-context host
$ helm install karmada-scheduler-estimator -n karmada-system ./charts
Name | Description | Value |
---|---|---|
installMode |
InstallMode "host", "agent" and "component" are provided, "host" means install karmada in the control-cluster, "agent" means install agent client in the member cluster, "component" means install selected components in the control-cluster | "host" |
clusterDomain |
Default cluster domain for karmada | "cluster.local" |
components |
Selected components list, selectable values: "schedulerEstimator" | [] |
certs.mode |
Mode "auto" and "custom" are provided, "auto" means auto generate certificate, "custom" means use user certificate | "auto" |
certs.auto.expiry |
Expiry of the certificate | "43800h" |
certs.auto.hosts |
Hosts of the certificate | ["kubernetes.default.svc","*.etcd.karmada-system.svc.cluster.local","*.karmada-system.svc.cluster.local","*.karmada-system.svc","localhost","127.0.0.1"] |
certs.custom.caCrt |
CA CRT of the certificate | "" |
certs.custom.crt |
CRT of the certificate | "" |
certs.custom.key |
KEY of the certificate | "" |
certs.custom.frontProxyCaCrt |
CA CRT of the front proxy certificate | "" |
certs.custom.frontProxyCrt |
CRT of the front proxy certificate | "" |
certs.custom.frontProxyKey |
KEY of the front proxy certificate | "" |
etcd.mode |
Mode "external" and "internal" are provided, "external" means use external ectd, "internal" means install a etcd in the cluster | "internal" |
etcd.external.servers |
Servers of etcd | "" |
etcd.external.registryPrefix |
Use to registry prefix of etcd | "/registry/karmada" |
etcd.external.certs.caCrt |
CA CRT of the etcd certificate | "" |
etcd.external.certs.crt |
CRT of the etcd certificate | "" |
etcd.external.certs.key |
KEY of the etcd certificate | "" |
etcd.internal.replicaCount |
Target replicas of the etcd | 1 |
etcd.internal.image.repository |
Image of the etcd | "k8s.gcr.io/etcd" |
etcd.internal.image.pullPolicy |
Image pull policy of the etcd | "IfNotPresent" |
etcd.internal.image.tag |
Image tag of the etcd | "3.4.13-0" |
etcd.internal.storageType |
StorageType of the etcd, accepts "hostPath", "pvc" | "hostPath" |
etcd.internal.pvc.storageClass |
StorageClass of the etcd, takes effect when etcd.internal.storageType is "pvc" |
"" |
etcd.internal.pvc.size |
Storage size of the etcd, takes effect when etcd.internal.storageType is "pvc" |
"" |
etcd.internal.resources |
Resource quota of the etcd | {} |
agent.clusterName |
Name of the member cluster | "" |
agent.kubeconfig.caCrt |
CA CRT of the karmada certificate | "" |
agent.kubeconfig.crt |
CRT of the karmada certificate | "" |
agent.kubeconfig.key |
KEY of the karmada certificate | "" |
agent.kubeconfig.server |
API-server of the karmada | "" |
agent.labels |
Labels of the agent deployment | {"app": "karmada-agent"} |
agent.replicaCount |
Target replicas of the agent | 1 |
agent.podLabels |
Labels of the agent pods | {} |
agent.podAnnotations |
Annotaions of the agent pods | {} |
agent.imagePullSecrets |
Image pull secret of the agent | [] |
agent.image.repository |
Image of the agent | "swr.ap-southeast-1.myhuaweicloud.com/karmada/karmada-agent" |
agent.image.tag |
Image tag of the agent | "latest" |
agent.image.pullPolicy |
Image pull policy of the agent | "IfNotPresent" |
agent.resources |
Resource quota of the agent | {} |
agent.nodeSelector |
Node selector of the agent | {} |
agent.affinity |
Affinity of the agent | {} |
agent.tolerations |
Tolerations of the agent | [] |
scheduler.labels |
Labels of the schedeler deployment | {"app": "karmada-scheduler"} |
scheduler.replicaCount |
Target replicas of the scheduler | 1 |
scheduler.podLabels |
Labels of the scheduler pods | {} |
scheduler.podAnnotations |
Annotaions of the scheduler pods | {} |
scheduler.imagePullSecrets |
Image pull secret of the scheduler | [] |
scheduler.image.repository |
Image of the scheduler | "swr.ap-southeast-1.myhuaweicloud.com/karmada/karmada-scheduler" |
scheduler.image.tag |
Image tag of the scheduler | "latest" |
scheduler.image.pullPolicy |
Image pull policy of the scheduler | "IfNotPresent" |
scheduler.resources |
Resource quota of the scheduler | {} |
scheduler.nodeSelector |
Node selector of the scheduler | {} |
scheduler.affinity |
Affinity of the scheduler | {} |
scheduler.tolerations |
Tolerations of the scheduler | [] |
webhook.labels |
Labels of the webhook deployment | {"app": "karmada-webhook"} |
webhook.replicaCount |
Target replicas of the webhook | 1 |
webhook.podLabels |
Labels of the webhook pods | {} |
webhook.podAnnotations |
Annotaions of the webhook pods | {} |
webhook.imagePullSecrets |
Image pull secret of the webhook | [] |
webhook.image.repository |
Image of the webhook | "swr.ap-southeast-1.myhuaweicloud.com/karmada/karmada-webhook" |
webhook.image.tag |
Image tag of the webhook | "latest" |
webhook.image.pullPolicy |
Image pull policy of the webhook | "IfNotPresent" |
webhook.resources |
Resource quota of the webhook | {} |
webhook.nodeSelector |
Node selector of the webhook | {} |
webhook.affinity |
Affinity of the webhook | {} |
webhook.tolerations |
Tolerations of the webhook | [] |
controllerManager.labels |
Labels of the karmada-controller-manager deployment | {"app": "karmada-controller-manager"} |
controllerManager.replicaCount |
Target replicas of the karmada-controller-manager | 1 |
controllerManager.podLabels |
Labels of the karmada-controller-manager pods | {} |
controllerManager.podAnnotations |
Annotaions of the karmada-controller-manager pods | {} |
controllerManager.imagePullSecrets |
Image pull secret of the karmada-controller-manager | [] |
controllerManager.image.repository |
Image of the karmada-controller-manager | "swr.ap-southeast-1.myhuaweicloud.com/karmada/karmada-controller-manager" |
controllerManager.image.tag |
Image tag of the karmada-controller-manager | "latest" |
controllerManager.image.pullPolicy |
Image pull policy of the karmada-controller-manager | "IfNotPresent" |
controllerManager.resources |
Resource quota of the karmada-controller-manager | {} |
controllerManager.nodeSelector |
Node selector of the karmada-controller-manager | {} |
controllerManager.affinity |
Affinity of the karmada-controller-manager | {} |
controllerManager.tolerations |
Tolerations of the karmada-controller-manager | [] |
apiServer.labels |
Labels of the karmada-apiserver deployment | {"app": "karmada-apiserver"} |
apiServer.replicaCount |
Target replicas of the karmada-apiserver | 1 |
apiServer.podLabels |
Labels of the karmada-apiserver pods | {} |
apiServer.podAnnotations |
Annotaions of the karmada-apiserver pods | {} |
apiServer.imagePullSecrets |
Image pull secret of the karmada-apiserver | [] |
apiServer.image.repository |
Image of the karmada-apiserver | "k8s.gcr.io/kube-apiserver" |
apiServer.image.tag |
Image tag of the karmada-apiserver | "v1.19.1" |
apiServer.image.pullPolicy |
Image pull policy of the karmada-apiserver | "IfNotPresent" |
apiServer.resources |
Resource quota of the karmada-apiserver | {} |
apiServer.hostNetwork |
Deploy karmada-apiserver with hostNetwork. If there are multiple karmadas in one cluster, you'd better set it to "false" | "true" |
apiServer.nodeSelector |
Node selector of the karmada-apiserver | {} |
apiServer.affinity |
Affinity of the karmada-apiserver | {} |
apiServer.tolerations |
Tolerations of the karmada-apiserver | [] |
apiServer.serviceType |
Service type of apiserver, accepts "ClusterIP", "NodePort", "LoadBalancer" | "ClusterIP" |
apiServer.nodePort |
Node port for apiserver, takes effect when apiServer.serviceType is "NodePort". If no port is specified, the nodePort will be automatically assigned. |
0 |
aggregatedApiServer.labels |
Labels of the karmada-aggregated-apiserver deployment | {"app": "karmada-aggregated-apiserver"} |
aggregatedApiServer.replicaCount |
Target replicas of the karmada-aggregated-apiserver | 1 |
aggregatedApiServer.podLabels |
Labels of the karmada-aggregated-apiserver pods | {} |
aggregatedApiServer.podAnnotations |
Annotaions of the karmada-aggregated-apiserver pods | {} |
aggregatedApiServer.imagePullSecrets |
Image pull secret of the karmada-aggregated-apiserver | [] |
aggregatedApiServer.image.repository |
Image of the karmada-aggregated-apiserver | "swr.ap-southeast-1.myhuaweicloud.com/karmada/karmada-aggregated-apiserver" |
aggregatedApiServer.image.tag |
Image tag of the karmada-aggregated-apiserver | "latest" |
aggregatedApiServer.image.pullPolicy |
Image pull policy of the karmada-aggregated-apiserver | "IfNotPresent" |
aggregatedApiServer.resources |
Resource quota of the karmada-aggregated-apiserver | {requests: {cpu: 100m}} |
aggregatedApiServer.nodeSelector |
Node selector of the karmada-aggregated-apiserver | {} |
aggregatedApiServer.affinity |
Affinity of the karmada-aggregated-apiserver | {} |
aggregatedApiServer.tolerations |
Tolerations of the karmada-aggregated-apiserver | [] |
kubeControllerManager.labels |
Labels of the kube-controller-manager deployment | {"app": "kube-controller-manager"} |
kubeControllerManager.replicaCount |
Target replicas of the kube-controller-manager | 1 |
kubeControllerManager.podLabels |
Labels of the kube-controller-manager pods | {} |
kubeControllerManager.podAnnotations |
Annotaions of the kube-controller-manager pods | {} |
kubeControllerManager.imagePullSecrets |
Image pull secret of the kube-controller-manager | [] |
kubeControllerManager.image.repository |
Image of the kube-controller-manager | "k8s.gcr.io/kube-controller-manager" |
kubeControllerManager.image.tag |
Image tag of the kube-controller-manager | "v1.19.1" |
kubeControllerManager.image.pullPolicy |
Image pull policy of the kube-controller-manager | "IfNotPresent" |
kubeControllerManager.resources |
Resource quota of the kube-controller-manager | {} |
kubeControllerManager.nodeSelector |
Node selector of the kube-controller-manager | {} |
kubeControllerManager.affinity |
Affinity of the kube-controller-manager | {} |
kubeControllerManager.tolerations |
Tolerations of the kube-controller-manager | [] |
schedulerEstimator.clusterName |
Name of the member cluster | "" |
schedulerEstimator.kubeconfig.caCrt |
CA CRT of the certificate | "" |
schedulerEstimator.kubeconfig.crt |
CRT of the certificate | "" |
schedulerEstimator.kubeconfig.key |
KEY of the certificate | "" |
schedulerEstimator.kubeconfig.server |
API-server of the member cluster | "" |
schedulerEstimator.labels |
Labels of the scheduler-estimator deployment | {} |
schedulerEstimator.replicaCount |
Target replicas of the scheduler-estimator | 1 |
schedulerEstimator.podLabels |
Labels of the scheduler-estimator pods | {} |
schedulerEstimator.podAnnotations |
Annotaions of the scheduler-estimator pods | {} |
schedulerEstimator.imagePullSecrets |
Image pull secret of the scheduler-estimator | [] |
schedulerEstimator.image.repository |
Image of the scheduler-estimator | "swr.ap-southeast-1.myhuaweicloud.com/karmada/karmada-scheduler-estimator" |
schedulerEstimator.image.tag |
Image tag of the scheduler-estimator | "latest" |
schedulerEstimator.image.pullPolicy |
Image pull policy of the scheduler-estimator | "IfNotPresent" |
schedulerEstimator.resources |
Resource quota of the scheduler-estimator | {} |
schedulerEstimator.nodeSelector |
Node selector of the scheduler-estimator | {} |
schedulerEstimator.affinity |
Affinity of the scheduler-estimator | {} |
schedulerEstimator.tolerations |
Tolerations of the scheduler-estimator | [] |