ansible运维工具(一)

运维工具介绍

OS Provisioning: PXE, Cobbler(repository, distritution,profile)

PXE: dhcp, tftp, (http, ftp)

dnsmasq: dhcp, dns

OS Config:

Puppet, saltstack, func

Deployment:

fabric

运维工具分类:
    agent: puppet,func
    agentless: ansible,fabric
        ssh service

    ansible 的核心组件:
        ansible core
        host inventory
        core modules
        custom modules
        playbook (yaml) 允许我们将多个任务写在一个文件中,这个文件就叫做playbook,是yaml格式,使用jinjia2定义模版语言)
        connect plugin (使用的是python中的pramiko插件,log插件)

    ansible的特性:
        基于python语言实现,由Pramiko 来实现创建ssh连接,PyYAML和jinjia2三个类模块;

        部署简单, agentless
        默认使用SSH协议;
            (1)基于密钥认证;
            (2)在Inventory中定义指定账户和密码。
        主从模式;
            master: ansible, ssh client 主节点指ansible节点,同时是ssh的客户端节点
            slave: ansible的客户端主机 同时是ssh server节点。
        支持自定义模块:支持各种编程语言
        支持Playbook
        基于“模块”管理完成各种 “任务”

ansible的安装:
在epel源有提供,只是在系统中没有自带
使用yum info ansible 查看软件的一个简介
初步使用ansible:
    1. 在Inventory文件中定义要管理的连接信息
    2. 使用ansible的命令行客户端,通过读取Inventory文件定位每一个可以被管理的主机,从而指挥他们来工作。
    3. 远程主机管理之前最好能做基于ssh密钥认证方式,这样就不需要每一次输入密码。也不用在Inventory文件中写明文密码。
 命令使用格式:
    ansible -m "model_name" -h ‘hostname‘ -a "array"
    rpm -ql ansible 查看安装了哪些文件
    配置文件:有两个文件需要我们留意的
        /etc/ansible/ansible.conf
        假如有100个主机,一次操作这么多对ansible主机会有很大压力,所以可以配置一批处理多少个配置文件
        /etc/ansible/hosts 它其实就是inventory,这个文件可以将被管理主机定义进来,每一个被管理主机的ip,用户,端口,密码等等
    ansible不是服务,所以没有需要运行的服务,但是额外有一些命令程序需要注意
    /usr/bin/ansible
    /usr/bin/ansible-doc 查看得出ansible已经支持哪些自带的模块
    /usr/bin/ansible-galaxy
    /usr/bin/ansible-playbook
    /usr/bin/ansible-pull
    /usr/bin/ansible-vault
ansible命令使用事例:
首先编辑inventory文件 /etc/ansible/hosts文件

    # cat /etc/ansible/
    ansible.cfg  hosts        hosts_bak    roles/
    # cat /etc/ansible/hosts
    [websrvs]
    10.211.55.7
    10.211.55.5
    [dbsrvs]
    10.211.55.8

如何查看模块帮助文档
    ansible-doc -l 列出所有模块
    ansible-doc -s module_name 查看某一个模块的使用说明
尝试运行一个任务
ansible 命令应用基础
    man ansible查看基本用法
    ansible <host-pattern> [-f forks] [-m module_name] [-a args]
    <host-pattern 对哪些主机生效
    -f forks 一批控制多少主机执行任务。其实就是启动的并发线程数
    -m 模块名
    -a args 模块特有的参数

常见模块:

command 模块 当命令行不指定模块的时候,默认模块就是command模块,用于在远程主机执行命令。

