黑龙江省网站建设_网站建设公司_Vue_seo优化
2026/1/16 20:00:09 网站建设 项目流程

文章目录

  • 前言
  • 一、ansible概述
  • 二、ansible特点
  • 三、ansible工作机制
  • 四、ansible角色(roles)
  • 五、ansible部署安装(管理端操作)
    • 1、环境规划
    • 2、下载安装ansible
    • 3、配置主机清单
    • 4、配置免密登入
  • 六、ansible基础命令和操作
    • 1、命令格式
    • 2、常用模块示例
      • 2.1、command模块
      • 2.2、shell模块
      • 2.3、cron 模块
      • 2.4、user模块
      • 2.5、group模块
      • 2.6、copy模块
      • 2.7、file模块
      • 2.8、hostname
      • 2.9、ping模块
      • 2.10、yum模块
      • 2.11、service/systemd模块
      • 2.12、script模块
      • 2.13、setup模块
  • 总结


前言

Ansible作为自动化运维工具,凭借其无代理架构与声明式配置,在IT基础设施管理中扮演关键角色。本文将从概述、特性、机制到实操部署与模块应用,系统梳理Ansible的核心知识体系。


一、ansible概述

Ansible 是一款面向类 Unix 系统的自由开源配置和自动化工具,由 Python 编写。与 SaltStack、 Puppet、Chef 相似,但具有以下优势:

总结:批量管理主机(服务器、网络设备等)的自动化工具
官网下载地址:https://www.ansible.com/
在这里插入图片描述

二、ansible特点

  1. 部署简单,管理端安装即可,被控端无需操作。
  2. 默认使用 SSH 协议管理设备。
  3. 集中化管理,支持主从模式。
  4. 配置简洁、功能强大、扩展性高。
  5. 支持 API 和自定义模块,可通过 Python 扩展。
  6. Playbook 可实现复杂任务配置和状态管理。
  7. 对云计算和大数据平台支持良好。

三、ansible工作机制

Ansible 通过 SSH 将模块推送到被管理节点执行,执行完后自动删除。可结合 SVN 等工具管理自定义模块及任务编排。
Ansible 核心组成:

  1. Ansible:核心引擎
  2. Modules:内置核心模块和自定义模块
  3. Plugins:补充模块功能,如连接插件、邮件插件等
  4. Playbooks:剧本,定义多任务操作
  5. Inventory:主机清单
    在这里插入图片描述

四、ansible角色(roles)

随着数据中心环境复杂化,Playbook 会变得庞大且难以维护。角色提供了对复杂任务的模块化管理:

  • 将任务组织为独立、可复用的剧本和文件
  • 提供从外部加载任务、处理程序、变量的机制
  • 可关联静态文件和模板
  • 满足通用需求,可重复使用
  • 严格的目录结构要求

五、ansible部署安装(管理端操作)

1、环境规划

管理端:192.168.10.105
被管理端:192.168.10.106
被管理端:192.168.10.107

2、下载安装ansible

# yum 下载成功即可用
yum install -y epel-release
yum install -y ansible

ansible目录结构:
在这里插入图片描述

3、配置主机清单

设置被管理端的组别。
如:vim /etc/ansible/hosts

[webservers]
192.168.10.106
[dbservers]
192.168.10.107

4、配置免密登入

方法一:

ssh-keygen -t rsa # 生成密钥
# 先登入一次,触发完指纹验证,再进行公钥复制传输
# ssh第一次连接陌生主机会触发校验,不能直接sshpass去复制传输公钥
ssh root@192.168.10.106
ssh root@192.168.10.107
sshpass -p '123456' ssh-copy-id root@192.168.10.106
sshpass -p '123456' ssh-copy-id root@192.168.10.107

方法二:
直接跳过校验,使用密码去登入用户并复制公钥

sshpass -p "123456" ssh-copy-id -o StrictHostKeyChecking=no root@192.168.10.106
sshpass -p "123456" ssh-copy-id -o StrictHostKeyChecking=no root@192.168.10.107

六、ansible基础命令和操作

1、命令格式

absible <组名> -m <模块> -a <参数>

2、常用模块示例

2.1、command模块

远程执行命令,不支持管道和重定向。在/etc/ansible目录下

#-s 列出指定模块的描述信息和操作动作
ansible-doc -s command
#指定 ip 执行 date
ansible 192.168.10.106 -m command -a 'date'
#指定组执行 dat
ansible webservers -a 'date'
#指定组执行 date
ansible webservers -m command -a 'date'
#all 代表所有 hosts 主机
ansible all -m command -a 'date'
#如省略 -m 模块,则默认运行 command模块
ansible all -a 'ls /'

结果示例:
在这里插入图片描述
chdir:在远程主机上运行命令前提前进入目录
creates:判断指定文件是否存在,如果存在,不执行后面的操作
removes:判断指定文件是否存在,如果存在,执行后面的操作

# chdir=/home:执行命令前先切换到 /home 目录
ansible test1 -m command -a 'chdir=/home ls ./'
# 示例:若 /root/ab.txt 不存在,则执行 touch /root/ab.txt 创建文件
ansible test1 -m command -a 'creates=/root/ab.txt touch /root/ab.txt'
# 示例:若 /root/ab.txt 存在,则执行 rm -f /root/ab.txt 删除文件
ansible test1 -m command -a 'removes=/root/ab.txt rm -f /root/ab.txt'

在这里插入图片描述

2.2、shell模块

