前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Ansible 自动化工具安装、配置和快速入门指南

Ansible 自动化工具安装、配置和快速入门指南

作者头像
用户1880875
修改于 2021-09-09 06:46:15
修改于 2021-09-09 06:46:15
1K00
代码可运行
举报
运行总次数:0
代码可运行

市面上有很多自动化工具。我可以举几个例子,例如 Puppet、Chef、CFEngine、Foreman、Katello、Saltstock、Space Walk,它们被许多组织广泛使用。

自动化工具可以做什么?

自动化工具可以自动执行例行任务,无需人工干预,从而使 Linux 管理员的工作变得更加轻松。这些工具允许用户执行配置管理,应用程序部署和资源调配。

为什么喜欢 Ansible?

Ansible 是一种无代理的自动化工具,使用 SSH 执行所有任务,但其它工具需要在客户端节点上安装代理。

什么是 Ansible?

Ansible 是一个开源、易于使用的功能强大的 IT 自动化工具,通过 SSH 在客户端节点上执行任务。

它是用 Python 构建的,这是当今世界上最流行、最强大的编程语言之一。两端都需要使用 Python 才能执行所有模块。

它可以配置系统、部署软件和安排高级 IT 任务,例如连续部署或零停机滚动更新。你可以通过 Ansible 轻松执行任何类型的自动化任务,包括简单和复杂的任务。

在开始之前,你需要了解一些 Ansible 术语,这些术语可以帮助你更好的创建任务。

Ansible 如何工作?

Ansible 通过在客户端节点上推送称为 ansible 模块的小程序来工作,这些模块临时存储在客户端节点中,通过 JSON 协议与 Ansible 服务器进行通信。

Ansible 通过 SSH 运行这些模块,并在完成后将其删除。

模块是用 Python 或 Perl 等编写的一些脚本。

  • 控制节点(Control node):使用 Ansible 在受控节点上执行任务的主机。你可以有多个控制节点,但不能使用 Windows 系统主机当作控制节点。
  • 受控节点(Managed node):控制节点配置的主机列表。
  • 清单(Inventory):控制节点管理的一个主机列表,这些节点在 /etc/ansible/hosts 文件中配置。它包含每个节点的信息,比如 IP 地址或其主机名,还可以根据需要对这些节点进行分组。
  • 模块(Module):每个模块用于执行特定任务,目前有 3387 个模块。
  • 点对点(ad-hoc):它允许你一次性运行一个任务,它使用 /usr/bin/ansible 二进制文件。
  • 任务(Task):每个 动作(Play)都有一个任务列表。任务按顺序执行,在受控节点中一次执行一个任务。
  • 剧本(Playbook):你可以使用剧本同时执行多个任务,而使用点对点只能执行一个任务。剧本使用 YAML 编写,易于阅读。将来,我们将会写一篇有关剧本的文章,你可以用它来执行复杂的任务。

测试环境

此环境包含一个控制节点(server.2g.lab)和三个受控节点(node1.2g.labnode2.2g.labnode3.2g.lab),它们均在虚拟环境中运行,操作系统分别为:

前置条件

  • 在 Ansible 控制节点和受控节点之间启用无密码身份验证
  • 控制节点必须是 Python 2(2.7 版本) 或 Python 3(3.5 或更高版本)。
  • 受控节点必须是 Python 2(2.6 或更高版本) 或 Python 3(3.5 或更高版本)。
  • 如果在远程节点上启用了 SELinux,则在 Ansible 中使用任何与复制、文件、模板相关的功能之前,还需要在它们上安装 libselinux-python

如何在控制节点上安装 Ansible

对于 Fedora/RHEL 8/CentOS 8 系统,使用 DNF 命令 来安装 Ansible。

注意:你需要在 RHEL/CentOS 系统上启用 EPEL 仓库,因为 Ansible 软件包在发行版官方仓库中不可用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo dnf install ansible

对于 Debian/Ubuntu 系统,使用 APT-GET 命令APT 命令 来安装 Ansible。

配置下面的 PPA 以便在 Ubuntu 上安装最新稳定版本的 Ansible。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo apt update
$ sudo apt install software-properties-common
$ sudo apt-add-repository --yes --update ppa:ansible/ansible
$ sudo apt install ansible

对于 Debian 系统,配置以下源列表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ echo "deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main" | sudo tee -a /etc/apt/sources.list.d/ansible.list
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367
$ sudo apt update
$ sudo apt install ansible

对于 Arch Linux 系统,使用 Pacman 命令 来安装 Ansible:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo pacman -S ansible

对于 RHEL/CentOS 系统,使用 YUM 命令 来安装 Ansible:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo yum install ansible

对于 openSUSE 系统,使用 Zypper 命令 来安装 Ansible:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo zypper install ansible

或者,你可以使用 Python PIP 包管理工具 来安装:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
$ sudo python get-pip.py
$ sudo pip install ansible

在控制节点上检查安装的 Ansible 版本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ansible --version

ansible 2.9.2
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/daygeek/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.8/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.8.1 (default, Jan  8 2020, 23:09:20) [GCC 9.2.0]

