这份手册基于你当前这套环境整理,适用于:
- 系统:Ubuntu 24.04
- K8S 集群:
- 172.16.11.142 -> k8s-master
- 172.16.11.145 -> k8s-worker1
- 172.16.11.146 -> k8s-worker2
- 容器运行时:containerd
- 网络插件:flannel
这份手册把两件事合在一起:
- 先解决 Docker Hub 拉取超时
- 再安装 Kubernetes Dashboard
1. 目标
完成后你会得到:
- Docker Hub 镜像加速已在所有节点生效
- Kubernetes Dashboard 已部署完成
- 可通过网页访问:
- https://172.16.11.142:30443
- 可通过 Token 登录 Dashboard
2. 为什么要先做 Docker Hub 加速
Dashboard 安装本身不复杂,但它依赖的镜像很多来自 docker.io。
如果节点直连 registry-1.docker.io 超时,就会出现:
- ImagePullBackOff
- ErrImagePull
- Dashboard Pod 一直起不来
所以标准流程一定是:
- 先配 containerd 的 docker.io 镜像加速
- 再安装 Dashboard
注意:
你这套 K8S 用的是 containerd,不是 docker,所以不要去配 /etc/docker/daemon.json。
3. 节点清单
下面所有“节点通用步骤”,都要在这 3 台执行:
- 172.16.11.142
- 172.16.11.145
- 172.16.11.146
Dashboard 安装步骤主要在 172.16.11.142 执行。
4. 第一步:在所有节点配置 Docker Hub 加速
先登录每一台节点,执行下面整套命令。
如果 /etc/containerd/config.toml 不存在,先生成默认配置:
sudo mkdir -p /etc/containerd sudo test -f /etc/containerd/config.toml || containerd config default | sudo tee /etc/containerd/config.toml >/dev/null
把 config_path 打开:
sudo sed -i 's#config_path = ""#config_path = "/etc/containerd/certs.d"#' /etc/containerd/config.toml
创建 docker.io 镜像站目录:
sudo mkdir -p /etc/containerd/certs.d/docker.io
写入镜像站配置:
sudo tee /etc/containerd/certs.d/docker.io/hosts.toml > /dev/null <<'EOF' server = "https://registry-1.docker.io"
[host."https://docker.1ms.run"]
capabilities = ["pull", "resolve"] EOF
重启 containerd:
sudo systemctl restart containerd
检查状态:
sudo systemctl is-active containerd grep -n 'config_path' /etc/containerd/config.toml sudo cat /etc/containerd/certs.d/docker.io/hosts.toml
正常应看到:
active config_path = "/etc/containerd/certs.d"
以及:
server = "https://registry-1.docker.io" [host."https://docker.1ms.run"] capabilities = ["pull", "resolve"]
5. 第二步:验证 Docker Hub 加速是否生效
推荐用这两种方式验证。
先用 crictl:
sudo crictl pull docker.io/library/busybox:1.36
如果没有 crictl,就用 ctr,但要显式带 hosts-dir:
sudo ctr -n k8s.io images pull --hosts-dir /etc/containerd/certs.d docker.io/library/busybox:1.36
注意:
不要只用下面这条来判断:
sudo ctr -n k8s.io images pull docker.io/library/busybox:1.36
因为这条有时不会按你预期读取 hosts.toml,可能还是直连官方源。
6. 第三步:确认集群状态正常
在 k8s-master 上执行:
kubectl get nodes -o wide kubectl get pods -A -o wide
要求:
- 3 台节点都是 Ready
- 核心系统 Pod 正常运行
7. 第四步:安装 Helm
Dashboard 推荐用 Helm 安装。
在 172.16.11.142 上执行:
curl -fsSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
检查:
helm version
8. 第五步:安装 Kubernetes Dashboard
这次实际成功用的是 Dashboard 官方 GitHub release 包。
在 172.16.11.142 上执行:
helm upgrade --install kubernetes-dashboard https://github.com/kubernetes/dashboard/releases/download/kubernetes-dashboard-7.14.0/kubernetes-dashboard-7.14.0.tgz -n kubernetes-dashboard --create-namespace
说明:
- kubernetes-dashboard 是 Helm release 名
- kubernetes-dashboard 命名空间会自动创建
安装完成后查看资源:
kubectl get pods -n kubernetes-dashboard -o wide kubectl get svc -n kubernetes-dashboard
9. 第六步:如果 Pod 因镜像拉取失败没起来
如果看到 ImagePullBackOff 或 ErrImagePull,先检查描述信息:
kubectl describe pod -n kubernetes-dashboard <pod-name>
如果错误里有:
- registry-1.docker.io
- i/o timeout
- TLS handshake timeout
说明还是镜像拉取问题,要回头检查第 4 步和第 5 步。
如果你已经改好了所有节点的 containerd 配置,可以删掉 Pod 让它们重拉:
kubectl delete pod -n kubernetes-dashboard --all
然后再看:
kubectl get pods -n kubernetes-dashboard -w
10. 第七步:创建 Dashboard 管理员账号
默认 Dashboard 不能匿名管理,所以要创建一个管理员 ServiceAccount。
在 172.16.11.142 上创建文件:
cat > dashboard-admin.yaml <<'EOF' apiVersion: v1 kind: ServiceAccount metadata: name: dashboard-admin namespace: kubernetes-dashboard --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: dashboard-admin roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: dashboard-admin namespace: kubernetes-dashboard EOF
应用:
kubectl apply -f dashboard-admin.yaml
检查:
kubectl get sa -n kubernetes-dashboard kubectl get clusterrolebinding dashboard-admin
11. 第八步:把 Dashboard 暴露成网页端口
这次实际是把 kubernetes-dashboard-kong-proxy 改成 NodePort,端口设成 30443。
执行:
kubectl patch svc kubernetes-dashboard-kong-proxy -n kubernetes-dashboard -p '{"spec":{"type":"NodePort","ports":[{"name":"kong-proxy-tls","port":443,"protocol":"TCP","targetPort":8443,"nodePort":30443}]}}'
检查:
kubectl get svc -n kubernetes-dashboard
正常应看到类似:
kubernetes-dashboard-kong-proxy NodePort ... 443:30443/TCP
12. 第九步:等待 Dashboard 组件全部就绪
执行:
kubectl get pods -n kubernetes-dashboard -o wide kubectl wait --for=condition=Ready pod --all -n kubernetes-dashboard --timeout=300s
如果成功,就说明 Dashboard 组件都已经跑起来了。
13. 第十步:生成登录 Token
在 172.16.11.142 上执行:
kubectl -n kubernetes-dashboard create token dashboard-admin --duration=720h
这会输出一串很长的 token。
复制保存好,稍后网页登录时用它登录。
如果以后 token 过期了,再重新生成一次即可。
14. 第十一步:网页访问 Dashboard
浏览器打开:
如果网络互通,理论上也可以用任意节点 IP:
https://172.16.11.145:30443 https://172.16.11.146:30443
第一次打开会看到 HTTPS 证书告警,这是正常的。
因为这是集群内部自签名证书,直接继续访问即可。
登录时:
- 选择 Token
- 把第 13 步生成的 token 粘进去
- 登录
15. 第十二步:标准检查命令
下面这些命令适合用来做最终验收
检查节点状态:
kubectl get nodes -o wide
检查 Dashboard 命名空间:
kubectl get all -n kubernetes-dashboard -o wide
检查服务暴露端口:
kubectl get svc -n kubernetes-dashboard
检查管理员账号:
kubectl get sa -n kubernetes-dashboard kubectl get clusterrolebinding dashboard-admin
检查 Docker Hub 加速配置:
grep -n 'config_path' /etc/containerd/config.toml sudo cat /etc/containerd/certs.d/docker.io/hosts.toml sudo crictl pull docker.io/library/busybox:1.36
16. 你这套环境的标准结果
在你当前环境里,最终正确结果应是:
- 三台节点都已配置 containerd 的 Docker Hub 镜像加速
- Dashboard 已部署到 kubernetes-dashboard 命名空间
- 服务 kubernetes-dashboard-kong-proxy 已暴露为 NodePort
- 对外访问地址为:
- https://172.16.11.142:30443
- 登录方式为:
- dashboard-admin 的 Token
- Dashboard 组件状态为:
- Running
- Ready
17. 常见故障排查
问题 1:访问网页打不开
先检查 NodePort:
kubectl get svc -n kubernetes-dashboard
再检查 Pod:
kubectl get pods -n kubernetes-dashboard -o wide
再检查节点网络和防火墙是否放行 30443。
问题 2:网页能打开,但登录后没权限
检查管理员绑定是否存在:
kubectl get clusterrolebinding dashboard-admin
如果没有,就重新执行第 10 步。
问题 3:Dashboard Pod 一直 ImagePullBackOff
先检查镜像拉取错误:
kubectl describe pod -n kubernetes-dashboard <pod-name>
再核对三台机器上的 containerd Docker Hub 配置。
问题 4:Token 失效
重新生成:
kubectl -n kubernetes-dashboard create token dashboard-admin --duration=720h
18. 一键顺序总览
如果你想按最简顺序记忆,就是:
- 所有节点配 containerd Docker Hub 镜像加速
- 所有节点重启 containerd
- 验证 crictl pull docker.io/... 成功
- master 安装 Helm
- master 安装 Dashboard
- 创建 dashboard-admin
- 把 kubernetes-dashboard-kong-proxy 改成 NodePort 30443
- 生成 token
- 浏览器打开 https://172.16.11.142:30443
Comments NOTHING