Kubernetes 的 10 大错误&如何专业地排除它们?
Kubernetes(k8s) 是强大的容器编排平台,已成为许多现代云原生应用程序的支柱。然而,由于其复杂性,出现了一系列常见错误,即使是经验丰富的开发人员也可能会犯错。在这个故事中,我们将探讨最常见的 10 个 k8s 错误,并提供解决这些问题的故障排除技术。无论您遇到神秘的 Pod 故障还是令人困惑的网络问题。这个故事将有助于有效地导航和解决最常见的 k8s 挑战。
1.CreateContainerConfigError
当k8s无法生成容器的配置时出现的错误。故障排除:
Pod 配置引用的 configMap 不存在或 Pod 无法访问。 Pod 配置引用的 Secret 不存在或 Pod 无法访问。 Pod 配置引用的 PVC 不存在或 Pod 无法访问。 运行 kubectl describe pod <pod-name> -n <namespace>
,我们可能会看到失败的原因。如果 pod 未启动,那么我们无法 exec pod,在这种情况下运行kubectl get pods -o wide
并检查 pod 被调度到哪个节点。在该节点中 ssh 并运行 docker ps -a 并获取所需容器的容器 id,然后检查docker logs -f <container id>
2. CrashLoopBackOff
Pod 反复崩溃并重新启动。故障排除:
检查 Pod 日志: kubectl logs <pod-name>
描述 Pod 以了解更多详细信息: kubectl describe pod <pod-name> -n <namespace>
。研究应用程序的启动和初始化代码。 调查探针(liveness和readiness)
3. ImagePullBackOff
Kubernetes(k8s)无法从仓库中拉取容器镜像。故障排除:
验证镜像名称和标签。 检查镜像仓库凭据。 确保镜像存在于指定的仓库中。
4. Pending Pod
Pod 保持 Pending 状态,未调度。故障处理:
检查节点资源(CPU、内存),确保有足够的容量。 如果使用节点选择器或关联性,请确保节点被正确标记。 验证节点上不存在会妨碍调度的污点。
5. 节点未就绪
一个或多个节点处于“NotReady”状态。故障排除:
检查节点状态: kubectl describe node<node-name>
查看受影响节点上的 kubelet 日志。 确保节点具有网络连接。
6. Service 不工作
服务无法访问或无法正确路由流量。故障排除:
检查服务和端点: kubectl get svc
和kubectl get endpoints
。验证网络策略和防火墙规则。 确保支持服务的 Pod 健康且正在运行。
7. 资源不足
Pod因资源不足而无法调度。故障排除:
检查 Pod 规范中的资源请求和限制。 通过添加更多节点来扩展集群。
8. PersistentVolumeClaims(PVC) Pending
PVC 保持 Pending 状态。故障排除:
检查是否有符合 PVC 规格的可用 PV(持久卷)。 确保存储类别存在并且配置正确。 验证底层存储后端是否正常。
9. Pod 卡在终止状态
Pod 卡在终止状态。故障排除:
检查可能阻止 Pod 删除的终结器。 查看日志以了解关闭挂钩或长时间运行的进程。 如有必要,强制删除 Pod: kubectl delete pod <pod-name> -n <namespace> --force
10. DNS 解析问题
集群内的 DNS 查找失败。故障排除:
检查 DNS Pod 日志(例如 CoreDNS): kubectl logs <coredns-pod>
确保 DNS 服务正在运行: kubectl get svc -kube-system
.验证网络策略和防火墙规则不会阻止 DNS 流量。
结论
通过掌握这些故障排除技术,我们可以维护一个健壮且有弹性的 Kubernetes 环境。保持积极主动,并通过这些基本技巧保持 kubernetes 集群平稳运行。