export PLUGIN_VERSION=0.1.1# linux x86_64curl-Lokubectl-debug.tar.gzhttps://github.com/aylei/kubectl-debug/releases/download/v${PLUGIN_VERSION}/kubectl-debug_${PLUGIN_VERSION}_linux_amd64.tar.gz# macoscurl-Lokubectl-debug.tar.gzhttps://github.com/aylei/kubectl-debug/releases/download/v${PLUGIN_VERSION}/kubectl-debug_${PLUGIN_VERSION}_darwin_amd64.tar.gztar-zxvfkubectl-debug.tar.gzkubectl-debugsudomvkubectl-debug/usr/local/bin/
新 Pod 的所有 Labels 会被删掉,避免 Service 将流量导到 fork 出的 Pod 上 新 Pod 的 ReadinessProbe 和 LivnessProbe 也会被移除,避免 kubelet 杀死 Pod 新 Pod 中目标容器(待排障的容器)的启动命令会被改写,避免新 Pod 继续 Crash
模拟 crash 状态,运行一个 tomcat ,给他一个不正常的启动命令
[root@k8s ~]# kubectl run tomcat2 --image=tomcat:8.5--commandssss# 可以看到在不停的重启[root@k8s ~]# kubectl get podNAMEREADYSTATUSRESTARTSAGEtomcat2-69fc49687c-n2bxn0/1CrashLoopBackOff250s~ kubectl debug tomcat2-69fc49687c-n2bxn --fork# chroot 到目标容器的根文件系统中~ chroot /proc/1/root~ ls /usr/local/openjdk-8/
# 先起一个服务~ oc run tomcat --image=tomcat:8.5 --port=8080~ oc get podNAMEREADYSTATUSRESTARTSAGEtomcat-1-2h6zf1/1Running044m# 进入debug 模式~ oc debug tomcat-1-2h6zf# hostname tomcat-1-2h6zf-debug# ls /usr/local/tomcatLICENSENOTICERELEASE-NOTESRUNNING.txtbinconfincludeliblogsnative-jni-libtempwebappswork# 另起一个终端看下,发现是单独起了一个debug 的pod[root@ocp311 ~]# oc get podNAMEREADYSTATUSRESTARTSAGEtomcat-1-2h6zf1/1Running045mtomcat-1-2h6zf-debug1/1Running033s
web 控制台 debug 模式
先运行一个异常的服务,因为 web 页面只有异常的pod 才有debug 选项
~ oc run tomcat-crash --image=tomcat:8.5 --port=8080--commandssss~ oc get podNAMEREADYSTATUSRESTARTSAGEtomcat-1-2h6zf1/1Running053mtomcat-crash-1-8fd7v0/1RunContainerError122stomcat-crash-1-deploy1/1Running025s
进入 web 控制台看下,对比下正常的pod tomcat-1-2h6zf 和异常的 pod tomcat-crash-1-8fd7v