这个模块有一个缺点,就是运行命令不能使用变量或者参数 ,如果想要使用变量 或者参数那么要使用ansible的另外一个shell模块

    基于ip地址运行
    [[email protected] .ssh]# ansible 10.211.55.8 -m command -a ‘date‘
    10.211.55.8 | SUCCESS | rc=0 >>
    Mon Apr  2 14:32:04 HKT 2018

    基于inventory里配置的主机组运行
    # ansible websrvs  -m command -a ‘date‘
    10.211.55.7 | SUCCESS | rc=0 >>
    Mon Apr  2 14:31:08 HKT 2018

    10.211.55.5 | SUCCESS | rc=0 >>
    Mon Apr  2 14:31:09 HKT 2018

    使用all,inventory里有一个默认的组把所有主机加入到这个组中
    [[email protected] .ssh]# ansible all  -m command -a ‘date‘
    10.211.55.7 | SUCCESS | rc=0 >>
    Mon Apr  2 14:33:34 HKT 2018

    10.211.55.8 | SUCCESS | rc=0 >>
    Mon Apr  2 14:33:34 HKT 2018

    10.211.55.5 | SUCCESS | rc=0 >>
    Mon Apr  2 14:33:35 HKT 2018

    cron 模块
    ansible-doc -s cron
    属性:
        present . 安装
        absent 移除
    如:
    */10 * * * * /bin/echo ‘hello, world‘
    ansible all -m cron -a ‘minute="*/10" job="/bin/echo hello" name="test job" state=present‘
    ansible all -m cron -a ‘minute="*/10" job="/bin/echo hello" name="test job" state=absent‘

    user模块
        最关键的属性
        name 指定用户的名称
    # ansible-doc -s user

    [[email protected] .ssh]# ansible websrvs -m user -a ‘name="user1"‘
    10.211.55.5 | SUCCESS => {
        "changed": true,
        "comment": "",
        "createhome": true,
        "group": 1001,
        "home": "/home/user1",
        "name": "user1",
        "shell": "/bin/bash",
        "state": "present",
        "system": false,
        "uid": 1001
    }
    10.211.55.7 | SUCCESS => {
        "changed": true,
        "comment": "",
        "createhome": true,
        "group": 1001,
        "home": "/home/user1",
        "name": "user1",
        "shell": "/bin/bash",
        "state": "present",
        "system": false,
        "uid": 1001
    }
    删除
    ansible websrvs -m user -a ‘name="user1" state=absent‘

    group模块,实现组管理的

        # ansible websrvs -m group -a "name=mysql gid=306 system=yes"
        10.211.55.5 | SUCCESS => {
            "changed": true,
            "gid": 306,
            "name": "mysql",
            "state": "present",
            "system": true
        }
        10.211.55.7 | SUCCESS => {
            "changed": true,
            "gid": 306,
            "name": "mysql",
            "state": "present",
            "system": true
        }
    然后在使用user模块添加用户的时候指定组
        # ansible websrvs -m user -a "name=mysql uid=306 system=yes group=mysql"
        10.211.55.7 | SUCCESS => {
            "changed": true,
            "comment": "",
            "createhome": true,
            "group": 306,
            "home": "/home/mysql",
            "name": "mysql",
            "shell": "/bin/bash",
            "state": "present",
            "system": true,
            "uid": 306
        }
        10.211.55.5 | SUCCESS => {
            "changed": true,
            "comment": "",
            "createhome": true,
            "group": 306,
            "home": "/home/mysql",
            "name": "mysql",
            "shell": "/bin/bash",
            "state": "present",
            "system": true,
            "uid": 306
        }
    copy模块 ,从本机 复制文件到远程主机上
    ansible-doc -s copy

    # ansible all -m copy -a "src=/etc/fstab dest=/tmp/fstab.ansible owner=root mode=640"
    src 指定本地文件路径,可以使用相对路径和绝对路径
    dest 远程服务器文件拷贝的目标目录 ,只能使用绝对路径
    owner 拷贝后属主是root
    mode 权限 640
    备注:src属性不是必须的,可以使用content属性直接指定文件内容
    # ansible all -m copy -a ‘content="Hello Ansible\nHello my brother\n" dest=/tmp/test.ansible‘
    不仅可以拷贝文件,也可以是目录,直接写目录就可以了

    file模块,这是一个管理文件属性的模块
    可以使用file模块创建链接文件
    # ansible websrvs -m file -a ‘owner=mysql group=mysql mode=644 path=/tmp/fstab.ansible‘

    创建一个符号链接
    # ansible websrvs -m file -a ‘ path=/tmp/fstab.link src=/tmp/fstab.ansible state=link‘
    path 指定你要改的文件,也可以用dest属性,还可以用name属性
    state = link    设置状态为链接文件
    src 指定源文件

    ping 模块
    测试远程主机的连通性
        # ansible all -m ping
        10.211.55.7 | SUCCESS => {
            "changed": false,
            "ping": "pong"
        }
        10.211.55.8 | SUCCESS => {
            "changed": false,
            "ping": "pong"
        }
        10.211.55.5 | SUCCESS => {
            "changed": false,
            "ping": "pong"
        }

    service模块 ,非常重要的模块 ,控制服务的指定状态
    # ansible websrvs -m service -a ‘enabled=true name=httpd state=started‘
    enable 是否开机自动启动,取值为true或者false;
    name: 服务名称
    state: 状态 取值友started, stopped

    shell 模块,可以使用变量
    比如我们在三台机器上已经创建了user1用户,现在我们使用shell模块给用户创建密码
    假如我们使用command命令执行
        # ansible all -m command -a ‘echo mypasswd|passwd -stdin user1‘
        10.211.55.8 | SUCCESS | rc=0 >>
        mypasswd|passwd -stdin user1

        10.211.55.7 | SUCCESS | rc=0 >>
        mypasswd|passwd -stdin user1

        10.211.55.5 | SUCCESS | rc=0 >>
        mypasswd|passwd -stdin user1
   命令执行后,没有报错,这时我们看下密码文件,user1到底有没有被设置密码
       cat /etc/shadow
       user1:!!:17623:0:99999:7:::
   发现并没有为user1设置密码,这就是因为使用command 不能执行较复杂的命令,这时我们使用shell模块
        # ansible all -m shell -a ‘echo mypasswd|passwd --stdin user1‘
        10.211.55.7 | SUCCESS | rc=0 >>
        Changing password for user user1.
        passwd: all authentication tokens updated successfully.

        10.211.55.8 | SUCCESS | rc=0 >>
        Changing password for user user1.
        passwd: all authentication tokens updated successfully.

        10.211.55.5 | SUCCESS | rc=0 >>
        Changing password for user user1.
        passwd: all authentication tokens updated successfully.
    这时在看下/etc/shadow文件如下:
    user1:$6$YFEI7Fqn$cwMdso5xwPv5gTKkHSOavP4LraxQNv78DDP4r.tKXiewhRp9Ps7tQPofouYnQs2JjEIm0B2nKY4tR1.QRdash.:17623:0:99999:7:::

    script 模块
    如果想在远程主机上执行一个 ansible服务器上存在的脚本,就需要使用此模块
    指定一个本地脚本,它会自动将这个脚本复制到每一个远程主机上并运行下。
    例如本地有test.sh脚本
        #!?bin/bash
        echo "hello ansible form script" > /tmp/script.ansible
        useradd user2
    然后通过ansible script脚本
        # ansible all -m script -a ‘/tmp/test.sh‘
    如果发现执行失败,因为老版本ansible script 执行本地的脚本,脚本必须在执行命令的当前目录下如:
        # ansible all -m script -a ‘test.sh‘

    yum 模块,安装程序包,卸载程序包
    # ansible all -m yum -a ‘name=zsh‘
    name 指明要安装的程序包,可以带上版本号
    state= persent, latest 表示安装,absent表示卸载

    setup 模块,收集远程主机的facts
    能查看每个被管理节点在接收并运行管理命令之前,会将自己主机的相关信息,如操作系统版本,IP地址等报告给远程的ansible主机
    # ansible all -m setup 直接查看所有远程主机的facts信息
    比如nginx的配置文件,要设置work_prosess 参数设置,一般是指为服务器cpu核心数-1的数量,这就需要远程主机发过来的facts信息,进行设置。要使用到模版文件为不同配置的服务器生成不同的nginx配置文件。

