【发布时间】:2017-05-05 19:58:15
【问题描述】:
我使用 kubernetes secret 作为我的环境变量 (http://kubernetes.io/docs/user-guide/secrets/#using-secrets-as-environment-variables)。
我检查了 env vars 设置是否正确
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
【问题讨论】:
-
您在哪个文件中将
RAILS_ENV设置为“暂存”? -
@Brian 我使用 kubernetes secret 作为环境变量,但我不了解 kubernetes 如何实现的细节。
-
RAILS_ENV与“kubernetes secret”有什么关系? -
@Brian
RAILS_ENV是 kubernetes secret 设置的环境变量之一,还有MYSQL_PASSWD这样的其他值,您可以将secret视为键/值对数据存储。生命周期可能像 1. kubernetes 启动一个 pod(容器) 2. 将 secret 作为环境变量加载(我不完全理解) 3. 在 DockerfileCMD执行命令分配(这里运行一个 cron 进程)。 -
你能告诉我们这个 cron 在哪里/如何被执行吗?您使用的是 k8s 作业还是 cronjob?请添加您正在使用的 yaml 规范文件。
标签: ruby-on-rails bash cron debian kubernetes