开发和部署云原生应用程序已经变得非常流行——这是有充分理由的。 允许快速部署和持续交付错误修复和新功能的流程具有明显的优势,但存在一个无人提及的先有鸡还是先有蛋的问题:您如何从这里到达那里? 从头开始构建基础设施和开发流程来开发和维护云原生应用程序是重要的、耗时的任务。
Kubernetes 是一个相对较新的用于运行容器化工作负载的平台,它解决了这些问题。Kubernetes 最初是 Google 的一个内部项目,于 2015 年捐赠给了 云原生计算基金会,并吸引了来自世界各地开源社区的开发者。 Kubernetes 的设计基于 15 年的生产和开发工作负载运行经验。 由于它是开源的,任何人都可以下载和使用它并实现其优势。
那么,为什么 Kubernetes 会引起如此大的轰动呢? 我认为它恰好介于基础设施即服务 (IaaS) 解决方案(如 OpenStack)和完整的平台即服务 (PaaS) 资源之间,后者的较低级别运行时实现完全由供应商控制。 Kubernetes 兼具两者的优势:管理基础设施的抽象,以及深入到裸机进行故障排除的工具和功能。
IaaS 与 PaaS
OpenStack 被大多数人归类为 IaaS 解决方案,其中处理器、网络和存储等物理资源池在不同用户之间分配和共享。 用户之间的隔离是使用传统的、基于硬件的虚拟化来实现的。
OpenStack 的 REST API 允许使用代码自动创建基础设施,但问题也随之而来。 IaaS 产品的输出是更多的基础设施。 没有太多服务来支持和管理一旦创建的额外基础设施。 在一定程度上,管理 OpenStack 生成的服务器和 IP 地址等低级基础设施会变得非常繁琐。 一个众所周知的后果是虚拟机 (VM) 蔓延,但同样的概念也适用于网络、加密密钥和存储卷。 这减少了开发人员构建和维护应用程序的时间。
与其他基于集群的解决方案一样,Kubernetes 在单个服务器级别运行,以实现横向扩展。 可以轻松添加新服务器,并且可以立即在硬件上调度工作负载。 同样,当服务器未得到有效利用或需要维护时,可以从集群中删除服务器。 作业调度、健康监控和维护高可用性等编排活动是 Kubernetes 自动处理的其他任务。
网络是另一个难以在 IaaS 环境中可靠编排的领域。 服务之间 IP 地址的通信以链接微服务可能特别棘手。 Kubernetes 实施 IP 地址管理、负载均衡、服务发现和 DNS 名称注册,以在集群内提供无忧、透明的网络环境。
专为部署而设计
一旦您创建了运行应用程序的环境,接下来就是部署它这个小问题。 可靠地部署应用程序是那些说起来容易做起来难的任务之一——绝非易事。 Kubernetes 相对于其他环境的巨大优势在于部署是一等公民。
使用 Kubernetes 命令行界面 (CLI) 只需一个命令,即可获取应用程序的描述并将其安装在集群上。 Kubernetes 实现了从初始部署、推出新版本以及回滚新版本的整个应用程序生命周期——这是在出现问题时的关键功能。 正在进行的部署也可以暂停和恢复。 拥有现有、内置的工具和对应用程序部署的支持(而不是自己构建部署系统)的优势怎么强调都不过分。 Kubernetes 用户不必重新发明应用程序部署的轮子,也不必发现这是一项多么困难的任务。
Kubernetes 还具有监控正在进行的部署状态的功能。 虽然您可以在 IaaS 环境中编写此功能,就像部署过程本身一样,但这是一项非常困难的任务,其中存在许多边界情况。
专为 DevOps 而设计
随着您在为 Kubernetes 开发和部署应用程序方面获得更多经验,您将走上 Google 和其他公司之前走过的道路。 您将发现 Kubernetes 的一些功能对于有效开发和排除多服务应用程序的故障至关重要。
首先,Kubernetes 轻松检查日志或 SSH(安全外壳)到正在运行的服务中的能力至关重要。 通过单个命令行调用,管理员可以检查 Kubernetes 下运行服务的日志。 这听起来可能是一项简单的任务,但在 IaaS 环境中,除非您已经为此投入了一些工作,否则这并不容易。 大型应用程序通常拥有专门用于日志收集和分析的硬件和人员。 Kubernetes 中的日志记录可能无法取代功能齐全的日志记录和指标解决方案,但它提供了足够的功能来支持基本故障排除。
其次,Kubernetes 提供内置的密钥管理。 从头开始开发自己的部署系统的团队已知的另一个障碍是,将密码和 API 令牌等敏感数据安全地部署到 VM 很困难。 通过将密钥作为一等公民,Kubernetes 阻止您的团队发明自己的不安全、有漏洞的密钥分发系统,或者只是在部署脚本中硬编码凭据。
最后,Kubernetes 中有大量功能用于自动扩展、负载均衡和重启您的应用程序。 同样,这些功能对于在使用 IaaS 或裸机时编写代码的开发人员来说是诱人的目标。 Kubernetes 应用程序的扩展和健康检查在服务定义中声明,Kubernetes 确保运行的实例数量正确且健康。
结论
IaaS 和 PaaS 系统之间的差异是巨大的,包括 PaaS 可以节省大量的开发和调试时间。 作为 PaaS,Kubernetes 实施了一组强大而有效的功能,可帮助您开发、部署和调试云原生应用程序。 它的架构和设计代表了数十年来艰苦奋斗的经验,您的团队可以免费利用这些经验。
评论已关闭。