学习自动化运维实战第一天(ansible 自动化运维实战)

一、ansible 基础

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,
**实现了批量系统配置、批量程序部署、批量运行命令等功能。**无客户端。
工作原理:
在这里插入图片描述

1.1 ansible部署

通过ansible使得一台服务器可以批量控制和处理多台客户机,那么我们需要先在服务器上进行域名解析,客户机则不许要。
1 . 进行域名解析
/etc/hosts
在这里插入图片描述
2.安装ansible
在服务器上安装ansible:
语法:yum -y install ansible
在这里插入图片描述
3.检测安装情况
安装完成后我们可以检测一下安装情况

  • 列出所有文件 ----- 语法:rpm -ql ansible
    在这里插入图片描述
  • 查看配置文件 ------语法: rpm -qc ansible
    在这里插入图片描述
  • 查看ansible帮助------- 语法:ansible --help
  • 看所有模块 -----语法:ansible-doc -l

1.2 ansible控制客户机

1.定义主机清单
进入到ansible的配置文件中进行定义
/etc/ansible/hosts
在这里插入图片描述
2.接下来连接客户机进行测试
语法: ansible host2 -m ping -u root -k -o 测试连通性
在这里插入图片描述
如果不想输入密码进行连接客户机,则需要提前设置免密登录
ssh-keygen
ssh-copy-id
在这里插入图片描述

注意:一定要打开客户机的sshd 服务,否则不会连接成,服务器是通过sshd服务控制客户机!!!

1.3主机清单 在ansible配置文件里修改 /etc/ansible/hosts

1.3.1增加主机组

在定义主机清单里可以加入多个客户机,把它们放到一个组里,那么在控制时直接控制组就可以控制组下的所有服务器
前提是主机的域名解析里要对所有的客户机进行域名解析
/etc/hosts
在这里插入图片描述
/etc/ansible/hosts
在这里插入图片描述
在这里插入图片描述

1.3.2对组增加变量

如果没有给客户机设置免密登录,也没有指定登录用户,那么在配置文件里可以对这两个变量进行设置
在这里插入图片描述
在这里插入图片描述
变量还有很多,可以加很多个,这里只加2个:
在这里插入图片描述

1.3.3子分组

在这里插入图片描述

1.4点对点模式 (不同模块的应用)

1.4.1复制模块

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

1.4.2用户模块

1 .创建用户
在这里插入图片描述
2 . 修改密码
首先要生成加密密码
在这里插入图片描述
再进行修改
在这里插入图片描述
修改完后登录验证;
3 . 修改sehll
在这里插入图片描述
修改后发现无法登录。
4 . 删除用户
在这里插入图片描述

1.4.3软件模块

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

在这里插入图片描述

1.4.4文件模块

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

1.4.5收集模块

ansible 客户机 -m setup 查看客户机所有信息
在这里插入图片描述

1.4.6shell模块

在这里插入图片描述

二、YAML非标记语言

简介:
YAML 的定义是:“YAML Ain ’ t a Markup Language”,即:YAML 不是一种标记语言的递归缩写。要问 YAML 到底是不是一种标记语言呢?答案:是的。有意思的是:在 YAML 开发的早期,YAML 其实参考了许多其他语言,如 XML, SDL 及电子邮件格式等等,并最终把自己定义为:“Yet Another Markup Language”。既然明明是标记语言,为什么后来又改名换姓,非说自己不是标记语言了呢?其实名字的更换正是为了强调 YAML 的与众不同:YAML 是以数据为设计语言的重点的,而不是像 XML 以标记为重点。实事上,正是因为这样一种设计理念使得 YAML 在后来的不少应用中取代 XML,成为一种可读性高,易于表达数据序列的编程语言。

YAML 的数据组织主要依靠的是空白,缩进,分行等结构。这使得 YAML 语言很容易上手。我们就以 YAML 官方网站上给出的一个例子来看看 YAML 文件的书写(如清单 1 所示)。相信熟悉 XML 的人都会感受到 YAML 是多么的简洁明了!

示例:
通过yaml编写一个剧本,进行httpd的安装和部署
剧本要以 .yaml结尾 ,代表剧本类型,

首先创建一个文件夹,用来存放httpd里的配置文件,把配置文件里的端口进行修改,方便执行完剧本后在浏览器里进行访问,防止和其他服务冲突;

接下来开始编写剧本:
在这里插入图片描述

