当前位置: 首页 > news >正文

Linux运维篇-ansible的使用

目录

  • ansible简介
  • ansible架构
    • 1、连接插件
    • 2、核心模块
    • 3、自定义模块
    • 4、插件
    • 5、剧本
    • 6、主机清单
  • ansible的执行过程
  • 安装Ansible
  • ansible的使用
    • ansible.cfg文件修改
    • 添加主机清单
      • 方式一
      • 方式二
      • 方式三
    • 测试主机清单连接

ansible简介

简单来说,ansible就是一个自动化运维工具。主要功能是批量系统配置、批量程序部署、批量运行命令等。
ansible是基于python开发,且工作原理简单,通过ssh连接客户机执行任务。ansible是基于模块运行的,它本身并不具备批量执行任务的能力。

ansible架构

1、连接插件

connection plugins用于连接主机 用来连接被管理端

2、核心模块

core modules连接主机实现操作,它依赖于具体的模块来做具体的事情

3、自定义模块

custom modules根据自己的需求编写具体的模块

4、插件

plugins完成模块功能的补充

5、剧本

playbook ansible的配置文件,将多个任务定义在剧本中,由ansible自动执行

6、主机清单

inventor定义ansible需要操作主机的范围

ansible是模块化的 它所有的操作都依赖于模块

在这里插入图片描述

ansible的执行过程

  1. Ansible读取playbook剧本,剧本中会记录哪些主机执行哪些任务。
  2. 首先Ansible通过主机清单inventory找到要执行的主机,然后调用具体的模块。
  3. 其次Ansible会通过连接插件连接对应的主机并发送对应的任务列表。
  4. 最后被管理的主机会将Ansible发送过来的任务解析为本地Shell命令执行。

安装Ansible

我的基础环境为centos7.9,需要配置yum源,和epel源,我这里选用的是阿里云。

首先删除系统原来的yum源配置文件,centos7的官方支持已过期且国内有网络访问限制,最好使用第三方源。
在这里插入图片描述
按照阿里云镜像站的说明,下载centos7版本的yum源文件
在这里插入图片描述
下载centos7版本的epel源文件
在这里插入图片描述
更新yum源配置和epel源配置
在这里插入图片描述有两个报错信息,但是没有影响,yum源和epel源都已经准备好了。
安装ansible非常简单,只需要
在这里插入图片描述等待任务完成即可。
ansible --version命令检查ansible的版本。
在这里插入图片描述

ansible 2.9.27config file = /etc/ansible/ansible.cfg    #配置文件configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']    # 模块目录ansible python module location = /usr/lib/python2.7/site-packages/ansible #python模块安装目录executable location = /usr/bin/ansible    #ansible命令python version = 2.7.5 (default, Oct 30 2020, 14:45:30) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] #python版本

ansible的使用

ansible.cfg文件修改

# ansible <host-pattern> [options]
--version     #ansible版本信息
-v            #显示详细信息
-i            #主机清单文件路径,默认是在/etc/ansible/hosts (一般用临时的,除非清单临时使用一次)
-m            #使用的模块名称,默认使用command模块
-a            #使用的模块参数,模块的具体动作
-k            #提示输入ssh密码,而不使用基于ssh的秘钥认证
-C            #模拟执行测试,但不会真的执行(没用)
-T            #执行命令的超时

Ansible的本身配置文件只有一个,即ansible.cfg,Ansible安装好后它默认存放于/etc/ansible/目录下。

ansible.cfg配置文件可以存在于多个地方,Ansible读取配置文件的顺序依次是:

当前命令执行目录用户家目录下的.ansible.cfg/etc/ansible.cfg
先找到哪个就使用哪个的配置。其ansible.cfg配置的所有内容均可在命令行通过参数的形式传递或定义在Playbooks中。

[root@localhost ~]# cat /etc/ansible/ansible.cfg
#inventory      = /etc/ansible/hosts        #主机清单配置文件
#library        = /usr/share/my_modules/    #库文件存放目录
#remote_tmp     = ~/.ansible/tmp            #临时py文件存放在远程主机目录
#local_tmp      = ~/.ansible/tmp            #主机的临时执行目录
#forks          = 5                            #默认并发数(一般不改,不要设置太大,实际上串行就行了)
#sudo_user      = root                        #默认sudo用户(ansible执行的用户,一般使用root用户)
#ask_sudo_pass = True                        #每次执行是否询问sudo的ssh密码
#ask_pass      = True                        #每次执行是否询问ssh密码
#remote_port    = 22                        #远程主机端口(默认22,因为每台端口可能不同,在主机清单里配)
host_key_checking = False                    #跳过检查主机指纹(一定要打开!ssh连接就不用输入yes,否则卡在输yes上)
log_path = /var/log/ansible.log                #ansible日志(无所谓配不配,运行时报错会直接展示)#普通用户提权操作(我们用的是root账户,这个一般也用不上)
[privilege_escalation]
#become=True        #是不是开启
#become_method=sudo    #提权的命令
#become_user=root    #提权的用户
#become_ask_pass=False    #要不要认证密码

