Karmada: 云原生多云容器编排平台
![Karmada: 云原生多云容器编排平台](https://static001.geekbang.org/infoq/12/12fea28f76b5b441ce86714592f136d7.png)
7 月 17 日,在 Cloud Native Days China 云原生多云多集群专场,华为云原生开源负责人王泽锋发表了《Karmada: 云原生多云容器编排平台》主题演讲,分享了在云原生多云多集群方面的思考与实践。
![](https://static001.geekbang.org/infoq/9c/9ca417b7efbcc7088e9a01b16e1d93c6.webp?x-oss-process=image/resize,p_80/format,jpg)
以下为演讲全文
根据最新的调查报告显示,超过 93%的企业正同时使用多个云厂商的服务。云原生技术和云市场不断成熟,多云、多集群部署已经成为常态,未来将是编程式多云管理服务的时代。
![](https://static001.geekbang.org/infoq/5f/5f2a84f06db9ed44554990d68e994314.webp?x-oss-process=image/resize,p_80/format,jpg)
云原生多云多集群的典型阶段
阶段一:一群孤岛
一致的集群运维
一致的应用交付
业务割裂,互不感知
数据孤岛、资源孤岛、流量孤岛
阶段二:威尼斯水城
统一应用交付(部署运维)
统一应用访问(流量分发)
统一资源分配(编排调度)
少量、小压力的跨集群业务访问
阶段 3:大航海时代
实例、数据、流量:
自动调度
自由伸缩
自由迁移
目前,从业界的产品和一些用户二次开发使用的进度来看,还处于从一群孤岛到威尼斯水城的过渡阶段,一些开源的软件和厂商的产品,大部分还是在做统一的集群生命周期管理与集群的目录,以方便快速的选择切换集群,外加集群的外部流量打通进行全局流量的分配等等。但像跨集群自动分配以及应用的跨集群等这些能力是缺失的。
现阶段,云原生多云多集群业务的编排也面临着诸多挑战:
1)集群繁多的重复劳动:运维工程师需要应对繁琐的集群配置、不同云厂商集群间的管理差异以及碎片化的 API 访问入口等问题;
2)业务过度分散的维护难题:应用在各集群的差异化配置繁琐;业务跨云访问以及集群间的应用同步难以管理。
3)集群的边界限制:应用的可用性受限于集群;资源调度、弹性伸缩受限于集群。
4)厂商绑定:业务部署的黏性问题,缺少自动化故障迁移;缺少中立的开源多云容器编排项目。
多集群容器编排的前世今生
![](https://static001.geekbang.org/infoq/ab/ab3f232bdb3504d7500a8be3a7d01256.webp?x-oss-process=image/resize,p_80/format,jpg)
Karmada:开源的云原生多云容器编排平台
![](https://static001.geekbang.org/infoq/6c/6c478c21abf476c9b249d9a53fe64671.webp?x-oss-process=image/resize,p_80/format,jpg)
上图为 Karmada 在开源社区技术全景图,Karmada 将以模块化的方式提供应用多集群部署、高可用调度、故障迁移、多集群服务发现和流量治理、多云集群生命周期管理等能力集,并面向多种典型的用户场景预置策略集,让用户可以结合企业实际情况自由定制适合自身的多云平台。
Karmada 重点会基于 Kubernetes 的原生 API 提供多集群应用管理的能力,帮助用户实现零代码改造甚至零 yaml 改造到多集群架构的迁移。在能力方面,我们主要帮助用户解决全网统一管理以及全网集群的统一管理,另外我们会内置典型的应用部署模型,包括两地三中心等。
Karmada 架构
![](https://static001.geekbang.org/infoq/a9/a9608d812127e84f2fd5acc9dd046658.webp?x-oss-process=image/resize,p_80/format,jpg)
Karmada 通过独立的 API 服务器(Karmada API Server)提供与其他组件进行通信的 REST 接口,包含 Kubernetes 原生 API 及 Karmada 扩展 API,而 Karmada 控制管理器根据用户创建的 API 对象执行操作, Karmada 调度器则实现应用在多集群中的调度。
Karmada 核心概念
![](https://static001.geekbang.org/infoq/71/712fb1cd29e41e1935dc730fce55ef20.webp?x-oss-process=image/resize,p_80/format,jpg)
Resource Template
K8s 原生 API 定义,包括 CRD
无需修改即可创建多集群应用
Propagation Policy
可重用的应用多集群调度策略
Resource Binding
通用类型,驱动内部流程
Override Policy
跨集群可重用的差异化配置策略
Work
子集群最终资源在联邦层的映射
Karmada API workflow
![](https://static001.geekbang.org/infoq/89/8989b411f7cc23682a5c7319190f5060.webp?x-oss-process=image/resize,p_80/format,jpg)
Karmada 内部工作流程
多集群应用部署
1)零改造 — 使用 K8s 原生 API 部署一个多集群应用
![](https://static001.geekbang.org/infoq/05/05f1917c84dd96242e3acf69a01b4cd6.webp?x-oss-process=image/resize,p_80/format,jpg)
示例策略:为所有 deployment 配置多 AZ 的 HA 部署方案
![](https://static001.geekbang.org/infoq/8b/8b89593037ea794eb50b1602afbcc56a.webp?x-oss-process=image/resize,p_80/format,jpg)
使用标准的 K8s API 定义部署应用
kubectl create -f nginx-deployment.yaml
2)Propagation Policy: 可重用的应用多集群调度策略
![](https://static001.geekbang.org/infoq/7c/7cd220e2dd5a7a13bd26c92e673bfaa4.webp?x-oss-process=image/resize,p_80/format,jpg)
resourceSelector
支持关联多种资源类型
支持使用 name 或 labelSelector 进行对象筛选
placement
clusterAffinity:
定义倾向调度的目标集群
支持通过 names 或 labelselector 筛选
clusterTolerations:
类似单集群中 Pod tolerations 和 node taints
spreadConstraints:
定义应用分发的 HA 策略
支持对集群动态分组:按 Region、AZ、特性 label 分组,实现不同层级的 HA
3)Override Policy: 跨集群可重用的差异化配置策略
![](https://static001.geekbang.org/infoq/e8/e8fbafb9dcc827beb75f572f5d72b935.webp?x-oss-process=image/resize,p_80/format,jpg)
resourceSelector
支持使用 name 或 labelSelector 进行对象筛选
overriders
支持多种 override 插件类型
plainTextOverrider :基础插件,纯文本操作替换
imageOverrider:针对容器镜像的差异化配置插件
4)Member Cluster API: 用户自助可查的资源池基本单元
![](https://static001.geekbang.org/infoq/5d/5d86c893d8ec8409cfbab724113f8f2e.webp?x-oss-process=image/resize,p_80/format,jpg)
syncMode
支持使用 Push 或 Pull 模式与集群进行同步
secretRef
分离 Push 模式下集群访问凭据,便于开放 clusters API 供用户自助查询
taints
集群级别 taint - toleration 机制,支持集群级资源预留及驱逐
kubernetesVersion, apiEnablements
K8s 版本,集群开启的 API 列表,支持基于 API 依赖的调度
resourceSummary
集群资源信息(容量、使用量、调度中)
Karmada 社区路标
目前,我们已经实现了 Q1 与 Q2 规划的特性,最新发布的 0.7 版本提供了多集群东西向服务发现,多集群外部流量接入目前在研发当中。版本的发布我们是保持一个月一个版本的频率,以让用户快速使用。在 Q4,我们计划重点集成业界已有的一些周边项目,并在今年完成整体技术栈的能力开发。
![](https://static001.geekbang.org/infoq/57/5743840e8dea3fe659e06668e033b414.webp?x-oss-process=image/resize,p_80/format,jpg)
附:Karmada 社区技术交流地址
项目地址:
https://github.com/karmada-io/karmada
Slack 地址:
完整演讲视频,点击下方观看:
评论