Ansible 是一个开源的自动化运维工具,它基于 Python 开发,通过 SSH 协议对远程主机进行管理和配置。以下是在 Linux 下使用 Ansible 的详细介绍:
不同的 Linux 发行版安装 Ansible 的方式有所不同,以下为常见发行版的安装方法:
sudo apt update
sudo apt install ansible
sudo yum install epel-release
sudo yum install 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
选项指定该清单文件。
为了方便 Ansible 远程连接主机,建议使用 SSH 密钥认证。你可以在本地生成 SSH 密钥对,并将公钥复制到远程主机上:
ssh-keygen
ssh-copy-id user@192.168.1.100
使用 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"
指定要在远程主机上执行的命令。
Ansible 提供了丰富的模块,用于完成各种不同的任务。以下是一些常用模块的使用示例:
安装 httpd
服务:
ansible web_servers -i my_inventory -m yum -a "name=httpd state=present"
name=httpd
指定要安装的软件包名称。
state=present
表示确保软件包已安装。
安装 nginx
服务:
ansible web_servers -i my_inventory -m apt -a "name=nginx state=present"
启动 httpd
服务并设置为开机自启:
ansible web_servers -i my_inventory -m service -a "name=httpd state=started enabled=yes"
name=httpd
指定要操作的服务名称。
state=started
表示启动服务。
enabled=yes
表示设置服务为开机自启。
Ansible Playbook 是一种用于自动化配置管理和部署的脚本文件,使用 YAML 格式编写。以下是一个简单的 Playbook 示例,用于在 web_servers
主机组上安装并启动 httpd
服务:
---
- name: Install and start httpd service
hosts: web_servers
become: true
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
在 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
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 完成自动化运维任务,提高工作效率。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器