我正在寻找一种从命令行快速运行/重新启动作业/Pod 并覆盖要在创建的容器中执行的命令的方法。
对于上下文,我有一个 Kubernetes 作业,它作为部署过程的一部分执行。有时该作业会崩溃,我需要在作业创建的容器内运行某些命令来调试和修复问题(后续作业会成功)。
到目前为止我这样做的方法是:
command:字段更改为tail -f /dev/null(以便容器保持活动状态)kubectl apply -f job.yaml && kubectl get all && kubectl exec -ti pod/foobar bashkubectl delete job/foobar当我完成时这是非常乏味的。我正在寻找一种方法来做类似以下的事情
kubectl restart job/foobar --command "tail -f /dev/null"
# or even better
kubectl run job/foobar --exec --interactive bash
Run Code Online (Sandbox Code Playgroud)
我无法使用以下run命令创建 Pod:
kubectl restart job/foobar --command "tail -f /dev/null"
# or even better
kubectl run job/foobar --exec --interactive bash
Run Code Online (Sandbox Code Playgroud)
因为我尝试重新启动的作业具有 …
我想启动Kubernetes工作,并给它一个固定的截止日期。如果在截止日期到来之前吊舱仍在运行,我希望该作业自动终止。
是否存在这样的东西?(起初我以为Job规范activeDeadlineSeconds涵盖了这个用例,但现在我看到这activeDeadlineSeconds仅限制了重试作业的时间;它不会主动杀死慢速/失控的工作。)
我有示例 k8s 作业,只要您执行 kubectl apply,作业就会被触发并创建 pod。如何控制Pod的创建?
apiVersion: batch/v1
kind: Job
metadata:
name: pi-with-timeout
spec:
backoffLimit: 5
activeDeadlineSeconds: 100
template:
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
Run Code Online (Sandbox Code Playgroud) 与 Kubernetes 相比,Docker Swarm 相对更容易维护,因此我正在考虑从 Kubernetes 集群迁移到 Docker Swarm 集群。
在我的 Kubernetes 集群中,我广泛使用Jobs来临时启动工作人员,这对于整个基础设施的主要功能非常关键。Kubernetes Jobs 最好的一点是,它们会在 Job 完成后一定时间限制后关闭并回收资源。
我想问一下 Docker Swarm 中是否有相当于Kubernetes Jobs 的东西?到目前为止我在Docker网站上找不到支持这个功能的官方文档。
所以我有一个这样的 cron 工作:
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: my-cron-job
spec:
schedule: "0 0 31 2 *"
failedJobsHistoryLimit: 3
successfulJobsHistoryLimit: 1
concurrencyPolicy: "Forbid"
startingDeadlineSeconds: 30
jobTemplate:
spec:
backoffLimit: 0
activeDeadlineSeconds: 120
...
Run Code Online (Sandbox Code Playgroud)
然后我像这样手动触发作业:
kubectl create job my-job --namespace precompile --from=cronjob/my-cron-job
Run Code Online (Sandbox Code Playgroud)
但似乎我可以根据需要多次触发该工作,并且concurrencyPolicy: "Forbid"会被忽略。
有没有办法让手动触发的作业尊重这一点,或者我必须手动检查这一点?
有一个具有 100 个节点的 kubernetes 集群,我必须手动清理特定图像,我知道 kubelet 垃圾收集可能会有所帮助,但它不适用于我的情况。浏览互联网后,我找到了一个解决方案——docker in docker,解决了我的问题。
我只想删除每个节点中的图像一次,有什么方法可以在每个节点中运行一次作业吗?
我检查了 kubernetes 标签和 podaffinity,但仍然没有想法,任何人都可以提供帮助吗?
另外,我尝试使用 daemonset 来解决问题,但事实证明它只能删除部分节点的图像,而不是所有节点,我不知道可能是什么问题......
这是守护程序集示例:
kind: DaemonSet
apiVersion: apps/v1
metadata:
name: test-ds
labels:
k8s-app: test
spec:
selector:
matchLabels:
k8s-app: test
template:
metadata:
labels:
k8s-app: test
spec:
containers:
- name: test
env:
- name: DELETE_IMAGE_NAME
value: "nginx"
image: busybox
command: ['sh', '-c', 'curl --unix-socket /var/run/docker.sock -X DELETE http://localhost/v1.39/images/$(DELETE_IMAGE_NAME)']
securityContext:
privileged: true
volumeMounts:
- mountPath: /var/run/docker.sock
name: docker-sock-volume
ports:
- containerPort: 80
volumes:
- name: docker-sock-volume
hostPath:
# location …Run Code Online (Sandbox Code Playgroud) 我有一个在 Kubernetes 集群中运行的 Postgres DB 容器。我需要编写一个 Kubernetes 作业来连接到 Postgres DB 容器并从 SQL 文件运行脚本。我需要在这里了解两件事
这是我用于 Kubernetes 作业的示例 yaml 文件
apiVersion: batch/v1
kind: Job
metadata:
name: init-db
spec:
template:
metadata:
name: init-db
labels:
app: init-postgresdb
spec:
containers:
- image: "docker.io/bitnami/postgresql:11.5.0-debian-9-r60"
name: init-db
command:
- psql -U postgres
env:
- name: DB_HOST
value: "knotted-iguana-postgresql"
- name: DB_DATABASE
value: "postgres"
restartPolicy: OnFailure
Run Code Online (Sandbox Code Playgroud) 作为我们公司的 QA,我是 kubernetes 的日常用户,我们使用 kubernetes 作业来创建性能测试 pod。根据文档,工作的优势之一是
创建一个 Job 对象,以便可靠地运行一个 Pod 直至完成
但在我们的测试中,如果之前的 Pod 失败,此功能将创建无限个 Pod,这将占用我们团队共享集群的资源,并且删除这些 Pod 将花费大量时间。看这张图片:

