简介:TG@luotuoemo
本文由腾讯云代理商【聚搜云】撰写
1. 环境准备
(1)安装Ansible
在控制机(通常是运维工程师的工作站)上安装Ansible。可以使用以下命令:
bash复制
pip install ansible
或者通过系统包管理器安装。
(2)配置SSH免密登录
在控制机上生成SSH密钥对,并将公钥上传到目标云服务器:
bash复制
ssh-keygen -t rsa -b 4096
ssh-copy-id user@your_server_ip
确保目标服务器上已配置好SSH服务。
2. 编写主机清单(Inventory)
创建一个名为hosts.ini的文件,列出所有需要管理的云服务器及其分组:
ini复制
[web_servers]
192.168.1.1 ansible_user=root
192.168.1.2 ansible_user=root
[db_servers]
192.168.1.3 ansible_user=root
可以为不同类型的服务器分组,便于后续操作。
3. 编写Playbook
Playbook是Ansible的核心,使用YAML格式编写,定义了需要在目标服务器上执行的任务。以下是一个简单的Playbook示例,用于批量安装和配置Nginx:
yaml复制
---
- name: Deploy Nginx on Cloud Servers
hosts: web_servers
become: yes
tasks:
- name: Install Nginx
apt:
name: nginx
state: present
update_cache: yes
- name: Start and enable Nginx
service:
name: nginx
state: started
enabled: yes
- name: Configure Nginx
copy:
src: ./nginx.conf
dest: /etc/nginx/nginx.conf
notify:
- Restart Nginx
handlers:
- name: Restart Nginx
service:
name: nginx
state: restarted
4. 执行Playbook
运行以下命令执行Playbook:
bash复制
ansible-playbook -i hosts.ini deploy_nginx.yml
Ansible会根据hosts.ini中的服务器列表,批量执行Playbook中定义的任务。
5. 高级功能
(1)变量管理
通过变量文件管理不同环境下的配置,提高Playbook的通用性。例如:
yaml复制
# vars.yml
nginx_config_file: /etc/nginx/nginx.conf
在Playbook中引用变量文件:
yaml复制
vars_files:
- vars.yml
(2)使用Jinja2模板
通过Jinja2模板实现配置文件的动态生成。例如:
jinja复制
server {
listen 80;
server_name {{ server_name }};
root /usr/share/nginx/html;
index index.html;
}
在Playbook中使用template模块:
yaml复制
- name: Configure Nginx
template:
src: ./nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify:
- Restart Nginx
(3)利用Ansible Galaxy
Ansible Galaxy提供了大量预定义的角色,可以快速实现复杂任务。例如:
bash复制
ansible-galaxy install geerlingguy.nginx
然后在Playbook中引用该角色:
yaml复制
roles:
- geerlingguy.nginx
6. 验证与优化
执行完成后,可以通过以下命令验证配置是否成功:
bash复制
ansible -i hosts.ini web_servers -m shell -a "nginx -t"
根据需要调整Playbook,优化任务执行效率。