提问者:小点点

不运行所有yamls的kubernetes的Pod和Job的头盔挂钩


我使用库伯内特斯与头盔3。

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

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

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

helm版本:v3.3.4

头盔版本(git)go1.14.9。

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

豆荚亚姆:

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安装测试/test--名称空间test--创建名称空间

即使我为预安装(Pod和Job)更改了挂钩,作业也从未运行过。

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

Pod测试mysql待定Pod测试mysql待定Pod

测试-mysql挂起Pod测试-mysql运行Pod

测试-mysql running Pod测试-mysql running Pod

测试-mysql运行...

在本例中,当我在作业中放置一个“bug”时,例如:containersx而不是container,我不会收到任何语法错误的通知。

也许因为MySQL正在运行(并且尚未完成),我可以强制转到hook声明的下一个yaml吗?(甚至我也声明了Pod和Job的正确顺序。Pod应该在Job之前运行)。

出了什么问题,如何确保在作业之前创建 Pod?当 Pod 开始运行时,我的作业会在那之后运行吗?

谢了。


共1个答案

匿名用户

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