工作负载概述
工作负载是在Kubernetes集群上运行的应用程序。无论工作负载是单个组件还是协同工作的多个组件,都可以在集群上的一个容器组(Pod)中运行。在Kubernetes集群中,工作负载是对一组容器的抽象模型,用于描述业务的运行载体,包括无状态工作负载(Deployment)、有状态工作负载(Statefulset)、守护进程集(Daemonset)、普通任务(Job)、定时任务(CronJob)多种类型。
# 基本概念
- 无状态工作负载: 无状态工作负载支持弹性伸缩与滚动升级,适用于实例完全独立、功能相同的场景,如nginx。
- 有状态工作负载: 有状态工作负载支持实例有序部署和删除,支持持久化存储,适用于实例间存在互访的场景,如MySQL。
- 守护进程集: 守护进程集确保全部(或者某些)节点都运行同一个Pod实例,支持实例动态添加到新节点,适用于实例在每个节点上都需要运行的场景,如ceph、fluentd、Prometheus Node Exporter等。
- 普通任务: 普通任务是一次性运行的短任务,部署完成后立即执行。使用场景有在创建工作负载前,执行普通任务,将镜像上传至镜像仓库。
- 定时任务: 定时任务是按照指定时间周期运行的短任务。使用场景有在某个固定时间点,为所有运行中的节点做时间同步。
# 生命周期状态说明
状态 | 说明 |
---|---|
运行中 | 所有实例都处于运行状态 |
未就绪 | 容器处于异常、实例数为0或pending状态时显示此状态 |
可用 | 当多实例无状态工作负载运行过程中部分实例异常,可用实例不为0,工作负载会处于可用状态 |
执行完成 | 任务执行完成,仅普通任务存在该状态 |
已停止 | 工作负载的期望实例数为0时显示此状态 |
# 镜像配置
工作负载的镜像支持三种来源:选择公有镜像时,您可以选择docker官方提供的镜像;选择我的镜像时,你可以看到该集群相关联的容器镜像服务所提供的镜像;选择第三方镜像时,您可以指定任意镜像。
# 容器配置
在创建工作负载时,除镜像名称、镜像版本和容器名称外,还可以对容器进行更精细和自定义的控制。
名称 | 描述 |
---|---|
配额申请 | 指定在容器运行时分配的资源量,包括CPU和内存 |
配额限制 | 指定容器运行过程中最大的资源使用了,包括CPU和内存,超过此限制容器会被杀死 |
端口 | 将宿主机的端口与容器端口相绑定(hostPort) |
环境变量 | 将配置项、密钥或者自定义值以环境变量方式注入到容器中 |
生命周期 | 覆盖容器的启动命令,以及设置容器启动后或停止前执行的命令 |
存储卷 | 将云储存或本地磁盘挂载到容器中,详见储存卷描述一节 |
日志服务 | 与云服务监控集成,提供日志采集和转储能力 |
健康检测 | 配置健康检测以便Kubernetes准确地判断容器和业务是否可用,详见健康检查 |
# 存储卷
因为容器中的文件在磁盘上是临时存放的,所以Kubernetes定义了数据卷(Volume)以解决容器中的文件因容器重启而丢失的问题。数据卷(Volume)是Pod与外部存储设备进行数据传递的通道,也是Pod内部容器间、Pod与Pod间、Pod与外部环境进行数据共享的方式。
LStsack将存储卷分为云储存和本地磁盘两类,其中云存储对应Kubernetes中的存储申明,而本地磁盘包括主机路径、临时路径、配置项和密钥四类。
有关本地磁盘各类型说明如下
类型 | 描述 | 注意事项 |
---|---|---|
主机路径 | 将容器宿主机内某个目录挂载到容器中 | 主机目录不能是根目录'/'和系统保留目录,挂载目录不能是系统保留目录如'/var/run' |
临时路径 | 适用于临时存储、灾难恢复、共享运行时数据等场景,工作负载实例的删除或者迁移会导致临时路径被删除 | 磁盘介质选择内存时应注意不要超过主机内存限制 |
配置项 | 将集群中同命名空间下的配置项挂载到容器中 | 挂载目录不能是系统保留目录如'/var/run' |
密钥 | 将集群中同命名空间下的密钥挂载到容器中 | 挂载目录不能是系统保留目录如'/var/run' |
# 健康检查
健康检查包括容器存活检查和业务就绪检查,前者检查结果标志容器运行状态,后者检查结果标志容器中业务应用运行状态。
检查方式有http请求、tcp端口检查和执行命令检查三种,每种检查方式都可以配置超时时间和延时检查时间。
# 存活探针
配置存活探针以检查容器存活性,如果检测到容器不再响应(例如遇到死锁),会自动重启容器。
# 业务探针
配置业务探针以检查容器内业务就绪状态,Kubernetes会避免将流量转发到业务未就绪的Pod中。
# 节点亲和性
节点亲和性配置工作负载与某个节点的亲和度,这在一些场景下是十分有用的,例如:
- 需要使用GPU的工作负载,应该调度到带有GPU的节点运行
- 需要大量内存但CPU要求不高的工作负载,应该调度到内存容量大的节点
节点亲和性分尽量满足和必须满足两类,如果设置了后者但没有节点满足条件,调度会失败;如果设置的是前者,工作负载会优先调度到满足条件的节点。
# 调度容忍
带有污点的节点默认会排斥工作负载,如果希望工作负载可以调度到这样的节点,您需要为工作负载配置调度容忍。
注意 配置调度容忍时,需要确保容忍规则的效果与节点污点效果一致
上一篇: 命名空间管理 无状态