作者: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写作,打赏一个鸡蛋灌饼吧
微信打赏
支付宝打赏

Kubernetes环境下的各种调试方法的更多相关文章

  1. eclipse环境下tomcat远程调试方法

    前提:Windows环境tomcat是以catalina.bat方式而非Windows服务形式启动(两者所使用的JAVA配置及JVM参数会有差异). 服务器段设置 方法1:修改CATALINA_OPT ...

  2. Kubernetes环境下如何运行Coherence缓存集群

    Oracle官方出了一个如何在Docker环境下运行Coherence的技术文档,大家可以参考: https://github.com/oracle/docker-images/tree/master ...

  3. React 环境搭建及页面调试方法

    React 环境搭建及页面调试方法 |作者:RexFang |出处:http://www.cnblogs.com/rexfang/ |关于作者:Java 程序员一枚 |版权:本文版权归作者和博客园共有 ...

  4. PHP环境下Memcache的使用方法

    原文:PHP环境下Memcache的使用方法 原文地址:http://www.2cto.com/kf/201503/384967.html 如今互联网崛起的时代,各大网站都面临着一个大数据流问题,怎么 ...

  5. Oracle 11g RAC环境下Private IP修改方法及异常处理

    Oracle 11g RAC环境下Private IP修改方法及异常处理 Oracle 11g RAC环境下Private IP修改方法及异常处理 一. 修改方法 1. 确认所有节点CRS服务以启动 ...

  6. 分布式环境下的id生成方法

    分布式环境下的id生成方法   前几天研究数据库分表分库的问题,其中有一个关键的地方就是生成唯一键的问题,假如数据表有1亿条数据,而且还在不断的增加,这里我们就需要考虑到分表分库,假设我们采用Hash ...

  7. CDN 环境下获取用户IP方法

    CDN 环境下获取用户IP方法 1 cdn 自定义header头的X-Real-IP,在后端使用$http_x_real_ip获得 proxy_set_header X-Real-IP $remote ...

  8. 转载:一种云环境下SaaS软件部署方法及装置与流程

    转载:http://www.xjishu.com/zhuanli/55/201710103925.html 本发明涉及云计算技术领域,特别是涉及一种云环境下SaaS软件部署方法及装置. 背景技术: 随 ...

  9. linux下core文件调试方法

    http://www.cnblogs.com/li-hao/archive/2011/09/25/2190278.html 在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映 ...

随机推荐

  1. 【排序算法】快速插入排序算法 Java实现

    基本思想 每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部插入完成. 设数组为a[0...n-1] 初始时,a[0]自成一个有序区,无序区为a[1...n-1] ...

  2. Android 增量更新

    title: Android NDK之增量更新 1.增量更新使用到的库bsdiff和bzip2 bsdiff库是一个开源的二进制差分工具,通过对比Apk的二进制,从而进行差分包的生成. bsdiff库 ...

  3. windows 2003装.net 4.0时提示 WIC windows Imaging Component

    运行此安装程序之前,必须安装32位windows映像处理组件(WIC) WIC windows Imaging Component下载地址: http://download.microsoft.com ...

  4. Java虚拟机学习 - 垃圾收集器

    HotSpot JVM收集器 上面有7中收集器,分为两块,上面为新生代收集器,下面是老年代收集器.如果两个收集器之间存在连线,就说明它们可以搭配使用. Serial(串行GC)收集器 Serial收集 ...

  5. Asp.Net 常用工具类之加密——对称加密DES算法(2)

    又到周末,下午博客园看了两篇文章,关于老跳和老赵的程序员生涯,不禁感叹漫漫程序路,何去何从兮! 转眼毕业的第三个年头,去过苏州,跑过上海,从一开始的凌云壮志,去年背起行囊默默回到了长沙准备买房,也想有 ...

  6. Visual Studio 20周年软件趋势随想

    从2002年开始,.net让开发人员能快速构建和部署应用程序,便捷的开发windows和web服务器应用,同时著名的hacker Miguel de Icaza ,Miguel 为了GNOME项目启动 ...

  7. React组件开发(一)初识React

    *React不属于MVC.MVVM,只是单纯的V层. *React核心是组件(提高代码复用率.降低测试难度.代码复杂度). *自动dom操作,状态对应内容. *React核心js文件:react.js ...

  8. Java面试15|网络

    1.TCP(Transmission Control Protocol)三次握手与四次分手 TCP在不可靠的传输信道上提供了可靠传输的抽象,隐藏了我们的应用程序大部分的复杂性功能:丢包重传,按序传送, ...

  9. html、css、js实现手风琴图片滑动

    手风琴图片滑动是我最近学的一个图片的效果,感觉不错,分享给大家. 最终效果见 :http://gjhnstxu.me/squeezebox/demo.html 详细代码如下: html代码: < ...

  10. UI --UIView 及其子类

    一 > UIView  1> iOS 概述: iOS 是 Apple 公司的移动操作系统,主要用于iPhone, iPad, iPad Mini , iPod Touch 等移动产品. 借 ...