当前位置: 首页 > news >正文

附050.Kubernetes Karmada Helm部署联邦及使用

文章目录

    • karmada简介
      • karmada概述
    • karmada Helm部署
      • Kubernetes karmada介绍
      • 基础准备
        • Kubernetes集群
      • 获取chat包
      • 正式部署
    • karmada使用
      • karmada纳管集群
      • 查看memeber集群
        • 导出kubeconfig
        • 切换集群
      • 测试应用

karmada简介

karmada概述

参考:附049.Kubernetes Karmada Local-up部署联邦

karmada Helm部署

Kubernetes karmada介绍

Karmada(Kubernetes Karmada)是一个 Kubernetes 管理系统,它使您能够在多个 Kubernetes 集群和云中运行您的云原生应用程序,而无需对应用程序进行任何更改。通过使用 Kubernetes 原生 API 并提供高级调度功能,Karmada 实现了真正开放的、多云的 Kubernetes。

Karmada 旨在为多云和混合云场景中的多集群应用程序管理提供开箱即用的自动化,其关键特性包括集中式多云管理、高可用性、故障恢复和流量调度。

基础准备

Kubernetes集群

该方式是讲karmada以Kubernetes资源进行部署,在部署之前必须有一个Kubernetes集群,Kubernetes集群部署可参考:附045.Kubernetes_v1.33.2高可用部署架构二

提示:该方式部署还需要提前安装Helm,helm安装也可参考如上链接。

获取chat包

该方式安装,会在命名空间 karmada-system 中安装名为 karmada 的chat包。

root@master01:~# helm repo add karmada-charts https://raw.githubusercontent.com/karmada-io/karmada/master/charts
root@master01:~# helm repo list
root@master01:~# helm search repo karmada                #查看版本
NAME                            CHART VERSION   APP VERSION     DESCRIPTION                      
karmada-charts/karmada          v1.15.0         v1.1.0          A Helm chart for karmada         
karmada-charts/karmada-operator v1.15.0         v1.1.0          A Helm chart for karmada-operator

正式部署

参考默认配置,创建自定义配置:

  • 部署descheduler和search,
  • etcd保持持久化,利用集群已有的StorageClass。
组件安装位置作用必要性备注
deschedulerKarmada 控制面 (host cluster)全局决策者。监视所有成员集群状态,根据策略决定是否以及如何在集群间迁移工作负载。可选,但生产推荐在控制面做全局决策。
searchKarmada 控制面 (host cluster)提供全局搜索API。允许用户从一个地方(Karmada API)查询所有成员集群中的资源(如Pod, Service)。可选提供便利性,非核心功能。
root@master01:~# mkdir karmada
root@master01:~# cd karmada/
root@master01:~/karmada# helm show values karmada-charts/karmada > defaults-values.yamlroot@master01:~/karmada# vim my-values.yaml
components: - "descheduler"- "search"
etcd:internal:replicaCount: 1storageType: "persistentVolume"pvc:storageClass: "longhorn"size: "5G"root@master01:~/karmada# helm upgrade --install karmada karmada-charts/karmada --create-namespace --namespace karmada-system -f my-values.yaml

提示:可使用如下命令渲染为传统部署的 mainfests 文件。

root@master01:~/karmada# helm template karmada karmada-charts/karmada --namespace karmada-system -f my-values.yaml > karmada-manifests.yaml
  • 确认验证
    确认主要组件部署成功。
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              5m30s   10.10.30.93   worker02   <none>           <none>
karmada-aggregated-apiserver-7974c77ddb-2lbt6      1/1     Running   0              5m30s   10.10.30.80   worker02   <none>           <none>
karmada-apiserver-cc9bd8d5b-qld4b                  1/1     Running   0              5m30s   10.10.30.70   worker02   <none>           <none>
karmada-controller-manager-86d7d4cdc-nvs4b         1/1     Running   0              5m30s   10.10.30.71   worker02   <none>           <none>
karmada-descheduler-579dc78566-9r2sq               1/1     Running   0              5m29s   10.10.5.15    worker01   <none>           <none>
karmada-descheduler-579dc78566-h78kk               1/1     Running   0              5m29s   10.10.30.77   worker02   <none>           <none>
karmada-kube-controller-manager-55948f7b57-2mf87   1/1     Running   0              5m30s   10.10.30.76   worker02   <none>           <none>
karmada-scheduler-7bdb96b45-8fbdv                  1/1     Running   0              5m30s   10.10.30.78   worker02   <none>           <none>
karmada-search-75b647f567-f4d6v                    1/1     Running   0              5m29s   10.10.5.28    worker01   <none>           <none>
karmada-search-75b647f567-p64bx                    1/1     Running   0              5m29s   10.10.30.74   worker02   <none>           <none>
karmada-webhook-c77c9f797-rz6cz                    1/1     Running   0              5m30s   10.10.30.72   worker02   <none>           <none>

