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管理的主机

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FneyPgMF-1626346691047)(C:\Users\14375\Desktop\1160003-20181221114536388-823786315.jpg)]

3、Ansible无需代理

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f1v4hyqM-1626346691048)(C:\Users\14375\Desktop\20151223115116074.jpg)]

管理端支持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.



  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枯木逢秋࿐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值