IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Ansible(自动化运维工具) -> 正文阅读

[系统运维]Ansible(自动化运维工具)

Ansible(自动化运维工具)

自动化运维

自动化运维是指将运维中日常的、大量的重复性工作自动化,把自己或者多人执行的工作,通过梳理分析,借助平台或工具转为自动化操作。自动化运维不单纯是一个维护过程,而且是一个管理的提升过程,是运维的更高层次,也是未来的发展趋势。

常用的自动化运维工具

  • Ansible:python,Agentless,中小型应用环境
  • Saltstack:python,一般部署agent,执行效率搞
  • Puppet:ruby,功能强大,配置复杂,适合大型环境
  • Fabric:python,agentless
  • chef:ruby,国内应用少
  • Cfengine
  • runc

(一) 1、Ansible简介

Ansible自动化运维工具,基于python开发,集合了众多的运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
Ansible是基于模块工作的,本身没有批量部署的能力,真正具有批量部署的是Ansible所运行的模块,Ansible只是提供一种框架,主要包括:

? 1、连接插件connection plugins:负责和被监控端实习通信

? 2、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机

? 3、各种模块核心模块、command模块,自定义模块

? 4、借助于插件完成记录日志邮件等功能

? 5、playbook:剧本执行多个任务时,非必须可以让节点一次性运行多个任务

2、基本架构

核心:ansible
核心模块(Core Modules):这些都是ansible自带的模块
扩展模块(Custom Modules):如果核心模块不足以完成某种功能,可以添加扩展模块
插件(Plugins):完成模块功能的补充
剧本(Playbooks):ansible的任务配置文件,将多个任务定义在剧本中,由ansible自动执行
连接插件(Connectior Plugins):ansible基于连接插件连接到各个主机上,虽然ansible是使用ssh连接到各个主机的,但是它还支持其他的连接方法,所以需要有连接插件
主机群(Host Inventory):定义ansible管理的主机

在这里插入图片描述

3、Ansible无需代理

Ansible 围绕无代理架构构建。通常而言,Ansible 通过 OpenSSH 或 WinRM 连接它所管理的主机并且运行任务,方法通常是将称为 Ansible 模块的小程序推送至这些主机。这些程序用于将系统置于需要的特定状态。在 Ansible 运行完其任务后,推送的所有模块都会被删除。
Ansible 不需要批准使用任何特殊代理,然后再部署到受管主机上。由于没有代理,也不需要额外的自定义安全基础架构,
Ansible 具有多个重要的优点:

0
1、跨平台支持:Ansible 提供Linux、Windows、UNIX和网络设备的无代理支持,适用于物理、虚拟、云和容器环境。

? 2、人类可读的自动化:Ansible Playbook采用YAML文本文件编写,易于阅读,有助于确保所有人都能理解它们的用途。

? 3、完美描述应用:可以通过 Ansible Playbook进行每种更改,并描述和记录应用环境的每一个方面。

? 4、轻松管理版本控制:Ansible Playbook和项目是纯文本。它们可以视作源代码,放在现有版本控制系统中。

? 5、支持动态清单:可以从外部来源动态更新 Ansible 管理的计算机列表,随时获取所有受管服务器的当前正确列表,不受基础架构或位置的影响。

? 6、编排可与其他系统轻松集成:能够利用环境中现有的 HP SA、Puppet、Jenkins、红帽卫星和其他系统,并且集成到 Ansible 工作流中。

4、Ansible优点

? 1、Ansible融合了总多老牌运维工具的优点,基本上pubbet和saltstack能实现的功能,ansible都可能实现

? 2、轻量级,无需在客户端安装agent,更新时,只要在操作机上进行一次更新即可

? 3、Ansible是一个轻量级的工具,Ansible不需要启动服务,仅仅只是一个工具,可以轻松实现分布式扩展

? 4、批量任务执行可以写成脚本,而且不用分发的远程就可以实现

? 5、Ansible时一致性的,高可靠性,安全性设计的轻量级自动化工具

