Skip to main content

Command Palette

Search for a command to run...

Kubernetes 无状态应用的一般特征

Published
•1 min read•View as Markdown

以 12 要素为代表的微服务标准,很好地给微服务的特征做出了指导。然而具体到以容器形式在 Kubernetes 上运行的无状态业务应用上,这个标准是有些高层的——它看重的是方法和架构。如果仅从外在视角来对一个“顺眼”的 Kubernetes 应用进行观察,这个应用应该有什么特征呢?

依赖关系清晰

微服务应用通常会有各种外部依赖,例如数据库、缓存、队列等平台能力,或者业务上的依赖服务等,因此一个健康的微服务组合而成的应用,必须能处理好依赖关系。

微服务的启动顺序不是固定的,并且存在独立更新、重启的可能。而很多应用仅在启动时进行连接,这就要求在 Kubernetes 上运行的应用,首先在启动时,不会因为暂时无法连接依赖服务直接崩溃;同时在运行期间,也有处理这种随时处理重连的能力。

具备自检能力

存活检测关注的是进程是否活跃,是否应该重新启动;就绪检测代表的是服务能力,是否应该保存在 Service 的负载均衡池中。

在没有设置就绪检测的情况下,Pod 一旦启动成功,K8s 就会把相关服务的请求发给该实例,如果这个实例启动较慢,就有可能对业务造成损失。同理,存活和就绪检测应该分别进行,例如业务阻塞时,暂时将实例摘除,但是无需重启,即可逐步恢复服务能力。

联系到前面的依赖关系问题,在微服务环境中,一个服务的就绪检测应该仅仅关注本应用的情况,检测过程中不应包含对依赖服务的调用——否则所有依赖故障服务的其它服务的就绪检查失败,造成大面积故障。

日志采集和处理

  • 应用不应继续把日志输出到本地文件,而应该输出到 stdout 和 stderr;
  • 集群应该针对容器的 stdout、stderr 提供统一的日志采集,建议使用 Daemonset 而非 Sidecar;
  • 进行日志采集的同时,集群应提供 ES、Loki 或其它类似机制来对日志进行处理,并且其处理和存储能力应该有初步预案;
  • 应用日志应提供分级开关,保证同一镜像在不同环境中可以输出不同数量和级别的日志信息。

尽量优雅关停

  • 容器命令入口应该有能力接收 SIGTERM,并在需要的情况下传递给业务主进程;
  • 应用进程接收到 SIGTERM 信号之后,不应立刻关停,而是处理好剩余的在途业务;
  • 使用 preStop 等 Pod 生命周期手段来完成特定任务;
  • 避免使用长连接,保持简单负载均衡的有效性。

故障预防和应对

  • 避免运行单 Pod 的 Deployment;
  • 使用 Pod 软亲和避免同 Deployment 中的不同 Pod 分布在同一节点上;
  • 遭遇不可恢复的故障,应该允许应用崩溃,由 K8s 重新启动;
  • 定义 PDB(Pod disruption budgets),告知 K8s 为应用提供最低 Pod 数量保障。

资源使用

  • 必须定义 CPU 和内存的 Requests;
  • 必须定义内存的 Limits;
  • 同一集群中的不同微服务,如果有不同 QoS 要求,应该定义不同的 qosClass,避免被无差别驱逐。

安全相关

  • 应清晰掌握并声明应用运行所需的 Linux Capabiltiy;
  • 避免使用 Root 身份运行容器;
  • 使用只读的 RootFS,所有写入需求应该使用存储卷来完成;
  • 避免特权逃逸。

More from this blog

AI Agent 的“莫兰迪时刻”

一个新范式真正走向大众,往往不是从所有人都正确理解它开始,而是从它开始被反复引用、简化、误读,甚至滥用开始。 今天的 AI Agent,可能正走到这样一个时刻。 这篇文章的念头,来自我最近收听《大内密谈》vol.1434《审美升级or消费主义?从莫兰迪在中国聊起》时的一些联想。节目从莫兰迪色在中国的走红,谈到作品价格、知识产权、商业流量与消费主义。[9] 我听着听着想到另一个熟悉的技术史问题:为

Oct 5, 20263 min read

FDE 是传统运维产品厂商的出路吗?

很多传统运维产品厂商,已经不缺产品了。 从 ITSM、CMDB、监控、自动化,到 IAM、数据中心管理和各类大屏,一个成熟厂商往往都能拿出一张很完整的产品地图。销售材料上看,客户运维部门的日常工作几乎都被覆盖了。 但项目一落地,味道就变了。 产品越多,集成越重;模块越全,边界越模糊;客户越大,定制越深。到了后期,项目成功本身也会变成麻烦:现场改出来的东西回不到主干,配置越来越像黑箱,谁都不敢轻易升

Jun 29, 20263 min read

绵里藏针才是 AIOps 的本质?

Agent 让运维编排变得柔性、可变、甚至自演进;但真正敢进入生产环境的 AIOps,仍然离不开坚实、受控、可审计、可回退的自动化底座。 从 Gartner 提出 AIOps 概念到现在,也大概有十年了。这么多年来,这个领域好像发生了很多变化,又好像没什么“本质”的变化。技术上,我们经历了传统机器学习、深度学习和神经网络、以及大模型和智能体这样“翻天覆地”的变化;业务上,我们面对的是更多品种、更大

May 31, 20263 min read

龙虾恐慌:AIOps 又要改名了?

ChatGPT 开始,把 AI 拉近到普罗大众的面前,让无数人感受到 AI 的亲民魅力。而龙虾,则把大模型驱动的自动化能力,突然间变得水灵灵、活泼泼地走进千家万户。它不只是“风口上的猪”,而是风口本身。热度高到让 Mac mini 一度断货,不知道这在不在库克的预料之内。 每代人都有每代人的鸡蛋,春节期间,我就领了我的鸡蛋。翻出古老的 MacBook Air M1,充值各种大模型。当然了,这个工具

Mar 9, 20261 min read
【

【伪】架构师

346 posts