ansible全面使用介绍及运维工程师日常工作解析

版权声明:转载请声明! https://blog.csdn.net/qq_34672033/article/details/89633294

ansible全面介绍及运维工程师日常工作解析

运维自动化发展历程及技术应用

  1. 本地部署(on-permises)
    自己买硬件服务器,自己部署系统,开发应用程序
  2. 基础设施即服务(laas---infrastructure as a server)
    硬件通过购买的方式(阿里云/AWS/腾讯云),提供基本硬件架构,有了硬件后自己只需要按需求部署系统/软件应用即可
  3. 平台即服务(paas---Platform as a service)
    通过购买(阿里云/腾讯云/AWS等)云服务,在购买的时候会把系统环境一并做好,只需要在服务器上做应用开发就可
  4. 软件即服务(saas---software as a service)
    从硬件到操作系统再到应用开发全部一站式购买,只需要付钱购买就行,(有的带有WEB页面,直接交互式按需求部署即可)
    例如:淘宝,不需要自己买服务器开发网站应用,只需要交钱给淘宝然后在淘宝上创建页面即可,省去的购买服务器,找人开发页面的过程

后面的英文单词及概念要记住!

自动化运维应用场景

  • 文件传输
  • 命令执行
  1. 应用部署
  2. 配置管理
  3. 任务流编排

企业实际应用场景分析

  • Dev开发环境
    使用者: 程序员
    功能: 程序员开发软件,测试BUG的环境
    管理人员: 程序员

一般是由程序员自行管理,运维不要接收

  • 测试环境
    使用者: QA测试工程师
    功能: 测试经过Dev环境测试通过的软件的功能
    管理人员: 运维

说明:
测试环境往往有很多套(IOS平台/安卓平台),测试环境满足测试功能即可,不宜过多
(1)测试人员希望测试环境有多套,公司的产品多产品线并发,鸡即多个版本意味着多个版本同步测试
(2)通过测试环境有多少套和产品线数量保持一样

  • 发布环境
    代码发布机,有些公司为堡垒机(安全屏障)
    使用者: 运维
    功能: 发布代码到生产环境
    管理人员: 运维(需要有经验的)
    发布机: 往往需要2台(主备)

  • 生产环境
    使用者: 运维,少数情况开放权限给核心开发人员,极少数公司将权限完全开放给开发人员并其维护,(不要随便给其他人权限,出问题后需要承担责任!)
    功能: 对用户提供公司产品的服务
    管理人员: 只能是运维
    生产环境服务器数量: 一般比较多,且应用非常重要.往往需要自动工具协助部署配置应用

  • 灰度环境
    生产环境的一部分
    使用者: 运维
    功能: 在全量发布代码前将代码的功能面向少量精准用户发布的环境,可基于主机或用户执行灰度发布
    案例:

  1. 基于主机发布

共100台生产服务器,先发布其中10台服务器,这10台服务器就是灰度服务器,有问题的话也是这10台上的用户受到影响,遇到问题立马解决

  1. 基于用户发布

比如利用会员机制或者一部分用户(优先尝鲜使用新版本),这部分人优先使用新版本,如果没问题后在进行全面升级版本

  1. 基于地区发布

比如有些软件只能某个地区使用的,一个地区一个地区的逐渐升级版本

管理人员: 运维
灰度环境: 往往该版本功能变更较大,为保险起见特意先让一部分用户优化体验该功能,待这部分用户使用没有重大问题的时候,再全量发布至所有服务器.

  • 程序发布
  1. 预发布验证
    新版本的代码先发布到服务器(跟线上环境配置完全相同,知识未接入到调度器),放到测试服务器上线测试(不对外发布使用)

  2. 程序发布
    不能导致系统故障或造成系统完全不可用
    不能影响用户体验
    (类似于飞机空中加油!ヾ(◍°∇°◍)ノ゙)

  3. 灰度发布

  4. 发布路径
    例如:

/webapp/zhanshen-1.1  #用这个版本就生成一个/webapp/zhanshen软连接

/webapp/zhanshen  #这是一个软连接,用户访问次目录,

/webapp/zhanshen-1.2  #用这个版本就把1.1版本删除后再生成一个/webapp/zhanshen软连接
  1. 发布过程
    在调度器上下线一批主机(标记为maintanance状态)–> 关闭服务 --> 部署新版本的应用程序 --> 启动服务 --> 在调度器上启用这一批服务器
  2. 自动化灰度发布
    自动化脚本/自动化运维发布平台来代替上面提到的复杂的发布过程

常用自动化运维工具

  • 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
  1. 创始人,michael DeHaan(cobbler与func的作者)
  2. 2012-03-09,发布0.0.1版本,被红帽收购
  3. 2015-10-17,Redhat宣布收购

ansible软件介绍

(1)Ansible是一个部署一群远程主机的工具。这里“远程主机(Remote Host)”是指任何可以通过SSH登录的主机,所以它既可以是远程虚拟机或物理机,也可以是本地主机。
Ansible通过SSH协议实现管理节点与远程节点之间的通信。理论上来说,只要能通过SSH登录到远程主机来完成的操作,都可以通过Ansible实现批量自动化操作。

(2)涉及命令管理操作:复制文件,安装服务,启动管理服务等等.

(3)利用ssh方式和ansible的区别
ssh秘钥+脚本 简单实用,看起来比较LOW,需要人工写脚本,类似inotify。
ansible有配置文件,可以多线程直接实现。不需要写脚本,类似sersync。

猜你喜欢

转载自blog.csdn.net/qq_34672033/article/details/89633294