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

[经验分享] ansible批量部署服务

[复制链接]

尚未签到

发表于 2018-7-29 06:01:29 | 显示全部楼层 |阅读模式
一.ansible
  1.概念
  ansible是一个基于Python开发的自动化运维工具!
  其功能实现基于SSH远程连接服务!
  ansible可以实现批量系统配置、批量软件部署、批量文件拷贝、批量运行命令等功能
  2.网址:
  http://docs.ansible.com/    官网
  3.特点
  不需要单独安装客户端(no agents),基于系统自带的sshd服务,sshd就相当于ansible的客户端。
  不需要服务端(no servers)。
  需要依靠大量的模块实现批量管理。
  4.优点:
  (1) ansible软件特点:
  · 可以实现批量管理/部署
  ansible oldboy -m command -a "hostname"   批量执行命令
  · 编写剧本-脚本(playbook)---针对重复性的操作
  (2) ansible核心功能:
  · pyYAML-----用于ansible编写剧本所使用的语言格式(saltstack---python)
  · paramiko---远程连接与数据传输
  · Jinja2-----用于编写ansible的模板信息(扩展部分)
  5.安装:
  yum -y install ansible   管理端安装软件
  yum -y install libselinux-python  被管理端关闭selinux服务
二.ansible部署
  【命令部署】
  部署好基于ssh密钥认证管理方式认证环境
  (1)创建密钥对
  ssh-keygen -t rsa
  (2)分发密钥对
  ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.41
  ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.31
  ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.7
  (3)登陆验证
  ssh 172.16.1.41
  ssh 172.16.1.31
  ssh 172.16.1.7
  【脚本部署】
  1.批量部署
  #!/bin/bash
  #create key pair
  \rm -f /root/.ssh/id_dsa*
  ssh-keygen -t dsa -f /root/.ssh/id_dsa -P "" -q
  #fenfa key file
  for ip in 7 31 41
  do
  echo "==== fenfa key to host 172.16.1.$ip======================"
  sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no root@172.16.1.$ip"
  echo "=================== fenfa end ==========================="
  echo ""
  done
  2.批量检查
  #!/bin/bash
  cmd=$1
  for ip in 7 31 41
  do
  echo "====host 172.16.1.$ip info===="
  ssh root@172.16.1.$ip "$cmd"
  echo "=============================="
  echo ""
  done
三.配置ansible hosts文件
  ansible主配置文件/etc/ansible/ansible.cfg
  配置hosts主机文件 vim /etc/ansible/hosts
  [root]
  172.16.1.7
  172.16.1.31
  172.16.1.41
四.ansible 命令语法
  (1)指定管理单台主机方法
  例:ansible 172.16.1.11 -m user -a "name=plp state=absent remove=yes"
  (2)指定管理主机组
  例:ansible KS -m user -a "name=plp group=root"
  (3)指定管理所有主机
  例:ansible all -m user -a "name=plp group=root"
DSC0000.jpg

DSC0001.jpg

