‍博主简介CSDN博客专家云计算领域优质创作者华为云开发者社区专家博主阿里云开发者社区专家博主交流社区运维交流社区 欢迎大家的加入 希望大家多多支持我们一起进步如果文章对你有帮助的话欢迎 点赞 评论 收藏 ⭐️ 加关注文章目录一、Headlamp 是什么二、Headlamp 的部署2.1 yaml 方式部署2.1.1 获取yaml2.1.2 安装 Headlamp2.1.3 创建访问 ServiceAccount 和 ClusterRoleBinding2.1.4 获取Token通用2.2 Helm 方式部署2.2.1 添加并更新 Helm 仓库2.2.2 安装 Headlamp2.2.3 创建访问 ServiceAccount 和 ClusterRoleBinding2.2.4 获取Token通用三、页面访问3.1 访问页面并填写Token3.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 的卸载4.1 YAML 方式部署卸载4.1.1 保留yaml版本4.1.2 没保留yaml版本4.2 Helm 方式部署卸载4.2.1 卸载4.3 检查是否卸载干净一、Headlamp 是什么Headlamp 是一个开源的、可扩展的 Kubernetes 图形化用户界面 (Web UI)你可以把它看作是 Kubernetes Dashboard 的现代化、功能更强大的继任者随着官方 Dashboard 项目进入维护状态Headlamp 由 Kubernetes SIG 持续迭代与维护目前已成为社区中更活跃、更具前瞻性的集群管理界面方案。简单理解Headlamp 就是 Kubernetes Dashboard 的下一代接班人。与传统 Dashboard 相比Headlamp 具备明显优势界面更现代交互更友好资源展示更清晰、信息组织更合理支持插件扩展机制能力可按需增强原生支持多集群统一管理社区持续活跃版本迭代稳定正因如此Headlamp 正逐步成为 Kubernetes 官方推荐的图形化管理工具之一。官方文档https://headlamp.dev/二、Headlamp 的部署部署环境kubernetes集群版本1.20.10Helm版本3.8.02.1 yaml 方式部署2.1.1 获取yaml可以下载官方yamlheadlamp官方yaml也可以使用下面我修改过的yaml和官方yaml对比修改了1、新增了ns2、svc字段为NodePort暴露方式3、所有的命名空间为headlamp4、镜像版本适配当前k8s版本vim headlamp.yamlapiVersion:v1kind:Namespacemetadata:name:headlamp---apiVersion:v1kind:Servicemetadata:name:headlampnamespace:headlampspec:type:NodePortselector:k8s-app:headlampports:-name:headlampport:80targetPort:4466nodePort:32019protocol:TCP---kind:DeploymentapiVersion:apps/v1metadata:name:headlampnamespace:headlampspec:replicas:1selector:matchLabels:k8s-app:headlamptemplate:metadata:labels:k8s-app:headlampspec:containers:-name:headlampimage:ghcr.io/headlamp-k8s/headlamp:v0.39.0args:--in-cluster--plugins-dir/headlamp/pluginsenv:-name:HEADLAMP_CONFIG_TRACING_ENABLEDvalue:true-name:HEADLAMP_CONFIG_METRICS_ENABLEDvalue:true-name:HEADLAMP_CONFIG_OTLP_ENDPOINTvalue:otel-collector:4317-name:HEADLAMP_CONFIG_SERVICE_NAMEvalue:headlamp-name:HEADLAMP_CONFIG_SERVICE_VERSIONvalue:latestports:-containerPort:4466name:http-containerPort:9090name:metricsreadinessProbe:httpGet:scheme:HTTPpath:/port:4466initialDelaySeconds:30timeoutSeconds:30livenessProbe:httpGet:scheme:HTTPpath:/port:4466initialDelaySeconds:30timeoutSeconds:30nodeSelector:kubernetes.io/os:linux---kind:SecretapiVersion:v1metadata:name:headlamp-adminnamespace:headlampannotations:kubernetes.io/service-account.name:headlamp-admintype:kubernetes.io/service-account-token2.1.2 安装 Headlamp安装 Headlampkubectl apply-fheadlamp.yaml检查是否创建成功# 检查命名空间是否创建成功kubectl get ns-A|grepheadlamp# 检查headlamp的pod是否运行正常READY状态为1/1正常kubectl get pods-nheadlamp-owide# 检查svc是否创建成功kubectl get svc-nheadlamp# 检查secret是否创建成功kubectl get secret-nheadlamp2.1.3 创建访问 ServiceAccount 和 ClusterRoleBindingHeadlamp 需要知道以谁的身份来访问集群。我们可以创建一个管理员级别的ServiceAccount来获得完整视图仅供初始管理和学习使用生产环境请遵循最小权限原则。编辑 RBAC权限vim headlamp-rbac.yamlapiVersion: 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-fheadlamp-rbac.yaml检查RBAC权限# 检查ServiceAccount是否存在headlampkubectl get sa-nheadlamp|grep-iheadlamp# 检查所有ClusterRoleBinding是否存在headlampkubectl get clusterrolebinding|grepheadlamp2.1.4 获取Token通用获取好的token请保存好登录 Headlamp 需要 获取好的token请保存好登录 Headlamp 需要 获取好的token请保存好登录 Headlamp 需要 官方获取token文档https://headlamp.dev/docs/latest/installation/#create-a-service-account-tokenKubernetes v1.24版本及以上可采用此方法来获取tokenkubectl create token headlamp-nheadlamp默认失效为1小时可以通过添加参数来延长时间--duration8760h从Secret中解码出来的Token是永不过期的Kubernetes v1.24版本以下可采用此方法来获取token# 查看secret是否存在headlampkubectl get secret-nheadlamp|grepheadlamp# 正常情况下会有一个类似 headlamp-token-xxxxx 的 Secret。# 如果存在可使用如下命令提取tokenkubectl get secret headlamp-token-pf6nj-nheadlamp-ojsonpath{.data.token}|base64--decode如果没找到关联的 Secret就手动创建一个catEOF|kubectl apply-f-apiVersion: v1 kind: Secret metadata: name: headlamp-token namespace: headlamp annotations: kubernetes.io/service-account.name: headlamp type: kubernetes.io/service-account-token EOF然后从新创建的 Secret 中获取 tokenkubectl get secret headlamp-token-nheadlamp-ojsonpath{.data.token}|base64--decode2.2 Helm 方式部署需提前安装好Helm没有安装的可参考K8s - Helm管理工具2.2.1 添加并更新 Helm 仓库# 添加headlamp仓库helm repoaddheadlamp https://kubernetes-sigs.github.io/headlamp/# 更新仓库helm repo update2.2.2 安装 Headlamp由于默认安装最新版本我的kubernetes版本不支持所以只能选择其他版本进行安装大家可根据自己的kuberntes版本来进行对应的headlamp版本安装查看所有headlamp版本helm search repo headlamp/headlamp--versions找到适配自己版本的headlamp进行安装helminstallheadlamp headlamp/headlamp--version0.39.0-nheadlamp --create-namespace安装完成进行查看是否运行正常# 查看 headlamp 的heml是否正常helm list-nheadlamp# 查看 headlamp 命名空间下的pod、deployment、svc是否都运行正常kubectl get all-nheadlamp-owide可以看到都运行成功了但是svc的网络模式是ClusterIP是无法再外网访问到的所以我们需要修改一下headlamp的svc的网络模式改为NodePort修改headlamp的svc的网络模式改为NodePortkubectl edit svc-nheadlamp# 二选一第一种可以更直观的看到yaml内容kubectl patch svc-nheadlamp headlamp-p{spec:{type:NodePort}}修改完成之后再次查看headlamp的svc就可以看到Port的80后面多了一个3开头的端口这是随机生成的对外访问的端口这时候就可以通过集群任意ip:32019去访问页面了这个端口是随机生成的或者是自己也可以指定NodePort的端口但是需要在30000-32767之间kubectl get svc-nheadlamp2.2.3 创建访问 ServiceAccount 和 ClusterRoleBinding通过 Helm 部署 Headlamp 时Chart 默认会自动创建所需的 ServiceAccount 和 RBAC 授权我们可以通过如下命令进行查看kubectl get sa-nheadlamp kubectl get ClusterRoleBinding|grepheadlamp2.2.4 获取Token通用获取好的token请保存好登录 Headlamp 需要 获取好的token请保存好登录 Headlamp 需要 获取好的token请保存好登录 Headlamp 需要 官方获取token文档https://headlamp.dev/docs/latest/installation/#create-a-service-account-tokenKubernetes v1.24版本及以上可采用此方法来获取tokenkubectl create token headlamp-nheadlamp默认失效为1小时可以通过添加参数来延长时间--duration8760h从Secret中解码出来的Token是永不过期的Kubernetes v1.24版本以下可采用此方法来获取token# 查看secret是否存在headlampkubectl get secret-nheadlamp|grepheadlamp# 正常情况下会有一个类似 headlamp-token-xxxxx 的 Secret。# 如果存在可使用如下命令提取tokenkubectl get secret headlamp-token-pf6nj-nheadlamp-ojsonpath{.data.token}|base64--decode如果没找到关联的 Secret就手动创建一个catEOF|kubectl apply-f-apiVersion: v1 kind: Secret metadata: name: headlamp-token namespace: headlamp annotations: kubernetes.io/service-account.name: headlamp type: kubernetes.io/service-account-token EOF然后从新创建的 Secret 中获取 tokenkubectl get secret headlamp-token-nheadlamp-ojsonpath{.data.token}|base64--decode三、页面访问3.1 访问页面并填写Token访问页面任意集群IP:32019输入刚刚获取的token3.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 存储存储中包含以下主要功能模块持续性卷宣告展示集群中所有 PVCPersistentVolumeClaim持久化存储声明的列表包含其绑定的 PV、容量、访问模式和状态等信息。持续性卷显示集群中所有 PVPersistentVolume持久化存储卷的资源详情和状态。存储类别查看和管理 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自动扩缩查看和管理 HPAHorizontalPodAutoscaler资源根据 CPU 使用率或自定义指标自动调整 Pod 副本数量。垂直Pod自动扩缩管理 VPAVerticalPodAutoscaler资源自动调整 Pod 的 CPU 和内存请求/限制值。Pod中断预算管理 PDBPodDisruptionBudget资源限制在自愿性中断如节点维护期间同时不可用的 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进行浏览。定义展示当前集群中安装的所有 CRDCustomResourceDefinition自定义资源定义的完整列表。包含资源的名称、API 组和版本等信息。四、Headlamp 的卸载4.1 YAML 方式部署卸载4.1.1 保留yaml版本# 卸载权限kubectl delete-fheadlamp-rbac.yaml# 卸载headlamp服务及svc等kubectl delete-fheadlamp.yaml4.1.2 没保留yaml版本# 卸载headlamp的deploymentkubectl delete deploy-nheadlamp headlamp# 卸载headlamp的servicekubectl delete svc-nheadlamp headlamp# 卸载headlamp的ServiceAccountkubectl delete sa-nheadlamp headlamp# 卸载headlamp的ClusterRoleBindingkubectl delete clusterrolebinding headlamp-admin# 卸载headlamp的命名空间正常会自动清理sa、configmap、secretkubectl delete ns headlamp4.2 Helm 方式部署卸载4.2.1 卸载# helm卸载headlamphelm uninstall-nheadlamp headlamp# 删除headlamp命名空间kubectl delete ns headlamp4.3 检查是否卸载干净helm 多一步# 查看helm是否还存在headlamphelm list-Aa|grep-iheadlamhelm、yaml方式部署通用# 查看所有pod是否还存在headlampkubectl get pods-A|grep-iheadlamp# 查看所有deployment是否还存在headlampkubectl get deploy-A|grep-iheadlamp# 查看所有service是否还存在headlampkubectl get svc-A|grep-iheadlamp# 查看所有endpoints是否还存在headlampkubectl get endpoints-A|grep-iheadlamp# 查看所有configmap是否还存在headlampkubectl get cm-A|grep-iheadlamp# 查看所有secrets是否还存在headlampkubectl get secrets-A|grep-iheadlamp# 查看所有ServiceAccount 是否还存在headlampkubectl get sa-A|grep-iheadlamp# 查看所有ClusterRoleBinding是否还存在headlampkubectl get ClusterRoleBinding|grep-iheadlamp# 查看所有ClusterRole是否还存在headlampkubectl get clusterrole|grep-iheadlamp或者一条命令查看上面所有kubectl get pods,deploy,svc,endpoints,cm,secrets,sa,ClusterRoleBinding,clusterrole-A|grep-iheadlamp