Ansible 的安装及部署

1. Ansible 对于企业运维的重大意义

  • Ansible 是新出现的自动化运维工具,主要适用于一台主机同时控制多台主机,实现了批量系统配置、批量程序部署、批量运行命令等功能。需要注意的是ansible是基于模块工作的,本身没有批量部署的功能,真正具有批量部署的是ansible所运行的模块
  • Ansible 的实验可以使用三台主机,可使真机作为 Ansible 服务器,也就是作为主控机。再使用两台虚拟机作为被控机,三台主机之间是可以实现网络互通的。两台受控主机不需要做环境设定。

Ansible 172.25.254.39
node1 172.25.254.100
node2 172.25.254.200

2. Ansible 的安装

镜像文件是不提供 ansible 服务的,所以需要使用 epel 源安装该服务,可以使用阿里云的 epel 源或者官方提供的 epel 源。

注意:如果之前安装过阿里云的epel源而后删除了,那么再去重新安装时,就会出现提示安装包已经安装过,但是却仍然无法下载服务的情况,此时可以输入rpm -qa | grep epel 命令找到 epel 的软件包,再输入rpm -e软件包将软件包删除后再重新下载即可。

搭建 epel 源

在这里插入图片描述

[root@Ansible mnt]# wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm 
[root@Ansible mnt]# rpm -ivh epel-release-latest-8.noarch.rpm
[root@Ansible mnt]# cd /etc/yum.repos.d/
[root@Ansible yum.repos.d]# ls		##安装完成之后,会在软件仓库所在位置生成 epel 源
epel-modular.repo     epel.repo                  epel-testing.repo  westos.repo
epel-playground.repo  epel-testing-modular.repo  redhat.repo
  1. 安装 ansible;
    搭建完成之后,此时便可开始安装 ansible;
[root@Ansible yum.repos.d]# dnf install ansible.noarch -y
[root@Ansible yum.repos.d]# ansible --version	##查看当前的版本
  1. ansible 的基本信息
    /etc/ansible/ansible.cnf ##全局配置文件,默认很少修改
    /etc/ansible/hosts ##全局主机清单清单文件

3. 构建 Anisble 清单

清单就是 ansible 控制主机的列表
/etc/ansible/hosts ##全局清单文件

命令含义
ansible 清单中组名称 [-i 清单文件] - -list-hosts查看某个组列表中的清单,加上中括号的内容表示列出某个文件中的所有主机
ansible ungrouped - -list-hosts查看全局清单文件中,不属于任何组的主机
ansible all - -list-hosts查看全局清单文件中的全部主机列表
  1. 单层清单的书写及查看
    直接书写受管主机名或 ip,每行一个;
    (1)设定
[root@Ansible ~]# rpm -qc ansible
/etc/ansible/ansible.cfg
/etc/ansible/hosts
[root@Ansible ~]# vim /etc/ansible/hosts

 45 [westos]
 46 172.25.254.100
 47 172.25.254.200
 48 
 49 [linux]
 50 172.25.254.39

(2)查看清单

[root@Ansible ~]# ansible all --list-hosts
  hosts (3):
    172.25.254.100
    172.25.254.200
    172.25.254.39
[root@Ansible ~]# ansible westos --list-hosts
  hosts (2):
    172.25.254.100
    172.25.254.200
[root@Ansible ~]# ansible linux --list-hosts
  hosts (1):
    172.25.254.39
  1. 嵌套式清单设定及查看
[root@Ansible ~]# vim /etc/ansible/hosts
 45 [westos]
 46 172.25.254.100
 47 172.25.254.200
 48 
 49 [linux]
 50 172.25.254.39
 51 
 52 [test:children]
 53 westos
 54 linux
 55 

在这里插入图片描述

  1. 主机规格的范围化操作
    通过指定主机名称或IP的范围可以简化 Ansible 主机清单;
    语法:
    [start:end]
    [westostest]
    172.25.254.[100:108]
[root@Ansible ~]# vim /etc/ansible/hosts
 45 [westos]
 46 172.25.254.100
 47 172.25.254.200
 48 172.25.254.[1:8]
 49 
 50 [linux]
 51 172.25.254.39
 52 
 53 [test:children]
 54 westos
 55 linux

在这里插入图片描述

  1. 指定其他清单文件
    在 /mnt/ 中新建一个文件,写入主机名或者IP;默认不会识别配置文件之外的清单;
    指定文件中 java 组的清单;

在这里插入图片描述

指定文件中的所有,以及指定文件中不在组中的清单;
在这里插入图片描述

  1. ansible 命令指定清单的正则表达式
符号含义
*所有
:逻辑或
:&逻辑与
:!逻辑非
~以关键字开头
~(str1str2)

所有
在这里插入图片描述

逻辑或

在这里插入图片描述

逻辑与

在这里插入图片描述

逻辑非

在这里插入图片描述

关键字开头

在这里插入图片描述

条件开头

在这里插入图片描述

4. Ansible 配置文件参数详解

  • 使用方法:ansible 清单中组名称 -m 模块 -u remote_user(那个远程用户)。
    模块就相当于命令:
    -k 参数表示输入密码;
    -a 参数表示shell的命令 ;
  • ansible 运行方式:将命令转化成 python 语言,然后上传到被控主机,执行完后,再删除;

注意:ansible控制主机时,使用的用户身份是什么 ,登陆被控主机时,默认使用的身份就是什么。

  1. 配置文件的分类与优先级
配置文件优先级
/etc/ansible/ansible.cfg基本配置文件,找不到其他配置文件此文件生效
~/.ansible.cfg用户当前目录中没有ansible.cfg此文件生效
./ansible.cfg优先级最高
  1. 常用配置参数
