一、 每日必用(查看状态)
这些命令用于日常巡检,看服务活着没。
命令 作用 场景/技巧
| 命令 | 作用 | 场景/技巧 |
|---|---|---|
kubectl get pods |
查看 Pod 列表 | 最基础。技巧:加 -o wide 可以看到 Pod 在哪个 Node 上以及它的 IP。 |
kubectl get svc |
查看 Service 列表 | 查看 Service IP 和端口映射。 |
kubectl get nodes |
查看节点状态 | 确认机器是不是 Ready。技巧:加 -L topology.kubernetes.io/zone 可以直接看到节点在哪个区 (b/c/d)。 |
kubectl get ing |
查看 Ingress | 如果你用了 Ingress,这里看入口 IP。 |
kubectl top pod |
查看 Pod 资源占用 | 查看 CPU/内存 谁高谁低。 |
kubectl top node |
查看 节点 资源占用 | 看看是不是某台机器快被撑爆了。 |
💡 重点参数:
-n <namespace>: 指定命名空间(如你的-n xxx)。-A: 查看所有命名空间(All namespaces)。-w: 持续监控变化(Watch),比如kubectl get pods -w,看着 Pod 从 Creating 变 Running。
二、 排查神器(找 Bug 核心)
当你发现服务不对劲(连不上、报错、重启)时,用这组命令。
1.显微镜:describe
这是 K8s 里最重要的命令,没有之一。
// 查看 Pod 为什么起不来,或者为什么 Readiness 失败
kubectl describe pod <pod-name> -n <namespace>
- 看哪里 :拉到最下面的 Events 部分。镜像拉取失败、健康检查不过、资源不足都在这写着。
#查看 Service 流量分发给谁了
kubectl describe svc <service-name> -n <namespace>
- 看哪里 :看 Endpoints 这一行。如果是 None 或者 IP 很少,说明 Service 找不到 Pod。
2. 查日志:logs
#查看当前日志
kubectl logs <pod-name> -n <namespace>
#实时追踪日志(像 Linux 的 tail -f)
kubectl logs -f <pod-name> -n <namespace>
#【高阶】查看"上一次"崩溃前的日志
kubectl logs <pod-name> --previous -n <namespace>
- 场景 :如果 Pod 陷入
CrashLoopBackOff(反复重启),直接看当前日志可能什么都没有,用--previous能看到它死前最后吐了什么错。
3. 登录容器:exec
就像 SSH 进虚拟机一样,进去手动测连通性。
#进入容器内部
kubectl exec -it <pod-name> -n <namespace> -- /bin/bash
#或者 (如果镜像里没有 bash)
kubectl exec -it <pod-name> -n <namespace> -- /bin/sh
- 进去干嘛 :
curl localhost:8080测接口,或者ping数据库地址,验证网络通不通。
4. 配置文件导出:get -o yaml
#把线上的配置导出成 yaml 文件,方便对比
kubectl get pod <pod-name> -n <namespace> -o yaml > my-pod.yaml
三、 救火操作(修复与重启)
1. 优雅重启
不需要删除 Pod,让 K8s 逐个重启(滚动更新)。
#重启某个 Deployment 下的所有 Pod
kubectl rollout restart deployment/<deployment-name> -n <namespace>
2. 暴力删除
删掉 Pod,让控制器自动拉一个新的(常用于卡死状态)。
kubectl delete pod <pod-name> -n <namespace>
#【慎用】如果卡在 Terminating 删不掉,强制删除
kubectl delete pod <pod-name> -n <namespace> --grace-period=0 --force
3. 临时修改
直接在线编辑配置,保存即生效(用于快速验证参数)。
kubectl edit svc <service-name> -n <namespace>
4. 扩缩容
流量突然来了,手动加机器。
kubectl scale deployment <deployment-name> --replicas=5 -n <namespace>
四、 排查流程总结
遇到问题可以按这个顺序敲命令:
- 看宏观 :
kubectl get pods -n dayzero -o wide
(看是不是有的 Running 有的 Pending,IP 分配了没,在哪个节点) - 看资源 :
kubectl top pods -n dayzero
(看是不是有的忙死,有的闲死) - 看细节(关键) :
kubectl describe pod <那个闲死的Pod> -n dayzero
(看 Events 有没有 Readiness probe failed) - 看网络端点 :
kubectl get endpoints <service-name> -n dayzero
(确认 Service 纳管了这个 IP 没) - 看日志 :
kubectl logs <那个闲死的Pod> -n dayzero
(看有没有报错)
五、 懒人技巧 (Alias)
每次都敲 kubectl 太累了,建议在你的终端配置文件(.bashrc 或 .zshrc)里加上这行:
alias k='kubectl'
以后就可以:k get pods,k logs ...,效率翻倍。