原文地址:https://www.cnblogs.com/zhming26/p/8707539.html

时间: 2024-11-12 07:24:42

ansible运维工具(一)的相关文章

Ansible运维工具

1.Ansible是一款极为灵活的开源工具套件,能够大大简化Unix管理员的自动化配置管理与流程控制方式.可以通过命令行或者GUI来使用Ansible,运行Ansible的服务器这里俗称“管理节点”:通过Ansible进行管理的服务器俗称“受控节点”. Ansible自动运维管理工具优点: 1) 轻量级,更新时,只需要在操作机上进行一次更新即可: 2)  采用SSH协议: 3)  不需要去客户端安装agent: 4)  批量任务执行可以写成脚本,而且不用分发到远程就可以执行: 5)  使用pyt

ansible运维工具(二)

ansible playbook(二) 运行palybook时 要使用ansible-playbook命令 palybook执行任务的顺序是,在第一个主机上完成第一个任务,然后在第二个主机上完成第一个任务 而不是在第一个主机上完成所有任务,然后再在第二个主机上完成所有任务,以任务为中心,在所有主机上执行 如何构建ansible的playbook Inventory Modules Ad Hoc Commands PlayBooks Tasks 任务,及调用某模块所完成的操作 Variable 变

自动化运维工具之ansible

