在头盔k8s作业模板中调用脚本文件

问题描述 投票:0回答:2

我正在尝试在头盔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   
kubernetes-helm
2个回答
0
投票

通常,Kubernetes仅运行打包在Docker映像中的软件。 Kubernetes绝不会在您的本地系统之外运行任何东西。在您的示例中,集群将创建一个新的未修改的busybox容器,然后从该容器的根目录尝试运行sh -c ../run.sh;否则,将创建一个新容器。由于该脚本不是股票busybox图像的一部分,因此它将不会运行。

这里最好的方法是从脚本中构建映像,并将其推送到Docker注册表。这是在Kubernetes中运行任何自定义软件的标准方法,因此您可能已经有一个工作流程来执行它。 (对于Minikube中的测试设置,您可以将本地Docker指向Minikube环境并构建本地映像,但这不能扩展到云中托管或在多主机环境中运行的事物。)

原则上,您可以将脚本上载到单独的Helm模板文件中的config map中,将其安装到您的作业规范中并运行它(您可能需要显式sh run.sh来解决文件权限问题)。根据您的环境,这可能和实际拥有图像一样有效,但是如果每次脚本更改时都需要更新和重新部署Helm图表,则通过构建和上传CI系统来执行相同的工作是“更正常的”一个新映像(它将与您的应用程序部署相同)。


0
投票

下面是在掌舵模板中实现脚本运行的方法

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
© www.soinside.com 2019 - 2024. All rights reserved.