Ansible快速入门:技术原理与实战(txt+pdf+epub+mobi电子书下载)


发布时间:2021-04-04 03:15:46

点击下载

作者:史晶晶

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Ansible快速入门:技术原理与实战

Ansible快速入门:技术原理与实战试读:

前言

内容介绍

Ansible是对机群进行软件安装、配置和应用部署的自动化工具。自2012年Ansible出现后,以其使用简单、功能实用等特点得到了广泛关注,成为自动化运维工具中的冉冉新星。仅三年后就被红帽(Red Hat)公司收购,目前受到众多软件公司的关注、推广和使用。自动化部署无论对系统管理员还是对软件开发人员来说,都会减少重复的手工操作,提高部署效率。Ansible作为学习成本小、学习路径短的一款工具,更是值得了解和使用。

作为一本Ansible入门书籍,读者只需对Linux有最基本的了解就可以轻松读懂本书。

本书的内容共计6章,分为以下三个部分:

第一部分 Ansible基本工具的讲解(第1章~第4章)

本书首先介绍了Ansible架构,然后讲解了Ansible的主要概念,接着又介绍了一些具体使用方法,步步递进、层层深入地介绍了Ansible的相关知识。

第4章对前面3章中的知识细节进行了补充,以便读者能够深入理解Ansible的基本使用方法。

第二部分 role和衍生工具Ansible Galaxy的介绍(第5章)

role是Ansible最为推荐的重用代码的方式,并为其开发了Ansible Galaxy代码分享网站。但因其概念较为复杂,所以对其单独进行讲解。

第三部分 企业级收费软件Ansible Tower介绍(第6章)

企业级用户面临着更加复杂的应用环境和更高的安全要求,Ansible Tower就是一款解决企业级用户难题的收费软件。

代码的运行环境

建议读者安装Linux虚拟机作为Ansible的管理节点来测试本书中的代码。Ansible目前已被红帽公司收购,对Red Hat Linux系统的支持较为完善,建议读者最好选择Red Hat Linux 7或CentOS 7。

排版约定

为了使读者能快速把握到代码的重点,本书中代码的重要部分用加粗字体表示强调。

例如,下面的代码强调变量“ansible_os_family”的用法:

勘误信息

笔者对本书中所有的代码都进行了完整的测试,书中的文字也经过了反复的斟酌。尽管如此,由于时间紧迫且作者水平有限,错误和疏漏难以避免,还需要广大读者的反馈和修订,以使得本书更加完善。因此,如果您发现书中的任何错误,小到错别字,大到代码运行错误,都希望您能及时反馈。您的任何一次勘误,都会令笔者和其他读者受益,再次表示感谢。

勘误地址:

https://github.com/ansible-book/errata

或者

http://getansible.com/reference/errata

反馈勘误方法:

提问题到Github项目上:https://github.com/ansible-book/errata

发邮件给笔者:shijingjing02@163.com

致谢

感谢同组(Labs 和 Insights)的同事对本书早期版本的肯定,使我受到鼓舞,有信心编辑成册。感谢我的经理赵东在公司内部推广宣传,感谢周兆林(Jaylin)对早期代码仔细认真的测试,感谢傅炜(网名:Tekkaman Ninja)多次对文字提出大量的修改建议。

这是笔者第一次写书,在写书的过程中耗费了大量的时间和精力,若是没有家人的鼎力支持,这本书根本无法完成。尤其感谢老公为我分担了怀孕和育儿的大量调研工作,使我能够有时间投入本书的写作中。

本书的后期写作和修订正值我怀孕分娩前后,时间上难免拖拉,感谢本书的编辑安娜对我的理解和支持。

轻松注册成为博文视点社区用户(www.broadview.com.cn),扫码直达本书页面。

● 提交勘误:您对书中内容的修改意见可在 提交勘误 处提交,若被采纳,将获赠博文视点社区积分(在您购买电子书时,积分可用来抵扣相应金额)。

● 交流互动:在页面下方 读者评论 处留下您的疑问或观点,与我们和其他读者一同学习交流。

页面入口:http://www.broadview.com.cn/31502目录封面扉页版权信息前言

第1章 Ansible介绍

1.1 Ansible介绍

1.2 Ansible解决了什么运维痛点

1.3 架构

1.3.1 Ansible的架构1.3.2 Ansible Tower的架构

第2章 Ansible入门

2.1 安装Ansible

2.1.1 在管理员的电脑上安装2.1.2 被管理的远程主机

2.2 Ansible管理哪些主机

2.2.1 什么是主机目录2.2.2 主机目录配置文件

2.3 Ansible用命令管理主机

2.3.1 Ansible命令的格式2.3.2 Ansible命令的功能

2.4 Ansible用脚本管理主机

2.4.1 执行脚本Playbook的方法2.4.2 Playbook的例子2.4.3 Play和Playbook

2.5 Ansible模块

2.5.1 什么是Ansible模块2.5.2 在命令行里使用模块2.5.3 在Playbook脚本中使用模块2.5.4 Ansible模块的特点2.5.5 常用模块

第3章 Ansible进阶

3.1 Ansible的配置

3.1.1 可以配置什么3.1.2 Ansible配置文件的优先级

3.2 主机清单

3.2.1 远程主机的分组3.2.2 设置连接参数3.2.3 变量

3.3 Ansible的脚本Playbook

3.3.1 Playbook的文件格式YAML3.3.2 执行Playbook的命令3.3.3 Playbook的基本语法3.3.4 变量3.3.5 Playbook也有逻辑控制语句3.3.6 重用Playbook3.3.7 用标签,实现执行Playbook中的部分任务

3.4 更多的Ansible模块

3.4.1 模块的分类3.4.2 Extra模块的使用方法3.4.3 命令行查看模块的用法

3.5 最佳使用方法

3.5.1 写Playbook的原则3.5.2 参考别人的Playbook

第4章 Ansible Playbook杂谈

4.1 再谈Ansible变量

4.1.1 变量的作用域4.1.2 变量的优先级

4.2 使用lookup访问外部文件或数据库中的数据

4.2.1 lookup读取文件4.2.2 lookup生成随机密码4.2.3 lookup读取环境变量4.2.4 lookup读取Linux命令的执行结果4.2.5 lookup读取template变量替换后的文件4.2.6 lookup读取配置文件4.2.7 lookup读取CSV文件的指定单元4.2.8 lookup读取DNS解析的值4.2.9 更多的lookup功能

4.3 过滤器

4.3.1 过滤器使用的位置4.3.2 过滤器对普通变量的操作4.3.3 过滤器对文件路径的操作4.3.4 过滤器对字符串变量的操作4.3.5 过滤器对JSON的操作4.3.6 过滤器对数据结构的操作4.3.7 过滤器的链式/连续使用

4.4 测试变量或表达式是否符合条件

4.4.1 测试字符串4.4.2 比较版本4.4.3 测试List的包含关系4.4.4 测试文件路径4.4.5 测试任务的执行结果

4.5 认识插件

4.5.1 插件类型4.5.2 常用的插件介绍

第5章 role和Ansible Galaxy

5.1 role和Ansible Galaxy的简要介绍

5.1.1 role5.1.2 Ansible Galaxy

5.2 role的放置位置

5.2.1 当前目录的roles文件夹下5.2.2 环境变量ANSIBLE_ROLES_PATH定义的文件夹5.2.3 Ansible配置文件中roles_path定义的文件夹5.2.4 默认文件夹/etc/ansible/roles

5.3 在Playbook中如何调用role

5.3.1 调用最简单的role5.3.2 通过pre_tasks和post_tasks调整role和任务的顺序5.3.3 调用带有参数的role5.3.4 与when一起使用role

5.4 如何写role

5.4.1 role的完整定义5.4.2 默认变量和普通变量的区别5.4.3 tasks/main.yml如何使用变量、静态文件和模板

5.5 role的依赖

5.6 Ansible Galaxy网站介绍

5.6.1 从Ansible Galaxy网站上下载role5.6.2 分享你的role

5.7 演示role的创建和分享

5.7.1 改造单个的Playbook为role5.7.2 在Ansible Galaxy中分享role

第6章 Ansible Tower

6.1 为什么要用Ansible Tower

6.1.1 Ansible和Tower的用户视角架构图6.1.2 Ansible Tower的主要功能

6.2 如何使用Ansible Tower

6.2.1 安装方法6.2.2 使用方法6.2.3 总结

6.3 与第三方平台的整合

6.3.1 Ansible Tower API6.3.2 Ansible Tower提供的命令行工具

附录A

第1章 Ansible介绍

本章重点

1.1 Ansible介绍

1.2 Ansible解决了什么运维痛点

1.3 架构1.1 Ansible介绍

Ansible是一个部署一群远程主机的工具。这里“远程主机(Remote Host)”是指任何可以通过SSH登录的主机,所以它既可以是远程虚拟机或物理机,也可以是本地主机。

Ansible通过SSH协议实现管理节点与远程节点之间的通信。理论上来说,只要能通过SSH登录到远程主机来完成的操作,都可以通过Ansible实现批量自动化操作。

