【问题标题】:Kubernetes job does not recognize environmentKubernetes 作业无法识别环境
【发布时间】:2019-04-04 08:33:46
【问题描述】:

我正在使用以下工作模板:

 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

shell 脚本运行一些 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 旋转 pod

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,我可以登录到该 pod 并运行 /root/rotateCreds.sh

在运行作业时,它似乎无法识别 aws cli。我尝试调试whoamipwd,它们分别等于root/,这很好。任何指针缺少什么?我是工作新手。

为了在作业模板中进一步调试,我添加了 10000 秒的睡眠,以便我可以登录到容器并查看发生了什么。我注意到登录后我也可以手动运行脚本。 aws 命令被正确识别。

【问题讨论】:

    标签: kubernetes kubernetes-jobs


    【解决方案1】:

    很可能您的PATH 设置不正确, 一个快速的解决方法是在 /root/rotateCreds.sh 脚本中定义 aws-cli 的绝对路径,如 /usr/local/bin/aws

    【讨论】:

    • 确实是问题所在。在给出绝对路径之后,事情就奏效了。再次手动登录 pod 后,我可以看到路径。我想知道为什么在我运行作业时没有在路径中设置 aws!我正在使用的图像已经设置了路径。
    【解决方案2】:

    好的,所以我添加了一个导出命令来更新路径并解决了问题。问题是:我使用的是命令资源,所以它不在 bash 环境中。因此,我们可以使用带有 bash 参数的 shell 资源,如下所述: https://docs.ansible.com/ansible/latest/modules/shell_module.html 或导出新的 PATH。

    【讨论】:

      猜你喜欢
      • 2013-09-30
      • 1970-01-01
      • 2016-12-13
      • 2019-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-15
      相关资源
      最近更新 更多