五.ansible重要的模块项
  1.command模块参数
  (1) -k    ansible基于密码口令管理主机
  -m    指定模块
  -a    指定动作
  例:[root@m01 ~]#ansible 172.16.1.31 -m ping -k
  (2)chdir    执行命令前切换到指定目录
  例:ansible root -m command -a "chdir=/tmp touch 123.txt"
  (3)creates   执行命令前进行判断,有就不执行,没有执行
  例:ansible root -m command -a "creates=/tmp/123.txt touch 123.txt"
  (4)removes  如果这个参数对应的文件不存在,就不运行command
  例:ansible root -m command -a "remove=/tmp/123.txt touch 123.txt"
  (5)free_from  可以输入任何命令,除了特殊变量和符号
  2. copy模块参数(将数据推送远程主机)
  (1)src       源(本地)路径
  (2)dest      目标路径
  例:ansible KS -m copy -a "src=/tmp/888.txt dest=/tmp"
  (3)owner     属主
  (4)group      属组
  (5)mode      定义文件/目录权限
  例:ansible root -m cpoy -a “src=/tmp/123.txt dest=/backup owner=oldboy group=oldboy mode=600”
  (6)backup     以时间戳名做备份
  例:ansible root -m cpoy -a “src=/tmp/123.txt dest=/backup backup=yes”
  (7)force       传输内容不同时做覆盖
  例:ansible root -m cpoy -a “src=/tmp/123.txt dest=/backup force=no”
  (8)content     替代sec传输时,将文件内容设置为指定值(短点)
  remote_src  如果为 False,将搜索源信息在本地/管理及机器上
  如果为True,将到远程/目标主机的机器上搜索
  默认为false,目前remote_src不支持递归拷贝
  例:ansible root -m cpoy -a “content=’my world’ dest=/backup/123.txt”
  3.shell 模块参数(执行命令在节点上,万能模块)
  例:ansible oldboy -m shell -a "uptime;df -h"
  ansible oldboy -m shell -a "/server/scripts/test01.sh"
  注意:shell模块运行脚本,需要将脚本推送到远程主机中,需要授权脚本文件为执行权限
  4.script模块参数(将本地运行脚本信息在远程主机中进行)
  例:ansible root -m script -a "/server/scripts/yum-ipstate.sh"
  5.yum模块(yum源安装软件)
  (1)name     软件名
  (2)state      状态
  (3)installed   安装
  例:ansible root -m yum -a "name=tree state=installed"
  6.service 模块(服务管理)
  (1)name      服务名
  (2)state      状态
  (3)enabled    关闭开启自启
  例:ansible root -m service -a "name=iptables state=stopped enabled=yes"
  7.file 模块(修改创建文件/目录)
  (1)mode   定义文件/目录权限
  例:ansible root -m file -a "dest=/backup/123.txt mode=0600"
  (2)src      要连接的文件路径
  (3)path    指定文件路径信息(别名dest,name)
  (4)state    状态
  =directory 所有不存在的子目录将会被创建,并且从1.7开始支持设置目录权限
  =file      如果文件不存在将不能被创建
  =link      符号链接将被创建或更改。
  =hard     便会创建出硬链接
  =absent   录将被递归删除以及文件,而链接将被取消链接。
  =touch    如果路径不存在将创建一个空文件
  创建文件:
  例:ansible root -m file -a "dest=/backup/123.txt state=touch"
  创建目录:
  例:ansible root -m file -a "dest=/backup/123 state=directory"
  删除文件:
  例:ansible root -m file -a "dest=/backup/123.txt state=absent"
  创建连接文件:
  例:ansible root -m file -a "dest=/backup/123 state=link"
  8.cron模块(定时任务模块)
  (1)minute----------------分
  例:ansible root -m cron -a "name=’rsync system time’ minute=3 job=’/usr/sbin/ntpdate ntp1.aliyun.com’ "
  (2)hour-------------------时
  (3)day---------------------天
  (4)month-----------------月
  (5)weekday--------------周
  (6)job----------------------做什么事
  (7)name-------------------对定时任务信息做备注
  (8)state--------------------present表创建(默认),absent表示删除
  例:ansible root -m cron -a "name=’rsync system time’ state=absent "
  (9)disable-----------------yes表注释/no不注释
  例:ansible root -m cron -a "name=’rsync system time’ minute=3      job=’/usr/sbin/ntpdate ntp1.aliyun.com’ disable=yes"
  9.mount模块
  (1)fstype    指定挂载文件系统类型
  (2)opts      挂载时指定挂载参数
  (3)path      制定挂载路径
  (4)src        指定那个目录进行挂载
  (5)state
  =mounted     在fstab文件中的设备将被激活挂载和适当配置
  =unmounted   设备将被卸载并不会改变fstab文件信息
  例:ansible root -m mount -a "state=mounted fstype=nfs src=’172.168.1.31:/data/’ path=/mnt"
  例:ansible mount -m setup -vvvv  输出详细信息方法
  10.user模块
  name  用户名
  group  用户组
  state=absent  删除用户
  remove=yes   是否删除
  例:ansible KS -m user -a "name=plp group=root"   创建用户
  ansible 172.16.1.11 -m user -a "name=plp state=absent remove=yes" 删除用户
六.ansible软件颜色信息
  绿色:  表示查看信息,对远程主机未做改动的命令
  红色:  批量管理产生错误信息
  ×××:  对远程主机做了相应改动
  粉色:  对操作提出建议或忠告
七.ansible基于密钥管理
  [root]
  172.16.1.41 ansible_ssh_user=root ansible_ssh_pass=123456
  172.16.1.31 ansible_ssh_user=root ansible_ssh_pass=123456
  172.16.1.7 ansible_ssh_user=root ansible_ssh_pass=123456
八.编写ansible-playbook剧本
  1.编写格式说明
  ansible剧本格式:yaml语法格式(python脚本编写格式类似)
  rsync配置文件格式:ini语法格式
  sersync配置文件格式:xml语法格式
  2.YAML语法规则
  规则一:缩进(一个缩进两空格,注意一定不用tab)
  规则二:冒号(每个冒号后一定要有空格)
  规则三:短横线 - (短横线后面要空格)
  3.编写案例
  ansible-playbook --syntax-check cron.yml   剧本检查语法方法
  ansible-playbook -C cron.yml      -C模拟执行剧本
  ansible-playbook cron.yml        执行剧本
  (1)案例一
DSC0002.jpg

  (2)案例二
DSC0003.jpg

  4.剧本编写方式
  多主机单任务编写方式
  多主机多任务编写方式
  不同主机多任务编写方式

运维网声明 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-542689-1-1.html 上篇帖子: 运维神器 ansible 安装部署 下篇帖子: Ansible notes-Marvin
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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