目录
Ansible 172.25.x.254
node1 172.25.x.1
node2 172.25.x.2
node3 172.25.x.3
####1.Ansible对于企业运维的重大意义####
在企业中,一个运维人员要对多台机子进行操作,shell脚本可以对于单独的主机进行操作,ansible存在的意义是可以对多台主机进行操作。
Ansible 自动运维工具特点:
nsible 与 Saltstack 均是基于 Python 语言开发,Ansible 只需要在一台普通的服务器上运行即可,不需要在客户端服务器上安装客户端。因为 Ansible 是基于 SSH 远程管理,而Linux服务器大都离不开SSH,所以Ansible不需要为配置工作添加额外的支持。
Ansible 安装使用非常简单,而且基于上千个插件和模块实现各种软件、平台、版本的管理,支持虚拟容器多层级的部署。很多读者在使用 Ansible 工具时,认为 Ansible比 Saltstatck 执行效率慢,其实不是软件本身慢,是由于 SSH 服务慢,可以优化 SSH 连接速度及使用 Ansible 加速模块,满足企业上万台服务器的维护和管理。
####2.Ansible的安装####
实验环境: 一台主控机 一台被控机
主控机设定:
hostnamectl set-hostname westos_ansible.westos.org
被控机设定:
hostnamectl set-hostname westos_nodel.westos.org
真机
firewall-cmd --add-masquerade ##开启后,虚拟机即可上网
再分别连接两台机子进行操作并配好网络仓库
在epel源里进行下载
epel for rhel8
wget下载 rpm -ivh进行安装
ls /etc/yum.repos.d/ ##进行查看
dnf search ansible
dnf install yum-utils -y
yumdownloader ansible --destdir=/mnt --resolve ##进行下载并下载到/mnt下
cd /mnt ##即可看到
dnf install sshpass-1.06-9.el8.x86_64.rpm -y ##必须先下在sshpass这个包
dnf install ansible-2.9.24-1.el8.noarch.rpm -y
ansible --version ##检测是否安装成功,安装成功后,即可执行此命令显示信息
ansible是个插件,不需要启动任何服务,只对内服务
ls /etc/yum.repos.d/ ##进行查看
dnf search ansible
dnf install ansble.noarch
dnf install yum-utils -y
yumdownloader ansible --help
yumdownloader ansible --destdir=/mnt --resolve ##进行下载并下载到/mnt下
cd /mnt ##即可看到
dnf install sshpass-1.06-9.el8.x86_64.rpm -y ##必须先下在sshpass这个包
dnf install ansible-2.9.24-1.el8.noarch.rpm -y
ansible --version ##检测是否安装成功,安装成功后,即可执行此命令显示信息
ansible是个插件,不需要启动任何服务,只对内服务
####3.构建Anisble清单####
ansible的基本信息:
cd /etc/ansible ##主配置目录
/etc/ansible/ansible.conf ##全局配置文件,默认很少修改
/etc/ansible/hosts ##全局清单文件 清单就是ansible控制主机的列表
cd /etc/ansible ##主配置目录
ls
ansible.cfg hosts roles ## ansible.cfg 清单文件 hosts 默认清单文件 roles 角色
ansible 172.25.254.217 -m ping ## m 模块 ##当要控制218主机时首先会在ansible主机中
#生成py脚本然后远程用过sshd服务传输到被控主机中
#在传文件过程中需要后者的认证通过
#因为217主机没有匹配到配置文件 管理清单中没有217这台主机 所以不能对其控制
ansible all --list-hosts ##列出清单中的所有主机
vim /etc/ansible/hosts ##管理清单,添加被控主机
172.25.254.217 ##添加成功
ansible all --list-hosts ##列出添加主机
ansible 172.25.254.217 -m ping -k ## k 当执行ansible命令时,询问ssh密码 输入密码即可访问成功 实现ansible管理
172.25.254.217 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong" ##显示pong回馈 表示218主机之间可以实现ansible的管理
}
免密认证
被控主机
useradd devops ##被控主机一般都为普通用户
echo westos | passwd --stdin devops
主控机
ssh-keygen ##生成key
ssh-copy-id -i /root/.ssh/id_rsa.pub devops@172.25.254.217 ##对远程被控机进行加密
ansible 172.25.254.217 -m ping -u devops ##不需要密码即可对指定用户进行控制
对被控机进行操作
被控机
visudo ##因为被控机一般为普通用户,所以要进行权力下放
100 root ALL=(ALL) ALL
101 devops ALL=(ALL) NOPASSWD: ALL ##NOPASSWD 免密主控机
ansible 172.25.254.217 -m shell -a 'touch /mnt/westosfile' -u devops --become -K ##即可对被控机进行操作 -K 输入密码 (NOPASSWD即可不用)
清单
cd /etc/ansible
vim westos
172.25.254.111
ansible all --list
ansible all -i westos --list ## -i 指定清单
一般都是用默认清单进行操作
vim hosts ##默认清单
[wesos1]
172.25.254.117
[westos2]
172.25.254.217
[westos:children]
westos1
westos2
anasible westos --list ##嵌套式清单
hosts (2):
172.25.254.217
172.25.254.117vim hosts
[westos2]
172.25.254.[90:100]
ansible westos2 --list ##显示 90-100 的主机
ansible命令指定清单的正则表达式
* ##所有
##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开头
####4.Ansible配置文件参数详解####
#
ansible 清单中组名称 -m 模块 -u remote_user
##1.配置文件的分类与优先级
/etc/ansible/ansible.cfg #基本配置文件,找不到其他配置文件此文件生效
~/.ansible.cfg #用户当前目录中没有ansible.cfg此文件生效
./ansible.cfg #优先级最高visudo ##编辑权力下放配置文件
devops ALL=(ALL) NOPASSWD: ALL
visudo ##生成新的密钥
ssh-copy-id -i /root/.ssh/id_rsa.pub devops@172.25.254.118 ##将密钥传输给118主机中的devops用户
ssh-copy-id -i /root/.ssh/id_rsa.pub devops@172.25.254.218 ##将密钥传输给218主机中的devops用户#2.常用配置参数
vim /etc/ansible/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= ##日志文件路径71 host_key_checking= False ##不在询问时候接受受控主机的key
107 remote_user=devops ##执行ansible控制受控主机时用到的链接远程主机的用户为devops
114 module_name=ping ##ansible命令运行时默使用模块[privilege_escalation] ##身份信息设定
become=Ture ##连接后是否自动切换用户
become_method=sudo ##设定切换用户的方式,通常用sudo
become_user=root ##在受管主机中切换到的用户,通常为root
become_ask_pass=Falese ##是否需要为become_method提示输入密码,默认为falseansible westos -m ping ##ping【westos组】中的受控主机的网络
练习:
主控机 root用户:
ssh-keygen ##生成密钥
useradd rtt
echo westos | passwd --stdin rtt
useradd devops
echo westos | passwd --stdin devops
useradd devops
echo westos | passwd --stdin devops
ssh-copy-id -i /root/.ssh/id_rsa.pub devops@172.25.254.172 ##对172主机进行加密
ssh-copy-id -i /root/.ssh/id_rsa.pub devops@172.25.254.254 ##对254主机进行加密
主控机中:
su - rtt
mkdir ~/ansible
vim ansible.cfg ##编辑主配置文件
[defaults]
inventory = ~/ansible/inventory
ask_pass = False
host_key_checking = False
module_name = shell
remote_user = devops
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False
vim inventory ##编辑清单
[westos]
172.25.254.172
172.25.254.254
scp root@172.25.254.172:~/.ssh/id_rsa /home/rtt/.ssh/ ##因为 rtt 用户没有权限,所以将root用户上的锁烤过来
[root@westos_ansible ~]# visudo
devops ALL=(ALL) NOPASSWD: ALL ## 172主机 第100行加devops用户免密权限
[root@westos_nodel mnt]# visudo ## 254主机 第100行加devops用户免密权限
devops ALL=(ALL) NOPASSWD: ALL
主控机 rtt用户
[rtt@westos_ansible ansible]$ ansible westos -m ping ##即可连接成功
172.25.254.254 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}
172.25.254.172 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}