• Ansible




    Ansible--快速入门

    Ansible是一款简单的运维自动化工具,只需要使用ssh协议连接就可以来进行系统管理,自动化执行命令,部署等任务。

    Ansible的特点

        ☆ 基于Python开发,运维工程师对其二次开发比较容易;

        ☆丰富的内置模块,几乎可以满足一切要求;

        ☆管理模式简单,一条命令可以影响上千台主机;

        ☆无需客户端,轻量级,底层通过SSH通信;

        ☆管理范围广泛,不仅仅是操作系统,还包括各种虚拟化、公有云、配置裸机服务器网络设备、甚至存储设备。

    Anisble并不是市面上唯一一款的自动化运维工具,还有诸如Puppet、SaltStack等。但总的来说Ansible是众多自动化工具中较为出色的一款,因为它的相对简单易用,而且能够支持跨平台,高可读性易于维护,高重用性提升效率,总之能够快速有效地完成自动化运维工作。

    preview

    Ansible组成结构

      • Ansible
        Ansible的命令工具,核心执行工具;一次性或临时执行的操作都是通过该命令执行。
      • Ansible Playbook
        任务剧本(又称任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,yaml格式。
      • Inventory
        Ansible管理主机的清单,默认是/etc/ansible/hosts文件。
      • Modules
        Ansible执行命令的功能模块,Ansible2.3版本为止,共有1039个模块。还可以自定义模块。
      • Plugins
        插件,模块功能的补充,常有连接类型插件,循环插件,变量插件,过滤插件,插件功能用的较少。
      • API
        提供给第三方程序调用的应用程序编程接口。

    环境准备
    IP系统主机名备注
    192.168.1.30CentOS7ansibleansible管理服务端
    192.168.1.31CentOS7linux.node01.com被管理节点1
    192.168.1.32CentOS7linux.node02.com被管理节点2
    192.168.1.33CentOS7linux.node03.com被管理节点3
    192.168.1.36CentOS6linux.node06.com被管理节点6

    Ansible安装

    1)配置epel

    [root@ansible ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    [root@ansible ~]# yum clean all
    [root@ansible ~]# yum makecache

    2)安装ansible

    [root@ansible ~]# yum -y install ansible
    
    [root@ansible ~]# ansible --version		# 查看ansible版本
    ansible 2.8.0
      config file = /etc/ansible/ansible.cfg
      configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
      ansible python module location = /usr/lib/python2.7/site-packages/ansible
      executable location = /usr/bin/ansible
      python version = 2.7.5 (default, Aug  4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)]

    Ansible Inventory文件

    Inventory中文文档

    Inventory文件通常用于定义要管理的主机的认证信息,例如ssh登录用户名、密码以及key相关信息。可以同时操作一个组的多台主机,组与主机组之间的关系都是通过inventory文件配置。配置文件路径为:/etc/ansible/hosts

    基于密码连接
    [root@ansible ~]# vim /etc/ansible/hosts
    [webserver]		# 方法一 主机+端口+密码
    192.168.1.31 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456"
    192.168.1.32 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456"
    192.168.1.33 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456"
    192.168.1.36 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456"
    
    # 方法二 主机+端口+密码
    [webserver]
    192.168.1.3[1:3] ansible_ssh_user=root ansible_ssh_pass="123456"
    
    # 方法二 主机+端口+密码
    [webserver]
    192.168.1.3[1:3]
    [webserver:vars]
    ansible_ssh_pass="123456"
    基于秘钥连接

    基于秘钥连接需要先创建公钥和私钥,并发送给被管理机器

    1)生成公私钥

    [root@ansible ~]# ssh-keygen
    [root@ansible ~]# for i in {1,2,3,6}; do ssh-copy-id -i 192.168.1.3$i ; done

    2)配置连接

    [root@ansible ~]# vim /etc/ansible/hosts
    # 方法一 主机+端口+密钥
    [webserver]
    192.168.1.31:22
    192.168.1.32
    192.168.1.33
    192.168.1.36
    
    # 方法一 别名主机+端口+密钥
    [webserver]
    node1 ansible_ssh_host=192.168.1.31 ansible_ssh_port=22
    node2 ansible_ssh_host=192.168.1.32 ansible_ssh_port=22
    node3 ansible_ssh_host=192.168.1.33 ansible_ssh_port=22
    node6 ansible_ssh_host=192.168.1.36 ansible_ssh_port=22
    主机组的使用
    # 主机组变量名+主机+密码
    [apache]
    192.168.1.36
    192.168.1.33
    [apache.vars]
    ansible_ssh_pass='123456'
    
    # 主机组变量名+主机+密钥
    [nginx]
    192.168.1.3[1:2]
    
    # 定义多个组,把一个组当另外一个组的组员
    [webserver:children]  #webserver组包括两个子组:apache nginx
    apache
    nginx
    临时指定inventory

    1)先编辑一个主机定义清单

    [root@ansible ~]# vim /etc/dockers
    [dockers]
    192.168.1.31 ansible_ssh_pass='123456'
    192.168.1.32
    192.168.1.33

    2)在执行命令是指定inventory

    [root@ansible ~]# ansible dockers -m ping -i /etc/dockers -o
    192.168.1.33 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
    192.168.1.32 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
    192.168.1.31 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
    Inventory内置参数

    Ansible Ad-Hoc Ad-Hoc中文文档

            ad-hoc —— 临时的,在ansible中是指需要快速执行,并且不需要保存的命令。说白了就是执行简单的命令——一条命令。

           对于复杂的命令则为playbook,类似于saltstackstate sls状态文件。

    ansible命令格式

    1)常用命令参数

    [root@ansible ~]# ansible -h
    Usage: ansible <host-pattern> [options]
    -a MODULE_ARGS   #模块参数
    -C, --check     #检查语法
    -f FORKS        #并发
    --list-hosts    #列出主机列表
    -m MODULE_NAME  #模块名字
    -o              #使用精简的输出

    2)示例

    [root@ansible ~]# ansible webserver -m shell -a 'uptime' -o
    192.168.1.36 | CHANGED | rc=0 | (stdout)  13:46:14 up 1 day,  9:20,  4 users,  load average: 0.00, 0.00, 0.00
    192.168.1.33 | CHANGED | rc=0 | (stdout)  21:26:33 up 1 day,  8:51,  3 users,  load average: 0.00, 0.01, 0.05
    192.168.1.31 | CHANGED | rc=0 | (stdout)  21:26:33 up 1 day,  8:50,  3 users,  load average: 0.00, 0.01, 0.05
    192.168.1.32 | CHANGED | rc=0 | (stdout)  21:26:33 up 1 day,  8:59,  3 users,  load average: 0.00, 0.01, 0.05

    3)命令说明

    host-pattern格式

    目标target主机,主机组匹配方式

    主机的匹配
    #  一台目标主机
    [root@ansible ~]# ansible 192.168.1.31 -m ping
    
    # 多台目标主机
    [root@ansible ~]# ansible 192.168.1.31,192.168.1.32 -m ping
    
    # 所有目标主机
    [root@ansible ~]# ansible all -m ping
    组的匹配
    # 组的配置信息如下:这里定义了一个nginx组和一个apache组
    [root@ansible ~]# ansible nginx --list
      hosts (2):
        192.168.1.31
        192.168.1.32
    [root@ansible ~]# ansible apache --list
      hosts (3):
        192.168.1.36
        192.168.1.33
        192.168.1.32
    
    # 一个组的所有主机匹配
    [root@ansible ~]# ansible apache -m ping
    
    # 匹配apache组中有,但是nginx组中没有的所有主机
    [root@ansible ~]# ansible 'apache:!nginx' -m ping -o
    192.168.1.36 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
    192.168.1.33 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
    
    # 匹配apache组和nginx组中都有的机器(并集)
    [root@ansible ~]# ansible 'apache:&nginx' -m ping -o
    192.168.1.32 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
    
    # 匹配apache组nginx组两个组所有的机器(并集);等于ansible apache,nginx -m ping
    [root@ansible ~]# ansible 'apache:nginx' -m ping -o
    192.168.1.32 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
    192.168.1.31 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
    192.168.1.33 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
    192.168.1.36 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}


    Ansible Ad-hoc模式下常用模块



    附:戴尔易安信各个产品的Ansible模块下载地址

    针对PowerEdge服务器:https://github.com/dell/dellemc-openmanage-ansible-modules

    针对PowerMax存储:https://github.com/dell/ansible-powermax

    针对PowerStore存储:https://github.com/dell/ansible-powerstore

    针对Isilon存储:https://github.com/dell/ansible-isilon

    针对Unity存储:https://github.com/dell/ansible-unity


    归类 : 自动化运维&服务相关

  • 相关阅读:
    融云技术分享:全面揭秘亿级IM消息的可靠投递机制
    企业微信的IM架构设计揭秘:消息模型、万人群、已读回执、消息撤回等
    喜马拉雅亿级用户量的离线消息推送系统架构设计实践
    uni-app 项目使用 npm 包中的小程序自定义组件
    Leetcode563. 二叉树的坡度
    vue看源码遇到 报错
    windows使用
    mysql 显示行号
    从优秀到卓越
    【面经】阿里蚂蚁金服22秋招-Java后端
  • 原文地址:https://www.cnblogs.com/lz1996/p/12704913.html
Copyright © 2020-2023  润新知