运维自动化工具ansible(1)安装、参数详解、资源清单、用户级ansible环境

1.ansible简介

Ansible是近年越来越火的一款运维自动化工具,其主要功能是帮助运维实现IT工作的自动化、降低人为操作失误、提高业务自动化率、提升运维工作效率,一个人管理多个操作系统。常用于软件部署自动化、配置自动化、管理自动化、系统化系统任务、持续集成、零宕机平滑升级等。

常见的部署管理工具有Chef、Puppet、Ansible、SaltStack、Fabric.

Ansible完全基于Python开发,而DevOps在国内已然是一种趋势,Python被逐步普及,运维人员自己开发工具的门槛逐步降低,得益于此,方便对Ansible二次开发。Ansible内置丰富的模块,甚至还有专门为商业平台开发的功能模块,完全可以满足日常功能所需。在Ansible去中心化概念下,一个简单的复制操作即可完成管理配置中心的迁移。Agentless(无客户端),客户端无需任何配置,由管理端配置好后即可使用,这点非常诱人,使用ssh的方式。

在这里插入图片描述

2.ansible是如何工作的

Ansible没有客户端,因此底层通信依赖于系统软件,Linux系统下基于OpenSSH通信,Windows系统下基于PowerShell,管理端必须是Linux系统。

根据Ansible使用过程中的不同角色,将其分为:
使用者
Ansible工具集
作用对象

Ansible使用者来源于多种维度,分为以下几种方式:
CMDB存储和管理着企业IT架构中的各项配置信息,运维人员可以组合CMDB和Ansible,通过CMDB直接下发指令调用Ansible工具集完成操作者所希望达成的目标。
基于PUBLIC(公有云)/PRIVATE(私有云),Ansible以API调用的方式运行,Ansible提供了丰富的API语言接口:PHP、Python等。
直接使用Ad-Hoc临时命令集调用Ansible工具集来完成任务执行。
通过执行Playbooks中预先编排好的任务集按序完成任务执行。

Ansible工具集(ansible命令是Ansible的核心工具,总指挥)
INVENTORY:命令执行的目标对象配置文件
API:供第三方程序调用的应用程序编程接口
MODULES:丰富的内置模块
PLUGINS:内置和可自定义的插件

作用对象:
Ansible的作用对象,不仅仅是Linux和非Linux操作系统的主机,同样也可以作用于各类公有云/私有云,商业和非商业设备的网络设施。

2.ansible安装

系统中使用的版本和软件源版本要保持一致,我使用的是redhat8.2的版本

实验需要两台虚拟机 分别是westosa(172.25.10.100)和westosb(172.25.10.200)

westosa作主机控制节点,westosb是被控制的节点

修改westosa的hostname

在这里插入图片描述

写入yum源

在这里插入图片描述

在这里插入图片描述

设置IP

在这里插入图片描述
westosb设置IP

在这里插入图片描述
设置hostname 为westos_node1.westos.org

在这里插入图片描述

写入yum源

在这里插入图片描述
在这里插入图片描述
ansible可以下载epel源,有ansible以及各种依赖性。但是ansible除了sshpass这个依赖性在我们的yum源中没有以外,其他的python依赖性都有,所以我们只要准备ansible和sshpass两个rpm堡就行了

在这里插入图片描述

[root@westos_ansible mnt]# dnf install sshpass-1.06-9.el8.x86_64.rpm -y  先安装这个
[root@westos_ansible mnt]# dnf install ansible-2.9.11-1.el8.noarch.rpm -y

安装完成后可以查看ansible的版本信息

在这里插入图片描述

3、使用Ansible的参数

进入etc下的ansible主目录,可以看到ansible的主配置文件和默认清单hosts以及roles角色目录

在这里插入图片描述

使用这个命令可以查看所有被控制的主机

[root@westos_ansible ansible]# ansible all --list-hosts

编辑hosts文件,添加我们的节点虚拟机 172.25.10.200

在这里插入图片描述
保存退出继续查看可控制主机,节点已经加进来

在这里插入图片描述

当要控制这些主机中,会在ansible主机中生成python脚本,然后通过sshd服务传到被控制主机中,当被控制主机执行完这些脚本后,会自动清理python脚本。

-m表示模块,使用ping这个模块连接,连接错误,没有权限
在这里插入图片描述
需要加 -k参数,询问我ssh的密码,出现pong表示成功连接

在这里插入图片描述
给被控制用户添加一个用户,防止权力过大

在这里插入图片描述

做一个免密,不用那么麻烦每次都输入密码

生成密钥
在这里插入图片描述
将生成的公钥给到172.25.10.200的devops用户
在这里插入图片描述
ssh连接远程用户时,会使用被连接用户当前用户,所以我们需要指定用户

在这里插入图片描述
当我们远程执行shell脚本创建文件时,我们用的是devops普通用户,所以对于/mnt没有写的权限
在这里插入图片描述
所以下放权力给devops

在这里插入图片描述
在这里插入图片描述
在ansible主机上,我们加入-K参数输入devops的密码,错误,这是因为没有调用sudo

加入参数 --become -K 执行sudo,成功
在这里插入图片描述
在这里插入图片描述

