ansible系统概述与部署(代码片段)

lyshark lyshark     2022-12-11     669

关键词:


title: Ansible 系统概述与部署(1)
date: 2018-12-01 10:27:03
tags:

  • Ansible
    categories: Ansible
    copyright: true
    ---

Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能,ansible是基于模块工作的,本身没有批量部署的能力,真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架,在下面的章节中我你们先来熟悉一下Ansible的几个常用的安装方式,包括源码安装,Yum仓库安装,然后我们会来解析一下Ansible的配置文件,以及管理两台主机小实验,在今后的章节中我们使用Yum安装的Ansible来讲解其内容.

Ansible 系统概述

Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具.它用Python写成,类似于saltstack和Puppet但是有一个不同和优点是我们不需要在节点中安装任何客户端.它使用SSH来和节点进行通信,Ansible基于?Python paramiko?开发,分布式,无需客户端,轻量级,配置语法使用?YMAL?及?Jinja2模板语言,更强的远程命令执行操作.

IT自动化配置管理最近20年获得了迅猛的发展,特别最近几年在移动互联、云计算、大数据、互联网+等大规模应用平台的需求推动下,涌现出一批成熟的大规模自动化运维工具.维基百科里列出了二十多个,其中 Puppet、Chef和Salt,以及 CFEngine、agrant和NixOS,大家都可能耳熟能详了.不过后起之秀Ansible (www.ansible.com) 的人气更高,已经是当今最常用的管理基础架构的开源管理工具之一.

Ansible使用Python语言作为开发语言,巧妙地设计,实现了简单易用,功能强大的自动化管理工具,Ansible由Michael DeHaan发起,开发,创建,他同时也是著名的工具软件Cobbler与Func的开发者,Ansible的第一个版本发布于2012年2月,目前的下载数量超过120万人,当前在GitHub上,它是排名前十的Python项目,可以预见Ansible的发展不可限量,Ansible已经广泛应用于各种规模的企业中,包括Rackspace,Twitter,Evernote,NASA,GoPro,等知名企业.

2015年10月红帽(Red Hat)宣布收购软件开发公司 Ansible 消息称此次收购耗资逾 1亿美元,也有消息称接近 1.5亿美元.

Ansible 应用领域

Ansible的编排引擎可以出色地完成配置管理、流程控制、资源部署等多方面工作,与其他IT自动化产品相比较,Ansible为你提供一种不需要安装客户端软件、管理简便、功能强大的基础架构配置、维护工具,Ansible 基于 Python 语言实现,由 Paramiko 和 PyYAML 两个关键模块构建

Ansible独特的设计理念:

● 安装部署过程简单,容易学习
● 管理主机方便,支持多主机并行管理
● 无需再客户端部署相应软件
● 安全性高,很容易对内容审计评估
● 非ROOT账户也可以使用

Ansible 公司负责 Ansible 开源软件的维护、管理,是 Ansible 软件发展的最大贡献者 Ansible 开发团队非常高效,软件发布周期大约是 2 个月发布一个新版本.由于发布周期如此之短,轻微的 bug 通常是在下一个版本中得到修补,而不是对稳定版本发布新补丁.稍大的 bug 经评估后,如果确实需要将会发布对稳定版本的补丁,但这种情况很少出现.

Ansible 系统架构

Ansible 集合众多优秀运维工具 (Puppet、Cfengine、Chef、Func、Fabric) 的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能, Ansible 是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是 Ansible 所运行的模块,Ansible 只是提供一种框架.Ansible 的基本架构见下图,用户通过 Ansible 编排引擎操作公有云/私有云或 CMDB (配置管理数据库)中的主机.

技术图片

由上图可以看到?Ansible?由?5?个部分组成:

● Ansible (Ansible的核心组件,负责执行命令的东西)
● Modules (Ansible?自带的核心模块及自定义模块)
● Plugins (完成模块功能的补充,包括连接插件、邮件插件等)
● Playbooks (剧本,定义?Ansible?多任务配置文件,由Ansible自动执行)
● Inventory (定义?Ansible?管理主机的清单)

