零基础构建Ansible自动化管理平台及实践
时间:2024-12-6 21:58 作者:Anglei 分类: 自动化运维
Ansible的介绍与部署
1.Ansible软件的概念
Ansible是一款开源的、免费的自动化运维管理工具、软件,主要是用于批量管理Unix、Linux服务器的,对服务器进行各种操作:执行命令、更新网站、发布代码、备份数据、修改配置、系统上线和下线等。
2.Ansible软件的特点
- Ansible软件是基于Python语言开发的,简洁、高效;
- 管理客户端时无需在客户端安装Agent插件;
- 基于SSH协议远程登录客户端&管理客户端的;
- 所有的操作指令、步骤可以在管理端完成,推送任务给客户端;
- 批量的任务可以写成Playbook剧本(类似SHELL脚本);
- Ansible去中心化的,没有分布式的节点。
3.Ansible软件的原理
- Ansible管理客户端需要提前将客户端的主机名或者IP地址提前写入到/etc/ansible/hosts主机清单文件中,没有写入的IP是无法对其进行管理的。
- Ansible管理客户端是基于SSH协议远程连接,需要获取客户端的用户名、密码或者提前添加免秘钥,会调用各个模块(3387个)去进行管理,不同的模块可以实现不同的功能。
- 批量执行的任务、指令可以写成Playbook剧本文件,剧本文件无需提前拷贝至客户端,可以通过管理端主动推送该剧本内容至客户端执行。
4.基于OpenEuler 22.x Linux系统部署一套Ansible自动化运维工具,采用RPM|YUM方式部署,部署的方法和指令如下:
#安装Ansible软件服务;
yum install -y ansible
#查看Ansible软件程序是否部署成功;
rpm -qa|grep -aiE ansible
#查看Ansible软件程序部署的路径;
rpm -ql ansible
find / -name ansible
#查看Ansible版本信息;
ansible --version
5.验证部署结果
根据如上Ansible指令操作,Ansible自动化运维工具部署成功,查看其版本信息,如图所示:
6.基于Docker虚拟化软件创建20台Linux虚拟机(客户端),通过Ansible批量管理20台机器。创建的方法和指令如下:
#提前安装&启动Docker服务;
systemctl start docker.service
#查看Docker进程状态;
ps -ef|grep -aiE docker
#下载Rocky Linux镜像文件;
docker pull rockylinux-ssh:latest
#查看已经下载的Rocky Linux镜像文件的列表;
docker images|grep -aiE "rockylinux-ssh"
#基于Rocky Linux镜像文件创建20台虚拟机;
for i in $(seq 1 20);do docker run -itd --name=jfedu-vm01 --privileged rockylinux-ssh:latest ;done
#查看已经创建的20台Linux虚拟机状态;
docker ps|grep -aiE rockylinux
#查看已经启动的20台Linux虚拟机的IP地址;
for i in $(docker ps|grep -aiE rockylinux|awk '{print $1}');do docker inspect $i|grep -aiE ipaddr|tail -1|grep -aiowE "([0-9]{1,3}\.){3}[0-9]{1,3}" ;done
#备份/etc/ansible/hosts主机清单文件;
\cp /etc/ansible/hosts /etc/ansible/hosts.bak
#将20台客户端的IP地址加入到/etc/ansible/hosts主机清单文件中;
for i in $(docker ps|grep -aiE rockylinux|awk '{print $1}');do docker inspect $i|grep -aiE ipaddr|tail -1|grep -aiowE "([0-9]{1,3}\.){3}[0-9]{1,3}" ;done >/etc/ansible/hosts
企业Ansible常见模块案例实战
1.在企业生产环境中,通过Ansible管理客户端时主要是借助各个模块(模块总数:3387个)去管理的,每个模块都有各自的功能,常见的模块:command、shell、setup、service、yum、script、user、file、cron等。
2.Ansible自动化运维工具常见的参数含义:
-v,–verbose 打印详细模式;
-i PATH,–inventory=PATH 指定host文件路径;
-f NUM,–forks=NUM 指定fork开启同步进程的个数,默认5;
-m NAME,–module-name=NAME 指定module名称,默认模块command;
-a MODULE_ARGS module模块的参数或者命令;
-k,–ask-pass 输入远程被管理端密码;
–sudo 基于sudo用户执行;
-K,–ask-sudo-pass 提示输入sudo密码与sudo一起使用;
-u USERNAME,–user=USERNAME 指定移动端的执行用户;
-C,–check 测试执行过程,不改变真实内容,相当于预演;
-T TIMEOUT,执行命令超时时间,默认为10秒;
--version 查看Ansible软件版本信息。
3.基于Ansible command模块(远程执行命令)去管理客户端172.17.0.2,在客户端上执行df -h指令查看其磁盘分区的信息。操作的方法和指令如下:
ansible -i /etc/ansible/hosts 172.17.0.2 -m command -a "df -h"
4.在Linux命令行终端执行:ansible -i /etc/ansible/hosts 172.17.0.2 -m command -a "df -h" 指令管理172.17.0.2客户端时,报错信息一如下所示:
"msg": "Failed to connect to the host via ssh: root@172.17.0.2: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)."
5.根据如上错误日志的提示,表示基于SSH协议远程连接172.17.0.2失败,权限被拒绝。
-解决方法一:
Ansible远程执行命令时可以输入客户端的用户名和密码,通过-u、-k参数实现;
ansible -u root -k -i /etc/ansible/hosts 172.17.0.2 -m command -a "df -h"
-解决方法二:
可以添加免秘钥,Ansible管理端登录客户端无需输入密码,免秘钥添加的方法:
ssh-keygen
ls -l /root/.ssh/id_rsa*
ssh-copy-id -i /root/.ssh/id_rsa.pub 172.17.0.2
6.基于Ansible copy模块(远程拷贝文件)去管理客户端172.17.0.2,将管理端zabbix-6.0.32.tar.gz文件拷贝至客户端172.17.0.2的/tmp目录,修改文件权限为645,文件拥有者为admin,所属组为admin(在客户端必须存在该用户和组)。操作的方法和指令如下:
ansible -i /etc/ansible/hosts 172.17.0.2 -m copy -a "src=/root/zabbix-6.0.32.tar.gz dest=/tmp/ mode=645 owner=admin group=admin"
Ansible ping模块实战
Ansible最基础的模块为ping模块,主要用于判断远程客户端是否在线,用于ping本身服务器,返回值为changed、ping。
Ansible ping模块企业常用案例如下:
1.Ansible ping服务器状态,如图21-6所示:
ansible -k all -m ping
Ansible command模块实战
Ansible command模块为ansible默认模块,主要用于执行Linux基础命令,可以执行远程服务器命令执行、任务执行等操作。Command模块使用详解:
Chdir执行命令前,切换到目录;
Creates当该文件存在时,则不执行该步骤;
Executable换用shell环境执行命令;
Free_form需要执行的脚本;
Removes当该文件不存在时,则不执行该步骤;
Warn如果在ansible.cfg中存在告警,如果设定了False,不会警告此行。
Ansible command模块企业常用案例如下:
1.Ansible command模块远程执行date命令,执行结果如图21-7所示:
ansible -k -i /etc/ansible/hosts all -m command -a "date"
2.Ansible command模块远程执行ping命令,执行结果如图21-8所示:
ansible -k all -m command -a "ping -c 1 www.baidu.com"
Ansible copy模块实战
Ansible copy模块主要用于文件或者目录拷贝,支持文件、目录、权限、用户组功能,copy模块使用详解:
src Ansible端源文件或者目录,空文件夹不拷贝;
content 用来替代src,用于将指定文件的内容,拷贝到远程文件内;
dest 客户端目标目录或者文件,需要绝对路径;
backup拷贝之前,先备份远程节点上的原始文件;
directory_mode用于拷贝文件夹,新建的文件会被拷贝,而老旧的不会被拷贝;
follow支持link文件拷贝;
force覆盖远程主机不一致的内容;
group 设定远程主机文件夹的组名;
mode 指定远程主机文件及文件及的权限;
owner 设定远程主机文件夹的用户名。
Ansible copy模块企业常用案例如下:
1.Ansible copy模块操作,src表示源文件,dest表示目标目录或者文件,owner指定拥有者,执行结果如图21-10所示:
ansible -k all -m copy -a 'src=/etc/passwd dest=/tmp/ mode=755 owner=root'
2.Ansible copy模块操作,content文件内容,dest目标文件,owner指定拥有者,执行结果如图21-11所示:
ansible -k all -m copy -a 'content="Hello World" dest=/tmp/jfedu.txt mode=755 owner=root'
3.Ansible copy模块操作,content文件内容,dest目标文件,owner指定拥有者,backup=yes开启备份,执行结果如图21-12所示:
ansible -k all -m copy -a 'content="Hello World" dest=/tmp/jfedu.txt backup=yes mode=755 owner=root'
Ansible yum模块实战
Ansible yum模块主要用于软件的安装、升级、卸载,支持红帽.rpm软件的管理,YUM模块使用详解:
conf_file 设定远程yum执行时所依赖的yum配置文件
disable_gpg_check 安装软件包之前是否坚持gpg key;
name需要安装的软件名称,支持软件组安装;
update_cache 安装软件前更新缓存;
enablerepo指定repo源名称;
skip_broken 跳过异常软件节点;
state 软件包状态,包括:installed、present、latest、absent、removed。
Ansible yum模块企业常用案例如下:
1.Ansible yum模块操作,name表示需安装的软件名称,state表示状态,常见state= installed表示安装软件,执行结果如图21-13所示:
ansible all -k -m yum -a "name=sysstat,screen state=installed"
2.Ansible yum模块操作,name表示需安装的软件名称,state表示状态,常见state= installed表示安装软件,执行结果如图21-14所示:
ansible all -k -m yum -a "name=sysstat,screen state=absent"
3.Ansible yum模块操作,name表示需安装的软件名称,state表示状态,常见state= installed,表示安装软件,disable_gpg_check=no不检查key,执行结果如图21-15所示:
ansible 192.168.149.129 -k -m yum -a "name=sysstat,screen state=installed disable_gpg_check=no"
Ansible file模块实战
Ansible file模块主要用于对文件的创建、删除、修改、权限、属性的维护和管理,File模块使用详解:
srcAnsible端源文件或者目录;
follow支持link文件拷贝;
force覆盖远程主机不一致的内容;
group设定远程主机文件夹的组名;
mode指定远程主机文件及文件及的权限;
owner设定远程主机文件夹的用户名;
path 目标路径,也可以用dest,name代替;
state 状态包括:file、link、directory、hard、touch、absent;
attributes 文件或者目录特殊属性。
Ansible file模块企业常用案例如下:
1.Ansible file模块操作,path表示目录的名称和路径, state=directory表示创建目录,执行结果如图21-16所示:
ansible -k 192.168.* -m file -a "path=/tmp/`date +%F` state=directory mode=755"
2.Ansible file模块操作,path表示目录的名称和路径, state=touch表示创建文件,执行结果如图21-17所示:
ansible -k 192.168.* -m file -a "path=/tmp/jfedu.txt state=touch mode=755"
Ansible user模块实战
Ansible user模块主要用于操作系统用户、组、权限、密码等操作,user模块使用详解:
system 默认创建为普通用户,为yes则创建系统用户;
append添加一个新的组;
comment 新增描述信息;
createhome 给用户创建家目录;
force用于删除强制删除用户;
group创建用户主组;
groups将用户加入组或者附属组添加;
home指定用户的家目录;
name表示状态,是否create、remove、modify;
password 指定用户的密码,此处为加密密码;
remove删除用户;
shell 设置用户的shell登录环境;
uid设置用户id;
update_password 修改用户密码;
state 用户状态,默认为present表示新建用户。
Ansible user模块企业常用案例如下:
1.Ansible user模块操作,name表示用户名称,home表示其家目录,执行结果如图21-18所示:
ansible -k 192.168.149.* -m user -a "name=jfedu home=/tmp/"
2.Ansible user模块操作,name表示用户名称,home表示其家目录,执行结果如图21-19所示:
ansible -k 192.168.149.* -m user -a "name=jfedu home=/tmp/ shell=/sbin/nologin"
3.Ansible user模块操作,name表示用户名称,state=absent表示删除用户,执行结果如图21-20所示:
ansible -k 192.168.149.* -m user -a "name=jfedu state=absent force=yes"

本文完结,相关标签: ansible
推荐阅读:
![]() 路过(0) |
![]() 雷人(0) |
![]() 握手(1) |
![]() 鲜花(1) |
![]() 鸡蛋(0) |