博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
初学ANSIBLE
阅读量:6603 次
发布时间:2019-06-24

本文共 4525 字,大约阅读时间需要 15 分钟。

一.Ansible简介

  经过对一段时间的学习,对Linux有了一定的基础以后,接下来就要学习一些上层的实际应用了。Ansible是现在使用量最大的自动化运维管理工具,配置服务器应用程序Cobbler的作者和远程管理的Func框架的共同作者Michael DeHaan 开发了该平台,于2015年10月被红帽公司收购。这是Ansible在github的地址:, 从上面不难看出ANSIBLE的受欢迎程度。

  Ansbile和大多数配置管理软件一样,分为控制机器和节点。同时Ansilbe并不是一个服务,使用无代理架构,它是通过SSH服务来对节点实现控制,Ansible不管理节点时候,它并不消耗资源,因为后台没有为Ansible执行守护进程或程序。

二.特性

  • 模块化:调用特定的模块,完成特定任务
    • 有Paramiko,PyYAML,Jinja2(模板语言)三个关键模块
    • 支持自定义模块
  • 基于Python语言实现
  • 部署简单,基于python和SSH(默认已安装),agentless
  • 安全,基于OpenSSH
  • 支持playbook编排任务
  • 幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况
  • 无需代理不依赖PKI(无需ssl)
  • 可使用任何编程语言写模块
  • YAML格式,编排任务,支持丰富的数据结构
  • 较强大的多层解决方案
  • ansible不是服务,修改配置文件之后不用重启服务

三.Ansible工作原理

Ansible主要组成部分

ANSIBLE PLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件INVENTORY:Ansible管理主机的清单/etc/anaible/hostsMODULES:Ansible执行命令的功能模块,多数为内置核心模块,也可自定义PLUGINS:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用API:供第三方程序调用的应用程序编程接口ANSIBLE:组合INVENTORY、API、MODULES、PLUGINS的绿框,可以理解为是ansible命令工具,其为核心执行工具Ansible主要组成部分Ansible命令执行来源:USER,普通用户,即SYSTEM ADMINISTRATORCMDB(配置管理数据库) API 调用PUBLIC/PRIVATE CLOUD API调用USER-> Ansible Playbook -> Ansibile

利用ansible实现管理的方式:

Ad-Hoc 即ansible命令,主要用于临时命令使用场景Ansible-playbook 主要用于长期规划好的,大型项目的场景,需要有前提的规划Ansible主要组成部分Ansible-playbook(剧本)执行过程:将已有编排好的任务集写入Ansible-Playbook通过ansible-playbook命令分拆任务集至逐条ansible命令,按预定规则逐条执行

Ansible主要操作对象:

HOSTS主机NETWORKING网络设备

注意事项

执行ansible的主机一般称为主控端,中控,master或堡垒机主控端Python版本需要2.6或以上被控端Python版本小于2.4需要安装python-simplejson被控端如开启SELinux需要安装libselinux-pythonwindows不能做为主控端

四.安装

rpm包安装: EPEL源yum install ansible编译安装:yum -y install python-jinja2 PyYAML python-paramiko python-babelpython-cryptotar xf ansible-1.5.4.tar.gzcd ansible-1.5.4python setup.py buildpython setup.py installmkdir /etc/ansiblecp -r examples/* /etc/ansibleGit方式:git clone git://github.com/ansible/ansible.git --recursivecd ./ansiblesource ./hacking/env-setuppip安装: pip是安装Python包的管理器,类似yumyum install python-pip python-develyum install gcc glibc-devel zibl-devel rpm-bulid openssl-develpip install --upgrade pippip install ansible --upgrade确认安装: ansible --version

四.相关文件

配置文件

/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/ansiblepull 远程执行命令的工具/usr/bin/ansible-vault 文件加密工具 加密playbook/usr/bin/ansible-console 基于Console界面与用户交互的执行工具

Inventory 主机清单

ansible的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory file中将其分组命名默认的inventory file为/etc/ansible/hostsinventory file可以有多个,且也可以通过Dynamic Inventory来动态生成

主机清单inventory

/etc/ansible/hosts文件格式inventory文件遵循INI文件风格,中括号中的字符为组名。可以将同一个主机同时归并到多个不同的组中;此外,当如若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来标明ntp.magedu.com[webservers]www1.magedu.com:2222www2.magedu.com[dbservers]db1.magedu.comdb2.magedu.comdb3.magedu.com如果主机名称遵循相似的命名模式,还可以使用列表的方式标识各主机示例:[websrvs]www[01:100].example.com[dbsrvs]db-[a:f].example.com

Ansible 配置文件/etc/ansible/ansible.cfg (一般保持默认)

[defaults]#inventory = /etc/ansible/hosts # 主机列表配置文件#library = /usr/share/my_modules/ # 库文件存放目录#remote_tmp = $HOME/.ansible/tmp #临时py命令文件存放在远程主机目录#local_tmp = $HOME/.ansible/tmp # 本机的临时命令执行目录#forks = 5 # 默认并发数#sudo_user = root # 默认sudo 用户#ask_sudo_pass = True #每次执行ansible命令是否询问ssh密码#ask_pass = True #remote_port = 22#host_key_checking = False # 检查对应服务器的host_key,建议取消注释#log_path=/var/log/ansible.log #日志文件,建议取消注释#module_name = command 指定默认模块

五.Ansible系列命令

ansible-doc: 显示模块帮助

ansible-doc [options] [module...]-a 显示所有模块的文档-l, --list 列出可用模块-s, --snippet显示指定模块的playbook片段示例:ansible-doc –l 列出所有模块ansible-doc ping 查看指定模块帮助用法ansible-doc –s ping 查看指定模块帮助用法

ansible通过ssh实现配置管理、应用部署、任务执行等功能,建议配置ansible端能基于密钥认证的方式联系各被管理节点

ansible 
[-m module_name] [-a args]--version 显示版本-m module 指定模块,默认为command-v 详细过程 –vv -vvv更详细--list-hosts 显示主机列表,可简写 --list-k, --ask-pass 提示输入ssh连接密码,默认Key验证-K, --ask-become-pass 提示输入sudo时的口令-C, --check 检查,并不执行-T, --timeout=TIMEOUT 执行命令的超时时间,默认10s-u, --user=REMOTE_USER 执行远程执行的用户-b, --become 代替旧版的sudo 切换

Host-pattern

匹配主机的列表All :表示所有Inventory中的所有主机ansible all –m ping* :通配符ansible “*” -m ping ansible 192.168.1.* -m pingansible “*srvs” -m ping或关系ansible “websrvs:appsrvs” -m ping ansible “192.168.1.10:192.168.1.20” -m pingansible的Host-pattern逻辑与ansible “websrvs:&dbsrvs” –m ping 在websrvs组并且在dbsrvs组中的主机逻辑非ansible ‘websrvs:!dbsrvs’ –m ping 在websrvs组,但不在dbsrvs组中的主机注意:此处为单引号综合逻辑ansible ‘websrvs:dbsrvs:&appsrvs:!ftpsrvs’ –m ping正则表达式ansible “websrvs:&dbsrvs” –m ping ansible “~(web|db).*\.magedu\.com” –m ping  ~表示后面的是正则表达式

转载于:https://blog.51cto.com/8031757/2179029

你可能感兴趣的文章
Mysql安装及基础配置
查看>>
[转+] Carbon中文文档
查看>>
Vue 使用中的小技巧
查看>>
vue 项目的I18n国际化之路
查看>>
Vue作为组件在前端项目中的应用&Vue.set 的用法
查看>>
web语义化之SEO和ARIA
查看>>
几张图看明白MVC MVP MVVM
查看>>
一点笔记
查看>>
Mac终端配置,DIY你的Terminal (iTerm 2 + Oh My Zsh)
查看>>
2017级寒假讲座二分三分训练题A - Cable master (浮点数二分法将其转化成整数进行)...
查看>>
angularjs申明$scope.xx = function()是有顺序的,而js是无块级作用域的
查看>>
Promise的简单实现
查看>>
项目开发遇到的一些问题
查看>>
《SVG精髓》笔记(二)
查看>>
Node.js Stream中Readable类的内部实现
查看>>
Java四类八种基本数据类型
查看>>
MYSQL事件
查看>>
【363天】跃迁之路——程序员高效学习方法论探索系列(实验阶段121-2018.02.03)...
查看>>
漫画:程序员,你能“管理”好你的产品经理吗?
查看>>
async/await 更好的异步解决方案
查看>>