常见问题
可能原因和解决方案
- 资源不足:检查节点 CPU、内存是否足够
- 调度失败:查看 Pod 事件,使用
kubectl describe pod <pod-name> - 镜像拉取失败:检查镜像名称、tag 和仓库访问权限
- 污点(Taints):检查节点是否有污点阻止调度
# 查看详细信息
kubectl describe pod <pod-name>
# 查看事件
kubectl get events --sort-by=.metadata.creationTimestamp
# 检查节点资源
kubectl describe nodes
# 检查节点污点
kubectl get nodes -o custom-columns=NAME:.metadata.name,TAINTS:.spec.taints
可能原因和解决方案
- 应用错误:查看应用日志,修复代码问题
- 配置错误:检查环境变量、ConfigMap、Secret
- 资源限制:检查内存或 CPU 限制是否过小
- 健康检查失败:检查 liveness 和 readiness 探针配置
# 查看日志
kubectl logs <pod-name>
# 查看之前的容器日志
kubectl logs <pod-name> --previous
# 查看详细信息
kubectl describe pod <pod-name>
# 进入容器调试
kubectl exec -it <pod-name> -- /bin/bash
可能原因和解决方案
- 选择器错误:检查 Service 的选择器是否匹配 Pod 的标签
- 端口配置错误:检查 targetPort 是否与 Pod 暴露的端口一致
- Pod 未就绪:检查 Pod 的 readiness 探针是否通过
- 网络策略:检查是否有网络策略阻止访问
# 查看 Service 详情
kubectl describe service <service-name>
# 查看 Endpoints
kubectl get endpoints <service-name>
# 查看 Pod 标签
kubectl get pods --show-labels
# 测试 Service 连接
kubectl run -it --rm debug --image=busybox --restart=Never -- wget -O- <service-name>
可能原因和解决方案
- 镜像不存在:检查镜像名称和 tag 是否正确
- 权限问题:配置 imagePullSecrets,确保有拉取权限
- 网络问题:检查集群是否能访问镜像仓库
- 私有仓库:创建 Docker registry Secret 并配置到 Pod
# 查看详细信息
kubectl describe pod <pod-name>
# 创建 Docker registry Secret
kubectl create secret docker-registry regcred \
--docker-server=<registry> \
--docker-username=<username> \
--docker-password=<password>
# 在 Pod 中使用
spec:
imagePullSecrets:
- name: regcred
可能原因和解决方案
- kubelet 未运行:检查 kubelet 服务状态
- 资源压力:检查 CPU、内存、磁盘是否充足
- 网络问题:检查网络连接和 DNS
- 容器运行时问题:检查 Docker/containerd 状态
# 查看节点详情
kubectl describe node <node-name>
# 检查节点条件
kubectl get nodes -o wide
# 在节点上检查 kubelet
sudo systemctl status kubelet
# 查看节点日志
sudo journalctl -u kubelet -f
可能原因和解决方案
- CoreDNS Pod 问题:检查 CoreDNS Pod 是否正常运行
- DNS 配置错误:检查 /etc/resolv.conf 配置
- 网络策略:检查是否阻止了 DNS 流量
- Service 名称错误:确认 Service 名称和命名空间
# 检查 CoreDNS Pod
kubectl get pods -n kube-system -l k8s-app=kube-dns
# 查看 CoreDNS 日志
kubectl logs -n kube-system -l k8s-app=kube-dns
# 测试 DNS 解析
kubectl run -it --rm debug --image=busybox --restart=Never -- nslookup kubernetes.default
# 查看 DNS 配置
kubectl get configmap coredns -n kube-system -o yaml