Linux自动化运维工程师--(5)Ansible的安装及部署

Linux自动化运维工程师
实验所用系统为Redhat

Linux自动化运维工程师–Ansible的安装及部署

实验环境:
westosa–主控机,IP(172.25.254.114),网络软件仓库配置完成
westosb–受控机,IP(172.25.254.214),网络软件仓库配置完成

一、Ansible是什么

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于 paramiko 开发的,并且基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。ansible目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。是每位运维工程师必须掌握的技能之一。

二、Ansible的安装

在控制主机westosa下载ansible
但是anisble在 CentOS 8 和 RHEL 8 的默认软件包仓库中是没有的,需要安装EPEL rpm 包,搭建epel 仓库。
EPEL的全称叫 Extra Packages for Enterprise Linux 。EPEL是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上了 EPEL之后,就相当于添加了一个第三方源。

wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm /mnt	##下载epel源
yumdoenloader ansible --destdir=/mnt --resolve		##安装ansible
dnf install sshpass-1.06-9.el8.x86_64.rpm -y		##下载依赖性
dnf install ansible-2.9.11-1.el8.noarch.rpm -y
ansible --version

请添加图片描述
请添加图片描述

ansible的基本信息:

/etc/ansible/ansible.conf		##全局配置文件,默认很少修改
/etc/ansible/hosts				##全局主机清单清单文件

三、Ansible的执行

Ansible 系统由控制主机对被管节点的操作方式可分为两类,即adhocplaybook

  • ad-hoc模式(点对点模式)
      使用单个模块,支持批量执行单条命令。ad-hoc 命令是一种可以快速输入的命令,而且不需要保存起来的命令。就相当于bash中的一句话shell。
  • playbook模式(剧本模式)
      是Ansible主要管理方式,也是Ansible功能强大的关键所在。playbook通过多个task集合完成一类功能,如Web服务的安装部署、数据库服务器的批量备份等。可以简单地把playbook理解为通过组合多条ad-hoc操作的配置文件。

四、环境配置

首先连接受控主机,但此时被拒绝,因为主控主机没有可以控管的主机。

ansible 172.25.254.214 -m ping	

列出所有受控主机查看,此时没有214主机。

ansible all --list-hosts

编辑全局主机清单文件,写入214主机,表示受控主机为214主机。

vim /etc/ansible/hosts
///
172.25.254.214		##直接在最后一行添加
///

请添加图片描述

此时重新连接214主机,但依旧会被拒绝。因为当要控制214主机时首先会在主控主机中生成py脚本,然后远程通过sshd服务传输到被控主机中在传文件过程中需要后者的认证通过。

ansible 172.25.254.214 -m ping	

当执行ansible时询问密码,输入密码可以执行成功,表示和214主机可以实现ansible的管理。

ansible 172.25.254.214 -m ping -k 

那么此时就对受控主机sshd服务进行设定,使得认证可以通过。通过新建一个普通用户,让ansible主机控制受控主机,并且对其设定密码。否则会在加密时被拒绝。

###受控主机westosb
useradd devops							##在被控主机westosb中新建一个普通用户,让ansivle用该用户控制本机
echo westos | passwd --stdin devops		##设定密码,不然主控机对其进行加密时会因权限不足被拒绝

在主控机westosa对受控主机的用户进行加密。此时可以连接到受控主机的指定用户,通过此用户在受控主机新建文件时被拒绝,是因为该用户为普通用户,并不具备新建文件的权力,需要对其进行权力下放。

###主控机westosa
ssh-keygen									
##生成密钥,直接回车
ssh-copy-id -i /root/.ssh/id_rsa.pub devops@172.25.254.214		
##用key对指定devops用户加密
ansible 172.25.254.214 -m ping -u devops	
##登录到指定用户
ansible 172.25.254.214 -m shell -a 'touch /mnt/westosfile' -u devops		
##但因为普通用户,权限很小,所以并不能执行成功,需要对其进行权力下放

在受控主机对该用户进行权力下放。

visudo
///
101 devops  ALL=(ALL)       ALL
///

此时在主控机上通过该用户新建文件是可以成功的,但如果每次执行命令都需要输入sudo密码,是十分麻烦的。

ansible 172.25.254.214 -m shell -a 'touch /mnt/westosfile' -u devops --become -K	
##--become 指定devops在执行命令时用sudo调用 -K 询问sudo密码

需要在受控主机westosb中进行权力下放时设定免密登录。

###被控主机westosb
visudo
///
101 devops  ALL=(ALL)       NOPASSWD:ALL
///

此时在主控机westosa中通过指定用户新建文件可以成功,并且并不需要输入密码。至此,环境配置完成。

###主控机westosa
ansible 172.25.254.214 -m shell -a 'touch /mnt/westosfile' -u devops --become

五、构建Anisble清单

清单就是ansible控制主机的列表。

/etc/ansible/hosts                      ##全局清单文件

1、直接书写受管主机名或ip,每行一个

node1.westos.com
node2.westos.com
172.25.254.240

2、设定受管主机的组[组名称]

  • 清单查看
ansible 清单中组名称 [-i 清单文件]  --list-hosts	##列出指定清单文件的受控主机
ansible ungrouped --list-hosts					##列出未在任何组中的主机
ansible all --list-hosts						##列出所有可以控管的主机
  • 单层清单
[list1]
node1.westos.com
node2.westos.com

