目录

一、ansible对企业运维的意义

二、安装Ansible

三、构建ansible的清单

1、清单的设定——全局清单

(1)单层清单

(2)嵌套清单

2、主机规格的范围化操作

3、清单的设定——其他清单 

4、清单中的逻辑关系

四、Ansible配置文件参数详解

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

1、Ansible的主机ssh免密

2、取消受控主机的sudo密码

3、取消ansible执行命令时的密码认证

4、恢复ansible默认配置,并重新建立一套ansible体系

六、本章总结


实验环境:一台可以上网的主机(ansible),两台客户机。配置好网络,配置好软件源。

一、ansible对企业运维的意义

在实际生产环境中,有成百上千台主机。一个人逐个主机进行设定不是容易的事情,费时费力还容易出错。因此需要通过Ansible实现对大量服务器的批量运维及管理。

二、安装Ansible

阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区阿里巴巴开源镜像站,免费提供Linux镜像下载服务,拥有Ubuntu、CentOS、Deepin、MongoDB、Apache、Maven、Composer等多种开源软件镜像源,此外还提供域名解析DNS、网络授时NTP等服务,致力于为互联网用户提供全面,高效和稳定的基础服务。https://developer.aliyun.com/mirror/?spm=a2c6h.13651104.0.d1002.196a530145Jmen由于ansible在镜像软件源中没有,所以需要通过epel源安装。epel源的软件包可以通过阿里巴巴镜像源下载:

配置epel镜像源:

安装ansible

三、构建ansible的清单

设置一个ansible清单,在管理主机时只对清单中的主机进行设定。

一个是ansible的主配置文件,一个是ansible的全局清单目录

1、清单的设定——全局清单

(1)单层清单

编辑ansible的清单配置文件</etc/ansible/hosts>。以“组”的形式,即这里分为westos组、linux组和list1组。

查看单层清单

ansible  all --list-hosts            #ansible查看所有清单
ansible  all --list                  #ansible查看所有清单
#这个hosts可以不加

 要查看哪个组就选哪个组

(2)嵌套清单

表示嵌套清单test中包含单层清单westos和linux

查看嵌套清单

2、主机规格的范围化操作

在添加批量主机时,如果主机太多,添加会比较麻烦。因此可以使用字符集合表示方法来简化。通过指定主机名称或IP的范围可以简化Ansible主机清单。

测试:

3、清单的设定——其他清单 

在</mnt/>下创建一个清单,absible默认不会读取,所以需要添加参数<-i>来指定读取的清单位置。

ansible -i /mnt/ansible_list all --list        #-i参数指定清单位置

 查看不在组里的主机名

ansible -i /mnt/ansible_list ungrouped --list        #查看不在任何组里的主机名

4、清单中的逻辑关系

* 所有    /   172.25.254.*    /   westos*        
: 逻辑或    /   westos1:linux    /    172.25.254.100:172.25.254.200
:& 逻辑与    /   westos1:&linux    /    主机即在westos1清单也在linux清单中
:! 逻辑非        /        westos1:!linux    /        在westos1中不在linux中
~ 以关键字开头
~(str1|str2) 以条件1或者条件2开头

ansible全局清单中包含以下内容,以这些内容为例。

< * >  :匹配所有字符

< : > :逻辑或,满足两个条件之一即可

< :& >:逻辑与,同时存在于两个清单的主机

注意:因为逻辑与< :& >是一个特殊字符,所以中间要加上引号

ansible 'westos:&linux' --list            #逻辑与

< :! >:逻辑非,在第一个清单且不在第二个清单中的主机。

注意:特殊符号需要用引号因起来,否则系统识别不了。

ansible 'westos:!linux' --list        #在清单westos中且不在linux中的主机

< ~ >:以关键字开头

< ~(str1|str2)>:表示以str1开头的或者以str2开头的

注意:特殊符号需要用引号因起来,否则系统识别不了。

ansible '~(node|c)' --list    #表示以node或者c开头的主机

四、Ansible配置文件参数详解

ansible的配置文件为</etc/ansible/ansible.cfg>

ansible 清单中组名称 -m 模块 -u remote_user

命令语法表示:在  清单中的主机  以  remote_user用户的身份  执行 **模块

如果不特殊指定的话,默认使用当前用户身份

基本信息设定:

#[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= ##日志文件路径

ansible执行的本质是,将命令转换成<.py>文件,存放在local_tmp=设定的目录下,然后上传到远程主机remote_tmp=设定的目录下,远程主正常执行完毕后,删除双方的临时文件。

身份信息设定:用于设定sudo用户权限时

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

1、执行命令时,首次连接会出现主机密码验证

可以更改配置文件后,不再出现验证

2、连接远程主机时,需要<-k>输入密码,不输入密码就会报错。

ansible westos -m shell -a 'hostname' -k

3、添加默认默认清单

4、指定用户登录

默认不指定的情况下使用的是以当前用户身份。实际生产环境中容易造成混乱。

更改参数后重新测试:

默认以westos的用户身份登录<remote_user     = westos>

5、身份转换

远程执行命令时以westos的用户身份登录,但是普通用户很多操作无法实现,这就需要sudo取得超级用户身份来执行。

测试:

作出如上更改后,还需要在受控主机中给普通用户westos的sudo授权。<visudo>

授权完成后,ansible显示以westos身份执行命令成功。

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

由于

一、每次执行命令时都需要输入远程密码,很麻烦。所以可以构建一个专属用户的ansible的操作环境。

二、同一Ansible主机上不同操作者的控制习惯不同,因此在原有的ansible默认配置的基础上,可以重新建立一套ansible配置体系。

1、Ansible的主机ssh免密

ssh-keygen            #生成密钥
ssh-copy-id -i .ssh/id_rsa.pub westos@172.25.254.151    #向目标主机做做免密认证

2、取消受控主机的sudo密码<visudo>

3、取消ansible执行命令时的密码认证

4、恢复ansible默认配置,并重新建立一套ansible体系

在根目录下新建一个<.ansible>的目录,并将原ansible的配置文件</etc/ansible/ansible.cfg>复制到此目录下。稍后的修改就在此目录下的配置文件进行。 

修改此目录下的配置文件如下:

文件<inventory>为此目录下的配置对应的用户清单;<module_name>选项默认为command,这里修改默认为shell

整个新建目录下的文件内容如下所示:

ansible在执行的时候会先读取自己当前所在目录下的配置文件,当前路径下没有才会读取</etc/ansible/>目录下的配置。

六、本章总结

1、ansible在执行的时候会先读取自己当前所在目录下的配置文件,当前路径下没有才会读取</etc/ansible/>目录下的配置。

Logo

一站式 AI 云服务平台

更多推荐