附051.Kubernetes Karmada kubectl 插件部署联邦及使用

发布于:2025-09-08 ⋅ 阅读:(23) ⋅ 点赞:(0)

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-karmada

root@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 高可用安装

001

  • 确认验证
    确认主要组件部署成功。
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可纳管多个集群,有两种主要方式:

  • 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.config

root@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: nginx
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: uhub.service.ucloud.cn/imxhy/nginx:1.29.0
        name: 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/v1
      kind: Deployment
      name: nginx
  placement:
    clusterAffinity:
      clusterNames:
        - host-cluster
    replicaScheduling:
      replicaDivisionPreference: Weighted
      replicaSchedulingType: Divided
      weightPreference:
        staticWeightList:
          - targetCluster:
              clusterNames:
                - member1
            weight: 1
root@master01:~/karmada# kubectl apply -f nginx_propagationpolicy.yaml
  • 确认调度结果
root@master01:~/karmada# kubectl config use-context kubernetes-admin@kubernetes

root@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 集群中。


网站公告

今日签到

点亮在社区的每一天
去签到