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

ansible使用知识概要和脑图

上一篇:ansible playbook


下一篇:实战--Playbook批量修改密码