从Dashboard到Metrics-Server:给你的K8s 1.18.6集群装上‘监控仪表盘’完整指南
从Dashboard到Metrics-ServerKubernetes 1.18.6集群监控体系实战指南当你成功搭建Kubernetes集群后如何有效监控集群状态和资源使用情况成为运维工作的关键。本文将深入探讨如何为Kubernetes 1.18.6集群部署Dashboard可视化界面和Metrics-Server监控组件构建完整的集群监控体系。1. Kubernetes Dashboard部署与配置Dashboard作为Kubernetes官方提供的Web管理界面能够直观展示集群资源状态、工作负载和存储情况。下面我们详细介绍部署过程中的关键步骤和注意事项。1.1 准备部署文件首先需要获取Dashboard的部署清单文件。由于网络原因直接从GitHub拉取可能失败建议手动创建recommended.yaml文件apiVersion: v1 kind: Namespace metadata: name: kubernetes-dashboard --- apiVersion: v1 kind: ServiceAccount metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kubernetes-dashboard提示完整的recommended.yaml文件较长建议保存到本地后修改关键配置项。1.2 关键配置修改在部署前需要对默认配置进行几处重要修改Service类型修改将默认的ClusterIP改为NodePort便于外部访问证书配置注释掉自动生成证书的配置改为使用自签名证书端口设置指定NodePort端口如30008修改后的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-dashboard1.3 证书生成与配置由于Dashboard默认生成的证书可能不被浏览器信任我们需要手动创建自签名证书# 创建证书目录 mkdir dashboard-certs cd dashboard-certs/ # 生成私钥 openssl genrsa -out dashboard.key 2048 # 创建证书请求 openssl req -days 36000 -new -out dashboard.csr -key dashboard.key -subj /CNdashboard-cert # 自签证书 openssl x509 -req -in dashboard.csr -signkey dashboard.key -out dashboard.crt # 创建Kubernetes Secret kubectl create secret generic kubernetes-dashboard-certs \ --from-filedashboard.key \ --from-filedashboard.crt \ -n kubernetes-dashboard1.4 创建管理员账号为Dashboard创建具有管理员权限的ServiceAccount# dashboard-admin.yaml apiVersion: v1 kind: ServiceAccount metadata: labels: k8s-app: kubernetes-dashboard name: dashboard-admin namespace: kubernetes-dashboard然后绑定cluster-admin角色# dashboard-admin-bind-cluster-role.yaml 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应用这两个配置文件后可以获取管理员token用于登录kubectl -n kubernetes-dashboard describe secret \ $(kubectl -n kubernetes-dashboard get secret | grep dashboard-admin | awk {print $1})2. Metrics-Server部署与调优Metrics-Server取代了早期的Heapster是Kubernetes集群资源监控的核心组件为HPA和Dashboard提供资源使用数据。2.1 部署文件准备从GitHub获取Metrics-Server部署文件git clone https://github.com/kubernetes-incubator/metrics-server.git cd metrics-server/deploy/1.8/国内用户可能会遇到网络问题可以手动下载部署文件包。2.2 关键配置修改需要修改metrics-server-deployment.yaml文件主要调整包括镜像地址使用国内可访问的镜像源启动参数添加必要的安全参数和网络参数修改后的关键部分如下containers: - name: metrics-server image: mirrorgooglecontainers/metrics-server-amd64:v0.3.6 args: - --cert-dir/tmp - --secure-port4443 - --kubelet-insecure-tls - --kubelet-preferred-address-typesInternalIP,ExternalIP,Hostname注意--kubelet-insecure-tls参数跳过了证书验证在生产环境中应配置正确的证书。2.3 部署与验证应用所有部署文件kubectl create -f .等待1-2分钟后验证Metrics-Server是否正常工作kubectl top nodes正常输出应显示各节点的CPU和内存使用情况NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% k8s-master 256m 12% 2002Mi 52% k8s-node1 103m 5% 1334Mi 34% k8s-node2 144m 7% 1321Mi 34%3. Dashboard与Metrics-Server集成成功部署Metrics-Server后Dashboard将自动获取集群资源监控数据在界面中展示以下信息节点CPU/内存使用率Pod资源占用情况工作负载资源请求和限制3.1 常见问题排查如果Dashboard中看不到资源监控数据可按以下步骤排查检查Metrics-Server Pod是否正常运行kubectl get pods -n kube-system | grep metrics-server查看Metrics-Server日志kubectl logs -n kube-system metrics-server-pod-name验证API是否可用kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes常见问题及解决方案问题现象可能原因解决方案Metrics API无响应Metrics-Server未正常运行检查Pod状态和日志显示Metrics not available网络问题导致无法访问kubelet添加--kubelet-insecure-tls参数数据延迟严重采集间隔设置过长调整--metric-resolution参数3.2 性能优化建议对于大规模集群可以考虑以下优化措施调整采集间隔args: - --metric-resolution30s资源限制resources: limits: cpu: 500m memory: 512Mi节点筛选args: - --kubelet-preferred-address-typesInternalIP4. 安全加固与访问控制4.1 安全访问配置默认配置下Dashboard通过HTTP提供服务存在安全风险。建议通过以下方式加固启用HTTPS使用前面创建的自签名证书限制访问IP通过NetworkPolicy或防火墙规则限制访问来源设置访问超时配置合适的会话超时时间在recommended.yaml中添加以下配置args: - --auto-generate-certificates - --enable-skip-login - --enable-insecure-loginfalse - --token-ttl36004.2 基于角色的访问控制(RBAC)根据团队职责划分访问权限管理员角色完全控制权限开发者角色仅限特定命名空间只读角色仅查看权限创建只读角色的示例kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: dashboard-readonly rules: - apiGroups: [] resources: [*] verbs: [get, list, watch]4.3 审计日志配置启用Dashboard的审计日志功能记录用户操作args: - --audit-log-path/var/log/dashboard-audit.log - --audit-log-maxage30 - --audit-log-maxbackup5 - --audit-log-maxsize100同时需要添加对应的volume挂载volumeMounts: - name: audit-log mountPath: /var/log volumes: - name: audit-log emptyDir: {}5. 高级功能与扩展5.1 自定义监控面板Dashboard支持自定义视图可以通过以下步骤创建登录Dashboard点击右上角Create按钮选择From form或From YAML配置自定义的资源视图保存为默认视图或命名视图5.2 与Prometheus集成结合Prometheus可以实现更强大的监控能力部署Prometheus Operator配置ServiceMonitor监控Dashboard和Metrics-Server创建Grafana面板展示监控数据示例ServiceMonitor配置apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: kubernetes-dashboard namespace: monitoring spec: selector: matchLabels: k8s-app: kubernetes-dashboard endpoints: - port: https scheme: https tlsConfig: insecureSkipVerify: true5.3 告警配置基于监控数据设置告警规则节点资源告警CPU/内存使用率过高Pod异常告警频繁重启或状态异常组件健康告警Metrics-Server不可用示例Prometheus告警规则groups: - name: kubernetes-resources rules: - alert: HighNodeCPU expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{modeidle}[5m])) * 100) 80 for: 10m labels: severity: warning annotations: summary: High CPU usage on node {{ $labels.instance }} description: Node {{ $labels.instance }} CPU usage is {{ $value }}%实际部署中我们遇到一个典型问题Metrics-Server无法获取节点指标。经过排查发现是kubelet证书问题通过在Metrics-Server启动参数中添加--kubelet-insecure-tls临时解决长期方案则是为kubelet配置正确的证书。