Nodejs Kubernetes部署不断崩溃
我拉我的头发一个星期,但我接近放弃。请分享你的智慧。Nodejs Kubernetes部署不断崩溃
这是我的泊坞文件:
FROM node
RUN apt-get update
RUN mkdir -p /var/www/stationconnect
RUN mkdir -p /var/log/node
WORKDIR /var/www/stationconnect
COPY stationconnect /var/www/stationconnect
RUN chown node:node /var/log/node
COPY ./stationconnect_fromstage/api/config /var/www/stationconnect/api/config
COPY ./etc/stationconnect /etc/stationconnect
WORKDIR /var/www/stationconnect/api
RUN cd /var/www/stationconnect/api
RUN npm install
RUN apt-get install -y vim nano
RUN npm install supervisor forever -g
EXPOSE 8888
USER node
WORKDIR /var/www/stationconnect/api
CMD ["bash"]
它工作在泊坞窗独自例如运行良好
docker run -it 6bcee4528c7c
有什么建议吗?
这是显而易见的。您正在使用与docker run -it <container>
交互式终端bash会话来运行它。当你在kube中运行一个容器(或者在没有-it
的docker中)时,bash会立即退出,所以这就是它在kube部署中所做的事情。不说每次都会崩溃,只是按预期终止。
将您的命令改为一些持久的过程。即使sleep 1d
会做 - 它将不再死。您的节点应用程序也不会工作,因为您需要使用魔法命令在前台启动您的应用程序。
您可以将ENTRYPOINT命令添加到您的Dockerfile中,该命令执行在后台无限期运行的内容,例如,您运行脚本my_service.sh。这反过来可以启动一个像nginx这样的服务器,或者简单地做一个tail -f/dev/null。这将使您的吊舱在kubernetes中运行,因为此容器的主要任务尚未完成。在上面的Dockerfile中,bash被执行,但是一旦它运行完成并且容器完成。因此,当您尝试执行kubectl运行名称--image = YOUR_IMAGE它无法连接,因为k8s在新的容器启动后几乎立即终止运行容器的容器。这个过程将会像这样无限地继续下去。
请参阅this answer这里进行在线命令,可以帮助你运行你的形象是为了调试的目的...
当创建一个容器,你应该有一个前台进程,以保持容器活着。
什么,我所做的是增加一个shell脚本线 while true; do sleep 1000; done
我docker-entrypoint.sh结束,并指它在ENTRYPOINT [/docker-entrypoint.sh]
看看this issue以了解更多信息。
有一个example如何使一个Nodejs dockerfile,一定要检查出来。
分享'kubectl describe __pod__'和'kubectl logs __pod__' – 3h4x