Kubernetes 复杂度论:从一场面试题说起
最近经历了一场面试,面试官抛出了一个看似常规的问题:“你认为什么情况下应该使用 Kubernetes,而什么情况下使用 Kubernetes 是没有必要的、徒增复杂度?”
这个问题当时回答得还算流畅,但之后它反而在我脑海里盘旋了许久。这个问题之所以“刺耳”,是因为它跳出了“怎么用 K8s”的技术细节,直指架构设计的核心权衡:我们引入一个技术栈,到底是为了解决业务的真实痛点,还是仅仅为了满足技术团队的“先进性焦虑”?
很多团队把 Kubernetes 当作现代化研发的标配起点,但现实往往是残酷的:你不是上了 Kubernetes 就自动获得了 Google、AWS、Azure 等云厂商般的基础设施能力;你是上了 Kubernetes 之后,才刚刚开始背负起治理分布式系统的沉重代价。
Kubernetes 本质:复杂度的“交换”而非“消除”
Kubernetes 的核心价值从来不在于“跑容器”——Docker Compose 也能跑,甚至 systemd 也能跑。它的核心价值在于控制平面(Control Plane):它提供了一套声明式的 API,允许我们描述系统的“期望状态”,并由系统自动将“实际状态”收敛到期望状态。