包括:复制文件、安装包、发起服务,等等。1.2 Ansible解决了什么运维痛点

Ansible解决了如何大批量、自动化地实现系统配置、应用部署、命令和服务操作的问题。其脚本具有灵活、可重入的特性,极大地减少了运维人员的重复劳动,提高了运维效率。1.3 架构1.3.1 Ansible的架构

Ansible管理节点和远程主机节点间通过SSH协议进行通信。所以配置Ansible的时候,只需保证从Ansible管理节点通过SSH协议能够连接到被管理的远程节点即可。注意,SSH必须配置为公钥认证登录方式,而非密码认证,第2章会讲到具体的配置方法。

1.连接方式(SSH)

在管理节点安装Ansible及所依赖的软件。由于管理节点需通过SSH连接被管理的主机来执行命令或者脚本,因此被管理的远程节点需要配置并启用SSH服务,此外无须安装其他特殊软件。管理节点只在执行脚本或命令时与远程主机连接,没有特别的同步机制,所以发生断电等异常时一般不会影响Ansible。

2.支持多种类型的主机

Ansible可以同时管理Red Hat系的Linux、Debian系的Linux以及Windows主机。Ansible的工作原理如图1.1所示。图1.1 Ansible工作原理1.3.2 Ansible Tower的架构

1.Ansible Tower的由来

Ansilbe Tower是一款针对企业用户的收费软件。

在1.3.1节的Ansible架构和第2章Ansbile的安装中会讲到,每一台被Ansible远程管理的主机,都需要配置采用公钥认证的SSH连接。密钥的配置和维护对于管理几台虚拟机和远程主机的个人用户不会有什么问题,但对于拥有大量主机和管理人员的企业用户来说,则可能有以下困扰。

◎ 维护工作量大:每增加一台主机,都需要手工配置一下SSH连接,企业级的PC主机成百上千,每个管理员都需要在自己的电脑上配置所有的SSH连接,无疑工作量巨大。

◎ 安全隐患大:在安全方面如果管理员能够拿到SSH私钥,或者复制给别人,那么对于生产环境来说,无疑是最大的安全隐患。

◎ 协同性弱:每个管理员都可能有自己的脚本库,有的脚本可能是为了解决同一个问题,但管理员之间没有一个通用的协作共享脚本的机制。

◎ 可视性差:基本一般通过Shell终端运行,对于大量主机批量配置的情况,其执行状态的表现能力有限,不利于后期对于结果的统计和分析。

Ansilbe Tower是一款针对企业用户的收费软件,功能强大,很好地解决了以上困扰。

2.Ansible Tower能做什么

Ansible Tower则是针对企业用户环境、中心化的Ansible管理节点,它向管理员提供网页接口,来运行Ansible脚本Playbook。

◎ 管理员在Ansible Tower上使用和分享主机的SSH私钥,但是不能查看和复制私钥文件。

◎ Ansible网站上的所有管理员都可以共享Playbook脚本,减少重复工作。

◎ 此外,Ansible Tower还可以收集和展现所有主机的Playbook的执行状况,以便于统计和分析主机的状态。

Ansible Tower架构图如图1.2所示。图1.2 Ansible Tower架构图第2章 Ansible入门

本章重点

2.1 安装Ansible

2.2 Ansible管理哪些主机

2.3 Ansible用命令管理主机

2.4 Ansible用脚本管理主机

2.5 Ansible模块2.1 安装Ansible

这里以Red Hat系Linux为例,如果是使用Windows或者Mac的读者,也建议你在Red Hat系的虚拟机下安装并体验Ansible。其他系统的安装方法请参考Ansible官网。2.1.1 在管理员的电脑上安装

1.安装Ansible软件

2.配置Ansible管理节点和主机的连接

其实就是配置从管理节点到远程主机之间基于密钥(无密码的方式)的SSH连接。

验证 SSH 配置:在管理节点执行下面的 SSH 命令,既不需要输入密码,也不会提醒你存储密钥,那就成功啦。2.1.2 被管理的远程主机

不需要安装特殊的包,只需配置并启动SSH服务且Python版本在2.4以上即可,Red Hat Linux一般安装方式都是默认安装的。2.2 Ansible管理哪些主机

Ansible需要知道自己可以管理的主机有哪些,以及一些连接参数,它由主机目录配置文件来管理。2.2.1 什么是主机目录

主机目录(Host Inventory,又称主机清单)是配置文件,用来告诉 Ansible 需要管理哪些主机,并且把这些主机按需分类。

