codecamp

Ansible 前言

冻仁在学时很喜爱《Unix 与 Linux 自动化管理》一书,并幻想著有朝一日也能达到自动化管理的境界。但对于 IT 维运者而言,有时间写笔记就很难了,更别说是把安装 (Setup)部署 (Deploy)安全性更新 (Security Upgrade) 等步骤写成可以自动化的 Script!

冻仁从 2015 年末时开始接触 Ansible,才知道有这么个比 Shell Script 和 Python 还好用的组态管理工具 (Configuration management Tool) 1,相信通过 Ansible 的帮助一定可以让我们大家都提早下班的!(笑)

automate_with_ansible_basic-01.jpg

本次将沿用冻仁先前的简报,并借由图文并茂的方式弥补简报不足的地方。

现代 IT 人是什么?

对于冻仁而言,现代的 IT 人得具备十八般武艺,从系统规划部署 (Deployment)开发 (Development)测试 (QA)维运 (Operations)监控 (Monitoring) 到效能优化 (Performance Optimisation) 等样样都要融汇贯通。

在现代,有个叫「DevOps」的名词概括了不少技能和工具,如 Ansible, Chef, Docker container, Git, Jenkins CI, Vagrant, Zabbix monitoring server … 等,冻仁在此就不多述。(若想深入了解 DevOps 是什么?2 欢迎加入 DevOps Taiwan 社团)

简而言之,现在的资讯人员 (IT Engineer) 除了要会管机器、管网络、on-call 之外,还得要会写些自动化的工具来辅助自己,不然是难以在下一个世代生存的!

automate_with_ansible_basic-02.jpg

不管是从Ops 跨到 Dev,还是从 Dev 跨到 Ops,到头来都是一样,就看哪边投的技能点数比较多!

以下是冻仁很喜欢对照表,多年前的冻仁常常耗费不少的时间在安装作业系统架设公司业务所需的大大小小服务、写写工作日记提醒自己改了什么设定;如今冻仁会借由虚拟化技术云端运算组态管理工具等,在相对快速的时间里完成任务。

automate_with_ansible_basic-03.jpg

写笔记不如写工具!更何况还是可重复使用的工具!!

导入自动化组态技巧的好处是什么?

在提好处之前,先来说说冻仁接触「自动化组态技巧」后的坏处有哪些?

  1. 学了一套组态工具后就会想用它一统天下!
  2. 原先以为学好 Ansible 以后,就可以不用继续看官方文件,但事实正好相反。(笑)
  3. 会不断的想把重复的工作自动化,然后丢上 GitHub 和 Ansible Galaxy

automate_with_ansible_basic-04.jpg

文中提到的组态,其实是从 Configuration management 翻译过来的。

导入自动化组态工具,除了可以减少重复性的工作外,最重要的可以提升正式环境 (Production) 的稳定性可靠性

automate_with_ansible_basic-05.jpg

图片来源:Ansible as Automation Glue

当每次的版本释出 (release)、部署 (deployment) 都会出现不可预测的问题时,将会冒出许多例外工作,这将会大幅度拖累我们的工作进度。

automate_with_ansible_basic-06.jpg

养兵千日用在一时,当我们准备好,就可以在很短的时间内对正式环境进行部署和维护等变更工作,尤其是半夜 12 才要上线的那种 ...。

还记得那一年,开发者 (Developers) 透过 FTP 手动更新程式,发现臭虫 (bug) 想退版却无从下手的惨痛经验!这不只拖累公司整体的业务,还引起了顾客的不满。

但其实我们只需透过自动化组态工具管理这些变更,再搭配版本控制系统和测试,就能有效避免这类问题发生。

准备好了吗?Ansible 的大门就在前面了!

相关连结

1. 组态管理工具 (Configuration management Tool) 一般我们会简称为 CM Tool,而在业界我们还会用 Infrastructure as Code (IaC) 的字眼来形容这些工具。 ↩
2. 隔壁棚的 Miles 有专门撰写篇什么是 DevOps?的文章,不妨也參考一下喔。 ↩


Ansible 是什么
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }