簡體   English   中英

kube.netes 的 Pod 和 Job 的 helm hook 未運行所有 yaml

[英]helm hook for both Pod and Job for kubernetes not running all yamls

我在 Helm 3 中使用 Kube.netes。

它在 CentOS Linux 7(核心)上運行。

K8S(通過運行查看:kubectl版本):

git 版本(kube.netes):v1.21.6,go 版本:go1.16.9。

掌舵版本:v3.3.4

掌舵版本(git)go1.14.9。

我需要創建一個在創建 Pod 后運行的作業。

吊艙 yaml:

apiVersion: v1
kind: Pod
metadata:
  name: {{ include "test.fullname" . }}-mysql
  labels:
    app: {{ include "test.fullname" . }}-mysql
  annotations:
    "helm.sh/hook": post-install
    "helm.sh/hook-weight": "-20"
    "helm.sh/delete-policy": before-hook-creation
spec:
  containers:
    - name: {{ include "test.fullname" . }}-mysql
      image: {{ .Values.mysql.image }}
      imagePullPolicy: IfNotPresent
      env:
        - name: MYSQL_ROOT_PASSWORD
          value: "12345"
        - name: MYSQL_DATABASE
          value: test

工作:

apiVersion: batch/v1
kind: Job
metadata:
  name: {{ include "test.fullname" . }}-migration-job
  labels:
    app: {{ include "test.fullname" . }}-migration-job
  annotations:
    "helm.sh/hook": post-install
    "helm.sh/hook-weight": "-10"
    "helm.sh/hook-delete-policy": hook-succeeded, hook-failed
spec:
  parallelism: 1
  completions: 1
  backoffLimit: 1
  template: #PodTemplateSpec (Core/V1)
    spec: #PodSpec (core/v1)
    initContainers: # regular
    - name: wait-mysql
      image: bitnami/kubectl
      imagePullPolicy: IfNotPresent
      args:
        - wait
        - pod/{{ include "test.fullname" . }}-mysql
        - --namespace={{ .Release.Namespace }}
        - --for=condition=ready
        - --timeout=120s
    containers:
      - name: {{ include "test.fullname" . }}
        image: {{ .Values.myMigration.image }}
        imagePullPolicy: IfNotPresent
        command: {{- toYaml .Values.image.entrypoint | nindent 12 }}
        args: {{- toYaml .Values.image.cmd | nindent 12}}

MySQL 是 MySQL 5.6 圖片。

當我寫上面的時候,也運行helm install test./test --namespace test --create-namespace

即使我更改了預安裝的掛鈎(針對 Pod 和 Job),該作業也從未運行過。

在這兩種情況下,我都會收到消息(並且需要按 - 退出 - 我也不希望出現這種情況:

Pod test-mysql pending Pod test-mysql pending Pod

test-mysql pending Pod test-mysql running Pod

test-mysql 運行 Pod test-mysql 運行 Pod

測試mysql正在運行...

在此示例中,當我在作業中放置一個“錯誤”時,例如: containersx而不是container ,我沒有收到任何語法錯誤的通知。

可能是因為 MySQL 正在運行(但未完成),我可以強制將 go 強制到鈎子聲明的下一個 yaml 嗎? (即使我聲明了 Pod 和 Job 的正確順序。Pod 應該在 Job 之前運行)。

出了什么問題,如何確保在作業之前創建 pod? 當 pod 開始運行時,我的工作會在那之后運行嗎?

謝謝。

根據您的配置,您似乎需要為 Job 精確設置post-install 掛鈎,因為它應該在所有資源加載到 Kube.netes 后執行。 在 Pod 和 Job 上執行pre-install掛鈎時,它在加載圖表的 rest 之前運行,這似乎阻止了 Job 啟動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM