zoukankan      html  css  js  c++  java
  • 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 

    欢迎关注技术公众号:

  • 相关阅读:
    操作系统的概念
    流量监听的基础利用
    后门的学习与清理
    关于phpstudy打开phpmyadmin无法打开
    SSRF服务器请求伪造
    javascript基础流程控制
    Repository中自己写修改、删除语句是需要添加的注解
    SpringBoot链接数据库
    SpringBoot项目实战:企业项目管理系统
    ErrorUtils
  • 原文地址:https://www.cnblogs.com/testway/p/15107884.html
Copyright © 2011-2022 走看看