Ansible简介
Ansible 是一款开源的自动化运维工具,由 Red Hat 公司开发并维护。它主要用于配置管理、应用部署、任务自动化和持续交付。Ansible 采用基于 YAML 的语法(称为 Playbook),通过 SSH 协议与目标主机通信,无需在被管理节点上安装客户端,仅需 Python 环境即可运行。
核心特点
无代理架构
Ansible 通过 SSH 或 WinRM(Windows 系统)直接管理节点,无需在被控端安装额外代理程序,降低了部署和维护成本。
幂等性
Ansible 的模块设计确保操作重复执行时结果一致,避免因多次运行导致系统状态异常。
模块化设计
提供丰富的内置模块(如文件管理、包安装、服务控制等),也支持用户自定义模块扩展功能。
Playbook 编排
通过 YAML 文件定义自动化任务流程,可读性强,易于版本控制。例如:
- name: Install Nginx
hosts: web_servers
tasks:
- name: Ensure Nginx is installed
apt:
name: nginx
state: present
适用场景
- 配置管理:统一管理服务器配置(如 /etc/hosts、用户权限等)。
- 应用部署:自动化部署多台服务器的应用程序。
- 云资源管理:与 AWS、Azure 等云平台集成,动态创建和配置资源。
- 持续交付:与 CI/CD 工具(如 Jenkins)结合,实现自动化测试和发布。
与其他工具对比
- 与 Puppet/Chef 相比:Ansible 无需客户端,学习曲线更低。
- 与 SaltStack 相比:两者均使用 YAML,但 Ansible 社区更活跃,文档更丰富。
Ansible 的轻量化和易用性使其成为中小型团队自动化运维的首选工具。
Centos 7.9安装Ansible
Ansible在CentOS 7的默认存储库中不可用,需要启用EPEL(Extra Packages for Enterprise Linux)存储库。
yum install epel-release
yum clean all
yum makecache
sudo yum install ansible
ansible --version
配置Ansible
默认配置文件位于/etc/ansible/ansible.cfg
,库存文件(Inventory)位于/etc/ansible/hosts
。可根据需要修改这些文件以适应环境。
mkdir -p ~/ansible # 创建一个工作目录
cat > ~/ansible/ansible.cfg << EOF # 创建ansible配置文件
[defaults]
inventory = ~/ansible/hosts
remote_user = root
host_key_checking = False
EOF
cat > ~/ansible/hosts << EOF # 创建Inventory文件hosts
[all]
192.168.0.2
192.168.0.3
[master]
192.168.0.1
[newhosts]
192.168.0.4
EOF
配置SSH免密码登录设置
ssh-keygen -t rsa -b 2048 # 生成一个主机密钥
ansible all -m authorized_key -a "user=root key='{{ lookup('file', '/root/.ssh/id_rsa.pub') }}' path=/root/.ssh/authorized_keys manage_dir=no" --ask-pass -c paramiko # 将密钥发送至受控主机
Ansible 全局配置
sed -i "s@#host_key_checking = False@host_key_checking = False@g" /etc/ansible/ansible.cfg
sed -i "s@#log_path = /var/log/ansible.log@log_path = /var/log/ansible.log@g" /etc/ansible/ansible.cfg
sed -i "s@#private_key_file = /path/to/file@private_key_file = /root/.ssh/id_rsa@g" /etc/ansible/ansible.cfg
测试Ansible
使用以下命令测试连接:
ansible all -m ping
可选:使用pip安装最新版本
如果需要最新版本的Ansible,可以通过pip安装:
sudo yum install python-pip
sudo pip install ansible
注意:使用pip安装可能会与系统包管理器产生冲突,建议在虚拟环境中使用。