设为首页 收藏本站
查看: 1431|回复: 0

[经验分享] Ansible 基础

[复制链接]

尚未签到

发表于 2018-7-29 13:31:38 | 显示全部楼层 |阅读模式
  Ansible运维自动化
  目录
  一、简介
  二、特性优点
  1、特性
  2、优点
  三、ansible工作过程
  四、Ansible应用场景
  1、使用场景
  2、命令执行
  3、Ansible企业应用场景分析
  (1)Dev开发环境
  (2)测试环境
  (3)发布环境
  (4)生产环境
  (5)灰度环境
  五、ansible安装部署
  1、ansible安装
  2、目录结构
  3、添加认证
  4、ansible工作原理
  5、ansible主要组成部分
  (1)Ansible playbooks
  (2)INVENTORY
  (3)Modeules
  (4)Plugins
  (5)API
  ANSIBLE.
  6、Ansible组件调用关系
  7、Ansible命令集
  (1)命令格式:
  (2)命令参数
  示例1、测试
  示例2、测试以wang用户执行命令
  一、简介
  Ansible 是一个自动化运维工具,12年Mchael DeHanan开发。基于python开发,集合目前主流运维工具优点,实现批量系统配置、程序部署、命令执行等功能。15年ansible被red hat 收购.想知道为什么被收购可以去看看这篇文章http://www.infoq.com/cn/news/2015/10/Red-Hat-DevOps。关于ansblie更多的介绍各位可以去官网看看http://docs.ansible.com/ansible/index.html
  二、特性优点
  1、特性
  no agents :不需要在被管控主机上安装任何客户端
  no server :无服务器端,使用时直接运行命令即可
  modules in any languages :基于模块工具,可使用任意语言开发模块
  yaml,not code :使用yaml语言定制剧本playbook
  ssh by default:基于ssh工作
  strong multi-tier solution:可实现多级指挥。
  2、优点
  轻量级,不需要安装客户端,更新时,只需要在操作机上进行一次更新即可
  批量任务执行可以写成脚本,而且不用分发到远程就可以执行
  使用python编写的,维护更简单
  幂等性   幂等性不会重复执行相同的指令。例如不会重复安装软件
  三、ansible工作过程
  ansible默认是通过SSH通道来管理的,也就是它所说的免客户端方式管理
DSC0000.jpg

  四、Ansible应用场景
  1、使用场景
  文件传输
  2、命令执行
  应用部署
  配置管理
  任务流编排
  3、Ansible企业应用场景分析
  通常情况下在企业中运维功能的整体流程。
