写点什么

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:166118

评论

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

火山引擎科技原力峰会:超视频时代如何提供交互性、高清化音视频体验

字节跳动视频云技术团队

理论+算法+实战,教你如何实现亿级流量下的分布式限流

华为云开发者联盟

高并发 服务器 分布式限流 限流 计数器

2022年了循环是什么?

謓泽

循环语句 C'语言 2月月更

LiveVideoStackCon | 面向在线教育业务的流媒体分发演进

有道技术团队

音视频

Camtasia卡点相册视频教程

淋雨

Camtasia 录屏软件

各项结果排名第一!百度内容技术架构团队在国际向量检索大赛BigANN中斩获佳绩

百度Geek说

百度 内容 前端 后端

安全创新厂商长亭科技加入,牵手龙蜥共建网络安全新生态

OpenAnolis小助手

Linux 开源 网络安全

用户体验超好的堡垒机哪里有?咨询电话多少?

行云管家

等保 堡垒机 网路安全 等级保护

让工程师拥有一台“超级”计算机——字节跳动客户端编译加速方案

字节跳动终端技术

ios 字节跳动 DevOps 客户端 火山引擎MARS

MySQL 是如何实现RC事务隔离级别的

华为云开发者联盟

MySQL ReadView 事务隔离 RC事务隔离 Read Committed

喜报 | 旺链科技入选上海市高新技术成果转化项目!

旺链科技

区块链 产业区块链 高新技术

数蛙科技百亿级物流标签轨迹时序数据压测

dgiot

物联网 2月月更 2月日更 dgiot dgiot物联网

第二期 OceanBase 技术征文大赛来袭!快来释放你的原力!

OceanBase 数据库

数据库 分布式 征文大赛 OceanBase 社区版

如何通过云效进行函数计算(FC)发布

阿里云云效

阿里云 云原生 CI/CD 持续交付 研发提效

延迟任务场景,该如何提高吞吐量和时效性

华为云开发者联盟

redis 延迟任务 低延迟 Redis 消费队列

基于流计算 Oceanus(Flink) CDC 做好数据集成场景

腾讯云大数据

flink 执行 流计算 Oceanus

冬奥金牌冲击!为冬奥助力加油!

InfoQ写作社区官方

话题讨论 冬奥会 热门活动

“翻墙”的罪与罚,国内互联网用户VPN“翻墙”的AB面

科技热闻

凡泰极客积极参与信通院“5G消息应用数据安全标准”落地工作

FinClip

5G消息 中国信通院

springboot3+r2dbc——响应式编程实践

麒思妙想

Reactive Java web spring-boot

OpenHarmony移植案例:如何适配服务启动引导部件bootstrap_lite

华为云开发者联盟

开发板 OpenHarmony startup子系统 bootstrap_lite

阿里云EMAS 1月产品动态

移动研发平台EMAS

阿里云 程序人生 移动开发 #EMAS

绿色数据中心:风冷GPU服务器和水冷GPU服务器综合分析

蓝海大脑GPU

如何编写sdk?

百度Geek说

前端

java培训:JVM性能调优理论基础知识分享

@零度

JVM JAVA开发

填问卷赢豪礼,吐槽 NGINX 顺便中个 AirPods 新款耳机~

InfoQ写作社区官方

nginx 热门活动

【等保测评】广西等保安全测评有限公司有哪些?

行云管家

网络安全 广西 等保 等级保护 等级测评

灵活地横向扩展:从文件系统到分布式文件系统

博文视点Broadview

手把手教你使用HarmonyOS本地模拟器

HarmonyOS开发者

HarmonyOS DevEco Studio

web前端培训:开发过程中比较实用的 Linux 命令

@零度

前端开发

[架构实战营]第七模块

Vincent

「架构实战营」

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