跳转至

Kubernetes 进阶排查

Kubernetes 排查建议按资源链路推进: Pod -> Service -> Endpoints -> Ingress -> Node -> Storage -> Helm Release。

上下文与命名空间

# 当前上下文
kubectl config current-context

# 所有上下文
kubectl config get-contexts

# 查看命名空间
kubectl get ns

Pod 与事件

# 查看 Pod
kubectl get pods -n <namespace> -o wide

# 查看详情
kubectl describe pod <pod> -n <namespace>

# 查看事件
kubectl get events -n <namespace> --sort-by=.lastTimestamp

# 查看日志
kubectl logs <pod> -n <namespace>
kubectl logs <pod> -c <container> -n <namespace>

Service 与 Endpoints

# 查看 Service
kubectl get svc -n <namespace>

# 查看 Endpoints
kubectl get endpoints -n <namespace>

# 查看 EndpointSlice
kubectl get endpointslice -n <namespace>

# 查看 Service 详情
kubectl describe svc <service> -n <namespace>

排查重点:

  • Service selector 是否匹配 Pod labels。
  • targetPort 是否和容器监听端口一致。
  • Endpoints 是否为空。

Ingress

# 查看 Ingress
kubectl get ingress -n <namespace>

# 查看 Ingress 详情
kubectl describe ingress <ingress> -n <namespace>

# 查看 Ingress Controller Pod
kubectl get pods -A | grep -i ingress

排查重点:

  • Host、Path、ServiceName、ServicePort 是否正确。
  • TLS Secret 是否存在。
  • Ingress Controller 是否正常运行。

存储 PVC/PV

# 查看 PVC
kubectl get pvc -n <namespace>

# 查看 PV
kubectl get pv

# 查看 StorageClass
kubectl get storageclass

# 查看 PVC 详情
kubectl describe pvc <pvc> -n <namespace>

常见问题:

  • PVC Pending。
  • StorageClass 不存在。
  • 动态供给失败。
  • 节点无法挂载卷。

Node 排查

# 查看节点
kubectl get nodes -o wide

# 查看节点详情
kubectl describe node <node>

# 查看节点资源
kubectl top node

# 查看 Pod 资源
kubectl top pod -A

Helm

# 查看 Release
helm list -A

# 查看状态
helm status <release> -n <namespace>

# 查看历史
helm history <release> -n <namespace>

# 回滚
helm rollback <release> <revision> -n <namespace>

常见现象对应入口

现象 优先排查
Pod 无法启动 describe podlogsevents
Service 不通 svcendpoints、labels、targetPort
Ingress 404/502 Ingress 规则、Service、Controller 日志
PVC Pending PVC、PV、StorageClass、存储插件
发布失败 Helm status、history、values

相关案例