本文整合了 Docker 和 Kubernetes 常见故障的排查方法。
Docker X11 显示问题
在 Docker 容器中运行图形界面应用时,可能遇到:
1
| Error: cannot open display localhost:11.0
|
解决方案
在 docker run 时添加 --net=host 参数:
1
| docker run --net=host -e DISPLAY=$DISPLAY your-image
|
EKS 节点丢失
问题现象
- EKS 控制台看不到节点
kubectl get nodes 可以正常显示
- Pod 调度正常
解决方法
在 aws-auth ConfigMap 中添加节点的 IAM Role 映射:
1
| kubectl edit configmap aws-auth -n kube-system
|
添加配置:
1 2 3 4 5 6 7
| data: mapRoles: | - groups: - system:bootstrappers - system:nodes rolearn: arn:aws:iam::111122223333:role/my-node-role username: system:node:{{EC2PrivateDNSName}}
|
获取节点 IAM Role
1 2 3 4 5 6
| kubectl get nodes -o wide
aws ec2 describe-instances --instance-ids i-xxxxx \ --query 'Reservations[0].Instances[0].IamInstanceProfile.Arn'
|
Helm Release 找不到
问题现象
1 2 3 4 5
| $ helm list -n jupyter
$ helm install foobar jupyterhub/jupyterhub -n jupyter Error: release foobar already exists
|
原因分析
Release 可能处于失败或 pending 状态。
解决方法
1. 查看所有状态的 Release
1
| helm list --all-namespaces --all
|
2. 处理不同状态
| 状态 |
处理方法 |
failed |
helm rollback 或 helm delete |
pending-install |
helm delete 然后重新安装 |
pending-upgrade |
helm rollback 或强制升级 |
3. 手动清理
Helm 3 将 release 信息存储在 Secret 中:
1 2 3 4 5
| kubectl get secret -n jupyter | grep foobar
kubectl delete secret sh.helm.release.v1.foobar.v1 -n jupyter
|
4. 重新安装
1
| helm install foobar jupyterhub/jupyterhub -n jupyter
|
预防措施
1 2 3 4 5
| helm install foobar chart -n jupyter --atomic
helm install foobar chart -n jupyter --timeout 5m
|
完整排查流程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| helm list -n namespace --all
helm status release-name -n namespace
helm history release-name -n namespace
helm rollback release-name 1 -n namespace
kubectl get secret -n namespace | grep release-name kubectl delete secret sh.helm.release.v1.release-name.v1 -n namespace
helm install release-name chart -n namespace
|
参考链接