我想要在其他目录来修改ansible的配置文件,避免对原生的配置文件造成破坏。如果你没有这个需求,那么在/etc/ansible目录中修改配置文件也是一样的。
所以,cp -R /etc/ansible /root/
在这里插入图片描述
修改当前目录下的配置文件

inventory      = /root/ansible/hosts
roles_path    = /root/ansible/roles
host_key_checking = False

添加主机清单

在上一步,我修改了默认的主机清单配置文件位置,inventory = /root/ansible/hosts,所以,这里我的主机清单位置为 /root/ansible/hosts,如果没有修改,那就是默认的/etc/ansible/hosts

方式一

[root@localhost ~]# vim /root/ansible/hosts
#方式一:IP + 端口 + 用户 + 密码 (端口默认22,用户默认root,ansible_ssh_port和ansible_ssh_usr可以不写)
[web01]
10.0.0.7 ansible_ssh_port=22 ansible_ssh_usr=root ansible_ssh_pass='admin123'
10.0.0.8 ansible_ssh_port=22 ansible_ssh_usr=root ansible_ssh_pass='admin123'

方式二

这种方式下, 需要做ssh免密登录,相对于明文的密码来说,更加安全。

#1.生成密钥对
[root@localhost ~]# ssh-keygen#2.推送公钥
[root@localhost ~]# ssh-copy-id root@172.16.1.7
[root@localhost ~]# ssh-copy-id root@172.16.1.8
#方式二:ip
[root@localhost ~]# vim /root/ansible/hosts
[web01]
172.16.1.7
172.16.1.8
#方式二:主机名
[web01]web01web02

方式三

#方式三:主机组
[root@localhost ~]# vim /etc/ansible/hosts
[web_group]
web01
web02
[lb_group]
172.16.1.4 ansible_ssh_pass='admin123'
172.16.1.5 ansible_ssh_pass='admin123'

查看指定组的主机

[root@localhost ~]# ansible web_group --list-hosthosts (2):web01web02

查看配置文件所有组的主机

#all为内置变量,表示配在主机清单里的所有主机
[root@localhost ~]# ansible all --list-host    hosts (4):172.16.1.4172.16.1.5web01web02

这里还有个需要注意的是多组整合。

[root@m01 ~]# vim /etc/ansible/hosts
[web_group]
web01
web02
[ftp_group]
172.16.1.4 ansible_ssh_pass='admin123'
172.16.1.5 ansible_ssh_pass='admin123'
[db_group]
172.16.1.51 ansible_ssh_pass='admin123'
172.16.1.52 ansible_ssh_pass='admin123'#定义多组,整合web_group组合lb_group组
[nginx_group:children]    #如果不加:children,下面的组名会被当成主机名
web_group
ftp_group

查看多组整合的主机列表你就可以看出来他们之间的区别:

[root@localhost ~]# ansible nginx_group:children --list-host
[WARNING]: Could not match supplied host pattern, ignoring: childrenhosts (4):web01web02172.16.1.4172.16.1.5

测试主机清单连接

[root@localhost ~]# ansible 'web01' -m ping #代表仅'web01'组内的主机
[root@localhost ~]# ansible '*' -m ping    #*代表所有主机
[root@localhost ~]# ansible 'all' -m ping    #all代表所有主机
[root@localhost ~]# ansible 'web01,web02' -m ping    #支持逗号
http://www.lryc.cn/news/469763.html

相关文章:

  • 【MySQL】日志
  • 2024年CentOS镜像下载地址,包括CentOS官网、国内镜像下载,超详细也
  • STL学习-顺序容器-array数组
  • Spring Boot框架下的酒店住宿登记系统
  • electron展示下载进度条
  • Spark 基础操作
  • VoLTE 微案例:VoLTE 注册失败,I-CSCF 返回 403,HSS(UAR) 返回 5001
  • 智能财务 | 数据与融合,激发企业财务数智化转型思考
  • docker 下载netcore 镜像
  • Ajax:请求 响应
  • WebForms DataList 控件深入解析
  • 【有啥问啥】DINO:一种改进的去噪锚框的端到端目标检测器
  • 自由学习记录(15)
  • Docker 部署 JDK11 图文并茂简单易懂
  • Cisco ASAv虚拟防火墙
  • w~自动驾驶合集6
  • C/C++ H264文件解析
  • 【Windows】电脑端口明明没有进程占用但显示端口被占用(动态端口)
  • Redis 持久化 问题
  • vivado 配置
  • Java如何实现PDF转高质量图片
  • itemStyle.normal.label is deprecated, use label instead.
  • 如何在 Linux VPS 上保护 MySQL 和 MariaDB 数据库
  • CSS 样式 box-sizing: border-box; 用于控制元素的盒模型如何计算宽度和高度
  • 预训练 BERT 使用 Hugging Face 和 PyTorch 在 AMD GPU 上
  • 鸿蒙是必经之路
  • Java项目实战II基于微信小程序的马拉松报名系统(开发文档+数据库+源码)
  • 家用wifi的ip地址固定吗?换wifi就是换ip地址吗
  • codeforces _ 补题
  • DataSophon集成ApacheImpala的过程