# 用于查看 shell 模块的精简帮助片段
ansible-doc -s shell
# 输出数值
ansible dbservers -m shell -a 'echo 123456'
# 输出ip地址 awk识别{print $2}失效,因为是shell脚本所以应该加转义符awk "NR==2 {print \$2}"
ansible dbservers -m shell -a 'echo $(ifconfig ens33 | awk "NR==2 {print $2}")'
ansible dbservers -m shell -a 'echo $(ifconfig ens33 | awk "NR==2 {print $2}") | cut -d " " -f2'
ansible dbservers -m shell -a 'echo $(ifconfig ens33 | awk "NR==2 {print \$2}")'

在这里插入图片描述

2.3、cron 模块

present表示添加(可以省略),absent表示移除。
常用的参数:
minute/hour/day/month/weekday:分/时/日/月/周
job:任务计划要执行的命令
name:任务计划的名称

ansible-doc -s cron #按 q 退出
ansible test1 -m cron -a 'minute="*/1" job="/bin/echo hello > /root/aaa.txt" name="testhello"'
ansible test1 -a 'crontab -l'
# 移除计划
ansible test1 -m cron -a 'name="testhello" state="absent"'

在这里插入图片描述

2.4、user模块

常用参数

name:用户名,必选参数
state=present|absent:创建账号或者删除账号,present表示创建,absent表示删除
system=yes|no:是否为系统账号
uid:用户uid
group:用户基本组
shell:默认使用的shell
move_home=yse|no:如果设置的家目录已经存在,是否将已经存在的家目录进行移动
password:用户的密码,建议使用加密后的字符串
comment:用户的注释信息
remove=yes|no:当state=absent时,是否删除用户的家目录
ansible-doc -s user
#创建用户
ansible dbservers -m user -a 'name="test02"'
ansible dbservers -a 'tail /etc/passwd'
#删除用户
ansible dbservers -m user -a 'name="test02" state=absent'

在这里插入图片描述

2.5、group模块

# 用户组管理
ansible-doc -s group
ansible dbservers -m group -a 'name=sjjcxk gid=306 system=yes'
ansible dbservers -a 'tail /etc/passwd'
#system=yes 明确告诉 Ansible / 系统:这个 mysql 组是为「系统服务(如 MySQL 进程)」准备的,而非给普通用户使用;
ansible dbservers -m user -a 'name="test02" uid="1005" system="yes" group=sjjcxk'
#查看用户组
ansible dbservers -a 'id test02'

在这里插入图片描述

2.6、copy模块

常用的参数:

dest:指出复制文件的目标及位置,使用绝对路径,如果是源目录,指目标也要是目录,如果目标文件已经存在会覆盖原有的内容
src:指出源文件的路径,可以使用相对路径或绝对路径,支持直接指定目录,如果源是目录则目标也要是目录
mode:指出复制时,目标文件的权限
owner:指出复制时,目标文件的属主
group:指出复制时,目标文件的属组
content:指出复制到目标主机上的内容,不能与src一起使用
ansible dbservers -m copy -a 'src=/etc/fstab dest=/opt/fstab.bak owner=root mode=640'
ansible dbservers -a 'ls /opt'
ansible dbservers -a 'cat /opt/fstab.bak'
ansible dbservers -m copy -a 'content="123456" dest=/opt/a1.bak owner=root mode=640'
ansible dbservers -a 'cat /opt/a1.bak'

在这里插入图片描述

2.7、file模块

# 设置文件属性
ansible-doc -s file
#修改文件的属主属组权限等
ansible dbservers -m file -a 'owner=root group=mysql mode=755 path="/opt/a1.bak"'
#设置/opt/fstab.link为/opt/fstab.bak的链接文件
ansible dbservers -m file -a 'path=/opt/a1.link src=/opt/a1.bak state=link'
#创建一个文件
ansible dbservers -m file -a 'path=/opt/a1.bak state=touch'
#删除一个文件
ansible dbservers -m file -a 'path=/opt/a1.bak state=absent'

在这里插入图片描述

2.8、hostname

#管理主机名
ansible dbservers -m hostname -a "name=test02"

在这里插入图片描述

2.9、ping模块

测试主机联通性

ansible all -m ping

在这里插入图片描述

2.10、yum模块

管理软件包

# 在远程主机上安装和卸载软件包
ansible-doc -s yum
ansible webservers -m yum -a 'name=httpd'
ansible webservers -m yum -a 'name=httpd state=absent'

在这里插入图片描述

2.11、service/systemd模块

常用的参数:
name:被管理的服务名称
state=started|stopped|restarted:动作包含启动关闭或者重启
enabled=yes|no:表示是否设置该服务开机自启
runlevel:如果设定了enabled开机自启去,则要定义在哪些运行目标下自启动

absible-doc -s service
ansible webservers -m service -a 'enabled=true name=httpd state=started'

在这里插入图片描述

2.12、script模块

实现远程批量运行本地的 shell 脚本。将控制节点的脚本放到被控制节点去运行

ansible-doc -s script
# 在对应节点写入脚本
vim /opt/test.sh
#!/bin/bash
echo "hello ansible from script" > /opt/script.txt
chmod +x /opt/test.sh
ansible webservers -m script -a '/opt/test.sh'
ansible webservers -a 'cat /opt/script.txt'

在这里插入图片描述
在这里插入图片描述

2.13、setup模块

facts 组件是用来收集被管理节点信息的,使用 setup 模块可以获取这些信息

ansible-doc -s setup
ansible webservers -m setup #获取mysql组主机的facts信息
ansible dbservers -m setup -a 'filter=*ipv4' #使用filter可以筛选指定的facts信息

在这里插入图片描述


总结

本文系统介绍了Ansible的核心概念、工作机制及部署流程,通过常用模块示例展示了自动化配置管理能力。掌握Ansible可极大提升运维效率,实现基础设施即代码的现代化运维转型。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询