zoukankan      html  css  js  c++  java
  • ansible使用知识概要和脑图

    ansible

    概要

    DEVOP类工具

    Infrastructure As Code [ IaC ]

    被控制机器只要可以SSH即可,依赖少

    安装

    DNF YUM等直接安装

    基本概念

    inventory

    • 支持yaml等多种配置方式
    • 分组
    • 变量

    运行设置

    ANSIBLE_CONFIG

    • 当前目录的 ansible.cfg
    • 当前用户的~/.ansible.cfg
    • /etc/ansible/ansible.cfg

    模块

    • 模块是Ansible执行的最小单位,可以是由Python编写,也可以是Shell编写,也可以是由其他语言编写。
    • ansible all -m ping
      对invenroty定义的所有主机(all)执行ping模块检查主机的互通性
    • ansible-doc 可以查看模块的详细说明和配置
      ansible-doc ping

    剧本play-book

    • playbook是由一个或多个play组成的列表,play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色。从根本上来讲,所谓的task无非是调用ansible的一个module。将多个play组织在一个playbook中,即可以让它们联合起来按事先编排的机制完成某一任务
    • 核心元素
      • Hosts 执行的远程主机列表
      • Tasks 任务集
      • Varniables 内置变量或自定义变量在playbook中调用
      • Templates 模板,即使用模板语法的文件,比如配置文件等
      • Handlers 和notity结合使用,由特定条件触发的操作,满足条件方才执行,否则不执行
      • tags 标签,指定某条任务执行,用于选择运行playbook中的部分代码。

    Role

    • 主要作用是重playbook ansible中将其组织成role,他有着固定的组织格式。以便playbook调用

    基本命令

    ansible

    ansible-doc

    ansible-playbook

    ansible-galaxy

    ansible-inventory

    ansible-console

    ansible-config

    ansible-connection

    ansible-vault

    ansible-pull

    模块

    执行命令的几个模块区别

    • command模块 [执行远程命令]command不支持特殊字符
      [root@node1 ansible]# ansible testservers -m command -a 'uname -n'
    • script模块 [在远程主机执行主控端的shell/python脚本 ] (使用相对路径)
      [root@node1 ansible]# ansible testservers -m script -a '/etc/ansible/test.sh
    • shell模块 [执行远程主机的shell/python脚本]shell模块可以支持特殊字符
      [root@node1 ansible]# ansible testservers -m shell -a 'bash /root/test.sh'
    • raw模块 [类似于command模块、支持管道传递]
      [root@node1 ansible]# ansible testservers -m raw -a "ifconfig eth0 |sed -n 2p |awk '{print $2}' |awk -F: '{print $2}'"

    copy模块见名知义,copy模块的作用就是拷贝文件,而copy模块是将ansible主机上的文件拷贝到远程主机中

    -m copy -a "src=/data/module/tmp/jenkins/ac-wehub dest=/data/module/tmp/jenkins/"

    fetch模块是从远程主机中拉取文件到ansible主机

    file模块可以帮助我们完成一些对文件的基本操作,比如,创建文件或目录、删除文件或目录、修改文件权限等

    synchronize模块:使用ansible copy模复制文件夹效率远远不及synchronize, 同一个77m大小的文件,copy模块需要耗时一分多,但是synchronize只要5秒[synchronize的主要弊端是需要安装rsync]

    -m synchronize -a "src=/data/module/tmp/jenkins/ac-wehub dest=/data/module/tmp/jenkins/ delete=yes checksum=yes "
    -m synchronize -a "src=/tmp/client/ dest=/tmp/server mode=pull" 【push 时,src 需要填本地目录,dest 填远程主机目录】

    使用步骤概要

    ssh免密登录

    • ssh-keygen
    • ssh-copy-id -i ~/.ssh/id_rsa.pub 用户名字@192.168.x.xxx
    • ssh 用户名字@192.168.x.xxx
      如上2步即可免密登录远端机器

    ansible

    • 简单的单个的任务的执行使用
    • 1 ansible.cfg
      可选,是否修改运行的设置
    • 2定义主机文件
      分组、变量
      必须
      • [proxy]

    192.168.88.10

    svr_proxy ansible_ssh_port=22 ansible_ssh_host=192.168.88.10

    [seaweedfs]

    192.168.88.11

    svr_seaweed ansible_ssh_port=22 ansible_ssh_host=192.168.88.11

    [server:children]
    proxy
    seaweedfs

    [server:vars]

    ansible_ssh_user ansible_ssh_pass

    ansible_ssh_user=vagrant
    ansible_ssh_private_key_file=./key/id_rsa
    host_key_checking=false

    • 常用命令解析
      • ansible proxy -i inventory -m shell -a 'grep -rins "AES" /opt/openresty/nginx/conf/nginx.conf'
        在哪些主机上执行,all是主机清单中的所有主机,上例是在proxy主机
        -i 主机清单
        -m 执行那个模块
        -a 模块的参数设置
        -v 最多4个-vvvv,越多越详细
    • 模块的参数如何设置
      • ansible-doc
      • 这个参考非常详细,文档输出中有例子

    ansible-playbook

    • 运行一组编排好的命令
    • 例子 sample.yml

    • hosts: all
      tasks:

      • name: Recursively remove directory
        file:
        path: /tmp/seaweedfs
        state: absent
    • hosts: proxy
      tasks:

      • name: SELINUX=disabled
        selinux: state=disabled

      • name: openresty service start
        service:
        name: openresty.service
        state: "{{ CMD }}"
        when: ( "started" == (CMD) )
        ignore_errors: True

    • ansible-playbook -i inventory sample.yml -e "CMD=started"

    ROLE

    • 涉及剧本重用
    • Collection / galaxy
      官网等地方有很多已经写好的角色,比如nginx的安装部署等等

    XMind: ZEN - Trial Version

  • 相关阅读:
    Linq语句jion on后指定多个条件
    sql判断日期是否为当前季度
    Linq to json
    .net压缩文件夹
    .net代码修改webconfig
    .net正则IP加端口,并返回IP加端口
    获取汉字拼音的首字母(获取助记码)
    .net获取程序根目录
    关闭IPV6
    mysql查看日志
  • 原文地址:https://www.cnblogs.com/2018/p/14410580.html
Copyright © 2011-2022 走看看