我使用库伯内特斯与头盔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 开始运行时,我的作业会在那之后运行吗?
谢了。
根据您的配置,您似乎需要为Job设置post-install
hook,因为它应该在所有资源加载到Kubernetes后执行。在Pod和Job上执行预安装
钩子时,它会在加载图表的其余部分之前运行,这似乎会阻止Job启动。