? 6、使用python编写,维护更加简单

5、Ansible工作原理

在这里插入图片描述

管理端支持local、ssh、zeromq三种方式连接被管理端,默认使用基于ssh的连接,可以按应用类型等方式进行Host lnventory(主机群)分类,管理节点通过各类模块实现相应的操作,单个模块、单条命令的批量执行,我们可以称之为ad-hoc.管理节点可以通过playbooks实现多个task的集合实现一类功能,如web服务的安装部署,数据库服务器的批量备份等,playbooks可以简单理解为系统通过组合多条ad-hoc操作的配置文件。

6、Ansible的任务执行流程

? (1)读取配置

? (2)抓取全量机器&分组列表

? 可从多个静态文件、文件夹、脚本中读取机器,分组及其变关联量信息。

? (3)使用host-pattern过滤机器列表

? (4)根据参数确定执行模块和配置

? 从modules目录动态读取,用户可以自行开发模块。

? (5)Runner执行返回
Connection环节定义连接方式 => Action阶段机器列表(Lookup plugin Action变量/文件等资源的获取) Callback plugin各阶段的钩子调用

? (6)输出结束

? Filter plugin过滤算子,Callback plugin各阶段的钩子调用

7、Ansible命令

1、ansible

? ansible是指令核心部分,其主要用于执行ad-hoc命令,即单条命令。默认后面需要跟主机和选项部分,默认不指定模块时,使用的是command模块。

2、ansible-doc

? 该指令用于查看模块信息,常用参数有两个-l 和 -s ,具体如下:

? //列出所有已安装的模块

? # ansible-doc -l

? //查看具体某模块的用法,这里如查看command模块

? # ansible-doc -s command

3、ansible-galaxy

? ansible-galaxy 指令用于方便的从https://galaxy.ansible.com/ 站点下载第三方扩展模块,我们可以形象的理解其类似于centos下的yum、python下的pip或easy_install 。

4、ansible-lint

? ansible-lint是对playbook的语法进行检查的一个工具。用法是ansible-lintplaybook.yml 。

5、ansible-playbook

? 该指令是使用最多的指令,其通过读取playbook 文件后,执行相应的动作,这个后面会做为一个重点来讲。

6、ansible-pull

? 该指令使用需要谈到ansible的另一种模式---pull 模式,这和我们平常经常用的push模式刚好相反,其适用于以下场景:你有数量巨大的机器需要配置,即使使用非常高的线程还是要花费很多时间;你要在一个没有网络连接的机器上运行Anisble,比如在启动之后安装。这部分也会单独做一节来讲。

7、ansible-vault

? ansible-vault主要应用于配置文件中含有敏感信息,又不希望他能被人看到,vault可以帮你加密/解密这个配置文件,属高级用法。主要对于playbooks里比如涉及到配置密码或其他变量时,可以通过该指令加密,这样我们通过cat看到的会是一个密码串类的文件,编辑的时候需要输入事先设定的密码才能打开。这种playbook文件在执行时,需要加上 –ask-vault-pass参数,同样需要输入密码后才能正常执行。

(二)安装Ansible

1 控制节点

? Ansible 易于安装。 Ansible 软件只需要安装到要运行它的一个(或多个)控制节点上。由 Ansible管理的主机不需要安装 Ansible。

