#kubernetes #kubernetes-jobs
#kubernetes #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
Сценарий оболочки запускает некоторые задачи ansible, что приводит к:
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
Это создает модуль, и я могу войти в модуль и запустить /root/rotateCreds.sh
Во время выполнения задания кажется, что оно не может распознать aws cli. Я попытался отладить whoami
и pwd
, которые равны root
и /
соответственно, и это нормально. Какие-либо указатели на то, чего не хватает? Я новичок в заданиях.
Для дальнейшей отладки в шаблоне задания я добавил режим ожидания на 10000
секунды, чтобы я мог войти в контейнер и посмотреть, что происходит. Я заметил, что после входа в систему я также смог запустить скрипт вручную. aws
команда была распознана правильно.
Ответ №1:
Вероятно, у вас PATH
неправильно настроено, быстрое исправление — определить абсолютный путь к aws-cli, как /usr/local/bin/aws
в /root/rotateCreds.sh
script
Комментарии:
1. Действительно, это была проблема. После указания абсолютного пути все сработало. Снова после входа в модуль вручную я смог увидеть путь. Мне интересно, почему aws не устанавливается в path при запуске задания! К образу, который я использую, уже задан путь.
Ответ №2:
Хорошо, поэтому я добавил команду экспорта для обновления пути, и это устранило проблему. Проблема заключалась в том, что я использовал командный ресурс, поэтому его не было в среде bash. Поэтому мы можем либо использовать ресурс оболочки с аргументом bash, как описано здесь:https://docs.ansible.com/ansible/latest/modules/shell_module.html или экспортируйте новый ПУТЬ.