写点什么

Medium 的 Kubernetes 基础设施

  • 2023-03-25
    北京
  • 本文字数:1838 字

    阅读完需:约 6 分钟

Medium的Kubernetes基础设施

本文最初发布于 Medium 工程博客。

 

本文概要介绍了我们如何使用 Kubernetes 来管理微服务。

 

为什么选择 Kubernetes?

简单来说,就是它很好地满足了我们的需求;它能解决重要且复杂的问题,而又不需要我们自己去构建解决方案。Kubernetes提供的解决方案主要聚焦于扩展、打包以及使服务具有一定程度的“自愈”能力。

 

另一个关键的考量因素是部署——滚动升级和回滚很简单。我们已经围绕部署构建了复杂的基础设施,不过相关细节的话,我们会在另一篇文章中介绍。

 

我们如何使用 Kubernetes?



我们的生产基础设施分布在 4 个可用区,在 4 个特有的 Kubernetes 集群中。从技术上讲,Kubernetes 现在提供了在单个集群实体(entity)中管理这种拓扑的机制,但我们还没有探索过的这项新功能。

 

随着时间的推移,我们认识到,将系统分布在 4 个集群中有一些很大的好处,而且越来越多,下面是一些比较重要的。

 

能够在需要时通过一些内部工具跨 AZ 转移流量

  • 事实证明,这在单个区域出现问题(无论是云提供商的原因,还是其他原因)时非常有用。

在生产环境中滚动上线基础设施更改

  • 假设我们想测试一个新的Kubernetes插件或配置更改——当我们在底层基础设施上验证更改(只有当我们无法在过渡集群上验证时),便可以将大部分的生产流量转移到其他 3 个集群。

 

我们选择的服务网格是Istio。我们使用各种内部控制器管理入口和出口网关,为的是可以顺畅地配置和协调从 CDN 到所有 4 个集群的流量。我们不会在这里讨论细节(这本身就是一篇文章!)。

 

配置管理

Terraform 和一些内部工具是我们管理集群配置的首选武器。当团队第一次概念化 Kubernetes 配置时,并没有多少现成的工具可以帮助我们简化 Terraform。我们编写(并持续维护)了一个内部应用程序,它让我们可以跨集群(无论是生产集群,还是我们内部的任何过渡集群)模板化、传递和应用我们的配置。

 

事实证明,一个让我们可以使用模板和静态配置的工具非常有价值,它可以确保我们的配置始终有一个“真相来源”,并使我们有一个适当的流程可以测试更改并应用到集群。

 

我们都知道 Kubernetes 和容器技术的发展有多快——请在回复中告诉我们你还使用了哪些工具来简化 Kubernetes 配置管理!

 

优化集群缩放——针对突发流量进行扩展,依据请求量进行收缩

为了确保应用程序请求的资源大小与实际利用率相匹配,我们做了大量的工作。这对 Medium 来说有很大的帮助,那让我们可以充分利用我们的节点(更有效的打包)。还有一个好处是缩放更平滑,但需要一些额外的调优和工具才能实现。

 

集群超额配置和 Pod 抢占

这个工具很棒。对于它所做的事情,简单来说就是定义许多副本以及它们所需的资源量。在我们的例子中,我们知道需要随着流量大幅扩展的服务(我们称之为backend-A)恰好也需要大量的资源。一旦了解了缩放事件的性质,我们就知道需要规划多少个副本以及如何调整它们的大小。

 

假设流量暴增的情况会频繁出现,而此时该服务额外需要大约 200 个 pod(横跨所有 4 个集群)才能应对突发的请求。如果不能快速扩展,我们就会看到 5xx 错误急剧增加。

 

我们在每个集群中设置了集群超额配置(cluster-overprovisioner),请求的 CPU 和内存数略高于backend-A pod,并将副本数设置为 50(单集群配置)。通过适当地配置优先级抢占集群自动缩放器,我们获得了以下好处:

  • 集群超额配置(cluster-overprovisioner)的目标是在任何时间为backend-A 的纵向扩展(scale-up)事件额外提供 200 个 pod 的资源。

  • 当需要调度新增的backend-A pod 时,集群超额配置的 pod 将被抢占(也就是驱逐)

  • 超额配置的 pod 被驱逐后需要重新调度。因此,它们通过集群自动缩放器触发节点纵向扩展事件。

 

因此,本质上上讲,集群超额配置消除了节点纵向扩展事件的延迟,让我们有空间可以平稳地处理生产服务的扩展事件而又不会产生中断。

 

还一个额外的好处是,我们的节点数量统计图看起来比以前平滑许多。我们不需要那么大幅度地缩放节点



在超额配置和适型化(right-sizin)之前,节点总数(在所有 4 个集群中)定期爆增至 800-900 个节点以上



在进行超额配置和应用程序适型化之后,在所有生产集群中,峰值节点数量下降到接近 400 个,很少超过 600 个。

结语

Kubernetes 非常复杂,并且根据组织需要提供了无数可能的配置。在 Medium,我们根据自己的需求塑造了 Kubernetes,我们对此非常自豪。我们还会一如既往地探索增强基础设施的新方法,并利用新技术提高可靠性和可扩展性。

 

声明:本文为 InfoQ 翻译,未经许可禁止转载。

 

原文链接:https://medium.engineering/kubernetes-infrastructure-at-medium-d9e2444932ef

2023-03-25 20:166776

评论

发布
暂无评论
发现更多内容

低代码的技术的生态与未来,让代码自由呼吸

秃头小帅oi

Undertow 可观测性最佳实践

观测云

Undertow

暑期出境游用鸿蒙 5解锁新体验,海外自由行尽享“鸿蒙一夏”

最新动态

Mysql字段类型20连问

量贩潮汐·WholesaleTide

MySQL

spark-sql优化简述

天翼云开发者社区

sql 大数据

AI如何让企业 IT 做好审计准备?-ManageEngine卓豪

ServiceDesk_Plus

ManageEngine卓豪

零信任架构实施指南:7个专家步骤详解

qife122

架构设计 零信任

龙蜥社区受邀参与2025世界人工智能大会,洞见AI与OS技术融合新范式

OpenAnolis小助手

人工智能 AI 操作系统 龙蜥社区 CentOS 停服

英特尔CEO陈立武:聚焦新兴AI工作负载需求,以整体化战略实现突破

科技热闻

Flink Forward Asia 2025 城市巡回 · 上海站

Apache Flink

大数据 flink 实时计算

Django集成Swagger全指南:两种实现方案详解

不在线第一只蜗牛

django

如何通过重定向参数实现账户劫持并获取2500美元漏洞赏金

qife122

漏洞挖掘 xss攻击

神经符号一体化-打通数据驱动与规则推理的最后一公里

申公豹

人工智能、

数据湖典型架构解析:2025 年湖仓一体化解决方案

镜舟科技

数据湖 数据分析 数据处理 StarRocks 湖仓一体

Sentieon项目文章 | 肿瘤突变负荷与纳武利尤单药治疗及其联合伊匹木单抗在小细胞肺癌中的疗效研究

INSVAST

基因测序 基因数据分析 Sentieon 生信分析服务 TMB

天翼云新一代国产化云主机重磅发布!

天翼云开发者社区

云主机 天翼云

云上AI推理平台全掌握 (5):大模型异步推理服务

阿里云大数据AI技术

人工智能 大数据 大模型 推理服务 异步推理

一文彻底搞懂javascript中的undefined

量贩潮汐·WholesaleTide

JavaScript 前端

揭秘 Databend 向量索引,加速 AI 应⽤的数据引擎

Databend

Lakehouse x AI ,打造智能 BI 新体验

StarRocks

AI LakeHouse StarRocks 智能 BI 云原生·

网络安全领导者留任后的三大发展机遇

qife122

领导力 网络安全

JavaScript 编年史:探索前端界巨变的幕后推手

电子尖叫食人鱼

JavaScript 前端

物流KA商家业务监控能力建设与实践

京东科技开发者

本地(或自下载)浏览器插件 安装指南

京东科技开发者

3个月,上百家企业交流,和大家聊聊AI应用的落地实践(开篇)

阿里巴巴云原生

阿里云 AI 云原生

终于,把Oracle给替了!

科技热闻

Dify新版1.7发布,这2个重要更新你必须知道!

王磊

一次线上生产库的全流程切换完整方案

京东科技开发者

TapData 出席 TDBC 2025 可信数据库发展大会,分享“实时+信创”时代的数据基础设施演进路径

tapdata

实时数据平台 信创数据库 无代码CDC 增量物化视图 实时数据服务

远程访问Docker-Android模拟器

贝锐

android 内网穿透 Docker 镜像

EyeWitness工具:渗透测试中快速发现漏洞的利器

qife122

渗透测试 EyeWitness

Medium的Kubernetes基础设施_架构_Eduardo_InfoQ精选文章