PaaS 和 容器编排
PaaS是什么
PaaS之前,IaaS
,主流普遍的用法就是租一批虚拟机,用脚本部署应用。
但难以绕过的问题就是,云端虚拟机和本地环境不一致
PaaS
应用托管的能力可以很好解决这个问题
PaaS最核心的能力:应用打包、分发机制、应用隔离打包
:将可执行文件和启动脚本打进一个压缩包分发
:通过调度器选择运行该应用的虚拟机隔离
:调用系统CGroups和Namespace,为应用创建运行的隔离环境(沙盒)
容器是什么
就是沙盒。依赖操作系统内核支持。
- CGroups
- Namespace
Docker为何能迅速崛起
早期PaaS项目代表(Cloud Foundry),用户必须为每种语言、每种框架、甚至每个版本的应用维护一个打好的包。费尽心机。
Docker如何解决打包问题:镜像
镜像
也是一个压缩包,大多数Docker镜像除了应用可执行文件和启停脚本外,还包含一个完整操作系统的所有文件和目录(不包括内核),赋予本地环境和云端环境高度一致的能力。
完整操作系统的所有文件、目录
- 在Dockerfile中对应
FROM
参数,指定引用的基础镜像
- 在Dockerfile中对应
应用可执行文件、启停脚本
- 在Dockerfile中对应其他参数
# 构建镜像
docker build -t NAME .
# 解压镜像,创建沙盒运行应用
docker run NAME
因为镜像的便利,Docker Swarm,推了一波CaaS
(Container as a Service)
编排
通过某些具体或者配置完成一组虚拟机以及关联资源的定义、配置、创建、删除等工作,然后由云计算平台按照这些指定的逻辑来完成的过程。
- Docker Compose
- Docker Swarm
- Mesos Marathon
- Kubernetes
Docker Compose
即fig
项目,通过配置文件定义容器间的关联。仅支持单机。
# 启动
docker-compose up
Docker Swarm
用户创建容器的请求会被Swarm拦截,通过具体调度算法找到合适的Daemon运行。Compose集群版。
# Docker由单机到多机部署
docker run -H "Swarm API" NAME
Mesos Marathon
有超大规模集群的管理经验。
Kubernetes
简称K8s
。从API到容器运行时的每一层,K8s项目都为开发者暴露出了可以扩展的插件机制,鼓励用户通过代码的方式介入到K8s项目的每一个阶段。
催生出很多优秀的项目
- Istio,微服务治理
- Operator,有状态应用部署框架
- Rook,把重量级Ceph封装成简单易用的容器存储插件
PaaS 什么有价值
容器本身没有价值,有价值的是容器编排。