Kubernetes Dashboard 安装标准操作手册(融合 Docker Hub 加速配置)

admin 发布于 13 天前 4 次阅读


这份手册基于你当前这套环境整理,适用于:

  • 系统:Ubuntu 24.04
  • K8S 集群:
  • 172.16.11.142 -> k8s-master
  • 172.16.11.145 -> k8s-worker1
  • 172.16.11.146 -> k8s-worker2
  • 容器运行时:containerd
  • 网络插件:flannel

这份手册把两件事合在一起:

  1. 先解决 Docker Hub 拉取超时
  2. 再安装 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 一直起不来

所以标准流程一定是:

  1. 先配 containerd 的 docker.io 镜像加速
  2. 再安装 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
浏览器打开:

https://172.16.11.142:30443

如果网络互通,理论上也可以用任意节点 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. 一键顺序总览
如果你想按最简顺序记忆,就是:

  1. 所有节点配 containerd Docker Hub 镜像加速
  2. 所有节点重启 containerd
  3. 验证 crictl pull docker.io/... 成功
  4. master 安装 Helm
  5. master 安装 Dashboard
  6. 创建 dashboard-admin
  7. 把 kubernetes-dashboard-kong-proxy 改成 NodePort 30443
  8. 生成 token
  9. 浏览器打开 https://172.16.11.142:30443

此作者没有提供个人介绍。
最后更新于 2026-04-22