Ansible01-Ansible的概述、实验环境初始化、Inventory

目录

  • 写在前面
  • 1. Ansible是什么
    • 1.1 简介与来历
    • 1.2 Ansible的特点
    • 1.3Ansible的架构与工作流程
      • 1.3.1 ansible 任务执行模式
      • 1.3.2 ansible 执行流程
      • 1.4 Ansible的模块
  • 2. Ansible实验初始化
    • 2.1 实验环境
    • 2.2Ansible的安装
      • 2.2.1 Ansible的程序结构
    • 2.3 修改Ansible配置文件
      • 2.3.1 配置文件中常见参数
    • 2.4 Ansible的命令参数
  • 3. Ansible Inventory 主机清单文件
    • 3.1 设置Inventory
      • 3.2.1 子组
      • 3.2.2 指定ansible用户、密码、端口(不推荐)

写在前面

在ansible部分,决定以多篇文章的方式进行记录。写成一篇太累太费时太费脑TuT

1. Ansible是什么

1.1 简介与来历

Ansible 是一个开源的基于Python开发的自动化工具,用于配置管理、应用程序部署和任务自动化。它旨在简化 IT 基础设施管理,使得开发运维 (DevOps) 流程更加高效和可靠。
Ansible 由 Michael DeHaan 于 2012 年创建,并于同年发布。它由 Red Hat 赞助,并于 2015 年被 Red Hat 收购。Ansible 的设计理念是简洁易用,旨在解决传统自动化工具复杂性和学习曲线的问题。

1.2 Ansible的特点

  • 无客户端模式:仅需在控制端部署Ansible环境,被控端无需操作;
  • SSH工作:基于ssh协议对设备进行管理;
  • 框架概念:Ansible基于模块进行工作,本身没有能力,真正工作的是运行的模块
  • playbook:使用基于yaml的playbook实现自动化操作;
  • 可扩展性:支持API等方式扩展;
  • 幂等性:不关注执行过程,执行的结果无关次数,结果相同;

1.3Ansible的架构与工作流程

在这里插入图片描述

1.3.1 ansible 任务执行模式

Ansible 系统由控制主机对被管节点的操作方式可分为两类,即adhoc和playbook

  • ad-hoc模式(点对点模式)
     使用单个模块,支持批量执行单条命令。ad-hoc 命令是一种可以快速输入的命令,而且不需要保存起来的命令。就相当于bash中的一句话shell。
  • playbook模式(剧本模式)
     是Ansible 主要管理方式 ,也是Ansible功能强大的关键所在。playbook通过多个task集合完成一类功能,如Web服务的安装部署、数据库服务器的批量备份等。可以简单地把playbook理解为通过组合多条ad-hoc操作的配置文件。

1.3.2 ansible 执行流程

Ansible在运行时, 首先读取ansible.cfg中的配置, 根据规则获取Inventory中的管理主机列表, 并行的在这些主机中执行配置的任务, 最后等待执行返回的结果。

  • 命令执行过程
  1. 加载自己的配置文件,默认/etc/ansible/ansible.cfg;
  2. 查找对应的主机配置文件,找到要执行的主机或者组;
  3. 加载自己对应的模块文件,如 command;
  4. 通过ansible将模块或命令生成对应的临时py文件(python脚本), 并将文件传输至远程服务器;
  5. 对应执行用户的家目录的.ansible/tmp/XXX/XXX.PY文件;
  6. 给文件 +x 执行权限;
  7. 执行并返回结果;
  8. 删除临时py文件,sleep 0退出;

1.4 Ansible的模块

  • Ansible:Ansible核心程序。
  • Host Inventory:记录由Ansible管理的主机信息,包括端口、密码、ip等。
  • Playbooks:“剧本”YAML格式文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能。
  • CoreModules:核心模块,主要操作是通过调用核心模块来完成管理任务。
  • CustomModules:自定义模块,完成核心模块无法完成的功能,支持多种语言。
  • ConnectionPlugins:连接插件,Ansible和Host通信使用

2. Ansible实验初始化

2.1 实验环境

Server:    manager     CentOS8     192.168.100.151
Host01:    front   	CentOS8     192.168.100.148
Host02:    storage     CentOS8     192.168.100.150
Host03:    backup  	CentOS8     192.168.100.149

2.2Ansible的安装

#ansible需要有epel源的支持,所以先安装epel-release
[root@manager ~]# yum install -y epel-release[root@manager ~]# yum install -y ansible[root@manager ~]# ansible --version
ansible [core 2.16.2]config file = /etc/ansible/ansible.cfgconfigured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']ansible python module location = /usr/lib/python3.11/site-packages/ansibleansible collection location = /root/.ansible/collections:/usr/share/ansible/collectionsexecutable location = /usr/bin/ansiblepython version = 3.11.5 (main, Oct 25 2023, 14:45:39) [GCC 8.5.0 20210514 (Red Hat 8.5.0-21)] (/usr/bin/python3.11)jinja version = 3.1.2libyaml = True######也可以用pip安装,首先安装python-pip,然后pip拉取ansible的包
yum install -y python-pip
pip install ansible

