我正在使用kubernetes secret作为环境变量
(http://kubernetes.io/docs/user-guide/secrets/#using-secrets-as-environment-variables)。

我检查了是否通过正确设置了环境变量

kubectl exec -it my_pod bash

1。
echo $RAILS_ENV #=> staging

2。
bin/rails c;
puts ENV['RAILS_ENV'] #=> staging

它对我的rails应用程序和bash命令很好用,但是在执行cron进程时不起作用。

我已经阅读了一些了解cron进程的文章(例如https://unix.stackexchange.com/questions/27289/how-can-i-run-a-cron-command-with-existing-environmental-variables),并且知道在执行cron命令之类的代码之前应该获取.profile或.bashrc的源代码。
$ crontab -l

* * * * * . $HOME/.profile; /bin/bash -l -c 'echo rails_env=$RAILS_ENV >> /tmp/cron_test.log'

* * * * * . $HOME/.bashrc; /bin/bash -l -c 'echo rails_env=$RAILS_ENV >> /tmp/cron_test.log'

但两者都不适合我ˊˋ

结果
rails_env=

任何帮助将不胜感激!

===

[更新:添加kubernetes yaml配置]

由kubernetes config和kubernetes secret分配的两个环境变量都可以在bash和rails应用程序中读取,但在cron进程中不起作用。

deployment.yaml
spec:
  containers:
  - name: my_rails
  ...
    command:
    - bash
    args:
    - /tmp/run_cron.sh
  ...
    env:
      - name: RAILS_ENV
        value: staging
      - name: MYSQL_PASSWORD
        valueFrom:
          secretKeyRef:
            name: rails-secret
            key: MYSQL_PASSWORD

secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: rails-secret
type: Opaque
data:
  MYSQL_PASSWORD: ENCODED_PASSWORD

最佳答案

可能不应该在容器内运行cron脚本,而应该使用CronJobs,您可以在其中从 secret 中设置环境变量,方法与部署相同。

关于ruby-on-rails - 如何使用kubernetes secret设置的环境变量运行cron命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41245076/

10-16 04:12