Задание Kubernetes не распознает среду

Я использую следующий шаблон работы:

 apiVersion: batch/v1
kind: Job
metadata:
  name: rotatedevcreds2
spec:
  template:
    metadata:
      name: rotatedevcreds2
    spec:
      containers:
      - name: shell
        image: akanksha/dsserver:v7
      env:
      - name: DEMO
        value: "Hello from the environment"
      - name: personal_AWS_SECRET_ACCESS_KEY
        valueFrom:
          secretKeyRef:
            name: rotatecreds-env
            key: personal_aws_secret_access_key
      - name: personal_AWS_SECRET_ACCESS_KEY_ID
        valueFrom:
          secretKeyRef:
            name: rotatecreds-env
            key: personal_aws_secret_access_key_id
      - name: personal_GIT_TOKEN
        valueFrom:
          secretKeyRef:
            name: rotatecreds-env
            key: personal_git_token
        command:
         - "bin/bash"
         - "-c"
         - "whoami; pwd; /root/rotateCreds.sh"
      restartPolicy: Never
      imagePullSecrets:
      - name: regcred

Сценарий оболочки запускает некоторые невозможные задачи, что приводит к:

    TASK [Get the existing access keys for the functional backup ID] ***************
    fatal: [localhost]: FAILED! => {"changed": false, "cmd": "aws iam list-access-keys --user-name ''", "failed_when_result": true, "msg": "[Errno 2] No such file or directory", "rc": 2}

Однако, если я вращаю стручок, используя тот же iamge, используя следующее

apiVersion: batch/v1
kind: Job
metadata:
  name: rotatedevcreds3
spec:
  template:
    metadata:
      name: rotatedevcreds3
    spec:
      containers:
      - name: shell
        image: akanksha/dsserver:v7
        env:
        - name: DEMO
          value: "Hello from the environment"
        - name: personal_AWS_SECRET_ACCESS_KEY
          valueFrom:
            secretKeyRef:
              name: rotatecreds-env
              key: personal_aws_secret_access_key
        - name: personal_AWS_SECRET_ACCESS_KEY_ID
          valueFrom:
            secretKeyRef:
              name: rotatecreds-env
              key: personal_aws_secret_access_key_id
        - name: personal_GIT_TOKEN
          valueFrom:
            secretKeyRef:
              name: rotatecreds-env
              key: personal_git_token
        command:
         - "bin/bash"
         - "-c"
         - "whoami; pwd; /root/rotateCreds.sh"
      restartPolicy: Never
      imagePullSecrets:
      - name: regcred

Это создает POD, и я могу войти в него и запустить /root/rotateCreds.sh

Во время выполнения задания кажется, что он не может распознать aws cli. Я попытался отладить whoami и pwd, которые равны root и / соответственно, и это нормально. Любые указатели, чего не хватает? Я новичок в работе.

Для дальнейшей отладки в шаблоне задания я добавил спящий режим на 10000 секунд, чтобы я мог войти в контейнер и посмотреть, что происходит. Я заметил, что после входа в систему я также смог запустить скрипт вручную. Команда aws была правильно распознана.


person codec    schedule 03.04.2019    source источник


Ответы (2)


Вероятно, ваш PATH настроен неправильно, быстрое решение — определить абсолютный путь к aws-cli, например /usr/local/bin/aws, в сценарии /root/rotateCreds.sh.

person maaz    schedule 03.04.2019
comment
Действительно, это было проблемой. После указания абсолютного пути все заработало. Опять же, после входа в модуль вручную, я мог видеть путь. Мне интересно, почему aws не установлен в пути, когда я запускаю задание! Изображение, которое я использую, уже имеет заданный путь. - person codec; 04.04.2019

Итак, я добавил команду экспорта для обновления пути, и это решило проблему. Проблема заключалась в следующем: я использовал командный ресурс, поэтому он не был в среде bash. Таким образом, мы можем использовать ресурс оболочки с аргументом bash, как описано здесь: https://docs.ansible.com/ansible/latest/modules/shell_module.html или экспортируйте новый PATH.

person codec    schedule 04.04.2019