什么是ansible:
- 是一种开源的自动化平台,使用simple automationlanguage编写的playbook可以完美的描述IT应用架构,同时带有automation engine 运行 playbook ansible可以执行功能强大的自动化任务,适用于不同的工作流和环境,新手也能快速掌握
- ansible是简单的:playbook易于阅读、理解和更改,编写他们不需要使用特殊技巧,playbook按顺序执行任务
- ansible是功能强大的:可以使用ansible去部署应用程序,配置管理,工作流自动化和网络自动化
- 可以用于编排整个应用程序生命周期
- ansible是无需代理的:ansible使用openSHH或者WinRM连接到它管理的主机,并运行任务,向这些主机推送称为ansible modules小程序,当ansible完成任务时,被推送的模块将会被删除,由于没有代理,ansible比其他的替代方案更高效,更安全
ansible概念和架构
- ansible架构中有两种计算机类型:控制节点和收官主机
- ansible软件安装在控制节点上,所以组件也在控制节点上被维护。
- 受管主机在主机清单文本文件中,位于控制节点上,含有受管主机名称或者IP列表
- ansbile用户无需编写复杂的脚本,而只要创建高级play,即可保证主机或者主机组处于特定状态
- play按照该play指定的顺序对主机执行一系列任务,play采用YAML格式,包含一个或者多个play的文件称为playbook
- 每个task运行一个模块module(使用pyhton,powershell或者某种其他语言编写),ansible随附了数百个实用模块,他们能执行许多个的不同的自动化任务
- 在task在使用时,模块通常确保计算机的某一特定方面的处于特定的状态。如果系统不处于指定的状态,task应将其置于相应状态。如果task失败,ansible默认在出错主机中止playbook的其余部分task,play和playbook均具有幂等性。这意味着,可以在相同主机上多次安全的运行一个playbook,当系统处于正确状态时,playbook在运行时不会进行任何的更改
- ansible也使用plugin,插件是可以添加到ansible中的代码,以对它进行扩展并使它适合新的用途
- ansible架构也是无代理的.通常,当管理员运行ansible playbook时,控制节点会使用SSH(默认),或WinRM连接受管主机,这意味着不需要在受管主机上安装ansible专用代理。
一 .特点
-
简单易用
-
Ansible 使用 YAML(Yet Another Markup Language)语言编写配置文件,这种语言简洁明了,易于阅读和编写。例如,一个简单的任务配置文件可以像这样:
yaml复制
- name: Install httpd yum: name: httpd state: present
这段代码的意思是使用 yum 包管理器来安装 httpd(Apache HTTP 服务器)软件包。Ansible 的语法直观,对于运维人员来说学习成本相对较低。
-
-
无需客户端代理
-
与一些其他自动化工具(如 Puppet 或 Chef)需要在被管理的节点上安装客户端代理不同,Ansible 是基于 SSH(Secure Shell)进行通信的。它不需要在被管理的机器上安装额外的软件代理,这使得部署和维护更加简单。只要被管理的机器能够通过 SSH 连接,并且 Ansible 控制节点有相应的 SSH 权限,就可以对它们进行管理。
-
-
强大的模块支持
-
Ansible 拥有丰富的模块库,这些模块涵盖了各种系统管理任务。例如,有用于管理文件的
file
模块,可以设置文件的权限、所有权等属性;有用于管理服务的service
模块,可以启动、停止、重启服务等。此外,Ansible 还支持自定义模块,用户可以根据自己的需求开发新的模块来扩展其功能。
-
-
可扩展性强
-
它可以通过插件系统进行扩展。例如,可以通过添加新的回调插件来改变 Ansible 执行任务时的输出格式,或者通过添加新的连接插件来支持不同的远程连接方式。而且 Ansible 支持多种操作系统,包括 Linux、Unix 和 Windows 等,能够很好地适应不同的运维环境。
-
二、工作原理
-
控制节点和被管理节点
-
Ansible 的工作主要涉及控制节点和被管理节点。控制节点是安装了 Ansible 的机器,它负责向被管理节点发送指令。被管理节点是需要进行自动化管理的机器。控制节点通过 SSH 连接到被管理节点,并在被管理节点上执行任务。
-
-
Inventory(主机清单)
-
主机清单是 Ansible 用来定义被管理节点的列表。它通常是一个文件,可以是 INI 格式或 YAML 格式。例如,一个简单的 INI 格式的主机清单文件(inventory.ini)可以是这样的:
复制
[webservers] web1.example.com web2.example.com [dbservers] db1.example.com
这里定义了两个组:
webservers
和dbservers
,分别包含不同的服务器。Ansible 可以根据这些分组来对不同的服务器进行批量操作。
-
-
Playbook(剧本)
-
Playbook 是 Ansible 的核心概念之一,它是一个用 YAML 编写的文件,用于定义一系列的任务。这些任务按照顺序执行,可以实现复杂的自动化操作。例如,一个简单的 Playbook 文件(deploy.yml)可能如下:
yaml复制
- hosts: webservers tasks: - name: Install httpd yum: name: httpd state: present - name: Start httpd service service: name: httpd state: started
这个 Playbook 指定在
webservers
组的主机上执行两个任务:安装 httpd 软件包和启动 httpd 服务。当 Ansible 执行这个 Playbook 时,它会按照任务的顺序在被管理节点上依次执行这些操作。
-
三、应用场景
-
配置管理
-
可以用来管理服务器的软件包安装、配置文件修改、服务启动等。例如,在一个大型的服务器集群中,通过编写 Playbook,可以统一地在所有服务器上安装特定的软件版本,并且将配置文件设置为统一的标准格式,确保服务器环境的一致性。
-
-
应用部署
-
Ansible 能够实现应用程序的自动化部署。它可以将应用程序的代码从版本控制系统(如 Git)拉取到服务器上,然后进行编译、安装和启动。例如,对于一个基于 Python 的 Web 应用程序,Ansible 可以先安装 Python 环境和相关的依赖库,然后从 Git 仓库拉取代码,最后启动 Web 应用服务。
-
-
任务自动化
-
可以执行各种重复性的任务,如定期备份数据库、清理日志文件等。通过编写定时任务的 Playbook,并结合操作系统的定时任务工具(如 cron),可以实现这些任务的自动化执行,节省运维人员的时间和精力。
-
Ansible 在现代的运维工作中发挥着重要作用,它通过简单高效的方式帮助运维人员实现自动化管理,提高工作效率和系统的稳定性。