使用kind测试karmada

Karmada是华为开源的Kubernetes管理系统,支持跨多集群应用部署。本文介绍了Karmada的工作原理,详细展示了从Karmada控制器管理器到Execution Controller的工作流程,以及如何在kind上部署Karmada,包括创建子集群和添加子集群的步骤。测试部分验证了Karmada的部署效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Karmada(Kubernetes Armada)是一个华为开源的 Kubernetes 管理系统,基于 Kubernetes Federation v1 和 v2 开发,它可以跨多个 Kubernetes 集群和云运行云原生应用程序,而无需对应用程序进行更改。通过直接使用 Kubernetes 原生 API 并提供高级调度功能。Karmada通过PropagationPolicy,Binding与Work的抽象,可以将任意资源同步到匹配的cluster,并通过Policy进行差异化的配置,并进行重载,通过ReplicaSchedulingPolicy配置集群权重,配合hpa,使应用可以在多个集群间伸缩。

Karmada是怎么工作的

Karmada架构图

在这里插入图片描述

组件 原生 说明
etcd ETCD存储karmada API对象
kube-apiserver API Server是所有其他组件都可以与之通信的REST端点
kube-controller-manager Controller Manager将根据您通过API服务器创建的API对象执行操作
karmada-controller-manager karmada karmada controller-manager, 监听相关资源,创建ResourceBinding及ClusterResourceBinding,更新work,同步集群间资源
karmada-scheduler karmada 加载Policy,分析资源,更新work
karmada-webhook karmada karmada资源校验
karmada-agent karmada 取决于Cluster的同步模式,若是push模式,则不需要部署,否则需要部署到管理的集群中

Karmada控制器管理器运行各种控制器,这些控制器监视karmada对象,然后与基础集群的API服务器对话以创建常规的Kubernetes资源。

(1)Cluster Controller:将Kubernetes集群附加到Karmada,以通过创建集群对象来管理集群的生命周期。

(2)Policy Controller:控制器监视PropagationPolicy对象。添加PropagationPolicy对象时,它将选择与resourceSelector匹配的一组资源,并为每个资源对象创建ResourceBinding。

(3)Binding Controller:控制器监视ResourceBinding对象,并使用单个资源清单创建与每个集群相对应的Work对象。

(4)Execution Controller:控制器监视工作对象,当创建工作对象时,它将资源分配给成员集群。

Karmada工作流

流程图

Resource template:Karmada使用Kubernetes自己的API定义的Resource template,以使其易于与Kubernetes上已采用的现有工具集成

Propagation Policy::Karmada提供了Propagation(placement) Policy API,以定义多集群调度和传播需求。

  • 支持策略1:n映射:工作负载,用户无需在每次创建联合应用程序时都指出调度约束
  • 使用默认策略,用户可以仅与K8s API进行交互

Override Policy:Karmada提供独立的Override Policy API,用于专门化与群集相关的配置自动化。例如:

  • 根据成员群集区域覆盖镜像
  • 根据云提供商覆盖StorageClass
启动流程

创建一个Deployment (kubectl)→ PropagationPolicy(kubectl) → ResourceBinding(controller) → Work(按照集群区分) → 同步资源
创建一个ClusterRole(kubectl) → ClusterPropagationPolicy(kubectl) → ClusterResourceBinding(controller) → Work(按照集群区分) → 同步资源

1、用户通过kukectl或者api 提交一个资源(cluster resource or namespace resource),此时,资源只存在于karmada的etcd中

2、用户通过kukectl或者api 创建PropagationPolicy(或ClusterPropagationPolicy),karmada-controller-manager会监听PropagationPolicy的创建事件,创建ResourceBinding(ClusterResourceBinding),然后创建work,

karmada-controller-manager会监听各个集群的资源,更新work及work status

3、karmada-scheduler监听资源、Policy、Binding、Work等信息,更新Work

karmada部署

安装karmadactl
部署控制端
git clone https://github.com/karmada-io/karmada.git
cd karmada

hack/local-up-karmada.s 

该脚本hack/local-up-karmada.sh将为您执行以下任务:

  • 启动Kubernetes集群karmada-host以运行karmada控制平面
  • 根据当前代码库构建karmada控制平面组件
  • 在集群karmada-host上部署karmada控制平面组件,包含etcd、kube-apiserver、kube-controller-manager等k8s组件及自身组件karmada-controller-manager、karmada-scheduler、karmada-webhook

此脚本会在kind启动的Kubernetes集群中部署一整套karmada的依赖,包括etcd,apiserver,

这样,karmada就部署完成了

kubectl --kubeconfig  ~/.kube/karmada.config config use-context karmada-host
cp ~/.kube/karmada.config ~/.kube/karmada-host.config
kubectl --kubeconfig  ~/.kube/karmada.config config use-context karmada-apiserver
alias kmasterkubectl="kubectl --kubeconfig  ~/.kube/karmada.config"
alias khostkubectl="kubectl --kubeconfig  ~/.kube/karmada-host.config"

分别查看如下:

zxl@zxl:~$ khostkubectl get pod -A  #kind 启动的k8s集群
NAMESPACE            NAME                                                 READY   STATUS    RESTARTS   AGE
karmada-system       etcd-0                                               1/1     Running   0          18h
karmada-system 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值