当创建数量庞大的节点池时,节点池的查找也会成为一个问题,CCE提供一个聚类节点 池的功能,可以将相同规格的节点池汇聚在一起,方便查找。
如下所示,有4个节点池,上面两个规格一样,下面两个规格一样。
单击“按规格聚类”,就会将相同规格的节点池汇聚在一起,如下所示。此时再单击 节点池就会在右侧显示相同规格的节点池。
6 工作负载
6.1 工作负载概述
工作负载是在Kubernetes上运行的应用程序。无论您的工作负载是单个组件还是协同 工作的多个组件,您都可以在Kubernetes上的一组Pod中运行它。在Kubernetes中,
工作负载是对一组Pod的抽象模型,用于描述业务的运行载体,包括Deployment、
Statefulset、Daemonset、Job、CronJob等多种类型。
云容器引擎CCE提供基于Kubernetes原生类型的容器部署和管理能力,支持容器工作 负载部署、配置、监控、扩容、升级、卸载、服务发现及负载均衡等生命周期管理。
Pod
Pod是Kubernetes创建或部署的最小单位。一个Pod封装一个或多个容器
(container)、存储资源(volume)、一个独立的网络IP以及管理控制容器运行方式 的策略选项。
Pod使用主要分为两种方式:
● Pod中运行一个容器。这是Kubernetes最常见的用法,您可以将Pod视为单个封装 的容器,但是Kubernetes是直接管理Pod而不是容器。
● Pod中运行多个需要耦合在一起工作、需要共享资源的容器。通常这种场景下应用 包含一个主容器和几个辅助容器(SideCar Container),如图6-1所示,例如主容 器为一个web服务器,从一个固定目录下对外提供文件服务,而辅助容器周期性 的从外部下载文件存到这个固定目录下。
图6-1 Pod
实际使用中很少直接创建Pod,而是使用Kubernetes中称为Controller的抽象层来管理 Pod实例,例如Deployment和Job。Controller可以创建和管理多个Pod,提供副本管 理、滚动升级和自愈能力。通常,Controller会使用Pod Template来创建相应的Pod。
Deployment
Pod是Kubernetes创建或部署的最小单位,但是Pod是被设计为相对短暂的一次性实 体,Pod可以被驱逐(当节点资源不足时)、随着集群的节点崩溃而消失。
Kubernetes提供了Controller(控制器)来管理Pod,Controller可以创建和管理多个 Pod,提供副本管理、滚动升级和自愈能力,其中最为常用的就是Deployment。
图6-2 Deployment
一个Deployment可以包含一个或多个Pod副本,每个Pod副本的角色相同,所以系统 会自动为Deployment的多个Pod副本分发请求。
Deployment集成了上线部署、滚动升级、创建副本、恢复上线的功能,在某种程度 上,Deployment实现无人值守的上线,大大降低了上线过程的复杂性和操作风险。
StatefulSet
Deployment控制器下的Pod都有个共同特点,那就是每个Pod除了名称和IP地址不 同,其余完全相同。需要的时候,Deployment可以通过Pod模板创建新的Pod;不需 要的时候,Deployment就可以删除任意一个Pod。
但是在某些场景下,这并不满足需求,比如有些分布式的场景,要求每个Pod都有自己 单独的状态时,比如分布式数据库,每个Pod要求有单独的存储,这时Deployment就 不能满足需求了。
详细分析下有状态应用的需求,分布式有状态的特点主要是应用中每个部分的角色不 同(即分工不同),比如数据库有主备,Pod之间有依赖,对应到Kubernetes中就是 对Pod有如下要求:
● Pod能够被别的Pod找到,这就要求Pod有固定的标识。
● 每个Pod有单独存储,Pod被删除恢复后,读取的数据必须还是以前那份,否则状 态就会不一致。
Kubernetes提供了StatefulSet来解决这个问题,其具体如下:
1. StatefulSet给每个Pod提供固定名称,Pod名称增加从0-N的固定后缀,Pod重新 调度后Pod名称和HostName不变。
2. StatefulSet通过Headless Service给每个Pod提供固定的访问域名,Service的概念 会在后面章节中详细介绍。
3. StatefulSet通过创建固定标识的PVC保证Pod重新调度后还是能访问到相同的持久 化数据。
DaemonSet
DaemonSet是这样一种对象(守护进程),它在集群的每个节点上运行一个Pod,且 保证只有一个Pod,这非常适合一些系统层面的应用,例如日志收集、资源监控等,这 类应用需要每个节点都运行,且不需要太多实例,一个比较好的例子就是Kubernetes 的kube-proxy。
DaemonSet跟节点相关,如果节点异常,也不会在其他节点重新创建。
图6-3 DaemonSet