Ansibleansible安装,用户级执行ansible命令,清单构建,配置文件详解
Posted S4061222
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ansibleansible安装,用户级执行ansible命令,清单构建,配置文件详解相关的知识,希望对你有一定的参考价值。
目录
简介
Ansible 是新出现的自动化运维工具,Ansible完全基于Python开发,主要适用于一台主机同时控制多台主机,实现了批量系统配置、批量程序部署、批量运行命令等功能
。需要注意的是ansible是基于模块工作
的,本身没有批量部署的功能,真正具有批量部署的是ansible所运行的模块
Ansible是如何工作的
-
Ansible没有客户端
,因此底层通信依赖于系统软件,Linux系统下基于OpenSSH通信
,Windows系统下基于PowerShell,管理端必须是Linux系统
。 -
根据
Ansible使用过程中的不同角色
,将其分为:
使用者
Ansible工具集
作用对象 -
Ansible使用者来源于多种维度,分为以下几种方式:
- CMDB存储和管理着企业IT架构中的各项配置信息,运维人员可以组合CMDB和Ansible,通过CMDB直接下发指令调用Ansible工具集完成操作者所希望达成的目标。
- 基于PUBLIC(公有云)/PRIVATE(私有云),Ansible以API调用的方式运行,Ansible提供了丰富的API语言接口:php、Python等。
- 直接使用Ad-Hoc临时命令集调用Ansible工具集来完成任务执行。
- 通过执行Playbooks中预先编排好的任务集按序完成任务执行。
-
Ansible工具集
(ansible命令是Ansible的核心工具,总指挥)
INVENTORY:命令执行的目标对象配置文件
API:供第三方程序调用的应用程序编程接口
MODULES:丰富的内置模块
PLUGINS:内置和可自定义的插件 -
作用对象
Ansible的作用对象,不仅仅是Linux和非Linux操作系统的主机,同样也可以作用于各类公有云/私有云,商业和非商业设备的网络设施。
实验环境
3台虚拟机Ansible、node1、node2(rhel8.2 的镜像,可以相互连接)
真机 172.25.28.250
node1 172.25.28.100
node2 172.25.28.200
Ansible 172.25.28.28
一、Ansible 的安装
安装方式一:
添加域名解析
使用epel源进行安装,epel可以网上下载,本实验中使用自己的epel的安装包
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
rpm -ivh epel-release-latest-8.noarch.rpm
安装epel源后,会在/erc/yum.repos.d/ 目录下生成epel的文件
安装 ansible
查看ansible的版本
安装方式二:
提前使用epel下载后ansible的依赖性
使用 sshpass + ansible,使用dnf 安装,解决依赖性,自带源中有python的依赖性
ansible的基本信息:/etc/ansible目录下都是全局的
/etc/ansible/ansible.cfg 全局配置文件,默认很少修改
/etc/ansible/hosts ##全局主机清单清单文件
主配置文件
主机文件
测试:
cat /etc/ansible/hosts
指定远程主机
ansible管理主机需要与这些主机提前做好ssh免密
测试:
执行ping存活检测
ansible all -m ping
可以使用host文件中定义的组名称
执行ping存活检测
分组执行ping存活检测
二、构建Anisble清单
1 普通用户执行ansible命令
ansible控制主机时,使用的用户身份是什么 ,登陆被控主机时,默认使用的身份就是什么
在生产环境中一般不会使用root用户方式修改全局hosts文件,一般采用普通用户登陆,给普通用户授权方式
加载顺序:当前目录--用户主目录--全局目录
建立普通用户devops
普通用户devops方式下编辑hosts文件和ansible.cfg文件
Inventory是Ansible管理主机信息的配置文件,相当于系统HOSTS文件的功能,默认存放在/etc/ansible/hosts
。
指定读取当前目录下的hosts文件
修改当前目录下hosts文件内容为 全局/etc/ansible/hosts文件的内容, 去掉全局hosts文件中的指定主机
node1和node2需要有devops用户
ssh免密
ansible主机 普通用户devops 与node1和node2免密
(不然报错!!!)
普通用户方式执行ping存活检测
host_key_checking
host_key_checking= 第一次连接受管主机时是否要输入yes建立host_key
普通用户方式查看df和创建文件
普通用户不能在mnt下写
visudo 免密
node1和 node2上都使用sudo授权普通用户devops
以devops用户touch
以devops至root用户执行touch,-b==become
默认使用root用户身份,修改当前目录下的cfg配置文件, 无需加-b参数就可实现,测试不同node都可实现!!!
2 ansible命令
ansible命令使用场景:
- 非固化需求
- 临时一次性操作
- 二次开发接口调用
ansible-doc -l
列出所有的帮助
ansible --help
指定node 来copy 文件示例
3 Inventory文件配置
Inventory是Ansible管理主机信息的配置文件,相当于系统HOSTS文件的功能,默认存放在/etc/ansible/hosts
。
可以使用 -i 选项指定inventory文件
命令 | 含义 |
---|---|
ansible 清单中组名称 [-i 清单文件] - -list-hosts | 查看某个组列表中的清单,加上中括号的内容列出某个文件中的所有主机 |
ansible ungrouped - -list-hosts | 列出某个文件中的所有主机 |
ansible 清单中组名称 [-i 清单文件] - -list-hosts | 查看全局清单文件中的全部主机列表 |
-
定义主机和组
Inventory可以直接为IP地址
172.25.28.100
端口号不是默认22端口
时,可明确的表示为:
node1:2222
node1 ansible_port=2222 ansible_host=172.25.28.100
中括号表示一个组,也可以表示一个范围
[webserver]
www[1:10].example.com
db-[a:f].example.com -
定义主机变量
在playbook中使用时对主机进行个性化定制
[webserver]
web1 http_port=8080 maxRequestsPerChild=1024 -
定义组变量
[webserver]
node1
node2
[webserver:vars] #vars为变量
ntp_server=time1.aliyun.com #webserver组中的所有主机ntp_server值为time1.aliyun.com
-
定义组嵌套及组变量
[apache]
server1
server2
[nginx]
server3
server4
[webservers:children]
apache #组
nginx #组
[webservers:vars]
ntp_server=time1.aliyun.com(本质:webservers组中的apache和nginx组中的所有主机的ntp_server数值都是time1.aliyun.com)
组与组之间可以相互调用,并且可以向组中的主机指定变量。不过,这些变量只能在Ansible-playbook中使用,而Ansible不支持。
-
在 inventory 主文件中保存所有的变量并不是最佳的方式.还可以保存在独立的文件中:
- 这些
独立文件的格式为 YAML
/etc/ansible/group_vars/raleigh
/etc/ansible/group_vars/webservers
/etc/ansible/host_vars/foosball - 当变
量变得太多
时,分文件定义变量更方便进行管理和组织
/etc/ansible/group_vars/raleigh/db_settings
/etc/ansible/group_vars/raleigh/cluster_settings
- 这些
-
变量的检索位置
Inventory配置文件(默认/etc/ansible/hosts)
Playbook中vars定义的区域
Roles中vars目录下的文件
Roles同级目录group_vars和hosts_vars目录下的文件
单层清单的书写及查看
嵌套式清单设定及查看
主机规格的范围化操作
指定其他清单文件
在 /mnt/ 中新建一个文件,写入主机名或者IP;默认不会识别配置文件之外的清单;
指定文件中 java 组的清单
指定文件中的所有,以及指定文件中不在组中的清单
4 Ansible与正则
- 匹配
所有主机
,all或"*"号
功能相同。
ansible all –m ping
ansible "" -m ping
ansible 172.25.0. -m ping - 对
多台主机或多个组同时执行
,相互之间用冒号分隔
即可
ansible “web1:web2” -m ping 在webserver组但不在
database组的主机,用感叹号
表示
ansible ‘webservers:!database’ -m ping- 在webserver组和database组中
同时存
在的主机,用&符号
表示
ansible “webservers:&database” -m ping 模糊匹配
.example.com
www.com:database
符号 | 含义 |
---|---|
* | 所有 |
: | 逻辑或 |
:& | 逻辑与 |
:& | 逻辑非 |
~ | 以关键字开头 |
~(str1 |
所有
逻辑或
逻辑与
逻辑非
关键字开头
条件开头
5 Ansible 配置文件参数详解
- 使用方法:
ansible 清单中组名称 -m 模块 -u remote_user
(远程用户)。
模块就相当于命令:
-k 参数表示输入密码
;
-a 参数表示shell的命令 ; - ansible 运行方式:将命令转化成 python 语言,然后上传到被控主机,执行完后,再删除;
[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
以上是关于Ansibleansible安装,用户级执行ansible命令,清单构建,配置文件详解的主要内容,如果未能解决你的问题,请参考以下文章
Ansibleansible安装,用户级执行ansible命令,清单构建,配置文件详解
AnsibleAnsible控制windows插件安装及运行error与解决方法
ansible自动化运维详解ansible的安装部署参数使用清单管理配置文件参数及用户级ansible操作环境构建
ansible自动化运维详解ansible的安装部署参数使用清单管理配置文件参数及用户级ansible操作环境构建