karmada使用

karmada纳管集群

使用karmada可纳管多个集群,有两种主要方式:

  • Helm安装agent

参考官方示例:Install agent

使用如下脚本可快速生成helm部署的values.yaml。

root@master01:~/karmada# vim mkagent.sh 
#!/bin/bash
#***************************************************************#
# ScriptName: mkagent.sh
# Author: xhy
# Create Date: 2025-09-05 16:32
# Modify Author: xhy
# Modify Date: 2025-09-05 16:33
# Version: v1
#***************************************************************#
#***************************************************************#
# 作用:
#   1. 自动检测操作系统 (Ubuntu/Debian 或 CentOS/RHEL)
#   2. 安装 yq
#   3. 从 karmada-system 的 karmada-kubeconfig secret 提取
#      CA/CRT/KEY 并生成 Helm values 文件
#***************************************************************#OUT_FILE=host-agent-values.yaml
CLUSTER_NAME="host-cluster"# 0. 安装 yq 工具
echo "[INFO] 正在检测系统并安装 yq ..."
if [ -f /etc/debian_version ]; thenapt-get update -yapt-get install -y yq
elif [ -f /etc/redhat-release ]; thenyum install -y epel-releaseyum install -y yq
elseecho "[WARN] 未识别的操作系统, 请手动安装 yq (>=v4.x)"exit 1
fi# 1. 获取 kubeconfig 数据
KARMADA_KUBECONFIG=$(kubectl -n karmada-system get secret karmada-kubeconfig \-o jsonpath='{.data.kubeconfig}' | base64 -d)# 2. 提取 CA/CRT/KEY/Server
CA=$(echo "$KARMADA_KUBECONFIG" | yq -r '.clusters[0].cluster."certificate-authority-data"' | base64 -d)
CRT=$(echo "$KARMADA_KUBECONFIG" | yq -r '.users[0].user."client-certificate-data"' | base64 -d)
KEY=$(echo "$KARMADA_KUBECONFIG" | yq -r '.users[0].user."client-key-data"' | base64 -d)
SERVER=$(echo "$KARMADA_KUBECONFIG" | yq -r '.clusters[0].cluster.server')# 3. 生成 values.yaml
cat > $OUT_FILE <<EOF
installMode: "agent"
agent:clusterName: "$CLUSTER_NAME"kubeconfig:caCrt: |
$(echo "$CA" | sed 's/^/      /')crt: |
$(echo "$CRT" | sed 's/^/      /')key: |
$(echo "$KEY" | sed 's/^/      /')server: "$SERVER"
EOFecho -e "\n[INFO] 已生成 $OUT_FILE"root@master01:~/karmada# bash mkagent.sh
root@master01:~/karmada# cat host-agent-values.yaml

释义:如上脚本可生成当前部署karmada集群的Kubernetes加入karmada的helm values部署文件。

root@master01:~/karmada# helm upgrade --install karmada-agent karmada-charts/karmada \-n karmada-system \-f host-agent-values.yaml
  • kubectl karmada join方式
    参考:附051.Kubernetes Karmada kubectl 插件部署联邦及使用

查看memeber集群

导出kubeconfig

将karmada-apiserver的kubeconfig导出到宿主机,然后可以在host-cluster进行kubectl的切换,从而实现集群的管理。

root@master01:~/karmada# kubectl -n karmada-system get secret karmada-kubeconfig -o jsonpath='{.data.kubeconfig}' | base64 -d > /root/.kube/karmada.configroot@master01:~/karmada# vim /etc/profile.d/custom_kubectl.sh 
export KUBECONFIG=/root/.kube/config:/root/.kube/karmada.config
source <(kubectl completion bash)root@master01:~/karmada# source /etc/profileroot@master01:~/karmada# kubectl -n karmada-system get svc karmada-apiserver -o jsonpath='{.spec.clusterIP}'
10.20.19.121root@master01:~/karmada# echo "10.20.19.121 karmada-apiserver.karmada-system.svc.cluster.local" | sudo tee -a /etc/hosts
切换集群

