附051.Kubernetes Karmada kubectl 插件部署联邦及使用
文章目录
- karmada简介
- karmada概述
- karmada kubectl部署
- Karmada kubectl 插件
- 基础准备
- Kubernetes集群
- 安装karmada插件
- 正式部署
- karmada使用
- karmada纳管集群
- 查看memeber集群
- 导出kubeconfig
- 切换集群
- 测试应用
karmada简介
karmada概述
参考:附049.Kubernetes Karmada Local-up部署联邦
karmada kubectl部署
Karmada kubectl 插件
Karmada(Kubernetes Karmada)是一个 Kubernetes 管理系统,它使您能够在多个 Kubernetes 集群和云中运行您的云原生应用程序,而无需对应用程序进行任何更改。通过使用 Kubernetes 原生 API 并提供高级调度功能,Karmada 实现了真正开放的、多云的 Kubernetes。
Karmada 旨在为多云和混合云场景中的多集群应用程序管理提供开箱即用的自动化,其关键特性包括集中式多云管理、高可用性、故障恢复和流量调度。
kubectl-karmada 是允许你控制 Karmada 控制面的 Karmada 命令行工具,该工具表现为一个 kubectl 插件。
基础准备
Kubernetes集群
该方式是讲karmada以Kubernetes资源进行部署,在部署之前必须有一个Kubernetes集群,Kubernetes集群部署可参考:附045.Kubernetes_v1.33.2高可用部署架构二
提示:该方式部署还需要提前安装Helm,helm安装也可参考如上链接。
安装karmada插件
root@master01:~# mkdir karmada
root@master01:~# cd karmada/
root@master01:~/karmada# curl -s https://raw.githubusercontent.com/karmada-io/karmada/master/hack/install-cli.sh | sudo bash -s kubectl-karmadaroot@master01:~/karmada# kubectl karmada version
kubectl karmada version: version.Info{GitVersion:"v1.15.0", GitCommit:"d4402a750f6cdafdc267a638ec54ee4249a8d10b", GitShortCommit:"d4402a7", GitTreeState:"clean", BuildDate:"2025-08-30T11:04:38Z", GoVersion:"go1.24.6", Compiler:"gc", Platform:"linux/amd64"}
正式部署
etcd保持持久化,利用集群已有的StorageClass。
root@master01:~/karmada# kubectl karmada init \--namespace karmada-system \--etcd-storage-mode PVC \--storage-classes-name longhorn \--etcd-pvc-size 5Gi \--etcd-replicas 1 \--karmada-apiserver-replicas 1 \--cert-validity-period=87600h \--kube-image-mirror-country=cn
提示:若需要高可用安装,可将副本数调整为3,参考: 使用 CLI 高可用安装
- 确认验证
确认主要组件部署成功。
root@master01:~/karmada# kubectl -n karmada-system get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
etcd-0 1/1 Running 0 19m 10.10.30.112 worker02 <none> <none>
karmada-aggregated-apiserver-684b88cf6c-k8gqp 1/1 Running 0 18m 10.10.30.114 worker02 <none> <none>
karmada-apiserver-679fc77877-2qr7j 1/1 Running 0 18m 10.10.30.113 worker02 <none> <none>
karmada-controller-manager-6455d587d8-k7fdf 1/1 Running 0 17m 10.10.30.117 worker02 <none> <none>
karmada-scheduler-74bddd5b99-n62vc 1/1 Running 0 17m 10.10.30.116 worker02 <none> <none>
karmada-webhook-8df6b59d5-x88dj 1/1 Running 0 17m 10.10.30.118 worker02 <none> <none>
kube-controller-manager-c5b7c9f7b-m722r 1/1 Running 0 17m 10.10.30.115 worker02 <none> <none>
karmada使用
karmada纳管集群
使用karmada可纳管多个集群,有两种主要方式:
- Helm安装agent
参考:附050.Kubernetes Karmada Helm部署联邦及使用
- kubectl karmada join方式
root@master01:~/karmada# kubectl karmada join host-cluster \--cluster-kubeconfig=/root/.kube/config \--kubeconfig=/etc/karmada/karmada-apiserver.config
查看memeber集群
导出kubeconfig
kubectl karmada部署的联邦。其kubeconfig默认位于/etc/karmada/目录,然后可以在host-cluster进行kubectl的切换,从而实现集群的管理。
root@master01:~/karmada# cat /etc/karmada/karmada-apiserver.configroot@master01:~/karmada# vim /etc/profile.d/custom_kubectl.sh
export KUBECONFIG=$HOME/.kube/config:/etc/karmada/karmada-apiserver.config
source <(kubectl completion bash)root@master01:~/karmada# source /etc/profile
切换集群
切换到联邦集群。
root@master01:~/karmada# kubectl config use-context karmada-apiserver
root@master01:~/karmada# kubectl get clusters
NAME VERSION MODE READY AGE
host-cluster v1.33.2 Push True 4m35s
测试应用
使用现有的一个cluster集群,模拟应用的联邦集群调度。
- 创建部署
root@karmada:~/karmada# vim nginx_deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nginxlabels:app: nginx
spec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- image: uhub.service.ucloud.cn/imxhy/nginx:1.29.0name: nginx
root@master01:~/karmada# kubectl apply -f nginx_deployment.yaml
- 创建调度策略
root@karmada:~/karmada# vim nginx_propagationpolicy.yaml
apiVersion: policy.karmada.io/v1alpha1
kind: PropagationPolicy
metadata:name: nginx-propagation
spec:resourceSelectors:- apiVersion: apps/v1kind: Deploymentname: nginxplacement:clusterAffinity:clusterNames:- host-clusterreplicaScheduling:replicaDivisionPreference: WeightedreplicaSchedulingType: DividedweightPreference:staticWeightList:- targetCluster:clusterNames:- member1weight: 1
root@master01:~/karmada# kubectl apply -f nginx_propagationpolicy.yaml
- 确认调度结果
root@master01:~/karmada# kubectl config use-context kubernetes-admin@kubernetesroot@master01:~/karmada# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-6bcdf8cdb8-r4w6x 1/1 Running 0 52s 10.10.30.119 worker02 <none> <none>
结论:如上所示,使用 PropagationPolicy 可创建集群的调度策略。从而实现在联邦 api-server 中将对应的资源调度到指定的 Kubernetes 集群中。