我在 GKE 集群內運行兩個容器的 Kubernetes CronJob 遇到了一些問題。
兩個容器之一實際上正在執行必須由 CronJob 完成的作業。
這作業得很好。它在應該啟動時啟動,完成作業然后終止。到目前為止一切都很好。
似乎導致一些問題的是第二個容器,它是用于訪問資料庫實體的邊車容器。這不會終止并且似乎會導致 CronJob 本身不會終止的問題。這是一個問題,因為我看到隨著時間的推移運行的 Job 實體不斷累積。
有沒有一種方法可以將 Kubernetes 批處理 CronJob 配置為在其中一個容器成功執行時終止
apiVersion: batch/v1
kind: CronJob
metadata:
name: chron-job-with-a-sidecar
namespace: my-namespace
spec:
# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of the month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12)
# │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday;
# │ │ │ │ │ 7 is also Sunday on some systems)
# │ │ │ │ │ OR sun, mon, tue, wed, thu, fri, sat
# │ │ │ │ │
schedule: "0 8 * * *" # -> Every day At 8AM
jobTemplate:
metadata:
labels:
app: my-label
spec:
template:
containers:
# --- JOB CONTAINER -----------------------------------------------
- image: my-job-image:latest
imagePullPolicy: Always
name: my-job
command:
- /bin/sh
- -c
- /some-script.sh; exit 0;
# --- SIDECAR CONTAINER ----------------------------------------------
- command:
- "/cloud_sql_proxy"
- "-instances=my-instance:antaktis-south-3:user=tcp:1234"
# ... some other settings ...
image: gcr.io/cloudsql-docker/gce-proxy:1.30.0
imagePullPolicy: Always
name: cloudsql-proxy
# ... some other values ...
uj5u.com熱心網友回復:
不,嚴格來說,一旦“主”容器完成,就沒有辦法讓 Kubernetes 自動停止邊車容器。
我能想到的最接近的“kubernetes-native”解決方案是將 CronJob 設定concurrencyPolicy
為Replace
(請參閱CronJobSpec)。它不會在完成后停止 Sidecar,但至少每個新作業都會覆寫前一個作業,因此作業不會累積。不幸的是,使用此解決方案,您將失去作業經歷。
如果此解決方案不符合您的需求,您將需要在容器之間實作某種形式的通信,但 Kubernetes 本身并沒有內置此類內容。不過,有一些外部工具可以提供幫助,例如kubexit。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/537957.html