切换到联邦集群。

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   Pull   True    31m

测试应用

使用现有的一个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: nginxroot@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@kubernetes root@master01:~/karmada# kubectl get pods -o wide
NAME                     READY   STATUS    RESTARTS   AGE   IP             NODE       NOMINATED NODE   READINESS GATES
nginx-6bcdf8cdb8-bx9lq   1/1     Running   0          77s   10.10.30.118   worker02   <none>           <none>

结论:如上所示,使用 PropagationPolicy 可创建集群的调度策略。从而实现在联邦 api-server 中将对应的资源调度到指定的 Kubernetes 集群中。


文章转载自:

http://GGiGVgjU.xsLbm.cn
http://dqdPAJYP.xsLbm.cn
http://84LtInG5.xsLbm.cn
http://96zhgbS7.xsLbm.cn
http://rWfVFhIz.xsLbm.cn
http://VoSfqhYh.xsLbm.cn
http://v0z6vMZb.xsLbm.cn
http://VIFs9XmJ.xsLbm.cn
http://8VlJCBFJ.xsLbm.cn
http://QMefj0zY.xsLbm.cn
http://yEA6UywT.xsLbm.cn
http://tEkTyqUI.xsLbm.cn
http://5K2eZTUc.xsLbm.cn
http://FbEX8mrI.xsLbm.cn
http://QyMgCFIa.xsLbm.cn
http://gnRlNSrT.xsLbm.cn
http://2qWheKPA.xsLbm.cn
http://GjkOHph7.xsLbm.cn
http://g2vhUOVV.xsLbm.cn
http://0raTnW2N.xsLbm.cn
http://HITzRWs2.xsLbm.cn
http://SnbnKM2K.xsLbm.cn
http://mlbgguIe.xsLbm.cn
http://FLSdfCg5.xsLbm.cn
http://9YNvgxsh.xsLbm.cn
http://rO1lbv5k.xsLbm.cn
http://dkYIzFoS.xsLbm.cn
http://g2As4eDN.xsLbm.cn
http://ZZJhEfIm.xsLbm.cn
http://tf1BZzT8.xsLbm.cn
http://www.dtcms.com/a/369978.html

相关文章:

  • 【PCIe EP 设备入门学习专栏 -- 8 PCIe EP 架构详细介绍】
  • STM32HAL 快速入门(十九):UART 编程(二)—— 中断方式实现收发及局限分析
  • 【星闪】Hi2821 | PWM脉宽调制模块 + 呼吸灯例程
  • 具身智能模拟器:解决机器人实机训练场景局限与成本问题的创新方案
  • 【嵌入式】【科普】AUTOSAR学习路径
  • 大麦APP抢票-核心
  • Linux笔记---TCP套接字编程
  • SQL面试题及详细答案150道(81-100) --- 子查询篇
  • CentOS系统停服,系统迁移Ubuntu LTS
  • 基于Spring Boot的幼儿园管理系统
  • 《sklearn机器学习——聚类性能指标》Fowlkes-Mallows 得分
  • STAR-CCM+|雷诺数回顾
  • 设计整体 的 序分(三“释”)、正宗分(双“门”)和流通分(统一的通行表达式) 之3 “自明性”(腾讯元宝 之2)
  • MySQL集群高可用架构之组复制 (MGR)
  • GPT-5发布:统一智能体时代的开启——从“工具”到“协作者”的范式跃迁
  • 【iOS】push 和 present
  • 大数据毕业设计选题推荐-基于大数据的宫颈癌风险因素分析与可视化系统-Spark-Hadoop-Bigdata
  • 【xss基本介绍】
  • 无需公网IP,电脑随时与异地飞牛同步互联保持数据一致性
  • HTML 列表类型
  • 怎么用 tauri 创建一个桌面应用程序(Electron)
  • Redis《RedisSerializer》
  • 云原生的12个要素是什么?
  • uni-app倒计时公共组件 封装,倒计时组件
  • AI驱动的软件测试:革命性的自动化、缺陷检测与实验优化
  • 打包 Uniapp
  • Vue 项目性能优化实战
  • C++ Lambda 表达式完整指南
  • PlantSimulation 在汽车总装车间配送物流仿真中的应用
  • 浅谈前端框架