我正在定义一个 Kubernetes 作业来运行 rake 任务,但停留在如何编写命令......
我是 K8s 的新手,正在尝试在 K8s 中运行 Rails 应用程序。在我的 Rails 应用程序 Dockerfile 中,我创建了一个用户,将代码复制到 /home/abc 并在该用户中安装了 rvm 和 rails,还指定了一个入口点和命令:
ENTRYPOINT ["/home/abc/docker-entrypoint.sh"]
CMD bash -l -c "cd /home/abc && rvm use 2.2.10 --default && rake db:migrate && exec /usr/bin/supervisord -c config/supervisord.conf"
在 docker-entrypoint.sh 中,最后一个命令是
exec gosu abc "$@"
目标是最后,gosu 到用户 abc,然后运行 db migration 并通过 supervisord 启动服务器。它有效,虽然我不知道这是否是一个好习惯......
现在我想出于某种目的运行另一个 rake 任务。首先,我尝试使用 kubectl exec 命令运行它:
kubectl exec my-app-deployment-xxxx -- gosu abc bash -l -c 'cd /home/abc && rvm use 2.2.10 --default && rake app:init:test_task'
它有效,但它需要知道动态的 pod id。所以我尝试创建一个 K8s 作业并在命令中指定:
containers:
- name: my-app
image: my-app:v0.2
command:
- "gosu"
- "abc"
- "bash -l -c 'cd /home/abc && rvm use 2.2.10 --default && rake app:init:test_task'"
我希望作业可以成功完成,但它失败了,并且 kubectl 记录 job_pod 时的错误信息如下:
错误:执行:“bash -l -c 'cd /home/abc && rvm 使用 2.2.10 --default && rake app:init:test_task'”:stat bash -l -c cd /home/abc && rvm 使用 2.2 .10 --default && rake app:init:test_task': 没有这样的文件或目录
我认为这应该是因为如何编写“命令”部分以使用 gosu 运行多个命令...
谢谢你的帮助!