自动化运维 2

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
云数据库 Tair(兼容Redis),内存型 2GB
简介: 自动化运维

3.4自动化作业任务的实现——Ansible

Playbook

playbookansible实现自动化任务的二重要组成部分,采用YAML语言定义。playbook主要通过YAML

义,将多个单一的模块功能串联起来,形成完整的自动化批处理能力

3.4.1Playbook示例

下面使用playbook安装Nginx服务器的示例

-name:demo
hosts:all
gather_facts;false
tasks:
-name:Install /Update nginx server
yum:
-pkg:nginx
state:laste
-name: Config nginx server
dest: /etc/nginx/con.d/
-name: start nginx service
-service:
name: nginx
enable: yes
state:started

3.4.2常用的playbook结构

playbook可以由四大部分任意结构组成

目标定义块:(target section)简要执行playbook的被管理节点组及信息

变量定义块:(variable sectionplaybook运行是需要使用的变量

任务定义块:(task section)将要在被管理节点上执行的任务列表

触发器定义块:(handler sectiontask执行完成后需要调用的任务

1.目标定义模块target section

target section 主要用于存放playbook所属任务的目标及其相关的信息

2.任务定义模块task section

3.触发器定义模块handler section

4.变量定义模块variable section

notifymetalisten

3.4.3变量的使用

ansible使用变量来管理不同系统之间的差异,也就是说不同的节点即使变量名相同,获得的结果也不同,

1.有效的变量名

ansible的变量名只能包含字母,数字,下划线,且变量名不能以数字开头。ansible中下划线开头的变量名

和其他变量完全是相同的,不要把别的编程语言中下划线的变量为私有变量是不能ansible中变量的概念混为

一谈。

2.定义变量

playbook中定义变量

---
- hosts: web
gather_facts:false('fact')
vars:
http_port:80
ssh_port:60002
vars_files:
- ./vars/etxernal_vars.yml (把一些信息放在这个文件中;避免账号信息泄露)
tasks:
......

3.在命令行中定义

在命令行下可以使用--extra-vars-e。使用ansible命令传递变量时,可接受json字符串或key=value键值对

key=value键值对:
ansible-playbook release.yml --extra-vars "version=1.23.45 other_variable=foo"
JSON字符串格式:
ansible-playbook 文件名.yml -e
'{"version":"1.23.45"," other_varible":"foo"}'

4.引用变量

可以使用{{variable_name}}的方式实现对变量的引用

{{ result_stdout }}

5.特殊的系统变量——fact

与远程系统信息相关的变量在ansible中统称为fact

效率低收集时间长

6.变量调节的先后顺序

场景编号越大,被覆盖的优先级就越小,为了节省篇幅就不再重复

3.4.4条件语句

条件判断:when

when: {{ansible_os_family}} == "Centos"

3.4.5循环控制

ansible playbook中可使用多种循环控制的方法

1.常见的方法

- name: add serveral users
user: name={{ itme }} state=present groups=wheel
with_item:
- testuser1
- testuser2

2.hash表做循环变量

---
- name: add serveral users
user: item.name state=present groups={{ item.groups }}
with_items:
- { name:'testuser1',groups:'wheel'}
- { name:'testuser2',groups:'root'}

3.把变量名作为变量循环

-` hosts: all
tasks:
- file: dest=/etc/fooapp state=directory
- copy: src={{ item }} dest=/etc/fooapp/ owner=root mode=600
with_fileglob:
- /playbooks/files/fooapp/*

4.复合变量循环

变量格式如下:

---
- alpha: [ "a","b","c","d","g" ]
numbers: [ 1,2,2,3 ]

如下方式执行循环逻辑

---
- tasks:
- debug: msg="{{ item.0 }} and {{ item.1 }}"
with_togethe:
- alpha
- numbers

5.步进变量循环

循环的变量为整型,如i=0;i<100;i++这种情况

image.png

6.随机变量循环

image.png

7.Do-Until类型的循环

image.png

3.4.6include语法

将一个完整的任务放在单一的playbook文件中会导致文件长度过大

简单的include用法:
---
- tasks:
- inculde:tasks/foo.yaml
- tasks:
- include: a.yaml user=timmy
- include: b.yaml user=alice
- include: c.yaml user=bob

3.4.7ansible-playbook的角色roles

2.调用roles

playbook中有三种方式实现roles的调用

在整个任务编排文件中直接使用关键字roles调用角色roles,这种方式是最经典的角色roles调用方

tasks中使用关键字include——role动态调用角色roles

tasks中使用关键字import_role静态调用角色roles

3.调用roles例子

---
- hosts:all
roles:
- common
- webservers

4.使用include_role关键字调用角色roles

---
- hosts: all
tasks:
- name: Include the some_role role
include_role:
name: some_role
when: "ansible_facts['os_family'] == 'Redhat'"

5.使用import_role关键字调用角色roles

---
- hosts: all
tasks:
- name: Print a message
ansible.builtin.debug:
msg: "before we run our role"
- name: Import the example role
import_role:
name: example
- name: Print a message
ansible.builtin.debug:
msg: "after we run our role"

3.5 密钥管理方案——ansible-vault

在开发playbook的过程中很容易导致敏感数据的暴露,为了解决这个问题,ansible提供了命令行工具

ansible-vault来对数据文件进行加解密

#创建加密文件
ansible-vault encrypt secrets.yml 没有文件在创建一个文件
ansible-vault create secrets.yml 创建
ansible-vault rekey secrets.yml 修改密码
ansible-vault edit secrets.yml 编辑加密文件
ansible-vault decrypt secrets.yml
ansible-vault view secrets.yml

执行playbook时,仅需要针对ansible-playbook命令添加--ask-vault-pass--vault-password

file<file_name参数playbook及针对ansibe-valut命令进行自动解密

3.6使用ansibelAPI

#!/usr/bin/python
import ansibel.runner
import sys
results = ansibel.runner.Runner(
pattern='*',forks=10,
module_name='command',module_args='/usr/bin/uptime',
).run()
if results is None:
print "No hosts found"
sys.exit(1)
for (hostsname, result) in results['contacted'].items():
if not 'failed' in result:
print "%s >>> %s" % (hostsname, result['stdout'])

优点和缺点ansible

优点

1.部署成本低:

部署成本极低,不需要被管理的目标主机安装Agent是一件十分惬意的事情

2.没有agent跟新问题:

没有Agent更新的问题,正因为Ansible是无Agent的集中化运维软件,所以他也就没有Agent更新的问题,极

大简化了Agent维护成本

3.学习成本低:

ansible的操作方式中大量现成的模块减少了我们不少工作量,命令式的操作思路与常规的命令行操作思路十

分类似,让使用者非常容易接受

4.完备的模块:

拥有许多现成的模块,涵盖了许多日常运维所需要的功能

缺点

目标主机需要python解释器,ansible之所以会有raw这个ssh模块,就是为了使用ansible操作主机目标时,

目标主机缺少相应的python模块。在日常接触的操作系统中,我们运维的AIX系统和Ubuntu系统默认没有安

python环境,更别说其他python模块了。

4.1ansible在自动化运维中的应用

4.1.1ansible_fact缓存

ansible_fact这个特殊的变量主要用于内存中保存远程被管理节点中的服务器信息数据;每次使用playbook

执行任务都要收集一次被管理节点的信息数据就显得低效无意义,使用fact的缓存设置将这些信息和数据保

存下来

jsonfile:以JSON格式将fact数据缓存到文件中

mongodb:将fact 数据缓存到MongoDB

redis fact数据缓存到Redis

yaml:以YAML格式将fact数据缓存到文件中

1.配置JSON缓存

memory: fact保存在内存中,默认方式

pickle:以Pickle格式将fact数据缓存到文件中

memcached:将fact数据缓存到memcached DB

[defaults]
fact_caching=josnfile
fact_caching_connection=~/fact_caching/

2.配置Redis缓存

[defaults]
fact_caching=redis
fact_caching_connection=localhost:6379 #需要配置一个以 : 分隔用于连接信息的字符串格式为 [:]
[:]
fact_caching_timeout=86400 #是指缓存数据的失效时间,单位时秒

3.配置MongoDB缓存

[defaults]
fact_caching=mongodb
fact_caching_connection=mongodb://mongodb0.example.com:27017

4.1.2ansible_fact信息模板

4.1.3载入fact

4.1.4set_fact的使用

在运维任务中,常常希望把一些采集到的数据变量像fact一样被保存下来,便于我们跨playbook使用

- name: setting facts so that will be persisted in the fact cache #设置facts,以便将其
保存在事实缓存中
set_fact:
one_fact: something
other_fact: "{{ local_var * 2}}"
cacheable: yes

4.1.5 自定义module

ansible支持自己编写收集fact功能的模块,ansible自定义module中的一个特殊的自定义开发模块,ansible

默认提供了一个使用python语言开发的module模板

时序指标路线

保存在事实缓存中

事件分析路线

引入事件管理模块:将事件的警告、CEP(复杂事件处理)所得到的信息全部转储到事件索引中,并且对事

件进行结构化处理,提取出对象名称,创建时间,事件信息等关键字段。

日志数据格式化阶段,引入日志分类的能力,在可视化配置日志解析规则的时候,能够提示此类日志使用哪

种正则表达式或者Grok表达式进行格式化,降低数据格式化规则的配置难度。

workbook.add_chartsheet(typr=" ")

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1月前
|
机器学习/深度学习 人工智能 运维
构建高效运维体系:从自动化到智能化的演进
本文探讨了如何通过自动化和智能化手段,提升IT运维效率与质量。首先介绍了自动化在简化操作、减少错误中的作用;然后阐述了智能化技术如AI在预测故障、优化资源中的应用;最后讨论了如何构建一个既自动化又智能的运维体系,以实现高效、稳定和安全的IT环境。
63 4
|
1月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
52 4
|
4天前
|
机器学习/深度学习 数据采集 人工智能
智能运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的兴起背景、核心组件及其在现代IT运维中的应用。通过对比传统运维模式,阐述了AIOps如何利用机器学习、大数据分析等技术,实现故障预测、根因分析、自动化修复等功能,从而提升系统稳定性和运维效率。文章还深入分析了实施AIOps面临的挑战与解决方案,并展望了其未来发展趋势。 ####
|
14天前
|
机器学习/深度学习 数据采集 运维
智能化运维:机器学习在故障预测和自动化响应中的应用
智能化运维:机器学习在故障预测和自动化响应中的应用
39 4
|
1月前
|
运维 jenkins 持续交付
自动化部署的魅力:如何用Jenkins和Docker简化运维工作
【10月更文挑战第7天】在现代软件开发周期中,快速且高效的部署是至关重要的。本文将引导你理解如何使用Jenkins和Docker实现自动化部署,从而简化运维流程。我们将从基础概念开始,逐步深入到实战操作,让你轻松掌握这一强大的工具组合。通过这篇文章,你将学会如何利用这些工具来提升你的工作效率,并减少人为错误的可能性。
|
1月前
|
运维 Prometheus 监控
运维中的自动化实践每月一次的系统维护曾经是许多企业的噩梦。不仅因为停机时间长,更因为手动操作容易出错。然而,随着自动化工具的引入,这一切正在悄然改变。本文将探讨自动化在IT运维中的重要性及其具体应用。
在当今信息技术飞速发展的时代,企业对系统的稳定性和效率要求越来越高。传统的手动运维方式已经无法满足现代企业的需求。自动化技术的引入不仅提高了运维效率,还显著降低了出错风险。本文通过几个实际案例,展示了自动化在IT运维中的具体应用,包括自动化部署、监控告警和故障排除等方面,旨在为读者提供一些实用的参考。
|
1月前
|
机器学习/深度学习 数据采集 运维
智能化运维:机器学习在故障预测和自动化响应中的应用
【10月更文挑战第1天】智能化运维:机器学习在故障预测和自动化响应中的应用
66 3
|
1月前
|
机器学习/深度学习 运维 监控
构建高效运维体系:从自动化到智能化的演进之路
在当今数字化时代,运维工作的重要性日益凸显。随着企业业务的不断扩展和技术的日新月异,传统的运维方式已难以满足现代企业的需求。因此,构建一个高效、智能的运维体系成为了企业发展的关键。本文将探讨如何从自动化逐步演进到智能化,以实现运维工作的高效化和智能化。
|
1月前
|
机器学习/深度学习 运维 监控
构建高效运维体系:从自动化到智能化的演进之路
在当今数字化浪潮中,运维作为信息技术的重要支柱,其重要性日益凸显。本文将探讨如何通过自动化和智能化手段,提升运维效率,保障系统稳定性,促进业务持续发展。
|
2月前
|
机器学习/深度学习 运维 Cloud Native
构建高效运维体系:从自动化到智能化的演进之路
在当今数字化时代,运维作为信息技术的重要支柱,其效率与创新能力直接关系到企业信息系统的稳定性和业务连续性。本文将探讨如何通过技术手段,实现运维从传统手工操作向自动化、智能化的转变,进而构建一个高效、可靠的运维体系。我们将从自动化工具的应用开始,逐步深入到智能运维的实践,最终展望云原生架构下的运维未来趋势。