有没有办法自动删除已完成的工作,除了使用cronjob清理已完成的工作?
该K8S工作文件规定,完成作业的预期行为是他们留在已完成的状态,直到手动删除.因为我每天通过k8s cronjobs运行成千上万的工作,我不想保持完成的工作.
我正在寻找一种方法来告诉(从脚本中)Kubernetes Job完成的时间.我想从容器中取出日志并执行清理.
这样做有什么好办法?最好的方法是运行kubectl describe job <job_name>和grep 1 Succeeded或类似的东西?
我有一个具有以下版本的 Kubernetes 集群:
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.1", GitCommit:"632ed300f2c34f6d6d15ca4cef3d3c7073412212", GitTreeState:"clean", BuildDate:"2021-08-19T15:38:26Z", GoVersion:"go1.16.6", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.13", GitCommit:"aac5f64a5218b0b1d0138a57d273a12db99390c9", GitTreeState:"clean", BuildDate:"2021-01-18T07:43:30Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
WARNING: version difference between client (1.22) and server (1.16) exceeds the supported minor version skew of +/-1
Run Code Online (Sandbox Code Playgroud)
我的 Kubernetes 集群中有一个 CronJob。
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: abc-cronjob
namespace: abc-namespace
...
Run Code Online (Sandbox Code Playgroud)
Kubernetes 集群识别 cron 作业的 api 资源。
$ kubectl -n abc-namespace api-resources
NAME SHORTNAMES APIVERSION NAMESPACED KIND
...
cronjobs cj batch/v1beta1 true …Run Code Online (Sandbox Code Playgroud) 我正在尝试用Kubernetes工作替换我的旧作业调度程序,并想知道如何将顺序作业写为Kubernetes作业.
首先,我编写了以下脚本来执行job1并按job2书面顺序执行,但它没有按预期工作.
apiVersion: batch/v1
kind: Job
metadata:
name: sequential
spec:
activeDeadlineSeconds: 100
template:
metadata:
name: sequential_jobs
spec:
containers:
- name: job1
image: image1
- name: job2
image: image2
restartPolicy: Never
Run Code Online (Sandbox Code Playgroud)
上述工作似乎运行job1和job2并行.有没有什么好的方式来运行job1和job2书面订单?
追加.
我最近发现https://github.com/argoproj/argo非常适合我的用例.
我有一个基于kubernetes网站示例的工作定义.
apiVersion: batch/v1
kind: Job
metadata:
name: pi-with-timeout-6
spec:
activeDeadlineSeconds: 30
completions: 1
paralleism: 1
template:
metadata:
name: pi
spec:
containers:
- name: pi
image: perl
command: ["exit", "1"]
restartPolicy: Never
Run Code Online (Sandbox Code Playgroud)
我想运行一次这个工作,如果失败则不重启.使用comand退出1 kubernetes尝试运行新pod以获取exit 0代码,直到达到activeDeadlineSeconds超时.怎么可以避免呢?我想在kubernetes中运行构建命令来检查编译,如果编译失败,我将得到不同于0的退出代码.我不想再次运行编译.
可能吗?怎么样?
我正在寻找kubectl命令来列出/删除所有已完成的作业
我试过:
kubectl get job --field-selector status.succeeded=1
Run Code Online (Sandbox Code Playgroud)
但我得到:
enfield selector "status.succeeded=1": field label "status.succeeded" not supported for batchv1.Jobter code here
Run Code Online (Sandbox Code Playgroud)
找工作时--fieldSelector的可能字段是什么?
有一个更好的方法吗 ?
kubernetes google-kubernetes-engine kubectl kubernetes-pod kubernetes-jobs
我有一个 k8s cronjob,它由一个 init 容器和一个 pod 容器组成。如果 init 容器失败,主容器中的 Pod 永远不会启动,并无限期地停留在“PodInitializing”中。
如果 init 容器失败,我的目的是让作业失败。
---
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: job-name
namespace: default
labels:
run: job-name
spec:
schedule: "15 23 * * *"
startingDeadlineSeconds: 60
concurrencyPolicy: "Forbid"
successfulJobsHistoryLimit: 30
failedJobsHistoryLimit: 10
jobTemplate:
spec:
# only try twice
backoffLimit: 2
activeDeadlineSeconds: 60
template:
spec:
initContainers:
- name: init-name
image: init-image:1.0
restartPolicy: Never
containers:
- name: some-name
image: someimage:1.0
restartPolicy: Never
Run Code Online (Sandbox Code Playgroud)
pod 上的 kubectl 卡住会导致:
Name: job-name-1542237120-rgvzl
Namespace: default
Priority: 0 …Run Code Online (Sandbox Code Playgroud) kubernetes kubernetes-pod kubernetes-cronjob kubernetes-jobs
我看到 Kubernetes Job&Deployment提供了非常相似的配置。两者都可以部署一个或多个具有特定配置的 Pod。所以我对这些问题很少有疑问:
.spec.template中的Pod 规格是否不同?JobDeploymentJob和completions的Deployment区别是什么replicas?Deployment并完成(没有服务器或守护进程进程容器),则 pod 将终止。这同样适用于a Job。那么这两种资源中的 pod 生命周期有何不同?等待kubernetes作业完成的最佳方法是什么?我注意到很多建议可以使用:
kubectl wait --for=condition=complete job/myjob
Run Code Online (Sandbox Code Playgroud)
但我认为,只有工作成功,这才行。如果失败,我必须做类似的事情:
kubectl wait --for=condition=failure job/myjob
Run Code Online (Sandbox Code Playgroud)
有没有办法使用wait来等待两个条件?如果没有,等待工作成功或失败的最佳方法是什么?
我正在测试一个预升级挂钩,它只有一个 bash 脚本,可以打印字符串并休眠 10 分钟。当我运行 helm Upgrade 时,它运行了一段时间并退出并出现标题中的错误。我使用 kubectl 检查作业,它仍在运行。关于如何消除错误有什么想法吗?
谢谢
作业运行的容器中的脚本:
#!/bin/bash
echo "Sleeping for testing..."
sleep 600
Run Code Online (Sandbox Code Playgroud)