目录
Ansible简介
Ansible是基于Python语言开发的一款轻量级集中化运维工具,它默认采用SSH的方式管理客户端,再主控端部署Ansible环境,通过SSH远程管理被控制主机(节点)。Ansible提供了各种模块对客户端进行批量管理,包括执行命令、安装软件、执行特定任务等。对于一些复杂的需要重复执行的任务,可以通过Ansible下的playbook来管理。与其他运维软件相比,Ansible具有于以下几个特点。
• 部署简单,只需要再主控端部署Ansible环境,被控端无需做任何操作。
• 默认通过SSH协议对设备进行管理。
• 配置简单,功能强大,扩展性强。
• 支持API及自定义模块,可通过python轻松扩展。
• 通过playbook来定制强大的配置、状态管理。
• 对云计算平台、大数据有很好的支持。
• 提供一个功能强大、可操作性强的web管理界面和REST API接口——AWX平台。
Ansible是基于模块工作的,它本身只提供一个框架,并没有批量部署的能力,真正具有批量部署能力的是它所运行的模块。
Ansible是基于安全性、高可靠性设计的轻量级集中化运维工具,功能强大、部署便捷,简单易学,现在已成为非常受欢迎的集中化运维工具,广泛应用于各种规模、各种领域的企业。
Ansible的安装
准备工作
在安装之前,准备3台主机,主机信息如下:
| 主机名 | IP地址 | 操作系统 |
|---|---|---|
| linuxserver | 192.168.11.88 | Ubuntu 22.04 |
| LiuymRD | 192.168.11.82 | Debian |
| ShinyDemo.shinydev.nl | 192.168.11.81 |
linuxserver 主机是 Ansible 的管理主机,LiuymRD 和 ShinyDemo.shinydev.nl 是被管理的远程主机(节点),安装 Ansible 时只在管理机(192.168.11.88)上安装即可。
主机操作系统:Ubuntu 22.04
Ansible 版本:2.10.8
开始安装
安装命令:
# 更新系统中的软件包源列表
sudo apt-get update
# 搜索ansible软件包
sudo apt search ansible
# 安装ansible
sudo apt-get install ansible
# 检查是否安装完成
ansible --version


配置
通过上图可以看到,配置文件config file = None,需要到/etc/ansible下手动创建配置ansible.cfg 和 hosts文件。

ansible.cfg文件内容:
# 禁用密钥检查。或者将此主机的指纹添加到known_hosts文件中以管理此主机。
[defaults]
host_key_checking = False
hosts文件内容:
# 分别是IP,端口,账号和密码,一个[group]可以有多台服务器。
[group_name]
192.168.11.81:22 ansible_ssh_user=ymliu ansible_ssh_pass=ymliu2023
192.168.11.82:22 ansible_ssh_user=ymliu ansible_ssh_pass=ymliu2023
测试
ansible group_name -m ping

出现这个问题,是因为我们系统中没有sshpass,安装sshpass即可。(当然也可以设置为免密登录)
# 安装命令
sudo apt install sshpass

再次测试(警告信息暂时忽略)

Ansible命令运行方式及常用参数
| 参数 | 功能 |
|---|---|
| -i | 指定hosts文件路径,默认在/etc/ansible/hosts |
| -m | 指定使用的module名称,默认command模块 |
| -a | 指定模块参数 |
| -k(小写) | 提示输入ssh密码,并非基于ssh密钥认证 |
| -K(大写) | 提示输入sudo密码 |
| -b | 使用sudo执行命令 |
| -become-user= | 指定sudo的用户 |
| -f,-forks=NUM | NUM默认是整数5,指定fork开启同步进程的个数 |
| -u | 指定远程主机的执行用户 |
| -v | 详细模式,如果执行成功,输出详细结果,-vv -vvv更详细过程 |
| -C | 预执行检测 |
| -T | 执行命令的超时时间,默认10s |
| –list | 显示主机列表,也可以用–list-hosts |
| –version | 显示版本 |
Ansible常用模块
ping模块
检查指定(主机)节点是否还能连通,没有参数,主机如果在线则回复pong。即,上面测试内容。
ansible group_name -m ping
command模块与shell模块
command模块
在远程主机执行命令,此模块为默认模块
| 常用参数 | 作用 |
|---|---|
| chdir | 先切换工作目录,再执行后面的命令,一般情况下在编译时候使用; |
| creates | 如果creates的目录或文件存在,则不执行后面的操作; |
| removes | 和creates相反,如果removes的文件存在,才执行后面的操作; |
ansible all -m command -a 'chdir=/home/ymliu pwd'
ansible all -m command -a 'chdir=/home/ymliu creates=/opt/local date'
ansible all -m command -a 'chdir=/home/ymliu removes=/opt/local date'

