我有一个小的NodeJS脚本,我想在一个kubernetes集群的容器中作为CronJob运行它。我很难弄清楚如何做到这一点,因为大多数例子都是简单的“运行这个Bash命令”类型的交易。
package.json:
{
...
"scripts": {
"start": "node bin/path/to/index.js",
"compile": "tsc"
}
}
npm run compile && npm run start
在命令行上工作。
停靠文件:
FROM node:18
WORKDIR /working/dir/
...
RUN npm run compile
CMD [ "npm", "run", "start" ]
当我构建并在命令行上运行这个容器时,脚本成功运行了。这让我相信上面的大多数事情都是正确的,这一定是我的CronJob的问题...
my-cron.yaml:
apiVersion: batch/v1
kind: CronJob
metadata:
name: cron-foo
spec:
schedule: "* * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: job-foo
image: gcr.io/...
imagePullPolicy: IfNotPresent
restartPolicy: OnFailure
当我kubectl apply -f my-cron.yaml
时,我确实得到了一些运行的pod,每分钟一个,但是它们都错误了:
% kubectl logs cron-foo-27805019-j8gbp
> mdmp@0.0.1 start
> node bin/path/to/index.js
node:internal/modules/cjs/loader:998
throw err;
^
Error: Cannot find module '/working/dir/bin/path/to/index.js'
at Module._resolveFilename (node:internal/modules/cjs/loader:995:15)
at Module._load (node:internal/modules/cjs/loader:841:27)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:23:47 {
code: 'MODULE_NOT_FOUND',
requireStack: []
}
Node.js v18.11.0
事实上,它正在尝试运行正确的命令,这意味着正确的Docker容器被成功拉取,但我不知道为什么找不到脚本...
任何帮助都将不胜感激。我见过的大多数CronJob示例在模板规范中都有一个command:
列表。
1条答案
按热度按时间v7pvogib1#
当你
docker run ...
时,你显示的关于找不到路径的错误应该出现-但是它没有!因此,我假设它与
imagePullPolicy
有关。某些内容被修复,在本地检查,然后重新推送到给定的注册表供Kubernetes工作负载使用。如果它是用相同的标记重新推送的,那么不要忘记告诉Kubernetes查询注册表,通过将imagePullPolicy
更改为Always
来下载新的摘要。