下一个 Kubernetes 前沿:多集群管理

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 蚂蚁集团运行着全球最大的 Kubernetes*(内部称为 Sigma)* 集群之一。Kubernetes 社区官方以 5K node 作为 Kubernetes 规模化的事实标准,而蚂蚁集团在 2019 年的时候,就已经维护着单集群规模超过 1W node 的 Kubernetes 集群。

📄

文|金敏(蚂蚁集团技术专家)

   邱见(Red Hat)

校对| 冯泳(蚂蚁集团资深技术专家)

本文 3311 字 阅读 6 分钟

从最初 Kubernetes 技术问世,业界一遍一遍的质疑它能否能经得住生产级的考验,到今天许多大型企业已经采用 Kubernetes 技术“云化”之前大规模的基础设施,在企业内部创建了数十个甚至数百个集群。

Kubernetes 原生的管理能力目前仍然停留在单集群级别。每一个集群可以稳定地自治运行,但是却缺乏横贯多个集群的统筹管理能力。基础设施的建立者需要协调分散在各处的管理组件,形成一个统一的管理平台。

通过它,运维管理人员能够获知多集群水位的变化,节点健康状态的震荡等信息;业务应用负责人能够决策如何调配应用服务在各个集群中的部署分布;应用的运维人员能够获知服务状态,下发腾挪的策略。

与多集群相关的创新正在不断涌现。例如 ClusterAPI 和 Submariner 就是处理特定多集群管理问题比较成功的项目。

而本文要讨论的是那些试图解决企业在面对多集群管理时遇到的所有问题的技术探索。

在过去五年中,中国的技术公司蚂蚁集团在多集群管理的思考、使用和实施等方面学习到了很多宝贵的经验。

蚂蚁集团管理着遍布全球的数十个 Kubernetes 集群,每个集群平均拥有数千个节点(服务器)。他们将应用程序及其所需组件(包括中间件,数据库,负载均衡等等)在架构层面组织成逻辑数据中心(LDC)的弹性逻辑单元中,并将它们规划部署到物理基础设施上。这种架构设计帮助他们实现基础设施运维的两个关键目标:高可用性和事务性。

  • 首先,部署在某个 LDC 上的业务应用的可用性在所属 LDC 内能够得到保障。
  • 其次,部署在 LDC 内的应用组件可以被验证,并在故障发生时,可以被回滚。

蚂蚁集团 PaaS 团队的资深技术专家冯泳表示:

“蚂蚁集团拥有数十个 Kubernetes 集群、数十万个节点和数千个关键应用的基础设施。在这样的云原生基础设施中,每天都会有数以万计的 Pod 被创建和删除。构建一个高度可用、可扩展且安全的平台来管理这些集群和应用程序是一项挑战。”

PART. 1

始于 KubeFed

在 Kubernetes 项目生态中,多集群功能主要由与之同名的 SIG-Multicluster 团队处理。这个团队在 2017 年开发了一个集群联邦技术叫做 KubeFed。

联邦最初被认为是 Kubernetes 的一个内置特性,但很快就遇到了实现以及用户诉求分裂的问题,Federation v1 可以将服务分发到多个 Kubernetes 集群,但不能处理其他类型的对象,也不能真正的以任何方式“管理”集群。一些有相当专业需求的用户——尤其是几个学术实验室——仍在使用它,但该项目已被 Kubernetes 归档,从未成为核心功能。

然后,Federation v1 很快被一种名为“ KubeFed v2 ”的重构设计所取代,世界各地的运营人员都在使用该设计。它允许单个 Kubernetes 集群将多种对象部署到多个其他 Kubernetes 集群。KubeFed v2 还允许“控制平面”主集群管理其他集群,包括它们的大量资源和策略。这是蚂蚁集团多集群管理平台的第一代方案。

