容器化场景常用kubectl命令

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的区别

  1. catalina.log
    作用:记录Tomcat容器核心的运行日志,包括:
    启动/关闭过程中加载的配置、类、端口信息。
    System.out/System.err的输出(若未重定向到其他文件)。
    部署应用的上下文(如WAR包解析)日志。
    查看场景:
    Tomcat启动失败时(如端口冲突、配置文件错误)。
    需要排查JDBC连接池、Servlet容器等核心组件问题。
  2. catalina.out
    作用:通常是catalina.log的实时追加输出流(部分Linux环境下由启动脚本重定向生成)。
    内容可能和catalina.log部分重复,但更实时(例如未配置日志切割时,所有输出直接写入此文件)。
    查看场景:
    需要实时追踪Tomcat运行状态(如tail -f catalina.out)。
    容器突然崩溃但catalina.log未记录完整信息时。
  3. localhost_access.log
    作用:记录所有HTTP请求的访问日志,包括:
    请求的URL、IP、响应状态码、耗时、User-Agent等(格式可配置)。
    类似Nginx的access log。
    查看场景:
    分析接口调用量、响应耗时或异常请求(如大量404/500)。
    排查安全问题(如恶意爬虫或高频攻击IP)。
  4. 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

相关推荐
sky wide2 小时前
[特殊字符] Docker Compose 安装指南
运维·docker·容器
华科易迅2 小时前
Spring装配对象方法-构造方法
java·后端·spring
国医中兴2 小时前
数据稠密计算的内存优化:从理论到实践
微服务·云原生·容器·kubernetes·k8s
紫丁香3 小时前
高并发面试4
后端·面试·高并发
精神小伙就是猛3 小时前
使用go-zero快速搭建一个微服务(一)
开发语言·后端·微服务·golang
丘比特惩罚陆3 小时前
【无标题】
后端·gitee
song8546011343 小时前
为啥windows中使用docker部署需要启动 Docker Desktop
windows·docker·容器
cyber_两只龙宝3 小时前
【Docker】搭建企业级私有harbor仓库全流程详解
linux·运维·docker·云原生·容器
我就是你毛毛哥3 小时前
Docker 安装 GitLab
docker·容器·gitlab