为什么(以及何时)应该使用 Kubernetes
原文发表于Hackernoon
Kubernetes 是一款强大的容器管理工具,能够自动部署和管理容器。Kubernetes (k8s) 代表着云计算的下一个重大发展趋势,随着企业将基础设施和架构迁移到云原生、数据驱动的时代,其重要性显而易见。
无论你是开发人员、数据科学家、产品经理还是其他职位,掌握一些 Kubernetes 知识绝对有益无害。它是各种规模公司最需要的技能之一,因此,如果你想学习一项能够伴随你整个职业生涯的新技能,那么学习 Kubernetes 是一个绝佳的选择。
想开始使用 Kubernetes?不妨试试《Kubernetes 实用指南》,开始运行生产级集群。
本文概述了您应该使用 Kubernetes 的一些主要原因,以及何时应该/不应该使用它。
容器编排
容器非常棒。它们提供了一种简便的方法来打包和部署服务,实现了进程隔离、不可变性、高效的资源利用,而且创建起来也很轻量级。
但当真正要在生产环境中运行容器时,随着时间的推移,最终可能会有几十个甚至几千个容器。这些容器需要部署、管理、连接和更新;如果手动完成这些工作,就需要一个专门的团队。
仅仅运行容器是不够的;你还需要能够:
- 整合并协调这些模块化部件
- 根据需求扩大或缩小规模
- 使它们具有容错能力
- 提供跨集群的通信
你可能会问:容器不就是用来做这些的吗?答案是,容器只是整个系统中底层的一部分。真正的优势来自于运行在容器之上的工具——例如 Kubernetes。这些工具现在被称为容器调度器。
非常适合多云部署
如今,许多企业都在向微服务架构转型,容器及其管理工具的流行也就不足为奇了。微服务架构可以轻松地将应用程序拆分成更小的组件,这些组件可以通过容器运行在不同的云环境中,从而让您可以根据自身需求选择最佳主机。Kubernetes 的优势在于其可部署到任何环境,因此您可以将其部署到公有云、私有云或混合云,从而以更高的可用性和安全性触达用户。您可以看到 Kubernetes 如何帮助您避免“供应商锁定”带来的潜在风险。
大规模部署和更新应用程序,加快产品上市速度。
Kubernetes 使团队能够满足现代软件开发的需求。如果没有 Kubernetes,大型团队将不得不手动编写部署工作流程脚本。容器与编排工具相结合,可以自动管理机器和服务,从而提高应用程序的可靠性,同时减少 DevOps 所需的时间和资源。Kubernetes
的一些强大功能可帮助您更快地部署应用程序,同时兼顾可扩展性:
- 横向基础设施扩展:可以轻松添加或移除新服务器。
- 自动扩缩容:根据 CPU 利用率或其他应用程序提供的指标自动更改正在运行的容器数量。
- 手动扩容:通过命令或界面手动扩容运行中的容器数量。
- 复制控制器:复制控制器确保集群中运行的 Pod 数量相等。如果 Pod 数量过多,复制控制器会终止多余的 Pod;如果 Pod 数量过少,它会启动更多 Pod。
- 健康检查和自我修复: Kubernetes 可以检查节点和容器的健康状况,确保您的应用程序不会遇到任何故障。Kubernetes 还提供自我修复和自动替换功能,因此您无需担心容器或 Pod 发生故障。
- 流量路由和负载均衡:流量路由会将请求发送到相应的容器。Kubernetes 还内置了负载均衡器,因此您可以平衡资源,以应对服务中断或流量高峰期。
- 自动化部署和回滚: Kubernetes 会在不停机的情况下处理新版本或更新的部署,同时监控容器的健康状况。如果部署出现问题,它会自动回滚。
- 金丝雀部署:金丝雀部署允许您在生产环境中与先前版本并行测试新部署。
“在采用 Kubernetes 之前,我们的基础设施非常陈旧,部署一个新的微服务需要超过六个月的时间。现在,部署一个新的微服务只需要不到五天。我们正在努力将部署时间缩短到一小时。”——Box
更好地管理您的应用程序
容器技术可以将应用程序拆分成更小的组件,然后通过 Kubernetes 等编排工具进行管理。这使得代码库的管理以及特定输入输出的测试变得更加容易。
如前所述,Kubernetes 内置了自愈和自动部署/回滚等功能,能够有效地为您管理容器。
更进一步来说,Kubernetes 允许以声明式的方式描述期望状态,而不是执行部署脚本。这意味着调度器可以监控集群,并在实际状态与期望状态不符时执行相应的操作。您可以将调度器视为操作员,它们持续监控系统并修复期望状态与实际状态之间的差异。
概述/其他福利
- 您可以利用它来部署服务、在不停机的情况下推出新版本,以及扩展(或缩减)这些服务。
- 它便于携带。
- 它可以运行在公有云或私有云上。
- 它既可以在本地运行,也可以在混合环境中运行。
- 您可以将 Kubernetes 集群从一个托管供应商迁移到另一个托管供应商,而无需(几乎)更改任何部署和管理流程。
- Kubernetes 可以轻松扩展,满足几乎任何需求。您可以选择要使用的模块,还可以自行开发附加功能并将其集成到系统中。
- Kubernetes 将决定在哪里运行程序以及如何维护您指定的状态。
- Kubernetes 可以将服务的副本放置在最合适的服务器上,在需要时重启它们,复制它们,并扩展它们。
- 自愈功能从一开始就融入了其设计之中。另一方面,自适应功能也即将推出。
- 零停机部署、容错、高可用性、可扩展性、调度和自愈能力为 Kubernetes 增添了巨大的价值。
- 您可以使用它来挂载有状态应用程序的卷。
- 它可以让你将机密信息存储为秘密。
- 您可以利用它来验证服务的运行状况。
- 它可以对请求进行负载均衡并监控资源。
- 它提供服务发现和便捷的日志访问。
何时应该使用它
如果你的应用程序使用微服务架构
如果您已经或正在考虑过渡到微服务架构,那么 Kubernetes 将非常适合您,因为您很可能已经在使用 Docker 等软件来容器化您的应用程序。
如果您正苦于开发和部署速度缓慢,
如果由于开发周期过长而无法满足客户需求,Kubernetes 或许能帮到您。与其让开发团队花费大量时间研究开发和部署生命周期,不如让 Kubernetes(以及 Docker)高效地为您管理这些流程,这样团队就能将精力集中在更有意义的工作上,例如尽快将产品推向市场。
“我们的内部团队现在无需再花费大量精力在手动容量配置上,而是可以把更多时间投入到为 Spotify 开发新功能上。”——Spotify
降低基础设施成本
Kubernetes 在容器、Pod 和集群级别使用高效的资源管理模型,通过确保集群始终有可用资源来运行应用程序,从而帮助您降低云基础设施成本。
何时不应使用它
简单、轻量级的应用程序
如果你的应用采用单体架构,可能很难看到容器及其编排工具的真正优势。这是因为单体架构的本质是将应用的各个部分——从 I/O 到数据处理再到渲染——紧密耦合在一起,而容器的作用则是将应用拆分成独立的组件。
文化无法反映未来的变化。
Kubernetes 的学习曲线出了名的陡峭,这意味着你需要花费大量时间来培训团队,并解决新解决方案带来的挑战等等。如果你没有一个愿意尝试和承担风险的团队,那么它可能并不适合你。
接下来是什么?
总的来说,Kubernetes 拥有许多强大的功能,可以对您的开发/运维团队以及整个企业产生积极的影响。它是各种规模公司最需要的技能之一,因此,如果您正在寻找一项能够伴随您整个职业生涯的新技能,那么学习 Kubernetes是一个绝佳的选择。我们的课程由 CloudBees 的开发者布道师Viktor Farcic编写,他同时也是 Google 开发者专家和 Docker Captains 团队的成员,以及一位出版作家。
如需完整的 DevOps 指南,您可以访问DevOps for Developers 网站。
学习愉快!
文章来源:https://dev.to/education/why-and-when-you-should-use-kubernetes-2pil

