Ansible 的安装及部署
Posted 123坤
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ansible 的安装及部署相关的知识,希望对你有一定的参考价值。
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
- 安装 ansible;
搭建完成之后,此时便可开始安装 ansible;
[root@Ansible yum.repos.d]# dnf install ansible.noarch -y
[root@Ansible yum.repos.d]# ansible --version ##查看当前的版本
- 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 | 查看全局清单文件中的全部主机列表 |
- 单层清单的书写及查看
直接书写受管主机名或 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
- 嵌套式清单设定及查看
[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
- 主机规格的范围化操作
通过指定主机名称或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
- 指定其他清单文件
在 /mnt/ 中新建一个文件,写入主机名或者IP;默认不会识别配置文件之外的清单;
指定文件中 java 组的清单;
指定文件中的所有,以及指定文件中不在组中的清单;
- ansible 命令指定清单的正则表达式
符号 | 含义 |
---|---|
* | 所有 |
: | 逻辑或 |
:& | 逻辑与 |
:! | 逻辑非 |
~ | 以关键字开头 |
~(str1 | str2) |
所有
逻辑或
逻辑与
逻辑非
关键字开头
条件开头
4. Ansible 配置文件参数详解
- 使用方法:ansible 清单中组名称 -m 模块 -u remote_user(那个远程用户)。
模块就相当于命令:
-k 参数表示输入密码;
-a 参数表示shell的命令 ; - ansible 运行方式:将命令转化成 python 语言,然后上传到被控主机,执行完后,再删除;
注意:ansible控制主机时,使用的用户身份是什么 ,登陆被控主机时,默认使用的身份就是什么。
- 配置文件的分类与优先级
配置文件 | 优先级 |
---|---|
/etc/ansible/ansible.cfg | 基本配置文件,找不到其他配置文件此文件生效 |
~/.ansible.cfg | 用户当前目录中没有ansible.cfg此文件生效 |
./ansible.cfg | 优先级最高 |
- 常用配置参数
[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)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_sudo
和ask_sudo_pass
;
在2.9版本中转而试用了become
系列参数.
5. 构建用户级 Ansible 操作环境
- ssh 免密
(1)生成密码
输入命令ssh-keygen
,生成之后,在但前用户的 .ssh
中会有两个文件,一个为私钥一个公钥;
(2)发送公钥
用命令 ssh-copy-id -i id_rsa_pub zxk@172.25.254.100
来发送公钥;
(3)测试
2. visudo 免密
在两台被控主机中做权力下放的免密登陆,直接输入visudo命令;
然后在100行左右写入如下内容:
- 编辑主配置文件,将
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 时相互独立。
以上是关于Ansible 的安装及部署的主要内容,如果未能解决你的问题,请参考以下文章
ansible自动化运维详解ansible的安装部署参数使用清单管理配置文件参数及用户级ansible操作环境构建
ansible自动化运维详解ansible的安装部署参数使用清单管理配置文件参数及用户级ansible操作环境构建