Kubernetes Monitoring — Metrics Server

本文详细介绍在Kubernetes Cluster v1.16版本中部署MetricsServer的方法及常见问题解决策略。主要内容包括环境检查、配置修改、应用配置文件及查看资源占用情况等步骤。

永久地址:Kubernetes Monitoring — Metrics Server(保存网址不迷路 🙃)

 

问题描述

该笔记将记录:在 Kubernetes Cluster 中,如何部署 Metrics Server 服务,以及常见问题处理。

解决方案

我们的测试环境为 Kubernetes Cluster v1.16 版本。

第一步、环境检查

Metrics Server 对网络和集群有特殊要求。这样要求在某些集群里不是默认配置,所以要先确认是否满足要求。

1)Metrics Server must be reachable from kube-apiserver

2)The kube-apiserver must be correctly configured to enable an aggregation layer
检查 /etc/kubernetes/manifests/kube-apiserver.yaml 选项,默认已经开启。

3)Nodes must have kubelet authorization configured to match Metrics Server configuration

4)Container runtime must implement a container metrics RPCs

第二步、修改配置信息

下载 components.yaml 文件,并根据需要进行修改:

1)我们需要修改在 YAML 文件中的镜像地址,使用私有镜像仓库;

默认镜像属于 k8s.gcr.io 仓库,拉取必然失败,修改为 bitnami/metrics-server:0.4.2

 

2)添加 --kubelet-preferred-address-types=InternalIP 与 --kubelet-insecure-tls 选项;

第三步、应用配置文件

# kubectl apply -f "/path/to/components.yaml"

# kubectl get -n kube-system pods -l k8s-app=metrics-server
NAME                              READY   STATUS    RESTARTS   AGE
metrics-server-66d4d747c4-nmzs6   1/1     Running   0          8m19s

第四步、查看 Pod 资源占用情况

# kubectl top node --sort-by=cpu
...

# kubectl top pod --all-namespaces --containers
...

常见错误汇总

Metrics not available for pod

# kubectl top -n kube-system pod
W0702 10:48:07.400630    6619 top_pod.go:266] Metrics not available for pod kube-system/coredns-58cc8c89f4-6czm4, age: 4267h8m49.400600321s
error: Metrics not available for pod kube-system/coredns-58cc8c89f4-6czm4, age: 4267h8m49.400600321s

通过添加 --kubelet-preferred-address-types=InternalIP 与 --kubelet-insecure-tls 选项解决;

unable to fetch pod metrics for pod

E0702 02:39:09.777832       1 reststorage.go:160] unable to fetch pod metrics for pod default/counter: no metrics known for pod
E0702 02:39:09.777843       1 reststorage.go:160] unable to fetch pod metrics for pod kube-system/etcd-k8s-master-02: no metrics known for pod
E0702 02:39:09.777863       1 reststorage.go:160] unable to fetch pod metrics for pod kube-system/fluentd-p6d29: no metrics known for pod
E0702 02:39:09.777874       1 reststorage.go:160] unable to fetch pod metrics for pod kube-system/kube-proxy-xdh2z: no metrics known for pod
E0702 02:39:09.777885       1 reststorage.go:160] unable to fetch pod metrics for pod kube-system/etcd-k8s-master-01: no metrics known for pod
E0702 02:39:09.777900       1 reststorage.go:160] unable to fetch pod metrics for pod kube-system/kube-proxy-jrpnd: no metrics known for pod

通过添加 --kubelet-preferred-address-types=InternalIP 与 --kubelet-insecure-tls 选项解决;

相关文章

「Kubernetes」- 部署 Prometheus 监控
「Kubernetes Monitoring」- Heapster
「Metrics Server」- components.yaml

参考文献

Kubernetes metrics-server Installation
Installing the Kubernetes Metrics Server
Kubernetes Metrics unable to fetch pod/node metrics - Stack Overflow
Installing the Kubernetes Metrics Server - Amazon EKS
Configure the Aggregation Layer - Kubernetes

### 构建生产级 Kubernetes 集群 为了实现一个高可用、可视化的生产级 Kubernetes 集群,以下是针对 **Dashboard 服务**、**Metrics Server 监控**、**Ingress 统一入口** 的具体配置方案。 --- #### 1. 安装并配置 Kubernetes Dashboard Kubernetes Dashboard 提供了一个基于 Web 的界面,用于管理集群中的各种资源。它支持应用部署、状态监控以及故障排除等功能[^2]。 - 使用官方 Helm Chart 或 YAML 文件安装: ```bash kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml ``` - 创建管理员角色绑定以访问 Dashboard: ```yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: admin-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: default namespace: kubernetes-dashboard ``` - 访问方式可以通过 `NodePort` 或者 Ingress 来暴露服务端口。 --- #### 2. 配置 Metrics Server 进行核心指标监控 Metrics ServerKubernetes 中的核心组件之一,提供 CPU 和内存的实时数据采集功能,通常作为 Horizontal Pod Autoscaler (HPA) 的基础依赖[^1]。 - 安装 Metrics Server: ```bash kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml ``` - 验证 Metrics Server 是否正常工作: ```bash kubectl get --raw /apis/metrics.k8s.io/v1beta1/pods ``` 如果返回 JSON 数据,则说明 Metrics Server 已成功运行。 --- #### 3. 设置 Ingress 控制器作为统一入口 Ingress 资源允许外部流量进入集群内部的服务,并提供了负载均衡、SSL/TLS 支持和命名虚拟主机的功能。 - 推荐使用 NGINX Ingress Controller: ```bash helm repo add nginx-stable https://nginxinc.github.io/helm-charts helm install my-release nginx-stable/nginx-ingress \ --set controller.replicaCount=2 \ # 增加副本数提高 HA --set controller.service.type=LoadBalancer ``` - 配置 TLS 加密: 创建 Secret 并将其关联到 Ingress 资源中: ```bash kubectl create secret tls example-tls-secret --cert=path/to/cert.pem --key=path/to/key.pem ``` - 示例 Ingress 配置文件: ```yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example-ingress spec: rules: - host: example.com http: paths: - pathType: Prefix path: "/" backend: service: name: frontend-service port: number: 80 tls: - hosts: - example.com secretName: example-tls-secret ``` --- #### 4. 实现高可用架构设计 高可用性是生产环境的关键特性,需考虑以下几个方面: - **控制平面节点冗余**:确保多个 Master 节点存在并通过 etcd 复制机制同步元数据。 - **调度策略优化**:利用污点(Taints)、容忍度(Tolerations)和亲和性/反亲和性规则分配 Pods 到合适的 Worker 节点。 - **存储层持久化**:为有状态的应用程序设置 PersistentVolumeClaims (PVC),并将后端连接至分布式存储解决方案如 Ceph 或 NFS。 --- #### 5. 可视化与高级监控集成 除了基本的 Metrics Server 功能外,还可以引入更强大的开源工具链来增强可视化能力: - **Prometheus & Grafana**: 通过 kube-prometheus-stack chart 自动化部署完整的监控栈[^1]: ```bash helm repo add prometheus-community https://prometheus-community.github.io/helm-chart helm install monitoring prometheus-community/kube-prometheus-stack ``` - **Alertmanager**: 结合 Prometheus 使用告警通知系统,在异常情况下及时响应。 - **Node Exporter**: 获取底层硬件层面的信息以便更好地分析性能瓶颈。 --- ### 总结 以上方法涵盖了从基础设施搭建到运维保障的一系列操作指南,能够帮助构建稳定可靠的 K8s 生产环境。每一步都强调了自动化脚本编写的重要性,同时也兼顾到了安全性考量。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值