ansible 自动化运维工具 1(ansible安装和部署、构建ansible清单、ansible配置文件、构建用户级ansible操作环境)

一、ansible的安装和部署

1.ansible简介

  • ansible是一款开源自动化平台,是一个配置管理工具,自动化运维工具。其主要功能是帮助运维实现IT工作的自动化、降低人为操作失误、提高业务自动化率、提升运维工作效率,一个人管理多个操作系统。常用于软件部署自动化、配置自动化、管理自动化、系统化系统任务、持续集成、零宕机平滑升级等。
  • 基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。在Ansible去中心化概念下,一个简单的复制操作即可完成管理配置中心的迁移。Agentless(无客户端),客户端无需任何配置,由管理端配置好后即可使用,使用ssh的方式。
  • ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
    (1)连接插件connection plugins:负责和被监控端实现通信;
    (2)host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
    (3)各种模块核心模块、command模块、自定义模块;
    (4)借助于插件完成记录日志邮件等功能;
    (5)playbook:执行多个任务时,非必需可以让节点一次性运行多个任务。

2.环境部署

环境中所用的系统版本与软件源版本保持一致,都使用8.2版本。
准备两台虚拟机:
westosa:172.25.254.100,作为ansible主机;
westosb(172.25.254.170):作为被控制的node节点。
真机开启地址伪装,使得虚拟机能够上网

使用图形化方式为westosb虚拟机配置ip(westosa配置方式相同)
请添加图片描述
请添加图片描述
修改westosb虚拟机主机名为westos_node1,之后进入字符界面 init 3
请添加图片描述
通过systemctl命令配置默认进入文字界面
请添加图片描述

3.ansible的安装

ansible主机(westosa)配置软件仓库
在这里插入图片描述
下载epel 仓库,安装ansible

sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm -y
sudo dnf install ansible

或者拥有这两个包,ansible的依赖性中sshpass这个软件在镜像中没有,其他的依赖性在镜像中都有,所以我们提前下载sshpass的rpm包和ansible的rpm包,真机将这两个包传给westosa
请添加图片描述
westosa首先安装sshpass,然后安装ansible
请添加图片描述
查看ansible的版本,说明已经成功安装ansible
请添加图片描述

4.ansible参数的使用

ansible.cfg主配置文件在/etc/ansible目录,另外还有:hosts默认清单文件,roles角色
请添加图片描述
Ansible最基础的模块是ping模块,主要用于判断远程客户端是否在线
请添加图片描述
ansible all --list-hosts列出所有的受控制的主机,此时为空
请添加图片描述
进入hosts文件,在最后一行添加172.25.254.170(westosb)请添加图片描述
再次列出,就可以看到受控制的主机有172.25.254.170这台主机
请添加图片描述
ansible服务器未做免密登录,所以需要-k参数;
-m表示模块,使用ping这个模块连接,-k参数是询问ssh的密码
请添加图片描述
出现ping回馈说明成功连接
请添加图片描述
由于root权限调用node1权限太大,所以一般用普通用户的身份进入受控节点,执行操作;
为westosb创建devops用户,赋予密码
请添加图片描述
请添加图片描述
使用ssh免密登陆,ansible把rsa公钥给被控节点的devops用户
请添加图片描述
发送成功
请添加图片描述
-u:ssh连接的用户名,默认用root,而上面我们公钥给的是被控节点的devops用户,所以报错,必须指定登陆的用户devops
请添加图片描述
执行命令时,是devops用户,没有权力(mnt目录对其他人没有写的权限)
请添加图片描述
可以在node1上测试,devops确实没有权限操作mnt
请添加图片描述
所以要下放权力给devops,node1打开visudo
请添加图片描述
给devops用户所有权限
请添加图片描述
-K(大写)输入sudo的密码,并且加入–become参数,表示使用sudo执行命令,才能真正提权,而不是直接执行
请添加图片描述
执行成功
请添加图片描述
node1查看,文件已成功建立
请添加图片描述
每次输入sudo的密码也很麻烦,node1编辑visudo,设定NOPASSWD免密登陆sudo
请添加图片描述
现在不用-K,就可以sudo登陆,删除文件
请添加图片描述
node1查看,已删除
请添加图片描述

二、构建ansible清单

/etc/ansible/hosts :全局主机清单清单文件,如果自己创建一个westos文件,无法读取,需要使用-i参数指定westos文件查看清单;
清单查看:ansible 清单中组名称 [-i 清单文件] --list-hosts
请添加图片描述
查看未定义组的清单
请添加图片描述
设定单层清单,组为westos1
请添加图片描述
设定单层清单,两个组westos1和westos2
请添加图片描述
也可以设定嵌套清单,westos大组包括westos1和westos2
请添加图片描述
通过指定主机名称或IP的范围可以简化Ansible主机清单
请添加图片描述
也可以用域名的方式设定清单
请添加图片描述
清单查看
请添加图片描述
继续编辑全局清单文件
请添加图片描述
查看指定组的清单
请添加图片描述
请添加图片描述
继续编辑全局清单文件
请添加图片描述
列出以westos开头的清单中的主机
请添加图片描述
继续编辑全局清单文件
请添加图片描述
列出192*,可以列出192这个组,也可以列出192的清单
请添加图片描述
列出以172.25.254开头的主机
请添加图片描述
ansible命令指定清单的正则表达式;
逻辑或:列出westos1或westos2的(主机在westos1清单或者在westos2清单中)
请添加图片描述
列出带172或192的
请添加图片描述
逻辑与,列出在westos1组中,也在westos2组中的
请添加图片描述
逻辑非,列出在westos1但是不在westos2中的
请添加图片描述
以关键字开头,列出172开头的
请添加图片描述
列出172开头的或者192开头的
请添加图片描述

