用于 kubernetes 的 Pod 和 Job 的 helm hook 而不是 运行 所有 yaml

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

我正在使用 Kubernetes 和 Helm 3。

在 CentOS Linux 7 (Core) 上是 运行。

K8S(通过运行ning查询:kubectl版本):

git版本(kubernetes):v1.21.6,go版本:go1.16.9.

头盔版本:v3.3.4

helm版本(git) go1.14.9.

我需要在创建 Pod 后创建一个 运行ning 的作业。

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),作业也永远不会 运行ning。

在这两种情况下,我都会收到消息(并且需要按 - 退出 - 我也不希望出现这种情况:

Pod test-mysql pending Pod test-mysql pending Pod

test-mysql pending Pod test-mysql running Pod

test-mysql running Pod test-mysql running Pod

test-mysql running ...

在这个例子中,当我在作业中放置一个 'bug' 时,例如:containersx 而不是 container,我没有收到任何错误的通知语法。

可能是因为MySQL是运行ning(还没有完成),我可以强制转到下一个hook声明的yaml吗? (即使我声明了 Pod 和 Job 的正确顺序。Pod 应该在 Job 之前 运行)。

出了什么问题,如何确保在作业之前创建 pod?当 pod 启动 运行ning 时,我的工作将 运行 之后?

谢谢。

根据您的配置,您似乎需要为 Job 精确设置 post-install hook,因为它应该在所有资源加载到 Kubernetes 后执行。在 Pod 和 Job 上执行 pre-install 挂钩时,在图表的其余部分加载之前 运行,这似乎阻止了 Job 启动。