如何在受控节点上安装 Python?

使用以下命令在受控节点上安装 python:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo yum install -y python
$ sudo dnf install -y python
$ sudo zypper install -y python
$ sudo pacman -S python
$ sudo apt install -y python

如何在 Linux 设置 SSH 密钥身份验证(无密码身份验证)

使用以下命令创建 ssh 密钥,然后将其复制到远程计算机。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ssh-keygen
$ ssh-copy-id daygeek@node1.2g.lab
$ ssh-copy-id daygeek@node2.2g.lab
$ ssh-copy-id daygeek@node3.2g.lab

具体参考这篇文章《在 Linux 上设置 SSH 密钥身份验证(无密码身份验证)》。

如何创建 Ansible 主机清单

/etc/ansible/hosts 文件中添加要管理的节点列表。如果没有该文件,则可以创建一个新文件。以下是我的测试环境的主机清单文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo vi /etc/ansible/hosts

[web]
node1.2g.lab
node2.2g.lab

[app]
node3.2g.lab

让我们看看是否可以使用以下命令查找所有主机。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ansible all --list-hosts

 hosts (3):
   node1.2g.lab
   node2.2g.lab
   node3.2g.lab

对单个组运行以下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ansible web --list-hosts

 hosts (2):
   node1.2g.lab
   node2.2g.lab

如何使用点对点命令执行任务

一旦完成主机清单验证检查后,你就可以上路了。干的漂亮!

语法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ansible [pattern] -m [module] -a "[module options]"

Details:
========
ansible: A command
pattern: Enter the entire inventory or a specific group
-m [module]: Run the given module name
-a [module options]: Specify the module arguments

使用 Ping 模块对主机清单中的所有节点执行 ping 操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ansible all -m ping

node3.2g.lab | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
node1.2g.lab | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
node2.2g.lab | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}

所有系统都返回了成功,但什么都没有改变,只返回了 pong 代表成功。

你可以使用以下命令获取可用模块的列表。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ansible-doc -l

当前有 3387 个内置模块,它们会随着 Ansible 版本的递增而增加:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ansible-doc -l | wc -l
3387

使用 command 模块对主机清单中的所有节点执行命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ansible all -m command -a "uptime"

node3.2g.lab | CHANGED | rc=0 >>
 18:05:07 up  1:21,  3 users,  load average: 0.12, 0.06, 0.01
node1.2g.lab | CHANGED | rc=0 >>
 06:35:06 up  1:21,  4 users,  load average: 0.01, 0.03, 0.05
node2.2g.lab | CHANGED | rc=0 >>
 18:05:07 up  1:25,  3 users,  load average: 0.01, 0.01, 0.00

对指定组执行 command 模块。

检查 app 组主机的内存使用情况:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ansible app -m command -a "free -m"

node3.2g.lab | CHANGED | rc=0 >>
              total        used        free      shared  buff/cache   available
Mem:           1993        1065          91           6         836         748
Swap:          1425           0        1424

要对 web 组运行 hostnamectl 命令,使用以下格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ansible web -m command -a "hostnamectl"

node1.2g.lab | CHANGED | rc=0 >>
   Static hostname: CentOS7.2daygeek.com
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 002f47b82af248f5be1d67b67e03514c
           Boot ID: dc38f9b8089d4b2d9304e526e00c6a8f
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-957.el7.x86_64
      Architecture: x86-64
