自动化运维 2

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云原生内存数据库 Tair,内存型 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
相关文章
|
16天前
|
运维 Unix 应用服务中间件
自动化运维:使用Ansible简化日常任务
【8月更文挑战第4天】在现代IT架构中,自动化运维成为提升效率、减少人为错误的关键。本文将介绍如何使用Ansible这一强大的自动化工具来简化日常的运维任务,通过实际代码示例,展示配置管理、软件部署和系统更新等操作。我们将探索如何利用Ansible的简洁语法和强大功能来优化工作流程,从而为读者提供一套实用的自动化解决方案。
|
2天前
|
机器学习/深度学习 人工智能 运维
智能运维:未来趋势下的自动化与人工智能融合
【8月更文挑战第18天】 在数字化浪潮中,智能运维(AIOps)作为一股不可逆转的力量,正逐步改写传统运维的脚本。本文将探讨AIOps的核心要素、实施路径和面临的挑战,同时分享个人从新手到专家的心路历程,旨在启发读者思考如何在这一领域内持续成长并作出贡献。
13 6
|
4天前
|
运维 持续交付 网络安全
自动化运维:Ansible与Terraform的比较
【8月更文挑战第16天】Ansible和Terraform都是自动化运维领域的重要工具,它们各自以其独特的功能和优势在市场中占据了一席之地。在选择使用哪个工具时,用户应根据自己的实际需求和应用场景进行综合考虑。如果主要关注系统配置管理和应用程序部署,那么Ansible可能是一个更好的选择;如果主要关注基础设施的自动化部署和管理,那么Terraform可能更适合您的需求。
|
11天前
|
运维 Linux Apache
【一键变身超人!】Puppet 自动化运维神器 —— 让你的服务器听话如婴儿,轻松管理资源不是梦!
【8月更文挑战第9天】随着云计算与容器化技术的发展,自动化运维已成为现代IT基础设施的核心部分。Puppet是一款强大的自动化工具,用于配置管理,确保系统保持预期状态。通过易于理解的配置文件定义资源及其依赖关系,Puppet实现了“基础设施即代码”的理念。本文简要介绍了Puppet的安装配置方法及示例,包括Puppet Agent与Master的安装、基本配置步骤和一个简单的Apache HTTP Server管理示例,展示了Puppet在实际应用中的强大功能与灵活性。
24 9
|
5天前
|
机器学习/深度学习 人工智能 运维
自动化运维的新篇章:从脚本到智能化管理
在数字化浪潮中,运维领域迎来了前所未有的挑战与机遇。本文将通过一个运维专家的视角,讲述他如何从一个刚毕业的迷茫青年成长为行业内的佼佼者。文章不仅分享技术成长之路,更深入探讨自动化运维的演变历程,以及它如何重塑IT行业的未来。
|
7天前
|
运维 监控 Devops
构建高效自动化运维体系:DevOps与容器化实践
【7月更文挑战第44天】在现代IT基础设施管理中,自动化运维已成为提升效率、降低成本、确保系统稳定性的关键。本文将探讨如何通过结合DevOps理念和容器化技术来构建一个高效的自动化运维体系。我们将分析这一体系对提高软件交付速度、优化资源利用率以及增强系统可靠性的积极影响,并提供一系列实施策略和最佳实践,帮助企业实现运维自动化转型。
|
11天前
|
运维 Ubuntu 网络安全
Ansible:自动化运维的魔法棒,让复杂工作变得如此简单!
【8月更文挑战第9天】在现代IT运维中,自动化工具不可或缺。Ansible是一款流行的开源工具,以其简洁高效著称。它基于Python,使用YAML编写剧本,通过SSH与远程主机交互,无需安装代理。核心组件包括引擎、剧本、模块等。安装简易,如在Ubuntu上可通过添加PPA后使用`apt-get`命令。通过编写Playbook,如安装并启动Apache2服务的例子所示,可轻松实现自动化任务。Ansible的强大功能和灵活性使其成为提高运维效率的理想选择。
45 6
|
11天前
|
运维 监控 持续交付
"揭秘Puppet:自动化运维的超级英雄,一键驾驭复杂IT环境,让运维繁琐瞬间灰飞烟灭,引领未来运维新纪元!"
【8月更文挑战第9天】Puppet作为自动化运维的杰出代表,凭借其强大的配置管理和高度可定制性,助力IT运维实现自动化与智能化转型。通过定义资源模型与使用声明式语言描述系统状态,Puppet能自动调整系统至期望状态,实现标准化运维流程。其工作流程包括定义-应用-报告三步,支持从服务器配置到复杂网络、数据库管理等多种场景。示例代码展示了如何自动化部署Apache服务器,体现了Puppet在实际操作中的高效与便捷。随着技术演进与社区壮大,Puppet将持续推动运维领域的创新发展。
28 6
|
11天前
|
运维 应用服务中间件 Apache
震撼登场!Ansible roles 化身自动化运维神器,打破传统束缚,开启运维新时代!
【8月更文挑战第9天】Ansible是一款强大的自动化运维工具,其Roles功能将复杂任务分解为可复用模块,提升代码的可读性、可维护性和可扩展性。通过创建结构化的目录,如tasks、handlers和vars等,可以清晰地组织配置与任务。例如,为Web服务器创建一个Role,包含安装Apache、启动服务等任务,并可在不同的Playbook中重复使用此Role,简化大型集群的配置管理工作,提高效率和质量。
26 6
|
9天前
|
运维 监控 持续交付
构建高效自动化运维体系:Ansible与Docker的协同实践
【7月更文挑战第42天】 在当今快速发展的云计算和微服务架构时代,自动化运维已成为提升效率、确保系统稳定性的关键。本文将探讨如何利用Ansible这一强大的自动化工具与Docker容器技术相结合,搭建一个高效、可靠的自动化运维体系。文章首先简述了自动化运维的必要性和Ansible与Docker的基本概念,随后详细介绍了两者结合的优势,并通过实际案例分析展示了如何实现自动化部署、管理和扩展应用服务。通过阅读本文,读者将获得一套可行的自动化运维解决方案,以应对日益复杂的IT环境挑战。

热门文章

最新文章