0


【K8S系列】K8S集群 15个 常见问题及解决方案总结,建议收藏

在这里插入图片描述

在 Kubernetes 集群的使用过程中,用户可能会遇到各种问题。以下是 15 个常见问题及其详细描述、故障排查步骤、常见错误信息和解决方案,帮助用户更有效地管理和维护 Kubernetes 环境。

1. Pod 初始化失败

问题

Pod 处于 Init:CrashLoopBackOffInit:Error 状态。

故障排查

  • 查看 Pod 的状态和事件:kubectl describe pod <pod-name>- 查找 Events 部分,查看是否有错误信息。
  • 查看初始化容器的日志:kubectl logs <pod-name> -c <init-container-name>

常见错误信息

  • Error: failed to start container "init-container": Error response from daemon: ...
  • CrashLoopBackOff

解决方案

  • 检查初始化容器的命令和参数,确保它们正确无误。
  • 确认所有依赖项(如网络、存储卷)已准备好并可用。
  • 如果需要,调整初始化逻辑以处理潜在的错误情况。

2. 证书问题

问题

Kubernetes 集群的证书过期或无效。

故障排查

  • 检查证书的有效期:openssl x509 -in <certificate-file> -text -noout
  • 查看 kube-apiserver 的日志,查找证书错误:kubectl logs -n kube-system kube-apiserver-<node-name>

常见错误信息

  • x509: certificate has expired or is not yet valid
  • unable to connect to the server: x509: certificate signed by unknown authority

解决方案

  • 使用 kubeadm 重新生成证书:kubeadm certs renew all
  • 更新 kubeconfig 文件以使用新的证书。

3. 服务无法访问

问题

Kubernetes 服务无法访问。

故障排查

  • 检查服务的状态和类型:kubectl get services
  • 确认相关 Pod 正在运行并处于 Ready 状态:kubectl get pods

常见错误信息

  • 503 Service Unavailable
  • Connection refused

解决方案

  • 确保服务的 selector 正确匹配到运行中的 Pod。
  • 检查网络策略(Network Policies)是否限制流量。
  • 对于外部访问,确认负载均衡器或 NodePort 的配置。

4. 端口映射问题

问题

Pod 中的应用程序端口未能正确映射到外部。

故障排查

  • 检查服务的配置:kubectl describe service<service-name>

常见错误信息

  • Error: unable to connect to the server: dial tcp <ip>:<port>: connect: connection refused

解决方案

  • 确保服务的 targetPort 与 Pod 中的容器端口一致。
  • 检查是否有防火墙规则阻止端口访问。

5. 外网访问限制

问题

无法从外部网络访问 Kubernetes 服务。

故障排查

  • 检查防火墙和安全组设置,确保相关端口开放。
  • 确认 LoadBalancer 类型的服务是否已分配外部 IP 地址:kubectl get services

常见错误信息

  • Connection timed out
  • Could not resolve host

解决方案

  • 调整云提供商的网络安全设置,确保允许外部流量。
  • 对于 NodePort 服务,确认访问端口是否正确。

6. 镜像拉取失败

问题

Pod 启动时无法拉取镜像,导致状态为 ImagePullBackOff

故障排查

  • 查看 Pod 的事件日志:kubectl describe pod <pod-name>

常见错误信息

  • Failed to pull image "<image-name>"
  • Error response from daemon: pull access denied for <image-name>

解决方案

  • 确认镜像名称和标签是否正确。
  • 检查 Docker Registry 的访问权限,确保 Kubernetes 有权限拉取私有镜像。
  • 使用 kubectl create secret 创建 Docker 注册表的凭据:kubectl create secret docker-registry my-registry --docker-server=<registry-url> --docker-username=<username> --docker-password=<password> --docker-email=<email>

7. Pod 资源使用超标

问题

Pod 的 CPU 或内存使用超出资源限制,导致 Pod 被杀死。

故障排查

  • 使用 kubectl top pods 查看资源使用情况:kubectl top pods

常见错误信息

  • OOMKilled
  • Exceeded CPU limit

解决方案

  • 调整 Pod 的资源请求和限制:resources:requests:memory:"512Mi"cpu:"500m"limits:memory:"1Gi"cpu:"1"
  • 监控应用程序的资源使用情况,必要时进行优化。

8. 节点不可用(NotReady)

问题

某些节点的状态为 NotReady,无法接收新的 Pod。