[list2]
node2.westos.com

[list3]
172.25.254.240
  • 嵌套清单
[westos:children]
list1
list3

实验:

  • 单层清单
cd /etc/ansible
ls
vim westos						##指定一个清单文件
///172.25.254.11
ansible all --list
ansible all -i westos --list	##-i 查看指定清单
ansible ungrouped --list-hosts	##列出未在任何组中的主机
vim /etc/ansible/hosts			##全局清单文件
///
[westos1]						##指定组的名称
172.25.254.214		

[westos2]
172.25.254.114
///
ansible westos1 --list			##列出指定组中的主机
ansible westos2 --list

请添加图片描述
请添加图片描述

  • 嵌套清单
vim /etc/ansible/hosts
///
[westos:children]		##嵌套清单,westos清单中有westos1和westos2两个子清单
westos1
westos2
///
ansible westos --list	##列出清单中的主机,包括1和2

[注意] :children为嵌套清单的命名格式,该清单名称为westos。

请添加图片描述

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

通过指定主机名称或IP的范围可以简化Ansible主机清单
语法:
#[start:end]
[westostest]
172.25.254.[100:108]

  • 多台主机
vim /etc/ansible/hosts
///
[westos2]
172.25.254.[90:100]			##多台主机
///
ansible westos2 --list

请添加图片描述

4、ansible命令指定清单的正则表达式

*		##所有
		##172.25.254.*

:		##逻辑或
		##westos1:linux

:&		##逻辑与
		##westos1:&linux
		##主机即在westos1清单也在linux清单中

:!		##逻辑非
		##westos1:!linux
		##在westos1中不在linux中

~		##以关键字开头

实验:

  • *—>所有
vim /etc/ansible/hosts
///
[192]
172.25.254.200
172.25.254.89
///
ansible "192*" --list		##清单中所有以192开头的清单或者清单中的主机

先编辑清单文件,加入192的ip。
请添加图片描述
请添加图片描述

  • :—>或
ansible "192*:172*" --list	##带有172或者192

请添加图片描述

  • :&—>与
vim /etc/ansible/hosts
///
[westos1]
172.25.254.[90:100]
192.168.0.1

[westos2]
172.25.254.92
westoslinux.westos.org

[westos:children]
westos1
westos2
///
ansible "westos1:&westos2" --list	##在1也在2

请添加图片描述

  • :!—>非
ansible "westos1:!westos2" --list	##在1不在2

请添加图片描述

  • ~—>以关键字开头
ansible '~(172|192)' --list		##以172或者192开头,注意弱引用与强引用

请添加图片描述

六、Ansible配置文件参数详解

1、配置文件的分类与优先级

/etc/ansible/ansible.cfg		##基本配置文件,找不到其他配置文件此文件生效
~/.ansible.cfg					##用户当前目录中没有ansible.cfg此文件生效
./ansible.cfg					##优先级最高

2、常用配置参数

#[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

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

因为默认配置文件中指定用户的数量只能为1,因此需要将每个用户的配置独立设定。此时建立一个用户yun,并设定密码。建立ansible运行时该用户使用的目录/home/yun/ansible,进入该目录,并生成配置文件。设定该目录的所属人和所属组都为yun用户。

###westosa
useradd yun
mkdir -p /home/yun/ansible
chown yun.yun /home/yun/ansible

该配置文件基本信息需要指定清单路径,设定连接受管主机时不需要输入yes建立host_key,设定公钥登陆,即不提示输入SSH密码,设定在受管主机上登陆的用户名称为devops(此处是在环境配置时设定ansible主机通过该用户控制受控主机),设定默认模块为shell。
同时需要进行身份信息设定。

vim ansible.cfg
///
[defaults]
inventory		=~/ansible/inventory		##指定清单路径
host_key_checking	=False					##设定连接受管主机时不需要输入yes建立host_key
ask_pass		=False						##设定公钥登陆,即不提示输入SSH密码
#roles_path		=							##之后会用到,此处先注释
remote_user		=devops						##设定在受管主机上登陆的用户名称为devops(此处是在环境配置时设定ansible主机通过该用户控制受控主机)
module_name		=shell						##设定默认模块为shell

[privilege_escalation]						##身份信息设定
become=True
become_method=sudo
become_user=root
become_sak_pass=False
///

请添加图片描述
编辑清单文件,指定受控主机。

vim inventory	
///
[westos]
172.25.254.114
172.25.254.214
///

但此时westosa主机(172.25.254.114)中并不存在devops用户,因此在root用户下建立该用户并设定密码,对其进行权力下放。

useradd devops
echo westos | passwd --stdin devops
visudo		##两台主机都需要做devops用户的权力下放
///
101 devops  ALL=(ALL)       NOPASSWD:ALL
///

对ssh进行加密。两台主机都要做密钥,此处是因为最开始环境配置的时候已经对214主机做过密钥加密。

ssh-copy-id -i /root/.ssh/id_rsa.pub devops@172.25.254.114	##用key对指定devops用户加密

切换到yun用户,切入ansible目录,将root用户下的key复制到当前目录。

su - yun
cd /home/yun/ansible
scp root@172.25.254.114:/root/.ssh/id_rsa /home/yun/.ssh/id_rsa	

此时便可以连接到两台主机。yun用户可以免密登录114主机和214主机的devops用户。

ansible westos2 -m ping

至此用户级环境配置完成。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值