我正在nodejs
上运行基于kubernetes
的应用程序,并且它处于CrashLoopBackOff
状态。
kubectl logs api-5db677ff5-p824m
> api@0.0.1 staging /home/node
> NODE_ENV=staging node src/loader.js
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! api@0.0.1 staging: `NODE_ENV=staging node src/loader.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the api@0.0.1 staging script.
npm ERR! This is probably not a problem with npm. There is likely additional
logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /home/node/.npm/_logs/2019-04-04T14_24_26_908Z-debug.log
日志中没有太多信息,我无法从容器中的给定路径访问完整的日志文件。
当我尝试检查容器中的文件时:
kubectl exec -it api-5db677ff5-p824m -- /bin/bash
这给了我这个错误:
错误:无法升级连接:找不到容器(“ api”)
答案 0 :(得分:2)
如果您有权访问k8s节点,则可以访问/var/log/pods
上(所有)pod的日志。
或者,您可以尝试将PVC安装到您的节点Pod,并配置您的节点应用程序以写入其中的日志。这样可以确保在容器崩溃时不会破坏崩溃日志。
另一种类似的方法是用sleep 3600
覆盖pod容器命令,然后将exec
覆盖到容器中以手动运行节点应用程序。一旦节点进程崩溃并写入日志,您就可以查看它们(在容器内部)。
希望这会有所帮助!
答案 1 :(得分:0)
您只能为处于“运行”状态的容器调用exec
。
如果容器处于CrashLoopBackOff
状态,则无法执行此操作,因为您没有运行中的容器,K8可以调用命令。
获取该文件的唯一方法是将其保存到某个共享卷或主机目录,然后在此处进行检查。尝试检查卷documentation。