继续在node上执行visudo,添加面免密认证
在这里插入图片描述

现在可以免密执行操作了,删除刚才创建的文件

在这里插入图片描述

4、构建Anisble清单

默认清单是用hosts文件,如果自己创建一个westos文件,无法读取,需要使用-i参数指定westos文件查看清单

在这里插入图片描述
查看未定义组的清单

在这里插入图片描述
设定单层清单,westos1,westos2
在这里插入图片描述
设定嵌套清单,westos大组包括westos1和westos2

在这里插入图片描述
指定主机IP范围简化Ansible主机清单

在这里插入图片描述
使用域名的方式来设定清单

在这里插入图片描述

使用“192*”可以列出192的组和192开头的所有的清单

在这里插入图片描述
测试正则表达式,列出带有172和198的清单

在这里插入图片描述
列出在westos2中的和192中一样的清单
在这里插入图片描述
列出westos2中和192中不一致的清单

在这里插入图片描述
列出所有以172或者192开头的清单或者清单组中的清单
在这里插入图片描述

5、Ansible配置文件参数详解

下表为ansible主配置文件常用配置参数的含义:

#[default]基本信息设定
inventory=指定清单路径
remote_user=连接远程主机执行时使用的用户
ask_pass=是否需要输入ssh密码
library=库文件存放目录
local_tmp=本机临时脚本文件存放目录
remote_tmp=远程临时脚本文件存放目录
host_key_checking=连接被控主机时是否输入yes建立host_key
forks=默认并发数量
sudo_user=默认使用sudo的用户
ask_sudo_pass=调用sudo时是否需要密码
module_name=默认模块command,可以改为shell
log_path=日志文件路径
[privilege_escalation]身份信息设定
become=连接被控主机是否需要become参数来授权
become_method=切换用户使用的方式,默认sudo
become_user=在被控主机中切换的用户,默认root
become_ask_pass使用become调用sudo时是否需要密码

配置ansible主配置文件

创建westos文件,尝试列出清单,无法列出,这是因为没有在配置文件中指定清单
在这里插入图片描述
编辑主配置文件ansible.cfg,在inventory中写入westoslist

在这里插入图片描述
再次查看,成功

在这里插入图片描述
remote_tmp和local_tmp是远端的本地的临时文件路径。当执行ansible后,主机生成python临时脚本,ssh发送到受控主机,受控主机执行完删除该临时文件,主机也会删除临时文件

在这里插入图片描述去掉注释,测试一下,远程执行休眠命令50s

在这里插入图片描述

node1上有文件
在这里插入图片描述

ansbile主机上也有

在这里插入图片描述
等待50s以后会自动清除,以可以fg后Ctrl+C直接结束,文件就没有了

在这里插入图片描述

打开ask_pass,每次执行ansible询问我主机密码
在这里插入图片描述
在这里插入图片描述
注释ask_pass,测试不需要密码

在这里插入图片描述
如果误操作删除了~/.ssh/known_hosts文件,连接时,连接受控主机会询问是否接受受控主机发送过来的身份认证key,会要求输入yes或者no,但是每次都问很烦

在这里插入图片描述编辑ansible主配置文件,去掉host_key_checking注释,让它不再询问我
在这里插入图片描述
不再询问

在这里插入图片描述
继续编辑主配置文件,这行指定的是使用模块,默认使用模块是command,指定使用模块是ping

在这里插入图片描述

直接使用ping模块
在这里插入图片描述编辑配置文件

在这里插入图片描述
become=True打开时,执行ansbile命令不需要加become参数来调用sudo执行(在/mnt/底下建立文件需要root用户权限)
剩下三行也打开:
转换用户身份执行命令时,用sudo调用;
转换成root用户;
执行sudo指令时,不提示输入密码

在这里插入图片描述
编辑配置文件,这里的代码表示连接远程主机时默认使用的用户是devops
在这里插入图片描述不指定用户devops也可以
在这里插入图片描述

6、构建用户级Ansible操作环境

ansible的主配置文件只有一个,如果每个用户的配置不一样,怎么办?
需要把配置独立出来,一个用户一个配置文件。

比如ansible主机上的lee用户,先创建lee,给密码,创建lee的snasible目录,编辑配置文件,在当前目录下,会优先找本目录的ansible.cfg文件,找不到才找/etc/ansible/ansible.cfg文件,所以用该用户的ansible的配置文件,必须在这个目录中。

创建用户lee,给密码,创建ansbile目录,创建ansbile.cfg配置文件,编辑文件

在这里插入图片描述
指定一些参数

在这里插入图片描述
ansible主机也可以是被控节点
在这里插入图片描述
切换到root用户
在ansible主机中创建用户devops,给密码
在这里插入图片描述这时lee用户无法使用ansible操作被控主机,因为没有私钥,将root的私钥复制一份给lee用户
测试只有node1节点上的devops用户可以执行,这是因为172.25.10.100主机上的devops用户没有给ssh的公钥
在这里插入图片描述
将ssh公钥给devops用户
在这里插入图片描述
并且在visuduo中给devops用户授权
在这里插入图片描述
切换lee,进入ansible目录,执行命令,成功
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值