在Ubuntu 18.04上安装和配置Ansible的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

简介

配置管理系统旨在简化对大量服务器的控制,适用于管理员和运维团队。它们允许您从一个中央位置以自动化的方式控制许多不同的系统。

虽然对于 Linux 系统有许多流行的配置管理工具,比如 Chef 和 Puppet,但这些工具通常比许多人想要或需要的要复杂。Ansible 是这些选项的一个很好的替代方案,因为它提供了一个简单的架构,不需要在节点上安装特殊软件,使用 SSH 执行自动化任务和使用 YAML 文件定义配置细节。

在本指南中,我们将讨论如何在 Ubuntu 18.04 服务器上安装 Ansible,并介绍如何使用这个软件的一些基础知识。

Ansible 是如何工作的?

Ansible 通过配置客户机(称为受控节点)来工作,这些客户机从安装和配置了 Ansible 组件的计算机(称为Ansible 控制节点)中进行控制。

它通过普通的 SSH 通道与远程系统通信,获取信息,发出命令和复制文件。由于这一点,Ansible 系统不需要在客户计算机上安装任何额外的软件。

这是 Ansible 简化服务器管理的一种方式。任何暴露了 SSH 端口的服务器都可以被纳入 Ansible 的配置范围,无论它在生命周期的哪个阶段。这意味着您可以通过 SSH 管理的任何计算机,也可以通过 Ansible 进行管理。

Ansible 采用模块化方法,使您能够扩展主系统的功能以处理特定场景。模块可以用任何语言编写,并以标准 JSON 进行通信。

配置文件主要采用 YAML 数据序列化格式编写,因为它具有表达性强和与流行标记语言类似的特点。Ansible 可以通过命令行工具或其配置脚本(称为 Playbooks)与主机进行交互。

先决条件

要遵循本教程,您需要:

  • 一个 Ansible 控制节点:Ansible 控制节点是我们将用于通过 SSH 连接到和控制 Ansible 主机的计算机。您的 Ansible 控制节点可以是您的本地计算机或专用于运行 Ansible 的服务器,但本指南假定您的控制节点是一个 Ubuntu 18.04 系统。确保控制节点具有:

    • 具有 sudo 特权的非 root 用户。要设置这一点,您可以按照我们的 Ubuntu 18.04 初始服务器设置指南的步骤 2 和 3进行操作。但是,请注意,如果您将远程服务器用作 Ansible 控制节点,则应遵循本指南的每一步。这样做将在服务器上配置一个带有 ufw 防火墙并启用对非 root 用户配置的外部访问,这两者都将有助于保持远程服务器的安全性。
    • 与该用户关联的 SSH 密钥对。要设置这一点,您可以按照我们的 Ubuntu 18.04 设置 SSH 密钥的步骤 1进行操作。
  • 一个或多个 Ansible 主机:Ansible 主机是您的 Ansible 控制节点配置为自动化的任何计算机。本指南假定您的 Ansible 主机是远程 Ubuntu 18.04 服务器。确保每个 Ansible 主机都具有:

    • Ansible 控制节点的 SSH 公钥添加到系统用户的 authorized_keys。此用户可以是root或具有 sudo 特权的常规用户。要设置这一点,您可以按照我们的 Ubuntu 18.04 设置 SSH 密钥的步骤 2进行操作。

步骤 1 — 安装 Ansible

要开始使用 Ansible 管理服务器基础设施,您需要在将作为 Ansible 控制节点的计算机上安装 Ansible 软件。

从您的控制节点上运行以下命令,将官方项目的 PPA(个人软件包存档)包含在系统的源列表中:

sudo apt-add-repository ppa:ansible/ansible

在提示时按 ENTER 接受 PPA 添加。

接下来,刷新系统的软件包索引,以便它了解新包含的 PPA 中可用的软件包:

sudo apt update

完成此更新后,您可以使用以下命令安装 Ansible 软件:

sudo apt install ansible

您的 Ansible 控制节点现在具有管理主机所需的所有软件。接下来,我们将介绍如何将您的主机添加到控制节点的清单文件中,以便它可以控制它们。

步骤 2 — 设置清单文件

