我正在使用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/