介绍
运维自动化是一组将静态的设备结构转化为根据IT服务需求动态弹性响应的策略,目的就是实现IT运维的质量,降低成本。
优点:高效利、平台化、标准化、流程化
自动化运维工具:
- 部署类: jenkins
- 环境类: ansible
- 监控类: ngios
运维包括:监控、持续集成、运维等
运维自动化设计思想: 管理体系化、工作流程化、人员专业化、任务自动化(环境定义自动化、部署自动化、监控自动化)
关心的问题:自动化、易实现、跨平台、轻量级
缺点: 数据无法共享、无法主动式发现问题[不能预测]、部署成本高、标准不统一
云运维: 资源数据共享、主动发现问题、统一标准、批量推送成本低
ansible
Ansible是一个自动化管理IT资源的工具
功能:
- 系统环境配置
- 安装软件
- 持续集成
- 热回滚
优点:
- 无客户端
- 推送式
- 丰富module
- 基于YAML的Playbook
- 商业化支持
缺点:
- 效率低、易挂起,串行的,
与其他软件对比:
Ansible教程
准备环境
- pyhon
- setuptools
参考:https://www.cnblogs.com/effortsing/p/10012070.html
快速安装:
1 | sudo apt install python-setuptools |
Ansible源码安装, 主要是因为自定义了系统、软件环境
- 获取源码
- 解压源码
- 进入目录
- 运行source ./hacking/env-setup
Ansible系统源安装:
- Centos
- yum install ansible
- Ubuntu
- apt-get install software-prperties-common
- apt-get-repository ppa:ansible/ansible
- apt-get update
- apt-get install ansible
ansible是基于ssh通信的,所以不需要后台起服务
Ansible配置文件路径
- export ANSIBLE_CONFIG # 首先,Ansible命令会检查环境变量,及这个环境变量将指向的配置文件
- ./ansible.cfg # 其次,将会检查当前目录下的ansible.cfg配置文件
- ~/.ansible.cfg # 再次,将会检查当前用户home目录下的.ansible.cfg配置文件
- /etc/ansible/ansible.cfg # 最后,将会检查在用软件包管理工具安装Ansible时自动产生的配置文件
如果以上目录都没有,则自己新建,只能有一个配置文件,不然会被覆盖
Ansible
Ansible命令格式: ansible all -m ping
- ansible 命令主题: ansible/ansible-playbook
- 被操作的目标机器的正则表达式: all
- 指定使用的模块: -m ping (command shell 命令)
- 传入参数: -a 传入的参数,例:ansible all -a ‘ls’
命令详解:
|optional arguments|detail|
|-|-|
-a | 指定传入模块的参数
-C -D | 两个一起使用,检查hosts规则文件的修改
-l | 限制匹配规则的主机数
-list-hosts | 显示所有匹配规则的主机数
-m -M | 指定所用的模块和模块路径
–syntax-check | 检查语法
-v | 显示详细日志
- 添加一台主机
- 编辑/etc/ansible/hosts, 如果没有可以手动添加,其他位置创建也可以
- 添加本地public SSH key 到目标机器的authorized_keys
- 添加本机的密钥到Ansible
- 运行ansible all -m ping 测试添加是否成功
Inventory(分组)
Patterns ( )
Ad-Hoc ()
Playbook 是一种简单的配置管理系统与多机器部署系统的基础。与现有的其他系统有不同之处,且非常适合于复杂应用的部署。
Playbooks可用于声明配置,更强大的地方在于,playbooks中以编排有序的执行过程,甚至于做到在多组机器间,来回有序的执行带别指定的步骤,且可以同步或异步的发起任务。
Ansible API
API提供的功能:
调用Ansible模块
- 引入Ansible runner库
- 初始化runner对象, 传入相关参数
- 运行runner对象的runner函数
1
2
3
4
5
6
7
8import ansible.runner
runner = ansible.runner.Runner(
module_name = 'ping',
module_args = '', # 参数
pattern = 'web*', # 匹配的机器
forks = 10, # 进程数
)
datastructure = runner.run()ansible2.0版本前后,差异很大,以上示例不适用于2.0后,以下是Ansible2.0 API使用方法
- 定义一个结果对象
- 初始化ansible节点对象
- 初始化结果对象
- 创建一个任务
1
# 后续学
开发动态的Inventory数据源
更好的控制playbook等功能的运行
编写ansible module
字定义Ansible Plugin