清单文件包含有关您将使用 Ansible 管理的主机的信息。您可以在清单文件中包含从一个到数百台服务器,并且主机可以组织成组和子组。清单文件通常还用于设置仅对特定主机或组有效的变量,以便在 Playbooks 和模板中使用。一些变量还可以影响 Playbook 的运行方式,比如我们稍后将看到的 ansible_python_interpreter 变量。

要编辑默认的 Ansible 清单内容,请在您的 Ansible 控制节点上使用您选择的文本编辑器打开 /etc/ansible/hosts 文件:

sudo nano /etc/ansible/hosts

Ansible 安装提供的默认清单文件包含了一些示例,您可以将其用作设置清单的参考。以下示例定义了一个名为 [servers] 的组,其中包含三台不同的服务器,每台服务器都有一个自定义别名:server1server2server3。请确保用您的 Ansible 主机的 IP 地址替换下面的 IP 地址。

[servers]
server1 ansible_host=203.0.113.111
server2 ansible_host=203.0.113.112
server3 ansible_host=203.0.113.113[all:vars]
ansible_python_interpreter=/usr/bin/python3

all:vars 子组设置了对此清单中所有主机有效的 ansible_python_interpreter 主机参数。此参数确保远程服务器使用 /usr/bin/python3 Python 3 可执行文件,而不是最近的 Ubuntu 版本上不存在的 /usr/bin/python(Python 2.7)。

完成后,按 CTRL+X 然后 YENTER 保存并关闭文件。

每当您想要检查清单时,可以运行:

ansible-inventory --list -y

您将看到类似于此输出,但其中包含您在清单文件中定义的自己的服务器基础设施:

all:children:servers:hosts:server1:ansible_host: 203.0.113.111ansible_python_interpreter: /usr/bin/python3server2:ansible_host: 203.0.113.112ansible_python_interpreter: /usr/bin/python3server3:ansible_host: 203.0.113.113ansible_python_interpreter: /usr/bin/python3ungrouped: {}

现在您已经配置了清单文件,您已经具备了测试与 Ansible 主机的连接的一切所需。

步骤 3 — 测试连接

在设置包含服务器的清单文件之后,是时候检查 Ansible 是否能够连接到这些服务器并通过 SSH 运行命令了。

在本指南中,我们将使用 Ubuntu root 账户,因为这通常是新创建的服务器上默认可用的唯一帐户。如果您的 Ansible 主机已经创建了一个常规的 sudo 用户,建议您改用该帐户。

您可以使用 -u 参数来指定远程系统用户。如果未提供,Ansible 将尝试以控制节点上的当前系统用户身份进行连接。

从本地计算机或 Ansible 控制节点运行:

ansible all -m ping -u root

此命令将使用 Ansible 内置的 ping 模块在默认清单中的所有节点上运行连接性测试,以 root 身份进行连接。ping 模块将测试:

  • 主机是否可访问;
  • 您是否具有有效的 SSH 凭据;
  • 主机是否能够使用 Python 运行 Ansible 模块。

您应该会得到类似于以下的输出:


server1 | SUCCESS => {"changed": false, "ping": "pong"
}
server2 | SUCCESS => {"changed": false, "ping": "pong"
}
server3 | SUCCESS => {"changed": false, "ping": "pong"
}

如果这是您首次通过 SSH 连接到这些服务器,您将被要求确认您通过 Ansible 连接的主机的真实性。在提示时,输入 yes 然后按 ENTER 确认。

一旦您从主机收到 "pong" 回复,这意味着您已准备好在该服务器上运行 Ansible 命令和 playbook。

步骤 4 — 运行临时命令(可选)

在确认您的 Ansible 控制节点能够与您的主机通信后,您可以开始在服务器上运行临时命令和 playbook。

您可以在清单文件中指定的服务器上使用 Ansible 运行任何您通常通过 SSH 在远程服务器上执行的命令。例如,您可以使用以下命令在所有服务器上检查磁盘使用情况:

