Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >多集群Kubernetes的架构设计

多集群Kubernetes的架构设计

作者头像
CNCF
发布于 2020-02-24 08:51:46
发布于 2020-02-24 08:51:46
1K0
举报
文章被收录于专栏:CNCFCNCF

作者:Thomas Rampelberg

最近,Linkerd社区一直在花时间处理多集群Kubernetes的挑战。如何在多个Kubernetes集群之间应用Linkerd的零配置自动mTLS或流量分割等特性?服务网格应该做什么,而更重要的是:服务网格不应该做什么?

与任何优秀的工程项目一样,开始的最佳方式是明确需求。在这篇博客文章中,我们概述了多集群解决方案的最低要求,从而使跨集群的流量更加可靠、安全和可观察。在后续的博客文章中,我们将讨论一些实现选项。

多集群从何而来?

Kubernetes集群就像品客薯片——你不可能只有一个!事实上,像Zalando这样的组织大约有100个。通过运行多个集群,可以将每个集群的关注点分开。不必解决每个应用程序和解决方案的约束,而是缩小问题空间。这最终成为一个非常好的工具,允许以更灵活、更简单的方式构建解决方案。

不幸的是,每个新的集群都增加了系统的复杂性。还有更多的内容需要管理、更新,并且需要处理集群上运行的所有应用程序之间的连接。Linkerd能帮我们吗?为了理解这个解决方案,我们首先列出一组需求。

需求一:支持层次网络

Kubernetes是一个有趣的野兽。每个pod拥有一个IP地址的含义之一是,默认情况下每个集群最终都是自己的网络。覆盖网络(Overlay network)只能在集群内部路由和发现。可以使用Submariner或Project Calico之类的工具来解决这个问题。如果你对维护一个平面网络有严格的要求,并且每个pod与其他集群中的pod直接通信,那么这些解决方案非常棒。然而,它们引入了新的失败点,增加了需要管理的复杂性。

为了降低复杂性并且不需要其他工具,任何多集群实现都必须使用Kubernetes的当前状态。如果我们不能依赖平面网络,这就意味着需要某种网关来管理进入集群的流量,并将流量路由到正确的后端服务。

需求二:保持独立状态

在一个每个集群中的每个pod之间都有一个完全平坦的、可路由的网络的世界中,允许直接通信仍然是没有意义的。为了让每个pod直接与另一个pod对话,它需要以某种方式发现那个遥远的pod。这在每个集群之间引入了全局状态的需求。每个集群的故障区现在已经一起粉碎了!让我们在这里描述一个失败场景,以理解为什么会发生这种情况以及它可能意味着什么。

Kubernetes中pod之间的通信由服务(Service)资源管理。默认情况下,该资源创建一个虚拟IP地址:ClusterIP。当pod决定要与另一个服务通信时,DNS将返回该服务的集群IP。当pod尝试连接到集群IP时,本地节点上的iptables被配置为随机选择目标pod IP地址。kube-proxy负责在集群中的每个节点上配置iptables,并在服务更改、pod启动或停止时执行此任务。这些更改发生在每个节点上,而且由于iptables实现细节,开销非常高。

通过要求全局可见性,某些集群中的状态更改将影响所有集群。这将潜在的不同的集群移动到相同的故障区,并立即降低最大可能的规模。每个集群不再能够独立伸缩,而是由每个集群的大小定义最大伸缩。一个集群中的任何错误配置,例如启动大量的pod,都能够DoS其他集群。这似乎与多个集群应该做的事情正好相反!

保持状态独立并通过复制管理更新,允许实现对更新进行筛选,以精确地获得所需的数据。本地集群外部的问题将被隔离,并确保单独的组件不能相互替换。

需求三:有独立的控制平面

引入一个共享的控制平面是很诱人的。这有效地集中了状态,减少了不同组件的管理开销,并具有做出全局优化决策的潜力。除了与全局复制状态共享许多相同的参数之外,这还会带来其他一些负面影响。

对于初学者来说,连接问题是真实存在的。当集群位于网络的两端时,中间的任何问题都可能导致失败。这些问题可以表现为任何情况,从延迟的增加一直到连接的完全丧失。在完全丧失连接性的情况下,任何不能与中央控制平面通信的集群要么完全中断,要么开始出现奇怪的错误,因为状态不同于本地缓存和共享控制平面。再一次,潜在的分离故障区已经被合并,当最薄弱环节出现问题时,整个系统就会失效。

即使在网络故障从未发生的完美世界中,共享控制平面也会引入一个关键的缺点。随着集群被配置到离共享控制平面更远的地方,诸如发现更新或策略检查之类的操作就会变慢。这只是因为进程之间的延迟将会增加,并且任何需要与中央集群通信的操作将会变得越来越慢。

