Docker 证明您的应用可运行,Kubernetes 证明其可运维。
作者描述了一个常见的调试场景:在 Kubernetes 中,尽管所有技术指标均显示健康,但服务却处于不可用状态。这是因为 Docker 验证的是应用程序能否运行,而 Kubernetes 验证的是应用程序是否可操作。Docker 的简洁性掩盖了应用程序在生产环境中必须回答的四个关键问题。第一个问题是:应用程序能否通过名称而非仅通过地址被找到,因为在 Kubernetes Pod 中,localhost 仅指代该 Pod 本身。其次,应用程序必须能够应对外部系统干净地终止其进程,即正确响应如 SIGTERM 之类的信号。第三个关键方面是在接收流量之前证明自身已就绪,因为 Kubernetes 从启动伊始就会主动探测应用程序的健康状态。最后,应用程序需要能够在不依赖本地磁盘持久化的情况下运行,转而使用 Kubernetes 的配置与存储机制。理解这四个问题有助于揭示为何应用程序在 Docker 和 Kubernetes 中的行为存在差异。作者提供了未能解决这些问题的示例,说明其如何导致常见的生产环境问题。这一解释并非反对 Kubernetes,而是探讨 Docker 允许团队累积的可操作性债务。