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

[经验分享] ansible--基础

[复制链接]
发表于 2018-7-29 11:49:23 | 显示全部楼层 |阅读模式
  马哥出品 ansible中文文档:http://www.ansible.com.cn/index.html
  ansible介绍:
  ansible是个什么东西呢?官方的title是“Ansible is Simple IT Automation”——简单的自动化IT运维管理工具。这个工具的目标有这么几项:让我们自动化部署APP;自动化管理配置项;自动化的持续交付;自动化的(AWS)云服务管理。基于Python开发,可实现对多台服务器进行批量配置、程序的部署及指令的运行。大大减少了在运维工程中的工作量。
  ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
  (1)、连接插件connection plugins:负责和被监控端实现通信;
  (2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
  (3)、各种模块核心模块、command模块、自定义模块;
  (4)、借助于插件完成记录日志邮件等功能;
  (5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。
  ansible特点:
  1.简单,ansible自然的自动化语言与允许运维人员,开发者,和IT管理人员在很短的时间内完成自动化项目。
  2.无代理,默认使用SSH而不需要客户端。避免了额外的端口开启,提高安全性,避免不必要的管理,减少CPU的使用
  3.干的活多,ansible能干自动完成软件部署,配置管理,流程化管理,和cloud provisioning。
  ansible安装:
  由于ansible是用python开发的,安装过程中依赖众多python模块,这里建议yum安装ansible,想要更新版本的可下载源码编译安装,
  yum install ansible -y
  yum安装ansible的默认配置文件路径,ansible.cfg是ansible的主配置文件,
  ansible]# ls /etc/ansible/
  ansible.cfg   hosts  roles
  hosts是默认的hostfile路径,可配置DNS域名,ip。
  通过ssh key方式连接远端客户机,省去密码环节
  ssh-keygen -t rsa -P ''
  ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.137.130
  注意这个地方是有个坑的,由于ansible执行的时候需要把临时模块拷贝到客户端,而默认的拷贝方式是通过sftp来的方式拷贝的,如果你的客户端没有装sftp,那么执行ansible会出错的。
  如果没装sftp可以用scp。 下面的这一行本来是注释起来的,把注释去掉就OK了
  ansible]# grep "scp_if_ssh" /etc/ansible/ansible.cfg
  scp_if_ssh = True
  还有个坑,即使装了sftp也不一定能用,你的ssh要启用它才OK。
  ansible]# grep "Subsystem"  /etc/ssh/sshd_config
  Subsystem sftp /usr/lib/openssh/sftp-server
  ansible的基本工作流程:
  1.ansible通过OPENSSH或者python的pramamiko连接客户端
  2.把ansible module推送到客户端。
  ansible]# grep "remote_tmp" /etc/ansible/ansible.cfg
  remote_tmp     = $HOME/.ansible/tmp
  ansible]# ansible one  -a "ls  ~/.ansible"
  salt-master | success | rc=0 >>
  tmp
  3.通过ssh执行客户端上的ansible module
  4.执行完毕
  5.删除刚刚推送过去的ansible module
  ansible基本命令行模块:
  ansible-doc -s 模块名     ##查看模块用法帮助
  ansible-doc -l            ##查看有哪些可用模块
  1.临时做小事情或一次性行为可用命令行,大型或经常重复使用的活用play-book
  2.命令行三剑客:command(默认),shell(支持管道,变量,),raw(客户机不能装python时使用)
  3.官方建议用command,shell和raw需要用到的时候再用
  command:命令模块,默认模块,用于远程执行命令
  -a 'COMMAND'
  ansible]# grep -n "module_name" ansible.cfg
  97:#module_name = command
  ansible all -a 'date'
  user:
  -a 'name= state={present|absent} system= uid='
  # ansible one -m user -a 'name=mysql uid=306 system=yes group=mysql'
  # ansible one -m user -a 'name=mysql shell=/sbin/nologin createhome=no'
  group:
  -a 'name= gid= state= system='
  # ansible one -m group -a 'name=mysql gid=306 system=yes'
  cron:修改定时任务
  -a 'name="" minute= hour= day= month= weekday= job= user= state='
  state状态
  present:增加
  absent:删除,配置name就可移除
  # ansible one -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job"'
  copy:复制文件到远程主机
  -a 'dest= src= mode= owner= group='
  src=:定义本地源文件路径
  dest=:定义远程目标文件路径
  content=:取代src=,表示直接用此处指定的信息生成目标文件内容;
  # ansible all -m copy -a 'src=/etc/fstab dest=/tmp/fstab.ansible owner=/root mode=640'
  # ansible all -m copy -a 'content="Hello Ansible\nHi MageEdu" dest=/tmp/test.ansible'
  file:设定文件属性
  -a 'path= mode= owner= group= state={directory|link|present|absent} src='
  path=:指定文件路径,可以使用name或dest来替换
  创建文件的符号链接
  src=:指明源文件
  path=:指明符号链接文件路径
  # ansible all -m file -a 'path=/tmp/fstab.link src=/tmp/fstab.ansible state=link'
  # ansible all -m file -a "path=/tmp/resolv.conf state=absent"
  # ansible salt-master -m file -a 'dest=/tmp/ansible.log  owner=lixc group=lixc mode=644
  state=touch'   #touch:远程主机创建文件
  force:需要在两种情况下强制创建软链接,
  一种是源文件不存在,但之后会建立的情况下;
  另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no
  group:定义文件/目录的属组
  mode:定义文件/目录的权限
  owner:定义文件/目录的属主
  path:必选项,定义文件/目录的路径
  recurse:递归设置文件的属性,只对目录有效
  src:被链接的源文件路径,只应用于state=link的情况
  dest:被链接到的路径,只应用于state=link的情况
  state:
  directory:创建递归文件,如果目录不存在,就创建目录,
  file:即使文件不存在,也不会被创建
  link:创建软链接
  hard:创建硬链接
  touch:如果文件不存在,则创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
  absent:删除目录、文件或者取消链接文件
  ping:测试指定主机能否连接
  yum:安装程序包
  -a 'name= state={present|latest|absent}'
  name:指明要安装的程序包,可以带上版本号
  state=:present,latest表示安装,absent表示卸载
  # ansible one -m yum -a 'name=mysql-server state=latest|installed'
  还有一个后台执行的功能。
  -B 30是设置后台执行时间为30秒,
  -P2是没两秒钟报告一次状态,这个当你的任务要执行很长时间的时候可以用。
  # ansible one -m yum -a 'name=apache2 state=installed'  -B 30 -P2 >>/dev/null
  service:指定运行状态
  -a 'name= state={started|stopped|restarted} enabled='
  name=:服务名称
  state=:状态,取值有started,stopped,restarted
  enabled=:是否开机自动启动,取值为true或者false
  shell: ##可支持管道,变量,command模块不支持,
  例:echo "centos" |passwd --stdin centos
  # ansible storm_cluster -m shell -a "/tmp/rocketzhang_test.sh"
  script:##将本地脚本复制到远程主机并运行之;要使用相对路径指定脚本
  -a '/path/to/script'
  setup:##收集远程主机的facts
  每个被管理节点在接收并运行管理命令之前,会将自己主机相关信息,如操作系统版本,ip地址等报告给远程的ansible主机
  Inventory的默认路径是在/etc/ansible/hosts,分为静态和动态两种
  静态:需要手工的把你要管理的主机写进去。
  动态:事先有一个资源管理系统,里面有所有主机信息,用脚本程序把资源管理系统里的信息给拉过来,以json格式呈现
  配置静态Inventory:
  ansible]# cat -n /etc/ansible/hosts
  1 [alltest:children]
  2 salt
  3 leihuo
  4
  5 [salt]
  6 salt-master  ansible_ssh_user=lixc ansible_ssh_pass=123456
  7 10.240.162.112  ansible_connection=paramiko
  8
  9 [leihuo]
  10  lixc ansible_ssh_host=192.168.131.203 ansible_ssh_port=21100
  11  10.240.162.11[1:9]:22
  第1行,alltest这个组包含俩子组分别是下面的salt,和leihuo
  第6行可以设置主机的默认连接用户,及密码
  第7行可以设置ssh的连接方式,默认是openssh,我这里用paramiko,不用官网推荐用openssh,因为openssh查询key的时候,很耗时,效率不高。
  第10行,可以给主机随便取个别名,这里的“lixc”就是一个别名,如果ssh默认端口不是22,这里可以
  指定特定的端口,
  指定ssh端口也可以像第11行,这么指定。
  不过以上两种指定ssh端口方法,只针对我们有少部分的主机是特殊端口,如果我们所有主机都是指定的端口,配置文件里有个选项,改成我们需要的端口就OK了,修改后对全局有效
  ansible]# grep "remote_port" /etc/ansible/ansible.cfg
  remote_port    = 22
  第7行和11行,是俩相同的主机,说明同一主机可以在不同的组中。在现实当中就像我一台服务器即可以装mysql也可以装apache是一个道理。
  变量:
  ansible的变量主要给后面的playbook使用,分为主机变量和组变量
  ansible]# cat -n /etc/ansible/hosts
  1 [alltest:children]
  2 salt
  3 leihuo
  4
  5 [salt]
  6 salt-master  salt-port=4505 mysql-port=3306
  7 10.240.162.112  salt-path=/usr/bin/salt-call
  8
  9 [leihuo]
  10  lixc ansible_ssh_host=192.168.131.203 ansible_ssh_port=21100
  11  10.240.162.11[1:9]:22
  12  [alltest:vars]
  13  ls-path=/bin/ls
  14  liss=lisisi
  6,7行设置主机变量
  12-14行,设置的为alltest这个组的变量。组变量就是,我这个组的成员都可以用
  当然我们也可以不在/etc/ansible/hosts里面定义变量,也可以把变量写进单独的文件里,不过变量定义的形式就不是谁=谁,这么个形式了。而是遵循yaml语法的key: value的形式。
  把变量写进文件:
  ansible]# for dir in {host_vars,group_vars};do ls /etc/ansible/${dir};done
  10.240.162.112  salt-master
  alltest
  文件定义格式:
  ansible]# cat /etc/ansible/host_vars/salt-master
  ---
  salt-port: 4505
  mysql-port: 3306
  ansible目标主机匹配patterns:
  匹配所有主机
  *或者all
  匹配多个组
  salt:leihuo
  在salt这个组里,但不能在leihuo这个组里的主机
  salt:!leihuo
  取两个组的交集
  salt:&leihuo
  排除某一主机
  ansible-playbook site.yaml --limit salt-msater
  当然也可以用正则,在/etc/ansible/hosts里面去定义。如
  ~salt(master|minion)\.li*\.com

运维网声明 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-542992-1-1.html 上篇帖子: Ansible-playbook远程自动部署zabbix agent(一) 下篇帖子: ansible--playbooks
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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