将控制平面(以及相关的数据平面)保持独立为每个集群提供了自由。这种自由让集群操作员以最适合他们的方式管理版本、连接和功能。松散耦合使系统具有更强的弹性,实际上降低了所需的总体复杂性。

迈向解决工程

有了这三个约束——支持层次网络、保持独立状态和拥有独立的控制平面——我们就有了实现一个解决方案所必需的约束,采用Linkerd使用的低复杂度模型并将其扩展到多个集群。

在之后的文章中,我们将概述我们已经找到的解决方案。同时,我们希望听到你对这组需求的反馈!请对需求文档进行评论,或者进入我们的Slack渠道,提出一些问题!

https://docs.google.com/document/d/1uzD90l1BAX06za_yie8VroGcoCB8F2wCzN0SUeA3ucw

https://slack.linkerd.io

Linkerd是一个社区项目,由CNCF托管。如果你有功能需求、问题或评论,我们欢迎你加入我们快速成长的社区!Linkerd代码由GitHub托管,我们在Slack、Twitter和邮件列表上有一个蓬勃发展的社区。快来加入我们的行列吧!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CNCF 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
通过“服务镜像”实现多集群Kubernetes
在我们之前的文章多集群Kubernetes的架构设计,我们概述了构建一个简单但有弹性的Kubernetes多集群方法的三个要求:支持分层网络、保持集群状态的独立性、不引入共享控制平面。
CNCF
2020/03/04
1.2K0
通过“服务镜像”实现多集群Kubernetes
虚拟Kubernetes集群是什么?
虚拟 Kubernetes 集群(vClusters)是一种创新解决方案,可解决 Kubernetes 部署中的多租户和资源隔离挑战。Th ...
云云众生s
2024/09/25
1260
虚拟Kubernetes集群是什么?
七张图了解Kubernetes内部的架构
Kubernetes是用于管理容器化应用程序集群的工具。在计算机领域中,此过程通常称为编排。
KevinYan
2020/06/22
1.7K0
后Kubernetes时代的微服务
听说过服务网格并试用过Istio的人可能都会有以下5个疑问。 (1)为什么Istio 要绑定Kubernetes呢? (2)Kubernetes和服务网格分别在云原生中扮演什么角色? (3)Istio扩展了Kubernetes的哪些方面?解决了哪些问题? (4)Kubernetes、xDS协议(Envoy、MOSN等)与Istio之间是什么关系? (5)到底该不该使用Service Mesh? 本文将带读者梳理清楚 Kubernetes、xDS协议与Istio服务网格之间的内在联系。此外,本文还将介绍Kub
博文视点Broadview
2022/07/12
8410
后Kubernetes时代的微服务
(译)Linkerd v2:响应实际生产需求的新一代服务网格
服务网格正成为现代云原生技术栈的重要成员。它把服务间通信(数据中心的惯用语中称之为东西向流量)的机制从应用代码迁移到了平台层,并提供了用于对通信进行度量和处理的工具,让运维人员以及平台所有者得到一个基本独立于应用代码的观察和控制层。
崔秀龙
2019/07/22
6330
(译)Linkerd v2:响应实际生产需求的新一代服务网格
IT运维面试问题总结-LVS、Keepalived、HAProxy、Kubernetes、OpenShift等
etcd 是 CoreOS 团队发起的开源项目,是一个管理配置信息和服务发现(service discovery)的项目,它的目标是构建一个高可用的分布式键值(key-value)数据库,基于 Go 语言实现。
杰哥的IT之旅
2020/10/23
5.5K1
Kubernetes 网络模型综合指南
这篇详细的博文探讨了 Kubernetes 网络的复杂性,提供了关于如何在容器化环境中确保高效和安全通信的见解。
云云众生s
2024/03/28
2670
Kubernetes 网络模型综合指南
瞬时流量高峰场景下的高可用架构设计:Kubernetes集群如何调优?| Q推荐
作者 | 鲁冬雪 谈起瞬时流量高峰场景下的高可用架构设计,那首先要解决的肯定是高并发问题。 类似电商大促就是典型的高并发场景,当业务突发波动(如秒杀、限量抢购)时,无法准确预估流量,企业会苦恼需提前准备多少台机器,突发流量过后,这些机器往往又处于空载状态。这就意味着系统需要承担 100% 的业务和流量,需要具备超强的稳定性和容灾能力,并可以紧急处理各种故障: 应对快速增长的用户访问:流量短时间内达到峰值,系统面临宕机危险; 应对大量业务数据和用户数据:计算资源需求突增,技术上需做到弹性自如; 紧急故障处理
深度学习与Python
2023/03/29
3530
瞬时流量高峰场景下的高可用架构设计:Kubernetes集群如何调优?| Q推荐
服务网格(Service Mesh)与Kubernetes的服务发现
伴随着微服务架构,容器编排技术和云原生(Cloud Native)应用的发展,William Morgan 两年前一篇《What's a service mesh? And why do I need
曲奇泡芙
2019/08/16
2.6K0
服务网格(Service Mesh)与Kubernetes的服务发现
11-kubernetes入门学习之网络设计实现方案
在前面的章节中我们介绍过Pod是K8s进行创建、调度管理的最小单位,在同一个Pod内的Container不会垮主机,每个Pod都有独立的Pod IP (IP per Pod)并且该Pod包含的所有容器共享一个网络协议栈(或者网络名称空间), 例如容器之间通过localhost+port可以进行相互访问。即集群中的所有Pod都处于一个扁平互通的网络空间。
全栈工程师修炼指南
2022/09/29
1.1K0
11-kubernetes入门学习之网络设计实现方案
Kubernetes 上的服务网格技术大比较: Istio, Linkerd 和 Consul
云原生应用通常是由一组运行在容器中的分布式微服务架构起来的。目前越来越多的容器应用都是基于 Kubernetes 的,Kubernetes 已经成为了容器编排的事实标准。
黑光技术
2020/05/14
3.2K0
Kubernetes 上的服务网格技术大比较: Istio, Linkerd 和 Consul
详解Kubernetes网络模型
Kubernetes 是为运行分布式集群而建立的,分布式系统的本质使得网络成为 Kubernetes 的核心和必要组成部分,了解 Kubernetes 网络模型可以使你能够正确运行、监控和排查应用程序故障。
没有故事的陈师傅
2022/09/15
1.8K0
详解Kubernetes网络模型
谈 kubernetes 的架构设计与实现原理
kubernetes 基本上是这两年最热门、最被人熟知的技术了,它为软件工程师提供了强大的容器编排能力,模糊了开发和运维之间的边界,让我们开发、管理和维护一个大型的分布式系统和项目变得更加容易。
我的小碗汤
2019/10/30
8090
谈 kubernetes 的架构设计与实现原理
kubernetes简介
Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态,其服务、支持和工具的使用范围相当广泛。
thierryzhou
2022/10/30
7590
kubernetes简介
OpenAI: Kubernetes集群近万节点的生产实践
OpenAI已经将Kubernetes集群规模扩展至7500个节点,为大型神经网络模型(如GPT-3,CLIP和DALL·E)及小型实验性研究提供了可扩展的基础架构。很少将单个Kubernetes集群扩展到如此规模,为此进行了一些必要的改进,但好处是单一的基础架构使我们的机器学习研究团队可以在不修改代码的前提下,快速扩展以缩短实验时间、加速研发进度。
zouyee
2021/02/01
1.1K0
OpenAI: Kubernetes集群近万节点的生产实践
大型项目架构设计与维护策略全面解析:以openstack和kubernetes为例
在过去的几年里,开源社区的飞速发展不仅推动了技术革新,也孵化出了无数富有影响力的项目。在众多项目中,OpenStack和Kubernetes无疑是最为人瞩目的两颗明星,它们不仅在云计算和容器编排领域扮演着举足轻重的角色,更是技术发展的关键驱动力。本文将重点探讨OpenStack和kubernetes的架构设计及其维护策略,旨在为广大技术爱好者和专业人士提供一份深入浅出的指南。
运维开发王义杰
2024/02/05
5130
大型项目架构设计与维护策略全面解析:以openstack和kubernetes为例
【运维干货分享】一份完整的图文手册,理解kubetnetes架构
下面的 Kubernetes 架构图展示了 Kubernetes 集群的所有组件以及外部系统如何连接到 Kubernetes 集群。
大侠之运维
2025/04/15
2230
Kubernetes 集群零信任访问架构设计
现代 IT 环境日益动态化。例如,Kubernetes 正在突破许多 IT 组织的可能性。
用户5166556
2023/03/18
7030
Kubernetes 集群零信任访问架构设计
云原生 | Kubernetes 之常用 CNI 网络插件简述与对比
Kubernetes 需要使用网络插件来提供集群内部和集群外部的网络通信,并提供可扩展和高性能的网络架构,其核心概念如下:
全栈工程师修炼指南
2024/08/20
5940
云原生 | Kubernetes 之常用 CNI 网络插件简述与对比
详细了解 Linkerd 2.10 基础功能,一起步入 Service Mesh 微服务架构时代
Linkerd 提供了许多功能,如:自动 mTLS、自动代理注入、分布式追踪、故障注入、高可用性、HTTP/2 和 gRPC 代理、负载均衡、多集群通信、重试和超时、遥测和监控、流量拆分(金丝雀、蓝/绿部署)等。
为少
2021/07/07
1.4K0
推荐阅读
相关推荐
通过“服务镜像”实现多集群Kubernetes
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档