第28章 ansible的使用

第28章 ansible的使用

本章主要介绍在 RHEL8 中如何安装 ansible 及 ansible的基本使用。
◆ ansible 是如何工作的
◆ 在RHEL8 中安装ansible
◆ 编写 ansible.cfg 和清单文件
◆ ansible 的基本用法

文章目录

  • 第28章 ansible的使用
    • 28.1 安装ansible
    • 28.2 编写ansible.cfg和清单文件
    • 28.3 ansible的基本用法
    • 作业

如果管理的服务器很多, 如几十台甚至几百台,那么就需要一个自动化管理工具了,ansible就是这样的一种自动化管理工具。
​ ansible 是通过ssh 连接到被管理主机,然后执行相关操作的,如图28-1 所示。

在这里插入图片描述

ansible 主机通过ssh 连接到被管理主机时,需要提前设置密钥登录,使得从 ansible 主 机可以无密码登录到被管理主机。

本实验的拓扑图如图28-2所示。

在这里插入图片描述

这里server 是 ansible 主机,以lduan用户登录。server2和 server3 是被管理主机,在这两 台主机上创建lduan用户并配置好 sudo, 使得这两台主机上的Iduan用户通过sudo -i 可 以 无 密码切换到 root, 下面开始配置。

28.1 安装ansible

先 使 用 root 用户登录 server,在 其 上 配 置 epel 源,命令如下。

[root@server ~]# yum install -y https://mirrors.aliyun.com/epel/epel- release-latest-8.noarch.rpm
[root@server ~]# sed -i 's|^#baseurl=https://download.fedoraproject.org/publbaseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
[root@server ~]# sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*
[root@server ~]#

在 server 上安装 ansible, 命令如下。

[root@server  ~]# yum install ansible -y
Updating Subscription Management repositories.
Unable to read consumer identity...输出...
[root@server ~]#

如果安装有问题,可以到 htps://www.thce.cc/3940.html 下载ansible 的离线包。

查看 ansible 的版本,命令如下。

[root@eserver ~]# ansible --version
ansible 2.9.27
config file  = /etc/ansible/ansible.cfg
...输出...
[root@server ~]#

这里安装的ansible 的版本是2.9.27,同时也显示 ansible的默认配置是/etc/ansible/ansible.cfg。 还要确保 ansible 主机能够解析所有的被管理机器,这里通过配置/etc/hosts 来实现,/etc/hosts 的内容如下。

