1. kubectl编辑服务容器的deploy文件
kubectl edit deploy 服务名-n 命名空间
2. kubectl编辑服务容器的resourceclaim
kubectl edit resourceclaim 服务名.resourceclaim -n 命名空间
3. 查看所有服务的pod的运行状态
kubectl get pod -n 命名空间 例如 kubectl get pod -n mcinstbiz
或者加上grep,指定想看的那个服务名 kubectl get pod -n 命名空间 | grep 服务名前缀
进阶
每次这个命令只能看到一次所有pod的状态,要一直执行才能看到啥时候关注的那个pod的状态如何,这个时候就可以在前面加上watch -n命令来让他在屏幕上一直刷新。
watch -n 1 kubectl get pod -n mcinstbiz
-n参数后面指定刷新时间,1就表示每秒刷新一次,这样当我们布上去一个新包后,只用盯帧观察目标pod就行了。
4. 快速进入容器
kubectl exec -it $(kubectl get pod -A | grep 服务名前缀 | grep 服务名前缀 | awk '{print $2}' | head -n 1) -n 命名空间 -- bash
5. 查看各节点的状态
kubectl get nodes -o wide
6. kubectl快速查看服务的日志
kubectl logs -f $(kubectl get pods -n mcinstbiz --field-selector=status.phase=Running | grep "目标服务名称" | awk '{print $1}' | head -n1) -n mcinstbiz
7. 查看pod的状态
kubectl describe pod pod名称 -n 命名空间
8. 容器内测试接口
IR接口
curl -i --unix-socket /opt/sidecar/ir/http.sock --location 'http://localhost/接口路径'
ER接口
curl -i --unix-socket /opt/sidecar/http.sock --location 'http://localhost/接口路径'
9. 容器内日志路径
先进入容器,再进入如下目录
服务的日志路径
/opt/log/textlog/pod名/log/
工具初始化log
/opt/log/textlog/tool/initTool.log
tomcat的log
/opt/log/textlog/pod名/tomcatlog
这几个log的区别
- catalina.log
作用:记录Tomcat容器核心的运行日志,包括:
启动/关闭过程中加载的配置、类、端口信息。
System.out/System.err的输出(若未重定向到其他文件)。
部署应用的上下文(如WAR包解析)日志。
查看场景:
Tomcat启动失败时(如端口冲突、配置文件错误)。
需要排查JDBC连接池、Servlet容器等核心组件问题。 - catalina.out
作用:通常是catalina.log的实时追加输出流(部分Linux环境下由启动脚本重定向生成)。
内容可能和catalina.log部分重复,但更实时(例如未配置日志切割时,所有输出直接写入此文件)。
查看场景:
需要实时追踪Tomcat运行状态(如tail -f catalina.out)。
容器突然崩溃但catalina.log未记录完整信息时。 - localhost_access.log
作用:记录所有HTTP请求的访问日志,包括:
请求的URL、IP、响应状态码、耗时、User-Agent等(格式可配置)。
类似Nginx的access log。
查看场景:
分析接口调用量、响应耗时或异常请求(如大量404/500)。
排查安全问题(如恶意爬虫或高频攻击IP)。 - localhost.log
作用:记录与具体应用相关的日志,尤其是:
应用内未捕获的异常(如Servlet/JSP抛出的堆栈信息)。
部分依赖库(如Hibernate、Spring)的DEBUG级别日志(若配置了相关输出)。
查看场景:
应用抛出500 Internal Server Error时,优先查看此日志定位代码问题。
需要确认过滤器(Filter)、监听器(Listener)的执行逻辑时。
优先级总结
Tomcat自身问题(启动失败、资源不足)→ catalina.log或catalina.out。
HTTP请求问题(接口错误、性能瓶颈)→ localhost_access.log。
应用代码问题(空指针、数据库异常)→ localhost.log。
可根据问题阶段和日志特征快速定位文件。
10、手动上传镜像
在后台执行命令pkgctl push /root/pkg_tmp其中/root/pkg_tmp为镜像包的目录,可自定义,一般通过工具手动上传到环境上
11、后台进入服务的数据库
记得修改这几个变量,保存为快捷方式
bash
kubectl exec -it 数据库空间 -n 命名空间 -- zsql_lite 数据库名@数据库空间-0:32080
提高效率的快捷命令
快速搜索常用服务的日志
使用场景:想看服务里自己添加的日志,手动进入pod再进入日志查看比较低效,可以使用这个命令快速的搜索。
在service_map里修改添加业务上常见的命名空间和服务,然后运行,还可以在执行时第一个service里直接给目标服务,不给的话就会默认去service_map搜。执行后再输入你想搜的日志内容,就可以了。
bash
service="(目标服务,可选)"; namespace=""; namespace=${namespace:-$(kubectl get namespace | grep mc.*biz | awk '{ print $1 }')}; declare -A service_map; service_map=( ["命名空间1"]="服务1" ["命名空间2"]="服务2" ["命名空间3"]="服务3" ); service="${service:-${service_map[${namespace}]}}"; read -p "Please enter the pattern you want to search for: " pattern; for i in $(kubectl get pods -n ${namespace} | grep -i ${service} | awk '{ print $1 }'); do echo -e "\e[34m${i}:\\e[0m"; kubectl exec -itq -n ${namespace} ${i} -- bash -c "cd /opt/log/textlog/${i}-${service}*/log/${service}* && zgrep --color=always '${pattern}' *"; echo -e ""; done
快速编辑服务的deployment的版本号,用于环境上快速替包验证
本地出了新包,传到环境上后需要修改deployment里的版本号时,手动编辑deployment里好几个地方的版本号比较麻烦,可以使用如下命令。使用后只需要输入要替换的版本号。26这里的版本号正则表达式根据实际情况修改,修改目标服务和命名空间。
bash
read -p "Please enter the version of the image you want to replace with: " version; if [[ "${version}" =~ ^26[0-9.]*[0-9]+$ ]]; then echo "Replacing version to ${version}"; kubectl get deployment 目标服务 -n 目标命名空间 -o yaml | sed "s/26[0-9.]*/${version}/" | kubectl apply -f -; else echo "Abort, please check if version is correct!"; fi
快速进入业务常用容器
bash
kubectl exec -it $(kubectl get pod -A | grep 常用服务1 | grep 常用服务2 | awk '{print $2}' | head -n 1) -n 命名空间-- bash
快速进入容器的log目录
cid=(crictl ps \| grep -w " 目标容器" \| grep -v '排除不要的容器' \| head -n 1 \| awk '{print 1}'); pid=(crictl inspect --output go-template --template '{``{ .info.pid }}' ${cid});cd /proc/$pid/root/opt/log/textlog/
分析日志里特定URL的404错误
read -p "Please enter url: " url;router_ids=(zgrep"(zgrep "(zgrep"{url}" access.log*|grep ' 404 '|sort -k2|tail -3|awk '{print KaTeX parse error: Expected 'EOF', got '}' at position 7: (NF-1)}̲');if [ -n "router_ids" ]; then zgrep -e "$router_ids" *;fi
通过Pod名称快速SSH跳到pod所在节点
read -p "Please enter client pod name: " pod_name;restart_time=kubectl get pods -o wide -A|grep $pod_name|awk '{print $ 5}';if [ restart_time -eq 0 \]; then node_index=8; else node_index=10; fi;node_name=`kubectl get pods -o wide -A|grep pod_name|awk -v node_index=node_index '{print node_index}';suffix=' ';external_ip=kubectl get nodes -owide|grep "node_namesuffix"|awk '{print 6}'`;ssh external_ip