Kubernetes Kubernetes

Kubernetes 是什么,以及它解决的问题

为什么仅靠容器无法继续扩展,以及 Kubernetes 如何把一组机器变成一个平台。

8 min 初级

Kubernetes(常缩写为 K8s)是一个开源平台,用于在许多机器上运行和管理容器化应用。它最初由 Google 创建,现在是云原生计算基金会(CNCF)的项目。本指南解释它存在的目的是解决哪些问题,以及本系列其余部分所依赖的几个术语。

容器是容易的部分

容器将应用及其所需的库打包在一起,使它在笔记本电脑、测试服务器和生产环境中以同样的方式运行。容器启动很快,替换成本低,并且你通过运行更多副本来扩容。这很适合微服务架构,其中应用被拆分为许多小服务,每个服务各自在一个容器中。

没有编排时什么会出问题

现在想象你自己在单个虚拟机上运行这些容器,看看会发生什么:

  • 主机被填满。 一旦机器没有多余的 CPU 或内存,你就必须在别处启动新的容器,并手工把它们与其余部分连接起来。
  • 容器死了而没人注意到。 容器按设计就是可丢弃的。重启崩溃的容器需要你编写脚本或手工完成。
  • 主机本身失败。 其上的每个容器一起宕机,没有任何东西把它们带回来。

你可以为每一项编写脚本,但一旦应用有数百个容器分布在多个环境中,这种自制的工具本身就会变成一个项目。

编排器提供什么

Kubernetes 接管了这些工作:

  • 高可用。 在不同机器上运行一个工作负载的多个副本,这样当其中一台失败时,用户不会察觉。
  • 扩缩。 随负载变化增加或减少副本数量,手动或自动均可。
  • 自愈。 重启失败的容器,并把失败机器上的工作负载重新调度到健康的机器上。
  • 可恢复的状态。 集群的配置和状态存放在一个你可以备份和恢复的数据存储(etcd)中。

构建块:Pod、节点与集群

三个术语涵盖了大部分词汇:

  • Pod 是 Kubernetes 运行的最小单位。它包装一个或多个共享网络和存储的容器。大多数 Pod 只有一个主容器,偶尔旁边有一个辅助容器。Kubernetes 管理的是 Pod,而不是裸容器。
  • 节点(node) 是运行 Pod 的机器,虚拟的或物理的均可。
  • 集群(cluster) 是作为一个 CPU 和内存池来管理的一组节点。一些节点构成管理集群的控制平面,其余的是运行你应用的工作节点。下一篇指南介绍它们如何工作。

声明式模型

你不是告诉 Kubernetes 要执行哪些步骤。你描述你想要的状态,通常用 YAML(“这个镜像的三个副本,暴露在这个端口上”),并把它发送给集群的 API。Kubernetes 内部的控制器随后持续比较现有的内容与你所要求的内容,并对差异采取行动。这就是为什么当某个 Deployment 说应该存在三个时,你删除的 Pod 会回来,也是本系列其他一切内容的基础。

Kubernetes 不会为你做什么

Kubernetes 是一个平台,而不是一个完整的解决方案:

  • 它不构建你的镜像,也不测试你的代码。那仍然是 CI 的工作。
  • 它不备份你应用的数据。持久化存储和备份是你的责任。
  • 它默认不加密 Secret,并且其默认设置没有针对生产环境做过加固。
  • 它是一个大型系统,有着真实的学习曲线,所以请先在本地集群上练习,这正是接下来的指南所做的。

热门指南