我正在尝试在头盔k8s作业模板中调用脚本。当我用
掌舵时
helm install ./mychartname/ --generate-name
该作业正在运行,但是找不到脚本文件(run.sh)。头盔有可能吗?
apiVersion: batch/v1
kind: Job
metadata:
name: pre-install-job
spec:
template:
spec:
containers:
- name: pre-install
image: busybox
imagePullPolicy: IfNotPresent
command: ['sh', '-c', '../run.sh']
restartPolicy: OnFailure
terminationGracePeriodSeconds: 0
backoffLimit: 3
completions: 1
parallelism: 1
这是我的目录结构
├── mychartname
│ ├── templates
│ │ ├── test.job
│ │──run.sh
答案 0 :(得分:0)
以下是在Helm模板中实现脚本运行的方法
apiVersion: batch/v1
kind: Job
metadata:
name: pre-install-job-v05
spec:
template:
spec:
containers:
- name: pre-install-v05
image: busybox
imagePullPolicy: IfNotPresent
command: ["/bin/sh", "-c", {{.Files.Get "scripts/run.sh" }}]
restartPolicy: OnFailure
terminationGracePeriodSeconds: 0
backoffLimit: 3
completions: 1
parallelism: 1
答案 1 :(得分:0)
通常,Kubernetes仅运行Docker映像中打包的软件。 Kubernetes绝不会在您的本地系统之外运行任何东西。在您的示例中,集群将创建一个新的未修改的busybox
容器,然后从该容器的根目录尝试运行sh -c ../run.sh
;由于该脚本不是股票busybox
图像的一部分,因此它将无法运行。
这里最好的方法是从脚本中构建映像并将其推送到Docker注册表。这是在Kubernetes中运行任何自定义软件的标准方法,因此您可能已经有一个工作流程来执行它。 (对于Minikube中的测试设置,您可以将本地Docker指向Minikube环境并构建本地映像,但这不能扩展到云中托管或在多主机环境中运行的事物。)
原则上,您可以在config map中将脚本上传到单独的Helm模板文件中,将其装入您的工作规范中并运行它(您可能需要显式sh run.sh
来绕过文件-权限问题)。根据您的环境,这可能与实际拥有图像一样有效,但是如果每次脚本更改时都需要更新和重新部署Helm图表,则通过构建和上传CI系统来执行相同的工作是“更正常的”一个新映像(它将与您的应用程序部署相同)。