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

附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://www.xdnf.cn/news/20433.html

相关文章:

  • C++_哈希
  • 基于阿里云ECS搭建Tailscale DERP中继服务器:提升跨网络连接速度
  • 前端登录鉴权详解
  • C++面试10——构造函数、拷贝构造函数和赋值运算符
  • 西门子S7-200 SMART PLC:编写最基础的“起保停”程序
  • [特殊字符] 从零到一:打造你的VSCode圈复杂度分析插件
  • Linux内核源码获取与编译安装完整指南
  • Java8函数式编程之Stream API
  • 预闪为什么可以用来防红眼?
  • C/C++动态爱心
  • Caffeine Weigher
  • 蓓韵安禧DHA纯植物藻油纯净安全零添加守护母婴健康
  • 基于STM32智能阳台监控系统
  • Unity 如何使用ModbusTCP 和PLC通讯
  • 用 Go + HTML 实现 OpenHarmony 投屏(hdckit-go + WebSocket + Canvas 实战)
  • 《sklearn机器学习——绘制分数以评估模型》验证曲线、学习曲线
  • 鸿蒙Next开发指南:UIContext接口解析与全屏拉起元服务实战
  • DevOps实战(2) - 使用Arbess+GitPuk+Docker实现Java项目自动化部署
  • Rsyslog日志采集
  • 快捷:常见ocr学术数据集预处理版本汇总(适配mmocr)
  • js闭包问题
  • B.50.10.07-分布式锁核心原理与电商应用
  • 操作系统之内存管理
  • 从 0 到 1 学 sed 与 awk:Linux 文本处理的两把 “瑞士军刀”
  • 数据结构:栈和队列(下)
  • Qt控件:Item Views/Widgets
  • 国产数据库之YashanDB:新花怒放
  • 源滚滚AI编程SillyTavern酒馆配置Claude Code API教程
  • DeepSeek vs Anthropic:技术路线的正面冲突
  • Java基础 9.5