前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >零基础带你硬核了解并上手“Ansible“!

零基础带你硬核了解并上手“Ansible“!

作者头像
大数据梦想家
发布2021-01-27 16:45:11
7660
发布2021-01-27 16:45:11
举报

前言

最近有幸接触过一个自动化运维的项目,需要掌握的技术栈中就包括近年来越来越火的一款开源运维自动化工具——Ansible,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误。因为小菌并不是运维方向的,所以在之前对Ansible了解几乎为零(主要还是因为自己菜),但这并不影响接下来,我以一个初学者的角度,为大家带来关于Ansible的入门教程。

看完本篇,你将收获:

  • 传统运维和自动运维的差异
  • 常见的运维配置自动化工具
  • Ansible的特点,架构,任务执行流程
  • Ansible的环境准备与安装配置
  • Ansible的语法
  • Ansible常用的模块及使用
在这里插入图片描述
在这里插入图片描述

IT运维管理

在正式引入Ansible之前,我们先来看看传统运维和自动运维的差异。

传统运维

传统运维带来的坑

运维工作是比较繁琐的,尤其是新系统上线的场景,一切都是从零开始。包括虚拟机的创建,主机名的修改,系统的初始化等等,在机器不多的情况下人工还能应付得过来,如果有上百台机器呢?最初也是用堆人的方法来做的。但这样的方式出错率高,而且有时还会有遗漏。只能通过相互检查的方式来验证,但这样就会花费更多的时间,相应的时间/人工成本也会上升

人工的方式因个人部署习惯千差万别,导致一些项目难以维护。

在这里插入图片描述
在这里插入图片描述

自动运维

运维自动化的演进
  • 没有专门的工具为我们做这些事情,我们可以使用脚本语言(Python)
  • 逐渐有了运维自动化的一些工具,比如 Fabric,Puppet,Chef,SaltStack,Ansible等等
  • 逐渐形成一个自动化运维平台
在这里插入图片描述
在这里插入图片描述

运维自动化的目标也很明确,就是为了要实现这几件事:

  • 某某组件坏了可以不用管继续睡觉
  • 出现异常时点击一下就可以立即恢复
  • 与监控配合,系统挂了可以自动恢复

配置自动化可以帮助企业在大量服务器存在的情况下,快速实现应用部署、软件配置等一大利器。通过配置自动化可以在如下方面有优异表现:

  1. 提高配置效率
  2. 提高配置的准确性
  3. 降低人工参与度

常见的配置自动化产品如下:

  • ansible

基于python语言。简单快捷,被管理端不需要启服务。直接使用ssh协议,需要验证所以机器多的话速度会较慢。

  • saltstack

基于python语言。相对简单,大并发能力比ansible要好, 需要维护被管理端的服务。如果服务断开,连接就会出问题。它使用的协议是zeromq。

  • puppet

基于ruby语言,成熟稳定。适合于大型架构,相对于ansible和saltstack会复杂些

有了一定的理论基础,接下来我们的Ansible就要隆重登场了

Ansible

初始Ansible

在这里插入图片描述
在这里插入图片描述

Ansible是一种由Python开发的自动化运维工具,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置批量程序部署批量运行命令等功能,是一款轻量级的配置自动化工具

Ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:

(1) 连接插件 connection plugins:负责和被管控端实现通信;

(2) host inventory:指定操作的主机,是一个配置文件里面定义管控的主机;

(3) 各种模块核心模块、 command模块、自定义模块

(4) 借助于插件完成记录日志邮件等功能;

(5) playbook:剧本执行多个任务时,可以让被管控端一次性运行多个任务;

Ansible特性

(1) no agents:不需要在被管控主机上安装任何客户端

(2) no server:无服务器端,使用时直接运行命令即可;

(3) modules in any languages:基于模块工作,可使用任意语言开发模块;

(4) yaml,not code:使用yaml语言定制剧本 playbook

(5) ssh by default:基于SSH工作

(6) strong multi-tier solution:可实现多级指挥

Ansible优点

(1) 轻量级,无需在客户端安装 agent,更新时,只需在操作机上进行一次更新即可;

(2) 批量任务执行可以写成脚本,而且不用分发到远程就可以执行;

(3) 使用python编写,维护更简单,ruby语法过于复杂;

(4) 支持sudo;

Ansible 架构

在这里插入图片描述
在这里插入图片描述

Ansible的架构,主要分为以下几部分内容:

  • ansible:核心,提供一种框架
  • Connection Plugins:连接插件,负责和被操作端实现通信,可通过多种方式与被操作端连接,例如:local、ssh、zeromq,默认使用ssh;
  • Host Inventory:主机清单,指定被操作主机;
  • Core Modules:各种模块核心模块,Ansible已自带
  • Custom Modules:自定义模块,如果核心模块无法满足需求,可通过各种编程语言(Shell,Python或GoLang等)开发模块使用。
  • Plugins:借助于插件完成记录日志、邮件等功能;
  • Playbook:剧本,当执行多个任务时,可以对服务器角色及应用部署进行编排。

