目录
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,拉进微信群