AnsiBLe在CentOS上的安装与使用
一、Ansible简介
1 什么是Ansible?
Ansible是一款开源的自动化运维工具,用于配置管理、应用部署、任务执行和多机器的编排操作,它使用SSH协议进行远程命令执行,无需在被管理节点上安装客户端代理。
2 Ansible的优点
无代理架构:直接通过SSH协议连接远程主机,不需要在被控端安装任何软件。
声明式语言:使用YAML格式编写剧本(Playbooks),易于阅读和维护。
模块化设计:丰富的模块库,可以扩展功能。
并行执行:支持对多台机器并发执行任务,提高效率。
二、在CentOS上安装Ansible
1 先决条件
确保系统具有互联网连接,并且具备非root用户的sudo权限。
2 安装步骤
2.2.1 启用EPEL仓库
Ansible官方软件包包含在EPEL(Extra Packages for Enterprise Linux)仓库中,因此需要先启用EPEL仓库。
sudo dnf install https://dl.fedoraproject.org/pub/epel/epelreleaselatest8.noarch.rpm y
2.2.2 安装Ansible
sudo dnf install ansible y
2.2.3 验证安装
ansible version
输出示例:
ansible 2.9.x config file = None configured module search path = ['/home/user/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python3.8/sitepackages/ansible executable location = /usr/bin/ansible python version = 3.8.x (default, Nov 1 2023, 00:00:00) [GCC]
三、配置Ansible主机清单
1 创建主机清单文件
Ansible通过一个静态的主机清单文件来管理多个主机,该文件通常位于/etc/ansible/hosts
。
[webservers] 192、168.1.10 192、168.1.11 [dbservers] 192、168.1.12 192、168.1.13
2 生成SSH密钥并分发
为了实现免密登录,需要在所有目标主机上分发Ansible服务器的SSH公钥。
在Ansible服务器上生成SSH密钥对 sshkeygen 将公钥复制到目标主机 sshcopyid user@192.168.1.10 sshcopyid user@192.168.1.11 sshcopyid user@192.168.1.12 sshcopyid user@192.168.1.13
四、基本使用
1 检查主机连通性
使用ping
模块测试Ansible服务器与目标主机的网络连通性。
ansible all m ping
输出示例:
192、168.1.10 | SUCCESS => { "changed": false, "ping": "pong" } 192、168.1.11 | SUCCESS => { "changed": false, "ping": "pong" }
2 运行简单命令
使用command
模块在目标主机上执行命令,查看所有Web服务器的内核版本。
ansible webservers m command a "uname r"
输出示例:
192、168.1.10 | CHANGED | rc=0 >> 4、15.074generic 192、168.1.11 | CHANGED | rc=0 >> 4、15.074generic
3 复制文件到远程主机
使用copy
模块将文件从控制节点复制到远程主机,将本地的/tmp/example.txt
文件复制到所有数据库服务器的/tmp/
目录下。
ansible dbservers m copy a "src=/tmp/example.txt dest=/tmp/"
输出示例:
192、168.1.12 | CHANGED | rc=0 >> 192、168.1.13 | CHANGED | rc=0 >>
4 安装软件包
使用yum
模块在所有Web服务器上安装nginx
。
ansible webservers m yum a "name=nginx state=present"
输出示例:
192、168.1.10 | CHANGED | rc=0 >> 192、168.1.11 | CHANGED | rc=0 >>
五、高级用法及最佳实践
5.1 使用Playbooks进行复杂任务编排
Playbooks是Ansible用来编排多个任务的文件,使用YAML格式编写,创建一个名为websetup.yml
的Playbook,用于配置Web服务器。
name: Setup Web Servers hosts: webservers tasks: name: Ensure nginx is installed yum: name: nginx state: present notify: Start Nginx name: Start and enable Nginx service service: name: nginx state: started enabled: yes handlers: name: Start Nginx service: name: nginx state: restarted
执行Playbook:
ansibleplaybook i /etc/ansible/hosts websetup.yml
2 使用角色组织Playbooks
角色是Playbooks的进一步抽象,允许你将被复用的代码组织在一起,创建一个名为webserver
的角色。
创建角色目录结构 mkdir p roles/webserver/tasks 创建main.yml文件定义任务 vim roles/webserver/tasks/main.yml
编辑main.yml
文件:
name: Install Nginx yum: name: nginx state: present
然后在Playbook中使用该角色:
name: Provision Web Servers with a role hosts: webservers roles: webserver
执行Playbook:
ansibleplaybook i /etc/ansible/hosts playbook_with_roles.yml
3 使用变量和Facts管理动态数据
Ansible允许使用变量和Facts来管理动态数据,可以在Playbooks或Inventory文件中定义变量,定义一个变量来存储Nginx的版本号。
name: Install specific version of Nginx using variable hosts: webservers vars: nginx_version: "1.20.11~stretch" tasks: name: Ensure specific version of Nginx is installed apt: name: "nginx={{ nginx_version }}" state: present
使用Facts获取有关远程主机的信息,获取所有主机的内存信息:
ansible all m command a "free m" o json | jq '.' > facts.json
六、常见问题及FAQs
6.1 问题一:如何修改Ansible的配置文件?
Ansible的配置文件通常位于/etc/ansible/ansible.cfg
或~/.ansible.cfg
,可以使用文本编辑器打开并进行修改,例如设置默认的Inventory文件路径:
[defaults] inventory = /etc/ansible/hosts
6.2 问题二:如何在Ansible中处理密码提示?
对于需要密码的操作,可以使用askbecomepass
选项手动输入密码,或者在受限环境下使用Vault加密敏感数据。
ansibleplaybook i /etc/ansible/hosts playbook.yml askbecomepass askvaultpass