云架构师的进阶之路(九)
基于Mesos和Kubernetes了解容器平台
搭建完毕虚拟化层和云平台层,接下来就是容器层了。
Docker有几个核心技术,一个是镜像,一个是运行时,运行时又分看起来隔离的namespace和用起来隔离的cgroup。
Docker的镜像也是一种Copy on Write的镜像格式,下面的层级是只读的,所有的写入都在最上层。
对于运行时,Docker使用的namespace除了network namespace外,还有很多,如下表格所示。
Docker对于cgroup的使用是在运行Docker的时候,在路径/sys/fs/cgroup/cpu/docker/下面控制容器运行使用的资源。
可见容器并没有使用更新的技术,而是一种新型的交付方式,也即应用的交付应该是一容器镜像的方式交付,容器一旦启动起来,就不应该进入容器做各种修改,这就是不可改变基础设施。
由于容器的镜像不包含操作系统内核,因而小的多,可以进行跨环境的迁移和弹性伸缩。
下面的文章,总结了几点容器的正确使用姿势。
有了容器之后,接下来就是容器平台的选型,其实swarm, mesos, kubernetes各有优势,也可以在不同的阶段,选择使用不同的容器平台。
Docker, Kubernetes, DCOS 不谈信仰谈技术
容器平台选型的十大模式:Docker、DC/OS、K8S谁与当先?
基于Mesos的DCOS更像是一个数据中心管理平台,而非仅仅容器管理平台,他可以兼容Kubernetes的编排,同时也能跑各种大数据应用。
在容器领域,基于Kubernetes的容器编排已经成为事实标准。
当我们深入分析Kubernetes管理容器模式的时候,我们也能看到熟悉的面孔。
在Kubernetes里面,租户之间靠namespace进行隔离,这个不是Docker的namespace,而是Kubernetes的概念。
API Server的鉴权,也是基于Role Based Access Control模式。
Kubernetes对于namespace,也有Quota配置,使用ResourceQuota。
当Kubernetes想选择一个节点运行pod的时候,选择的过程也是通过预选和优选两个阶段。
- 预选(Filtering)
- PodFitsResources满足资源
- PodSelectorMatches符合标签
- PodFitsHost符合节点名称
- 优选(Weighting)
- LeastRequestedPriority资源消耗最小
- BalancedResourceAllocation资源使用最均衡
Kubernetes规定了以下的网络模型定义。
- 所有的容器都可以在不使用NAT的情况下同别的容器通信
- 所有的节点都可以在不使用NAT的情况下同所有的容器通信
- 容器的地址和别人看到的地址一样
也即容器平台应该有自己的私有子网,常用的有Flannel, Calico, Openvswitch都是可以的。
既可以使用Overlay的方式,如图flannel.
也可以使用BGP的方式,如图Calico