腾讯云国际站代理商:如何通过Ansible批量配置云服务器?

简介: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,优化任务执行效率。