例如,可以根据用途分类为数据库节点、服务节点等,也可以根据地点分类为中部机房、西部机房等。2.2.2 主机目录配置文件

默认的文件是:/etc/ansible/hosts。

可以修改为其他文件,第3章Ansible进阶中将介绍使用其他文件路径作为主机目录文件的方法。

最简单的Hosts文件示例。

带分组的Hosts文件示例。2.3 Ansible用命令管理主机

Ansible提供了一个命令行工具,在官方文档中给命令行起了一个名字叫Ad-Hoc Commands。2.3.1 Ansible命令的格式

Ansible命令的格式是:2.3.2 Ansible命令的功能

先不用深究Ansible命令的语法,介绍完模块(2.5节)后,就可以理解语法了。先从感观上,通过下面的命令体会一下Ansible命令行的功能。

1.检查Ansible安装环境

检查所有的远程主机,是否以“bruce”用户创建了Ansible管理主机可以访问的环境:

2.执行命令

在所有的远程主机上,默认以当前Bash的同名用户,在远程主机执行“echo hello”:

3.复制文件

复制文件/etc/host到远程主机(组)“Web”,位置为/tmp/hosts:

4.安装包

在远程主机(组)WebServers上安装yum包:

5.添加用户

6.下载Git仓库

7.启动服务

8.并行执行

启动10个并行执行重启。

9.查看远程主机的全部系统信息2.4 Ansible用脚本管理主机

为了避免重复地输入命令,Ansible 提供了脚本功能。Ansible 脚本的名字叫 Playbook,使用的是YAML格式,文件以yml或yaml为后缀。

注:YAML和JSON类似,是一种表示数据的文本格式,其含义是“YAML Ain’t a Markup Language”,即YAML不是一种标记语言的递归缩写。2.4.1 执行脚本Playbook的方法2.4.2 Playbook的例子

Playbook包含了几个关键字,每个关键字的含义如下。

◎ hosts:某主机的IP,或者主机组名,或者关键字all。

◎ remote_user:以某个用户身份执行。

◎ vars:变量。

◎ tasks:Playbook的核心,定义顺序执行的动作Action。每个Action调用一个Ansible模块。

❶ action语法:

❷ 常用的模块有yum、copy、template等,模块在Ansible中的作用,相当于bash脚本中的yum、copy这样的命令,2.5节会介绍。

◎ handers:Playbook的Event处理操作,有且仅有在被Action触发时才会执行。但多次触发只执行一次,并按照声明的顺序执行。

以下是一个为主机(组)Web部署Apache的deploy.yml文件,部署步骤如下:

◎ 安装Apache包。

◎ 复制配置文件httpd,并保证复制文件后,Apache服务会被重启。

◎ 复制默认的网页文件index.html。

◎ 启动Apache服务。

如果读者对YAML不熟悉,但有一定的JSON基础,则把上面的deploy.yml格式转化为JSON格式后如下所示。

提供JSON和YAML互转的在线网站为:http://www.json2yaml.com/。2.4.3 Play和Playbook

Playbook是指一个可被Ansible执行的YAML文件,其结构如下所示。

其实在一个Playbook文件中,还可以针对两组主机进行不同的操作,例如,给web(组)安装HTTP服务器,以及给lb(组)安装MySQL并放在一个文件中。

像上面例子中针对每一组主机的所有操作就组成一个Play,一般一个Playbook中只包含一个Play,所以不用太在意如何区分Playbook与Play。当在一些Ansible文档中提到Play的概念时,知道是怎么回事就可以了。2.5 Ansible模块2.5.1 什么是Ansible模块

bash无论是在命令行上执行,还是在bash脚本中,都需要调用cd、ls、copy、yum等命令。模块就是Ansible的“命令”。模块是Ansible命令行和脚本中都需要调用的。常用的Ansible 模块有yum、copy、template等。

bash在调用命令时可以跟不同的参数,每个命令的参数都是该命令自定义的。同样,Ansible中调用模块也可以跟不同的参数,每个模块的参数也都是由模块自定义的。

模块的详细用法可以查阅下面的文档,也可以通过命令“ansible-doc ”查看其用法:

http://docs.ansible.com/ansible/modules_by_category.html2.5.2 在命令行里使用模块

在命令行中:

◎ -m后面接调用模块的名字。

◎ -a后面接调用模块的参数。2.5.3 在Playbook脚本中使用模块

在Playbook脚本中,tasks中的每一个Action都是对模块的一次调用。在每个Action中:

◎ 冒号前面是模块的名字。

◎ 冒号后面是调用模块的参数。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载