ansible ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能. ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架. 主要包括: (1).连接插件connection plugins:负责和被监控端实现通信: (2).host inventory:指定

ansible轻量级运维工具使用

Linux轻量级自动运维工具- Ansible 创始人 Michael DeHanan 2012-03-09 同类自动化工具: Ansible Saltstack Puppet Chef Fabric Ansible 特点 agentless (去中心化) 只要保存管理机的认证信息,那么任何一台机器都可以变成管理机 Stupied Simple SSH by default YAML no code 定制剧本 基于python 实现 模块化:调用特定模块,完成特定任务,支持自定义模块 冥等性 -

运维工具ansible理论部分

1.运维工作介绍 运维工作的全部流程: 系统安装(物理机.虚拟机)--> 程序包安装.配置.服务启动 --> 批量操作 --> 程序发布  --> 监控 随着一些大公司的IT系统架构越来越复杂,服务器数量越来越多,标准化和自动化已经是运维工作的基本要素. 自动化运维经历了4个阶段:人工,这个阶段基本上是全部需要到机器上一步步操作:脚本,使用计划任务完成一些重复性工作:工具,这个阶段一个人可以管理大量的机器,常见的工具:puppet,saltstack,ansible:平台化,这时运

自动化运维工具之ansible的简单应用

ansible: ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能.ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,例如shell,copy,ping等,ansible只是提供一种框架.ansible的主要特性: 模块化:调用特定的模块,完成特定任务 基于Python语言实现,由Pa

自动化运维工具Ansible详细部署

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://sofar.blog.51cto.com/353572/1579894 ========================================================================================== 一.基础介绍 =========================================================

自动化运维工具Ansible实战(一)安装部署

1,基本介绍 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能. ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架.主要包括: (1).连接插件connection plugins:负责和被监控端实现通信: (2).host inventory:指定操作

运维工具ansible+cobbler+zabbix

运维工作 一.系统 硬件----部署操作系统---多个主机 如何高效的安装操作系统 1.部署在裸机上的操作系统 bare metal pxe预执行环境:网卡自身有一个rom,可以自己加载来获得IP地址,能够到文件服务器上加载bootloader文件,依赖于网卡和网络预先提供的安装服务 但是pxe只能预引导1中操作系统 二次封装的pxe:cobbler 将多版本的操作系统环境支持 * [但是都需要支持pxe] 2.虚拟机器 virtual machine * 二.程序 configurtion 自