第173集:Ansible 基础
核心知识点讲解
1. Ansible 概述
Ansible是一种开源的自动化工具,用于配置管理、应用部署、任务编排和IT基础设施自动化。它由Red Hat公司维护,采用无代理架构,通过SSH协议远程执行命令和管理配置。
2. Ansible 的核心优势
- 无代理架构:不需要在被管理节点上安装客户端软件
- 基于SSH:利用系统自带的SSH协议进行通信
- 简单易用:使用YAML格式编写配置文件,语法简洁
- 幂等性:多次执行相同操作结果一致,避免重复配置
- 模块化:丰富的模块库,支持各种操作
- 可扩展性:支持自定义模块和插件
3. Ansible 架构
Ansible采用主从架构,主要由以下组件组成:
- 控制节点(Control Node):安装Ansible的主机,负责执行Playbook和管理被控制节点
- 被控制节点(Managed Node):需要被管理的主机,通过SSH协议接收控制节点的指令
- Inventory:主机清单文件,定义被管理节点的分组和属性
- Playbook:自动化任务的定义文件,使用YAML格式编写
- 模块(Module):执行具体任务的代码单元,如文件操作、服务管理等
- 插件(Plugin):扩展Ansible功能的组件,如连接插件、变量插件等
4. Ansible 的安装
4.1 在控制节点上安装 Ansible
Ubuntu/Debian 系统:
# 更新软件包列表
apt update
# 安装 Ansible
apt install ansible -yCentOS/RHEL 系统:
# 安装 EPEL 仓库
yum install epel-release -y
# 安装 Ansible
yum install ansible -y使用 pip 安装:
# 安装 pip
apt install python3-pip -y # Ubuntu/Debian
yum install python3-pip -y # CentOS/RHEL
# 使用 pip 安装 Ansible
pip3 install ansible4.2 验证安装
# 查看 Ansible 版本
ansible --version5. Ansible 主机清单(Inventory)
Inventory文件用于定义被管理节点的分组和属性,默认位置为 /etc/ansible/hosts。
5.1 基本格式
# 简单主机列表
192.168.1.100
192.168.1.101
# 带主机名的列表
web1 ansible_host=192.168.1.100
web2 ansible_host=192.168.1.101
# 主机组
[webservers]
web1
web2
[databases]
db1 ansible_host=192.168.1.200
db2 ansible_host=192.168.1.201
# 嵌套组
[all:children]
webservers
databases5.2 主机变量
[webservers]
web1 ansible_host=192.168.1.100 ansible_user=ubuntu ansible_ssh_pass=password
web2 ansible_host=192.168.1.101 ansible_user=centos ansible_ssh_pass=password5.3 组变量
[webservers]
web1
web2
[webservers:vars]
ansible_user=ubuntu
ansible_ssh_pass=password6. Ansible 基本命令
6.1 测试连接
# 测试所有主机的连接
ansible all -m ping
# 测试特定组的连接
ansible webservers -m ping
# 测试特定主机的连接
ansible web1 -m ping6.2 执行命令
# 在所有主机上执行命令
ansible all -a "ls -la"
# 在特定组上执行命令
ansible webservers -a "df -h"
# 在特定主机上执行命令
ansible web1 -a "free -m"6.3 使用模块
# 使用 file 模块创建目录
ansible webservers -m file -a "path=/tmp/test state=directory"
# 使用 copy 模块复制文件
ansible webservers -m copy -a "src=/etc/hosts dest=/tmp/hosts"
# 使用 service 模块管理服务
ansible webservers -m service -a "name=httpd state=started enabled=yes"7. Ansible 配置文件
Ansible的主配置文件为 /etc/ansible/ansible.cfg,可以通过修改此文件来自定义Ansible的行为。
常用配置选项:
[defaults]
# 主机清单文件路径
inventory = /etc/ansible/hosts
# 默认远程用户
remote_user = ubuntu
# 私钥文件路径
private_key_file = ~/.ssh/id_rsa
# 超时时间
timeout = 10
# 是否显示详细输出
transport = smart
# 日志文件路径
log_path = /var/log/ansible.log实用案例分析
案例1:批量更新系统软件包
场景描述:需要在多台服务器上批量更新系统软件包。
解决方案:
- 编辑主机清单文件
/etc/ansible/hosts:
[all:vars]
ansible_user=root
[webservers]
web1 ansible_host=192.168.1.100
web2 ansible_host=192.168.1.101
[databases]
db1 ansible_host=192.168.1.200- 执行更新命令:
# 更新 Ubuntu/Debian 系统
ansible webservers -a "apt update && apt upgrade -y"
# 更新 CentOS/RHEL 系统
ansible databases -a "yum update -y"实施效果:
- 批量完成了多台服务器的软件包更新
- 避免了逐台登录服务器执行命令的繁琐操作
- 可以根据不同系统类型执行不同的更新命令
案例2:部署 Web 服务
场景描述:需要在多台服务器上部署 Nginx Web 服务。
解决方案:
- 执行安装和配置命令:
# 在 Ubuntu/Debian 系统上安装 Nginx
ansible webservers -a "apt update && apt install nginx -y"
# 启动并设置开机自启
ansible webservers -m service -a "name=nginx state=started enabled=yes"
# 复制网站配置文件
ansible webservers -m copy -a "src=/path/to/default.conf dest=/etc/nginx/sites-available/default"
# 复制网站文件
ansible webservers -m copy -a "src=/path/to/index.html dest=/var/www/html/index.html"
# 重启 Nginx 服务
ansible webservers -m service -a "name=nginx state=restarted"实施效果:
- 批量完成了 Nginx 的安装和配置
- 确保了所有服务器的配置一致性
- 减少了手动操作的错误率
案例3:创建用户并配置 SSH 密钥
场景描述:需要在多台服务器上创建相同的用户并配置 SSH 密钥。
解决方案:
- 生成 SSH 密钥对(如果尚未生成):
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N ""- 执行用户创建和密钥配置:
# 创建用户
ansible all -m user -a "name=deployer createhome=yes shell=/bin/bash"
# 创建 .ssh 目录
ansible all -m file -a "path=/home/deployer/.ssh state=directory mode=0700 owner=deployer group=deployer"
# 复制公钥文件
ansible all -m copy -a "src=~/.ssh/id_rsa.pub dest=/home/deployer/.ssh/authorized_keys mode=0600 owner=deployer group=deployer"实施效果:
- 批量完成了用户创建和 SSH 密钥配置
- 确保了所有服务器的访问方式一致性
- 提高了系统安全性
课后练习
- 在控制节点上安装 Ansible,并配置主机清单文件
- 测试与被控制节点的连接
- 使用 Ansible 批量执行以下任务:
- 创建一个新的目录
- 复制一个文件到被控制节点
- 安装一个软件包
- 启动并设置一个服务开机自启
- 编写一个简单的 Ansible Playbook,实现上述任务的自动化执行
- 研究 Ansible 的常用模块,了解它们的功能和使用方法
总结
本集介绍了Ansible的基本概念、架构组成、安装配置和核心组件,以及Ansible的基本使用方法。Ansible作为一种无代理的自动化工具,具有简单易用、功能强大的特点,是实现自动化运维的重要工具。通过本集的学习,你应该能够掌握Ansible的基础知识和基本操作技能,为后续学习Ansible Playbook和更高级的自动化运维技术打下基础。