POD客户端文档服务器没启动,k8s pod启动后停止问题解决

状态:有个k8s  tomcat应用 ,pod 启动后,状态由ContainerCreating变为Completed再变为CrashLoopBackOff

一开始以为docker容器问题,又由于在服务器运行,没有权限查看更具体情况。就决定在本地服务器编译、docker build、docker run ,在本地服务器验证没有问题,再在服务器上处理

1、本地编译,下载代码:git clone http://gitlab.testdomain.com/ps_oa_project/ps_oa_bt.git -b master

2、安装maven,配置setting 文件并配置setting文件

3、编译:cd coreoa-proxy ;mvn clean package -pl coreoa-proxy-service -am -Dmaven.test.skip=true

4、由于编译服务器没有安装docker ,把编译后的所有项目文件scp到另外一台安装了docker服务的测试服务器上130.223.212.105

5、下载tomcat镜像,由于安装docker 测试服务器无法连镜像服务器下载tomcat镜像,在容器集群节点上下载,执行命令:

docker login --username=user hub.testdomain.com

docker pull hub.testdomain.com/platform/test-tomcat:v1.0

6、把下载后的镜像导出、传输到测试docker服务器,导入镜像

docker save -o test-tomcat.tar hub.testdomain.com/platform/test-tomcat:v1.0

scp test-tomcat.tar 130.223.212.105:/opt/pmo

在docker测试服务器执行:

docker load -i test-tomcat.tar

7、这样测试服务器本地就有docker基础镜像和编译后的war包等docker build必要文件,其中Dockerfile内容为

FROM hub.testdomain.com/platform/test-tomcat:v1.0

ENV CATALINA_BASE=/opt/pmo/tomcat

ENV CATALINA_HOME=/opt/pmo/tomcat

RUN rm -fr /opt/pmo/tomcat/bin/catalina.sh

COPY coreoa-proxy-service/target/coreoa-proxy.war /opt/pmo/tomcat/webapps/coreoa-proxy.war

COPY catalina.sh /opt/pmo/tomcat/bin/

RUN chmod +x /opt/pmo/tomcat/bin/*.sh

ENTRYPOINT sh /opt/pmo/tomcat/bin/startup.sh

8、只保留Dockerfile前三行,剩余行都注释,docker build 并启动,命令为:

docker build -f Dockerfile -t oa1 .

docker run -d --name oa1 oa1

9、启动后,还是同样失败,针对最少操作还是失败,网上查找,说加个死循环命令,修改Dockerfile内容为:

FROM hub.testdomain.com/platform/test-tomcat:v1.0

ENV CATALINA_BASE=/opt/pmo/tomcat

ENV CATALINA_HOME=/opt/pmo/tomcat

RUN rm -fr /opt/pmo/tomcat/bin/catalina.sh

COPY coreoa-proxy-service/target/coreoa-proxy.war /opt/pmo/tomcat/webapps/coreoa-proxy.war

COPY catalina.sh /opt/pmo/tomcat/bin/

RUN chmod +x /opt/pmo/tomcat/bin/*.sh

ENTRYPOINT sh /opt/pmo/tomcat/bin/startup.sh & while true;do echo hello;sleep 5;done

10、启动后,容器状态能持续为Up状态,说明启动成功了,但是加了个死循环(一般不会这样操作),并且执行docker logs oa1 看不到任何tomcat日志。日志输出的是死循环打印hello,如想要输出tomcat日志,需要像执行死循环一样能在console打印日志。咨询运维同事,说tomcat 有一种console启动,查找一下,启动方式为:sh /opt/pmo/tomcat/bin/catalina.sh run。console启动后,console直接输出日志,于是修改Dockerfile 代码为:

FROM hub.testdomain.com/platform/test-tomcat:v1.0

ENV CATALINA_BASE=/opt/pmo/tomcat

ENV CATALINA_HOME=/opt/pmo/tomcat

RUN rm -fr /opt/pmo/tomcat/bin/catalina.sh

COPY coreoa-proxy-service/target/coreoa-proxy.war /opt/pmo/tomcat/webapps/coreoa-proxy.war

COPY catalina.sh /opt/pmo/tomcat/bin/

RUN chmod +x /opt/pmo/tomcat/bin/*.sh

ENTRYPOINT sh /opt/pmo/tomcat/bin/catalina.sh run

11、重新docker build 和docker run,容器可以持续Up状态,说明状态正常

docker stop oa1

docker rm oa1

docker rmi oa1

docker build -f Dockerfile -t oa1 .

docker run -d --name oa1 oa1

docker ps -a

执行结果:

[root@centos-test coreoa-proxy]# docker ps -a |grep oa1

567d9b6f16a9 oa1 "/bin/sh -c 'sh /opt…" 13 seconds ago Up 12 seconds 8080/tcp oa1

12、修改Dockerfile文件,上传代码库,重新在服务器上编译执行,还是不行,说明k8s 的command 命令覆盖Dockerfile的ENTRYPOINT命令,修改k8s模板命令。重新编译部署,启动正常

command: ["sh","-c","/opt/pmo/tomcat/bin/startup.sh"]

修改为:

command: ["sh","-c","/opt/pmo/tomcat/bin/catalina.sh run"]

总结:

1、pod 是否能持续运行,是由执行命令决定的,执行命令如果一执行就停止,控制台也停止持续输出,pod生命周期就结束,pod状态就会变成CrashLoopBackOff

2、docker file 修改的:ENTRYPOINT sh /opt/pmo/tomcat/bin/catalina.sh run ,在k8s里面,会被k8s模板的command 命令覆盖

欢迎加入自动化测试交流QQ群:143535941 ,进群问题回答:testway

欢迎关注技术公众号:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值