整理一篇学习笔记,把看到的一些要点和自己的理解都记下来。
👨🎓博主简介
🏅
文章目录
- 一、Headlamp 是什么?
- 二、Headlamp 的部署
- 2.1 yaml 方式部署
- 2.1.1 获取yaml
- 2.1.2 安装 Headlamp
- 2.1.3 创建访问 ServiceAccount 和 ClusterRoleBinding
- 2.1.4 获取Token(通用)
- 3.1 访问页面并填写Token
- 3.2 中文页面切换
- 3.3 功能展示
- 3.3.1 集群
- 3.3.2 资源全景图
- 3.3.3 工作负载
- 3.3.4 存储
- 3.3.5 网络
- 3.3.6 网关
- 3.3.7 安全
- 3.3.8 设置
- 3.3.9 自定义资源
一、Headlamp 是什么?
Headlamp 是一个开源的、可扩展的 Kubernetes 图形化用户界面 (Web UI),你可以把它看作是 Kubernetes Dashboard 的现代化、功能更强大的继任者;
随着官方 Dashboard 项目进入维护状态,Headlamp 由 Kubernetes SIG 持续迭代与维护,目前已成为社区中更活跃、更具前瞻性的集群管理界面方案。
简单理解:
Headlamp 就是 Kubernetes Dashboard 的下一代接班人。
与传统 Dashboard 相比,Headlamp 具备明显优势:
- 界面更现代,交互更友好
- 资源展示更清晰、信息组织更合理
- 支持插件扩展机制,能力可按需增强
- 原生支持多集群统一管理
- 社区持续活跃,版本迭代稳定
官方文档:https://headlamp.dev/
二、Headlamp 的部署
部署环境:
- kubernetes集群版本:
1.20.10 - Helm版本:
3.8.0
2.1 yaml 方式部署
2.1.1 获取yaml
可以下载官方yaml:headlamp官方yaml 也可以使用下面我修改过的yaml,和官方yaml对比,修改了:1、新增了ns;2、svc字段为NodePort暴露方式;3、所有的命名空间为headlamp;4、镜像版本(适配当前k8s版本)
vim headlamp.yaml
apiVersion: v1
kind: Namespace
metadata:
name: headlamp
---
apiVersion: v1
kind: Service
metadata:
name: headlamp
namespace: headlamp
spec:
type: NodePort
selector:
k8s-app: headlamp
ports:
- name: headlamp
port: 80
targetPort: 4466
nodePort: 32019
protocol: TCP
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: headlamp
namespace: headlamp
spec:
replicas: 1
selector:
matchLabels:
k8s-app: headlamp
template:
metadata:
labels:
k8s-app: headlamp
spec:
containers:
- name: headlamp
image: ghcr.io/headlamp-k8s/headlamp:v0.39.0
args:
- "-in-cluster"
- "-plugins-dir=/headlamp/plugins"
env:
- name: HEADLAMP_CONFIG_TRACING_ENABLED
value: "true"
- name: HEADLAMP_CONFIG_METRICS_ENABLED
value: "true"
- name: HEADLAMP_CONFIG_OTLP_ENDPOINT
value: "otel-collector:4317"
- name: HEADLAMP_CONFIG_SERVICE_NAME
value: "headlamp"
- name: HEADLAMP_CONFIG_SERVICE_VERSION
value: "latest"
ports:
- containerPort: 4466
name: http
- containerPort: 9090
name: metrics
readinessProbe:
httpGet:
scheme: HTTP
path: /
port: 4466
initialDelaySeconds: 30
timeoutSeconds: 30
livenessProbe:
httpGet:
scheme: HTTP
path: /
port: 4466
initialDelaySeconds: 30
timeoutSeconds: 30
nodeSelector:
'kubernetes.io/os': linux
---
kind: Secret
apiVersion: v1
metadata:
name: headlamp-admin
namespace: headlamp
annotations:
kubernetes.io/service-account.name: "headlamp-admin"
type: kubernetes.io/service-account-token
2.1.2 安装 Headlamp
- 安装 Headlamp
kubectl apply -f headlamp.yaml
- 检查是否创建成功
# 检查命名空间是否创建成功
kubectl get ns -A | grep headlamp
# 检查headlamp的pod是否运行正常(READY状态为1/1正常)
kubectl get pods -n headlamp -o wide
# 检查svc是否创建成功
kubectl get svc -n headlamp
# 检查secret是否创建成功
kubectl get secret -n headlamp
2.1.3 创建访问 ServiceAccount 和 ClusterRoleBinding
Headlamp 得知道以谁的身份来访问集群。大家可以创建一个管理员级别的 ServiceAccount 来获得完整视图(仅供初始管理和学使用,生产环境请遵循最小权限原则)。
- 编辑 RBAC权限
vim headlamp-rbac.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: headlamp
namespace: headlamp
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: headlamp-admin
namespace: headlamp
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: headlamp
namespace: headlamp
- 创建RBAC权限
kubectl apply -f headlamp-rbac.yaml
- 检查RBAC权限
# 检查ServiceAccount是否存在headlamp
kubectl get sa -n headlamp | grep -i headlamp
# 检查所有ClusterRoleBinding是否存在headlamp
kubectl get clusterrolebinding | grep headlamp
2.1.4 获取Token(通用)
获取好的token,请保存好,登录 Headlamp 得 !!! 获取好的token,请保存好,登录 Headlamp 得 !!! 获取好的token,请保存好,登录 Headlamp 需要 !!! 官方获取token文档:https://headlamp.dev/docs/latest/installation/#create-a-service-account-token
- Kubernetes v1.24版本及以上可采用此方式来获取token
kubectl create token headlamp -n headlamp
默认失效为1小时,可以通过添加参数来延长时间:--duration=8760h; 从Secret中解码出来的Token是永不过期的;
- Kubernetes v1.24版本以下可采用此方式来获取token
# 查看secret是否存在headlamp
kubectl get secret -n headlamp | grep headlamp
# 正常情况下会有一个类似 headlamp-token-xxxxx 的 Secret。
# 如果存在可使用如下命令提取token
kubectl get secret headlamp-token-pf6nj -n headlamp -o jsonpath='{.data.token}' | base64 --decode
如果没找到关联的 Secret,就手动创建一个
cat 需提前安装好Helm,没有安装的可参考:K8s - Helm管理工具
#### 2.2.1 添加并更新 Helm 仓库
添加headlamp仓库
helm repo add headlamp https://kubernetes-sigs.github.io/headlamp/
更新仓库
helm repo update
#### 2.2.2 安装 Headlamp
> 由于默认安装最新版本,我的kubernetes版本不支持,所以只能选择其他版本进行安装,大家可根据自己的kuberntes版本来进行对应的headlamp版本安装;
- 查看所有`headlamp`版本
helm search repo headlamp/headlamp --versions

