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操作环境构建

ansible自动化运维详解ansible的安装部署参数使用清单管理配置文件参数及用户级ansible操作环境构建

ansible控制windows 2019