[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 westos -m ping时,会询问 yes |no 等信息;红色报错,因为没有输入密码的步骤;

在这里插入图片描述
如果不希望诶询问,此时可以在配置文件 /etc/ansible/ansible.cfg中加入参数:

在这里插入图片描述
修改参数 之后,此时访问便不再会提示,而是跳过,直接报错;因为没有输入密码,在这个过程中可以加入参数 -k 来输入密码;输入密码之后,可以 ping 通的主机就是绿色的;

在这里插入图片描述
可以用命令 ansible westos -m shell -a 'hostname' -k 来调用被控机的 shell 模块来执行 hostname 命令 ,-k 表示输入密码;可以看到输出的信息为被控机的主机名;

在这里插入图片描述
可以用命令 ansible westos -m shell -a 'useradd sss' -k 来调用被控机的 shell 模块来执行 useradd 命令 ,-k 表示输入密码;
也可以用命令 ansible westos -m shell -a 'userdel -r sss' -k 来调用被控机的 shell 模块来执行 userdel 命令 ,-k 表示输入密码;

在这里插入图片描述
在上述操作的过程,可以在被控机中,查看效果,新建用户成功,删除也成功;

在这里插入图片描述
在这里插入图片描述

在远程主机中指定身份;

  1. 永久配置文件
    (1)inventory
[root@Ansible ~]# vim /etc/ansible/ansible.cfg 
 12 # some basic default values...
 13 
 14 inventory      = /etc/ansible/hosts 

[root@Ansible ~]# ansible all --list		##默认只能看 /etc/ansible/hosts 中的清单
  hosts (2):
    172.25.254.100
    172.25.254.200

 12 # some basic default values...
 13 
 14 inventory      = /etc/ansible/hosts,/mnt/zxk 

设定完成之后,便可看到 /mnt/zxk 中的清单信息;
在这里插入图片描述

默认情况下用谁执行的命令就是用谁登陆;

在这里插入图片描述

可以通过对配置文件的更改默认登陆的用户是谁;

在这里插入图片描述
在这里插入图片描述
当在登陆时,指定用户时,默认就失效了;

在这里插入图片描述
默认情况下是不会提示输入密码的,如果不加 -k 会直接报错;
修改配置文件内容之后,即使不加 -k 也会提示;

在这里插入图片描述

在这里插入图片描述
12)编辑 /etc/ansible/ansible.cfg 主配置文件,写入内容如下;

[root@Ansible ~]# vim /etc/ansible/ansible.cfg 

341 [privilege_escalation]
342 become=True
343 become_method=sudo
344 become_user=root
345 become_ask_pass=True

虽然登陆的是westos身份,但是可以执行sudo命令,也就是主控机登陆被控机使用的是被控机的普通用户,这样对被控机来说,安全性较高。但是主控机登陆后,想使用超级用户权限,就需要做上面所示改变,使得主控机有超级用户的所有权力;

修改完成之后在做建立用户是还是有问题;

在这里插入图片描述
需要在受控主机上做用户权力下放,在 100 主机中输入visudo命令,编辑内容如下所示:

在这里插入图片描述
此时再次测试,可以看到写了权力下放的主机,新建用户成功。

在这里插入图片描述
Ansible 实际是将命令转化为了Python 脚本上传到了远程主机后执行.

关于Sudo

2.7 版本中使用ask_sudoask_sudo_pass;
在2.9版本中转而试用了become系列参数.

5. 构建用户级 Ansible 操作环境

  1. ssh 免密

(1)生成密码
输入命令ssh-keygen,生成之后,在但前用户的 .ssh中会有两个文件,一个为私钥一个公钥;

在这里插入图片描述
(2)发送公钥
用命令 ssh-copy-id -i id_rsa_pub zxk@172.25.254.100 来发送公钥;

在这里插入图片描述

(3)测试

在这里插入图片描述
2. visudo 免密
在两台被控主机中做权力下放的免密登陆,直接输入visudo命令;
然后在100行左右写入如下内容:

在这里插入图片描述

  1. 编辑主配置文件,将 become_ask_pass=False 改为 False,表示不要需要输入权力转换时的密码;默认登陆用户仍然为zxk,不做更改:

在这里插入图片描述
测试

在这里插入图片描述
3. 用户级 ansible 环境设置
当不同的用户使用该主机时,要是都在主配置文件中写入,对于不同用户的设定就显得很混乱;现在就需要对不同用户做不同的设定;

(1)首先将配置文件恢复成之前的样子,将新加入的设定都注释掉;
(2)进入家目录,建立一个. ansible目录,若目录存在则不用建立;然后在修改配置文件的内容;

[root@Ansible ~]# mkdir .ansible/
[root@Ansible ~]# cd .ansible/
[root@Ansible .ansible]# cp /etc/ansible/ansible.cfg .
[root@Ansible .ansible]# vim ansible.cfg 

编辑配置文件内容如图所示:
其中 module_name 参数设定为 shell,表示模块默认设定成 shell,此时就不用再用 -m 来指定模块;原始默认模块是 command;

在这里插入图片描述
在编辑一个数据清单文件:

在这里插入图片描述

测试
此时输入 ansible westos -a ‘hostname’命令,免密且不需要写 -m 参数。

在这里插入图片描述

注意:root 做了该设定后,root 用户可以使用对于 ansible 的独立设定;同样其他用户也可以做属于自己的设定。

用户级 ansible 环境设定主要是为了使 ansible 主机上的不同用户在使用 ansible 时相互独立。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值