本篇文章来自《华为云云原生王者之路训练营》黄金系列课程第5课,由华为云容器技术专家Jessia Ding主讲,帮你了解工作负载的概念以及Kubernetes提供的内置工作负载的信息;Deployment/ DaemonSet/ Job/ CronJob概念以及使用场景。
工作负载是在 Kubernetes 上运行的应用程序。无论你的负载是单一组件还是由多个一同工作的组件构成,在 Kubernetes 中你 可以在一组 Pods 中运行它。 在 Kubernetes 中,Pod 代表的是集群上处于运行状态的一组容器。Pod 有确定的生命周期,如果该Pod所在的节点出现了致命的错误时,所有该节点的Pod都会失败。Kubernetes提供一些负载资源来替你管理一组Pod,让用户没有必要管理每个Pod。
Kubernetes提供以下几类工作负载:
1)无状态工作负载: 管理的Pod集合是相互等价的,需要的时候可以被替换。
Deployment/RS/RC的区别,RS/RC能保证指定数量的pod在集群中运行,Deployment提供的升级,回滚,暂停恢复等功能。
2)有状态工作负载: 为每个 Pod 维护了一个唯一的ID, 能够保证 Pod 的顺序性和唯一性,每个Pod是不可替代的。可使用持久存储来保存服务产生的状态。
3)守护进程工作负载: 保证每个节点上运行着这样一个守护进程
4)批处理工作负载: 一次性的任务
Deployment是一组不具有唯一标识的多个Pod的集合:
典型使用场景:Web Server等无状态应用
Deployment 升级策略:
RollingUpdate: 滚动升级策略中可以配置以下两个参数
滚动更新的过程中是启动一个新的ReplicaSet,创建一部分新Pod,并缩减历史的ReplicaSet的数量,一直循环往复,以达到期望状态,步长由以上两个参数控制。
Recreate: 先将老的ReplicaSet期望实例数改成0,等所有Pod终止以后,再创建新的ReplicaSet
RevisonHistoryLimit: 指定保留的历史ReplicaSet数量。
Pause: 当Deployment暂停后,Deployment发生了改动,也不会被Controller同步,触发更新。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
strategy:
rollingUpdate:
maxSurge: 0
maxUnavailable: 1
type: RollingUpdate
selector:
matchLabels:
app: nginx
replicas: 2 # tells deployment to run 2 pods matching the template
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
Deployment 常用操作
创建Deployement
# kubectl create deploy nginx-test --image nginx --replicas=3
# kubectl create –f nginx.yaml
查询Deployement
# kubectl get deployNAME READY UP-TO-DATE AVAILABLE AGEnginx 1/1 1 1 17d
READY: 对应status.readyReplicas/spec.replicas
UP-TO-DATE:对应status.updatedReplicas, 表示根据新模板创建的pod数量
AVAILABLE: 对应status.availableReplicas, 表示在minReadySeconds Pod的Container没有重启的Running Pod数量。
更新Deployement
# kubectl edit deploy/nginx
# kubectl set image deploy/nginx nginx=nginx:1.9.1# kubectl apply -f nginx.yaml
监视Deployment滚动更新情况
# kubectl rollout status deploy/nginx
查询升级历史
# kubectl rollout history deploy/nginx
回滚
# kubectl rollout undo deployment/nginx --to-revision=2 #不指定的话默认回滚到上一个版本
暂停/恢复
# kubectl rollout pause deployment/nginx# kubectl rollout resume deploy/nginx
Job 主要处理一些短暂的一次性任务:
CronJob 主要处理周期性或者重复性的任务:
典型的使用场景:
Job关键字段:
apiVersion: batch/v1kind: Jobmetadata:name: pispec:template:spec:containers:- name: piimage: perlcommand: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]restartPolicy: NeverbackoffLimit: 4completions: 1parallelism: 1
CronJob关键字段:
apiVersion: batch/v1kind: CronJobmetadata:name: hellospec:schedule: "*/1 * * * *“successfulJobsHistoryLimit: 3failedJobsHistoryLimit: 1concurrencyPolicy: AllowjobTemplate:spec:template:spec:containers:- name: helloimage: busyboximagePullPolicy: IfNotPresentcommand:- /bin/sh- -c- date; echo Hello from the Kubernetes clusterrestartPolicy: OnFailure
Job/CronJob 常用操作
创建Job
# kubectl create job pi --from=cronjob/a-cronjob # 从cronjob获取模板创建Job
# kubectl create –f job.yaml
查询Job
# kubectl get jobNAME COMPLETIONS DURATION AGEpi 1/1 43s 123m
COMPLETIONS: 显示已经完成的Pod数量,显示的字段为.status.succeeded
DURATION: Job实际也运行时长,已完成Job使用status.completionTime – status.startTime
创建CronJob
# kubectl create cronjob hello --image=busybox --schedule="*/1 * * * *"
# kubectl create –f cronjob.yaml
查询CronJob
# kubectl get cronjobNAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGEhello */1 * * * * False 1 57s 73s
SUSPEND : 显示已经该Cronjob是否暂停
ACTIVE : 显示的是正在执行的Job的数量
LAST SCHEDULE: 显示的是上一次触发任务执行的时间
Job/CronJob 使用小结
DaemonSet(守护进程集)功能:
典型使用场景:
DaemonSet 升级策略:
DaemonSet Template中RestartPolicy必须为Always
RevisionHistoryLimit: 指定保留的历史revision数量。
apiVersion: apps/v1kind: DaemonSetmetadata:name: fluentd-elasticsearchnamespace: kube-systemlabels:k8s-app: fluentd-loggingspec:revisionHistoryLimit: 10updateStrategy:rollingUpdate:maxUnavailable: 10type: RollingUpdateselector:matchLabels:name: fluentd-elasticsearchtemplate:metadata:labels:name: fluentd-elasticsearchspec:containers:- name: fluentd-elasticsearchimage: quay.io/fluentd_elasticsearch/fluentd:v2.5.2
创建DaemonSet
# kubectl create –f daemonset.yaml
查询DaemonSet
# kubectl get daemonset –nkube-systemNAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGEeverest-csi-driver 1 1 1 1 133d
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
# kubectl edit ds/fluentd-elasticsearch -n kube-system# kubectl set image ds/fluentd-elasticsearch fluentd-elasticsearch=quay.io/fluentd_elasticsearch/fluentd:v2.6.0 -n kube-system# kubectl apply -f https://k8s.io/examples/controllers/fluentd-daemonset-update.yaml
监视DaemonSet滚动更新情况
# kubectl rollout status ds/fluentd-elasticsearch
查询更新历史
# kubectl rollout history ds/fluentd-elasticsearch
回滚
# kubectl rollout undo ds/fluentd-elasticsearch --to-revision=2 #不指定的话默认回滚到上一个版本
DaemonSet使用小结
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。