zoukankan      html  css  js  c++  java
  • Ansible—介绍

    ansible简介

      Ansible的创始人是Michael DeHaan(同时也是Cobbler和Func的作者),2012年3月发布第一版,在2015年10月被Red Hat公司收购。

      功能:

      Ansible 是一个 IT 自动化工具。它能配置系统、部署软件、编排更复杂的 IT 任务,如连续部署或零停机时间滚动更新、自动化批量部署、配置并启动应用服务;同类的自动化工具还有Saltstack、Puppet、Chef和Fabric等

    特性:

    模块化:调用特定模块

      paramiko,pyYAML,jinja2三个关键模块

      支持自定义模块

    部署简单,安全

      基于python、ssh、agentless、OpenSSH

      工作架构

      执行过程:

    • 1. 加载自己的配置文件 默认/etc/ansible/ansible.cfg
    • 2. 加载自己对应的模块文件,如command
    • 3. 通过ansible将模块或命令生成对应的临时py文件,并将该 文件传输至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件
    • 4. 给文件+x执行
    • 5. 执行并返回结果
    • 6. 删除临时py文件,sleep 0退出

      执行状态返回:

    • 绿色:执行成功,并且没有对主机做更改
    • 黄色:执行成功,对主机做过更改
    • 红色:执行失败

    ansible安装

    1、yum安装,基于EPEL源

    [root@centos7 ~]# yum install ansible

    2、源码安装Ansible

      1)准备Python环境

    # yum groupinstall "Development Tools"
    # yum install zlib-devel openssl-devel libffi-devel # wget https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz # tar xf Python-2.7.8.tgz # cd Python-2.7.8/ # ./configure --prefix=/usr/local # make && make install # cp -av /usr/local/include/python2.7/* /usr/local/include/ # cd /usr/bin/ # ln -sf /usr/local/bin/python . # 编辑/usr/bin/yum 修改为 #!/usr/bin/python2 避免yum不可用

      2)获取源码

    # wget https://pypi.python.org/packages/source/s/setuptools/setuptools-19.6.2.tar.gz
    # wget https://pypi.python.org/packages/source/p/pycrypto/pycrypto-2.6.1.tar.gz
    # wget http://pyyaml.org/download/libyaml/yaml-0.1.6.tar.gz
    # wget https://pypi.python.org/packages/source/P/PyYAML/PyYAML-3.11.tar.gz
    # wget https://pypi.python.org/packages/source/M/MarkupSafe/MarkupSafe-0.9.3.tar.gz
    # wget https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.8.tar.gz
    # wget https://pypi.python.org/packages/source/s/simplejson/simplejson-3.8.1.tar.gz
    # wget https://files.pythonhosted.org/packages/20/c1/2a1a6104f7660b5d6b9876ea351f24212c19ce17c03771baf94f1c81d13b/ansible-2.5.3.tar.gz

      3)PyYAML模块安装

    # tar xf yaml-0.1.6.tar.gz 
    # cd yaml-0.1.6/
    # ./configure --prefix=/usr/local
    # make && make install
    # cd ..
    # tar xf PyYAML-3.11.tar.gz 
    # cd PyYAML-3.11/
    # python setup.py install

      4)setuptools模块安装,依赖zlib-devel包

    # tar xf setuptools-19.6.2.tar.gz 
    # cd setuptools-19.6.2/
    # python setup.py install

      5)pycrypto模块安装

    # tar xf pycrypto-2.6.1.tar.gz 
    # cd pycrypto-2.6.1/
    # python setup.py install

      6)Jinja2模块安装,依赖setuptools模块

    # tar xf MarkupSafe-0.9.3.tar.gz 
    # cd MarkupSafe-0.9.3/
    # python setup.py install
    # cd ..
    # tar xf Jinja2-2.8.tar.gz 
    # cd Jinja2-2.8/
    # python setup.py install

      7)simplejson模块安装

    # tar xf simplejson-3.8.1.tar.gz 
    # cd simplejson-3.8.1/
    # python setup.py install

      8)安装Ansible

    # tar xf ansible-2.5.3.tar.gz
    # cd ansible-2.5.3
    # python setup.py install

      9)测试

    # ansible --version
    ansible 2.5.3
      config file = None
      configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
      ansible python module location = /usr/local/lib/python2.7/site-packages/ansible-2.5.3-py2.7.egg/ansible
      executable location = /usr/local/bin/ansible
      python version = 2.7.8 (default, May 29 2018, 14:06:44) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]
    # mkdir .ssh
    # ssh-keygen -t rsa -f .ssh/id_rsa -P ''
    # ssh-copy-id -i .ssh/id_rsa.pub 192.168.0.11
    # cp -a examples/* /etc/ansible/
    # vim /etc/ansible/hosts
    	[web_servers]
    	192.168.0.11
    # ansible web_servers -m ping
    	192.168.0.11 | SUCCESS => {
    		"changed": false, 
    		"ping": "pong"
    	}

    3、Pip安装Ansible

    # yum -y install zlib-devel openssl openssl-devel libffi libffi-devel gcc gcc-c++ python-devel python-simplejson python-setuptools
    # pip install paramiko PyYAML Jinja2 httplib2 six
    # pip install ansible
    # ansible --version
    	ansible 2.5.3
    	  config file = None
    	  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, Apr 11 2018, 07:36:10) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]

    ansible配置文件

      相关文件:

    • /etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性
    • /etc/ansible/hosts 主机清单
    • /etc/ansible/roles/ 存放角色的目录

      程序:

      • /usr/bin/ansible 主程序,临时命令执行工具
      • /usr/bin/ansible-doc 查看配置文档,模块功能查看工具
        /usr/bin/ansible-galaxy 下载/上传优秀代码或Roles模块的官网平台/usr/bin/ansible-playbook 定制自动化任务,编排剧本工具/usr/bin/ansible-pull 远程执行命令的工具/usr/bin/ansible-vault 文件加密工具/usr/bin/ansible-console 基于Console界面与用户交互的执行工具

      配置文件ansible.cfg 

    inventory      = /etc/ansible/hosts		#主机清单文件
    library        = /usr/share/my_modules/		#库文件存放目录
    remote_tmp     = ~/.ansible/tmp			#临时py命令文件存放在远程主机目录 
    local_tmp      = ~/.ansible/tmp			#本机的临时命令执行目录 
    forks          = 5  				#默认并发数
    sudo_user      = root				#默认sudo用户
    ask_sudo_pass = True				#每次执行ansible命令是否询问ssh密码 
    remote_port    = 22 				#远程主机端口号
    host_key_checking = False 			#禁用第一次连接的key检查
    log_path = /var/log/ansible.log 		#默认ansible不记录日志,启用此项开启日志记录
    

      

      主机清单inventory

      ansible的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory file中将其分组命名默认的inventory file为/etc/ansible/hosts

      inventory file可以有多个,且也可以通过Dynamic Inventory来动态生成

      inventory文件遵循INI文件风格,中括号中的字符为组名。可以将同一个主机同时归并到多个不同的组中;此外,当如若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来标明

      /etc/ansible/hosts

    格式1:

      192.168.0.1:[port]

    格式2:

      [locategroupname]

      192.168.0.1

      192.168.0.2

      192.168.0.3

    格式3:

      [locategroupname]

      192.168.0.[1:3]

     

    Ansible命令

    用法

      ansible <host-pattern> [-m module_name] [-a args]

    选项

    • --version:查看版本相关信息
    • -m module:指定模块,默认为command
    • -v|–vv|-vvv:详细过程
    • —list|--list-hosts:显示主机列表
    • -k|--ask-pass:提示连接密码,默认Key验证
    • -K|--ask-become-pass:提示输入sudo
    • -C|--check:检查执行,并不是真正执行
    • -T|--timeout=TIMEOUT:执行命令的超时时间,默认10s
    • -u|--user=REMOTE_USER:执行远程执行的用户
    • -b|--become:代替旧版的sudo切换

    host-pattern:

    • all:表示主机清单中所有的主机
    • groupname:表示组中的所有主机
    • host:指定某台主机,但是此主机必须在主机清单中
    • 支持通配符(*)、逻辑与(:&)或(:)非(:!)和正则表达式(~)

    ansible-doc

    用法:ansible-doc [options] [module...]

    选项:

    • -a 显示所有模块的文档
    • -l, --list 列出可用模块
    • -s, --snippet 显示指定模块的playbook片段

    ansible-galaxy

    从网站上下载对应的roles(https://galaxy.ansible.com)

    • install 安装roles 
    • list 列出所有roles 
    • remove 删除roles 

    ansible-playbook

    执行.yml剧本文件

    • -C | --check 检查执行,不真正执行
    • -t tags 执行指定的标签
    • --list-tags 列出剧本中的所有的标签
    • --list-tasks 列出剧本中所有的任务
    • --list-hosts 列出剧本中所有的主机
    • --limit host_group_name 只针对主机列表中的主机执行
    • -v | -vv | -vvv 显示详细信息
    • -e 'var=value' 自定义变量赋值

    ansible-vault

    管理加密解密yml文件

    • encrypt 加密
    • decrypt 解密
    • view 查看
    • edit 编辑加密文件
    • rekey 修改口令
    • create 创建新文件

    ansible-console

    ansible的交互式终端,root@all (3)[f:5]$:执行用户@当前操作的主机组 (当前组的主机数量)[f:并发数]$ 

    • forks #:设置并发数
    • cd:切换主机组或主机
    • list:列出当前主机列表
    • help:获取帮助

    ansible-pull

    推送命令至远程,支持直接从git下载playbook执行,需要遵循其规定的目录格式,用处不是特别大

  • 相关阅读:
    改变网页字体的大小
    dom小练习
    各种交换机接口及连接方法介绍【详细图文】
    网线从路由器接出来, 再接一个路由器怎么设置?
    路由器后面再接一个路由器怎么设置(二级路由)
    设置无线路由器
    交换机与集线器的区别
    Java的位运算符具体解释实例——与(&amp;)、非(~)、或(|)、异或(^)
    无法识别的属性“targetFramework”。请注意属性名称区分大写和小写。错误解决的方法
    简单工厂模式
  • 原文地址:https://www.cnblogs.com/Gmiaomiao/p/9115640.html
Copyright © 2011-2022 走看看