用于 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 启动。
我正在使用 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 启动。