在可维护性,可靠性,效率和安全性方面,DevOps 为私有云在改进操作流程方面发挥着重要的作用。私有云是一个由许多硬件和软件组件组成的复杂系统。
对于任何支持的企业组织,操作流程的自动化和文档记录,规划变更和跟踪应用的更新都是强制性的要求。
同样的方法也适用于云计算的工作负载量。此外DevOps的实践也成为开发者和 QA 团队事实上的标准,特别是当使用私有云作为开发或目标平台时。当然,并不是所有的云操作方面都可以用 DevOps 来实践。
例如,许多硬件相关的操作不匹配--你不能用一个软件工具,去物理的连接服务器上的硬件开关(本人注:服务器的 IPMI 是可以做到远程控制呀。)
但即使在这种情况下,你仍可使用 DevOps 工具和实践来验证连通性和记录网络配置过程。也为不断增长的软件定义网络(SDN)的需求提供了一个机会,让 DevOps 在新的领域得以发展。
我们将回顾私有云几种类别上的15个DevOps 工具
在这篇文章中,我们将在几个类别中讨论15个针对私有云的 DevOps 工具。这几些工具类别的分选主要是人为合成的,在由工具提供的功能之间没有严格的边界,并且在某些情况下,这里所提到的工具可以做更多范畴假设。
最后,这里的一些工具没有根据具体的规则去分类,所以如果我们忘记了你认为应该包括的工具,只需给我们发个消息,我们将会讨论这个工具,并在下一次综述时将其纳入其中。
DevOps Tools
1. 配置管理工具(Configuration management tools)
配置管理工具自动完成日常操作,系统管理任务,当建立复杂的系统时,最大限度地减少人为错误。配置管理工具允许你定义的配置作为代码。(“Infrastructure as a code” 的方式)。
它可以让你追踪配置基线之间的变化(又称为配置版本控制),有效的应用它们并在必要时进行回滚更改操作。此外操作流程,如部署或发布管理可以记录并验证。
使用案例:私有云初始化部署和配置,将更改应用到私有云,应用具体的部署和配置。
1.1 Chef
Chef 的配置文件使用领域专用语言(DSL)的“配方”(以.rb 为文件扩展名)。多个配方也可以整合到一个菜谱(cookbook)中。该配方定义了资源及其状态,例如:应该安装的软件包,该文件应存在,服务应该运行,等等。
Chef 验证所有定义的资源是否应具有指定的状态,如果必要,任何资源的实际状态如果与指定的状态不同,那么则应用更改。这允许你写幂等的配方,意味着你可以多次应用相同的配方,如果所有定义的资源都具有指定的状态,那么 Chef 将不会更改任何内容。
Chef 可以在 服务器/客户端 模式中使用,也可在独立的模式下运行。在任何情况下,Chef 应安装要配置的节点或VM上。
Chef 客户端是用 Ruby 语言编写的,Chef 服务器是用 Ruby 和 Erlang 语言编写的。许可:2.7版本以后的使用 Apache License,之前版本使用 GNU General Public License。
Chef 菜谱的示例:
nclude_recipe “apt”
package ‘nginx’ do action :install end
service ‘nginx’ do action [ :enable, :start ]
end
1.2 Puppet
Puppet 的配置文件使用特殊的领域专用语言,它们被称为 Puppet 清单(以.pp 为文件扩展名)。Puppet 可以使用独立的模式或者 服务器/客户端 模式。Puppet 客户端(agent)应该安装要配置的每个节点或VM上。
Puppet 客户端 通过一个名为 Facter 的工具收集 Puppet 服务器上的配置更改要求,并生成特定与服务器的目录,其应用的配置更改都会记录下来。
Puppet 可以用来配置 类 unix 系统或 Windows 节点/虚拟机。
Puppet 是用Ruby 语言编写。许可:Apache License.
Puppet 清单 的示例:
service { ‘nginx’:
ensure => running,
enable => true, }
1.3 Ansible
Absible 使用 模块(Modules)来定义配置任务。模块可以用标准脚本语言(Python,Bash,Ruby,等等)编写,这是一个很好的做法,使每个模块幂等。Ansible 剧本(YAML语言编写)角色映射到 节点/虚拟机上,以对这些节点/虚拟机 进行编排有序的执行。
Ansible 支持 ad-hoc 任务:管理任务(不必幂等)以在多个节点/虚拟机上执行。Ansible具有无代理架构:你不需要在配置的节点/虚拟机上安装Ansible(然而,这些节点必须安装 python 环境),Ansible 通过SSH或者通过 PowerShell(Windows 机器)从单个控制机器上配置管理节点/虚拟机,并且能够支持并行配置多个节点。
Ansible 可以用来配置类 unix 系统或 Windows 节点/虚拟机。
Ansible 使用 Python 语言编写。许可:GNU General Public License.
Ansible playbook 示例:
– name: Install nginx
yum: name=nginx state=present- name: restart nginx
service: name=nginx state=restarted enabled=yes
1.4 Salt
Salt(又叫SaltStack)同时支持服务器/客户端 和无代理模式。在后一种情况下,Salt 使用SSH连接到受管理的节点/虚拟机。Salt 使用以Python编写的执行模块,其中包含函数以定义配置任务。另外 Salt 支持 ad-hoc 命令。Salt 状态文件(以.sls 为文件扩展名)以 YAML 格式定义幂等任务。
Salt 使用 Python 语言编写。许可:Apache License.
Salt 状态描述文件示例:
nginx:
pkg.installed
2. 裸机配置工具(Bare-metal provisioning tools)
裸机配置工具从中心服务器基于网络的操作系统自动安装。
使用案例:在私有云的初始部署期间提供新的裸机,增加新的裸机服务器,裸机配置作为私有云的服务。
2.1 Cobbler
Cobbler 使用 DHCP 服务器来处理引导服务器并将其引导到TFTP服务器,在那里它可以下载作为PXE引导文件和带有操作系统的可引导映像。
然后 Cobbler 使用 Linux 的 Kickstart(用于基于Red Hat的操作系统)或Pressed(用于基于Debian的操作系统)安装方法进行无人值守的操作系统安装和配置。
由配置文件来自定义要配置的系统,Cobbler 支持多个配置文件。一旦节点被配置,Cobbler 应确保该节点被引导到预配置的操作系统而不是PXE。Cobbler 包含 命令行客户端和 Web 客户端。
Cobbler 使用 Python 语言编写。许可:GNU General Public License。
2.2 Ironic
Ironic 是一个OpenStack项目,它使用PXE配置裸机服务器和 IPMI以打开/关闭机器。Ironic 包含 Ansible Playbooks(bifrost项目),以独立模式安装和运行 Ironic,无需其它 OpenStack 组件。Ironic 还包含命令行客户端和 Web 客户端。
Ironic 使用 Python 语言编写。License:GNU Affero General Public License。
3. 编排工具(Orchestration tools)
编排作为配置工具的元级。
使用方案:初始化部署和配置私有云,自动扩展。
3.1 MCollective
MCollective 是构建服务器编排和并行工作执行系统的框架,而不是一个工具。MCollective 支持分散库存和自动发现。
MCollective 服务端 应安装在 被管理节点/虚拟机,而 MCollective 客户端应安装在控制机上。MCollective 使用代理插件来扩展其功能。
MCollective 服务器和客户端不直接通信,而是在发布/订阅模式中使用中间件系统(通常是RabbitMQ)。这允许 MCollective 客户端向 MCollective 服务器发送广播请求,也支持直接请求/回复。
MCollective 使用Ruby语言编写. 许可:Apache License。
3.2 Juju
Juju 允许你将复杂的应用程序部署到多个云平台和裸机服务器上。Juju 使用 charms 来定义代理的行为,charm hooks 是要执行的实际任务(如:安装软件,启动或停止服务等)。
Charms 还定义了与其它 charms 的关系。Charm hooks 可以用任何语言来实现。还有配置管理工具,如Ansible,Chef,Puppet 可以在 hook 里面做服务器配置管理。
Charm bundle 允许你将一组 charms,它们的属性和关系导出到 YAML 文件中。然后,这个 bundle 可以导入到另一个 Juju 环境中,以准确的部署已部署的应用程序。Juju 包含 命令行客户端和web客户端。
Juju 使用 Go 语言编写。许可:GNU Affero General Public License, GNU Lesser General Public License
3.3 Apache *lyn
Apache *lyn 允许你使用基于策略的自动化来建模,监控和管理应用程序。对于建模,Apache *lyn 使用蓝图(blueprint)的概念,它根据组件、配置、关系和部署场景来定义应用程序。蓝图使用 YAML 文件编写。
Apache *lyn 支持许多应用程序,开箱即用。并具有 Web UI 来部署,监视和管理应用程序。此外,Apache *lyn 支持许多位置部署,包括云平台和现有节点。
相同的蓝图可以用于将应用程序部署到不同的位置。Policies 根据应用程序传感器的读数定义对应用程序的无人值守更改。
Apache *lyn 使用 Java, Javascript, Groovy 语言编写。许可: Apache License.
3.4 Cloudify
Cloudify 允许你在 YAML 文件中定义应用程序配置、服务和依赖关系。这样的文件称为蓝图。Cloudify 采用蓝图作为输入,可以部署和管理应用程序。
Cloudify 支持多种云计算平台和虚拟化环境。蓝图还定义了应用程序的生命周期。对于应用程序部署阶段,Cloudify 支持配置管理工具,如Chef和Puppet。
Cloudify 使用 Python 语言编写。许可:Apache License。
3.5 Docker Machine
Docker Machine 是一个工具,它允许你在提供的节点上安装 Docker(见下文),之后可以远程的管理这样的节点。
Docker Machine 使用Go语言编写。许可:Apache License。
4. 持续集成工具 (Continuous integration tools)
使用案例:从开发到生产,在内部云开发、安装和应用程序运行的统一平台 。
4.1 Jenkins
Jenkins 是一个具有许多插件的自动化服务器。用于构建,测试和自动化部署应用程序。通常Jenkins用作软件开发的 CI/CD 工具。Jenkins 的作业(构建)可以由各种触发器启动。例如提交代码到版本控制系统,按计划事件,通过访问特定 URL 构建或者在完成其它构建之后进行触发。
Jenkins 使用 Java 语言编写. 许可:MIT License.
4.2 Docker
Docker 允许你将具有所有依赖关系的应用程序软件打包到容器中,这可以很轻松的部署在基于 Linux 的平台上。在非 Linux 平台上 Docker 使用一个虚拟机来运行容器。
Docker 使用 Go 语言编写。 许可:Apache License 2.0。
5. 监控和日志记录(Monitoring and logging)
使用案例:从私有云服务和应用程序整合日志,监控分布式服务和应用程序。
5.1 Zabbix
Zabbix 是一个为应用服务,网络服务和硬件监控提供的解决方案。Zabbix 将收集的数据存储在关系数据库中,如 MySQL,PostgreSQL 等。Zabbix 允许你监控简单的服务,如 HTTP 服务。
Zabbix agent 端可以安装在 Windows 和 类 Unix 服务器上,用来检视系统参数,如 CPU 负载,内存和磁盘利用率等。
另外,agent 可用于监视标准服务和自定义应用程序。Zabbix 也支持通过 SNMP、SSH 等方式,无需在要监视的服务器上安装代理。
Zabbix 使用 C, PHP,Java 语言编写。许可: GNU General Public License version 2。
5.2 Elasticsearch, Logstash, Kibana (ELK)
ELK 是 Elasticsearch,Logstash,Kibana 软件的组合,它是用于记录,日志分析,日志搜索和可视化的完整工具。Elasticsearch 是基于 Apache Lucene 的搜索工具。Logstash 是用于收集,解析和存储日志的工具,可以通过 Elasticsearch 对其进行索引。
Logstash 支持许多数据源,解析器和过滤器。Logstash 通常与 Lumberjack(一种工具)结合使用。该工具提供其 syslog 实现,并可将本地日志事件转发到 Logstash 中。
当通过网络发送日志时,Lumberjack 使用 SSL 对日志进行加密。Logstash 和 Elastcsearch 都支持 HA 配置,没有单点故障,以确保所有日志都存储在远程。Kibana 是 Elasticsearch 的可视化插件。
Elasticsearch,Logstash 使用 Java 编写。Kibana 使用 JavaScript 编写。Lumberjack 使用C语言编写。License:Apache License 2.0。
DevOps 是一个不断增长的文化,许多组织企业正在采取。将传统IT和开发人员紧密结合在一起,为企业提供敏捷,快速响应的环境。由于许多工具来支持这些努力,以 Devops 为 IT 中心的转变,正变得更不复杂和更有益。