ansible全面介绍及运维工程师日常工作解析
运维自动化发展历程及技术应用
- 本地部署
(on-permises)
自己买硬件服务器,自己部署系统,开发应用程序 - 基础设施即服务
(laas---infrastructure as a server)
硬件通过购买的方式(阿里云/AWS/腾讯云),提供基本硬件架构,有了硬件后自己只需要按需求部署系统/软件应用即可 - 平台即服务
(paas---Platform as a service)
通过购买(阿里云/腾讯云/AWS等)云服务,在购买的时候会把系统环境一并做好,只需要在服务器上做应用开发就可 - 软件即服务
(saas---software as a service)
从硬件到操作系统再到应用开发全部一站式购买,只需要付钱购买就行,(有的带有WEB页面,直接交互式按需求部署即可)
例如:淘宝,不需要自己买服务器开发网站应用,只需要交钱给淘宝然后在淘宝上创建页面即可,省去的购买服务器,找人开发页面的过程
后面的英文单词及概念要记住!
自动化运维应用场景
- 文件传输
- 命令执行
- 应用部署
- 配置管理
- 任务流编排
企业实际应用场景分析
- Dev开发环境
使用者: 程序员
功能: 程序员开发软件,测试BUG的环境
管理人员: 程序员
一般是由程序员自行管理,运维不要接收
- 测试环境
使用者: QA测试工程师
功能: 测试经过Dev环境测试通过的软件的功能
管理人员: 运维
说明:
测试环境往往有很多套(IOS平台/安卓平台),测试环境满足测试功能即可,不宜过多
(1)测试人员希望测试环境有多套,公司的产品多产品线并发,鸡即多个版本意味着多个版本同步测试
(2)通过测试环境有多少套和产品线数量保持一样
发布环境
代码发布机,有些公司为堡垒机
(安全屏障)
使用者: 运维
功能: 发布代码到生产环境
管理人员: 运维(需要有经验的)
发布机: 往往需要2台(主备)生产环境
使用者: 运维,少数情况开放权限给核心开发人员,极少数公司将权限完全开放给开发人员并其维护,(不要随便给其他人权限,出问题后需要承担责任!)
功能: 对用户提供公司产品的服务
管理人员: 只能是运维
生产环境服务器数量: 一般比较多,且应用非常重要.往往需要自动工具协助部署配置应用灰度环境
生产环境的一部分
使用者: 运维
功能: 在全量发布代码前将代码的功能面向少量精准用户发布的环境,可基于主机或用户执行灰度发布
案例:
- 基于主机发布
共100台生产服务器,先发布其中10台服务器,
这10台服务器
就是灰度服务器
,有问题的话也是这10台上的用户受到影响,遇到问题立马解决
- 基于用户发布
比如利用会员机制或者一部分用户(优先尝鲜使用新版本),这部分人优先使用新版本,如果没问题后在进行全面升级版本
- 基于地区发布
比如有些软件只能某个地区使用的,一个地区一个地区的逐渐升级版本
管理人员: 运维
灰度环境: 往往该版本功能变更较大,为保险起见特意先让一部分用户优化体验该功能,待这部分用户使用没有重大问题的时候,再全量发布至所有服务器.
- 程序发布
预发布验证
新版本的代码先发布到服务器(跟线上环境配置完全相同,知识未接入到调度器),放到测试服务器上线测试(不对外发布使用)程序发布
不能导致系统故障或造成系统完全不可用
不能影响用户体验
(类似于飞机空中加油!
ヾ(◍°∇°◍)ノ゙)灰度发布
发布路径
例如:
/webapp/zhanshen-1.1 #用这个版本就生成一个/webapp/zhanshen软连接
/webapp/zhanshen #这是一个软连接,用户访问次目录,
/webapp/zhanshen-1.2 #用这个版本就把1.1版本删除后再生成一个/webapp/zhanshen软连接
- 发布过程
在调度器上下线一批主机(标记为maintanance状态)--> 关闭服务 --> 部署新版本的应用程序 --> 启动服务 --> 在调度器上启用这一批服务器 - 自动化灰度发布
自动化脚本/自动化运维发布平台来代替上面提到的复杂的发布过程
常用自动化运维工具
- ansible:语言开发:Python-->
agentless(无客户端/无代理)
-->中小型环境 - saltstack:语言开发:Python-->一般需部署
agent(客户端)
,执行效率更高 - puppet:语言开发:ruby-->功能强大,配置复杂,重型,适合大型环境
- fabric:语言开发:python-->
agentless
- chef:语言开发:ruby-->国内应用很少
- cfengine
- func
解释说明:
主控端:
被控端:代理(安装agent客户端/代理程序), 无代理(利用SSH服务)
(1)agentless(无客户端/无代理)
同时因为SSH是每台Linux主机系统必装的软件,所以Ansible无需在远程主机端安装任何额外进程,即可实现Agentless(无客户端),进而助力其实现去中心化的思想,基于ssh性能也会略低一些,适合中小环境
(1.1)ansible也支持agent的方式,即所谓的“pull”
的模式,就是通过一个客户端去拉取
要执行的任务(2)
agent(客户端)
saltstack必须在客户端安装代理才可以控制被控端,虽然部署agent会麻烦,但是功能上也会更强大一些,性能也会高很多,适合大型环境
ansible发展史
- ansible
- 创始人,
michael DeHaan
(cobbler与func的作者) - 2012-03-09,发布0.0.1版本,被红帽收购
- 2015-10-17,Redhat宣布收购
ansible软件介绍
(1)Ansible是一个部署一群远程主机的工具
。这里“远程主机(Remote Host)”是指任何可以通过SSH登录
的主机,所以它既可以是远程虚拟机或物理机,也可以是本地主机。
Ansible通过SSH协议实现管理节点与远程节点之间的通信
。理论上来说,只要能通过SSH登录到远程主机来完成的操作,都可以通过Ansible实现批量自动化操作。
(2)涉及命令管理操作:复制文件,安装服务,启动管理服务等等.
(3)利用ssh方式和ansible的区别
ssh秘钥+脚本 简单实用,看起来比较LOW,需要人工写脚本
,类似inotify。
ansible有配置文件
,可以多线程
直接实现。不需要写脚本,类似sersync。