华为云云原生王者之路集训营(黄金-第五章)

华为云云原生王者之路集训营(黄金-第五章)

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   

(完)