故障排查

  • 查看节点的状态和事件:kubectl describe node <node-name>

常见错误信息

  • Kubelet stopped posting node status
  • Container runtime is down

解决方案

  • 检查 Kubelet 进程是否在节点上运行:systemctl status kubelet
  • 确认节点的网络连接和资源状态。

9. Pod 终止时间过长

问题

Pod 的终止时间过长,导致资源未能及时释放。

故障排查

  • 查看 Pod 的终止信号和状态:kubectl describe pod <pod-name>

常见错误信息

  • SIGTERM received
  • Terminating: pod is stuck in terminating state

解决方案

  • 优化应用程序的关闭逻辑,确保其能快速响应终止信号。
  • 调整 terminationGracePeriodSeconds 参数,减少 Pod 终止的宽限时间。

10. API 服务器无法访问

问题

无法与 Kubernetes API 服务器建立连接。

故障排查

  • 检查 kube-apiserver 的状态:kubectl logs -n kube-system kube-apiserver-<node-name>

常见错误信息

  • unable to connect to the server: x509: certificate signed by unknown authority
  • Error: unable to connect to the server

解决方案

  • 检查 API 服务器的配置和证书是否正确。
  • 查看系统资源使用情况,确认 API 服务器未因资源耗尽而停止响应。

11. ConfigMap 或 Secret 变更未生效

问题

ConfigMap 或 Secret 的变更未能在 Pod 中生效。

故障排查

  • 确认 Pod 是否在使用最新的 ConfigMap 或 Secret:kubectl get pod <pod-name> -o yaml |grep -i configmap

常见错误信息

  • ConfigMap not found
  • Secret not found

解决方案

  • 重新启动相关 Pod 以应用更改:kubectl rollout restart deployment <deployment-name>

12. 负载均衡器未分配 IP

问题

LoadBalancer 类型的服务未能获取外部 IP。

故障排查

  • 检查 LoadBalancer 服务的状态:kubectl get svc <service-name>

常见错误信息

  • Pending
  • LoadBalancerIP is not assigned

解决方案

  • 确保云提供商的负载均衡器配置正确。
  • 检查服务的 annotations,确保其配置符合云提供商的要求。

13. 监控工具未能收集数据

问题

监控工具(如 Prometheus)未能收集到数据。

故障排查

  • 检查 Prometheus 的配置文件,确认抓取目标是否正确。
  • 查看 Prometheus 的日志:kubectl logs <prometheus-pod-name>

常见错误信息

  • no data found
  • error scraping target

解决方案

  • 确保被监控的 Pod/服务暴露了正确的指标。
  • 确认网络连接是否正常,Prometheus 能够访问到目标服务。

14. 资源调度不均衡

问题

某些节点负载过重,其他节点空闲。

故障排查

  • 使用以下命令查看 Pod 分布:kubectl get pods -o wide

常见错误信息

  • Pod is pending due to insufficient resources
  • Pod evicted due to resource pressure

解决方案

  • 使用 Pod 反亲和性规则,确保 Pod 均匀分布:affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:-labelSelector:matchExpressions:-key: app operator: In values:- my-app topologyKey:"kubernetes.io/hostname"
  • 考虑使用 Descheduler 工具,定期重新平衡 Pod。

15. 事件日志过多

问题

事件日志过多,导致监控和管理复杂。

故障排查

  • 查看事件日志,确认高频率事件的原因:kubectl get events --sort-by='.metadata.creationTimestamp'

常见错误信息

  • Too many events

解决方案

  • 定期清理过期的事件记录,使用命令:kubectl delete events --all-namespaces --field-selector type!=Normal
  • 监控 Pod 和节点的健康状态,防止高频率事件的产生。

在这里插入图片描述

总结

Kubernetes 提供了强大的容器管理功能,但在实际使用中常常会遇到各种问题。通过了解这些常见问题的故障排查步骤、错误信息和解决方案,可以帮助用户快速定位和解决问题,确保集群的稳定性和应用程序的可用性。定期审查和优化 Kubernetes 配置,也有助于提升集群的运行效率和可靠性。


本文转载自: https://blog.csdn.net/weixin_36755535/article/details/143185166
版权归原作者 颜淡慕潇 所有, 如有侵权,请联系我们删除。

“【K8S系列】K8S集群 15个 常见问题及解决方案总结,建议收藏”的评论:

还没有评论