ansible all -a "df -h" -u root
server1 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
udev            3.9G     0  3.9G   0% /dev
tmpfs           798M  624K  798M   1% /run
/dev/vda1       155G  2.3G  153G   2% /
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/vda15      105M  3.6M  101M   4% /boot/efi
tmpfs           798M     0  798M   0% /run/user/0server2 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
udev            2.0G     0  2.0G   0% /dev
tmpfs           395M  608K  394M   1% /run
/dev/vda1        78G  2.2G   76G   3% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/vda15      105M  3.6M  101M   4% /boot/efi
tmpfs           395M     0  395M   0% /run/user/0...

上面突出显示的 df -h 命令可以替换为您想要的任何命令。

您还可以通过临时命令执行 Ansible 模块,类似于我们之前使用 ping 模块测试连接的方式。例如,这是如何在清单中的所有服务器上使用 apt 模块安装 vim 的最新版本:

ansible all -m apt -a "name=vim state=latest" -u root

在运行 Ansible 命令时,您还可以针对单个主机、组和子组进行操作。例如,这是您如何检查 servers 组中每个主机的 uptime

ansible servers -a "uptime" -u root

我们可以通过用冒号分隔它们来指定多个主机:

ansible server1:server2 -m ping -u root

有关如何使用 Ansible 的更多信息,包括如何执行 playbook 来自动设置服务器,您可以查看我们的 Ansible 参考指南。

结论

在本指南中,您已经安装了 Ansible 并设置了一个清单文件,以便从 Ansible 控制节点执行临时命令。

一旦您确认能够从中央 Ansible 控制器机器连接和控制您的基础架构,您就可以在这些主机上执行任何命令或剧本。对于新服务器,初始服务器设置社区剧本是一个很好的起点。您还可以通过我们的指南《配置管理 101:编写 Ansible 剧本》学习如何编写自己的剧本。

有关如何使用 Ansible 的更多信息,请查看我们的 Ansible 速查表指南。

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

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

相关文章

Matplotlib中文显示解决方案:字体渲染机制与font.sans-serif设置

在Matplotlib中,设置font.sans-serif参数为中文字体如SimHei,可以使图表支持中文显示的原因在于Matplotlib的字体渲染机制。以下是详细解释: 1. **字体支持**: Matplotlib默认使用的字体可能不支持中文字符。大多数西方字体只包含…

Golang - 90天从新手到大师

开篇 最近有很多小伙伴都在寻找go语言完整学习资料,我整理了一些Golang方面的知识,方便大家学习。内容从最基础的入门到项目设计,希望帮助更多想了解和学习Go语言的伙伴。 因为是持续创作,所以也会持续更新。有些章节目录还没有…

mysql高并发环境解决方案有那些?

1、硬件和基础设施优化 1、使用高性能的服务器硬件,如更快的CPU、更大的内存和高速的存储设备。 2、确保网络带宽和延迟不会对数据库性能产生负面影响。 3、使用负载均衡器将请求分发到多个MySQL服务器上,以实现水平扩展。 2、数据库架构优化 1、读…

免费APP分发平台:小猪APP分发如何解决开发者的痛点

你是否曾为自己开发的APP找不到合适的分发平台而烦恼?你是否因为高昂的分发费用而望而却步?放心吧,你并不是一个人。很多开发者都面临同样的问题。但别担心,小猪APP分发来了,它可以帮你解决这些问题。 小猪app封装www…

面试题--MongoDB

MongoDb MongoDB 是什么? mongodb 是属于文档型的非关系型数据库,是开源、高性能、高可用、可扩展的 数据逻辑层次关系:文档>集合>数据库 在关系型数据库中每一行的数据对应 mongodb 里是一个文档。mongodb 的文档 是以 BSON&…

条件断点在找call中的应用

以TLBB为例,在2024.6.24附近左右的时间段,游戏窗口切换时就会有两个左右的call,在x64dbg下断点之后切换回游戏窗口,很难分辨出哪个是我们需要的动作引起的call,因此在send函数处下条件断点:$breakpointcoun…

FFMPEG 流媒体推流收流基本命令

FFmpeg可用来进行音视频的编解码、转码、剪辑、合成等操作。在流媒体领域,FFmpeg也是一个非常重要的工具,可以用来进行RTSP推流、HLS推流、RTMP推流等操作。 FFmpeg推流,以RTSP推流示例: RTSP推流是指将本地的音视频流通过RTSP协…

