百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

DevOps学习笔记-CD篇-ansible自动化运维4

nanshan 2024-10-15 11:29 7 浏览 0 评论

目录

一、文档概述

发现前面的文章推荐和阅读量都不高,看来枯燥知识总是不容易引起共鸣。果然尝不到果实的甜美是不知道种树的意义的。不过不要紧,后面介绍到真实案例的时候,回来翻翻也是够用的。为了提高大家学习的信心,我会降低每篇文章的内容含量,省的看到一半就看不下去了..

本文档主要介绍playbook编写与使用的预备知识。

二、PLAYBOOK相关名词

playbook是个啥,上篇文章已经讲到了,现在我们看看它都包含啥

  • Tasks:任务,由模板定义的操作列表
  • Variables:变量
  • Templates:模板,即使用模板语法的文件
  • Handlers:处理器,当某条件满足时,触发执行的操作
  • Roles:角色

1. Tasks

一个合格的task通常包含hosts(用来指定任务要执行的主机或者主机群),一堆task排在一起就叫做Tasks,Play的主体部分是task列表,Tasks中的各任务按次序逐个在hosts中指定的主机上执行,即在所有主机上完成第一个任务后再开始第二个任务。

  • task包含hosts,name,module: options等参数
  • hosts指定当前任务要操作的主机对象,一般在hosts同时指定了对端服务器IP、执行用户等关键信息。多个task合并成一组Tasks时,hosts可以共用一份.
  • name,是指task的名称,每个最小粒度的task必须有一个name,由开发者自由定义
  • module:options.一般成对出现,用来声明当前任务要执行的动作.一般推荐采用ansible自带的模块加模块执行参数.

如果你觉得上面一堆东西晕头转向,那么上代码!!我们的原则是,能用代码说清楚的事情就绝对不哔哔....

---
- hosts: 192.168.11.101 //指定主机
 remote_user: root //指定在被管理的主机上执行任务的用户
 tasks: //任务列表↓
 - name: disable selinux //任务名关闭selinux
 command: '/sbin/setenforce 0' //调用command模块 执行关闭命令
 - name: start httpd //任务名 开启httpd
 service: name=httpd state=started //调用service模块 开启httpd 服务

上面这个脚本干了两个活,一是禁用selinux,二是启动apache.至于ansible模块不熟悉没关系,后面我们会逐一讲到.上述文件格式为啥这么写,请参照第三节.

2. Variables

vars是为了增加脚本普适性而存在的概念,可以大大增加ansible文件的可复用性.例如上小节提到的这个脚本只能启用httpd服务,如果要换成其他服务看起来很麻烦.我们可以小手一动,变成这样:

---
- hosts: 192.168.11.101 //指定主机
 remote_user: root //指定在被管理的主机上执行任务的用户
 vars: 
 - service: tomcat
 tasks: //任务列表↓
 - name: disable selinux //任务名关闭selinux
 command: '/sbin/setenforce 0' //调用command模块 执行关闭命令
 - name: start {{service}} //任务名 开启变量定义的服务
 service: name={{service}} state=started //调用service模块 开启 服务

也没什么嘛,不就是把要修改的地方放到前面去了么,嘿嘿,小同志,你这么想也没啥不对,但是如果变量能从数据库或者其他API动态获取的话,是不是这么干瞬间就有意义啦.具体案例我们下回分解.

3. Handlers

handlers也是一些task的列表,和一般的task并没有什么区别。只是有个类似AOP的机制,到声明的地方,可以跳转到一段指定逻辑执行,执行完毕后再返回原任务列表位置继续向下执行.且一个个handler只能被执行一次.

这个东西,在这里不做赘述,后面文章里我们用实战案例来进一步了解.

4. template

签于本文写着写着又超长了,template模块介绍的时候再详细介绍这部分

5. Roles

敲黑板、划重点。其实有了上面的元素,足够应对我们的业务逻辑了。那么为啥又引入了一个角色的概念呢。其实也是为了复用性考虑。你可以简单的认为,一个角色就是把一堆使用频度相对较高,有共性的任务列表组合而成,简化真正逻辑的编写。试想一下下面的场景。

张三,早上,上了个厕所,然后赶地铁上班

李四,早上,上了个厕所,然后出门买早餐

王五,早上,上了个厕所,打卡下班

嗯。。。。,你看上厕所也不是个简单是吧,得打开门、进去蹲下、脱(和谐)。。。等等一大堆步骤,如果上述张三李四王五每个都要写一遍简直不可理喻,干脆打包个角色 上厕所,然后再编写各自场景的个性化部分就好了。

我这么说,你是不是考虑去上个厕所?

三、PLAYBOOK编写语法

PlayBook全面采用了YAML语法, 它被用来描述一个 playbooks(我们的配置管理语言).,YAML有基本的分支写法,但是它不是一种脚本代码,可以理解为是一种和json一样的易读性强的数据格式.

1. 基本的 YAML

对于 Ansible, 每一个 YAML 文件都是从一个列表开始. 列表中的每一项都是一个键值对, 通常它们被称为一个 “哈希” 或 “字典”. 所以, 我们需要知道如何在 YAML 中编写列表和字典.

YAML基本编写方式,相比搜索一下,你就知道.本文就说点干货和要点 .先让大家知其然,如果大家有钻研精神,想知其所以然,可以留言或者自行百度..

  1. 每个YAML文件(也就是ansible每个配置文件)都必须以"---"开头(三个中划线).
  2. 列表成员缩进必须相同,必须以:"- "(一中划线一空格)开头
  3. 键值对的键和值用": "(冒号,空格)分割
  4. 值如果包含冒号,那么整个值串必须用双引号包裹
  5. {{var}} 双大括号是标记变量的方式

