一、概述
如前期篇章所述,docker&kubernetes容器虚拟化提供了以应用负载为中心的狭义paas能力,实现应用的编排,调度与7x24小时的应用监护服务。
二、应用负载
docker&kubernetes的容器虚拟化提供了以POD为逻辑单位的容器进程组,实现对应用主进程、初始化进程以及辅助进程的封装。
一个常见的POD结构示意如下:
在容器组中,各个容器角色各司其职:
pause容器持有该容器组网络命名空间
init容器进行前置准备工作,比如准备容器运行中依赖的数据包,安装主进程依赖的工具套件
main容器处理业务逻辑,比如相应外部web请求
sidecar容器提供辅助性支撑服务,比如采集运行日志
三、编排&调度
1、编排
docker&kubernetes的容器虚拟化实现了容器化应用组织,部署,管理与流量接入等生命周期的自动化能力。
主要编排能力包括:
基于pod、service以及deployment等各原生与自定义资源的应用设计与组织
容器应用的分发部署、自动化的扩缩容等
容器应用东西向互访与流量接入
上图基于kubernetes各类资源设计的一个典型应用。
docker&kubernetes的编排能力可实现上图所述应用从蓝图设计到落地的全生命周期自动化。
2、调度
容器调度是编排落地的重要环节,特指为容器组寻找当前场景最佳计算节点。
通俗地说,如果把POD比作萝卜,调度目标就是为每个萝卜找到一个最适合它的坑。
上图为kubernetes内建调度组件kube-scheduler典型工作示意图。
kube-scheduler大致按照分步走策略完成整个调度过程:
- 筛选,基于资源、标签、污点等硬性标准筛选达标节点
- 优选,基于优选策略从筛选达标节点中有选出最佳节点
- 抢占,基于优先级对调度中pod再进行调剂
四、7x24小时应用监护服务
docker&kubernetes的容器虚拟化提供了传统面向目标的7x24小时应用监护服务。
换句话说,用户基于kubernetes各类资源与规则定义业务目标,kubernetes将试图持续维护好这个业务目标。
这就是docker&kubernetes的容器虚拟化提供基于声明式编程与传统运维自动化中playbook最大的不同。
用户在kubernetes中定义一个目标,kubernetes内各类控制器都将围绕这个目标不断调谐:
- 读取用户定义的资源预期状态与实际状态
- 比对资源状态差异
- 变更资源关联配置
如此反复直至资源达成要送胡定义的预期状态。