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