今天是「DevOps云学堂」与你共同进步的第 54天
介绍: 将基础架构编写为代码是一种好的做法吗?开发人员是否应该负责编写和维护基础设施代码?这种做法如何影响软件工程?在本文中,我们将探讨基础设施管理不断发展的格局、开发人员在基础设施代码中日益增长的作用,以及管理复杂系统时出现的挑战。
基础设施管理的演变:
多年来,我们见证了 Docker 和 Kubernetes 等技术对利用容器化进行应用程序部署的变革性影响。Docker 简化了容器镜像的创建,而 Kubernetes 则解决了容器管理和编排的挑战。 以前,部署应用程序需要运营团队的参与,但随着 Docker 的兴起,创建 Docker 镜像的责任转移到了软件开发人员身上。如今,开发人员期望提供一个 Docker 文件来在隔离环境中运行他们的应用程序。
开发人员在基础设施即代码中的角色:
由于基础设施现在可以编写为代码,管理它的责任已转移到软件开发人员身上。然而,开发人员只能成为有限领域的专家,他们需要配备适当的知识和平台来兑现自助基础设施的 DevOps 承诺。
过去,开发人员只负责编写源代码,然后将该包传递给运营团队进行部署。这一瓶颈催生了新的 DevOps 模型,开发人员现在负责部署,这不是一项小任务。
从 Kubernetes 到基础设施即代码,实现可扩展且可靠的基础设施和应用程序对于开发人员来说过于复杂,如果没有新工具就无法管理。幸运的是,基础设施领域发展迅速,GitOps 和内部开发人员平台等新方法使得普通开发人员可以在 Kubernetes 上部署复杂的分布式系统。
对于许多项目,尤其是那些仅包含一个应用程序的项目,只需将 AWS ECS 或 GCP Cloud Run 等服务指向 git 存储库就足以部署该应用程序,并且不需要基础设施即代码。然而,许多应用程序需要基础设施即代码和更复杂的架构。有时,这是由性能、基本分布式解决方案或其他特殊部署考虑因素等技术考虑因素驱动的。但也许更常见的是,对 Kubernetes 和 IaC 的推动更多地与开发团队及其结构有关。例如,如果您有三个团队,每个团队管理自己的服务,并且这些服务相互通信,您可能需要像 K8s 这样的抽象来促进编排和服务间通信。
当团队到达这个阶段时,开发人员应该专注于使用 ArgoCD 等工具来管理 Kubernetes 资源,以及使用 Terraform 等工具来管理运行集群本身的基础设施。这些工具使得以开发人员熟悉的方式部署复杂的应用程序变得简单且可重复:发出拉取请求、合并,然后让自动化从那里开始。
平台/DevOps 团队的角色:
当软件开发人员负责部署服务时,向他们提供一组模板通常很有用,他们可以填写这些模板并使用这些模板以适合您的组织的方式部署系统。如果没有这些模板,您的开发人员将不断地重新发明轮子,浪费宝贵的开发时间,并可能在最终部署时犯下严重错误。
从本质上讲,平台团队的工作是为工程组织的其他部分提供内部开发平台(IDP),使自助基础设施不仅对开发人员来说很容易,而且安全、可靠。
这些模板可能代表将系统部署到 Kubernetes,或者它们可能有助于在其他地方部署,但无论如何:如果您的组织让开发人员负责管理操作,他们就需要一个平台。
Kubernetes——好的和坏的:
让我们从坏处开始:尽管 Kubernetes 生态系统中有丰富的工具,但设置和管理集群仍然会带来挑战。简单性和功能性仍然是广受追捧的属性,社区不断创新以达到适当的平衡。Kubernetes 的学习曲线非常陡峭,开发人员生产力的提升时间比更简单的替代方案要长得多。
然而,Kubernetes 正在巩固其作为通用后端的地位。它可在每个云、本地部署上使用,并且不对要执行的工作负载做出任何假设。当您的团队跟上进度时,K8s 无疑是运行分布式系统的最佳方式。根据最近的CNCF 年度调查, Kubernetes 中的应用程序工作负载数量同比增长 30%,辅助工作负载同比增长惊人的 211%,很明显,目前 K8s 是最重要的。云操作系统。这不仅在主要云中如此,即使在本地部署时也是如此。
Kubernetes 学习曲线的成本很高,但这个云操作系统的可移植性和普遍性有可能在您的团队壮大时加速您的开发。当您组织中的平台工程团队创建对正确方式部署集群所需的关键知识进行编码的模板时,尤其如此。
结论:
我们已经看到赋予开发人员的职责数量不断增加。曾经是运营团队的工作现在是开发人员的工作。所有这些责任都需要更多基础设施方面的专业知识,而我们的开发人员只能是这么多领域的专家。因此,当您的开发人员负责基础架构部署时,他们需要确保其高效且有效的工具和流程。平台团队的工作就是构建这些工具并支持开发人员履行这些新职责。开发人员在使用基础设施即代码时应该使用经过实战检验的模板,而不是为每项服务重新发明轮子。
如果您正在构建自己的内部开发平台,请查看我们的工具CNDI,其中包含适用于 Airflow 和 Postgres 等的优秀模板,由最新的 IaC 和 GitOps 最佳实践提供支持。我们还为平台团队创建了一种简单的方法来创建他们自己的交互式模板,这样 Kubernetes 的复杂性只需解决一次,然后这些知识就可以被其他工程师永远使用。