Linux 下Ansible使用详解

Ansible 是一个开源的自动化运维工具,它基于 Python 开发,通过 SSH 协议对远程主机进行管理和配置。以下是在 Linux 下使用 Ansible 的详细介绍:

1. 安装 Ansible

不同的 Linux 发行版安装 Ansible 的方式有所不同,以下为常见发行版的安装方法:

Ubuntu/Debian

sudo apt update
sudo apt install ansible

CentOS/RHEL

sudo yum install epel-release
sudo yum install ansible

2. 配置 Ansible

主机清单

Ansible 通过主机清单(Inventory)来管理要操作的远程主机。默认的主机清单文件是 /etc/ansible/hosts,你也可以创建自己的清单文件。以下是一个简单的主机清单示例:
# 定义一个主机组
[web_servers]
192.168.1.100
192.168.1.101

# 定义另一个主机组
[db_servers]
192.168.1.102

你可以将上述内容保存为一个文件,例如 my_inventory,并在执行 Ansible 命令时使用 -i 选项指定该清单文件。

SSH 密钥认证

为了方便 Ansible 远程连接主机,建议使用 SSH 密钥认证。你可以在本地生成 SSH 密钥对,并将公钥复制到远程主机上:
 
# 生成 SSH 密钥对
ssh-keygen

# 将公钥复制到远程主机
ssh-copy-id user@192.168.1.100

3. Ansible 基本命令

查看主机连通性

使用 ansible 命令可以对远程主机执行简单的操作,例如检查主机的连通性:
ansible all -i my_inventory -m ping
  • all 表示对清单中的所有主机执行操作。
  • -i my_inventory 指定使用 my_inventory 作为主机清单。
  • -m ping 指定使用 ping 模块来检查主机的连通性。

执行命令

可以使用 ansible 命令在远程主机上执行任意命令:
 
ansible web_servers -i my_inventory -a "ls -l"
  • web_servers 表示对 web_servers 主机组中的主机执行操作。
  • -a "ls -l" 指定要在远程主机上执行的命令。

4. Ansible 模块

Ansible 提供了丰富的模块,用于完成各种不同的任务。以下是一些常用模块的使用示例:

yum 模块(用于 CentOS/RHEL 系统)

安装 httpd 服务:
ansible web_servers -i my_inventory -m yum -a "name=httpd state=present"
  • name=httpd 指定要安装的软件包名称。
  • state=present 表示确保软件包已安装。

apt 模块(用于 Ubuntu/Debian 系统)

安装 nginx 服务:
ansible web_servers -i my_inventory -m apt -a "name=nginx state=present"

service 模块

启动 httpd 服务并设置为开机自启:
ansible web_servers -i my_inventory -m service -a "name=httpd state=started enabled=yes"
  • name=httpd 指定要操作的服务名称。
  • state=started 表示启动服务。
  • enabled=yes 表示设置服务为开机自启。

5. Ansible Playbook

Ansible Playbook 是一种用于自动化配置管理和部署的脚本文件,使用 YAML 格式编写。以下是一个简单的 Playbook 示例,用于在 web_servers 主机组上安装并启动 httpd 服务:
---
- name: Install and start httpd service
  hosts: web_servers
  become: true  # 使用 root 权限执行任务
  tasks:
    - name: Install httpd
      yum:
        name: httpd
        state: present

    - name: Start httpd service
      service:
        name: httpd
        state: started
        enabled: yes

将上述内容保存为 httpd_install.yml,然后使用以下命令执行 Playbook:
 
ansible-playbook -i my_inventory httpd_install.yml

6. Ansible 变量和模板

变量

在 Playbook 中可以使用变量来提高脚本的灵活性。例如,在 Playbook 中定义变量:
---
- name: Install and start service
  hosts: web_servers
  become: true
  vars:
    service_name: httpd
  tasks:
    - name: Install service
      yum:
        name: "{{ service_name }}"
        state: present

    - name: Start service
      service:
        name: "{{ service_name }}"
        state: started
        enabled: yes

模板

Ansible 支持使用 Jinja2 模板来生成配置文件。例如,创建一个 httpd.conf.j2 模板文件:
 
ServerName {{ ansible_fqdn }}

在 Playbook 中使用模板生成配置文件:
---
- name: Configure httpd
  hosts: web_servers
  become: true
  tasks:
    - name: Generate httpd.conf
      template:
        src: httpd.conf.j2
        dest: /etc/httpd/conf/httpd.conf
      notify:
        - Restart httpd

  handlers:
    - name: Restart httpd
      service:
        name: httpd
        state: restarted

7. Ansible 角色


Ansible 角色用于组织和复用 Playbook 中的任务。可以将相关的任务、变量、模板等组织成一个角色。例如,创建一个名为 httpd 的角色:
 
roles/
└── httpd/
    ├── tasks/
    │   └── main.yml
    ├── handlers/
    │   └── main.yml
    ├── templates/
    │   └── httpd.conf.j2
    └── vars/
        └── main.yml

在 Playbook 中使用角色:
 
---
- name: Configure httpd using role
  hosts: web_servers
  become: true
  roles:
    - httpd

通过以上步骤,你可以在 Linux 下使用 Ansible 完成自动化运维任务,提高工作效率。

posted on   数据派  阅读(17)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示