实现原理:ansible通过单个模块或者playbook转换成python程序经过ssh协议,推送到各个主机上

Ansible任务执行流程

在这里插入图片描述
在这里插入图片描述

知晓了Ansible的原理介绍,我们来学习如何安装Ansible。

环境准备

  • 主机ip配置,主机名设置
代码语言:javascript
复制
hostnamectl set-hostname node01
hostnamectl set-hostname node02
hostnamectl set-hostname node03
  • 主机名解析
代码语言:javascript
复制
192.168.100.100      node01
192.168.100.110      node02
192.168.100.120      node03
  • 主机安全设置

firewalld

代码语言:javascript
复制
systemctl disable firewalld
systemctl stop firewalld

selinux

代码语言:javascript
复制
sed -ri 's/SELINUX=enforcing/SELINUX=disabled/'
/etc/selinux/config
  • 主机时间同步
代码语言:javascript
复制
# crontab -e  需安装ntpdate软件
0 */1 * * * ntpdate time1.aliyun.com
  • 主机YUM源

除自带YUM源外,需要为管理机(操作机)准备epel源

代码语言:javascript
复制
yum -y install epel-release
  • 提示

管理机(操作机)及被操作机均需开启ssh

代码语言:javascript
复制
systemctl status sshd

免密登录证书准备

代码语言:javascript
复制
# 生成密钥对
ssh-keygen
# 复制密钥对中的公钥到被操作机
ssh-copy-id node02
ssh-copy-id node03

Ansible的安装配置

ansible只需要在ansible controller节点(操作机)安装即可,其它节点可以直接通过SSH协议进行连接操作。

而安装有两种方式:

  • 使用 yum 安装(推荐)- 版本稍旧

yum install ansible

  • 使用 pip 安装(依赖pipi,gcc等)- 版本较新 pip install ansible

安装完毕,我们可以通过ansible --version来查看我们的ansible的版本

代码语言:javascript
复制
[root@node01 ansible]# ansible --version
ansible 2.6.20
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.6/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.6.6 (r266:84292, Jun 20 2019, 14:14:55) [GCC 4.4.7 20120313 (Red Hat 4.4.7-23)]

到这里,我们的ansible就安装成功啦~

配置主机清单

ansible controller在对主机进行操作时,仅认主机清单中定义的主机列表,即从主机清单中读取到主机列表时,才可进行配置。

所以接下来,我们要在管理机(被操作机)配置主机清单

  • Ansible通过一个主机清单功能来实现服务器分组
  • Ansible的默认主机清单配置文件为/etc/ansible/hosts

配置的形式大家可以参照下面的例子:

代码语言:javascript
复制
[nginx1] 组名
apache[1:10].aaa.com 表示apache1.aaa.com到apache10.aaa.com这10台机器

nginx[a:z].aaa.com 表示nginxa.aaa.com到nginxz.aaa.com共26台机器

10.1.1.[11:15] 表示10.1.1.11到10.1.1.15这5台机器

[nginx2] 组名
10.1.1.13:2222 表示10.1.1.13这台服务器,但ssh端口为2222

需要注意的是,在Ansible的主机清单中配置组名的目的是为了我们执行ansible命令时,可以通过调用组名的方式,同时操作多台服务器。

Ansible的语法

代码语言:javascript
复制
ansible <host-pattern> [-f forks] [-module_name] [-a args]


说明:
host-pattern:host inventory文件的一个组名,可以为all
-f forks:并行处理的个数,默认为5 
-m module_name:模块名,默认为command
-a args:参数

给大家举个栗子: 我在node01节点执行下面的命令,就可以把node02节点下/export/servers下的文件或目录展示出来:

代码语言:javascript
复制
[root@node01 ansible]# ansible 192.168.100.110 -m command -a 'ls /export/servers/'
192.168.100.110 | SUCCESS | rc=0 >>
apache-flume-1.8.0-bin
flink-1.7.2
hadoop-2.6.0
hadoop-2.6.0-cdh5.14.0
hbase-1.2.0-cdh5.14.0
hive-1.1.0-cdh5.14.0
jdk1.8.0_144
kafka_2.11-1.0.0
redis-3.2.8
spark
zookeeper-3.4.5-cdh5.14.0
zookeeper.out

再来点有趣的,我们都知道 Ansible 是通过一个主机清单 功能来实现服务器分组,那如果我们除了用分组的方式操作多台服务器外,能否通过正则表达式的方式来对IP进行匹配呢?

毫无疑问,是可以的。

在这里插入图片描述
在这里插入图片描述

假设我们现在的host文件中有如下配置:

在这里插入图片描述
在这里插入图片描述
  1. 表示所有的主机使用 all*
在这里插入图片描述
在这里插入图片描述