目前的工作清单是这样的:
{
"apiVersion": "batch/v1",
"kind": "Job",
"metadata": {
"name": "upgradeperf",
"namespace": "ntg6-grpc26-tts"
},
"spec": {
"template": {
"spec": {
"containers": [
{
"name": "upgradeperfjob",
"image":
"mycompany.com:5000/ncs-cd-qa/upgradeperf:0.1.1",
"command": [
"python",
"/jmeterwork/jmeter.py",
"-gu",
"git@gitlab-pri-eastus2.dev.mycompany.net:mobility-ncs-tools/tts-cdqa-tool.git",
"-gb",
"upgradeperf",
"-t",
"JMeter/testcases/ttssvc/JMeterTestPlan_ttssvc_cmpsize.jmx",
"-JtestDataFile",
"JMeter/testcases/ttssvc/testData/avaml_opus.csv",
"-JthreadNum",
"3",
"-JthreadLoopCount",
"1500",
"-JresultsFile",
"results_upgradeperf_cavaml_opus_t3_l1500.csv",
"-Jhost",
"mtl-blade32-03.mycompany.com",
"-Jport",
"28416"
]
}
],
"restartPolicy": "Never",
"imagePullSecrets": [
{
"name": "docker-registry-secret"
}
] …Run Code Online (Sandbox Code Playgroud) 尽管我没有部署或作业,但我有一个 cron 作业继续运行。我正在运行 minikube:
$ kubectl get deployments
No resources found in default namespace.
$ kubectl delete pods --all && kubectl delete jobs --all && get deployments
pod "hello-27125612-lmcb5" deleted
pod "hello-27125613-w5ln9" deleted
pod "hello-27125614-fz84r" deleted
pod "hello-27125615-htf4z" deleted
pod "hello-27125616-k5czn" deleted
pod "hello-27125617-v79hx" deleted
pod "hello-27125618-bxg52" deleted
pod "hello-27125619-d6wps" deleted
pod "hello-27125620-66b65" deleted
pod "hello-27125621-cj8m9" deleted
pod "hello-27125622-vx5kp" deleted
pod "hello-27125623-xj7nj" deleted
job.batch "hello-27125612" deleted
job.batch "hello-27125613" deleted
job.batch "hello-27125614" deleted
...
$ kb get jobs
No resources found …Run Code Online (Sandbox Code Playgroud) 我有一个 Kubernetes 作业运行了一段时间,我需要检查它是失败还是成功。
我正在定期检查:
kubectl describe job/myjob | grep "1 Succeeded"
Run Code Online (Sandbox Code Playgroud)
这行得通,但我担心 kubernetes 的变化会破坏这一点;例如,消息更改为“1 成功完成”(愚蠢的文本,但您知道我的意思),现在我的 grep 将找不到它要查找的内容。
有什么建议?这是在 bash 脚本中完成的。
我正在尝试从 Kubernetes 作业生成 Kubernetes 秘密。秘密是TLS证书,对于elasticsearch传输,我尝试了这个工作:
apiVersion: batch/v1
kind: Job
metadata:
name: conso-security-tls-gen-certs
spec:
template:
spec:
containers:
- name: generator
volumeMounts:
- name: certs
mountPath: "/certs"
image: "docker.elastic.co/elasticsearch/elasticsearch:7.4.2"
command: ["/bin/sh", "-c"]
args:
- "bin/elasticsearch-certutil ca (...) --silent -out /certs/bundle.p12"
restartPolicy: Never
volumes:
- name: certs
secret:
secretName: conso-security-tls-certs
backoffLimit: 4
Run Code Online (Sandbox Code Playgroud)
但正如https://github.com/kubernetes/kubernetes/issues/62099所说,该卷/certs是只读的。有没有办法像这样创建/编辑这个秘密?
我正在尝试使用以下文件运行外部bashyaml脚本。
该脚本位于该/scripts/run.sh文件夹内。我也已经给出了defaultMode: 0777
这是我得到的错误。
sh: 0: Can't open /scripts/run.sh
Run Code Online (Sandbox Code Playgroud)
apiVersion: v1
data:
script.sh: |-
echo "Hello world!"
kubectl get pods
kind: ConfigMap
metadata:
name: script-configmap
---
apiVersion: batch/v1
kind: Job
metadata:
labels:
app: script-job
name: script-job
spec:
backoffLimit: 2
template:
spec:
containers:
- command:
- sh
- /scripts/run.sh
image: 'bitnami/kubectl:1.12'
name: script
volumeMounts:
- name: script-configmap
mountPath: /scripts
subPath: run.sh
readOnly: false
restartPolicy: Never
volumes:
- name: script-configmap
configMap:
name: script-configmap
defaultMode: 0777
Run Code Online (Sandbox Code Playgroud) kubernetes ×12
kubernetes-jobs ×12
docker ×3
kubectl ×3
containers ×1
daemonset ×1
docker-swarm ×1
jobs ×1
postgresql ×1