数据库课程知识点总结

数据库概述 数据库基本特点:数据结构化,数据独立性,数据冗余小,易扩充,统一管理和控制,永久存储,有组织,可共享 三级模式 模式:一个数据库只有一个模式,是对…

大屏可视化

<!DOCTYPE html> <!-- 这个font-size:20px UI给的字体大小--> <html lang"en" style"font-size: 20px;"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width…

Java中的流处理框架:Kafka Streams与Flink

Java中的流处理框架&#xff1a;Kafka Streams与Flink 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨Java中两个强大的流处理框架&#xff…

在线可调试IDE

replit: replit官网

Github 2024-06-26 C开源项目日报 Top10

根据Github Trendings的统计,今日(2024-06-26统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量C项目10Python项目2jq:轻量灵活的命令行JSON处理器 创建周期:4207 天开发语言:C协议类型:OtherStar数量:27698 个Fork数量:1538 次关注人…

秋招Java后端开发冲刺——关系型数据库篇(Mysql)

本文介绍关系型数据库及其代表Mysql数据库&#xff0c;并介常见面试题目。 一、数据库概述 1. 数据库&#xff08;Database, DB&#xff09;&#xff1a;是长期储存在计算机内的、有组织的、可共享的数据集合。 2. 数据库管理系统&#xff08;Database Management System, D…

服务器数据恢复—异常断电导致RAID6阵列中磁盘出现坏扇区的数据恢复案例

服务器存储数据恢复环境&#xff1a; 一台存储中有一组由12块SAS硬盘组建的RAID6磁盘阵列&#xff0c;划分为一个卷&#xff0c;分配给几台Vmware ESXI主机做共享存储。该卷中存放了大量Windows虚拟机&#xff0c;这些虚拟机系统盘是统一大小&#xff0c;数据盘大小不确定&…

【Linux】静态库、动态库

动静态库里面包含的是源文件通过汇编阶段生成的后缀为.o的可重定位目标文件。我们在使用C语言&#xff0c;包含一个stdio.h头文件就可以使用scanf方法&#xff0c;其实都是系统调用了相应的头文件和库&#xff0c;库里面有开发者已经写好各种方法。也就是说我们在使用C语言时&a…

在MySQL中,定义字段为TINYINT(1)、TINYINT(2) 和 INT(2)的区别

在MySQL中&#xff0c;定义字段为 TINYINT(1)、TINYINT(2) 和 INT(2) 的区别&#xff1a; 1. TINYINT(1) 和 TINYINT(2) 范围&#xff1a; TINYINT 是一个 1 字节&#xff08;8 位&#xff09;的整数类型。它的取值范围是 -128 到 127&#xff08;有符号&#xff09;或者 0 到…

RabbitMQ实践——Stream队列的使用方法

大纲 什么是Stream队列创建Stream发布消息消费从第一条消息开始读取从最后一条消息开始读取从某个时间戳开始读取从某个偏移量开始读取 样例长度控制长度控制时间控制服务端筛选消息发布方设定过滤值消费方设置服务端过滤&#xff0c;且要二次过滤 工程代码参考资料 在 《Rabb…

Lua网站开发之文件表单上传

这个代码示例演示如何上传文件或图片&#xff0c;获取上传信息及保存文件到本地。 local fw require("fastweb") local request require("fastweb.request") local response require("fastweb.response") local cjson require("cjson&q…

生成式人工智能发展现状和发展趋势

ChatGPT 的出现标志着人工智能发展的新拐点。 它背后的大语言模型技术,能够理解和生成语言,并学习上下文含义和表述意图,这将对工作模式、商业形态乃至社会产生颠覆性影响。 生成式人工智能的发展历程 可以分为三个阶段: 机器学习阶段: 20世纪50年代,机器学习开始兴起,…

wps的domain转为shp矢量

wps的namelist制作、python出图和转矢量 简介 wps&#xff08;WRF Preprocessing System&#xff09;是中尺度数值天气预报系统WRF(Weather Research and Forecasting)的预处理系统。 wps的安装地址在GitHub上&#xff1a;https://github.com/wrf-model/WPS 下载完成后&…