Ansible 采用 paramiko 协议库 (Fabric 也使用这个),通过 SSH 或者 zeroMQ 等连接主机 Ansible 在控制主机将 Ansible 模块通过 SSH 协议 (或者Kerberos、LDAP) 推送到被管节点执行,执行完之后自动删除,可以使用 SVN 等来管理自定义模块及编排.从上图可以了解到,控制主机与被管节点之间支持 ocal、SSH、ZeroMQ 三种连接方式,默认使用基于 SSH 的连接,在规模较大的情况下使用 ZeroMQ 连接方式会明显改善执行速度.

接下来,来看一下几个小实验和配置参数的解析吧.

源码安装Ansible

Ansible 的安装方式非常灵活满足各种环境部署的需求,一般可以直接用源码进行安装,也可用操作系统软件包管理工具进行安装,下面我们只介绍比较复杂的源码安装,但是我们后期的小实验会使用Yum安装的来进行讲解.

1.首先安装gcc编译器,和Python的相关依赖包.

[[email protected] ~]# yum -y install gcc zlib zlib-devel openssl openssl-devel libffi-devel

Package gcc-4.8.5-36.el7.x86_64 already installed and latest version
Package zlib-1.2.7-18.el7.x86_64 already installed and latest version
Package zlib-devel-1.2.7-18.el7.x86_64 already installed and latest version
Package 1:openssl-1.0.2k-16.el7.x86_64 already installed and latest version
Package 1:openssl-devel-1.0.2k-16.el7.x86_64 already installed and latest version
Package libffi-devel-3.0.13-18.el7.x86_64 already installed and latest version
Nothing to do

2.由于Ansible是使用Python开发的,这里我们需要编译并安装Python解释器.

[[email protected] ~]# yum install -y readline
[[email protected] ~]# wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
[[email protected] ~]# tar xvzf Python-3.7.0.tgz -C /usr/src/python3.7
[[email protected] ~]# cd /usr/src/Python-3.7.0/
[[email protected] ~]# ./configure --prefix=/usr/local/python3.7
[[email protected] ~]# make && make altinstall

3.将python头文件拷贝到标准目录,以避免编译ansible时,找不到所需的头文件.

[[email protected] ~]# cd /usr/local/include/python3.7/
[[email protected] ~]# cp -a ./* /usr/local/include/

4.接着我们备份一下旧版本的Python,并创建符号链接链接到新版本的Python上面/

[[email protected] ~]# cd /usr/bin/
[[email protected] bin]# mv python python.old
[[email protected] bin]# ln -s /usr/local/bin/python3.7 /usr/local/bin/python
[[email protected] bin]# rm -rf /usr/bin/python
[[email protected] bin]# cp /usr/local/bin/python3.7 /usr/bin/python

5.由于yum是用python开发的,这里为了避免冲突要改掉他的配置.

[[email protected] ~]# vim /usr/bin/yum

#!/usr/bin/python2.7       ←此处将python改成python2.7

[[email protected] ~]# vim /usr/libexec/urlgrabber-ext-down

#!/usr/bin/python2.7       ←此处将python改成python2.7

6.最后测试python新版本是否生效了.

[[email protected] ~]# python

Python 3.7.0 (default, Apr 17 2018, 11:03:21) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()

7.安装setuptools模块.

[[email protected] ~]# wget https://files.pythonhosted.org/packages/72/c2/c09362ab29338413ab687b47dab03bab4a792e2bbb727a1eb5e0a88e3b86/setuptools-39.0.1.zip
[[email protected] ~]# unzip setuptools-39.0.1.zip -d /usr/src/
[[email protected] ~]# cd /usr/src/setuptools-39.0.1/
[[email protected] setuptools-39.0.1]# python setup.py install

8.pycrypto模块安装.

[[email protected] ~]# wget https://pypi.python.org/packages/source/p/pycrypto/pycrypto-2.6.1.tar.gz
[[email protected] ~]# tar xvzf pycrypto-2.6.1.tar.gz -C /usr/src/
[[email protected] ~]# cd /usr/src/pycrypto-2.6.1/
[[email protected] pycrypto-2.6.1]# python setup.py install

9.PyYAML模块安装.

[[email protected] ~]# wget http://pyyaml.org/download/libyaml/yaml-0.1.7.tar.gz
[[email protected] ~]# tar xvzf yaml-0.1.7.tar.gz -C /usr/src/
[[email protected] ~]# cd /usr/src/yaml-0.1.7/
[[email protected] yaml-0.1.7]# ./configure --prefix=/usr/local
[[email protected] yaml-0.1.7]# make --jobs=`grep processor /proc/cpuinfo | wc -l`
[[email protected] yaml-0.1.7]# make install