三、ansible配置文件参数详解

将ansible全局配置文件拷贝到/root一份,便于后面恢复
请添加图片描述
请添加图片描述
自己制作的westos文件清单,为什么无法列出呢,是因为在配置文件中inventory指定清单路径为/etc/ansible/hosts
请添加图片描述
常用配置参数

[default]	%基本信息设定
inventory=	指定清单路径
remote_user=	在受管主机上登陆的用户名称,未指定使用当前用户
ask_pass=	是否提示输入SSH密码,如果公钥登陆设定为false
library=	库文件存放目录
local_tmp=	本机临时命令执行目录
remote_tmp=	远程主机临时py命令文件存放目录
forks=	默认并发数量
host_key_checking=	第一次连接受管主机时是否要输入yes建立host_key
sudo_user=	默认sudo用户
ask_sudo_pass=	每次在受控主机执行ansible命令时是否询问sudo密码
module_name=	默认模块,默认使用command,可以修改为shell
log_path=	日志文件路径

[privilege_escalation]	%身份信息设定
become=	连接后是否自动切换用户
become_method=	设定切换用户的方式,通常用sudo
become_user=	在受管主机中切换到的用户,通常为root
become_ask_pass	是否需要为become_method提示输入密码,默认为false

编辑/etc/ansible/ansible.cfg,在inventory中添加清单路径;
[default] :基本信息设定
inventory= :指定清单路径
请添加图片描述
再次执行,可以列出
请添加图片描述
remote_tmp和local_tmp是远端的本地临时文件路径。当执行ansible后,主机生成py临时脚本,ssh发送到受控主机,受控主机执行完删除该临时文件,主机也会删除临时文件;
local_tmp= :本机临时命令执行目录
remote_tmp= :远程主机临时py命令文件存放目录
请添加图片描述
真机开启一个终端,连接westosa,开启一个监控查看效果
请添加图片描述
测试,执行等待500秒
请添加图片描述
在这500秒内,ansible主机有py临时文件
请添加图片描述
同样的,在这500秒内,可以看到node1存在py临时文件
请添加图片描述
一旦执行完毕,自动删除py脚本
请添加图片描述
在这里插入图片描述
请添加图片描述
请添加图片描述
打开ask_pass后,每次执行ansible时提示输入SSH密码
请添加图片描述
输入密码
在这里插入图片描述
配置文件恢复正常
请添加图片描述
查看主机名时,正常
请添加图片描述
如果删除了~/.ssh/known_hosts文件,那么连接时,会询问是否接受受控主机发送过来的身份认证key,会要求输入yes,但是如果一百台node都要输入yes就非常耗时。
请添加图片描述
请添加图片描述
ask_sudo_pass:每次在受控主机执行ansible命令时是否询问sudo密码;
所以修改配置文件中的host_key_checking参数,关闭后不再询问是否接受
请添加图片描述
ssh连接时自动输入yes
请添加图片描述
请添加图片描述
默认使用的模块是command,可以改为ping
请添加图片描述
请添加图片描述
进行测试
请添加图片描述
在远程主机中用devops用户执行指令时,需要转换用户身份为root,未加-K和–become参数会报错
请添加图片描述
[privilege_escalation] :身份信息设定
become=: 连接后是否自动切换用户;
转换成root用户身份;执行sudo指令时,不提示输入密码
请添加图片描述
执行成功
请添加图片描述
become_method= 设定切换用户的方式,通常用sudo
become_user= 在受管主机中切换到的用户,通常为root
become_ask_pass 是否需要为become_method提示输入密码,默认为false
请添加图片描述
在受管主机上登陆的用户名称,未指定使用当前用户
请添加图片描述
执行成功
请添加图片描述

四、构建用户级ansible操作环境

ansible的主配置文件只有一个,如果每个用户的配置不一样,怎么办,需要把配置独立出来,一个用户一个配置文件。
比如ansible主机上的lr用户,先创建lr,给密码,创建lr的ansible目录,编辑配置文件,在当前目录下,会优先找本目录的ansible.cfg文件,找不到才找/etc/ansible/ansible.cfg文件,所以想用该ansible.cfg文件,必须在这个目录中。

请添加图片描述
将之前拷贝到/root的ansible全局配置文件复制到/etc/ansible,恢复默认配置
请添加图片描述
继续切换为lr用户,编辑该用户的ansible配置文件
请添加图片描述
指定一些参数
请添加图片描述
ansible主机本身也可以是受控节点
请添加图片描述
westosa创建devops用户,ansible主机的root用户将自己的公钥给devops用户发送一份
请添加图片描述
可以看到公钥发送成功
请添加图片描述
测试,两个主机都无法ping通
请添加图片描述
ansible主机的root用户将自己的私钥给lr用户发送一份
请添加图片描述
请添加图片描述
测试,可以ping通170(westosb的devops用户)
请添加图片描述
root给devops用户做提权
请添加图片描述
请添加图片描述
切换lr用户,执行成功
请添加图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值