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

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


1. 检查集群节点状态

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

2. 检查核心组件 Pod 状态

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

bash 复制代码
kubectl get pods -n kube-system
  • 期望输出 :所有 Pod 状态为 RunningREADY1/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     
相关推荐
我是谁??1 小时前
ubuntu22.04 通过docker部署vLLM(Qwen3-0.6B)大模型+New API+OpenWebUI
docker·容器·vllm
Patrick_Wilson1 小时前
K8s 探针避坑:Next.js 不同部署模式下的健康检查实践
kubernetes·node.js·next.js
运维瓦工1 小时前
DevOps 生态介绍(十):Docker Compose 核心 YAML 配置详解与常用命令大全
spring cloud·docker·容器
Plastic garden2 小时前
K8s(10)NFS 的动态 PV 创建数据库给k8s的mysql和redis
docker·容器·kubernetes
Plastic garden2 小时前
k8s(11) Pod 控制器,服务发现与存储管理
kubernetes
与海boy2 小时前
docker compose minio
docker·容器·eureka
星辰徐哥3 小时前
云原生核心特性:容器化、微服务与DevOps的通俗解读
微服务·云原生·devops
武子康3 小时前
调查研究-167 Docker Compose 详解:从单容器到多服务编排的工程化入口
运维·docker·云原生·容器·kubernetes·k8s·docker-compose
heimeiyingwang4 小时前
【架构实战】分布式会话:从Session到JWT的演进
微服务·云原生·架构