第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-hosts
  hosts(4):
  	server2
	server3
	server4
	server5
[1duan@server ~]$

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

[lduan2server ~]$ ansible db2 --list-hosts
	hosts (2):
		server6
		server7

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

[lduan2server ~]$ ansible db3 --list-hosts	
	hosts (6):
		server2
		server3
		server4
		server5
		server6
		server7

共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。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

v3-admin-vite 整合pont

需求 目前后端的Admin模板使用的是v3-admin-vite,需要整合pont接口,方便前后端统一一体化开发 安装PONT 按照官方的文档,将pont engine安装好,然后在项目根目录执行pont start。注意生成代码路径要修改一下,因为v3-a…

AI新工具(20240322) 免费试用Gemini Pro 1.5;先进的AI软件工程师Devika;人形机器人Apptronik给你打果汁

✨ 1: Gemini Pro 1.5 免费试用Gemini Pro 1.5 Gemini 1.5 Pro是Gemini系列模型的最新版本,是一种计算高效的多模态混合专家(MoE)模型。它能够从数百万个上下文Token中提取和推理细粒度信息,包括多个长文档和数小时的视频、音频…

Excel数字乱码怎么回事 Excel数字乱码怎么调回来

在日常工作中,Excel是我们最常使用的数据处理软件之一,它强大的功能使得数据处理变得既简单又高效。然而,用户在使用Excel时偶尔会遇到数字显示为乱码的问题,这不仅影响了数据的阅读,也大大降低了工作效率。那么&#…

Docker-Image

Docker Docker 镜像是什么为什么需要镜像镜像命令总览docker imagesdocker tagdocker pulldocker pushdocker rmidocker savedocker loaddocker image inspectdocker historydocker importdocker image prunedocker build Docker 镜像是什么 Docker image 本质上是一个 read-on…

一文全面了解 wxWidgets 程序国际化(i18n)处理

尽管应用程序的国际化(简称i18n)远不止是将文本消息翻译成另一种语言的消息——日期、时间和货币格式也需要更改,一些语言是从左到右书写,而另一些是从右到左书写,字符编码可能不同,以及许多其他可能需要更…

一文带你弄懂JVM与JAVA体系结构

文章目录 1.JVM 与 Java 体系结构1.1. 前言1.2. 一些参考书目1.3. Java 及 JVM 简介1.4. Java 发展的重大事件1.5. 虚拟机与 Java 虚拟机1.6. JVM 的整体结构1.7. Java 代码执行流程1.8. JVM 的架构模型1.9. JVM 的生命周期 1.JVM 与 Java 体系结构 1.1. 前言 作为 Java 工程…

NLP 笔记:Latent Dirichlet Allocation (介绍篇)

1 问题介绍 假设我们有一堆新闻,每个新闻都有≥1个主题 我们现在只知道新闻的内容,我们希望一个算法,帮我们把这些新闻分类成主题人类可以根据每个每个文章里面的单词判断主题,那计算机怎么做呢? ——>LDA(Latent D…

大小端是什么?怎么判断?(百度笔试题)

目录 一、前言二、什么是大小端&#xff1f;三、为什么有大小端之分呢&#xff1f;四、判断机器是大端还是小端--百度笔试题 一、前言 先看一段代码&#xff1a; #include<stdio.h> int main() {int n 0x11223344;return 0; }二、什么是大小端&#xff1f; 其实超过⼀…

【JavaSE】抽象类和接口

目录 前言 1. 抽象类 1.1 认识抽象类 1.2 抽象类的特征 1.3 抽象类的作用 2. 接口 2.1 接口的概念 2.2 接口的语法 2.3 接口的使用 2.4 接口的特性 2.5 接口的好处 2.6 接口之间的继承 结语 前言 今天我们来讲Java中的抽象类和接口&#xff0c;它们在面向对象中发…

前端应用开发实验:条件渲染和循环渲染

目录 实验目的相关知识点实验内容图片的隐藏和显示代码实现效果 电影票房排序代码实现效果 代办事项记录代码实现效果 实验目的 (1)熟练掌握v-on 指令的用法&#xff0c;学会使用v-on 指令监听DOM元素的事件&#xff0c;并通过该事件触发调用事件处理程序。 (2)掌握v-on指令修…

大学理科用什么软件搜题?推荐5个搜题软件和学习工具 #其他#知识分享#经验分享

大学生的学习生活离不开一些实用的工具&#xff0c;它们能够帮助我们更高效地学习和管理时间。 1.千鸟搜题 这是一个公众号 这是一个老公众号了&#xff0c;我身边的很多朋友都在用&#xff0c;支持超新星、学习强国、知到、智慧树和各类专业网课题目。 下方附上一些测试的试…

Axure案例分享—折叠面板(附下载地址)

今天和大家分享的Axure案例是折叠面板 折叠面板是移动端APP中常见的组件之一&#xff0c;有时候也称之为手风琴。咱们先看下Axure画出的折叠面板原型效果&#xff0c;然后再对该组件进行详细讲解。 一、功能介绍 折叠或展开多个面板内容&#xff0c;默认为展开一项内容&…

【JS】闭包的漏洞

下面这段代码可以实现&#xff1a;通过立即执行函数o返回对象中的get方法&#xff0c;通过参数key得到fn函数内部对象obj中的值。 var fn function () {var obj {a: 1,b: 2}return {get: function (key) {return obj[key]}} }() console.log(fn.get(b)); // 2这是一个典型的…

小红书扫码登录分析与python实现

文章目录 1. 写在前面2. 接口分析3. 代码实现 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python…

基于ssm电子竞技管理平台的设计与实现论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本电子竞技管理平台就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

MySQL、Oracle的时间类型字段自动更新:insert插入、update更新时,自动更新时间戳。设置自增主键id,oracle创建自增id序列和触发器

1. MySQL 支持设置自增id的字段类型&#xff1a;int、bigint、double等数值类型&#xff0c;一般用int、bigint支持设置自动更新时间的字段类型&#xff1a;datetime、timestamp下面sql中的now()函数可以用current_timestamp()替代 1.1. 不指定秒精度 drop table if exists …

135. 分发糖果(力扣LeetCode)

文章目录 135. 分发糖果题目描述贪心算法代码如下 总结 135. 分发糖果 题目描述 n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求&#xff0c;给这些孩子分发糖果&#xff1a; 每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩…

Leetcode - 周赛389

目录 一&#xff0c;3083. 字符串及其反转中是否存在同一子字符串 二&#xff0c;3084. 统计以给定字符开头和结尾的子字符串总数 三&#xff0c;3085. 成为 K 特殊字符串需要删除的最少字符数 四&#xff0c;3086. 拾起 K 个 1 需要的最少行动次数 一&#xff0c;3083. 字符…

Java的三大特性之一——继承

前言 http://t.csdnimg.cn/uibg3 在上一篇中我们已经讲解过封装&#xff0c;这里就主要讲解继承与多态 继承 1.为什么需要继承 Java中使用类对现实世界中实体来进行描述&#xff0c;类经过实例化之后的产物对象&#xff0c;则可以用来表示现实中的实体&#xff0c;但是现实…

centos7安装jdk详细步骤(yum安装与手动安装)

centos7安装jdk详细步骤&#xff08;yum安装与手动安装&#xff09; 一、使用yum安装1. 准备工作2. 检查系统是否自带jdk3. 安装jdk 二、手动安装jdk1. 下载上传jdk2. 安装jdk3. 配置环境变量 一、使用yum安装 1. 准备工作 如果你的机器可以联网可以使用此方法 ping www.baidu…