2.2.1 Ansible的程序结构

  • 配置文件目录:/etc/ansible/
  • 执行文件目录:/usr/bin/ansible
  • lib库依赖目录:/usr/lib/pythonx.xx/site-packages/ansible*
  • help文档目录:/usr/share/doc/ansible*
  • man文档目录:/usr/share/man/man1/ansible*

2.3 修改Ansible配置文件

从 Ansible 2.12 版本开始,默认的配置文件不再有具体内容。但可以通过运行一个命令来生成一个示例配置文件。这个文件会包含所有默认设置,但都是被注释掉的(即“disabled”),如同2.12版本之前一样。

#生成配置文件
ansible-config init --disabled > ansible.cfg#或者更加完整的
ansible-config init --disabled -t all > ansible.cfg

关于配置文件,这里修改两点:

  • 关闭主机密钥检查(host_key_checking)
  • 开启日志功能
#不必生成新的配置文件,就在空的配置文件内添加即可
cat >> /etc/ansible/ansible.cfg << EOF
[defaults]
host_key_checking = False
log_path = /var/log/ansible.log
EOF

2.3.1 配置文件中常见参数

inventory = /etc/ansible/hosts		  #这个参数表示资源清单inventory文件的位置
library = /usr/share/ansible		 #指向存放Ansible模块的目录,支持多个目录方式,只要用冒号(:)隔开就可以
forks = 5		                      #并发连接数,默认为5
sudo_user = root		              #设置默认执行命令的用户
remote_port = 22		              #指定连接被管节点的管理端口,默认为22端口,建议修改,能够更加安全
ask_pass = True                #是否需要密码
host_key_checking = False		     #设置是否检查SSH主机的密钥,值为True/False。关闭后第一次连接不会提示配置实例
timeout = 60		                #设置SSH连接的超时时间,单位为秒
log_path = /var/log/ansible.log		#指定一个存储ansible日志的文件(默认不记录日志)

2.4 Ansible的命令参数

# ansible 命令参数
# anisble命令语法: ansible [-i 主机文件] [-f 批次] [组名] [-m 模块名称] [-a 模块参数]
ansible详细参数:-v,-verbose            # 详细模式,如果命令执行成功,输出详细的结果 (-vv –vvv -vvvv)-i PATH, -inventory=PATH  #  指定 host 文件的路径,默认是在 /etc/ansible/hosts 
inventory  [ˈɪnvəntri]  库存-f NUM,-forks=NUM      # NUM 是指定一个整数,默认是 5 ,指定 fork 开启同步进程的个数。-m NAME,-module-name=NAME    #   指定使用的 module 名称,默认使用 command模块-a,MODULE_ARGS         #指定 module 模块的参数-k,-ask-pass           #提示输入 ssh 的密码,而不是使用基于 ssh 的密钥认证-sudo                  # 指定使用 sudo 获得 root 权限-K,-ask-sudo-pass      #提示输入 sudo 密码,与 -sudo 一起使用-u USERNAME,-user=USERNAME          # 指定移动端的执行用户-C,-check             #测试此命令执行会改变什么内容,不会真正的去执行# ansible-doc详细参数:ansible-doc -l          #列出所有的模块列表ansible-doc -s 模块名    #查看指定模块的参数  -s,   snippet  [ˈsnɪpɪt]   片断
[root@manager~]#  ansible-doc -s service#列出模块使用简介
[root@manager~]# ansible-doc -l   # 指定一个模块详细说明
[root@ansible_server~]# ansible-doc -s fetch   # 查询模块在剧本中应用方法
[root@manager~]# ansible-doc fetch      

3. Ansible Inventory 主机清单文件

Ansible Inventory指的是ansible管理的主机的列表,即主机清单
ansible默认读取/etc/ansible/hosts文件,也可以修改路径(用ansible -i指定)

3.1 设置Inventory

  • 指明主机的方式:
    • 直接指明主机ip或域名
    • 定义主机组再加入
#设置Inventory
[root@manager ~]# vim /etc/ansible/hosts
[front]
192.168.100.148[storage]
192.168.100.150[backup]
192.168.100.149
...#测试,对Inventory的所有主机ping测试
[root@manager ~]# ansible all -m ping
192.168.100.148 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/libexec/platform-python"},"changed": false,"ping": "pong"
}
192.168.100.149 | UNREACHABLE! => {"changed": false,"msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.100.149 port 22: No route to host","unreachable": true
}
...

