从Dashboard到Metrics-Server:给你的K8s 1.18.6集群装上‘仪表盘’和‘监控仪表’

张开发
2026/4/16 13:59:39 15 分钟阅读

分享文章

从Dashboard到Metrics-Server:给你的K8s 1.18.6集群装上‘仪表盘’和‘监控仪表’
从Dashboard到Metrics-ServerKubernetes 1.18.6集群可视化监控实战指南当你成功搭建Kubernetes集群后接下来的挑战是如何有效管理和监控这个复杂的系统。就像驾驶一辆高性能跑车如果没有仪表盘和监控系统你将无法了解引擎状态、油量消耗或行驶速度。本文将带你从零开始为你的Kubernetes 1.18.6集群安装仪表盘Dashboard和监控仪表Metrics-Server实现集群状态的可视化监控。1. Kubernetes Dashboard集群管理的可视化控制台Kubernetes Dashboard是官方提供的Web用户界面它让你能够直观查看集群资源使用情况部署容器化应用到集群排查和解决问题管理集群资源1.1 部署Dashboard的三种方式对比在部署Dashboard前我们先了解不同部署方式的优缺点部署方式优点缺点适用场景官方recommended.yaml简单直接默认配置较基础快速测试环境自定义NodePort可直接通过节点IP访问需要管理证书开发/测试环境Ingress TLS统一入口安全性高配置复杂生产环境对于大多数场景我们推荐使用自定义NodePort方式它提供了良好的平衡。1.2 详细部署步骤首先下载官方推荐的Dashboard部署文件wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta5/aio/deploy/recommended.yaml -O dashboard.yaml接下来我们需要修改这个文件以支持NodePort访问。找到Service部分修改为kind: Service apiVersion: v1 metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kubernetes-dashboard spec: type: NodePort ports: - port: 443 targetPort: 8443 nodePort: 30008 selector: k8s-app: kubernetes-dashboard注意nodePort范围默认为30000-32767确保选择的端口未被占用1.3 证书配置最佳实践默认情况下Dashboard会使用自动生成的证书但这可能导致浏览器警告。我们可以创建自定义证书mkdir -p dashboard-certs cd dashboard-certs openssl genrsa -out dashboard.key 2048 openssl req -new -key dashboard.key -out dashboard.csr -subj /CNdashboard-cert openssl x509 -req -in dashboard.csr -signkey dashboard.key -out dashboard.crt -days 365 kubectl create secret generic kubernetes-dashboard-certs --from-filedashboard.key --from-filedashboard.crt -n kubernetes-dashboard1.4 创建管理员账户Dashboard默认使用RBAC进行权限控制我们需要创建具有足够权限的ServiceAccountcat EOF | kubectl apply -f - apiVersion: v1 kind: ServiceAccount metadata: name: dashboard-admin namespace: kubernetes-dashboard labels: k8s-app: kubernetes-dashboard EOF cat EOF | kubectl apply -f - apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: dashboard-admin-bind-cluster-role labels: k8s-app: kubernetes-dashboard roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: dashboard-admin namespace: kubernetes-dashboard EOF获取访问令牌kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep dashboard-admin | awk {print $1})1.5 访问与使用技巧现在可以通过https://节点IP:30008访问Dashboard。登录后你会发现几个实用功能工作负载视图直观展示Deployment、Pod等资源状态资源使用图表显示CPU/内存使用趋势需Metrics-Server支持事件查看器帮助排查Pod启动失败等问题YAML编辑器直接修改资源定义安全提示生产环境应考虑配置Ingress和更严格的网络策略限制访问2. Metrics-Server集群资源监控的核心组件Metrics-Server是Kubernetes集群资源使用数据的聚合器它从各节点的kubelet收集CPU/内存指标通过Metrics API暴露数据支持Horizontal Pod Autoscaler (HPA)为Dashboard提供资源使用数据2.1 部署Metrics-Server的常见问题在部署Metrics-Server时开发者常遇到以下问题证书验证失败节点kubelet使用自签名证书网络连接问题Metrics-Server无法访问节点数据延迟指标更新不及时资源不足Metrics-Server自身资源限制过低2.2 详细部署步骤下载官方部署文件git clone https://github.com/kubernetes-sigs/metrics-server.git cd metrics-server/deploy/1.8/修改metrics-server-deployment.yaml添加关键参数args: - --cert-dir/tmp - --secure-port4443 - --kubelet-insecure-tls - --kubelet-preferred-address-typesInternalIP,ExternalIP,Hostname这些参数解决了以下问题--kubelet-insecure-tls跳过kubelet证书验证--kubelet-preferred-address-types指定连接kubelet的地址类型应用所有配置文件kubectl apply -f .2.3 验证安装等待1-2分钟后检查Metrics-Server状态kubectl get pods -n kube-system | grep metrics-server kubectl top nodes如果一切正常你将看到类似输出NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% k8s-master 256m 12% 2002Mi 52% k8s-node1 103m 5% 1334Mi 34%2.4 性能调优建议对于大型集群可能需要调整Metrics-Server的资源限制resources: requests: cpu: 100m memory: 200Mi limits: cpu: 500m memory: 500Mi同时可以调整指标解析频率默认60秒args: - --metric-resolution30s3. Dashboard与Metrics-Server集成成功部署两者后Dashboard将自动显示资源使用指标。你可以在Dashboard中查看节点资源使用热图监控Pod的CPU/内存消耗设置资源使用警报阈值分析历史使用趋势3.1 常见集成问题排查如果Dashboard中看不到资源指标检查以下方面Metrics-Server是否正常运行kubectl logs -n kube-system $(kubectl get pods -n kube-system | grep metrics-server | awk {print $1})API服务是否可用kubectl get apiservices | grep metrics节点kubelet是否健康kubectl get nodes -o wide3.2 高级监控方案对于生产环境可以考虑以下增强方案Prometheus Grafana提供更丰富的监控指标和可视化自定义指标采集支持基于业务指标的自动扩缩容长期存储使用Thanos或VictoriaMetrics存储历史数据告警系统集成Alertmanager实现异常告警4. 安全加固与最佳实践4.1 Dashboard安全建议启用HTTPS始终使用HTTPS访问Dashboard限制访问IP通过NetworkPolicy限制访问来源定期轮换令牌管理员令牌应定期更新审计日志记录所有管理操作最小权限原则为不同用户分配精确的RBAC权限4.2 Metrics-Server安全配置启用证书认证替代--kubelet-insecure-tls# 创建证书签名请求 cat EOF | kubectl apply -f - apiVersion: certificates.k8s.io/v1beta1 kind: CertificateSigningRequest metadata: name: metrics-server spec: groups: - system:nodes - system:authenticated usages: - digital signature - key encipherment - server auth request: $(cat server.csr | base64 | tr -d \n) EOF # 批准请求 kubectl certificate approve metrics-server配置网络策略apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: metrics-server-allow namespace: kube-system spec: podSelector: matchLabels: k8s-app: metrics-server ingress: - from: - namespaceSelector: matchLabels: kubernetes.io/metadata.name: kubernetes-dashboard policyTypes: - Ingress4.3 监控系统维护定期升级保持组件版本与集群同步资源监控监控监控系统本身的资源使用备份配置定期备份Dashboard和Metrics-Server的配置性能基准测试在大规模集群前进行压力测试5. 真实案例电商平台监控实践某电商平台在黑色星期五促销期间通过完善的Kubernetes监控系统成功应对了流量高峰。他们的架构包括Dashboard实时查看所有服务的状态Metrics-Server提供基础资源指标HPA基于CPU/内存指标自动扩缩容自定义指标基于QPS进行更精确的扩缩容关键配置apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: frontend-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: frontend minReplicas: 3 maxReplicas: 20 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 60 - type: External external: metric: name: requests_per_second selector: matchLabels: app: frontend target: type: AverageValue averageValue: 500这套系统帮助他们实现了秒级自动扩缩容响应资源利用率提高40%零人工干预应对流量高峰6. 故障排除指南6.1 Dashboard常见问题问题1无法访问Dashboard连接被拒绝检查Service类型和端口kubectl get svc -n kubernetes-dashboard验证节点防火墙规则检查kube-proxy是否正常运行问题2登录后显示没有权限验证ServiceAccount和ClusterRoleBinding检查令牌是否过期确认上下文是否正确kubectl config current-context6.2 Metrics-Server常见问题问题1kubectl top返回metrics not available yet检查Metrics-Server日志kubectl logs -n kube-system deployment/metrics-server验证APIService是否注册kubectl get apiservice v1beta1.metrics.k8s.io -o yaml检查节点kubelet状态journalctl -u kubelet -n 50 --no-pager问题2指标数据不准确或延迟高调整Metrics-Server的--metric-resolution参数增加Metrics-Server资源限制检查节点负载情况7. 版本升级与兼容性7.1 Kubernetes 1.18.6特定注意事项Dashboard版本推荐使用v2.0.0Metrics-Server版本v0.3.6API兼容性metrics.k8s.io/v1beta1dashboard v1.10.1 API7.2 升级路径备份现有配置kubectl get all,sa,secret,configmap -n kubernetes-dashboard -o yaml dashboard-backup.yaml kubectl get all,sa,secret,configmap -n kube-system -l k8s-appmetrics-server -o yaml metrics-server-backup.yaml逐步升级策略先升级Metrics-Server验证指标收集正常再升级Dashboard测试所有功能回滚计划kubectl apply -f dashboard-backup.yaml kubectl apply -f metrics-server-backup.yaml8. 扩展阅读与资源8.1 官方文档Kubernetes Dashboard GitHubMetrics-Server文档Kubernetes监控架构8.2 性能优化工具kube-state-metrics生成关于集群状态的指标node-exporter收集节点级指标cAdvisor容器监控工具已集成到kubelet8.3 社区最佳实践监控分层架构基础设施层节点资源容器层Pod/Container指标应用层业务指标告警策略设置多级阈值Warning/Critical避免告警风暴实现告警抑制和分组可视化原则每个仪表盘聚焦一个主题使用一致的配色方案包含必要的上下文信息9. 未来趋势与替代方案随着Kubernetes生态的发展监控方案也在不断演进eBPF技术更高效的内核级监控OpenTelemetry统一的监控标准服务网格集成Istio/Linkerd提供的监控能力AI驱动的异常检测自动识别异常模式对于需要更强大监控功能的用户可以考虑Prometheus Operator简化Prometheus部署Thanos提供长期存储和全局视图Grafana Loki日志监控解决方案Elastic Kubernetes Monitoring全栈可观测性10. 总结与实操建议通过本文你已经掌握了在Kubernetes 1.18.6集群上部署Dashboard和Metrics-Server的完整流程。在实际操作中建议从小规模开始先在测试环境验证配置自动化部署将配置代码化便于重复使用文档记录记录所有自定义配置和决策原因监控监控系统确保监控系统本身健康运行持续优化根据实际使用情况调整参数记住好的监控系统应该提供准确的实时数据帮助快速定位问题支持容量规划不影响被监控系统性能

更多文章