跳转到文档内容
版本:v1.4

安装概述

前提条件

Karmada kubectl 插件

kubectl-karmada 是允许你控制 Karmada 控制面的 Karmada 命令行工具,该工具表现为一个 kubectl 插件。 有关安装说明,请参见安装 kubectl-karmada

Karmadactl

karmadactl 也是允许你控制 Karmada 控制面的 Karmada 命令行工具。 与 kubectl-karmada 相比,karmadactl 是一个完全专用于 Karmada 的 CLI 工具。 有关安装说明,请参见安装 karmadactl

备注

尽管以上两个工具的名字不同,但其关联的命令和选项完全相同。 这里以 kubectl-karmada 为例。如果替换为 karmadactl,也能工作得很好。

在实际使用中,你可以根据自己的需求选择一个 CLI 工具。

通过 Karmada 命令行工具安装 Karmada

在你自己的集群上安装 Karmada

假设你已将集群的 kubeconfig 文件放到了 $HOME/.kube/config 或用 KUBECONFIG 环境变量指定了该路径。 否则,你应将 --kubeconfig 标志设置为以下命令来指定该配置文件。

注:从 v1.0 开始可以使用 init 命令。

运行以下命令进行安装:

kubectl karmada init

安装过程需要大约 5 分钟。如果一切正常,你将看到类似的输出:

I1121 19:33:10.270959 2127786 tlsbootstrap.go:61] [bootstrap-token] configured RBAC rules to allow certificate rotation for all agent client certificates in the member cluster
I1121 19:33:10.275041 2127786 deploy.go:127] Initialize karmada bootstrap token
I1121 19:33:10.281426 2127786 deploy.go:397] create karmada kube controller manager Deployment
I1121 19:33:10.288232 2127786 idempotency.go:276] Service karmada-system/kube-controller-manager has been created or updated.
...
...
------------------------------------------------------------------------------------------------------
█████ ████ █████████ ███████████ ██████ ██████ █████████ ██████████ █████████
░░███ ███░ ███░░░░░███ ░░███░░░░░███ ░░██████ ██████ ███░░░░░███ ░░███░░░░███ ███░░░░░███
░███ ███ ░███ ░███ ░███ ░███ ░███░█████░███ ░███ ░███ ░███ ░░███ ░███ ░███
░███████ ░███████████ ░██████████ ░███░░███ ░███ ░███████████ ░███ ░███ ░███████████
░███░░███ ░███░░░░░███ ░███░░░░░███ ░███ ░░░ ░███ ░███░░░░░███ ░███ ░███ ░███░░░░░███
░███ ░░███ ░███ ░███ ░███ ░███ ░███ ░███ ░███ ░███ ░███ ███ ░███ ░███
█████ ░░████ █████ █████ █████ █████ █████ █████ █████ █████ ██████████ █████ █████
░░░░░ ░░░░ ░░░░░ ░░░░░ ░░░░░ ░░░░░ ░░░░░ ░░░░░ ░░░░░ ░░░░░ ░░░░░░░░░░ ░░░░░ ░░░░░
------------------------------------------------------------------------------------------------------
Karmada is installed successfully.
Register Kubernetes cluster to Karmada control plane.
Register cluster with 'Push' mode
Step 1: Use "kubectl karmada join" command to register the cluster to Karmada control plane. --cluster-kubeconfig is kubeconfig of the member cluster.
(In karmada)~# MEMBER_CLUSTER_NAME=$(cat ~/.kube/config | grep current-context | sed 's/: /\n/g'| sed '1d')
(In karmada)~# kubectl karmada --kubeconfig /etc/karmada/karmada-apiserver.config join ${MEMBER_CLUSTER_NAME} --cluster-kubeconfig=$HOME/.kube/config
Step 2: Show members of karmada
(In karmada)~# kubectl --kubeconfig /etc/karmada/karmada-apiserver.config get clusters
Register cluster with 'Pull' mode
Step 1: Use "kubectl karmada register" command to register the cluster to Karmada control plane. "--cluster-name" is set to cluster of current-context by default.
(In member cluster)~# kubectl karmada register 172.18.0.3:32443 --token lm6cdu.lcm4wafod2jmjvty --discovery-token-ca-cert-hash sha256:9bf5aa53d2716fd9b5568c85db9461de6429ba50ef7ade217f55275d89e955e4
Step 2: Show members of karmada
(In karmada)~# kubectl --kubeconfig /etc/karmada/karmada-apiserver.config get clusters

Karmada 的组件默认安装在 karmada-system 命名空间中,你可以通过以下命令查看:

kubectl get deployments -n karmada-system
NAME READY UP-TO-DATE AVAILABLE AGE
karmada-aggregated-apiserver 1/1 1 1 102s
karmada-apiserver 1/1 1 1 2m34s
karmada-controller-manager 1/1 1 1 116s
karmada-scheduler 1/1 1 1 119s
karmada-webhook 1/1 1 1 113s
kube-controller-manager 1/1 1 1 2m3s

