目录
- 简介
- 主机管理
- 手动管理
- 利用 Ansible 管理主机
- Playbook 编写
- 基本结构
- 常用模块
- 变量管理
简介
Ansible 是一种基于 Python 编写的配置管理工具,它能够让运维人员自动化地配置和管理多个服务器,实现自动化部署、配置文件管理、应用程序部署等操作。相比其他配置管理工具,Ansible 更加轻量级、易学易用,因此在运维领域得到了广泛的应用。
Ansible 基于 SSH 进行通信,不需要在被管理的主机上安装客户端,而是通过 SSH 远程执行命令,因此无需在被管理的主机上安装任何额外的软件,大大降低了部署和维护的成本。
主机管理
在使用 Ansible 进行管理之前,需要先定义需要管理的主机。主机管理可以手动进行,也可以利用 Ansible 进行管理。
手动管理
手动管理就是在一个文件中定义需要管理的主机列表,例如:
[webserver]
192.168.1.100
192.168.1.101
这里我们定义了一个名为 webserver
的主机组,其中包括两个主机。
利用 Ansible 管理主机
除了手动管理,我们还可以利用 Ansible 进行主机管理,这需要在 Ansible 控制机上安装 Ansible,同时需要在被管理的主机上开启 SSH 服务。
安装 Ansible 的方法取决于操作系统的不同,在 Ubuntu 上可以使用以下命令进行安装:
sudo apt-get update
sudo apt-get install ansible
安装完成后,我们需要在 Ansible 控制机上创建一个名为 inventory
的主机清单文件,指定需要管理的主机列表,例如:
[webserver]
192.168.1.100
192.168.1.101
接下来,我们可以使用 ansible
命令测试连接是否正常:
ansible -m ping -i inventory webserver
如果连接正常,会返回类似以下的结果:
192.168.1.100 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.1.101 | SUCCESS => {
"changed": false,
"ping": "pong"
}
这里的 -m ping
表示使用 ping
模块测试连接,-i inventory
表示使用 inventory
文件指定主机清单,webserver
表示使用 webserver
主机组中的所有主机。
主机管理
在 Ansible 中,您可以通过定义 inventory 来管理主机。Inventory 是一个文本文件,其中包含了您要管理的主机的信息。Ansible 会根据 inventory 中的信息来执行任务。
定义 inventory
在 Ansible 中,默认的 inventory 文件是 /etc/ansible/hosts
。您可以使用以下命令来编辑这个文件:
bashCopy code
sudo nano /etc/ansible/hosts
在 inventory 文件中,每行表示一个主机或主机组,格式如下:
[主机组名]
主机1
主机2
[另一个主机组名]
主机3
主机4
您可以使用主机名、IP 地址或域名来表示主机。如果要定义具有不同用户名和/或 SSH 端口的主机,可以在主机名后面添加参数,例如:
Copy code
web1 ansible_user=ubuntu ansible_port=2222
主机组
在 inventory 文件中,您可以使用方括号来定义主机组。您可以将主机组嵌套在其他主机组中,从而创建复杂的主机组层次结构。
例如,下面的 inventory 文件中定义了一个 webserver
主机组和一个 dbservers
主机组:
[webserver]
web1
web2
[dbservers]
db1
db2
主机变量
在 inventory 文件中,您可以为每个主机设置变量。这些变量可以是 Ansible 内置的,也可以是您自己定义的。例如,要为 web1
主机设置 http_port
变量:
[webserver]
web1 http_port=80
web2 http_port=8080
动态 inventory
在实际情况中,您可能需要管理大量的主机,并且这些主机的数量可能会发生变化。此时,手动维护一个静态 inventory 文件可能会变得困难。因此,Ansible 支持使用动态 inventory 来管理主机。
动态 inventory 通常是一个脚本,它会根据您的需求生成 inventory。这个脚本可以从外部系统中获取信息,例如 Amazon EC2、OpenStack 或 VMware。
Playbook 编写
Playbook 是一个 YAML 文件,用于定义 Ansible 任务的执行顺序和配置信息。Playbook 可以包含一个或多个任务,每个任务都由一个或多个操作组成。
以下是一个简单的 Playbook,用于安装 Apache Web 服务器:
- hosts: webserver
become: true
tasks:
- name: Install Apache
apt:
name: apache2
state: present
notify:
- restart apache
- name: Enable Apache
service:
name: apache2
state: started
enabled: true
handlers:
- name: restart apache
service:
name: apache2
state: restarted