Вызов файла скрипта в шаблоне задания helm k8s - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь вызвать скрипт внутри шаблона задания helm k8s. Когда я запускаю helm с

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   

Ответы [ 2 ]

0 голосов
/ 12 апреля 2020

Как правило, Kubernetes запускает только программное обеспечение, упакованное в Docker изображения. Kubernetes никогда не будет запускать вещи из вашей локальной системы. В вашем примере кластер создаст новый неизмененный контейнер busybox, затем из каталога root этого контейнера попытайтесь запустить sh -c ../run.sh; так как этот скрипт не является частью стандартного busybox образа, он не запустится.

Наилучший подход здесь состоит в том, чтобы создать изображение из вашего скрипта и поместить sh в Docker реестр. Это стандартный способ запуска любого пользовательского программного обеспечения в Kubernetes, поэтому у вас, вероятно, уже есть рабочий процесс для его выполнения. (Для настройки теста в Minikube вы можете указать свой локальный Docker на среду Minikube и создать локальный образ, но это не масштабируется для объектов, размещенных в облаке или иным образом работающих в среде с несколькими хостами.)

В принципе, вы можете загрузить сценарий в конфигурационной карте в отдельном файле шаблона Helm, смонтировать его в задание c и запустить его (вам может понадобиться явно sh run.sh обойти проблемы с разрешениями файлов). В зависимости от вашей среды это может работать так же хорошо, как и собственно изображение, но если вам нужно обновлять и повторно развертывать диаграмму Хелма каждый раз, когда изменяется скрипт, «более нормально» выполнять ту же работу, собирая и загружая вашу систему CI. новый образ (и он будет таким же, как и для развертываний вашего приложения).

0 голосов
/ 12 апреля 2020

Ниже приведен способ выполнения скрипта внутри шаблона руля

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
...