2.通配符*和逻辑或 :

在这里插入图片描述
在这里插入图片描述
  1. 逻辑非和逻辑与
在这里插入图片描述
在这里插入图片描述

Ansible模块

  • ansible是基于模块工作的。
  • ansible本身没有批量管理的能力, 真正具有批量管理的是ansible所运行的模块。
  • ansible支持的模块非常的多,目前版本3000多个。

大家是不是一看见这么多模块都开始慌了~不要慌哈,在开始之前,菌哥来谈谈关于学习模块使用的经验分享:

说起来也很简单,就是先掌握常见的模块使用,其它模块用到时查询即可,主要掌握Ansible模块应用思路即可!

说了那么多,接下来让我们来看看关于Ansible模块的使用:

查看支持模块

代码语言:javascript
复制
ansible-doc -l
支持的模块非常多,这里只截取部分
支持的模块非常多,这里只截取部分

获取模块帮助

代码语言:javascript
复制
ansible-doc ping
在这里插入图片描述
在这里插入图片描述

常用模块

  • ping 测试网络连通性

ansible all -m ping

  • command 执行命令(不能执行$HOME,>,<,|)

ansible all -m command a "uptime"

  • shell 执行命令(不能执行vim、ll别名等)

ansible all -m shell -a "cat /dev/null > /var/log/nginx/access.log"

  • yum 软件包管理

ansible all -m yum -a "name=telnet state=present"

  • service 服务管理

ansible all -m service -a "name=nginx state=restarted"

  • copy 模块 复制本地文件到远程主机

echo master > /tmp/222 ansible group1 -m copy -a 'src=/tmp/222 dest=/tmp/333

  • file 对文件或目录操作

ansible java -m file "src=/usr/java/jdk1.7 dest=/usr/java/jdk state=link owner=root group=root"

类似的模块还有非常多,这里就不一一为大家列举了,菌哥双手为大家奉上官方文档,感兴趣的朋友可以多了解一下。

官方文档地址:https://docs.ansible.com/ansible/latest/index.html

初露锋芒

ping 模块

测试网络连通性

代码语言:javascript
复制
ansible group1 -m ping
#或
ansible -m ping all

hostname模块

修改主机名

代码语言:javascript
复制
ansible 192.168.100.120 -m hostname -a 'name=agent1.alice.cn'

file模块

对文件或目录操作

创建一个目录

代码语言:javascript
复制
ansible group1 -m file -a 'path=/test state=directory'

创建一个文件

代码语言:javascript
复制
ansible group1 -m file -a 'path=/test/111 state=touch'

copy模块

文件远程拷贝,把本地文件复制到远程主机。

代码语言:javascript
复制
echo master > /tmp/222
ansible group1 -m copy -a 'src=/tmp/222 dest=/tmp/333'

command模块

执行命令模块

代码语言:javascript
复制
ansible group1 -m command -a "ls /tmp"

巨人的肩膀

1、https://docs.ansible.com/ansible/ Ansible官方网站 2、http://www.ansible.com.cn/docs/ Ansible权威指南(中文官方网站) 3、https://max.book118.com/html/2019/0906/8107016113002046.shtm Ansible自动化运维实践 4、http://yun.itheima.com/open/526.html 2小时玩转Ansible 企业级自动化运维工具 5、https://www.cnblogs.com/guxiong/p/7218717.html Ansible安装配置

彩蛋

相信看到这里的朋友,都是菌哥的真爱粉了,那不送小伙伴们点福利怎么行!关注『 猿人菌 』,后台回复“思维导图”,获取菌哥亲绘精美思维导图,货真价实,先到先得哦~

在这里插入图片描述
在这里插入图片描述

小结

本篇文章到这里就结束了,说实话,为了准备这么一篇文章,笔者足足准备了好几台。希望各位朋友能三连支持一下,我们下一篇文章将介绍Ansible更深入的内容,具体是什么,留个悬念!你知道的越多,你不知道的也越多,我是Alice,我们下一期见!

文章持续更新,可以微信搜一搜「 猿人菌 」第一时间阅读,思维导图,大数据书籍,大数据高频面试题,海量一线大厂面经…期待您的关注!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-11-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • IT运维管理
    • 传统运维
      • 传统运维带来的坑
    • 自动运维
      • 运维自动化的演进
  • Ansible
    • 初始Ansible
      • Ansible特性
        • Ansible优点
          • Ansible 架构
            • Ansible任务执行流程
              • 环境准备
                • Ansible的安装配置
                  • 配置主机清单
                    • Ansible的语法
                    • Ansible模块
                      • 查看支持模块
                        • 获取模块帮助
                          • 常用模块
                          • 初露锋芒
                            • ping 模块
                              • hostname模块
                                • file模块
                                  • copy模块
                                    • command模块
                                    • 巨人的肩膀
                                    • 彩蛋
                                    • 小结
                                    领券
                                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档