[root@server ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1       localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.26.101 server.rhce.cc  server
192.168.26.102 server2.rhce.cc server2
192.168.26.103 server3.rhce.cc server3 
[root@server ~]#

在 server2 和 server3 两台机器上确认已经创建好了lduan用户,如果没有请自行创建,然后配置好 sudo, 命令如下。

[rooteserver2 ~]# cat /etc/sudoers.d/lduan
lduan ALL=(root) NOPASSWD:ALL
[root@server2 ~]#[root@server3 ~]#cat /etc/sudoers.d/lduan
lduan ALL=(root) NOPASSWD:ALL
[root@server3 ~]#

这样在这两台机器上,lduan 用户通过sudo -i可以无密码切换到root用户。

使 用lduan 用户登求server, 配置好ssh 秘钥登录,使得lduan 用户可以无密码登录到server2 和 server3, 命令如下。

[lduan@server ~]$ ssh server2
Activate    the    web    console     with:systemctl    enable    --now     cockpit.socket
...输出...
[lduan@server2 ~]$ exit
注销
Connection to server2  closed.
[lduan@server  ~]$ ssh server3
Activate the web console with:systemctl enable  -now  cockpit.socket ...输出...
[lduan@server3 ~]$ exit
注销
Connection to server3 closed.
[lduan@server ~]$

28.2 编写ansible.cfg和清单文件

执行 ansible 或 ansible-playbook 命令时,优先使用当前目录中 ansible.cfg 的配置。如果当前目录中没有,则使用默认的/etc/ansible.cfg 中的配置。

下面的操作都是 server上的 lduan用户操作的,先在家目录下创建ansible.cfg,内容如下。

[1duan@server ~]$ cat ansible.cfg
[defaults]
inventory = ./hosts[privilege_escalation]
become=True
become_method=sudo
become_user=root

这里在 [defaults] 字段下只添加了一句inventory =./hosts,表示把当前目录下名称为 hosts的文件当作清单文件(什么是清单文件马上就要讲到)。

在 [privilege_escalation] 字段下定义了如何提升权限,因为是使用lduan 用户登录到被管理主机的,所以需要提升权限。这个字段下写了3条,分别如下。

(1)become=True: 登录到被管理主机时要切换到其他用户。

(2)become_method=sudo: 以 sudo的方式切换。

(3)become_user=root: 切换到 root 用户。

这三句的意思是,当用ssh 登录到被管理主机时,以sudo的方式切换到 root, 这也是为什么一开始要在被管理主机上配置好 sudo 的原因。

所有的被管理机器都要写入清单文件中。在实验环境中有两台被管理主机,那么分别写在hosts 中,内容如下。

[lduan@server ~]$ cat hosts
server2
server3
[lduan@server ~]$

这里一行一台主机,我们在使用 ansible或 ansible-playbook 命令时,指定的主机名必须是这个名称才行。要确保能解析 server2 和 server3, 写成相应的IP 也可以。

如果环境中被管理的主机很多,把主机一台台地写进去太冗繁,所以可以改成如下写法。

[lduan@server ~]$ cat hosts
server2
server3
server[10:15]

这里加了一行 server[10:15], 表示 server10到 server15, 这样在清单文件中就写了8台主机(需要注意的是,在我们的练习环境中 server10 到 server15不存在)。

如果在执行 ansible 命令时只是想在部分主机上执行,那么在清单文件中可以对主机进行 分组。定义主机组时,组名写在中括号“[]”中,在[]下面写的主机名都属于这个组,直到定义下一个组的位置为止。修改清单文件的内容如下。

[lduan@server ~]$ cat hosts
server2
server3
server[10:15][db1]
server[2:5][db2]
server6
gerver7

这里定义了两个主机组db1和 db2,db1组中包括的主机有server2到server5,db2组中包括的主机有server6和server7。

如果想定义一个主机组,这个组中包括 db1和 db2 两个主机组的主机,可以用children 关键字,修改 hosts 的内容如下。

[lduaneserver ~]s cat hosts
server2
server3
server[10:15][db1]
server[2:5][db2]
server6
server7[db3:children]
db1
db2

这里定义了一个主机组 db3, 但是后面加了“:children”,则这个主机组下面的 db1 和 db2 就 不再表示主机了,而是表示主机组。所以, db3 这个主机组中所包括的主机是 server2 到 server5及server6 和 server7这6台主机。

下面查看每个主机组中有多少主机。首先查看主机组 db1 中的主机,命令如下。

[lduan@server ~]$ ansible db1 --list-hostshosts(4):server2server3server4server5
[1duan@server ~]$

共4台主机。查看主机组 db2 中的主机,命令如下。

[lduan2server ~]$ ansible db2 --list-hostshosts (2):server6server7

共2台主机。查看主机组 db3中的主机,命令如下。

[lduan2server ~]$ ansible db3 --list-hosts	hosts (6):server2server3server4server5server6server7

共6台主机,与分析的是一样的。还有一个内置主机组叫作 all,表示所有主机。

了解了清单文件的写法之后,最终把清单文件写成如下内容。

[lduaneserver ~]$ cat hosts
server2
server3
[db]
server2
server3
[lduan@server ~]$

这里就包括了一个主机组 db, 里面含有 server2 和 server3。

28.3 ansible的基本用法

ansible 的基本用法如下。

ansible 机器名 -m 模块x -a "模块的参数"

这里的机器名必须出现在清单文件中,整体的意思是在指定的机器上执行模块x 。例如,在 server2 上执行 hostname 命令,命令如下。

[lduan@server ~]$ ansible server2 -m shell -a "hostname"
server2 | CHANGED | rc=0 >>
server2.rhce.cc
[lduan@server ~]$

shell 模块用于执行操作系统命令,执行的命令就作为shell 模块的参数,这里在-a 中写 要执行的系统命令。所以,上面的命令就是在 server2上执行 hostname 命令,显示的结果是seryer2.rhce.cc.

要完成不同的任务就需要调用不同的模块来实现,系统中存在的所有ansible 模块可以通过 ansible-doc -1来查看。

不同的模块有不同的参数,模块的参数及使用方法可以通过“ansible-doc 模块名”来查看。

我们将在第29章中讲解常见的 ansible 模块。

作业

  1. 在 lduan 家目录下编写ansible.cfg, 满足如下要求。

(1) 使用文件/home/lduan/hosts作为清单文件。
(2) 当lduan 用户登录到被管理主机时,能自动通过 sudo 切换到 root 用户。

  1. 编写清单文件/home/lduan/hosts, 要求:定义一个名称为db 的主机组,里面包含2台
    主机 server2 和 server3。

  2. 在 db 主机组中的主机上执行一条系统命令 whoami。

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

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

相关文章

Arrays.binarySearch 详解

Arrays.binarySearch 详解 Arrays类的binarySearch()方法,可以使用二分搜索法来搜索指定的数组,以获得指定对象。该方法返回要搜索元素的索引值。务必注意:数组必须经过排序才可以使用此方法,否则返回下标显示不准。binarySearch…

HDFS集群环境配置

环境如下三台服务器: 192.168.32.101 node1192.168.32.102 node2192.168.32.103 node3 一、Hadoop安装包下载,点此官网下载 二、Hadoop HDFS的角色包含: NameNode,主节点管理者DataNode,从节点工作者SecondaryNameN…

掌握Go语言:Go语言结构体进阶,探索高级特性与实用技巧(23)

Go语言中的结构体(Struct)除了基本的定义和使用外,还有一些高级用法,可以让我们更灵活地使用结构体。下面详细解释一些高级用法: 结构体嵌套 结构体可以嵌套在其他结构体中,形成更复杂的数据结构。这种嵌…

Linux 中使用ISO文件 作为yum源

Linux 中使用ISO文件 作为yum源 在Linux中,可以将ISO文件挂载为本地YUM源。以下是如何操作的步骤和示例代码: 挂载ISO文件到某个目录(例如/mnt/iso): mkdir /mnt/cdrom mount -o loop /path/to/your.iso /mnt/cdrom…

【科普向】什么是数据湖架构

数据湖架构是一种用于存储和管理大规模数据的设计模式。它的核心思想是将各种类型和格式的数据以原始形式存储在一个集中的存储系统中,而不需要预先定义数据结构或模式。以下是我对数据湖架构的理解和相关经验: 1. 构建数据湖:构建数据湖需要…

React Native: could not connect to development server

问题: 运行模拟器错误:无法连接到开发服务器 原因分析: 1、确认模拟器连接状态,是连接成功的 查看进程的端口占用,也没问题 lsof -i tcp:8081 kill pid2、检查包服务器是否运行正常 连接真机进行调试发现真机是正常…

基于springboot+vue+Mysql的“智慧食堂”设计与实现

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

Python 如何优雅编写多进程读取文件代码

文章目录 1. 背景2. multiprocessing库介绍2.1 创建进程2.2 进程池2.3 进程间通信2.4 进程同步 3. 多进程读取文件代码 1. 背景 在读取文件时,希望能够利用 Python 的多进程并行读取多个文件。有时,我们是基于类去编写代码的,那么对于类的方…

Basic RNN

文章目录 回顾RNNRNN CellRNNCell的使用RNN的使用 RNN例子使用RNN Cell实现使用RNN实现 嵌入层 Embedding独热向量的缺点Embedding LSTMGRU(门控循环单元)练习 回顾 DNN(全连接):和CNN相比,拥有巨大的参数量,CNN权重共…

游泳耳机哪个牌子好?强烈推荐这4大高性能款式!

在如今的科技时代,游泳耳机已经成为了许多游泳爱好者和运动员的必备装备。一款好的游泳耳机不仅可以让你在水中享受到美妙的音乐,还可以为你提供更好的训练体验。 (下图是我测试过的一部分游泳耳机:) 但在市场上众多的…

基于FPGA实现的UDP协议栈设计_汇总

基于FPGA实现的千兆以太网UDP协议栈设计(汇总篇) 1. MAC设计 2. IP层设计 3. ARP层设计 4. UDP层设计 5. ICMP层设计 6. 仲裁器设计 8. RGMII接口设计 9. 跨时钟域设计

公募基金公开市场数据基础分析实例

公募基金公开市场数据基础分析 公募基金公开市场数据基础分析示例代码1.1 公开市场数据表结构 字段 字段类型 含义 SecurityID SYMBOL 基金代码 FullName STRING 基金全称 Name STRING 基金简称 Management SYMBOL 基金公司 Type SYMBOL 基金类型 Custodian SYMBOL 托管人 Issu…

AI大模型在医疗领域的应用案例:自然语言处理与医疗文本分析

随着人工智能技术的快速发展,AI大模型在自然语言处理、图像识别、语音识别等领域的应用越来越广泛。在医疗领域,AI大模型的应用正在深刻改变着医疗实践,为患者和医生带来前所未有的便利。近期AI医疗的概念也比较火热,本文将聚焦于…

编程题:相同数字的积木游戏(Java)

题目描述 小华和小薇一起通过玩积木游戏学习数学。 他们有很多积木,每个积木块上都有一个数字,积木块上的数字可能相同。 小华随机拿一些积木挨着排成一排,请小薇找到这排积木中数字相同目所处位置最远的2块积木块,计算他们的…

css的border详解

CSS的border属性是一个简写属性,用于设置以下四个边框属性: border-width:定义边框的宽度。可以使用具体的像素值,或者使用预定义的关键字如thin、medium和thick。border-width不支持百分比值。默认情况下,边框的宽度是…

在线文本列表差集计算器

具体请前往:在线文本差集计算工具

system Verilog:clocking中定义信号为input和output的区别

在SystemVerilog中,clocking块用于定义时钟块,这通常用于描述时钟边缘和同步的输入/输出行为,特别是在测试平台和硬件接口描述中。 在下述两个代码示例中,主要区别在于a被定义为一个input还是output。 当a被定义为input时&#x…

云计算 3月22号 (mysql的主从复制)

一、MySQL-Replication(主从复制) 1.1、MySQL Replication 主从复制(也称 AB 复制)允许将来自一个MySQL数据库服务器(主服务器)的数据复制到一个或多个MySQL数据库服务器(从服务器)…

优化选址问题 | 基于禁忌搜索算法求解基站选址问题含Matlab源码

目录 问题代码问题 禁忌搜索算法(Tabu Search)是一种局部搜索算法的扩展,它通过引入一个禁忌列表来避免陷入局部最优解,并允许在一定程度上接受较差的解来跳出局部最优。在基站选址问题中,我们可以使用禁忌搜索算法来寻找满足覆盖要求且基站数量最少的选址方案。 以下是…

Allegro许可管理技巧

在数字化时代,软件许可管理对于企业的运营至关重要。然而,许多企业在实施软件管理过程中会遇到各种问题。Allegro许可管理作为一款高效、合规的管理工具,能够帮助企业解决常见的许可管理问题。本文将深入探讨Allegro许可管理中的实用技巧&…