Kubernetes 是一个用于部署容器化应用的开源编排器。该系统由谷歌开源,灵感来自于十年来通过面向应用的 API 在容器中部署可扩展、可靠的系统的经验,并在过去四年中由一个充满活力的开源贡献者社区开发。
它被大量且越来越多的开发人员用于部署可靠的分布式系统,以及运行机器学习、大数据和其他批处理工作负载。Kubernetes 集群提供了一个编排 API,可以用简单的声明式语法来定义和部署应用程序。此外,Kubernetes 集群本身还提供了许多在线自愈控制算法,可以在出现故障时修复应用。最后,Kubernetes API 还公开了 Deployment 等概念,可以更容易地对软件进行零停机更新,Service 负载平衡器可以轻松地将流量分散到服务的多个副本上。此外,Kubernetes 还提供了服务的命名和发现工具,这样你就可以构建松散耦合的微服务架构。Kubernetes 被广泛应用于公有云、私有云以及物理基础设施中。
本书专门介绍管理 Kuberentes 集群的主题。你可能是在自己的硬件上管理自己的集群,也可能是为一个更大的组织管理集群的团队中的一员,或者是一个想要超越 API,了解更多系统内部的 Kubernetes 用户。无论你在旅途中处于什么位置,深化你对如何管理系统的知识可以让你更有能力完成所有你需要用 Kubernetes 做的事情。
:::info 当我们说到集群时,我们指的是一个机器的集合,这些机器一起工作,以提供 Kubernetes 向其最终用户提供的聚合计算能力。Kubernetes 集群是一个机器的集合,这些机器都由一个单一的 API 控制,并且可以被该 API 的消费者使用。 :::
管理 Kubernetes 集群的必要技能有多种主题组成:
- 集群如何运行
- 如何调整、固定、调校群组
- 如何了解你的集群,并在出现问题时做出反应
- 如何用新的和自定义的功能扩展您的集群
集群如何工作
最终,如果你要管理一个系统,你需要了解这个系统是如何运作的。它是由哪些部分组成的,它们是如何结合在一起的?如果没有至少对这些组件和它们如何相互操作的粗略了解,你不可能成功地管理任何系统。管理一个软件,尤其是像 Kubernetes 这样复杂的软件,如果没有这种理解,就像试图修理一辆汽车而不知道尾管与发动机的关系一样。这是个糟糕的主意。
然而,除了了解所有部件是如何组合在一起的,了解用户如何消费 Kubernetes 集群也是至关重要的。只有了解像 Kubernetes 这样的工具应该如何使用,才能真正了解成功管理它所需要的需求和要求。再来看看我们对汽车的比喻,如果不了解司机坐在车内引导汽车行驶的方式,你就不可能成功管理汽车。Kubernetes 集群也是如此。
最后,你必须了解 Kubernetes 集群在用户的日常生存中扮演的角色。集群为最终用户完成了什么?他们在上面部署了哪些应用?集群消除了哪些复杂性和困难?Kubernetes API 增加了什么复杂性?完成汽车的比喻,为了理解汽车对其最终用户的重要性,关键是要知道它是确保一个人准时出现在工作岗位上的东西。同样,对于 Kubernetes 来说,如果你不了解集群是用户关键任务应用运行的地方,不了解 Kubernetes API 是开发人员在凌晨 3 点出错时解决问题的依靠,你就不会真正掌握成功管理该集群所需的东西。
调整、保护和调整群集
除了了解集群的各个部分如何结合在一起,以及开发人员如何使用 Kubernetes API 来构建和部署应用程序之外,了解各种 API 和配置选项来调整、保护和调整集群也是至关重要的。一个 Kubernetes 集群 — 或者说任何重要的软件 — 并不是你简单地打开、开始运行,然后走开的东西。
集群及其使用有一个生命周期。开发人员加入和离开团队。新的团队成立,旧的团队死亡。集群会随着业务的增长而扩展。新的 Kubernetes版 本出来,修复 Bug,增加新功能,提高稳定性。对集群需求的增加暴露了之前被忽略的性能问题。应对集群生命周期内的所有这些变化,需要了解通过命令行标志、部署选项和 API 配置 Kubernetes 的方式。
此外,你的集群不仅仅是一个应用部署的目标。它也可以成为攻击您的应用程序安全性的载体。配置您的群集,使其安全地抵御许多不同的攻击 —从应用程序泄露到拒绝服务 — 是成功管理群集的一个关键组成部分。很多时候,这种加固实际上只是为了防止错误。在许多情况下,加固和安全的价值在于它们可以防止一个团队或用户意外地 “攻击” 另一个团队的服务。然而,主动攻击有时也会发生,集群的配置对于在攻击发生时检测到攻击和在第一时间防止攻击发生都是至关重要的。
最后,根据集群的用途,您可能需要证明符合许多行业(如医疗保健、金融或政府)的应用开发人员所需的各种安全标准。当你了解如何构建一个合规的集群时,你就可以将 Kubernetes 应用于这些环境中。
通过新功能和自定义功能扩展系统
在 Kubernetes 集群的基础上构建、扩展或以其他方式改善 Kubernetes 集群的使用的桥、工具和平台。
有像 Spinnaker 或 Jenkins 这样的工具用于持续部署,还有像 Helm 这样的工具可以轻松打包和部署完整的应用。像 Deis 这样的平台提供了 Git 推送式的开发者工作流,众多的功能即服务(FaaS)平台建立在 Kubernetes 之上,让用户可以通过简单的功能来消费 Kubernetes。除了服务网状技术,甚至还有自动创建和轮换证书的工具,可以轻松链接和内省无数的微服务。
生态系统中的所有这些工具都可以用来增强、扩展和改进你所管理的 Kubernetes 集群。它们可以提供新的功能,让你的用户的生活更轻松,并使他们部署的软件更强大、更易管理。
然而,这些工具也会使你的集群更不稳定、更不安全、更容易发生故障。它们会让你的用户接触到不成熟的、支持不力的软件,这些软件感觉像是集群的 “官方” 部分,但实际上却让用户的生活更加困难。
管理 Kubernetes 集群的一部分是知道如何以及何时将这些工具、平台和项目添加到集群中。这不仅需要对某个项目试图完成的任务进行探索和理解,还需要对生态系统中存在的其他解决方案进行探索和理解。通常情况下,用户会根据他们偶然看到的一些视频或博客,向你提出对某个工具的请求。事实上,他们通常要求的是持续集成和持续交付(CI/CD)或证书轮换等能力。
作为一个集群经理,你的工作就是充当这类项目的策划者。你也是一个编辑和顾问,你可以推荐替代的解决方案,或者确定某个项目是否适合你的集群,或者是否有更好的方法为最终用户实现同样的目标。
此外,Kubernetes API 本身包含丰富的工具,用于扩展和增强 API。一个 Kubernetes 集群并不仅仅局限于内置的 API。相反,可以动态地添加和删除新的 API。除了刚才提到的现有扩展外,有时管理 Kubernetes 集群的工作还包括开发新的代码和新的扩展,以以前不可能的方式增强你的集群。管理集群的一部分工作很可能是开发新的工具。当然,一旦开发出来,与不断发展的 Kubernetes 生态系统分享这些工具是回馈当初为你带来 Kubernetes 软件的社区的好方法。
总结
管理一个 Kubernetes 集群不仅仅是在一组机器上安装一些软件的行为。成功的管理需要扎实地掌握 Kubernetes 是如何被组装起来的,以及作为 Kubernetes 用户的开发人员是如何将其投入使用的。它要求你了解如何随着集群使用模式的变化,长期维护、调整和改进集群。此外,你还需要了解如何监控集群在运行中放出的信息,以及如何开发警报和仪表盘来告诉你集群何时生病,以及如何让它重新健康起来。最后,你需要了解何时以及如何使用其他工具扩展 Kubernetes 集群,使其对你的用户更有帮助。我们希望在本书中,你能找到所有这些主题的答案和更多的内容,并且在完成本书后,你会发现自己具备了成功管理 Kubernetes 的技能。