DSC0001.jpg

  (1)Dev开发环境
  使用者:程序员
  功能:程序员开发软件测试BUG的环境
  管理者:千万不能是运维,一定是要程序员自已
  (2)测试环境
  使用者:qa测试工程师
  功能:测试经过Dev环境测试通过的软件的功能
  管理者:运维
  备注:测试环境往往有多套(测试环境满足测试功能即可,不宜过多)
  (1)测试同学希望测试环境有多套
  公司的产品多产品线并发,即多个版本,意味着多个版本同步测试
  (2)通常情况下,测试环境有多少套和产品线数量保持一样
  (3)发布环境(代码发布机,有些公司堡垒机(安全屏障))
  使用者:运维
  功能:发布代码至生产环境
  管理者:运维(有经验的)
  发布机:往往需要有2台(主备)
  (4)生产环境
  使用者:运维,只能是运维(极少数情况下会开放权限给核心开发人员,极少数公司将该环境权限完全开放给开发人员并让开发人员维护)
  功能:对用户提供公司产品的服务
  管理者:只能是运维
  生产环境服务器数量:一般比较多,且应用非常重要。往往需要自动工具协助部署配置应用。机器数量具体和公司业务规模相关。
  (5)灰度环境(生产环境的一部分)
  使用者:运维
  功能:在全量发布代码前将代码的功能面向少量精准用户发布的环境
  案例:
  大家手头100台服务器,先发布其中的10台服务器,这10台服务器就是灰度服务器。
  管理者:只能是运维
  为什么灰度环境:往往该版本功能变更较大,为保险起见特意先让一部分用户优化体验该功能,待这部分用户使用没有重大问题的时候,再全量发布至所有服务器。
  五、ansible安装部署
  1、ansible安装
  Yum install ansible  –y
  Pip install ansible
  2、目录结构
  配置文件目录:
  /etc/ansible/
  配置文件
  ansible.cfg:主要设置一些ansible初始化信息,比如日志存放路径、模块、插件等配置信息。
  Hosts:机器清单,进行分组管理
  执行文件目录:
  /usr/bin/
  Lib库依赖目录:
  /usr/lib/pythonX.X/site-packages/ansible/
  Help文档目录:
  /usr/share/doc/ansible-X.X.X/
  Man文档目录:
  /usr/share/man/man1/
   DSC0002.jpg
  3、添加认证
  ssh-keygen -t rsa
  ssh-copy-id -i .ssh/id_rsa.pub root@172.16.250.90
  [root@centos7_1 ~]# ansible 172.16.250.90 -m ping

  •   16.252.18 | SUCCESS => {
  "changed":false,
  "ping": "pong"
  4、ansible工作原理
DSC0003.jpg

  5、ansible主要组成部分
  (1)Ansibleplaybooks
  任务剧本(任务集),编排定义ansible任务集的配置文件,有ansible顺序依次执行,通常是JSON
  格式的YML文件
  (2)INVENTORY
  ansible管理主机的清单,可以定义单独主机,也可以定义主机组。
  (3)Modeules
  ansible执行命令的功能模块,多数为内置的核心模块,也可自定义。Ansible2.2版本提供模块有500多
  个,下面应用到核心模块有synchronize(备份)、copy(恢复)、shell(nas获取)、cron(定时任务)、
  user(密码修改)、zypper(软件包管理rpm)、setup(获取facts);扩展模块有UPStartItem(启动项管
  理)、UPInstall(软件包管理)、UPUPload(文件上传)
  (4)Plugins
  模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用。
  (5)API
  供第三方程序调用的应用程序编程接口
  ANSIBLE
  该部分图中表示不明显,组合INVENTORY、API、MODULES、PLUGINS的绿框大家可以理解
  为是ansible命令工具,其为核心执行工具;
  6、Ansible组件调用关系
DSC0004.jpg

  使用者使用Ansible或Ansible-playbook(会额外读取Playbook文件)时,在服务器终端输入Ansible的Ad-
  Hoc命令集或Playbook后,Ansible会遵循预先编排的规则将Playbooks逐条拆解为Play,再将Play组织成
  Ansible可识别的任务(Task),随后调用任务涉及的所有模块(Module)和插件(Plugin),根据
  Inventory中定义的主机列表通过SSH(Linux默认)将任务集以临时文件或命令的形式传输到远程客户
  端执行并返回执行结果,如果是临时文件则执行完毕后自动删除。
  7、Ansible命令集
  /usr/bin/ansible   # Ansibe AD-Hoc 临时命令执行工具,常用于临时命令的执行
  /usr/bin/ansible-doc  # Ansible 模块功能查看工具
  /usr/bin/ansible-galaxy # 下载/上传优秀代码或Roles模块的官网平台,基于网络的
  /usr/bin/ansible-playbook # Ansible 定制自动化的任务集编排工具
  /usr/bin/ansible-pull # Ansible远程执行命令的工具(使用较少,海量机器时使用,对运维的架构能力要求较高)
  /usr/bin/ansible-vault # Ansible 文件加密工具
  /usr/bin/ansible-console  # Ansible基于Linux Consoble界面可与用户交互的命令执行工具
  (1)命令格式:
  ansible<host-pattern> [options]
  (2)命令参数
  -a MODULE_ARGS, --args=MODULE_ARGS
  module arguments  # 指定Ansible调用的模块
  --ask-become-pass   ask forprivilege escalation password # Ansible su切换用户的时候使用该参数输入密码
  -k,--ask-pass        ask for SSHpassword  # 以密码认证
  --ask-su-pass         ask for supassword (deprecated, use become) # su的时候使用该参数
  -K,--ask-sudo-pass   ask for sudo password(deprecated, use become) # sudo的时候
  --ask-vault-pass      ask forvault password # ansible-valut 加密文件
  -BSECONDS, --background=SECONDS  # 后台等待X秒
  --become-user=BECOME_USER
  run operations as thisuser (default=None)  # su到哪个用户
  -C,--check           don't make any changes;instead, try to predict some
  of the changes that mayoccur  # 不执行命令只做命令执行检查
  -c CONNECTION, --connection=CONNECTION
  connection type to use(default=smart)
  -eEXTRA_VARS, --extra-vars=EXTRA_VARS  # 调用外部变量
  set additionalvariables as key=value or YAML/JSON
  -fFORKS, --forks=FORKS  # Ansible一次命令执行并发的线程数
  -h,--help            show this help messageand exit
  -iINVENTORY, --inventory-file=INVENTORY  #Ansible调用的Hosts文件,默认/etc/ansible/hosts
  specify inventory hostfile
  (default=/etc/ansible/hosts)
  -lSUBSET, --limit=SUBSET  # 限定主机列表中的某台机器执行
  further limit selectedhosts to an additional pattern
  --list-hosts          outputs alist of matching hosts; does not execute
  anything else  ## 列出主机列表中的主机
  -mMODULE_NAME, --module-name=MODULE_NAME  #Ansible 调用的执行模块
  -M MODULE_PATH, --module-path=MODULE_PATH  #调用的模块路径
  -S,--su              run operations with su(deprecated, use become) #使用su和become结合使用
  -RSU_USER, --su-user=SU_USER  # su的话切换至哪个用户
  -s,--sudo            run operations withsudo (nopasswd) (deprecated, use
  become)  # 执行sudo命令
  -USUDO_USER, --sudo-user=SUDO_USER  # sudo
  -TTIMEOUT, --timeout=TIMEOUT  # 执行命令的超时时间
  --vault-password-file=VAULT_PASSWORD_FILE  ## ansible-vault加密的密码文件
  -v,--verbose         verbose mode (-vvv formore, -vvvv to enable
  connectiondebugging)  # 显示详细信息 -vvvv
  --version             showprogram's version number and exit ## 显示版本号
  修改配置文件 指定目标主机
  [root@centos7_1 ~]# vim/etc/ansible/hosts
  [web]
  172.16.252.18
  示例1、测试
[root@centos7_1 ~]#ansible web -m ping  
172.16.252.18 | SUCCESS => {
  
    "changed":false,
  
    "ping":"pong"
  
}
  
[root@centos7_1 ~]#
  示例2、测试以wang用户执行命令
[root@localhost~]# ansible web -m ping -u wang  #很明显下面报错了。  
172.16.250.90 | UNREACHABLE! => {
  
    "changed":false,
  
    "msg":"Failed to connect to the host via ssh: Permission denied
  
    (publickey,gssapi-keyex,gssapi-with-mic,password).\r\n",
  
    "unreachable":true
  
}
  
[root@localhost ~]# ssh-copy-id -i .ssh/id_rsa wang@172.16.250.90
  
#将密钥传输到对方wang用户
  
wang@172.16.250.90's password:
  
Now try logging into the machine, with "ssh 'wang@172.16.250.90'",and check in:
  
  .ssh/authorized_keys
  

  
to make sure we haven't added extra keys that you weren't expecting.
  
[root@localhost ~]# ansible web -m ping -u wang  #再次执行命令成功
  
172.16.253.252 | SUCCESS => {
  
    "changed":false,
  
    "ping":"pong"
  
}
  
[root@localhost ~]#

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-543113-1-1.html 上篇帖子: ansible-playbook批量部署安装tomcat 下篇帖子: Ansible自动化部署之Play book的使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表