node2.2g.lab | CHANGED | rc=0 >>
   Static hostname: node2.2g.lab
         Icon name: computer-vm
           Chassis: vm
        Machine ID: e39e3a27005d44d8bcbfcab201480b45
           Boot ID: 27b46a09dde546da95ace03420fe12cb
    Virtualization: oracle
  Operating System: CentOS Linux 8 (Core)
       CPE OS Name: cpe:/o:centos:centos:8
            Kernel: Linux 4.18.0-80.el8.x86_64
      Architecture: x86-64

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
LRU算法简介
LRU(Least Recently Used)算法是一种缓存淘汰算法,常用于缓存系统中,通过保留最近使用的数据而淘汰最久未使用的数据,以提高缓存的命中率。LRU算法的核心思想是基于时间局部性原理:最近访问的数据在未来会被再次访问。
孟斯特
2024/01/28
6330
LRU算法简介
网络拾遗之Http缓存
大家好,我是柒八九。在前天(周六)利用一天的时间,看了关于前端工程化的相关书籍和知识点,里面涉及到很多关于工程化的细节点和设计细节。但是其中有一点,说到关于「客户端缓存」
前端柒八九
2022/08/25
2590
网络拾遗之Http缓存
LeetCode 146. LRU缓存机制(哈希链表)
运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。
Michael阿明
2021/02/20
5170
LeetCode 146. LRU缓存机制(哈希链表)
【设计数据结构】实现一个 LRUCache
这是 LeetCode 上的 「146. LRU 缓存机制」 ,难度为 「中等」。
宫水三叶的刷题日记
2021/06/23
6850
淘汰算法-LRU
LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存
用户9778128
2022/05/26
6310
146. LRU缓存机制 Krains 2020-08-05 12:50:28 链表
要想在O(1)时间内get到已存的值,可以使用哈希表,而哈希表存储键值是没有先后顺序的,因此就不能够在O(1)的时间内删除最久未使用的元素,可以采用双向链表,链表的优点是插入删除元素快,而且维护键值的先后顺序,我们结合哈希表和双向链表的优势,用哈希表结合双向链表方式实现LRU。
Krains
2020/08/06
3180
昨天面试被问到的 缓存淘汰算法FIFO、LRU、LFU及Java实现
第一次请求时把计算好的结果存放在缓存中,下次遇到同样的请求时,把之前保存在缓存中的数据直接拿来使用。
万猫学社
2022/04/22
3300
一次倒在LRU上的经历
最近有个小伙伴跟我诉苦,说他没面到LRU,他说他很久前知道有被问过LRU的但是心想自己应该不会遇到,所以暂时就没准备。
bigsai
2021/12/08
5440
一次倒在LRU上的经历
【LeetCode】146. LRU 缓存机制
运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。 实现 LRUCache 类:
韩旭051
2021/01/07
4510
算法题就像搭乐高:手把手带你拆解 LRU 算法
LRU 算法就是一种缓存淘汰策略,原理不难,但是面试中写出没有 bug 的算法比较有技巧,需要对数据结构进行层层抽象和拆解,本文 labuladong 就给你写一手漂亮的代码。
labuladong
2021/09/23
5510
146. LRU 缓存机制
要在O(1)时间复杂度完成这两种操作,我们想到的使用HashMap来进行操作,而且参考LRUCache的特性,需要对元素进行移动或者删除,首选的是双向链表。
用户7447819
2021/07/23
2890
146. LRU 缓存机制
什么是LRU? 很多时候尤其以前内存比较值钱的时候,我们空间比较宝贵,不会很大,那么就存在了重点数据和非重点数据,我们要在内存不够的时候有限保存重点数据淘汰非重点数据;LRU也就是说我们认为最近使用过的数据应该是重点数据,很久都没用过的数据应该是非重点数据,内存满了就优先删那些很久没用过的数据。 有哪些应用场景呢? 1.手机上划显示的任务列表,都是按照最近打开顺序排列的 2.redis的lru淘汰策略 思路: 1.利用linkedhashmap实现lru,因为其本身就存在lru策略,只需要
名字是乱打的
2021/12/23
2310
146. LRU 缓存机制
实现 LRU 缓存算法
LRU 算法全称是最近最少使用算法(Least Recently Use),是一种简单的缓存策略。顾名思义,LRU 算法会选出最近最少使用的数据进行淘汰。
Se7en258
2022/06/24
9870
实现 LRU 缓存算法
十道腾讯算法真题解析!
大家好,我是捡田螺的小男孩。收集了腾讯常考的十道算法题(真题)。在金三银四,希望对大家有帮助呀。
捡田螺的小男孩
2022/04/06
8820
十道腾讯算法真题解析!
146. LRU 缓存机制
运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。 实现 LRUCache 类: LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。 void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容量达到上限时,它应该在写入新数据之
CaesarChang张旭
2021/06/29
2250
经典算法之链表篇(三)
ma布
2024/10/21
950
经典算法之链表篇(三)
图解LeetCode——146. LRU 缓存
那么针对第一个问题,我们可以采用哈希表或者数组的方式进行数据存储,因为本题的提示部分已经指出key值是在[0, 10000]区间内的,并不存在负数,所以为了提升执行速度,我们选择数组作为底层的存储结构。其中,需要注意的是,存储的value是下面要介绍的双向链表中的Node节点。
爪哇缪斯
2023/05/31
2940
图解LeetCode——146. LRU 缓存
Redies 淘汰策略的 LRU 算法你知道吗?
最近有个小伙伴跟我诉苦,说他面试的时候被问到Redis的淘汰策略,这个问题他是有准备的
阿凯
2022/01/07
4790
Redies 淘汰策略的 LRU 算法你知道吗?
实现LRU算法
计算机的缓存容量有限,如果缓存满了就要删除一些内容给新的内容腾出位置,而删除哪些内容,就有不同的策略,LRU算法是其中一种策略。
Defu Li
2020/09/08
8560
实现一个LRU真的好难呐
不知道屏幕前的朋友们,有没有和我一样,觉得LRU算法原理很容易理解,实现起来却很复杂。
虎妞先生
2023/05/01
5740
相关推荐
LRU算法简介
更多 >
LV.1
这个人很懒,什么都没有留下~
目录
  • 自动化工具可以做什么?
  • 为什么喜欢 Ansible?
  • 什么是 Ansible?
  • Ansible 如何工作?
  • 测试环境
  • 前置条件
  • 如何在控制节点上安装 Ansible
  • 如何在受控节点上安装 Python?
  • 如何在 Linux 设置 SSH 密钥身份验证(无密码身份验证)
  • 如何创建 Ansible 主机清单
  • 如何使用点对点命令执行任务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档