从cm到docker
nginx
devops
开发运维一体化
cm
配置管理框架
why
- 如何管理成千上万台机器?安装、配置、更新、同步、调错...
- 需要反复编写完成各类管理任务的系统脚本,不同的系管编写的脚本难以协同
- 需要兼容不同的系统与平台,linux、windows、UNIX以及各类发行版本、各类历史版本
what
cm的主流实现如puppet、chef、Ansible等
- 一种自动化配置管理工具,即程序化的驱动,通过编写任务脚本,自动完成各类配置任务
- 提供配置语言及基础框架,允许使用OOP等高级语法来进行脚本编程,从而易于使用、易于重用、易于扩展
- 开发社区提供各种模块、插件或者方案recipes
- 跨平台、跨系统兼容
example
FILE=/my/file
chmod 640 $FILE
chown foo $FILE
chgrp bar $FILE
wget -O $FILE "http://my.puppet.server/dist/$FILE"
# where the URL contains "Hello world"
file { "/my/file":
mode => 640,
owner => foo,
group => bar,
content => "Hello world",
}
links
虚拟机
虚拟机,快速构建系统
why
- 配置管理软件不能解决主机系统的基础安装与配置(如网络IP)
- 既然各机器配置基本相同,何不直接clone
what
- 在host系统上虚拟guest系统
- vmware、virtual box、XEN等
- 借助于云计算,虚拟机从桌面走向服务器
link
vagrant
程序化的控制和配置虚拟主机
why
- 虚拟机的重启、开关、调试等
- 虚拟机的个性化定制,生成不同系统、版本及配置的虚拟机,参看各种云
- clone之后,仍有配置的需求
what
- Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境
- 桌面使用
- 可安装多个系统,不干扰主系统的配置
- 项目开发场景中,可提供统一的开发环境,开箱即用
- 服务端使用
link
docker
容器:应用级的虚拟机
why
- 虚拟机太重:完全虚拟了整个guest系统,使得其实现效率低下,对host系统的资源占用过大
- OS通常都可划分 为多层,如内核级、系统级、用户级、应用级,那么,可否仅仅只对高层级的 API或调用进行虚拟,而将低层级的API交由host系统原生实现(或者其它类似方法)
- 虚拟机的用途多是构建各种应用运行或开发环境。那么,这些应用环境的安装可否简单化?其构建过程和结果是否能重用?
- 就像用apt-get安装软件
- 就象代码模块或扩展一样,继承和改后可以再发布
what
- Docker是一个开源的引擎,运行于host主机之上,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器
- 比虚拟机更高效,节省host资源
- 可以从 image repository 下载各类已做好的docker 映像,开箱即用
- 可以在下载的image中,进行各种操作或配置后,再打包并发布共享出去。
link
比较
Vagrant借助chef等cm工具实现虚拟机的管理和配置
Vagrant是构建在虚拟化技术之上的虚拟机运行环境管理工具。通过Vagrant可以方便实现的对虚拟机的管理,包括建立和删除虚拟机、配置虚拟机运行参数、管理虚拟机运行状态、自动化配置和安装开发环境必须的各类软件、打包和分发虚拟机运行环境等。
Vagrant的运行需要依赖某项具体的虚拟化技术,比如VirtualBox, VMware, AWS等,同时一些配置脚本比如shell脚本、Chef或Puppet可以用来管理虚拟环境。
link
未来
application environment API + docker + vagrant + puppet/chef
若能将各类应用的运行环境进行抽象,并标准化形成一组API,那么,就可以通过调用这些API来定制和生成各类应用环境,而不再是通过:安装系统+配置管理的方式
openstack
综合使用上述的各类技术,快速构建自己的私有云