- 找到适配自己版本的`headlamp`进行安装;
helm install headlamp headlamp/headlamp --version=0.39.0 -n headlamp --create-namespace

- 安装完成进行查看是否运行正常
查看 headlamp 的heml是否正常
helm list -n headlamp
查看 headlamp 命名空间下的pod、deployment、svc是否都运行正常
kubectl get all -n headlamp -o wide

> 可以看到都运行成功了,但是svc的网络模式是ClusterIP,是无法再外网访问到的,所以我们需要修改一下headlamp的svc的网络模式改为NodePort;
- 修改`headlamp`的`svc`的网络模式改为`NodePort`;
kubectl edit svc -n headlamp
二选一,第一种可以更直观的见到yaml内容
kubectl patch svc -n headlamp headlamp -p '{"spec":{"type":"NodePort"}}'

- 修改完成之后,再次查看`headlamp的svc`,就可以看到`Port`的`80`后面多了一个`3开头`的端口,这是随机生成的对外访问的端口,这时候就可以通过`集群任意ip:32019`去访问页面了;
> 这个端口是随机生成的,或者是自己也可以指定NodePort的端口,但是需要在30000-32767之间;
kubectl get svc -n headlamp

#### 2.2.3 创建访问 ServiceAccount 和 ClusterRoleBinding
> 通过 Helm 部署 Headlamp 时,Chart 默认会自动创建所需的 ServiceAccount 和 RBAC 授权,我们可以通过如下命令进行查看;
kubectl get sa -n headlamp
kubectl get ClusterRoleBinding | grep headlamp

#### 2.2.4 获取Token(通用)
> 获取好的token,请保存好,登录 Headlamp 需要 !!! 获取好的token,请保存好,登录 Headlamp 需要 !!! 获取好的token,请保存好,登录 Headlamp 需要 !!! 官方获取token文档:https://headlamp.dev/docs/latest/installation/#create-a-service-account-token
- Kubernetes v1.24版本及以上可采用此方法来获取token
kubectl create token headlamp -n headlamp
> 默认失效为1小时,可以通过添加参数来延长时间:--duration=8760h; 从Secret中解码出来的Token是永不过期的;
- Kubernetes v1.24版本以下可采用此方法来获取token
查看secret是否存在headlamp
kubectl get secret -n headlamp | grep headlamp
正常情况下会有一个类似 headlamp-token-xxxxx 的 Secret。
如果存在可使用如下命令提取token
kubectl get secret headlamp-token-pf6nj -n headlamp -o jsonpath='{.data.token}' | base64 --decode

---
> 如果没找到关联的 Secret,就手动创建一个
cat 访问页面:任意集群IP:32019,输入刚刚获取的token;
3.2 中文页面切换
简体中文是在0.35.0版本开始支持的
3.3 功能展示
3.3.1 集群
集群中包含以下主要功能模块:
命名空间:显示当前集群中的所有命名空间列表。节点:展示集群中所有节点的资源使用情况(如CPU、内存)和状态。高级搜索:提供类JavaScript语法的查询功能,支持通过标签(Labels)和注解(Annotations)等条件,对集群资源进行精确、快速的筛选(Beta功能)。
3.3.2 资源全景图
资源全景图:以分组视图展示集群核心资源的总览,默认按 “Workloads”、“存储”、“网络” 等类别对资源进行分组,每个分组下显示具体资源类型(如 Deployment、DaemonSet、Service、PVC 等)及其数量/状态。该视图帮助用户快速掌握集群资源的整体分布与健康状态。
3.3.3 工作负载
工作负载中包含以下主要功能模块:
Pods:显示集群中所有 Pod 的运行状态(如运行中、待处理)和数量,并可查看每个 Pod 的详细信息和日志。Deployments:展示 Deployment 的副本状态、更新策略和滚动更新历史,支持扩缩容和版本回滚操作。StatefulSets:管理有状态应用的副本数、持久化存储和有序启动/更新策略。DaemonSets:展示在每个节点上运行的守护进程型 Pod 的状态和覆盖情况。ReplicaSets:查看由 Deployment 或其他控制器管理的 Pod 副本集状态,主要用于排查历史版本问题。Jobs:显示一次性任务(Job)的执行状态(完成、失败、运行中),用于批处理场景。CronJobs:展示周期性定时任务的调度规则和执行历史,用于定期任务自动化。
3.3.4 存储
存储中包含以下主要功能模块:
持续性卷宣告:展示集群中所有 PVC(PersistentVolumeClaim,持久化存储声明)的列表,包含其绑定的 PV、容量、访问模式和状态等信息。持续性卷:显示集群中所有 PV(PersistentVolume,持久化存储卷)的资源详情和状态。存储类别:查看和管理 StorageClass 存储类,用于定义动态存储供应的策略和参数。
3.3.5 网络
网络中包含以下主要功能模块:
Services:展示集群中所有 Service(服务)的列表,包含类型(如 ClusterIP、NodePort)、ClusterIP、端口映射和选择器等信息。端点:查看 Service 后端关联的实际 Pod IP 和端口列表,用于验证服务是否正常转发流量。Endpoint Slices:展示 EndpointSlice 资源,用于更高效地管理大规模集群中 Service 的后端端点。Ingresses:管理 Ingress 资源,定义外部访问集群服务的路由规则(如域名、路径转发)。Ingress 类别:查看 IngressClass 资源,用于标识和选择不同的 Ingress 控制器实现。网络策略:管理 NetworkPolicy 资源,定义 Pod 之间的网络访问控制规则(如入站/出站流量白名单)。
3.3.6 网关
网关(Beta)中包含以下主要功能模块:
网关:展示 Gateway 资源列表,定义流量入口的配置(如监听协议、端口)。网关类别:查看 GatewayClass 资源,用于定义和选择不同的 Gateway 控制器实现。HTTP路由:管理 HTTPRoute 资源,定义 HTTP/HTTPS 流量的路由规则(如域名匹配、路径转发)。GRPC路由:管理 GRPCRoute 资源,定义 gRPC 流量的路由规则。Reference Grants:查看 ReferenceGrant 资源,用于跨命名空间引用资源时的授权管理。BackendTLS Policies:管理 BackendTLSPolicy 资源,定义与后端服务建立 TLS 连接的安全策略。BackendTrafficPolicies:管理 BackendTrafficPolicy 资源,定义后端流量的高级策略(如负载均衡、重试)。
3.3.7 安全
安全中包含以下主要功能模块:
服务账户:展示集群中所有的 ServiceAccount(服务账户)列表,用于为 Pod 提供身份认证。角色:查看 Role 资源,用于在命名空间级别定义操作权限(如对 Pod、Service 的增删改查)。角色绑定:管理 RoleBinding 资源,用于将 Role 或 ClusterRole 的权限授予特定的用户、组或 ServiceAccount。
3.3.8 设置
设置中包含以下主要功能模块:
Config Maps:展示集群中所有的 ConfigMap(配置映射)列表,用于存储非敏感的配置数据(如环境变量、配置文件)。Secrets:管理 Secret 资源,用于存储敏感信息(如密码、OAuth 令牌、SSH 密钥),并以 Base64 编码形式保存。水平Pod自动扩缩:查看和管理 HPA(HorizontalPodAutoscaler)资源,根据 CPU 使用率或自定义指标自动调整 Pod 副本数量。垂直Pod自动扩缩:管理 VPA(VerticalPodAutoscaler)资源,自动调整 Pod 的 CPU 和内存请求/限制值。Pod中断预算:管理 PDB(PodDisruptionBudget)资源,限制在自愿性中断(如节点维护)期间同时不可用的 Pod 数量,保障应用可用性。资源配置:查看 ResourceQuota 资源,用于限制命名空间中计算资源(如 CPU、内存)和对象数量(如 Pod、PVC)的总用量。限制范围:管理 LimitRange 资源,为命名空间中的 Pod 或容器设置默认的 CPU/内存请求和限制值。优先顺序:查看 PriorityClass 资源,用于定义 Pod 的调度优先级,影响调度器的抢占和排序行为。运行时刻类:管理 RuntimeClass 资源,用于选择不同的容器运行时(如 gVisor、Kata Containers)。租约:查看 Lease 资源,用于分布式系统中的协调和领导者选举机制。变更Webhook设置:管理 MutatingWebhookConfiguration 资源,定义在资源创建/更新时进行修改操作的准入 Webhook。验证Webhook设置:管理 ValidatingWebhookConfiguration 资源,定义在资源创建/更新时进行验证操作的准入 Webhook。
3.3.9 自定义资源
自定义资源中包含以下主要功能模块:
实例:按 API 组(Group)分类展示已安装的自定义资源(CRD),每个组下列出该组支持的所有资源类型(Kind)。便于按功能领域(如 cert-manager、FluxCD)进行浏览。定义:展示当前集群中安装的所有 CRD(CustomResourceDefinition,自定义资源定义)的完整列表。包含资源的名称、API 组和版本等信息。
四、Headlamp 的卸载
4.1 YAML 方式部署卸载
4.1.1 保留yaml版本
# 卸载权限
kubectl delete -f headlamp-rbac.yaml
# 卸载headlamp服务及svc等
kubectl delete -f headlamp.yaml
4.1.2 没保留yaml版本
# 卸载headlamp的deployment
kubectl delete deploy -n headlamp headlamp
# 卸载headlamp的service
kubectl delete svc -n headlamp headlamp
# 卸载headlamp的ServiceAccount
kubectl delete sa -n headlamp headlamp
# 卸载headlamp的ClusterRoleBinding
kubectl delete clusterrolebinding headlamp-admin
# 卸载headlamp的命名空间(正常会自动清理sa、configmap、secret)
kubectl delete ns headlamp
4.2 Helm 方式部署卸载
4.2.1 卸载
# helm卸载headlamp
helm uninstall -n headlamp headlamp
# 删除headlamp命名空间
kubectl delete ns headlamp
4.3 检查是否卸载干净
- helm 多一步
# 查看helm是否还存在headlamp
helm list -Aa | grep -i headlam
- helm、yaml方式部署通用
# 查看所有pod是否还存在headlamp
kubectl get pods -A | grep -i headlamp
# 查看所有deployment是否还存在headlamp
kubectl get deploy -A | grep -i headlamp
# 查看所有service是否还存在headlamp
kubectl get svc -A | grep -i headlamp
# 查看所有endpoints是否还存在headlamp
kubectl get endpoints -A | grep -i headlamp
# 查看所有configmap是否还存在headlamp
kubectl get cm -A | grep -i headlamp
# 查看所有secrets是否还存在headlamp
kubectl get secrets -A | grep -i headlamp
# 查看所有ServiceAccount 是否还存在headlamp
kubectl get sa -A | grep -i headlamp
# 查看所有ClusterRoleBinding是否还存在headlamp
kubectl get ClusterRoleBinding | grep -i headlamp
# 查看所有ClusterRole是否还存在headlamp
kubectl get clusterrole | grep -i headlamp
或者一条命令查看上面所有
kubectl get pods,deploy,svc,endpoints,cm,secrets,sa,ClusterRoleBinding,clusterrole -A | grep -i headlamp
这篇笔记就先到这里,后面用到新的思路或者发现有问题再补充。
评论 (0)
暂无评论