Python 自动化运维(1)

介绍

运维自动化是一组将静态的设备结构转化为根据IT服务需求动态弹性响应的策略,目的就是实现IT运维的质量,降低成本。

优点:高效利、平台化、标准化、流程化

自动化运维工具:

  • 部署类: jenkins
  • 环境类: ansible
  • 监控类: ngios

运维包括:监控、持续集成、运维等

运维自动化设计思想: 管理体系化、工作流程化、人员专业化、任务自动化(环境定义自动化、部署自动化、监控自动化)

关心的问题:自动化、易实现、跨平台、轻量级

缺点: 数据无法共享、无法主动式发现问题[不能预测]、部署成本高、标准不统一

云运维: 资源数据共享、主动发现问题、统一标准、批量推送成本低

ansible

Ansible是一个自动化管理IT资源的工具

功能:

  • 系统环境配置
  • 安装软件
  • 持续集成
  • 热回滚

优点:

  • 无客户端
  • 推送式
  • 丰富module
  • 基于YAML的Playbook
  • 商业化支持

缺点:

  • 效率低、易挂起,串行的,

与其他软件对比:

ansible

Ansible教程

准备环境

  • pyhon
  • setuptools

参考:https://www.cnblogs.com/effortsing/p/10012070.html

快速安装:

1
2
3
4
5
6
7
8
sudo apt install python-setuptools
sudo apt install python3-pip
python3 -m pip install ansible

## 这个方式好,能产生ansible.cfg
sudo apt-get install -y python-software-properties software-properties-common
sudo add-apt-repository -y ppa:ansible/ansible; sudo apt-get update
sudo apt-get install -y ansible

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

  1. ansible 命令主题: ansible/ansible-playbook
  2. 被操作的目标机器的正则表达式: all
  3. 指定使用的模块: -m ping (command shell 命令)
  4. 传入参数: -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模块

      1. 引入Ansible runner库
      1. 初始化runner对象, 传入相关参数
      1. 运行runner对象的runner函数
    1
    2
    3
    4
    5
    6
    7
    8
    import 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使用方法

      1. 定义一个结果对象
      1. 初始化ansible节点对象
      1. 初始化结果对象
      1. 创建一个任务
    1
    # 后续学
  • 开发动态的Inventory数据源

  • 更好的控制playbook等功能的运行

编写ansible module

字定义Ansible Plugin