3.2.1 子组

对于多个不同的组,创建一个聚合的组,便于一次对多组执行操作。

创建组data,包含storage和backup
ansible data -m ping

#在/etc/ansible/hosts中添加
[data:children]
storage
backup#测试(测试主机未开机)
ansible data -m ping
192.168.100.149 | UNREACHABLE! => {"changed": false,"msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.100.149 port 22: No route to host","unreachable": true
}
192.168.100.150 | UNREACHABLE! => {"changed": false,"msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.100.150 port 22: No route to host","unreachable": true
}

3.2.2 指定ansible用户、密码、端口(不推荐)

前文提到,ansible是基于ssh控制Inventory中的主机的。我之前的文章已经写过如何配置ssh密钥认证
但若没有配置,也可以在Inventory中指定ansible使用的用户、密码以及ssh的端口。
推荐设置ssh密钥登录

#/etc/ansible/hosts中的内容
[front]
192.168.100.148 ansible_user=root ansible_password=Huawei@123 ansible_port=22[storage]
192.168.100.150  ansible_user=root ansible_password=Huawei@123 ansible_port=22[backup]
192.168.100.149 ansible_user=root ansible_password=Huawei@123 ansible_port=22#测试
#若报错,为ssh: Permission denied (publickey.password)。即无密码。
192.168.100.148 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/libexec/platform-python"},"changed": false,"ping": "pong"
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/14779.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【408精华知识】页、页面、页框、页帧、内存块、物理块、物理页面还傻傻分不清?

在做题过程中&#xff0c;我们经常能看到页、页框、块等概念&#xff0c;初接触时&#xff0c;常感觉傻傻分不清&#xff0c;这篇文章将简洁地介绍它们之间的联系与区别。 这些概念之间的根本区别&#xff0c;在于是物理上的概念还是逻辑上的概念&#xff0c;也即是虚地址还是实…

汇聚荣:新手做拼多多应该注意哪些事项?

新手在拼多多开店&#xff0c;面临的是竞争激烈的市场和复杂的运营规则。要想在这个平台上脱颖而出&#xff0c;必须注意以下几个关键事项。 一、市场调研与定位 深入了解市场需求和竞争对手情况是新手开店的首要步骤。选择有潜力的细分市场&#xff0c;并针对目标消费者群体进…

华为云服务培训

一、存储类服务实践 是什么&#xff1a; 云硬盘( Elastic Volume Service )是一种为 ECS&#xff08;弹性云服务器&#xff09;、BMS&#xff08;裸金属服务器&#xff09; 等计算服务提供持久性存储的服务。 作用&#xff1a; 它通过数据冗余和缓存加速等多项技术&#xf…

卷积报错:AttributeError: ‘Conv2d‘ object has no attribute ‘total_ops‘ (已解)

AttributeError: ‘Conv2d’ object has no attribute ‘total_ops’ File "/home/...../..._encoder.py", line 34, in forwardx = self.conv(x)File "/home/...../python3.8/site-packages/torch/nn/modules/module.py", line 1511, in _wrapped_call_im…

Spring系列-03-BeanFactory和Application接口和相关实现

BeanFactory BeanFactory和它的子接口们 BeanFactory 接口的所有子接口, 如下图 BeanFactory(根容器)-掌握 BeanFactory是根容器 The root interface for accessing a Spring bean container. This is the basic client view of a bean container; further interfaces such …

windows 11上自带时间管理-番茄工作法

在 Windows 11 中&#xff0c;你可以使用 专注 功能来最大程度地减少干扰&#xff0c;帮助你保持专注。 专注的工作原理 专注时段打开后&#xff0c;将会出现以下情况&#xff1a; 专注计时器将显示在屏幕上 请勿打扰将打开 任务栏中的应用不会闪烁发出提醒 任务栏中应用的…

内网穿透原理解析

在互联网信息时代的今天&#xff0c;我们经常会听到“内网穿透”&#xff0c;却有很多人对此并不了解&#xff0c;下面小编给大家介绍一下内网穿透的工作原理。 1. 什么是内网穿透? 在了解内网穿透原理之前&#xff0c;我们先说什么是内网穿透。内网&#xff0c;就是在公司或…

SpringCloud系列(23)--手写实现负载轮询算法

前言&#xff1a;在上一篇文章中我们介绍了关于负载轮询算法的原理以及看了源代码&#xff0c;而本章节内容则是着重于我们自己手写一个负载轮询算法 1、分别编写provider-payment8001、provider-payment8002这两个子项目的PaymentController类&#xff0c;增加一个/payment/lb…

C++中引用的全面解析与实战应用

C中的引用作为一种强大的特性&#xff0c;不仅能够提升代码的效率和清晰度&#xff0c;还能在一定程度上保障数据的安全性。本文将深入探讨引用的各个方面&#xff0c;包括其定义、使用场景、类型、与指针的区别&#xff0c;并通过实例加以说明。 引用的定义与基本概念 引用可…

探究Python中的元组:不可变性与多重用途

元组是 Python 中的另一种重要数据结构&#xff0c;与列表相似&#xff0c;但具有一些关键区别。让我们来详细了解一下 Python 中的元组&#xff0c;包括基本语法、常用命令、示例代码、应用场景、注意事项和总结。 基本语法 创建元组 在 Python 中&#xff0c;元组使用圆括…

Py之llama-parse:llama-parse(高效解析和表示文件)的简介、安装和使用方法、案例应用之详细攻略

Py之llama-parse&#xff1a;llama-parse(高效解析和表示文件)的简介、安装和使用方法、案例应用之详细攻略 目录 llama-parse的简介 llama-parse的安装和使用方法 1、安装 2、使用方法 第一步&#xff0c;获取API 密钥 第二步&#xff0c;安装LlamaIndex、LlamaParse L…

AI爆文写作:经常做这四个小练习,让你解锁爆文标题的秘籍,让你的标题炸裂吸晴!

文章目录 一、无法吸引眼球的标题二、标题炸裂的秘籍练习1:洞察受众的渴望与恐惧。练习2:运用感官语言,用生动的描述和具体细节,在读者心中勾勒出一幅画面。练习3:展示变化。练习4:用意外转折激发好奇心。一、无法吸引眼球的标题 这样的标题: [如何通过阅读改变人生」「…

LeetCode 1542.找出最长的超赞子字符串:前缀异或和(位运算)

【LetMeFly】1542.找出最长的超赞子字符串&#xff1a;前缀异或和&#xff08;位运算&#xff09; 力扣题目链接&#xff1a;https://leetcode.cn/problems/find-longest-awesome-substring/ 给你一个字符串 s 。请返回 s 中最长的 超赞子字符串 的长度。 「超赞子字符串」需…

<string.h>中部分库函数的模拟实现

前言 嗨&#xff0c;我是firdawn&#xff0c;本章将简单介绍&#xff0c;<string.h>中部分库函数的模拟实现&#xff0c;如strncpy&#xff0c;strncat&#xff0c;memcpy&#xff0c;memmove。在本文片末&#xff0c;还讲简单介绍判断机器大小端的函数实现&#xff0c;…

VSCode SAP Systems配置HTTPS访问SAP

第一次访问提示&#xff0c;Self-Signed 证书 解决办法&#xff1a;https访问SAP Fiori网站&#xff0c;导出SSL证书为DER格式保存到硬盘上 双击DER文件&#xff0c;导入到系统 退出VSCode&#xff0c;再次启动 Test Connection, 提示 The system URL is using a hostname …

服务器攻防-中间件安全,weblogic(没怎么搞懂)

1.weblogic-工具 jboss 1.弱口令 直接输入admin就就去了 2.反序列化&#xff08;不是很懂java) jenkins glassfish 读密码文件 读取 就可以知道它的密码 我们就可以写脚本

使用DataGrip连接跳板机后再连接远程服务器的mysql数据库

相比配置本地数据库就是多了一步SSH/SSL配置。 添加新的mysql连接&#xff0c;选择SSH/SSL&#xff0c;勾选Use SSH tunnel&#xff1a; 点击右边的…配置跳板机连接&#xff0c;输入账号密码&#xff0c;然后保存&#xff1a; 接着配置General&#xff0c;里面填上要连接的数…

一款数字化管理平台源码:云MES系统(附架构图、流程)技术架构:springboot + vue-element-plus-admin

制造生产企业打造数字化生产管控的系统&#xff0c;从原材料、生产报工、生产过程、质检、设备、仓库等整个业务流程的管理和控制&#xff0c;合理安排生产计划、实时监控生产、优化生产工艺、降低不良产出和运营成本&#xff1b; 技术架构&#xff1a;springboot vue-elemen…

DHT11获取数据传输到PC端

1.DHT11的时序数据 a : dht 1 b &#xff1a;dht 0延时30ms c&#xff1a; dht 1 卡d点&#xff1b;while(dht1); 卡e点 while(!dht) 卡f点&#xff1a;while(dht) 卡g点&#xff1a;while(!dht) 有效数据都是高电平&#xff0c;持续时间不一样&#xff0c;50us读&#…

Go语言实现人脸检测(Go的OpenCV绑定库)

文章目录 OpenCVGithub官网安装环境变量 Go的OpenCV绑定库Github文档安装搜索视频设备ID显示视频检测人脸 OpenCV Github https://github.com/opencv/opencv/ 官网 https://opencv.org/ 安装 brew install opencv brew upgrade opencv安装目录 cd /usr/local/opt/opencv…