ansible(一)--- 介绍与详解
1.ansible简介
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于 paramiko开发的,并且基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。ansible目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。是每位运维工程师必须掌握的技能之一。
2.ansible安装与启用
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm 在官方网站下载epel源
rpm -ivh epel-release-latest-8.noarch.rpm 安装epel源
dnf install -y ansible ansible的安装包都在epel源中
dnf install -y sshpass-1.06-9.el8.x86_64.rpm 下载依赖性
dnf install -y ansible-2.9.11-1.el8.noarch.rpm 安装ansible
ansible --version 查看版本
3.
3.部署ansible
ansible的默认配置目录:/etc/ansible
/etc/ansible/ansible.cfg #主配置文件
/etc/ansible/hosts #主机清单
1.添加管理清单
ansible 172.25.254.200 -m ping
vim hosts
172.25.254.200
cat hosts|tail -n 3
ansible all --list-hosts
管理清单中没有200主机所以不能管理,可以在管理清单中,添加被控主机
2.生成密钥认证
ansible 172.25.254.200 -m ping
当要控制200主机时,首先会在ansible主机中生成py脚本,然后远程通过sshd服务传输到被控主机中在传文件过程中需要后者的认证通过
解决方法1:
当执行snsible时询问ssh密码,出现pong回馈,表示和200主机之间可以实现ansible管理
解决方法2:密钥认证
首先在node1建立新用户 devops,让ansible用devops来控制本机
ssh-keygen 在ansible生成一对公钥和私钥
ssh-copy-id -i /root/.ssh/id_rsa.pub devops@172.25.254.200
给devops@172.25.254.200使用公钥加密,需要输入devops@172.25.254.200的密码验证
3.下放权力给devops
当前在200主机中运行指令的是devops这个普通用户身份所以权力很小,不能执行一些指令
解决:visudo 下放权力给devops,在100行添加
4.ansible清单
什么是清单:定义了ansible将要管理的一批主机。
<1>静态清单
每行一个,填写主机名或ip,如:
查看清单中不在组里面的主机定义主机组
查看组中所有的主机
<2>定义嵌套组
ansible主机清单可以包含多个主机组构成的组,如:
<3>通过范围简化主机规格
可以指定主机名称或ip范围或者数字和字母范围。
语法:[START:END]
<5>自定义查看清单
ansible "westos1:&westos2" --list 在westos1组中也在westos2组中
ansible 'westos1:!westos2' --list 在westos1组中也不在westos2组中
ansible '~(172|192)' --list 以172或192开头的
5.管理ansible配置文件
5.1配置文件的分类
/etc/ansible/ansible.cfg ##基本配置文件,如果找不到其他配置文件,使用这个
~/.ansible.cfg ##如果存在此配置并且当前工作目录中也,没有ansible.cfg,此文件代替/etc/ansible/ansible.cfg
./ansible.cfg ##执行ansible命令的目录中如果有ansible.cfg,就用它,不用上面俩个(推荐使用,上面俩个不常用)
5.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
5.3 构建用户级ansible操作环境
新建用户lee作为用户级主控机;
新建用户devops作为被控主机用户 ,下放权力给devops,并给密钥
[root@localhost ansible]# useradd lee
[root@localhost ansible]# echo westos|passwd --stdin lee
[root@localhost ansible]# useradd devops
[root@localhost ansible]# visudo
[root@localhost ansible]# echo westos|passwd --stdin devops
[root@localhost ansible]# ssh-copy-id -i /root/.ssh/id_rsa.pub devops@172.25.254.100
建立目录,编写配置文件,编写被控清单,将私钥传输给lee主控机从而建立免密
[root@localhost ansible]# su - lee
[lee@westos_ansible ~]$ mkdir ansible
[lee@westos_ansible ~]$ cd ansible/
[lee@westos_ansible ansible]$ vim ansible.cfg
[lee@westos_ansible ansible]$ vim inventory
[lee@westos_ansible ansible]$ cat inventory
[westos]
172.25.254.100
172.25.254.200
[lee@westos_ansible ~]$ scp root@172.25.254.100:/root/.ssh/id_rsa /home/lee/.ssh/
ansible westos -m ping
ansible.cfg
[lee@westos_ansible ansible]$ vim ansible.cfg
[defaults]
inventory =~/ansible/inventory
host_key_checking =False
ask_pass =False
remote_user =devops
module_name =shell
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False