设为首页 收藏本站
查看: 1230|回复: 0

[经验分享] Kubernetes环境下的各种调试方法

[复制链接]

尚未签到

发表于 2018-1-4 13:13:06 | 显示全部楼层 |阅读模式
  作者:Jack47
  转载请保留作者和原文出处
  欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源。
  本文介绍在Kubernetes环境下的调试方法,希望对读者有用。如果关心Docker环境里的调试方法,可以看我的这篇文章:Useful commands for docker beginners

启动单个容器
  不使用Pod或Replication Controller,启动单个容器:
  

$ kubectl run webserver --image=nginx  

想更改镜像,又不想升级版本?
  每次修改之后,需要更新镜像的版本也好烦人啊。每次构建出新的镜像,Push到Docker Registry时,可以使用一个固定的版本,然后让Kubernetes在启动某个镜像时,无论本地是否有镜像,都去Docker Registry拉取镜像就好了。
  
ImagePullPolicy从默认的 IfNotPresent,改为 Always。

想直接修改容器里的程序,又不想更新镜像?
  什么,还能这样做?在容器内部修改,比如修改了脚本,或者直接替换二进制程序,然后使用docker restart container-id。我尝试过此时使用docker commit提交修改,但是下次启动时,Kubernets就会报错。应该是有完整性校验的原因。

Pod重启了,如何看重启之前的日志?
  下面的命令只能看到当前Pod的日志:
  

$ kubectl logs zookeeper-1  

  通过 --previous参数可以看之前Pod的日志
  

$ kubectl logs zookeeper-1 --previous  

查看Pod生命周期的事件
  通过如下命令,看命令末尾 events 一节,查看kubelet给APIServer发送的Pod生命周期里发生的事件
  

$ kubectl describe pod podname  

没有看到任何事件,但是Pod重启了?
  依然通过describe命令,Containers.
  • .Last State一节:
      

    $ kubectl describe pod podname  
    Name:       kafka-1
      
    ...
      

      
    Containers:
      kafka:
      ...
      State:      Running
      Started:     Sat, 08 Apr 2017 02:29:04 +0000
      Last State:     Terminated
      Reason:      OOMKilled
      Exit Code:    0
      Started:     Fri, 07 Apr 2017 11:06:56 +0000
      Finished:     Sat, 08 Apr 2017 02:29:04 +0000
      Ready:      True
      Restart Count:   1
      
    ...
      

      可以看到 Kafka-1 这个Container因为内存消耗太多,达到内存的上限(Memory Resource Limit)而被干掉了。如果看到 Reason: Completed,说明是容器内部pid为1的程序主动退出的。

    查看资源(CPU/Memory)使用情况
      资源使用最多的节点
      

    $ kubectl top nodes  

      资源使用最多的Pod
      

    $ kubectl top pods  

      查看节点的资源使用情况
      

    $ kubectl describe nodes | grep -A 2 -e "^\\s*CPU Requests"  

    如何摘下某个Pod进行Debug
      使用label机制,对Pod进行标记。在Service定义中,我们添加 status: serving字段。当需要摘下某个Pod做Debug,而又不影响整个服务,可以:
      

    $ kubectl get pods --selector="status=serving"  
    $ kubectl label pods webserver-rc-lxag2 --overwrite status=debuging
      

      此时kubelet就会把这个Pod从Service的后端列表中删掉。等到Debug完,想恢复?再改回去就好了:
      

    $ kubectl label pods webserver-rc-lxag2 --overwrite status=serving  

      References:
      10 most common reasons kuberntes deployments fail
      Kubernetes Community Resources

    资助Jack47写作,打赏一个鸡蛋灌饼吧
    DSC0000.jpg
    微信打赏
    DSC0001.jpg
    支付宝打赏

  • 运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
    2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
    3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
    4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
    5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
    6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
    7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
    8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

    所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-431505-1-1.html 上篇帖子: Kubernetes简介 下篇帖子: calico for kubernetes
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    扫码加入运维网微信交流群X

    扫码加入运维网微信交流群

    扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

    扫描微信二维码查看详情

    客服E-mail:kefu@iyunv.com 客服QQ:1061981298


    QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


    提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


    本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



    合作伙伴: 青云cloud

    快速回复 返回顶部 返回列表