2. YAML样例

让我们把目前所学到的 YAML 例子组合在一起. 这些在 Ansible 中什么也干不了, 但这些格式将会给你感觉:

---
# 一位职工记录
name: Example Developer
job: Developer
skill: Elite
employed: True
foods:
 - Apple
 - Orange
 - Strawberry
 - Mango
languages:
 ruby: Elite
 python: Elite
 dotnet: Lame

四、小结

今天的知识有个大体概念后,我们就可以着手开始编写真的业务逻辑了.下篇文章,我们将直接展示几个案例的playbook编制.欢迎MARK.

相关推荐

实战派 | Java项目中玩转Redis6.0客户端缓存

铺垫首先介绍一下今天要使用到的工具Lettuce,它是一个可伸缩线程安全的redis客户端。多个线程可以共享同一个RedisConnection,利用nio框架Netty来高效地管理多个连接。放眼望向...

轻松掌握redis缓存穿透、击穿、雪崩问题解决方案(20230529版)

1、缓存穿透所谓缓存穿透就是非法传输了一个在数据库中不存在的条件,导致查询redis和数据库中都没有,并且有大量的请求进来,就会导致对数据库产生压力,解决这一问题的方法如下:1、使用空缓存解决对查询到...

Redis与本地缓存联手:多级缓存架构的奥秘

多级缓存(如Redis+本地缓存)是一种在系统架构中广泛应用的提高系统性能和响应速度的技术手段,它综合利用了不同类型缓存的优势,以下为你详细介绍:基本概念本地缓存:指的是在应用程序所在的服务器内...

腾讯云国际站:腾讯云服务器如何配置Redis缓存?

本文由【云老大】TG@yunlaoda360撰写一、安装Redis使用包管理器安装(推荐)在CentOS系统中,可以通过yum包管理器安装Redis:sudoyumupdate-...

Spring Boot3 整合 Redis 实现数据缓存,你做对了吗?

你是否在开发互联网大厂后端项目时,遇到过系统响应速度慢的问题?当高并发请求涌入,数据库压力剧增,响应时间拉长,用户体验直线下降。相信不少后端开发同行都被这个问题困扰过。其实,通过在SpringBo...

【Redis】Redis应用问题-缓存穿透缓存击穿、缓存雪崩及解决方案

在我们使用redis时,也会存在一些问题,导致请求直接打到数据库上,导致数据库挂掉。下面我们来说说这些问题及解决方案。1、缓存穿透1.1场景一个请求进来后,先去redis进行查找,redis存在,则...

Spring boot 整合Redis缓存你了解多少

在前一篇里面讲到了Redis缓存击穿、缓存穿透、缓存雪崩这三者区别,接下来我们讲解Springboot整合Redis中的一些知识点:之前遇到过,有的了四五年,甚至更长时间的后端Java开发,并且...

揭秘!Redis 缓存与数据库一致性问题的终极解决方案

在现代软件开发中,Redis作为一款高性能的缓存数据库,被广泛应用于提升系统的响应速度和吞吐量。然而,缓存与数据库之间的数据一致性问题,一直是开发者们面临的一大挑战。本文将深入探讨Redis缓存...

高并发下Spring Cache缓存穿透?我用Caffeine+Redis破局

一、什么是缓存穿透?缓存穿透是指查询一个根本不存在的数据,导致请求直接穿透缓存层到达数据库,可能压垮数据库的现象。在高并发场景下,这尤其危险。典型场景:恶意攻击:故意查询不存在的ID(如负数或超大数值...

Redis缓存三剑客:穿透、雪崩、击穿—手把手教你解决

缓存穿透菜小弟:我先问问什么是缓存穿透?我听说是缓存查不到,直接去查数据库了。表哥:没错。缓存穿透是指查询一个缓存中不存在且数据库中也不存在的数据,导致每次请求都直接访问数据库的行为。这种行为会让缓存...

Redis中缓存穿透问题与解决方法

缓存穿透问题概述在Redis作为缓存使用时,缓存穿透是常见问题。正常查询流程是先从Redis缓存获取数据,若有则直接使用;若没有则去数据库查询,查到后存入缓存。但当请求的数据在缓存和数据库中都...

Redis客户端缓存的几种实现方式

前言:Redis作为当今最流行的内存数据库和缓存系统,被广泛应用于各类应用场景。然而,即使Redis本身性能卓越,在高并发场景下,应用于Redis服务器之间的网络通信仍可能成为性能瓶颈。所以客户端缓存...

Nginx合集-常用功能指导

1)启动、重启以及停止nginx进入sbin目录之后,输入以下命令#启动nginx./nginx#指定配置文件启动nginx./nginx-c/usr/local/nginx/conf/n...

腾讯云国际站:腾讯云怎么提升服务器速度?

本文由【云老大】TG@yunlaoda360撰写升级服务器规格选择更高性能的CPU、内存和带宽,以提供更好的处理能力和网络性能。优化网络配置调整网络接口卡(NIC)驱动,优化TCP/IP参数...

雷霆一击服务器管理员教程

本文转载莱卡云游戏服务器雷霆一击管理员教程(搜索莱卡云面版可搜到)首先你需要给服务器设置管理员密码,默认是空的管理员密码在启动页面进行设置设置完成后你需要重启服务器才可生效加入游戏后,点击键盘左上角E...

取消回复欢迎 发表评论: