k8s常见问题
以下是 Kubernetes 常见问题(FAQ)的整理,涵盖了初学者和运维人员常遇到的痛点:
一、部署与安装问题
-
安装太复杂?
- 解决方案:使用 kubeadm(官方工具)、Minikube(单节点本地开发)、Kind(Docker容器模拟集群)或云托管的K8s服务(如EKS/AKS/GKE)。
- 避坑:国内环境注意镜像源替换(如阿里云镜像仓库)。
-
节点状态
NotReady
?- 检查方向:
- 网络插件未安装(如Calico/Flannel运行异常)。
kubelet
服务崩溃(systemctl status kubelet
)。- 节点资源不足(内存/CPU耗尽)。
- 检查方向:
二、日常操作问题
-
如何快速查看资源状态?
kubectl get pods -n <namespace> # 查看Pod kubectl describe pod <pod-name> # 排查Pod详情(事件、错误日志) kubectl logs <pod-name> -c <container> # 查看容器日志 kubectl top nodes/pods # 监控资源占用
-
误删了资源怎么办?
- K8s部分资源支持优雅删除(如
Deployment
会重建Pod),但关键数据(如未备份的PersistentVolume
)可能永久丢失。 - 预防措施:
- 启用 命名空间隔离 和 RBAC权限控制。
- 使用 Velero 定期备份整个集群。
- K8s部分资源支持优雅删除(如
三、配置与调试问题
-
Pod卡在
Pending
状态?- 常见原因:
- 资源不足(节点无足够CPU/内存)。
- 未匹配NodeSelector/Affinity(如指定了GPU节点但不存在)。
- PersistentVolumeClaim(PVC)绑定失败(存储类不可用或容量不足)。
- 常见原因:
-
Service无法访问?
- 排查步骤:
- 检查Service的
Endpoints
是否正常:kubectl get endpoints <service-name>
- 验证Pod是否Ready(Readiness Probe可能失败)。
- 网络策略(NetworkPolicy)是否拦截流量。
- 检查Service的
- 排查步骤:
四、存储与数据问题
-
PV/PVC绑定失败?
- 检查StorageClass配置(如AWS EBS需IAM权限)。
- 动态存储需云提供商支持,静态PV需手动创建。
-
容器内文件修改后丢失?
- 默认容器文件系统是临时的!必须用Volume持久化数据:
- 临时存储:
emptyDir
- 持久存储:
PersistentVolumeClaim
- 配置挂载:
ConfigMap/Secret
- 临时存储:
- 默认容器文件系统是临时的!必须用Volume持久化数据:
五、升级与运维问题
-
滚动更新卡住?
- 原因:
- 新版本Pod启动失败(如配置错误)。
maxUnavailable
设得过低(默认25%)。
- 强制回滚:
kubectl rollout undo deployment/<deployment-name>
- 原因:
-
如何安全扩缩容?
- 手动:
kubectl scale deployment/<name> --replicas=5
- 自动(HPA):基于CPU/内存或自定义指标自动扩缩。
- 手动:
六、概念混淆问题
-
Deployment vs StatefulSet vs DaemonSet?
类型 用途 典型场景 Deployment 无状态应用 Web服务、API StatefulSet 有状态应用(需稳定网络/存储) MySQL、Elasticsearch DaemonSet 每个节点运行一个副本 日志收集(Fluentd)、节点监控 -
ConfigMap vs Secret?
ConfigMap
:存储非敏感配置(如环境变量)。Secret
:存储敏感数据(密码/TLS证书),需加密存储(启用Etcd加密)。
七、高级问题
-
如何调试网络?
- 工具链:
kubectl exec
进入Pod测试DNS解析。calicoctl
诊断网络策略。- 集群级工具:Weave Scope、Istio可视化。
- 工具链:
-
K8s集群性能瓶颈在哪?
- 监控方案:
- 内置工具:
Metrics Server
+kubectl top
。 - 完整方案:Prometheus + Grafana(监控APIServer/Etcd/节点资源)。
- 内置工具:
- 监控方案:
避坑指南
- 镜像拉取失败:检查
imagePullSecrets
(私有仓库认证)。 - Pod不断重启:查看
CrashLoopBackOff
日志(通常应用启动错误)。 - 资源限制泄漏:为Pod设置
resources.limits
,避免节点雪崩。
💡 学习建议:
- 实验环境:用
Minikube
快速尝试基础操作。- 官方文档:查看 kubernetes.io/docs 的 Tasks 和 Troubleshooting 板块。
- 实战工具:
k9s
(终端管理工具)、Lens
(桌面IDE)。
遇到具体问题时可结合kubectl describe
和事件日志精准定位!