安装 karmadactl:

# 下载最新版(以 Linux amd64 为例,其他平台请替换 URL 中的架构)
curl -LO https://github.com/karmada-io/karmada/releases/latest/download/karmadactl-linux-amd64.tgz
tar -xzf karmadactl-linux-amd64.tgz
sudo mv karmadactl /usr/local/bin/
karmadactl version

安装 karmada:找个单独的节点

sudo karmadactl init --kubeconfig number1-kubeconfig


~# sudo karmadactl init --kubeconfig number1 
I0928 08:08:12.600097  164125 deploy.go:355] kubeconfig file: number1, kubernetes: https://192.168.0.121:6443
W0928 08:08:12.648649  164125 node.go:52] The kubernetes cluster does not have a Master role.
I0928 08:08:12.648662  164125 node.go:60] Randomly select 3 Node IPs in the kubernetes cluster.
I0928 08:08:12.731710  164125 deploy.go:375] karmada apiserver ip: [192.168.0.121 192.168.0.122]
I0928 08:08:17.072329  164125 cert.go:254] Generate ca certificate success.
I0928 08:08:17.304936  164125 cert.go:254] Generate karmada certificate success.
I0928 08:08:17.638783  164125 cert.go:254] Generate apiserver certificate success.
I0928 08:08:17.697711  164125 cert.go:254] Generate front-proxy-ca certificate success.
I0928 08:08:17.864888  164125 cert.go:254] Generate front-proxy-client certificate success.
I0928 08:08:17.964092  164125 cert.go:254] Generate etcd-ca certificate success.
I0928 08:08:18.038878  164125 cert.go:254] Generate etcd-server certificate success.
I0928 08:08:18.550512  164125 cert.go:254] Generate etcd-client certificate success.
I0928 08:08:18.550698  164125 deploy.go:513] download crds file:https://github.com/karmada-io/karmada/releases/download/v1.19.0/crds.tar.gz
Downloading...[ 100.00% ]
Download complete.
......
I0928 08:10:16.199408  164125 deploy.go:654] Create karmada controller manager Deployment
I0928 08:10:35.206940  164125 deploy.go:662] Create karmada webhook Deployment
I0928 08:10:35.212460  164125 idempotency.go:296] Service karmada-system/karmada-webhook has been created or updated.

------------------------------------------------------------------------------------------------------
 █████   ████   █████████   ███████████   ██████   ██████   █████████   ██████████     █████████
░░███   ███░   ███░░░░░███ ░░███░░░░░███ ░░██████ ██████   ███░░░░░███ ░░███░░░░███   ███░░░░░███
 ░███  ███    ░███    ░███  ░███    ░███  ░███░█████░███  ░███    ░███  ░███   ░░███ ░███    ░███
 ░███████     ░███████████  ░██████████   ░███░░███ ░███  ░███████████  ░███    ░███ ░███████████
 ░███░░███    ░███░░░░░███  ░███░░░░░███  ░███ ░░░  ░███  ░███░░░░░███  ░███    ░███ ░███░░░░░███
 ░███ ░░███   ░███    ░███  ░███    ░███  ░███      ░███  ░███    ░███  ░███    ███  ░███    ░███
 █████ ░░████ █████   █████ █████   █████ █████     █████ █████   █████ ██████████   █████   █████
░░░░░   ░░░░ ░░░░░   ░░░░░ ░░░░░   ░░░░░ ░░░░░     ░░░░░ ░░░░░   ░░░░░ ░░░░░░░░░░   ░░░░░   ░░░░░
------------------------------------------------------------------------------------------------------
Karmada is installed successfully.

Register Kubernetes cluster to Karmada control plane.

Register cluster with 'Push' mode

Step 1: Use "karmadactl 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'| tr -d "\"'")
(In karmada)~# karmadactl --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: Create bootstrap token and generate the 'karmadactl register' command which will be used later.
~# karmadactl token create --print-register-command --kubeconfig=/etc/karmada/karmada-apiserver.config
This command will generate a registration command similar to:

karmadactl register 172.18.0.5:5443 --token t8xfio.640u9gp9obc72v5d --discovery-token-ca-cert-hash sha256:9cfa542ff48f43793d1816b1dd0a78ad574e349d8f6e005e6e32e8ab528e4244

Step 2: Use the output from Step 1 to register the cluster to the Karmada control plane. 
You need to specify the target member cluster by flag '--kubeconfig'
~# karmadactl register 172.18.0.5:5443 --token t8xfio.640u9gp9obc72v5d --discovery-token-ca-cert-hash sha256:9cfa542ff48f43793d1816b1dd0a78ad574e349d8f6e005e6e32e8ab528e4244 --kubeconfig=<path-to-member-cluster-kubeconfig>

Step 3: Show members of Karmada.
~# karmadactl --kubeconfig=/etc/karmada/karmada-apiserver.config get clusters

The karmadactl register command has several optional parameters for setting the properties of the member cluster. For more details, run:

~# karmadactl register --help

将k8s集群加入到karmada:

~# karmadactl --kubeconfig /etc/karmada/karmada-apiserver.config join number1 --cluster-kubeconfig=number1
cluster(number1) is joined successfully
root@qiyang:~# sudo kubectl --kubeconfig /etc/karmada/karmada-apiserver.config get clusters
NAME      VERSION   MODE   READY   AGE
number1   v1.34.3   Push   True    27s

加入第二个k8s集群到karmada:

~# karmadactl --kubeconfig /etc/karmada/karmada-apiserver.config join number2 --cluster-kubeconfig=number2
cluster(number2) is joined successfully
root@qiyang:~# sudo kubectl --kubeconfig /etc/karmada/karmada-apiserver.config get clusters
NAME      VERSION   MODE   READY   AGE
number1   v1.34.3   Push   True    2m20s
number2   v1.34.3   Push   True    10s

查看资源:

~# kubectl --kubeconfig /etc/karmada/karmada-apiserver.config get all -A
NAMESPACE        NAME                                   TYPE           CLUSTER-IP   EXTERNAL-IP                                       PORT(S)   AGE
default          service/kubernetes                     ClusterIP      10.96.0.1    <none>                                            443/TCP   13m
karmada-system   service/karmada-aggregated-apiserver   ExternalName   <none>       karmada-aggregated-apiserver.karmada-system.svc   <none>    12m

配置变量:

sudo cp /etc/karmada/karmada-apiserver.config ~/.kube/karmada.config
sudo chown $(id -u):$(id -g) ~/.kube/karmada.config
export KUBECONFIG=~/.kube/karmada.config

查看资源:

~# kubectl get all -A
NAMESPACE        NAME                                   TYPE           CLUSTER-IP   EXTERNAL-IP                                       PORT(S)   AGE
default          service/kubernetes                     ClusterIP      10.96.0.1    <none>                                            443/TCP   15m
karmada-system   service/karmada-aggregated-apiserver   ExternalName   <none>       karmada-aggregated-apiserver.karmada-system.svc   <none>    14m

视频:

bilibili.com/video/BV1q7DoYxEEX

高可用安装命令:

karmadctl init --crds $HOME/crds.tar.gz --karmada-apiserver-replicas=2 \
--etcd-replicas=3 --storage-classes-name='nfs-csi' --etcd-storage-mode="PVC" \
--kube-image-registry='registry.magedu.com/google_containers' --kube-image-tag="v1.34.3" \
--cert-external-ip='10.10.53.83' --cert-validity-period=87600h0m0s

karmadctl init:Karmada 控制面初始化命令

--crds:指定 CRD 压缩包路径

--karmada-apiserver-replicas=2:karmada-apiserver 副本数 2

--etcd-replicas=3:etcd 集群 3 副本

--storage-classes-name='nfs-csi':存储类使用 nfs-csi

--etcd-storage-mode="PVC":etcd 持久化采用 PVC 模式

--kube-image-registry:镜像仓库地址(magedu 自建镜像源)

--kube-image-tag="v1.34.3":Kubernetes 版本 v1.34.3

--cert-external-ip:证书绑定外部 IP

--cert-validity-period=87600h0m0s:证书有效期(10 年)