蚂蚁集团使用多集群联邦的首要任务之一是资源弹性,不止包括节点级别弹性也包括站点级别弹性。通过在需要时添加节点和整个集群起到提高效率和扩展系统的能力。例如年度性的资源弹性,每年 11 月 11 日是中国一年一度的光棍节,蚂蚁集团通常需要快速部署大量额外容量来支持高峰在线购物工作负载。然而,可惜的是正如他们发现的那样 KubeFed 添加新集群的速度很慢,而且在管理大量集群方面效率低下。

在 KubeFed v2 集群中,一个中枢 Kubernetes 集群会充当所有其他集群的单一“控制平面”。蚂蚁集团发现,在管理托管集群和托管集群中应用程序的时候,中枢集群的资源使用率都非常高。

在管理仅占蚂蚁集团总量 3% 的应用程序工作负载的测试中,他们发现由中等规模的云实例构成的中枢集群就已经饱和了,并且响应时间很差。因此,他们从未在 KubeFed 上运行全部工作负载。

第二个限制与 Kubernetes 的扩展功能有关,称为自定义资源定义或 CRD。类似蚂蚁集团这样的“高级用户”往往会开发众多的自定义资源来扩充管理能力。为了要在多集群间分发 CRD,KubeFed 要求为每个 CRD 都创建一个“联合 CRD”。这不仅使集群中的对象数量增加了一倍,也为在集群间维护 CRD 版本和 API 版本一致性方面带来了严重的问题,并且会造成应用程序因为不能兼容不同的 DRD 或者 API 版本而无法顺利升级。

CRD 的这种数量激增也导致了严重的故障排除问题,同时 CRD 的使用定义不规范/字段变更随意等坏习惯会使 KubeFed 控制面的鲁棒性雪上加霜。在本地集群有自定义资源的地方,联邦控制平面上也有一个代表该本地集群资源的图形聚合视图。但是如果本地集群出现问题,很难从联邦控制平面开始知道问题出在哪里。本地集群上的操作日志和资源事件在联邦级别也是不可见的。

PART. 2

转向 Open Cluster Management

Open Cluster Management 项目(OCM)是由 IBM 最初研发,并由红帽在去年开源。OCM 在蚂蚁集团和其他合作伙伴的经验基础上,改进了多集群管理的方法。它将管理开销从中枢集群下放到每个被管理集群上的代理(Agent)上,让它在整个基础设施中分布式自治并维护稳定。这使得 OCM 理论上能管理的集群数量至少比 KubeFed 多一个数量级。到目前为止,用户已经测试了同时管理多达 1000 个集群。

OCM 还能够利用 Kubernetes 本身的发展来提高自身的能力。例如,那些以 CRD 封装的能力扩展可以使用 OCM 的 WorkAPI(一个正在向 SIG-Multicluster 提议的子项目)在集群之间分发 Kubernetes 对象。WorkAPI 将本地 Kubernetes 资源的子集嵌入其中,作为要部署的对象的定义,并将其留给代理进行部署。此模型更加灵活,并且最大限度地减少了对任何中央控制平面的部署需求。WorkAPI 可以一起定义一个资源的多个版本,支持应用程序的升级路径。同时 WorkAPI 兼顾了中枢集群和被管理集群网络链接故障时的状态保持问题,并可以在重连的情况下保障资源状态的最终一致性。

最重要的是,OCM 在集群部署中实现了更多的自动化。在 KubeFed 中,集群的纳管是一个“双向握手”的过程,以中枢集群和被管理集群之间“零信任”作为基础,在此过程中涉及许多手动步骤来保障安全性。新平台能够简化这一过程。例如,因为它在 “PULL” 的基础上运行,不再需要多阶段手动证书注册,也不需要任何明文的 KubeConfig 证书的流通,就可以做到让被管理集群获取中枢集群的管理命令。

尽管注册的流程注重双向的“信任性”,但是在 OCM 中添加新集群只需要很少的操作;工作人员可以简单地在目标 Kubernetes 集群上部署 “Klusterlet” 代理实现自动纳管。这不仅对管理员来说更加容易,而且也意味着蚂蚁集团为双十一准备更多新集群的部署更加快速。

