k8s拍错思路

检查集群状态
kubectl get nodes

检查组件状态
kkubectl get componentstatuses
kubectl get pod -A running | gerp "组件名称" runnig 就正常

查看所有 Pods
kubectl get pods -o wide # 显示详细信息(包含 IP、Node)
kubectl get pods -n # 查看指定命名空间的 Pods
kubectl get pods --field-selector=status.phase=Running # 筛选特定状态的 Pods

查看 Nodes
bash
kubectl get nodes # 查看所有节点
kubectl describe node # 查看节点详细信息
kubectl get nodes -o jsonpath='{.items[*].status.conditions[?(@.type=="Ready")].status}' # 检查节点健康状态

查看 Services、Deployments 等
bash
kubectl get services # 查看所有服务
kubectl get deployments # 查看所有部署
kubectl get replicasets # 查看所有 ReplicaSet
kubectl get daemonsets # 查看所有 DaemonSet
kubectl get jobs,cronjobs # 查看作业和定时任务

查看资源详情
bash
kubectl describe pod # 查看 Pod 详细信息
kubectl describe service # 查看 Service 详细信息
kubectl describe node # 查看 Node 详细信息

查看事件日志
bash
kubectl get events # 查看集群事件
kubectl get events --sort-by=.metadata.creationTimestamp # 按时间排序
kubectl get events -n # 查看指定命名空间的事件

日志查看
bash
kubectl logs # 查看 Pod 日志
kubectl logs -f # 实时跟踪日志
kubectl logs -c # 查看多容器 Pod 中特定容器的日志
kubectl logs --previous # 查看上一个容器实例的日志(用于崩溃重启场景)

容器内部操作

bash
kubectl exec -it -- sh # 进入 Pod 容器内部
kubectl exec -- cat /etc/hosts # 在容器内执行命令
kubectl cp :/path/to/file /local/path # 从容器复制文件到本地

网络测试
DNS 测试
bash
kubectl run dnsutils --image=tutum/dnsutils --restart=Never -- nslookup kubernetes.default
kubectl exec -it dnsutils -- nslookup # 测试服务 DNS 解析

连通性测试
bash
kubectl run curl --image=radial/busyboxplus:curl --restart=Never -- curl : # 测试服务连通性
kubectl run netshoot --image=nicolaka/netshoot --restart=Never -- sleep infinity # 使用 netshoot 容器进行网络诊断

资源配置查看
bash
kubectl get pod -o yaml # 查看 Pod YAML 配置
kubectl get service -o json # 查看 Service JSON 配置
kubectl explain pod.spec.containers # 查看 API 对象字段说明

节点和组件状态

节点资源使用 需要提前安装server-metric
bash
kubectl top nodes # 查看节点 CPU/内存使用情况
kubectl top pods # 查看 Pod CPU/内存使用情况

组件状态
bash
kubectl get componentstatuses # 查看控制平面组件状态(旧版)
kubectl get pods -n kube-system # 查看系统组件 Pods

故障模拟和调试
bash
kubectl drain --ignore-daemonsets --delete-emptydir-data # 排空节点(维护前使用)
kubectl cordon # 标记节点不可调度
kubectl uncordon # 恢复节点调度

高级筛选和格式化
bash
kubectl get pods -o custom-columns=NAME:.metadata.name,STATUS:.status.phase # 自定义输出格式
kubectl get pods --field-selector=status.phase!=Running # 筛选非运行状态的 Pods
kubectl get pods -l app=myapp # 按标签筛选

命名空间操作
bash
kubectl get namespaces # 查看所有命名空间
kubectl create namespace # 创建命名空间
kubectl delete namespace # 删除命名空间
kubectl config set-context --current --namespace= # 设置默认命名空间

配置和上下文管理
bash
kubectl config view # 查看 kubeconfig 配置
kubectl config get-contexts # 查看所有上下文
kubectl config use-context # 切换上下文

插件和扩展工具
kubectl 插件
bash
kubectl tree pod # 查看 Pod 资源树(需安装 tree 插件)
kubectl describe pod --recursive # 递归查看关联资源

自定义指标
bash
kubectl get --raw /apis/metrics.k8s.io/v1beta1/pods # 获取 Pod 指标(需 metrics-server 支持)

排错流程
Pod 无法启动:
bash
kubectl get pods # 查看 Pod 状态
kubectl describe pod # 查看详细事件
kubectl logs # 查看容器日志

服务无法访问:
bash
kubectl get services # 检查 Service 状态
kubectl get endpoints # 检查 Endpoints
kubectl exec -it -- curl : # 测试连通性

节点异常:
bash
kubectl get nodes # 检查节点状态
kubectl describe node # 查看节点详情
kubectl top nodes # 检查资源使用

检查网络问题
使用 kubectl get svc -n :确认服务是否可以正确访问。
Pod 无法访问外网:
进入 Pod 测试 ping 8.8.8.8。
若失败,在节点上测试 ping 8.8.8.8。
若节点正常,检查 CNI 插件和网络策略。
服务无法访问:
检查 Service 和 Endpoints 是否正常。
使用 curl 测试服务连通性。
检查 kube-proxy 和 iptables 规则。
使用 kubectl exec -it -- /bin/bash 进入 Pod 内部,然后使用如 curl 或 wget 测试网络连接。

查看事件和审计日志
使用 kubectl get events -n :查看 Kubernetes 事件,这可以提供一些错误发生时的背景信息。

回滚部署
如果问题是由最近的部署更改引起的,考虑回滚到之前的版本。使用 kubectl rollout undo deployment/ -n

posted on 2025-05-14 21:33  小二jerry  阅读(9)  评论(0)    收藏  举报