使用command模块,不得出现shell变量$name,也不得出现特殊符号> < | ; &这些符号command都不认识,如果你想要前面指定的变量,特殊符号,请使用shell模块,command模块就不适合了
shell模块
shell模块与command模块类似,但是shell被大家称为万能模块,很多操作command不支持,但是shell却支持。
| 常用参数 | 作用 |
|---|---|
| chdir | 先切换工作目录,再执行后面的命令,一般情况下在编译时候使用; |
| creates | 如果creates的目录或文件存在,则不执行后面的操作; |
| removes | 和creates相反,如果removes的文件存在,才执行后面的操作; |
| executable | 指定执行环境,默认为sh; |
ansible all -m shell -a 'ps ax | grep java'
ansible all -m shell -a 'executable=/bin/bash ps ax | grep java'


ansible all -m shell -a "cat /etc/passwd |awk -F ':' '{print $1,$3}' >> /tmp/pwd.txt"

注意上面这种情况shell模块是不支持的。
这个时候我们就需要用到script模块
script
在ansible主机中写好的脚本在受控主机中执行。
| 常用参数 | 作用 |
|---|---|
| chdir | 先切换工作目录,再执行后面的命令,一般情况下在编译时候使用; |
| creates | 如果creates的目录或文件存在,则不执行后面的操作; |
| removes | 和creates相反,如果removes的文件存在,才执行后面的操作; |
| free_form | 必须参数,指定需要执行的脚本,脚本位于 ansible 管理主机本地; |
上图中遇到的错误,我们可以通过该模块解决,首先在用户根目录下创建可执行文件pasd.sh,添加如下内容,并赋予可执行权限。
# 需要添加到pasd.sh脚本中的内容
cat /etc/passwd |awk -F ':' '{print $1,$3}' >> /tmp/pwd.txt
# 执行命令如下:
ansible 192.168.11.82 -m script -a 'chdir=/home/ymliu /home/ymliu/pasd.sh'


copy模块
复制本地文件至远程主机,并且能够改属性等。
| 常用参数 | 作用 |
|---|---|
| src | 需要copy的文件的源路径 |
| dest | 需要copy的文件的目标路径 |
| backup | 对copy的文件进行备份 |
| content | 直接在远程主机被管理文件中添加内容,会覆盖原文件内容 |
| mode | 对copy到远端的文件设置权限 |
| owner | 对copy到远端的文件设置属主 |
| group | 对copy到远端文件设置属组 |
ansible 192.168.11.82 -m copy -a 'src=/home/ymliu/pasd.sh dest=/home/ymliu/pasd.sh backup=yes'
ansible 192.168.11.82 -m copy -a 'src=/home/ymliu/pasd.sh dest=/home/ymliu/pasd.sh backup=yes mode=0755'


file模块
主要用户远程主机上的文件操作。
| 常用参数 | 作用 |
|---|---|
| path | 指定文件名称 |
| state | 指定操作状态 touch:建立 absent:删除 directory:递归目录 link:建立软链接 hard:建立硬链接 |
| mode | 设定权限 |
| owner | 设定文件用户 |
| group | 设定文件组 |
| src | 源文件 |
| dest | 目标文件 |
| recurse=yes | 递归更改 |
ansible 192.168.11.82 -m file -a 'src=/etc/passwd path=/tmp/passwd.link state=link'
ansible 192.168.11.82 -m file -a 'src=/etc/passwd path=/tmp/passwd state=touch mode=0644 owner=ymliu group=ymliu'
service模块
| 常用参数 | 作用 |
|---|---|
| name | 指定文件名称 |
| state | 指定对服务的动作 started、stoped、restarted、reloaded |
| enabled | 设定开机是否启动 yes开机启动;no开机不启动 |
ansible all -m service -a 'name=firewalld state=started enabled=yes'
ansible all -m shell -a 'systemctl status firewalld.service'
ansible all -m service -a 'name=firewalld state=stopped enabled=no'
Ansible命令执行返回值颜色所代表的信息
| 颜色 | 信息 |
|---|---|
| 绿色 | 执行成功但未对远程主机做任何改变 |
| 黄色 | 执行成功并对远程主机做改变 |
| 红色 | 执行失败 |
未完待补充。。。
交流Linux运维工作、学习经验,欢迎添加QQ群:418251587
或者添加微信:lxs1266L,拉进微信群
本文介绍了Ansible的概述,包括其特点、安装步骤、配置文件设置、常见模块如ping、command、shell、script、copy、file和service的使用方法以及命令执行返回值的颜色含义。此外,还提到Ansible的部署简单性和安全性。
192

被折叠的 条评论
为什么被折叠?