PART. 3

Kubernetes 多集群

的下一步是什么?

在短短四年内,Kubernetes 社区的多集群管理能力迅速发展,从 Federation v1 到 KubeFed v2 再到 Open Cluster Management。

通过在内部兴趣组 SIG-Multicluster 和外部项目(OCM、Submariner 等)工作的那些才华横溢的工程师的技术能力,多集群支持的管理规模和管理功能都比以前提高了很多。

未来是否还会有一个新的平台来进一步发展多集群功能,或者 OCM 就是最终的实现方式?

冯泳是这么认为的:

“展望未来,在红帽、蚂蚁集团、阿里云等参与者的共同努力下,Open Cluster Management 项目将成为构建基于 Kubernetes 的多集群解决方案的标准和背板”。

无论如何,

有一件事很清楚:

您现在可以在 Kubernetes 上运行整个星球

要了解有关云原生主题的更多信息

请在KubeCon+CloudNativeCon North America

2021 – 2021 年 10 月 11-15 日

加入云原生计算基金会和云原生社区

🔗「原文链接」:

https://containerjournal.com/features/the-next-kubernetes-frontier-multicluster-management/

截屏2021-10-09 上午11.53.45.png

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
5月前
|
Kubernetes 监控 安全
Kubernetes实战:集群管理与自动化技术详解
【6月更文挑战第27天】Kubernetes实战聚焦集群自动化管理,涵盖核心概念如主从架构、API Server及工作节点,强调自动扩缩容、RBAC安全控制与日志监控。通过IaC工具如Helm实现配置自动化,结合Prometheus等进行持续监控,强调安全策略与资源优化,展现K8s在现代应用管理中的威力。
|
2月前
|
Kubernetes 持续交付 开发者
探索并实践Kubernetes集群管理与自动化部署
探索并实践Kubernetes集群管理与自动化部署
110 4
|
3月前
|
Kubernetes 监控 前端开发
Kubernetes 集群管理
8月更文挑战第26天
44 2
|
12天前
|
存储 运维 Kubernetes
Kubernetes集群管理:从基础到进阶
Kubernetes集群管理:从基础到进阶
|
12天前
|
Kubernetes 负载均衡 调度
Kubernetes集群管理与编排实践
Kubernetes集群管理与编排实践
|
1月前
|
Kubernetes Cloud Native 持续交付
云原生之旅:Docker容器化与Kubernetes集群管理
【9月更文挑战第33天】在数字化转型的浪潮中,云原生技术如同一艘航船,带领企业乘风破浪。本篇文章将作为你的航海指南,从Docker容器化的基础讲起,直至Kubernetes集群的高级管理,我们将一起探索云原生的奥秘。你将学习到如何封装应用、实现环境隔离,以及如何在Kubernetes集群中部署、监控和扩展你的服务。让我们启航,驶向灵活、可伸缩的云原生未来。
|
29天前
|
存储 Kubernetes 负载均衡
掌握Kubernetes:从零到一的集群管理之旅
【10月更文挑战第18天】掌握Kubernetes:从零到一的集群管理之旅
80 0
|
3月前
|
Kubernetes 负载均衡 调度
在K8S中,如何实现集群管理?
在K8S中,如何实现集群管理?
|
3月前
|
存储 Kubernetes API
|
3月前
|
运维 Kubernetes Go
"解锁K8s二开新姿势!client-go:你不可不知的Go语言神器,让Kubernetes集群管理如虎添翼,秒变运维大神!"
【8月更文挑战第14天】随着云原生技术的发展,Kubernetes (K8s) 成为容器编排的首选。client-go作为K8s的官方Go语言客户端库,通过封装RESTful API,使开发者能便捷地管理集群资源,如Pods和服务。本文介绍client-go基本概念、使用方法及自定义操作。涵盖ClientSet、DynamicClient等客户端实现,以及lister、informer等组件,通过示例展示如何列出集群中的所有Pods。client-go的强大功能助力高效开发和运维。
348 1