第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 -y

CentOS/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 ansible

4.2 验证安装

# 查看 Ansible 版本
ansible --version

5. 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
databases

5.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=password

5.3 组变量

[webservers]
web1
web2

[webservers:vars]
ansible_user=ubuntu
ansible_ssh_pass=password

6. Ansible 基本命令

6.1 测试连接

# 测试所有主机的连接
ansible all -m ping

# 测试特定组的连接
ansible webservers -m ping

# 测试特定主机的连接
ansible web1 -m ping

6.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:批量更新系统软件包

场景描述:需要在多台服务器上批量更新系统软件包。

解决方案

  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
  1. 执行更新命令:
# 更新 Ubuntu/Debian 系统
ansible webservers -a "apt update && apt upgrade -y"

# 更新 CentOS/RHEL 系统
ansible databases -a "yum update -y"

实施效果

  • 批量完成了多台服务器的软件包更新
  • 避免了逐台登录服务器执行命令的繁琐操作
  • 可以根据不同系统类型执行不同的更新命令

案例2:部署 Web 服务

场景描述:需要在多台服务器上部署 Nginx Web 服务。

解决方案

  1. 执行安装和配置命令:
# 在 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 密钥。

解决方案

  1. 生成 SSH 密钥对(如果尚未生成):
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N ""
  1. 执行用户创建和密钥配置:
# 创建用户
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 密钥配置
  • 确保了所有服务器的访问方式一致性
  • 提高了系统安全性

课后练习

  1. 在控制节点上安装 Ansible,并配置主机清单文件
  2. 测试与被控制节点的连接
  3. 使用 Ansible 批量执行以下任务:
    • 创建一个新的目录
    • 复制一个文件到被控制节点
    • 安装一个软件包
    • 启动并设置一个服务开机自启
  4. 编写一个简单的 Ansible Playbook,实现上述任务的自动化执行
  5. 研究 Ansible 的常用模块,了解它们的功能和使用方法

总结

本集介绍了Ansible的基本概念、架构组成、安装配置和核心组件,以及Ansible的基本使用方法。Ansible作为一种无代理的自动化工具,具有简单易用、功能强大的特点,是实现自动化运维的重要工具。通过本集的学习,你应该能够掌握Ansible的基础知识和基本操作技能,为后续学习Ansible Playbook和更高级的自动化运维技术打下基础。

« 上一篇 Cron 定时任务 下一篇 » Ansible Playbook