ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

自建 Kubernetes 集群部署 metrics-server:打通 kubectl top 与 HPA 的资源指标链路

自建 Kubernetes 集群部署 metrics-server:打通 kubectl top 与 HPA 的资源指标链路 文档教程云原生【免费下载链接】follow-me-install-kubernetes-cluster和我一步步部署 kubernetes 集群项目地址https://gitcode.com/gh_mirrors/fo/follow-me-install-kubernetes-cluster点击查看免费下载metrics-server 是 Kubernetes 资源指标Resource Metrics的标准实现它以 kube-apiserver 为入口发现集群中的 Node 与 Pod通过 HTTPS 调用各节点 kubelet 的 API底层由内嵌的 cadvisor 提供数据聚合出 CPU、内存等核心使用指标。本文以「和我一步步部署 kubernetes 集群」项目Kubernetes v1.16.6三节点集群 zhangjun-k8s-01/02/03为背景完整演示 metrics-server v0.3.6 的部署过程、关键参数调优、metrics.k8s.io API 原始输出验证与 kubectl top 的使用方法并解释它与 kube-prometheus 中 k8s-prometheus-adapter 的分工关系。读完本文你将掌握资源指标链路的工作原理并能在自己的集群中独立完成 metrics-server 的安装与排障。为什么需要 metrics-serverHeapster 退役后的指标方案metrics-server 通过 kube-apiserver 发现集群内所有节点然后调用各节点的 kubelet APIsHTTPS 接口获得 Node 和 Pod 的 CPU、Memory 等资源使用情况。它聚合后的数据通过metrics.k8s.ioAPI 对外暴露成为kubectl top与水平自动扩缩容HPA的数据来源。从 Kubernetes 1.12 开始kubernetes 的安装脚本移除了 Heapster从 1.13 开始完全移除了对 Heapster 的支持Heapster 不再被维护。其能力被拆分为三类替代方案用于支持自动扩缩容的 CPU/memory HPA 指标metrics-server提供metrics.k8s.io资源指标 API通用监控方案使用第三方可以获取 Prometheus 格式监控指标的监控系统如 Prometheus Operator本项目对应 08-4.kube-prometheus插件.md事件传输使用第三方工具来传输、归档 kubernetes events。本项目在 00.组件版本和配置策略.md 中明确将 metrics-server0.3.62019-10-15 发布列为集群 Metric 插件的选型并约定「使用 https 访问 kubelet 安全端口」——这与本仓库集群的严格安全基线完全一致kubelet 关闭了非安全 http 端口只保留 10250 安全端口接收 https 请求。未安装 metrics-server 时的表现没有安装 metrics-server 或 heapster 时kubectl top命令将不能使用$ kubectl top node Error from server (NotFound): the server could not find the requested resource (get services http:heapster:)报错说明kubectl top此时试图向后端指标服务历史上是 heapster 对应的服务取数但集群中并不存在该资源。安装 metrics-server 后kubectl top会改从metrics.k8s.ioAPI 获取数据。安装 metrics-server1. 克隆源码并进入部署目录在部署机上本项目所有操作均在 zhangjun-k8s-01 节点执行环境变量定义见 manifests/environment.sh$ cd /opt/k8s/work/ $ git clone https://github.com/kubernetes-incubator/metrics-server.git $ cd metrics-server/deploy/1.8/deploy/1.8目录下的部署清单兼容 Kubernetes 1.8 及以上的集群版本本集群使用的 Kubernetes v1.16.6 完全满足要求。2. 修改 Deployment 清单添加关键启动参数修改metrics-server-deployment.yaml文件为 metrics-server 添加三个命令行参数。先备份原文件再做差异对比$ cp metrics-server-deployment.yaml metrics-server-deployment.yaml.orig $ diff metrics-server-deployment.yaml.orig metrics-server-deployment.yaml 32c32 image: k8s.gcr.io/metrics-server-amd64:v0.3.6 --- image: gcr.azk8s.cn/google_containers/metrics-server-amd64:v0.3.6 35a36,37 - --metric-resolution30s - --kubelet-preferred-address-typesInternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP改动说明镜像替换使用微软 grcAzure China的镜像源gcr.azk8s.cn/google_containers/metrics-server-amd64:v0.3.6便于国内环境拉取镜像 tag v0.3.6 与 00.组件版本和配置策略.md 中规划的 metrics-server 版本一致--metric-resolution30s从 kubelet 采集数据的周期metrics 聚合分辨率默认值为 60s设置为 30s 可以更快反映节点与 Pod 的资源变化--kubelet-preferred-address-typesInternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP优先使用InternalIP访问 kubelet避免节点名称没有 DNS 解析记录时通过节点名称调用节点 kubelet API 失败这是未配置该参数时的默认情况。本项目集群节点名称为zhangjun-k8s-01/02/03若环境中未配置对应的 DNS 解析就必须通过该参数让 metrics-server 改用 InternalIP 直连。3. 部署 metrics-server$ cd /opt/k8s/work/metrics-server/deploy/1.8/ $ kubectl create -f .kubectl create -f .会创建该目录下的全部清单对象包括 Deployment、Service、ClusterRole/ClusterRoleBinding 等 RBAC 规则赋予 metrics-server 读取节点状态和调用 kubelet API 的权限。查看运行情况$ kubectl -n kube-system get all -l k8s-appmetrics-server NAME READY STATUS RESTARTS AGE pod/metrics-server-77df59848f-sjjbd 1/1 Running 0 18s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/metrics-server 1/1 1 1 19s NAME DESIRED CURRENT READY AGE replicaset.apps/metrics-server-77df59848f 1 1 1 19sPod 达到1/1 Running即部署成功。若 Pod 处于 CrashLoopBackOff优先检查上一节的三个参数镜像是否能拉取、--kubelet-preferred-address-types是否导致解析失败可用kubectl -n kube-system logs pod查看日志确认。查看 metrics-server 输出的 metricsmetrics-server 聚合后的数据通过metrics.k8s.io/v1beta1API 暴露。可以直接使用kubectl get --raw读取原始 JSON并用 jq 美化输出kubectl get --raw https://172.27.138.251:6443/apis/metrics.k8s.io/v1beta1/nodes | jq . kubectl get --raw https://172.27.138.251:6443/apis/metrics.k8s.io/v1beta1/pods | jq . kubectl get --raw https://172.27.138.251:6443/apis/metrics.k8s.io/v1beta1/nodes/node-name | jq . kubectl get --raw https://172.27.138.251:6443/apis/metrics.k8s.io/v1beta1/namespace/namespace-name/pods/pod-name | jq .要点将xxx替换为实际内容例如node-name替换为zhangjun-k8s-01/apis/metrics.k8s.io/v1beta1/nodes与/apis/metrics.k8s.io/v1beta1/pods返回的usage字段中包含 CPU 和 Memory 两类指标对应 06-4.kubelet.md 中描述的 kubelet 内嵌 cadvisor 所统计的节点与容器资源数据地址中的 6443 是本集群 kube-apiserver 的安全端口见 00.组件版本和配置策略.mdapiserver 关闭非安全端口 8080仅在安全端口 6443 接收 https 请求由于 metrics-server 已成功注册metrics.k8s.ioAPI这些--raw请求会被 apiserver 代理转发到 metrics-server 后端。使用 kubectl top 命令查看集群节点资源使用情况kubectl top命令从 metrics-server 获取集群节点基本的指标信息NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% zhangjun-k8s-01 177m 2% 9267Mi 58% zhangjun-k8s-02 364m 4% 10338Mi 65% zhangjun-k8s-03 185m 2% 5950Mi 37%输出中的CPU(cores)为毫核m单位CPU%为相对于节点总 CPU 的占用百分比MEMORY(bytes)为 Mi 单位的内存占用MEMORY%为相对于节点总内存的占用百分比。同样地kubectl top pods可查看各命名空间下 Pod 的指标。这些数据正是 HPAHorizontal Pod Autoscaler在计算扩缩容策略时读取metrics.k8s.ioAPI 所依赖的数据源。与 kube-prometheus 的分工与共存关系需要特别注意 metrics-server 与 kube-prometheus 的关系。本项目 08-4.kube-prometheus插件.md 明确说明kube-prometheus 中的 k8s-prometheus-adapter 使用 Prometheus 实现了metrics.k8s.io和custom.metrics.k8s.ioAPI因此部署了 kube-prometheus 的集群不需要再部署 metrics-server反之如果要单独部署 metrics-server则应参考本文对应的 C.metrics-server插件.md。换句话说metrics-server 是满足 HPA 与kubectl top需求的最小化资源指标方案而 kube-prometheus 提供的是包含 Prometheus、Grafana、Alertmanager、node-exporter、kube-state-metrics 在内的完整监控体系。生产环境可按需二选一或以后者为监控底座、前者为轻量资源指标出口。关键参数速查参数取值本文作用--metric-resolution30s从 kubelet 采集资源指标的周期默认 60s--kubelet-preferred-address-typesInternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIPkubelet 访问地址优先级无 DNS 解析的环境必须将 InternalIP 前置imagegcr.azk8s.cn/google_containers/metrics-server-amd64:v0.3.6国内可拉取的镜像源版本与项目规划一致深入原理metrics-server 如何安全地访问 kubeletmetrics-server 能采集到数据依赖本集群 kubelet 的安全配置。在 06-4.kubelet.md 中kubelet 通过KubeletConfiguration关闭了只读端口readOnlyPort: 0仅在安全端口 10250 接收 https 请求并配置authentication.anonymous.enabled: false、authentication.x509.clientCAFile与authentication.webhook.enabled: true拒绝匿名访问metrics-server 作为集群内部组件其 Deployment 清单中的 ServiceAccount 与 RBAC ClusterRoleBinding 使其获得调用 kubelet/metrics等端点的合法身份从而完成 HTTPS 数据采集。若集群配置了节点级网络策略还需保证 kube-apiserver 所在节点到各节点 10250 端口的路由可达本项目集群网络由 calico 插件提供详见 06-6.calico.md。参考指标链路与 kubelet API 认证授权本文档对应仓库 C.metrics-server插件.md以及 kubelet 侧的 06-4.kubelet.mdmetrics-server 与 kube-prometheus 的关系见 08-4.kube-prometheus插件.md组件版本选型与安全策略见 00.组件版本和配置策略.md集群环境变量节点 IP、主机名、CIDR 等见 manifests/environment.shmetrics-server RBAC 与参数解析的社区讨论kube-apiserver 安全端口访问方式参考 A.浏览器访问kube-apiserver安全端口.md赞分享文档教程云原生【免费下载链接】follow-me-install-kubernetes-cluster和我一步步部署 kubernetes 集群项目地址https://gitcode.com/gh_mirrors/fo/follow-me-install-kubernetes-cluster点击查看免费下载相关推荐ZeroTermuxAndroid上的全能Linux终端模拟器深度解析ZeroTermuxAndroid上的全能Linux终端模拟器深度解析 ZeroTermux是一款基于Termux二次开发的Android终端模拟器为移动设移动开发开发工具Kubernetes Metrics Server 终极指南掌握 kubectl top 命令实战应用Kubernetes Metrics Server 终极指南掌握 kubectl top 命令实战应用 Kubernetes Metrics Server 是云原生后端容器编排弹性伸缩kube-state-metrics Helm Chart 部署与配置完全指南Kubernetes 集群指标采集实战kube state metrics Helm Chart 部署与配置完全指南Kubernetes 集群指标采集实战 本指南以 Friend 仓库内嵌的 ku人工智能AI 应用语音移动开发后端桌面应用智能硬件MCP 服务上一篇终极MapleStory游戏编辑器如何用Harepacker-resurrected打造你的专属冒险世界下一篇React Native Skia 中 Vertices 组件详解顶点绘制、纹理映射与索引三角形的完整实践创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表