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

[经验分享] ansible初步了解

[复制链接]

尚未签到

发表于 2018-7-29 14:29:18 | 显示全部楼层 |阅读模式
  运维自动化已经发展到了完善阶段,作为新时代的运维人员必须要掌握自动化运维的基本技能,并且运维正朝着工具制造的阶段发展,原本运维需要一些命令知识,目前一些大公司已经开始实现一键完成产品上线。原本的7x24已经变成了运维工具持续监控,出了问题实时向运维人员通知,同时需要一点人员协助机器监控。
  自动化运维经历了4个阶段:人工,这个阶段基本上是全部需要到机器上一步步操作;脚本,使用计划任务完成一些重复性工作;工具,这个阶段一个人可以管理大量的机器,常见的工具:puppet,saltstack,ansible;平台化,这时运维人员已经深入研究操作系统的很多组件的代码并且进行优化,开发运维工具实现流程化标准化。
一ansible基本工作流程
  这里我选择ansible主要是因为:入门简单,基于yaml定义脚本没有学习难度,无需客户端,基于ssh安全通信。当然ansible也有自己的缺点,在超大规模管理服务器的时候,并发性能远不如puppet和saltstack。下图是ansible工作原理图
DSC0000.png

  ANSIBLE PLAYBOOK是任务集,类似于脚本,由ansible调度大量主机执行其中的任务,调用直接使用ansible-playbook命令
  INVENTORY是被管理主机的清单,由/etc/ansible/hosts中定义
  MODULES是Ansible执行命令的功能模块,多数为内置的核心模块,也可自定义,使用ansible-glaxy加载别人定义的模块
  API 和PLUGINS是第三方提供的管理接口和模块功能的补充,基本上没用过,使用需要一定的技术门槛,
  USER直接和ansible交互直接使用ansible命令
  ansible-doc # 查看模块文档
  -l # 列出所以模块
  -s MODULESNAME # 查看某个模块的使用方法
  ansible-vault # 加密文件
  ansible-consle #交互式接口
二配置文件
  主配置文件/etc/ansible/ansible.cfg,基本上不用更改
  (1)[defaults]
  (2)[privilege_escalation]
  (3)[paramiko_connection]
  (4)[ssh_connection]
  (5)[accelerate]
  (6)[selinux]
  (7)[colors]
  /etc/ansible/hosts文件定义INVENTORY
  [GROUPNAME]
  ip|hostname
  。。。
三ansible常用模块
  command# 默认使用这个模块,执行shell命令,不支持|<>等等
  shell# shell模块,比command模块好用很多支持|<>等等
  copy # 复制文件到远程主机
  fatch # 下载远程主机的文件
  file# 更改远程主机文件
  hostname# 更改远程主机名字
  user # 给远程主机添加用户
  group # 给远程主机添加组
  cron# 计划任务
  yum# 安装软件
  service# 管理服务
四ansible 变量
1定义
  1.ansible setup中已经定义了很多变量可以直接引用
  2.自定义在hosts文件中的组如:
  [svr1:vars]
  http_port=808
  3.定义在主机后的变量
  [go]
  172.16.29.2 http_port=8080 hname=www120
  4.定义在playbook中vars
  5.命令行指定变量
  Ansible-playbook –e 调用
2引用` NAME `
  引用的时候一定要注意,引用前有等号一定不要加空格,这个错误犯了很难发现。
五ansible playbook的yaml格式
  先来一个案例
[root@centos7 ~]# vim /etc/ansible/hosts  
#定义一个组,给组内添加两个主机
  
[go]
  
172.16.29.10
  
172.16.29.20
  
[root@centos7 ansible]# vim httpd.yml
  
---
  
# 在哪个主机以哪些用户执行命令
  
- hosts: go
  
remote_user: root
  
tasks:
  
# 使用item迭代创建组
  
    -name: add group nginx
  
     user: name={{ item }} state=present
  
     with_items:
  
     - nginx
  
     - nginx1
  
# item引用字典创建用户
  
    -name: add user nginx
  
     user: name={{ item.name }} state=present group={{ item.group }}
  
      with_items:
  
     - { name: 'nginx',group: 'nginx' }
  
     - { name: 'nginx1',group: 'nginx1' }
  
# 安装nginx程序
  
    -name: install nginx
  
     yum: name=nginx state=present
  
# when判断
  
    -name: install conf
  
     template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
  
     when: ansible_distribution_major_version == "7"
  
# notify只调用handlers,并插入钩子tags,可以只执行这个name中的命令
  
    -name: start nginx
  
     tags: start
  
     service: name=nginx state=started
  
     notify:
  
       - check nginx
  
# 定义变量
  
vars:
  
    -vhost:
  
     - { listen: 80,servername: 'name' }
  
     - { listen: 88,servername: 'name1' }
  
    -hostname: name1
  
# 可选的执行命令
  
handlers:
  
    -name: check nginx
  
     shell: ss -tnl|grep '\<80\>'
  
[root@centos7 ~]# cp /etc/nginx/nginx.confansible/nginx.conf.j2
  
[root@centos7 ~]# vim nginx.conf.j2
  
# 算术运算和ansible setup变量引用
  
worker_processes {{ansible_processor_vcpus+1 }};
  
# for循环
  
{% for vhosts in vhost %}
  
server {
  
listen {{ vhosts.listen }};
  
# if判断
  
{% if vhosts.servername is defined %}
  
server_name {{ vhosts.servername }};
  
{% endif %}
  
}
  
{% endfor %}
  这个案例我就不总结了,因为第6节就是对这个playbook的拆分和深入理解。
  以下是一些很无聊的规范,但是有助于我们写playbook脚本
  1)首先需要以“---”(3个减号)开始,且需顶行首写。
  2)次行开始正常写Playbook的内容,但笔者一般建议写明该Playbook的功能。
  3)使用#号注释代码。
  4)缩进必须是统一的,不能空格和tab混用。
  5)缩进的级别也必须是一致的,同样的缩进代表同样的级别,程序判别配置的级别是通过缩进结合换行来实现的。
  6)YAML文件内容和Linux系统大小写判断方式保持一致,是区别大小写的,k/v的值均需大小写敏感。
  7)k/v的值可同行写也可换行写。同行使用:分隔,换行写需要以-分隔。
  8)一个完整的代码块功能需最少元素需包括 name: task。
  9)一个name只能包括一个task。
六ansible roles
  模板目录结构如下,一定要遵从规范,否则命令很难执行成功。
  roles # roles目录
  project1# 具体roles的名称
  tasks# roles中普通操作命令,对应playbook中的tasks内各种name
  templters # roles中的模板操作命令,对应playbook中的tasks内的templters命令
  vars # roles中的变量,对应playbook中的vars
  handles # roles中的可选程序,对应playbook中的handlers
  files # 模板文件的存放位置
  default # 默认属性
  mate # 其它
  project2# 具体roles的名称
  。。。
  每个目录的的常用用法可以参考第五节的案例,常用的用法基本上都让我实现了个遍:)
总结
  ansible是一个非常重要的工具日常使用最多的工具,很多参数很难一次记住,因此熟练查看文档ansible-doc就变的尤为重要,并且ansible的文档可以说是最好的。有一个原则能用ansible模块解决的问题坚决不用shell模块。

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

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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