Karmada: 云原生多云容器编排平台

7 月 17 日,在 Cloud Native Days China 云原生多云多集群专场,华为云原生开源负责人王泽锋发表了《Karmada: 云原生多云容器编排平台》主题演讲,分享了在云原生多云多集群方面的思考与实践。

以下为演讲全文
根据最新的调查报告显示,超过 93%的企业正同时使用多个云厂商的服务。云原生技术和云市场不断成熟,多云、多集群部署已经成为常态,未来将是编程式多云管理服务的时代。

云原生多云多集群的典型阶段
阶段一:一群孤岛
一致的集群运维
一致的应用交付
业务割裂,互不感知
数据孤岛、资源孤岛、流量孤岛
阶段二:威尼斯水城
统一应用交付(部署运维)
统一应用访问(流量分发)
统一资源分配(编排调度)
少量、小压力的跨集群业务访问
阶段 3:大航海时代
实例、数据、流量:
自动调度
自由伸缩
自由迁移
目前,从业界的产品和一些用户二次开发使用的进度来看,还处于从一群孤岛到威尼斯水城的过渡阶段,一些开源的软件和厂商的产品,大部分还是在做统一的集群生命周期管理与集群的目录,以方便快速的选择切换集群,外加集群的外部流量打通进行全局流量的分配等等。但像跨集群自动分配以及应用的跨集群等这些能力是缺失的。
现阶段,云原生多云多集群业务的编排也面临着诸多挑战:
1)集群繁多的重复劳动:运维工程师需要应对繁琐的集群配置、不同云厂商集群间的管理差异以及碎片化的 API 访问入口等问题;
2)业务过度分散的维护难题:应用在各集群的差异化配置繁琐;业务跨云访问以及集群间的应用同步难以管理。
3)集群的边界限制:应用的可用性受限于集群;资源调度、弹性伸缩受限于集群。
4)厂商绑定:业务部署的黏性问题,缺少自动化故障迁移;缺少中立的开源多云容器编排项目。
多集群容器编排的前世今生

Karmada:开源的云原生多云容器编排平台

上图为 Karmada 在开源社区技术全景图,Karmada 将以模块化的方式提供应用多集群部署、高可用调度、故障迁移、多集群服务发现和流量治理、多云集群生命周期管理等能力集,并面向多种典型的用户场景预置策略集,让用户可以结合企业实际情况自由定制适合自身的多云平台。
Karmada 重点会基于 Kubernetes 的原生 API 提供多集群应用管理的能力,帮助用户实现零代码改造甚至零 yaml 改造到多集群架构的迁移。在能力方面,我们主要帮助用户解决全网统一管理以及全网集群的统一管理,另外我们会内置典型的应用部署模型,包括两地三中心等。
Karmada 架构

Karmada 通过独立的 API 服务器(Karmada API Server)提供与其他组件进行通信的 REST 接口,包含 Kubernetes 原生 API 及 Karmada 扩展 API,而 Karmada 控制管理器根据用户创建的 API 对象执行操作, Karmada 调度器则实现应用在多集群中的调度。
Karmada 核心概念

Resource Template
K8s 原生 API 定义,包括 CRD
无需修改即可创建多集群应用
Propagation Policy
可重用的应用多集群调度策略
Resource Binding
通用类型,驱动内部流程
Override Policy
跨集群可重用的差异化配置策略
Work
子集群最终资源在联邦层的映射
Karmada API workflow

Karmada 内部工作流程
多集群应用部署
1)零改造 — 使用 K8s 原生 API 部署一个多集群应用

示例策略:为所有 deployment 配置多 AZ 的 HA 部署方案

使用标准的 K8s API 定义部署应用
kubectl create -f nginx-deployment.yaml
2)Propagation Policy: 可重用的应用多集群调度策略

resourceSelector
支持关联多种资源类型
支持使用 name 或 labelSelector 进行对象筛选
placement
clusterAffinity:
定义倾向调度的目标集群
支持通过 names 或 labelselector 筛选
clusterTolerations:
类似单集群中 Pod tolerations 和 node taints
spreadConstraints:
定义应用分发的 HA 策略
支持对集群动态分组:按 Region、AZ、特性 label 分组,实现不同层级的 HA
3)Override Policy: 跨集群可重用的差异化配置策略

resourceSelector
支持使用 name 或 labelSelector 进行对象筛选
overriders
支持多种 override 插件类型
plainTextOverrider :基础插件,纯文本操作替换
imageOverrider:针对容器镜像的差异化配置插件
4)Member Cluster API: 用户自助可查的资源池基本单元

syncMode
支持使用 Push 或 Pull 模式与集群进行同步
secretRef
分离 Push 模式下集群访问凭据,便于开放 clusters API 供用户自助查询
taints
集群级别 taint - toleration 机制,支持集群级资源预留及驱逐
kubernetesVersion, apiEnablements
K8s 版本,集群开启的 API 列表,支持基于 API 依赖的调度
resourceSummary
集群资源信息(容量、使用量、调度中)
Karmada 社区路标
目前,我们已经实现了 Q1 与 Q2 规划的特性,最新发布的 0.7 版本提供了多集群东西向服务发现,多集群外部流量接入目前在研发当中。版本的发布我们是保持一个月一个版本的频率,以让用户快速使用。在 Q4,我们计划重点集成业界已有的一些周边项目,并在今年完成整体技术栈的能力开发。

附:Karmada 社区技术交流地址
项目地址:
https://github.com/karmada-io/karmada
Slack 地址:
完整演讲视频,点击下方观看:
评论