前言 管理 Kubernetes 集群不应该以牺牲系统资源为代价。虽然官方 Dashboard 功能强大,但对于小型集群或单节点 k3s 环境来说,它往往显得过于臃肿。如果你正在寻找一个极致轻快、响应迅速的管理界面,Skooner 是一个完美的平衡点。
Skooner(原名 K8dash)是一款开源、超轻量级的实时仪表盘,它在不增加集群负担的前提下,提供了核心的资源观测能力。
为什么选择 Skooner? Skooner 的设计哲学与 k3s 的轻量化理念完美契合:
极低的资源占用 :它的内存占用通常不到 50MB ,在你的系统监控中几乎可以忽略不计。
实时状态感知 :基于 WebSocket 技术,无需手动刷新页面即可实时查看 CPU、内存消耗以及 Pod 状态。
移动端自适应 :UI 采用响应式设计,即使在手机或平板浏览器上也能轻松排查集群问题。
部署步骤 在本指南中,我们将通过 NodePort (32007) 的方式部署并暴露 Skooner,以便你直接通过物理机 IP 访问。
1. 部署核心组件 首先,一键安装 Skooner 的命名空间、服务和部署资源:
1 2 kubectl apply -f https://raw.githubusercontent.com/skooner-k8s/skooner/master/kubernetes-skooner.yaml
2. 配置自定义端口 (32007) 默认情况下,Kubernetes 会分配一个随机的 NodePort。我们通过以下命令将其固定为 32007 :
1 2 kubectl patch svc skooner -n kube-system --type ='json' -p='[{"op": "replace", "path": "/spec/type", "value":"NodePort"}, {"op": "replace", "path": "/spec/ports/0/nodePort", "value":32007}]'
3. 创建管理 Token Skooner 使用 Kubernetes 原生的 RBAC 权限。为了获得完整的管理权限,我们需要创建一个 ServiceAccount 并生成登录 Token:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 cat <<EOF | kubectl apply -f - apiVersion: v1 kind: ServiceAccount metadata: name: skooner-admin namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: skooner-admin-binding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: skooner-admin namespace: kube-system EOF kubectl create token skooner-admin -n kube-system --duration=24h
如何访问
打开浏览器,访问:http://<你的服务器IP>:32007。
在登录界面选择 “Token” 模式。
粘贴上一步生成的长字符串即可进入面板。
这是我本地的效果:
结语 Skooner 在保持 k3s 轻量化特性的同时,为你提供了一个直观、现代的操作界面。对于那些既想要可视化观测、又不想被复杂管理平台拖慢系统性能的开发者来说,Skooner 是一个“即插即用”的最佳方案。
如需了解更多高级配置,可以参考官方文档:skooner.io 。
一键安装脚本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 kubectl apply -f https://raw.githubusercontent.com/skooner-k8s/skooner/master/kubernetes-skooner.yaml kubectl patch svc skooner -n kube-system --type ='json' -p='[{"op": "replace", "path": "/spec/type", "value":"NodePort"}, {"op": "replace", "path": "/spec/ports/0/nodePort", "value":32007}]' cat <<EOF | kubectl apply -f - apiVersion: v1 kind: ServiceAccount metadata: name: skooner-admin namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: skooner-admin-binding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: skooner-admin namespace: kube-system EOF echo "-------------------------------------------------------" echo "Skooner is now accessible at port: 32007" echo "Access URL: http://$(hostname -I | awk '{print $1}') :32007" echo "" echo "Login Token:" kubectl create token skooner-admin -n kube-system --duration=24h echo "-------------------------------------------------------"