[英]Kubernetes job update with helm
我有一個 Kubernetes 集群,我正在使用 Helm 在那里部署我的應用程序。 一切正常,但一方面,工作更新。 正如我所讀到的,作業是不可變的,這就是它們無法更新的原因,但我不明白,為什么 helm 沒有像為 Pod 那樣創建新作業?
最后,我想實現我的應用程序代碼被部署為一個運行數據庫遷移的作業。 我嘗試將其作為 Pod 進行,但對於 pod,重啟策略只能是“始終”,不支持“從不”,即使文檔另有說明。 我怎樣才能做到這一點,以便每次部署(新圖像標簽)都可以更新遷移並且它運行一次而不重新啟動?
您可以在此處使用 helm hooks。 官方鏈接: https ://helm.sh/docs/topics/charts_hooks/
使用“helm install”完成作業后,helm hook 應將其刪除。 執行“helm upgrade”后,應該會觸發一個新作業。 應用程序邏輯應處理安裝和升級方案。
下面是一些與 helm hooks 相關的概念。
注意:一個資源可以實現多個鈎子:
例如:注釋:“helm.sh/hook”:安裝后,升級后
注意:如果沒有指定鈎子刪除策略注釋,則默認應用鈎子創建之前的行為。
預安裝.yaml
apiVersion: v1
kind: Pod
metadata:
name: hook-preinstall
annotations:
"helm.sh/hook": "pre-install" ## Without this line, this becomes a normal K8s resource.
spec:
containers:
- name: hook1-container
image: busybox
imagePullPolicy: IfNotPresent
command: ['sh', '-c', 'echo The pre-install hook Pod is running - hook-preinstall && sleep 15']
restartPolicy: Never
terminationGracePeriodSeconds: 0
安裝后.yaml
apiVersion: v1
kind: Pod
metadata:
name: hook-postinstall
annotations:
"helm.sh/hook": "post-install" ## Without this line, this becomes a normal K8s resource.
spec:
containers:
- name: hook2-container
image: busybox
imagePullPolicy: IfNotPresent
command: ['sh', '-c', 'echo post-install hook Pod is running - hook-postinstall && sleep 10']
restartPolicy: Never
terminationGracePeriodSeconds: 0
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
demohook-testhook-5ff88bb44b-qc4n2 1/1 Running 0 5m45s
hook-postinstall 0/1 Completed 0 5m45s
hook-preinstall 0/1 Completed 0 6m2s
$
$ kubectl describe pod demohook-testhook-5ff88bb44b-qc4n2 | grep -E 'Anno|Started:|Finished:'
$ kubectl describe pod hook-postinstall | grep -E 'Anno|Started:|Finished:'
$ kubectl describe pod hook-preinstall | grep -E 'Anno|Started:|Finished:'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.