本文作者使用简单明了的语言介绍了当今使用的一些 DevOps 技术和工具。阅读本文后,您将对这些 DevOps 工具,工作方式、以及如何在软件过程中使用有一个整体的了解。
最近一段时间,我们见证了 DevOps 技术的飞速发展。当今流行且功能强大的工具可能会成为下一年度的过时工具,甚至可能很快被另一种工具取代。如前所述,作者的目的不是通过这篇文章来评判哪些工具最受欢迎或功能最全,而是让读者全面了解 DevOps 工具的工作方式以及如何在软件过程中使用它们。
什么是 DevOps?
DevOps 是开发和 IT 运维工程师一起参与从设计到开发和生产的整个敏捷软件开发生命周期的一种实践。敏捷是软件开发生命周期原则,由 17 名独立软件开发人员在 2001 年宣布。
我们正在通过自己的实践和帮助别人实践来探索更好的软件开发方法。通过这项工作,我们开始重视:
- 个人和互动高于流程和工具
- 工作的软件高于详尽的文档
- 客户合作高于合同谈判
- 响应变化高于遵循计划
也就是说,尽管右侧的提到的项目有价值,但我们更重视左侧的项目。
在自敏捷宣言发表以来的最近 20 年中,敏捷组织的理念得到了许多组织的认可,并且一些组织已采用了 Scrum 框架进行项目管理。Sprint 的 Scrum 框架概念和以产品为中心的文化以及快速变化的竞争市场所施加的时间压力迫使许多软件开发人员逐步增量地交付产品。
持续交付需要持续的集成,CI/CD 迫使生产者采用新的工具和技术,以便可以自动执行许多任务,并且可以同时快速地执行多个流程。新流行的软件开发生命周期文化使开发人员、质量保证、T 运营、产品设计师和产品所有者之间的工作更加紧密。这正是 DevOps 概念不可或缺的地方。
除了传统的版本控制、协作和部署工具之外,快速的生产和交付迫使软件公司使用更多工具来满足敏捷性期望,例如项目管理、自动化、容器化、编排、监控、分析和可视化技术。
DevOps 工具
1 版本控制系统
Git
Git 是一个开源的分布式版本控制系统。如果您需要更多信息,请参阅 https://git-scm.com/about。
GitHub
GitHub 是一个 Git 存储库托管服务。
Bitbucket
Bitbucket 是 Atlassian 提供的基于 Git 的源代码存储库托管服务。
Apache Subversion(SVN)
Apache Subversion 是一个软件版本号和版本控制系统,根据 Apache 许可以开源形式分发。
Azure DevOps 服务器
Azure DevOps Server 是微软公司提供的版本控制产品。
还有更多的版本控制技术,例如 Gitlab、Mercurial、Bazaar、AWS CodeCommit、Perforce Helix Core 和 SourceForge。
2 容器化
Docker
Docker 是执行系统级虚拟化的容器化软件。该软件的开发者是 Docker,Inc。该软件首次发布于 2013 年。它使用 Go 编程语言编写。
容器: 容器是软件的标准单元,它将代码及其所有依赖项打包,使得软件可以从一个环境快速可靠地运行到另一个环境。
容器映像:Docker 容器映像是一个轻巧、独立的可执行软件包,其中包含运行应用程序所需的一切:代码、运行时、系统工具、系统库和配置。容器映像在运行时成为容器,对于 Docker 容器,映像在容器 Docker 引擎上运行时成为容器。它适用于 Linux 和基于 Windows 的应用程序。不论基础架构如何,容器化软件的运行方式始终相同。容器将软件与环境隔离开来,尽管在开发和模拟阶段之间存在差异,但是容器能确保软件均可一致地工作。
Docker 引擎:Docker 容器技术于 2013 年作为开源 Docker 引擎的方式发起。Docker 的技术之所以独特是因为它专注于开发人员和系统操作人员的需求,将应用程序依赖项与基础架构分离开来。
Docker 技术可从 Docker 及其开放源代码获得。所有主要数据中心供应商和云服务提供商都将其集成到云技术中。其中,许多提供商利用 Docker 来提供基于容器的 IaaS 产品。此外,领先的开源无服务器(serverless)框架也利用 Docker 容器技术。
亚马逊 ECS
亚马逊公司的弹性容器服务(Elastic Container Service,简称 ECS)是一项编排服务,它支持运行 Docker 容器以在亚马逊 AWS 上执行容器化的应用程序。它消除了对单独的容器编排软件的安装和管理需求。尽管 ESC 是免费的,但亚马逊会对其使用的资源收费。
AWS Fargate
AWS Fargate 使您无需管理服务器或集群即可执行容器。亚马逊公司根据运行 Fargate 所使用的内存和虚拟 CPU 资源收取费用。
谷歌云平台
谷歌云为您提供了运行容器的不同选项。它们是谷歌 Kubernetes 引擎(用于容器群集管理)、Google 计算引擎(用于虚拟机和 CI/CD 管道)和 Google 应用引擎灵活环境(用于完全托管的 PaaS 上的容器)。谷歌提供了可用于生产的执行容器化应用程序所需的基础架构。谷歌根据所使用的资源收费。
LXC
LXC 是 Linux 容器的缩写,Linux 容器是一种 OS 级虚拟化方法,用于执行使用单个 Linux 内核的控制主机上的多个独立 Linux 系统(容器)。这是 GNU LGPL 许可下的开源免费工具。它可以在 GitHub 库中找到。
微软 Azure
类似于亚马逊 ECS,对容器管理不收取任何费用,但对您使用的内容收取费用。
Apache Mesos
Apache Mesos 由 Apache 软件基金会开发,是一个处理计算机集群的开源项目。它于 2016 年首次发布,并使用C++编程语言编写,免费使用。
Docker-compose
Docker Compose 用于运行多容器应用程序。Docker-compose 描述互连服务组,这些服务组共享软件依赖关系并被编排和缩放在一起。您可以使用一个 YAML 来配置您应用程序的服务。然后,使用docker-compose up命令,从您的配置中创建并启动所有服务。
3 容器编排
随着大公司对其应用程序进行容器化,并将它们迁移到云中,对容器编排解决方案的需求不断增长。有许多可用的解决方案,尽管并不详尽,下面的列表提供了一些可用的容器编排工具和服务。
Kubernetes
本文转载自:https://www.gylmap.com
Kubernetes 是一个开源平台,它支持容器化服务的部署、扩展和管理的自动化。Kubernetes 最初由谷歌开发,由云原生计算基金会(Cloud Native Computing Foundation)维护。有许多付费或免费的产品,但其中最受欢迎的是 Kubernetes。
部署 Kubernetes 为我们提供了一个集群。Kubernetes 集群由一组工作机(称为节点)组成,这些节点上运行容器化的应用。每个群集至少有一个工作节点。每个节点由控制平面(control plane)管理,并包含运行 Pod 所需的服务。每个 Pod 是容器的逻辑主机。工作节点托管作为应用程序工作负载组件的 Pod。控制节点管理群集中的工作节点和 Pod。控制平面和节点可以是物理机或虚拟机。控制平面和节点运行在多台计算机上并不罕见。
Docker swarm
使用 Docker Swarm 模式,我们可以定义服务的期望状态,而 Docker 将维护该状态。Docker 企业版已将 Kubernetes 与 Swarm 集成在一起。Docker 现在为编排引擎的选择提供了灵活性。Docker 引擎 CLI 用于创建大量的 Docker 引擎,可在其中部署应用程序服务。
Minikube
Minikube 允许您在本地计算机上使用 Kubernetes,并允许您在计算机上使用单节点 Kubernetes 集群。
Rancher
Rancher 是使用容器编排的开源平台,被称为 cattle。它使您能够利用 Kubernetes、Swarm、Mesos 等编排服务。Rancher 提供了管理容器所需的软件,组织无需使用一套不同的开源技术从头开始构建容器服务平台。Rancher 允许管理在客户指定的提供商上运行的 Kubernetes 集群。
AWS EKS
亚马逊的完全托管的 Kubernetes 服务。
AKS(微软 Azure 的全管理 Kubernetes 服务)
Azure 容器实例(Azure Container Instance,简称 ACI)是微软 Azure 提供的基本容器编排服务。Azure 服务结构( Azure Service Fabric)是微软 Azure 提供的开源容器编排器。
Marathon
Marathon 是一个可在 Apache Mesos 上运行大规模容器的框架。
Nomad
Nomad 是 HashiCorp 提供的容器和工作负载协调器。
4 IT 自动化
Jenkins
Jenkins 是开源、免费、与平台无关的自动化服务器。Jenkins 提供了几个插件来支持构建、部署和自动化任何项目。它是一个独立的基于 Java 的程序。它支持 Windows、Mac 和其他类似 UNIX 的操作系统。Jenkins 可以通过本机系统软件包 Docker 安装,甚至可以由安装了 Java 运行环境(Java Runtime Environment,简称 JRE)的任何计算机独立运行。
Chef
Chef INFRA 是用于自动化基础架构配置的平台。这将确保每个系统被正确和一致地配置。在此平台上,基础架构被定义为代码。Chef INFRA 将确保配置策略灵活、可版本控制、可测试并且易于阅读。Chef 是基于合同的付费平台。
Puppet
它可以连接云提供商、DevOps 工具和其他 API。根据来自现有 DevOps 工具的信号,传递触发工作流以协调对下游服务的操作。它使您可以通过基于 YAML 的配置自定义和扩展工作流程。它具有一个集成库,可以更轻松地添加步骤。借助 Puppet Enterprise,您可以交付和管理任何云、基础架构或服务。Puppet 是基于合同的付费平台。
Ansible
Ansible 是 RedHat 的开源 IT 自动化工具。Ansible 可以配置系统、部署软件以及协调更高级的 IT 任务,例如持续部署。Ansible 使用剧本(playbooks)做配置管理和多机部署系统。
Terraform:**Terraform 是 Hashi Corp. 提供的开源基础架构即代码软件工具。Terraform 是用于构建、更改和管理基础架构的工具。Terraform 将云 API 编码为声明式配置文件。您可以使用 Terraform 通过称为 HashiCorp 配置语言(HashiCorp Configuration Language,简称 HCL)的配置语言来管理环境,以实现人类可读的自动化部署。
5 协作
Jira
Jira 是一种工具,旨在帮助团队进行项目管理,错误跟踪和问题跟踪。简单来说,它是一个问题跟踪器。Jira 被大公司广泛用于软件开发和软件测试。它是由澳大利亚 Atlassian 公司创建的基于 Web 的商业授权产品,于 2002 年首次发布,广泛流行且具有可有限使用的免费版本。很多敏捷团队使用 Jira 软件,其设计适用于 Scrum 和看板等方法。Jira 还被金融服务、零售、软件、汽车、非营利组织和政府广泛使用。
Slack
Slack 是 Slack Technologies 开发的专有业务通信平台。Slack 提供了许多 IRC 风格的功能,包括按主题组织的持久聊天室、私人组、直接消息将文件保存在一个地方等。Slack 声称,与电子邮件相比,它更加快捷、井井有条,并且更加安全。
Monday
Monday.com 是公司用于任务管理、项目协作、过程跟踪和沟通的项目管理工具。
谷歌工作区(Workspace)
谷歌工作区是谷歌基于应用的生产力平台。谷歌将消息、日历、文件共享、聊天、视频会议和团队组织工具放在一起,并免费提供给其所有用户。
6 监控和可视化
Datadog
Datadog 主要是针对云应用程序的监视工具。它为您的所有云应用程序、服务器和网络提供详细的指标。它可以轻松地与其他自动化工具集成,例如 Ansible、Chef、Puppet 等。Datadog 是按主机收费的服务。
Prometheus(普鲁米修斯)
Prometheus 是用于事件监控和报警的免费软件应用程序。Prometheus 拉取指标(键 / 值),并将数据存储为时间序列,从而允许用户以实时方式查询数据和告警。它以给定的时间间隔与目标进行通信,以收集指标、汇总数据、显示数据、甚至在达到某些阈值时发出警报。
Grafana
Grafana 是开源的可视化和分析软件。它使您可以查询、可视化、告警和探索
指标,无论这些指标存储在哪里。简单的说,它为您提供了将时间序列数据库(time-series database,TSDB)数据转换为精美的图形和可视化效果的工具。
Grafana 通过提供相关数据来帮助我们跟踪用户行为、应用程序行为、在生产环境或预生产环境中弹出错误的频率、弹出错误的类型以及上下文场景。Grafana Cloud 是由 Grafana 实验室运营的高可用、快速、完全托管的 OpenSaaS 指标平台。Grafana 企业版是 Grafana 的商业版本,其中包括开源版本中未提供的附加功能。
Loki
Loki 是受 Prometheus 启发的水平可扩展、高可用的多租户(multi-tenant)日志聚合系统。它的设计具有很高的成本效益,并且易于操作。与其他日志系统不同,它不索引日志的内容,而是为每个日志流设置一组标签。
结论
大多数 DevOps 工具免费提供,并且它们中的大多数能够无缝地协同工作,这使我们能管理对自动化、持续集成、持续交付和持续改进的不断增长的需求。