华为云云原生王者之路集训营(黄金-第五章)
华为云云原生王者之路集训营(黄金-第五章)
Kubernetes工作负载(Workload)介绍
工作负载是在Kubernetes 上运行的应用程序。无论你的负载是单一组件还是由多个一同工作的组件构成,在Kubernetes 中你可以在一组Pods 中运行它。在Kubernetes 中,Pod 代表的是集群上处于运行状态的一组容器。
四种负载:
- 无状态工作负载:管理的Pod集合是相互等价的,需要的时候可以被替换
- 1.Deployment
- 2.ReplicaSet
- 3.ReplicationController
- 有状态工作负载:为每个Pod维护了一个唯一的ID,能够保证Pod的顺序性和唯一性,每个Pod不可替代,可以使用特久存储来保存服务产生的状态。
- StatefulSet
- 守护进程工作负载:保证每个节点上运行着这样一个守护进程
- DaemonSet
- 批处理工作负载:一次性的任务
- Job
- CronJob
工作负载类型-Deployment概述
Deployment是一组不具有唯一标识的多个Pod的集合
- 确保集群中有期望数量的Pod运行
- 提供多种升级策略以及一键回滚能力
- 提供暂停/恢复的能力
典型使用场景
Web Server等无状态应用。
工作负载类型1-Deployment语法
Deployment升级策略:
RollingUpdate:滚动升级策略中可以配置以下两个参数
maxUnavailable表示在更新过程中能够进入不可用状态的Pod的最大值;
maxSurge表示能够额外创建的Pod个数
滚动更新的过程中是启动一个新的ReplicaSet,创建一部分新Pod,并缩减历史的ReplicaSet的数量,一直循环往复,以达到期望状态,步长由以上两个参数控制。
Recreate:先将老的ReplicaSet期望实例数改成0,等所有Pod终止以后,再创建新的ReplicaSet
RevisonHistoryLimit:指定保留的历史ReplicaSet数量。
Pause:当Deployment暂停后,Deployment发生了改动,也不会被Controller同步,触发更新。
工作负载类型1-Deployment 常用操作
创建Deployment:
#kubectl create deploy nginx-test --image nginx --replicas=3
#kubectl create -f nginx.yaml
查询Deployement
#kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 1/1 1 1 17d
READY:对应status.readyReplicas/spec.replicas
UP-TO-DATE:对应status.updatedReplicas,表示在minReadySeconds Pod的Container没有重启的Running Pod数量。
工作负载类型1-Deployment常用操作
更新Deployment
#kubectl edit deploy/nginx
#kubectl set image deploy/nginx nginx=nginx:1.9.1
#kubectl apply -f nginx.yaml
监视Deployment滚动更新情况:
#kubectl rollout history deploy/nginx
回滚
#kubectl rollout undo deployment/nginx --to-revision=2 #不指定的话默认回滚到上一个版本
暂停/恢复
#kubectl rollout pause deployment/nginx
#kubectl rollout resume deploy/nginx
Deployment使用小结
- 选择所需的升级策略,合理配置升级参数,例如maxUnavailable以及maxSurge
- 合理设置历史版本数量,系统默认情况下会保留10个历史版本
- 回滚时,只有Deployment模板部分会被回滚,手动/自动扩缩Deployment数量是不会被回滚的。
- 暂停过程中,模板更新不会触发Deployment滚动更新。
Job/CronJob概述
Job
Job主要处理一些短语的一次性任务:
- 保证指定数量Pod成功运行结束
- 支持并发执行
- 错误自动重试和暂停/恢复Job
典型使用场景:
- 计算以及训练任务,如批量计算,AI训练任务等。
CronJob
CronJob主要处理周期性或者重复性的任务:
- 基于Crontab格式的时间调度
- 可以暂停/恢复CrobJob
典型的使用场景:
- 周期性数据分析服务和资源回收服务。
工作负载类型2-Job/CronJob语法
job关键字段:
Parallelism:在同一时间运行的最大的Pod的数量
Completions:指定Job成功需要运行成功的Pod的数量
BackoffLimit:重试次数,当超过该重试次数时,该Job标记为Failed
CompletionMode: 1.21引入,如果设置为Indexed,创建的Podannotation会带上batch.kubernetes.io/job-completion-index,index值为0~spec.completions-1,并且仅当每个index的pod都有一个成功的时候,这时Job才会被认为是成功的。controller会给pod中注入JOB_COMPLETION_INDEX的环境变量
Suspend:1.21引入,等于true时,用户暂停了Job,controller会删除所有正在运行的Pod。
CronJob关键字段:
Schedule:设置Job的周期策略
ConcurrencyPolicy:指定CronJob 创建的任务执行时发生重叠如何处理, Allow是允许并发执行任务, Forbid是不允许并发执行,Replace是会用新任务替换正在运行的任务。
startingDeadlineSeconds:表示统计错过调度次数开始的时间,默认从上一次调度时间开始统计。
successfulJobsHistoryLimit,failedJobsHistoryLimit:可以指定保留的成功和失败的任务个数。
suspend:是否暂停
COMPLETIONS:显示已经完成的Pod数量,显示的字段为.status.succeeded
DURATION: Job实际的运行时长,已完成Job使用status.completionTime - status.startTime
SUSPEND:显示该Cronjob是否暂停
ACTIVE:显示的是正在执行的Job的数量
LAST SCHEDULE:显示的是上一次触发任务执行的时间
工作负载类型2-Job/CronJob使用小结
➢合理设置Job 的并发度,和所需的完成数量
➢合理设置失败重试次数,当前系统默认值为6
➢Job中的Pod Restart Policy只能为Never或者OnFailure
➢合理设置历史Job保留时间
➢合理设置CronJob的周期策略, 以及并发策略
➢CronJob 当在一个时间窗内 (上一-次调度的时间点到现在)所错过的调度次数超过100次以后,那么就不会再启动这个任务了。
工作负载类型3-DaemonSet概述
DaemonSet(守护进程集)功能:
确保每一个节点或者期望的节点上运行一个Pod
·新增节点时自动部署一个Pod
移除节点时自动删除Pod
典型使用场景:
日志监控采集进程,如fluentd, icagent,
节点运维进程,等Node Problem Detector, OS-Operator-Agent. Kubernetes必要运行组件,如Everest Driver, Calico等
Device Plugin: GPU Device Plugin,运行在GPU节点上
工作负载类型3-DaemonSet语法
DaemonSet升级策略:
RollingUpdate:更新了DaemonSet的配置时,会自动删除老的Pod,删除完成后,创建新的Pods,并发滚动更新的节点数可以通过maxUnavailable控制.
OnDelete:更新了DaemonSet的配置,不会自动删除并重建Pod;通过删除Pod,触发Pod的更新。
DaemonSet Template中RestartPolicy必须为Always
RevisionHistoryLimit:指定保留的历史revision数量。
DESIRED:对应status.desiredNumberScheduled,表示集群中需要部署ds pod的节点数量
CURRENT:对应status.currentNumberScheduled,表示集群中已经有调度ds pod的节点数量
READY:对应status.NumberReady,表示集群中已经有Running ds pod的节点数量
UP-TO-DATE:对应status.updatedNumberScheduled,表示集群中已经启动最新的ds版本pod的节点数量
AVAILABLE:对应status.numberAvailable,表示集群中有running ds pod,并且在minReadySeconds容器没有重启的节点数量
DaemonSet使用小结
合理设置DaemonSet升级策略
可以通过设置节点亲和性或者节点选择器来选择部分节点部署。合理设置DaemonSet的RevisionHistoryLimit,默认值为10
总结:
名称 简介
Deployment 无状态应用,保证集群中应用数量,并提供升级,回滚,暂停等能力。
Job Job会创建一个或者多个Pod,直到指定数量的Pod成功终止。
Cronjob 简称cj,周期性执行Job
DaemonSet 简称ds,确保每个或者某一类节点上运行Pod副本。
相关内容的华为云官网链接: https://support.huaweicloud.com/usermanual-cce/cce_01_0006.html
Kubernetes官方文档: https:/kubernetes.io/zh/docs/concepts/workloads/
CCE云容器引擎官方首页: https://www.huaweicloud.com/product/cce.html
- 点赞
- 收藏
- 关注作者
评论(0)