[[email protected] ~]# wget http://pyyaml.org/download/pyyaml/PyYAML-3.12.tar.gz
[[email protected] ~]# tar xvzf PyYAML-3.12.tar.gz -C /usr/src/
[[email protected] ~]# cd /usr/src/PyYAML-3.12/
[[email protected] PyYAML-3.12]# python setup.py install

10.Jinja2模块安装

[[email protected] ~]# wget https://pypi.python.org/packages/source/M/MarkupSafe/MarkupSafe-0.9.3.tar.gz
[[email protected] ~]# tar xvzf MarkupSafe-0.9.3.tar.gz -C /usr/src/
[[email protected] ~]# cd /usr/src/MarkupSafe-0.9.3/
[[email protected] MarkupSafe-0.9.3]# python setup.py install

[[email protected] ~]# wget https://files.pythonhosted.org/packages/56/e6/332789f295cf22308386cf5bbd1f4e00ed11484299c5d7383378cf48ba47/Jinja2-2.10.tar.gz
[[email protected] ~]# tar xvzf Jinja2-2.10.tar.gz -C /usr/src/
[[email protected] ~]# cd /usr/src/Jinja2-2.10/
[[email protected] Jinja2-2.10]# python setup.py install

11.paramiko模块安装.

[[email protected] ~]# wget https://files.pythonhosted.org/packages/f9/e5/99ebb176e47f150ac115ffeda5fedb6a3dbb3c00c74a59fd84ddf12f5857/ecdsa-0.13.tar.gz
[[email protected] ~]# tar xvzf ecdsa-0.13.tar.gz -C /usr/src/
[[email protected] ~]# cd /usr/src/ecdsa-0.13/
[[email protected] ecdsa-0.13]# python setup.py install

[[email protected] ~]# https://files.pythonhosted.org/packages/29/65/83181630befb17cd1370a6abb9a87957947a43c2332216e5975353f61d64/paramiko-2.4.1.tar.gz
[[email protected] ~]# tar xvzf paramiko-2.4.1.tar.gz -C /usr/src/
[[email protected] ~]# cd /usr/src/paramiko-2.4.1/
[[email protected] paramiko-2.4.1]# python setup.py install

12.simplejson模块安装.

[[email protected] ~]# wget https://files.pythonhosted.org/packages/0d/3f/3a16847fe5c010110a8f54dd8fe7b091b4e22922def374fe1cce9c1cb7e9/simplejson-3.13.2.tar.gz
[[email protected] ~]# tar xvff simplejson-3.13.2.tar.gz -C /usr/src/
[[email protected] src]# cd /usr/src/simplejson-3.13.2/
[[email protected] simplejson-3.13.2]# python setup.py install

13.Ansible安装.

[[email protected] ~]# wget https://files.pythonhosted.org/packages/4a/3b/9d98e132074bb6a3f18fd811db2819fbde6fc8a26fad9a40b49e53cb2455/ansible-2.5.0.tar.gz
[[email protected] ~]# tar xf ansible-2.5.0.tar.gz -C /usr/src/
[[email protected] ~]# cd /usr/src/ansible-2.5.0/
[[email protected] ansible-2.5.0]# python setup.py install


Ansible管理小实验

下面的小实验,我们将采用以下的IP地址规划,请自行配置好.

[实验环境]

[状态]    [主机列表]        [python版本]

控制机 192.168.1.10        Python2.6/2.7

被控机 192.168.1.20        Python2.4
被控机 192.168.1.30        Python2.4

为了避免 Ansible 下发指令时输入目标主机密码,通过证书签名达到 SSH 无密码是一个好的方案,推荐使用 ssh-keygenssh-copy-id 来实现快速证书的生成及公钥下发.

1.在控制主机创建密钥,执行 ssh-keygen -t rsa ,有询问直接按回车键即可,将在 /root/.ssh 下生成一对密钥,其中 id_rsa 为私钥,id_rsa.pub 为公钥,代码如下:

[[email protected] ~]# 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:TbU6Vvtwf0SP/rFW3c6NTBHHwN/pADsJsIstP/4f96k [email protected]
The key s randomart image is:
+---[RSA 2048]----+
|       ..   ...o |
|        .. o .o o|
|       .  o *  ++|
|      o .o * o.++|
|     o oS = + =.=|
|      o  . . =.++|
|       o   . +o==|
|      . .   o +oO|
|       ..... Eo+.|
+----[SHA256]-----+

[[email protected] ~]#

2.下发密钥就是控制主机把公钥id_rsa.pub下发到被管节点上用户下.ssh目录,并重命名成 authorized_keys 且权限值为 400,接下来推荐常用的密钥拷贝工具 ssh-copy-id把公钥文件id_rsa.pub公钥拷贝到被管节点,命令格式如下:

[[email protected] ~]# ssh-copy-id [email protected]
[[email protected] ~]# ssh-copy-id [email protected]

3.RHEL7.0安装Ansible后发现找不到ansible.cfg,配置文件的路径,我们需要手动将它的配置文件拷贝到/etc/目录下去.

[[email protected] ~]# cd /usr/src/ansible-2.5.0/examples
[[email protected] exampless]# mkdir /etc/ansible
[[email protected] exampless]# cp -a ansible.cfg hosts /etc/ansible

4.编辑Ansible,写入被控主机IP地址,如果要写入一组IP我们可以加中括号 webserver代表的含义就是,执行下面一组IP的操作,admin 组则代表指定一个范围.

[[email protected] ~]# vim /etc/ansible/hosts
 
192.168.1.20      #写入单个IP地址
192.168.1.30

[webserver]       #指定一个组
192.168.1.20
192.168.1.30

[admin]           #指定一个范围
192.168.1.[1:100]

5.修改Ansible主配置文件,修改两处位置即可,分别是禁用每次执行命令检查ssh,和开启日志记录功能,取消两处的注释即可.

[[email protected] ~]# vim /etc/ansible/ansible.cfg

61 # uncomment this to disable SSH key host checking
62 host_key_checking = False        #禁用每次执行命令检查ssh,取消注释

100 # logging is off by default unless this path is defined
101 # if so defined, consider logrotate
102 log_path = /var/log/ansible.log  #开启日志记录功能,取消注释

6.此时Ansible控制主机就配置完毕了,我们来执行以下命令,看一下它的连通性吧,一般我们Ping一下看到pong说明成功啦.

[[email protected] ~]# ansible all -m ping

192.168.1.20 | SUCCESS =>      #说明成功
    "changed": false, 
    "ping": "pong"

192.168.1.30 | SUCCESS =>      #说明成功
    "changed": false, 
    "ping": "pong"


[[email protected] ~]# ansible webserver -m ping

192.168.1.20 | SUCCESS =>      #说明成功
    "changed": false, 
    "ping": "pong"

192.168.1.30 | SUCCESS =>      #说明成功
    "changed": false, 
    "ping": "pong"

这里测试时在控制主机与被管节点之间配置了 SSH 证书信任,如果没有用证书认证,则需要在执行 Ansible 命令时添加 -k 参数,在提示 "SSH password:"时输入 root 账号密码,实际生产环境中,大多数更倾向于使用 Linux 普通用户账户进行连接并通过 sudo 命令实现: root 权限,格式为: ansible all -m ping -u ansible -sudo

ansible自动化运维管理工具的概述与部署(代码片段)

Ansible自动化运维管理工具的概述与部署项目总体思路一、Ansible概述二、ansible环境安装部署三、ansible命令行模块1.command模块2.shell模块3.cron模块4.user模块5.group模块6.copy模块7.file模块8.hostname模块9.ping模块10.yum模块11.service/systemd模... 查看详情

01ansible简介与部署(代码片段)

Ansible简介AnsibleLogoAnsible概述Ansible是新兴的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。无需安装客户端。Ansible... 查看详情

ansible基础-安装与配置(代码片段)

一安装1.1ansible架构ansible是一个非常简单的自动化部署项目,由python编写并且开源。用于提供自动化云配置、配置文件管理、应用部署、服务编排和很多其他的IT自动化需求。ansible实现的自动化部署是多层次的,通过描述系统之... 查看详情

ansible------ansible概述,搭建,用法(代码片段)

目录一.Ansible概述二.Ansible环境安装部署三.Ansible命令行模块1.command模块2.shell模块3.cron模块4.user模块5.group模块6.copy模块一.Ansible概述Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。... 查看详情

自动化运维之ansible概述及ansible部署|(持续更新中)(代码片段)

Ansible概述由于互联网的快速发展导致产品更新换代速度逐渐加快,运维人员每天都要进行大量的维护操作,仍旧按照传统方式进行维护使得工作效率低下。这时,部署自动化运维就可以尽可能安全,高效地完成这些工作。一般... 查看详情

ansible简介与实验(代码片段)

 一、简介ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批... 查看详情

自动化运维之ansible-安装部署与基础命令篇(代码片段)

一、Ansible简介Ansible基于Python语言开发,集合了众多优秀运维工具的优点,实现了批量运行命令、部署程序、配置系统等功能。二、安装部署Ansible服务Ansible自动化运维环境由控制主机与被管理主机组成,由于Ansible是基于SSH协议... 查看详情

自动化运维之ansible的安装部署与命令模块(代码片段)

Ansible简介Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量... 查看详情

ansible概述及各模块应用(代码片段)

ansible概述及各模块应用ansible概述ansible特点ansible工作原理==ansible工具优点==ansible环境部署ansible命令模块command模块cron模块user模块group模块copy模块file模块ping模块service模块模块shell模块script模块yum模块setup模块ansible概... 查看详情

ansible概述及各模块应用(代码片段)

ansible概述及各模块应用ansible概述ansible特点ansible工作原理==ansible工具优点==ansible环境部署ansible命令模块command模块cron模块user模块group模块copy模块file模块ping模块service模块模块shell模块script模块yum模块setup模块ansible概... 查看详情

自动化运维之ansible(代码片段)

Ansible概述Ansible基于Python开发,集合了众多优秀运维工具的特点,实现了批量运行命令、部署程序、配置系统等功能。默认通过SSH协议进行远程命令执行或下发配置,无需部署任何客户端代理软件,从而使得自动化环境部署变得... 查看详情

ansible------ansible概述,搭建,常用模块介绍(代码片段)

目录一.Ansible概述二.Ansible环境安装部署三.Ansible命令行模块1.command模块2.shell模块3.cron模块4.user模块5.group模块6.copy模块7.file模块8.hostname模块9.ping模块10.yum模块11.service/systemd模块12.script模块13.setup模块一.Ansible概述Ansible是一个基于P... 查看详情

自动化运维之ansible剑客参上(代码片段)

自动化运维之AnsibleAsible概述与核心组件Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。Ansible可以... 查看详情

自动化运维工具--ansible(安装部署模块简介与操作)(代码片段)

一、Ansible概述互联网的快速发展导致产品更新换代速度加快,按照传统维护操作使得工作效率低下,自动化运维以尽可能安全高效的完成工作为目的,实现代替传统工作方式。自动化运维工具划分为两类:一是需要使用代理工... 查看详情

ansible概述及各模块应用(代码片段)

ansible概述及各模块应用ansible概述ansible特点ansible工作原理==ansible工具优点==ansible环境部署ansible命令模块command模块cron模块user模块group模块copy模块file模块ping模块service模块模块shell模块script模块yum模块setup模块ansible概... 查看详情

ansible概述(代码片段)

文章目录一、Ansible概述(1)Ansible简介(2)Ansible的特点(3)Ansible组成结构(4)Ansible和其他管理软件的对比二、部署Ansible(1)实验环境(2)实验步骤(3)AnsibleInventory文件... 查看详情

ansible概述及常用命令模块(代码片段)

Ansible概述及常用命令模块一、Ansible概述特点二、部署ansible1.使用yum安装epel源和ansible2.配置主机清单3.配置密钥对验证三、ansible常用命令行模块1.command模块2.shell模块3.cron模块4.user模块5.group模块6.copy模块7.file模块8.hostname模块9.ping... 查看详情

ansible概述及常用命令模块(代码片段)

Ansible概述及常用命令模块一、Ansible概述特点二、部署ansible1.使用yum安装epel源和ansible2.配置主机清单3.配置密钥对验证三、ansible常用命令行模块1.command模块2.shell模块3.cron模块4.user模块5.group模块6.copy模块7.file模块8.hostname模块9.ping... 查看详情