如图所示,如果httpd.conf里的文件再发生变化,那么执行剧本就会出错,那么我们使用handlers就可以避免这个问题,如果对应的模块文件没有发生变化,handlers不会有任何作用,一旦客户机的httpd.conf文件发生改变,handlers就会执行自己的命令,重启httpd服务,避免错误发生。

编写完剧本后我们需要查看一下剧本是否正确以及具体的内容

  • 检查语法: ansible-playbook 剧本名 --syntax-check
    在这里插入图片描述
  • 列出剧本的任务 ansible-playbook 剧本名 --list-tasks
    在这里插入图片描述
  • 剧本针对的主机 ansible-playbook 剧本名 --list-hosts
    在这里插入图片描述
    没有问题后开始执行剧本ansible-playbook 剧本名
    在这里插入图片描述
    执行完后到客户机检查验证,httpd被安装并启动。
    查看httpd该服务的端口号
    在这里插入图片描述

在这里插入图片描述

三、Role 角色扮演

roles则是在ansible中,playbooks的目录组织结构。而模块化之后,成为roles的组织结构,易读,代码可重用,层次清晰。
对谁做 对主角做 谁扮演这个主角 ,host1 / host2/ webserver …
做什么 执行剧本里的东西 ,剧本里编写具体命令

在做角色之前我们介绍一个软件 tree
tree命令,主要功能是创建文件列表,将所有文件以树的形式列出来
exp:
在这里插入图片描述
tree可以把目录以树结构显示出来,可以很直观且清楚的查看到目录下的所有文件目录所在位置。
linux下的tree就比较强大了,但一般系统并不自带这个命令,需要手动下载安装,
语法: yum -y install tree

实战目标:通过role远程部署nginx并配置

先在本机的/etc/hosts 和 /etc/ansile/hosts 里进行域名解析!!!

3.1准备目录结构

创建目录文件,写入剧本

  • mkdir roles/nginx/{files,handlers,tasks,templates,vars} -p 创建目录
  • touch roles/site.yaml roles/nginx/{handlers,tasks,vars}/main.yaml 目录里创建文件
  • echo 1234 > roles/nginx/files/index.html 在nginx默认的网页配置文件里输入1234用于安装完成后测试
  • yum install -y nginx && cp /etc/nginx/nginx.conf roles/nginx/templates/nginx.conf.j2 把本机nginx配置文件传到目标主机上

准备好目录后通过tree 查看
在这里插入图片描述

3.2编写任务

在task目录的main.yaml 文件里编写任务。即具体的要在目标的主机或者主机组里执行的任务,全部写在里边
vim ./roles/nginx/tasks/main.yaml
在这里插入图片描述

3.3准备配置文件

把即将要执行的任务中要给主机发出去的文件进行配置,那么执行完剧本后主机里的配置文件也会有一样的配置。
** vim roles/nginx/tmeplate/nginx.conf.j2**
修改两个东西
在这里插入图片描述

3.4编写变量

vim roles/nginx/vars/main.yaml
这个文件夹负责专门编辑变量。
在这里插入图片描述

3.4编写处理程序

handlers . 哪一项任务需要这项服务,在任务编写时在任务最后一行进行定义,添加notify ,写出具体的出发后的执行名称,然后相对应的在这个文件里进行编写。
在这里插入图片描述

3.5编写剧本

vim roles/site.yaml
这里时最后一步,它把前面所有编写的东西进行联合,说明了具体的主机或主机组,对主机/组 具体执行的哪些剧本。
在这里插入图片描述

== 注意编写剧本时的语法问题,空格一定要注意:- 后面要空一格,冒号后也要空一格,下面的剧本空两格;==

到这里剧本和要执行的角色,也就是要在哪些主机上执行,都准备编辑好了,那么下面开始执行。
注意要切换到剧本所在目录下, 这里是在roles里,因为在这里创建的所有文件。
实施语法:**ansible-playbook 剧本名 **
实施前可以先检查一下剧本有没有错误 。 语法:ansible-playbook 剧本名 --syntax-check
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

以上就是一个给角色编写剧本并且执行的具体案例
其中角色就是主机或主机组,也即我们想要实施剧本的对象,
而剧本就是我们提前编写好的,里面是一个完整的文件,包括执行的任务以及所有的配置文件
可以给一个主机或主机组同时执行多个剧本,只需要在编写最后的site.yaml里加入对应编写好的多个剧本即可!!!

清风徐来,吹过我的心

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值