karmada-etcd 被安装为 StatefulSet,通过以下命令查看:

kubectl get statefulsets -n karmada-system
NAME READY AGE
etcd 1/1 28m

Karmada 的配置文件默认创建到 /etc/karmada/karmada-apiserver.config

离线安装

安装 Karmada 时,kubectl karmada init 默认将从 Karmada 官网 release 页面(例如 https://github.com/karmada-io/karmada/releases/tag/v0.10.1)下载 API(CRD),并从官方镜像仓库加载镜像。

如果你要离线安装 Karmada,你可能必须指定 API tar 文件和镜像。

使用 --crds 标志指定 CRD 文件,例如:

kubectl karmada init --crds /$HOME/crds.tar.gz

你可以指定 Karmada 组件的镜像,以 karmada-controller-manager 为例:

kubectl karmada init --karmada-controller-manager-image=example.registry.com/library/karmada-controller-manager:1.0 

高可用部署

使用 --karmada-apiserver-replicas--etcd-replicas 标志指定副本数(默认为 1)。

kubectl karmada init --karmada-apiserver-replicas 3 --etcd-replicas 3

在 Kind 集群中安装 Karmada

kind 是一个使用 Docker 容器“节点”运行本地 Kubernetes 集群的工具。 它主要设计用于测试 Kubernetes 本身,并非用于生产。

通过 hack/create-cluster.sh 创建名为 host 的一个集群:

hack/create-cluster.sh host $HOME/.kube/host.config

通过命令 kubectl karmada init 安装 Karmada v1.2.0:

kubectl karmada init --crds https://github.com/karmada-io/karmada/releases/download/v1.2.0/crds.tar.gz --kubeconfig=$HOME/.kube/host.config

检查已安装的组件:

kubectl get pods -n karmada-system --kubeconfig=$HOME/.kube/host.config
NAME READY STATUS RESTARTS AGE
etcd-0 1/1 Running 0 2m55s
karmada-aggregated-apiserver-84b45bf9b-n5gnk 1/1 Running 0 109s
karmada-apiserver-6dc4cf6964-cz4jh 1/1 Running 0 2m40s
karmada-controller-manager-556cf896bc-79sxz 1/1 Running 0 2m3s
karmada-scheduler-7b9d8b5764-6n48j 1/1 Running 0 2m6s
karmada-webhook-7cf7986866-m75jw 1/1 Running 0 2m
kube-controller-manager-85c789dcfc-k89f8 1/1 Running 0 2m10s

通过 Helm Chart Deployment 安装 Karmada

请参阅通过 Helm 安装

通过二进制安装 Karmada

请参阅通过二进制安装

从源代码安装 Karmada

请参阅从源代码安装

为开发环境安装 Karmada

如果你要试用 Karmada,我们推荐用 hack/local-up-karmada.sh 构建一个开发环境,该脚本将为你执行以下任务:

  • 通过 kind 启动一个 Kubernetes 集群以运行 Karmada 控制面(也称为 host cluster)。
  • 基于当前代码库构建 Karmada 控制面组件。
  • host cluster 上部署 Karmada 控制面组件。
  • 创建成员集群并接入 Karmada。

1. 克隆 Karmada 仓库到你的机器:

git clone https://github.com/karmada-io/karmada

或替换你的 GitHub ID 来使用你的 fork 仓库:

git clone https://github.com/<GitHub ID>/karmada

2. 更改为 karmada 目录:

cd karmada

3. 部署并运行 Karmada 控制面:

运行以下脚本:

hack/local-up-karmada.sh

该脚本将为你执行以下任务:

  • 启动一个 Kubernetes 集群以运行 Karmada 控制面(也称为 host cluster)。
  • 基于当前代码库构建 Karmada 控制面组件。
  • host cluster 上部署 Karmada 控制面组件。
  • 创建成员集群并接入 Karmada。

如果一切良好,在脚本输出结束时,你将看到类似以下的消息:

Local Karmada is running.

To start using your Karmada environment, run:
export KUBECONFIG="$HOME/.kube/karmada.config"
Please use 'kubectl config use-context karmada-host/karmada-apiserver' to switch the host and control plane cluster.

To manage your member clusters, run:
export KUBECONFIG="$HOME/.kube/members.config"
Please use 'kubectl config use-context member1/member2/member3' to switch to the different member cluster.

4. 检查注册的集群

kubectl get clusters --kubeconfig=/$HOME/.kube/karmada.config

你将看到类似以下的输出:

NAME      VERSION   MODE   READY   AGE
member1 v1.23.4 Push True 7m38s
member2 v1.23.4 Push True 7m35s
member3 v1.23.4 Pull True 7m27s

有 3 个名为 member1member2member3 的集群已使用 PushPull 模式进行了注册。