对控制节点的要求:

  • 控制节点应是Linux或UNIX系统。不支持将Windows用作控制节点,但Windows系统可以是受管主机。

  • 控制节点需要安装Python3(版本3.5或以上)或Python2(版本2.7或以上)。

    ? 如果操作系统是红帽8.0,Ansible 2.9可以自动使用 platform-python 软件包,该软件包支持使用Python的系统实用程序。你不需要从 AppStream安装python37或python27软件包。

    2 受管主机

    ? Ansible的一大优点是受管主机不需要安装特殊代理。Ansible控制节点使用标准的网络协议连接受管主机,从而确保系统处于指定的状态。

    ? 受管主机可能要满足一些要求,具体取决于控制节点连接它们的方式以及它们要运行的模块。

    ? Linux和UNIX受管主机需要安装有Python2(版本2.6或以上)或Python3(版本3.5或以上),这样才能运行大部分的模块。

    3 基于Windows的受管主机

    ? Ansible有许多专门为Windows系统设计的模块。这些模块列在https://docs.ansible.com/ansible/latest/modules/list_of_windows_modules.html部分中。

    ? 大部分专门为Windows受管主机设计的模块需要在受管主机上安装PowerShell 3.0或更高版本,而不是安装Python。此外,受管主机也需要配置PowerShell远程连接。Ansible还要求至少将.NET Framework 4.0或更高版本安装在Windows受管主机上。

    4 受管网络设备

    ? Ansible还可以配置受管网络设备,例如路由器和交换机。Ansible包含大量专门为此目的而设计的模块。其中包括对Cisco IOS、IOS XR和NX-OS的支持;Juniper Junos;Arsta EOS;以及基于VyOS的网络设备等。

    ? 可以使用为服务器编写playbook时使用的相同基本技术为网络设备编写Ansible Playbook。由于大多数网络设备无法运行Python,因此Ansible在控制节点上运行网络模块,而不是在受管主机上运行。特殊连接方法也用于与网络设备通信,通常使用SSH上的CLI、SSH上的XML或HTTP(S)上的API。

    5 安装Ansible

[root@localhost yum.repos.d]# ls #检查是否有epel源包
CentOS-Stream-AppStream.repo  CentOS-Stream-Debuginfo.repo  CentOS-Stream-HighAvailability.repo  CentOS-Stream-PowerTools.repo  liu.repo
CentOS-Stream-BaseOS.repo     CentOS-Stream-Extras.repo     CentOS-Stream-Media.repo             CentOS-Stream-RealTime.repo

[root@localhost yum.repos.d]# yum -y install epel-release #下载epel源包
Repository baseos is listed more than once in the configuration
Repository appstream is listed more than once in the configuration
上次元数据过期检查:1:30:41 前,执行于 2021年07月13日 星期二 02时30分05秒。
依赖关系解决。
==================================================================================
 软件包                    架构           版本               仓库            大小
==================================================================================
安装:
 epel-release              noarch         8-11.el8           extras          24 k
安装弱的依赖:
 epel-next-release         noarch         8-11.el8           extras          11 k

事务概要
==================================================================================
安装  2 软件包

总下载:35 k
安装大小:38 k
下载软件包:
(1/2): epel-next-release-8-11.el8.noarch.rpm      2.1 kB/s |  11 kB     00:05    
(2/2): epel-release-8-11.el8.noarch.rpm           4.4 kB/s |  24 kB     00:05    
[root@localhost yum.repos.d]# ls 
CentOS-Stream-AppStream.repo  CentOS-Stream-Extras.repo            CentOS-Stream-PowerTools.repo  epel-next.repo          epel.repo                  liu.repo
CentOS-Stream-BaseOS.repo     CentOS-Stream-HighAvailability.repo  CentOS-Stream-RealTime.repo    epel-next-testing.repo  epel-testing-modular.repo
CentOS-Stream-Debuginfo.repo  CentOS-Stream-Media.repo             epel-modular.repo              epel-playground.repo    epel-testing.repo

[root@localhost yum.repos.d]# yum makecache #验证yum源
Repository baseos is listed more than once in the configuration
Repository appstream is listed more than once in the configuration
CentOS Stream 8 - AppStream                       4.4 kB/s | 4.4 kB     00:00    
CentOS Stream 8 - BaseOS                          543  B/s | 3.9 kB     00:07    
CentOS Stream 8 - Extras                          497  B/s | 3.0 kB     00:06    
Extra Packages for Enterprise Linux Modular 8 - x 6.5 kB/s | 663 kB     01:42    
Extra Packages for Enterprise Linux 8 - Next - x8  13 kB/s | 1.1 MB     01:28    
Extra Packages for Enterprise Linux 8 - x86_64    645 kB/s |  10 MB     00:16    
元数据缓存已建立。

[root@localhost yum.repos.d]# yum -y install ansible #安装ansible
[root@localhost yum.repos.d]# ansible --version #查看版本号
ansible 2.9.23
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.6/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.6.8 (default, Dec  3 2020, 18:11:24) [GCC 8.4.1 20200928 (Red Hat 8.4.1-1)]

[root@localhost yum.repos.d]# ansible -m setup localhost|grep ansible_python_version
        "ansible_python_version": "3.6.8",   
        # 通过使用setup模块验证localhost上的ansible_python_version

(三)构建Ansible清单

定义清单

? 清单定义Ansible将要管理的一批主机,这些主机也可以分配到组中,以进行集中管理,组可以包含子组,主机也可以是多个组成员,清单还可以设置应用到它所定义的主机和组的变量

? 定义主机清单的两种方式:

? 静态主机清单:通过文本文件定义

? 动他主机清单:使用外部信息提供程序通过脚本或其它程序来生成

清单作用

? 定义Ansible管理的一批主机名单,通过执行Ansible模块,在调用过程中直接对清单中的主机进行批量管理。

使用静态清单指定受管主机

? 静态清单文件是指Ansible目标受管主机的文本文件,可以使用多种不同的格式编写文件,包括INI样式和YAML

? 通过主机组,可以更加有效的对一系列系统运行Ansible,每一部分的开头以中括号括起来的主机名称,其后面为改组中每一受管主机的主机名或IP地址,每行一个。

默认清单位置

? 默认位置:/etc/ansible/hos

? 使用规则:对于默认清单我们一般不适用,为了方便管理,管理者会在自己的文件夹目录中设置自己的清单目录

? 清单读取顺序:当前目录下的清单>该用户下的清单>全局用户的清单

语法

? [ceshi]
? 192.168.220.98
? log ansible_ssh_host=192.168.220.116 ansible_ssh_port=10056 ansible_ssh_user=wwwad

名词解释:

? [ceshi] 这是主机组名

? log:192.168.220.116的别名

? ansible_ssh_port=10056:ansible远程控制的端口

? ansible_ssh_user=wwwad:远程控制的用户名

基本定义:每行一个主机名或者IP地址,批量格式
green.example.com
blue.example.com
192.168.100.1
192.168.100.10
组定义:基本组定义
[webservers]
ip/servername

? 查看目录清单

列出清单中所有受管主机:ansible all --list-hosts
[root@localhost ansible]# ansible all --list-hosts
  hosts (1):
    192.168.240.40
列出不属于某个组的主机:ansible ungrouped --list-hosts
[root@localhost ansible]# ansible ungrouped --list-hosts
  hosts (1):
    192.168.240.41
列出不属于组的主机:ansible awebservers --list-hosts
[root@localhost ansible]# ansible awebservers --list-host
  hosts (2):
    192.168.240.40
    192.168.240.44
列出指定清单所有主机:ansible all -i inventory --list-hosts
[root@localhost ansible]# ansible all -i cctv --list-hosts
  hosts (1):
    192.168.240.40

Ansible连接受管主机

[root@localhost ansible]# ansible all -m ping
192.168.240.40 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}

生成密钥和传输密钥

[root@localhost ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Z3PyT7XhH6MOS/tzpyTmDjm90H2Q6nfsy08YRzuwTgk root@localhost.localdomain
The key's randomart image is:
+---[RSA 3072]----+
|                 |
|                 |
|           E .  .|
|            . +o.|
|        S = .+++o|
|         o Ooo.*+|
|          =oB.=*o|
|          .B+B++B|
|           +B==*B|
+----[SHA256]-----+
[root@localhost ~]# ssh-copy-id root@192.168.240.40
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.240.40's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@192.168.240.40'"
and check to make sure that only the key(s) you wanted were added.

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-07-14 23:19:00  更:2021-07-14 23:20:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 19:13:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码