Kubernetes之Cronjob下pod消失的原因初探

运维有笔谈 2024-07-26 08:02:35

私信 运维笔谈,回复 “阿里云k8s” 可以获取 《阿里云Kubernetes项目实战手册》PDF。

今天查看系统发现有个Cronjob的定时任务失败了,我想通过 kubectl logs 查看下失败的Pod日志,结果发现jobs是存在的,但是Jobs下面的pod消失了。但是通过Kibana又可以查询到Pod的启动日志。(PS:我这儿k8s版本比较古老,还是v1.11,所以新版本是否有类似情况暂不清楚,后面我会用新版k8s测试下)

截图为测试使用的cronjob效果

由于该Job失败的时候超过8小时了,我这边event事件日志也没有做持久化,所以无法查询到Jobs的事件信息。所以我只能去测试环境测试下,我先写了一个永远不可能成功的Cronjob(去path一个不存在的deployment)。

apiVersion: batch/v1beta1kind: CronJobmetadata: name: logstah-sc-faild namespace: opsspec: concurrencyPolicy: Allow failedJobsHistoryLimit: 3 jobTemplate: metadata: creationTimestamp: null spec: template: metadata: creationTimestamp: null spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: node-role.kubernetes.io/ops operator: Exists containers: - args: - | kubectl patch deployment xxoos -n commosn --type='json' -p '[{"op": "replace", "path": "/spec/template/spec/affinity/nodeAffinity/requiredDuringSchedulingIgnoredDuringExecution/nodeSelectorTerms/0/matchExpressions", "value":[{"key":"node-role.kubernetes.io/backend","operator":"Exists"}]}]' command: - /bin/sh - -c image: registry.test.cn/kube-base/dev/kubectl:v1.11.8 imagePullPolicy: IfNotPresent name: logstah-sc terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: - mountPath: /etc/localtime name: localtime-cfg dnsPolicy: ClusterFirst imagePullSecrets: - name: secret-registry-ciuser restartPolicy: OnFailure schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30 volumes: - hostPath: path: /usr/share/zoneinfo/Asia/Shanghai type: "" name: localtime-cfg schedule: 20 12 * * * successfulJobsHistoryLimit: 5 suspend: false

然后我查看Kubernetes的事件信息,发现Job达到了最大的尝试次数,Job控制器删除了Pod(job-controller Deleted pod: ***)。

Job控制器删除了pod

可能是是我们的restartPolicy策略设置的是OnFailure(非正常退出会重启Pod),Pod是会按照默认的最大尝试次数去重启Pod,然后达到最大尝试次数之后,删除了Pod。后面我调整了restartPolicy值为Never,失败的Pod保留下来了。

所以我们设置restartPolicy的时候要根据实际情况来判断,对于一些由于网络原因,连接数据库需要尝试的,我们是可以考虑使用OnFailure。假如一些失败了就不想重启的Pod我们可以设置为Never,同时把backoffLimit设置为0.

阅读累了,舒缓下眼睛[尬笑]

1 阅读:4

运维有笔谈

简介:感谢大家的关注