k8s出问题后 应该查看哪些内容

要确认 Kubernetes (k8s) 系统是否正常运行,需要检查集群的 核心组件 、节点状态 、Pod 运行情况 和 网络通信。以下是详细步骤和命令:


1. 检查集群节点状态

bash 复制代码
kubectl get nodes
  • 期望输出 :所有节点状态为 Ready。
  • 异常情况 :
    • NotReady:节点可能未启动或组件故障。
    • 节点缺失:节点未加入集群或通信问题。

2. 检查核心组件 Pod 状态

Kubernetes 控制平面组件(如 kube-apiserver、etcd、kube-scheduler、kube-controller-manager)通常以 Pod 形式运行在 kube-system 命名空间:

bash 复制代码
kubectl get pods -n kube-system
  • 期望输出 :所有 Pod 状态为 Running 且 READY 为 1/1 或类似。
  • 常见异常 :
    • CrashLoopBackOff:组件崩溃循环,需检查日志。
    • Pending:资源不足或调度失败。
    • ImagePullBackOff:镜像拉取失败。

3. 查看核心组件日志

如果某个核心 Pod 异常,查看其日志:

bash 复制代码
kubectl logs <pod-name> -n kube-system

例如检查 kube-apiserver:

bash 复制代码
kubectl logs kube-apiserver-master-node -n kube-system

4. 检查 Kubernetes 服务状态

  • 控制平面服务 (Master 节点):

    bash 复制代码
    # 检查 kube-apiserver 是否监听 6443 端口
    curl -k https://localhost:6443/healthz
    # 期望输出:ok
    
    # 检查 etcd 健康状态
    kubectl get --raw='/readyz?verbose'
  • 工作节点服务 (每个 Node):

    bash 复制代码
    # 检查 kubelet 状态
    systemctl status kubelet
    
    # 检查容器运行时(如 Docker 或 Containerd)
    systemctl status docker

5. 验证网络连通性

Kubernetes 网络是否正常:

bash 复制代码
# 创建一个临时 Pod 测试网络
kubectl run network-test --image=alpine --rm -it --restart=Never -- sh
# 进入 Pod 后测试 DNS 和跨节点通信
ping kubernetes.default.svc.cluster.local  # DNS 解析
ping <其他节点的IP>                          # 跨节点通信

6. 检查 Kubernetes 事件

查看集群中的警告或错误事件:

bash 复制代码
kubectl get events --sort-by='.metadata.creationTimestamp' -w
  • 关注 Warning 类型的事件,如调度失败、镜像拉取错误等。

7. 验证集群功能

  • 部署测试应用 :

    bash 复制代码
    kubectl create deployment nginx-test --image=nginx
    kubectl expose deployment nginx-test --port=80 --type=NodePort
    kubectl get svc nginx-test  # 获取访问端口
  • 访问测试 :

    bash 复制代码
    curl http://<节点IP>:<NodePort>

    若返回 Nginx 欢迎页,说明集群功能正常。


8. 使用集群诊断工具

  • kubeadm 检查 (如果使用 kubeadm 部署):

    bash 复制代码
    kubeadm alpha certs check-expiration  # 检查证书有效期
    kubeadm config check                  # 检查配置
  • 集群状态工具 :

    bash 复制代码
    kubectl cluster-info         # 查看集群基本信息
    kubectl get componentstatus  # 检查核心组件状态(已弃用,建议直接检查 Pod)

常见问题排查

  1. 节点 NotReady :
    • 检查 kubelet 是否运行:systemctl status kubelet
    • 查看节点详情:kubectl describe node <节点名称>
  2. Pod 无法调度 :
    • 检查资源配额:kubectl describe node | grep -A 10 Allocated
    • 查看调度失败原因:kubectl describe pod <pod-name>
  3. 服务无法访问 :
    • 检查防火墙规则是否放行 NodePort 或 LoadBalancer 端口。

    • 验证 Service 和 Endpoints 是否正常:

      bash 复制代码
      kubectl get svc <service-name>
      kubectl get endpoints <service-name>

总结步骤

  1. 检查所有节点 Ready。
  2. 确认 kube-system 命名空间下的核心 Pod 全部运行正常。
  3. 验证网络和 DNS 通信。
  4. 查看事件和日志定位具体错误。

通过以上步骤,可以快速诊断 Kubernetes 集群的健康状态。

解决方案:

最简单 粗暴的一种

bash 复制代码
systemctl restart docker kubelet     
相关推荐
jonyleek8 小时前
JVS数字底座私有化部署实践:Spring Cloud + K8S 实现文档平台开箱即用
elasticsearch·kubernetes·私有化部署·springcloud·minio·jvs企业文档·文档治理
阿里云云原生9 小时前
欢迎报名丨Alibaba Cloud AgentCore 八城巡回沙龙上海首站开启
云原生
阿里云云原生10 小时前
AgentTeams Dashboard:统一管理团队、项目与资产
云原生·agent
千桐科技10 小时前
qModel算法模型平台功能解析:从源码到 Docker 镜像,部署能自动完成哪些工作?
运维·docker·容器·qmodel
阿里云云原生11 小时前
HiRoute:Jev 模型智能路由实践
云原生
阿里云云原生12 小时前
云栖实录丨面向 AgenticOps 的开源建设:采集标准化、统一语义建模与能力评测
云原生·开源
cubestudio12 小时前
云原生分布式训练怎么调度才不浪费算力?CubeStudio 分布式训练与加速架构解析(CRD+Operator / gang 调度 / 亲和反亲和 / GPU 利用率 / 共享 GPU)
人工智能·云原生·gpu
mengge.cloud12 小时前
1019Namespace ,Contexts ,Kubernetes Pod
运维·服务器·网络·云原生·容器·kubernetes·云计算
阿里云云原生13 小时前
从单点探索到规模化运营:滔搏体育的企业级多智能体实践
云原生
flytalei13 小时前
从 Docker Compose 到 K3s:逐浪博客 MySQL 数据迁移实战与一致性验证
mysql·docker·容器