
文檔教程云原生【免費下載鏈接】follow-me-install-kubernetes-cluster和我一步步部署 kubernetes 集群項目地址https://gitcode.com/gh_mirrors/fo/follow-me-install-kubernetes-cluster點擊查看免費下載metrics-server 是 Kubernetes 資源指標Resource Metrics的標準實現(xiàn)它以 kube-apiserver 為入口發(fā)現(xiàn)集群中的 Node 與 Pod通過 HTTPS 調用各節(jié)點 kubelet 的 API底層由內(nèi)嵌的 cadvisor 提供數(shù)據(jù)聚合出 CPU、內(nèi)存等核心使用指標。本文以「和我一步步部署 kubernetes 集群」項目Kubernetes v1.16.6三節(jié)點集群 zhangjun-k8s-01/02/03為背景完整演示 metrics-server v0.3.6 的部署過程、關鍵參數(shù)調優(yōu)、metrics.k8s.io API 原始輸出驗證與 kubectl top 的使用方法并解釋它與 kube-prometheus 中 k8s-prometheus-adapter 的分工關系。讀完本文你將掌握資源指標鏈路的工作原理并能在自己的集群中獨立完成 metrics-server 的安裝與排障。為什么需要 metrics-serverHeapster 退役后的指標方案metrics-server 通過 kube-apiserver 發(fā)現(xiàn)集群內(nèi)所有節(jié)點然后調用各節(jié)點的 kubelet APIsHTTPS 接口獲得 Node 和 Pod 的 CPU、Memory 等資源使用情況。它聚合后的數(shù)據(jù)通過metrics.k8s.ioAPI 對外暴露成為kubectl top與水平自動擴縮容HPA的數(shù)據(jù)來源。從 Kubernetes 1.12 開始kubernetes 的安裝腳本移除了 Heapster從 1.13 開始完全移除了對 Heapster 的支持Heapster 不再被維護。其能力被拆分為三類替代方案用于支持自動擴縮容的 CPU/memory HPA 指標metrics-server提供metrics.k8s.io資源指標 API通用監(jiān)控方案使用第三方可以獲取 Prometheus 格式監(jiān)控指標的監(jiān)控系統(tǒng)如 Prometheus Operator本項目對應 08-4.kube-prometheus插件.md事件傳輸使用第三方工具來傳輸、歸檔 kubernetes events。本項目在 00.組件版本和配置策略.md 中明確將 metrics-server0.3.62019-10-15 發(fā)布列為集群 Metric 插件的選型并約定「使用 https 訪問 kubelet 安全端口」——這與本倉庫集群的嚴格安全基線完全一致kubelet 關閉了非安全 http 端口只保留 10250 安全端口接收 https 請求。未安裝 metrics-server 時的表現(xiàn)沒有安裝 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 對應的服務取數(shù)但集群中并不存在該資源。安裝 metrics-server 后kubectl top會改從metrics.k8s.ioAPI 獲取數(shù)據(jù)。安裝 metrics-server1. 克隆源碼并進入部署目錄在部署機上本項目所有操作均在 zhangjun-k8s-01 節(jié)點執(zhí)行環(huán)境變量定義見 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 清單添加關鍵啟動參數(shù)修改metrics-server-deployment.yaml文件為 metrics-server 添加三個命令行參數(shù)。先備份原文件再做差異對比$ 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便于國內(nèi)環(huán)境拉取鏡像 tag v0.3.6 與 00.組件版本和配置策略.md 中規(guī)劃的 metrics-server 版本一致--metric-resolution30s從 kubelet 采集數(shù)據(jù)的周期metrics 聚合分辨率默認值為 60s設置為 30s 可以更快反映節(jié)點與 Pod 的資源變化--kubelet-preferred-address-typesInternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP優(yōu)先使用InternalIP訪問 kubelet避免節(jié)點名稱沒有 DNS 解析記錄時通過節(jié)點名稱調用節(jié)點 kubelet API 失敗這是未配置該參數(shù)時的默認情況。本項目集群節(jié)點名稱為zhangjun-k8s-01/02/03若環(huán)境中未配置對應的 DNS 解析就必須通過該參數(shù)讓 metrics-server 改用 InternalIP 直連。3. 部署 metrics-server$ cd /opt/k8s/work/metrics-server/deploy/1.8/ $ kubectl create -f .kubectl create -f .會創(chuàng)建該目錄下的全部清單對象包括 Deployment、Service、ClusterRole/ClusterRoleBinding 等 RBAC 規(guī)則賦予 metrics-server 讀取節(jié)點狀態(tài)和調用 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優(yōu)先檢查上一節(jié)的三個參數(shù)鏡像是否能拉取、--kubelet-preferred-address-types是否導致解析失敗可用kubectl -n kube-system logs pod查看日志確認。查看 metrics-server 輸出的 metricsmetrics-server 聚合后的數(shù)據(jù)通過metrics.k8s.io/v1beta1API 暴露??梢灾苯邮褂胟ubectl 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替換為實際內(nèi)容例如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 內(nèi)嵌 cadvisor 所統(tǒng)計的節(jié)點與容器資源數(shù)據(jù)地址中的 6443 是本集群 kube-apiserver 的安全端口見 00.組件版本和配置策略.mdapiserver 關閉非安全端口 8080僅在安全端口 6443 接收 https 請求由于 metrics-server 已成功注冊metrics.k8s.ioAPI這些--raw請求會被 apiserver 代理轉發(fā)到 metrics-server 后端。使用 kubectl top 命令查看集群節(jié)點資源使用情況kubectl top命令從 metrics-server 獲取集群節(jié)點基本的指標信息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%為相對于節(jié)點總 CPU 的占用百分比MEMORY(bytes)為 Mi 單位的內(nèi)存占用MEMORY%為相對于節(jié)點總內(nèi)存的占用百分比。同樣地kubectl top pods可查看各命名空間下 Pod 的指標。這些數(shù)據(jù)正是 HPAHorizontal Pod Autoscaler在計算擴縮容策略時讀取metrics.k8s.ioAPI 所依賴的數(shù)據(jù)源。與 kube-prometheus 的分工與共存關系需要特別注意 metrics-server 與 kube-prometheus 的關系。本項目 08-4.kube-prometheus插件.md 明確說明kube-prometheus 中的 k8s-prometheus-adapter 使用 Prometheus 實現(xiàn)了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 在內(nèi)的完整監(jiān)控體系。生產(chǎn)環(huán)境可按需二選一或以后者為監(jiān)控底座、前者為輕量資源指標出口。關鍵參數(shù)速查參數(shù)取值本文作用--metric-resolution30s從 kubelet 采集資源指標的周期默認 60s--kubelet-preferred-address-typesInternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIPkubelet 訪問地址優(yōu)先級無 DNS 解析的環(huán)境必須將 InternalIP 前置imagegcr.azk8s.cn/google_containers/metrics-server-amd64:v0.3.6國內(nèi)可拉取的鏡像源版本與項目規(guī)劃一致深入原理metrics-server 如何安全地訪問 kubeletmetrics-server 能采集到數(shù)據(jù)依賴本集群 kubelet 的安全配置。在 06-4.kubelet.md 中kubelet 通過KubeletConfiguration關閉了只讀端口readOnlyPort: 0僅在安全端口 10250 接收 https 請求并配置authentication.anonymous.enabled: false、authentication.x509.clientCAFile與authentication.webhook.enabled: true拒絕匿名訪問metrics-server 作為集群內(nèi)部組件其 Deployment 清單中的 ServiceAccount 與 RBAC ClusterRoleBinding 使其獲得調用 kubelet/metrics等端點的合法身份從而完成 HTTPS 數(shù)據(jù)采集。若集群配置了節(jié)點級網(wǎng)絡策略還需保證 kube-apiserver 所在節(jié)點到各節(jié)點 10250 端口的路由可達本項目集群網(wǎng)絡由 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集群環(huán)境變量節(jié)點 IP、主機名、CIDR 等見 manifests/environment.shmetrics-server RBAC 與參數(shù)解析的社區(qū)討論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二次開發(fā)的Android終端模擬器為移動設移動開發(fā)開發(fā)工具Kubernetes Metrics Server 終極指南掌握 kubectl top 命令實戰(zhàn)應用Kubernetes Metrics Server 終極指南掌握 kubectl top 命令實戰(zhàn)應用 Kubernetes Metrics Server 是云原生后端容器編排彈性伸縮kube-state-metrics Helm Chart 部署與配置完全指南Kubernetes 集群指標采集實戰(zhàn)kube state metrics Helm Chart 部署與配置完全指南Kubernetes 集群指標采集實戰(zhàn) 本指南以 Friend 倉庫內(nèi)嵌的 ku人工智能AI 應用語音移動開發(fā)后端桌面應用智能硬件MCP 服務上一篇終極MapleStory游戲編輯器如何用Harepacker-resurrected打造你的專屬冒險世界下一篇React Native Skia 中 Vertices 組件詳解頂點繪制、紋理映射與索引三角形的完整實踐創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考