Skip to main content

使用 Minikube Metrics Server 实现集群监控

一、Metrics Server 概述

Metrics Server 是 Kubernetes 集群的核心组件,用于收集资源指标数据(如 CPU 和内存使用情况),这些数据被用于:

  • Horizontal Pod Autoscaler (HPA) 自动扩缩容
  • kubectl top 命令
  • Kubernetes Dashboard 资源展示

二、在 Minikube 中启用 Metrics Server

2.1 启用 Metrics Server 插件

# 启用 metrics-server 插件(Minikube 内置)
minikube addons enable metrics-server

2.2 验证安装

# 检查 metrics-server pod 状态
kubectl get pods -n kube-system | grep metrics-server

# 预期输出类似:
# metrics-server-5f4f6d5b5d-2w8xk   1/1     Running   0          2m

三、验证 Metrics Server 功能

3.1 查看节点指标

kubectl top nodes

# 预期输出:
# NAME       CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
# minikube   150m         7%     1200Mi          31%

3.2 查看 Pod 指标

kubectl top pods -A

# 预期输出类似:
# NAMESPACE     NAME                               CPU(cores)   MEMORY(bytes)
# kube-system   coredns-6d4b75cb6d-zw7bv           3m           12Mi
# kube-system   etcd-minikube                      25m          42Mi

四、常见问题排查

4.1 Metrics Server 未正常运行

# 查看日志
kubectl logs -n kube-system deployment/metrics-server

# 检查 API 可用性
kubectl get --raw "/apis/metrics.k8s.io/v1beta1/nodes" | jq .

4.2 证书问题修复

如果出现证书错误,可以修改 Metrics Server 配置:

kubectl edit deployment -n kube-system metrics-server

添加以下参数:

spec:
  template:
    spec:
      containers:
      - args:
        - --kubelet-insecure-tls
        - --kubelet-preferred-address-types=InternalIP

五、结合 HPA 使用

5.1 创建 HPA 示例

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: php-backend-hpa
  namespace: php-vue-prod
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-backend
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50
  - type: Resource
    resource:
      name: memory
      target:
        type: Utilization
        averageUtilization: 70

5.2 查看 HPA 状态

kubectl get hpa -n php-vue-prod

# 预期输出:
# NAME             REFERENCE                   TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
# php-backend-hpa  Deployment/php-backend      50%/50%, 60%/70%   2         10        3         5m

六、高级配置

6.1 自定义 Metrics Server 配置

# 获取当前配置
kubectl get configmap -n kube-system metrics-server-config -o yaml

# 自定义配置示例
apiVersion: v1
kind: ConfigMap
metadata:
  name: metrics-server-config
  namespace: kube-system
data:
  NODE_RESOLUTION_TIMEOUT: "30s"
  KUBELET_PREFERRED_ADDRESS_TYPES: "InternalIP,ExternalIP,Hostname"

6.2 资源限制设置

kubectl edit deployment -n kube-system metrics-server

添加资源限制:

resources:
  requests:
    cpu: 100m
    memory: 200Mi
  limits:
    cpu: 200m
    memory: 400Mi

七、与 Kubernetes Dashboard 集成

7.1 启用 Dashboard

minikube addons enable dashboard
minikube dashboard

7.2 查看资源指标

在 Dashboard 中:

  1. 导航到 "集群" → "节点"
  2. 可以看到 CPU/内存使用率图表
  3. 在 Pod 详情页查看单个 Pod 的资源使用情况

八、性能优化建议

  1. 调整指标采集间隔(默认60秒):

    # 在 metrics-server 部署中添加
    - --metric-resolution=30s
    
  2. 限制采集的指标数量

    - --requestheader-allowed-names="aggregator"
    - --requestheader-extra-headers-prefix="X-Remote-Extra-"
    
  3. 使用节点选择器(在大集群中):

    nodeSelector:
      kubernetes.io/os: linux
    

九、清理资源

# 禁用 metrics-server
minikube addons disable metrics-server

# 完全删除
kubectl delete -n kube-system deployment metrics-server

通过以上配置,您可以在 Minikube 中充分利用 Metrics Server 监控集群资源使用情况,为自动扩缩容和性能优化提供数据支持。