国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Kubernetes 筆記(17)— 系統(tǒng)監(jiān)控、使用Metrics Server、hpa 自動伸縮 Pod 數(shù)量、Prometheus 的使用

這篇具有很好參考價值的文章主要介紹了Kubernetes 筆記(17)— 系統(tǒng)監(jiān)控、使用Metrics Server、hpa 自動伸縮 Pod 數(shù)量、Prometheus 的使用。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1. Metrics Server

如果你對 Linux 系統(tǒng)有所了解的話,也許知道有一個命令 top 能夠?qū)崟r顯示當前系統(tǒng)的 CPU 和內(nèi)存利用率,它是性能分析和調(diào)優(yōu)的基本工具,非常有用。Kubernetes 也提供了類似的命令,就是 kubectl top,不過默認情況下這個命令不會生效,必須要安裝一個插件 Metrics Server 才可以。

Metrics Server 是一個專門用來收集 Kubernetes 核心資源指標(metrics)的工具,它定時從所有節(jié)點的 kubelet 里采集信息,但是對集群的整體性能影響極小,每個節(jié)點只大約會占用 1m 的 CPU 和 2MB 的內(nèi)存,所以性價比非常高。

下面的這張圖來自 Kubernetes 官網(wǎng),你可以對 Metrics Server的工作方式有個大概了解:它調(diào)用 kubeletAPI 拿到節(jié)點和 Pod 的指標,再把這些信息交給 apiserver,這樣 kubectl、HPA 就可以利用 apiserver 來讀取指標了:
image.png
Metrics Server 的項目網(wǎng)址( https://github.com/kubernetes-sigs/metrics-server)可以看到它的說明文檔和安裝步驟,不過如果你已經(jīng)用 kubeadm 搭建了 Kubernetes 集群,就已經(jīng)具備了全部前提條件,接下來只需要幾個簡單的操作就可以完成安裝。

Metrics Server 的所有依賴都放在了一個 YAML 描述文件里,你可以使用 wget 或者 curl 下載:


wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

但是在 kubectl apply 創(chuàng)建對象之前,我們還有兩個準備工作要做。

第一個工作,是修改 YAML 文件。你需要在 Metrics ServerDeployment 對象里,加上一個額外的運行參數(shù) --kubelet-insecure-tls ,也就是這樣:


apiVersion: apps/v1
kind: Deployment
metadata:
  name: metrics-server
  namespace: kube-system
spec:
  ... ... 
  template:
    spec:
      containers:
      - args:
        - --kubelet-insecure-tls
        ... ... 

這是因為 Metrics Server 默認使用 TLS 協(xié)議,要驗證證書才能與 kubelet 實現(xiàn)安全通信,而我們的實驗環(huán)境里沒有這個必要,加上這個參數(shù)可以讓我們的部署工作簡單很多(生產(chǎn)環(huán)境里就要慎用)。

第二個工作,是預先下載 Metrics Server 的鏡像??催@個 YAML 文件,你會發(fā)現(xiàn) Metrics Server 的鏡像倉庫用的是 gcr.io下載很困難。好在它也有國內(nèi)的鏡像網(wǎng)站,下載后再改名,然后把鏡像加載到集群里的節(jié)點上。

給出一段 Shell 腳本代碼,供你參考:


repo=registry.aliyuncs.com/google_containers

name=registry.k8s.io/metrics-server/metrics-server:v0.6.3
src_name=metrics-server:v0.6.3

docker pull $repo/$src_name

docker tag $repo/$src_name $name
docker rmi $repo/$src_name

兩個準備工作都完成之后,我們就可以使用 YAML 部署 Metrics Server 了:


kubectl apply -f components.yaml

Metrics Server 屬于名字空間 kube-system,可以用 kubectl get pod 加上 -n 參數(shù)查看它是否正常運行:
Kubernetes 筆記(17)— 系統(tǒng)監(jiān)控、使用Metrics Server、hpa 自動伸縮 Pod 數(shù)量、Prometheus 的使用

現(xiàn)在有了 Metrics Server 插件,我們就可以使用命令 kubectl top 來查看 Kubernetes 集群當前的資源狀態(tài)了。它有兩個子命令,node 查看節(jié)點的資源使用率,pod 查看 Pod 的資源使用率。

由于 Metrics Server 收集信息需要時間,我們必須等一小會兒才能執(zhí)行命令,查看集群里節(jié)點和 Pod 狀態(tài):


kubectl top node
kubectl top pod -n kube-system

Kubernetes 筆記(17)— 系統(tǒng)監(jiān)控、使用Metrics Server、hpa 自動伸縮 Pod 數(shù)量、Prometheus 的使用

從這個截圖里你可以看到:

  • 集群里兩個節(jié)點 CPU 使用率都不高,分別是 3% 和 1%,但內(nèi)存用的很多,master 節(jié)點用了差不多一半(40%),而 worker 節(jié)點用滿(27%)。
  • 名字空間 kube-system里有很多 Pod,其中 apiserver 最消耗資源,使用了 25m 的 CPU 和 259MB 的內(nèi)存。

2. HorizontalPodAutoscaler

有了 Metrics Server,我們就可以輕松地查看集群的資源使用狀況了,不過它另外一個更重要的功能是輔助實現(xiàn)應用的“水平自動伸縮”。

之前我們提到有一個命令 kubectl scale,可以任意增減 Deployment 部署的 Pod 數(shù)量,也就是水平方向的“擴容”和“縮容”。但是手動調(diào)整應用實例數(shù)量還是比較麻煩的,需要人工參與,也很難準確把握時機,難以及時應對生產(chǎn)環(huán)境中突發(fā)的大流量,所以最好能把這個“擴容”“縮容”也變成自動化的操作。

Kubernetes 為此就定義了一個新的 API 對象,叫做 HorizontalPodAutoscaler,簡稱是 hpa。顧名思義,它是專門用來自動伸縮 Pod 數(shù)量的對象,適用于 DeploymentStatefulSet,但不能用于 DaemonSet(原因很明顯吧)。

HorizontalPodAutoscaler 的能力完全基于 Metrics Server,它從 Metrics Server 獲取當前應用的運行指標,主要是 CPU 使用率,再依據(jù)預定的策略增加或者減少 Pod 的數(shù)量。

下面我們就來看看該怎么使用 HorizontalPodAutoscaler,首先要定義 DeploymentService,創(chuàng)建一個 Nginx 應用,作為自動伸縮的目標對象:

# ngx-hpa-dep.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ngx-hpa-dep

spec:
  replicas: 1
  selector:
    matchLabels:
      app: ngx-hpa-dep

  template:
    metadata:
      labels:
        app: ngx-hpa-dep
    spec:
      containers:
      - image: nginx:alpine
        name: nginx
        ports:
        - containerPort: 80

        resources:
          requests:
            cpu: 50m
            memory: 10Mi
          limits:
            cpu: 100m
            memory: 20Mi
---

apiVersion: v1
kind: Service
metadata:
  name: ngx-hpa-svc
spec:
  ports:
  - port: 80	
    protocol: TCP
    targetPort: 80
  selector:
    app: ngx-hpa-dep

在這個 YAML 里只部署了一個 Nginx 實例,名字是 ngx-hpa-dep。

注意在它的 spec 里一定要用 resources 字段寫清楚資源配額,否則 HorizontalPodAutoscaler 會無法獲取 Pod 的指標,也就無法實現(xiàn)自動化擴縮容。

kubectl apply  -f ngx-hpa-dep.yml

接下來我們要用命令 kubectl autoscale 創(chuàng)建一個 HorizontalPodAutoscaler 的樣板 YAML 文件,它有三個參數(shù):

  • minPod 數(shù)量的最小值,也就是縮容的下限。
  • maxPod 數(shù)量的最大值,也就是擴容的上限。
  • cpu-percentCPU 使用率指標,當大于這個值時擴容,小于這個值時縮容。

好,現(xiàn)在我們就來為剛才的 Nginx 應用創(chuàng)建 HorizontalPodAutoscaler,指定 Pod 數(shù)量最少 2 個,最多 10 個,CPU 使用率指標設置的小一點,5%,方便我們觀察擴容現(xiàn)象:


export out="--dry-run=client -o yaml"              # 定義Shell變量
kubectl autoscale deploy ngx-hpa-dep --min=2 --max=10 --cpu-percent=5 $out

得到的 YAML 描述文件就是這樣:

# ngx-hpa.yml

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: ngx-hpa

spec:
  maxReplicas: 10
  minReplicas: 2
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: ngx-hpa-dep
  targetCPUUtilizationPercentage: 5

我們再使用命令 kubectl apply 創(chuàng)建這個 HorizontalPodAutoscaler 后,它會發(fā)現(xiàn) Deployment 里的實例只有 1 個,不符合 min 定義的下限的要求,就先擴容到 2 個:

Kubernetes 筆記(17)— 系統(tǒng)監(jiān)控、使用Metrics Server、hpa 自動伸縮 Pod 數(shù)量、Prometheus 的使用

Kubernetes 筆記(17)— 系統(tǒng)監(jiān)控、使用Metrics Server、hpa 自動伸縮 Pod 數(shù)量、Prometheus 的使用

從這張截圖里你可以看到,HorizontalPodAutoscaler 會根據(jù) YAML 里的描述,找到要管理的 Deployment,把 Pod 數(shù)量調(diào)整成 2 個,再通過 Metrics Server 不斷地監(jiān)測 PodCPU 使用率。

下面我們來給 Nginx 加上壓力流量,運行一個測試 Pod,使用的鏡像是“httpd:alpine”,它里面有 HTTP 性能測試工具 ab(Apache Bench):


kubectl run test -it --image=httpd:alpine -- sh

Kubernetes 筆記(17)— 系統(tǒng)監(jiān)控、使用Metrics Server、hpa 自動伸縮 Pod 數(shù)量、Prometheus 的使用

然后我們向 Nginx 發(fā)送一百萬個請求,持續(xù) 1 分鐘,再用 kubectl get hpa 來觀察 HorizontalPodAutoscaler 的運行狀況:


ab -c 10 -t 60 -n 1000000 'http://ngx-hpa-svc/'

Kubernetes 筆記(17)— 系統(tǒng)監(jiān)控、使用Metrics Server、hpa 自動伸縮 Pod 數(shù)量、Prometheus 的使用

因為 Metrics Server 大約每 15 秒采集一次數(shù)據(jù),所以 HorizontalPodAutoscaler 的自動化擴容和縮容也是按照這個時間點來逐步處理的。

當它發(fā)現(xiàn)目標的 CPU 使用率超過了預定的 5% 后,就會以 2 的倍數(shù)開始擴容,一直到數(shù)量上限,然后持續(xù)監(jiān)控一段時間,如果 CPU 使用率回落,就會再縮容到最小值。

3. Prometheus

顯然,有了 Metrics ServerHorizontalPodAutoscaler 的幫助,我們的應用管理工作又輕松了一些。不過,Metrics Server 能夠獲取的指標還是太少了,只有 CPU 和內(nèi)存,想要監(jiān)控到更多更全面的應用運行狀況,還得請出這方面的權威項目 Prometheus

下面的這張圖是 Prometheus 官方的架構圖,
image.png
Prometheus 系統(tǒng)的核心是它的 Server,里面有一個時序數(shù)據(jù)庫 TSDB,用來存儲監(jiān)控數(shù)據(jù),另一個組件 Retrieval 使用拉?。?code>Pull)的方式從各個目標收集數(shù)據(jù),再通過 HTTP Server 把這些數(shù)據(jù)交給外界使用。

Prometheus Server 之外還有三個重要的組件:

  • Push Gateway,用來適配一些特殊的監(jiān)控目標,把默認的 Pull 模式轉變?yōu)?Push 模式。
  • Alert Manager,告警中心,預先設定規(guī)則,發(fā)現(xiàn)問題時就通過郵件等方式告警。
  • Grafana 是圖形化界面,可以定制大量直觀的監(jiān)控儀表盤。

由于同屬于 CNCF,所以 Prometheus 自然就是“云原生”,在 Kubernetes 里運行是順理成章的事情。不過它包含的組件實在是太多,部署起來有點麻煩,這里我選用了 kube-prometheus項目(https://github.com/prometheus-operator/kube-prometheus/),感覺操作起來比較容易些。

我們先要下載 kube-prometheus 的源碼包,當前的最新版本是 0.11:


wget https://github.com/prometheus-operator/kube-prometheus/archive/refs/tags/v0.11.0.tar.gz

解壓縮后,Prometheus 部署相關的 YAML 文件都在 manifests 目錄里,有近 100 個,你可以先大概看一下。

Metrics Server 一樣,我們也必須要做一些準備工作,才能夠安裝 Prometheus。

第一步,是修改 prometheus-service.yaml、grafana-service.yaml。
這兩個文件定義了 Prometheus 和 Grafana 服務對象,我們可以給它們添加 type: NodePort(參考第 20 講),這樣就可以直接通過節(jié)點的 IP 地址訪問(當然你也可以配置成 Ingress)。

第二步,是修改 kubeStateMetrics-deployment.yaml、prometheusAdapter-deployment.yaml,因為它們里面有兩個存放在 gcr.io 的鏡像,必須解決下載鏡像的問題。

但很遺憾,我沒有在國內(nèi)網(wǎng)站上找到它們的下載方式,為了能夠順利安裝,只能把它們下載后再上傳到 Docker Hub 上。所以你需要修改鏡像名字,把前綴都改成 chronolaw:


image: k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.5.0
image: k8s.gcr.io/prometheus-adapter/prometheus-adapter:v0.9.1

image: chronolaw/kube-state-metrics:v2.5.0
image: chronolaw/prometheus-adapter:v0.9.1

這兩個準備工作完成之后,我們要執(zhí)行兩個 kubectl create 命令來部署 Prometheus,先是 manifests/setup 目錄,創(chuàng)建名字空間等基本對象,然后才是 manifests 目錄:


kubectl create -f manifests/setup
kubectl create -f manifests

Prometheus 的對象都在名字空間 monitoring里,創(chuàng)建之后可以用 kubectl get 來查看狀態(tài):
image.png
確定這些 Pod 都運行正常,我們再來看看它對外的服務端口:


kubectl get svc -n monitoring

image.png

前面修改了 Grafana 和 Prometheus 的 Service 對象,所以這兩個服務就在節(jié)點上開了端口,Grafana 是“30358”,Prometheus 有兩個端口,其中“9090”對應的“30827”是 Web 端口。
在瀏覽器里輸入節(jié)點的 IP 地址(我這里是“http://192.168.10.210”),再加上端口號“30827”,我們就能看到 Prometheus 自帶的 Web 界面,:
image.png
Web 界面上有一個查詢框,可以使用 PromQL 來查詢指標,生成可視化圖表,比如在這個截圖里我就選擇了“node_memory_Active_bytes”這個指標,意思是當前正在使用的內(nèi)存容量。

Prometheus 的 Web 界面比較簡單,通常只用來調(diào)試、測試,不適合實際監(jiān)控。我們再來看 Grafana,訪問節(jié)點的端口“30358”(我這里是“http://192.168.10.210:30358”),它會要求你先登錄,默認的用戶名和密碼都是“admin”:
image.pngGrafana 內(nèi)部已經(jīng)預置了很多強大易用的儀表盤,你可以在左側菜單欄的“Dashboards - Browse”里任意挑選一個:
image.png
比如我選擇了“Kubernetes / Compute Resources / Namespace (Pods)”這個儀表盤,就會出來一個非常漂亮圖表,比 Metrics Server 的 kubectl top 命令要好看得多,各種數(shù)據(jù)一目了然:
image.png

4. 總結

  1. Metrics Server 是一個 Kubernetes 插件,能夠收集系統(tǒng)的核心資源指標,相關的命令是 kubectl top。
  2. Prometheus 是云原生監(jiān)控領域的“事實標準”,用 PromQL 語言來查詢數(shù)據(jù),配合 Grafana 可以展示直觀的圖形界面,方便監(jiān)控。
  3. HorizontalPodAutoscaler 實現(xiàn)了應用的自動水平伸縮功能,它從 Metrics Server 獲取應用的運行指標,再實時調(diào)整 Pod 數(shù)量,可以很好地應對突發(fā)流量。

Metrics Server 早期的數(shù)據(jù)來源是 cAdvisor,它是一個獨立的應用程序,后來被精簡集成進了 kubelet。

當前的 HorizontalPodAutoscaler 版本是 v2,除了支持 CPU 指標外也支持自定義指標,還有更多的可調(diào)節(jié)參數(shù),但命令 kubectl autoscale 創(chuàng)建的樣板 yaml 默認用的是 v1。

通常來說運行 Grafana 要預先定于數(shù)據(jù)源,指定 Prometheus 地址,但 kube-prometheus 已經(jīng)把這些都配置好了,我們可以直接開箱即用。

Grafana 官網(wǎng)上有很多定義好的儀表盤,是一個類似 GitHub、DockerHub 的社區(qū),可以任意下載,只需要輸入數(shù)字編號就可以把儀表盤導入到本地。文章來源地址http://www.zghlxwxcb.cn/news/detail-429794.html

到了這里,關于Kubernetes 筆記(17)— 系統(tǒng)監(jiān)控、使用Metrics Server、hpa 自動伸縮 Pod 數(shù)量、Prometheus 的使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 24-k8s的附件組件-Metrics-server組件與hpa資源pod水平伸縮

    24-k8s的附件組件-Metrics-server組件與hpa資源pod水平伸縮

    ? ? ? ? Metrics-Server組件目的:獲取集群中pod、節(jié)點等負載信息; ? ? ? ? hpa資源目的:通過metrics-server獲取的pod負載信息,自動伸縮創(chuàng)建pod; 參考鏈接: 資源指標管道 | Kubernetes https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/metrics-server GitHub - kubernetes-sigs/metrics-server:

    2024年02月21日
    瀏覽(26)
  • [kubernetes]安裝metrics-server

    metrics server為Kubernetes自動伸縮提供一個容器資源度量源。metrics-server 從 kubelet 中獲取資源指標,并通過 Metrics API 在 Kubernetes API 服務器中公開它們,以供 HPA 和 VPA 使用。 之前已經(jīng)用k8s的二進制文件搭建了一套集群環(huán)境,搭建步驟見:二進制部署k8s集群-基于containerd?,F(xiàn)需要在

    2024年02月10日
    瀏覽(22)
  • k8s筆記24--安裝metrics-server及錯誤處理

    最近一個同事在老版本的 k8s 上安裝metrics-server,pod一直處于running 非就緒狀態(tài),經(jīng)過查看發(fā)現(xiàn)存在 tls 、軟件版本、 資源權限等問題。記錄在此處,以便于后續(xù)查閱、同類問題續(xù)更。 參考官方文檔 kubernetes-sigs/metrics-server 執(zhí)行如下命令即可 注意事項: 如果需要忽略 Kubelet c

    2024年02月11日
    瀏覽(33)
  • k8s--基礎--26.6--監(jiān)控告警系統(tǒng)--kube-state-metrics

    k8s--基礎--26.6--監(jiān)控告警系統(tǒng)--kube-state-metrics

    kube-state-metrics 會監(jiān)聽API Server生成有關資源對象的狀態(tài)指標,比如Deployment、Node、Pod。 kube-state-metrics只是簡單的提供一個metrics數(shù)據(jù),并不會存儲這些指標數(shù)據(jù),我們可以使用Prometheus來抓取這些數(shù)據(jù)然后存儲。 指標數(shù)據(jù) Deployment、Pod、副本狀態(tài)等 調(diào)度了多少個replicas 現(xiàn)在可用

    2023年04月08日
    瀏覽(25)
  • prometheus使用missing-container-metrics監(jiān)控pod

    prometheus使用missing-container-metrics監(jiān)控pod

    Kubernetes 默認情況下使用 cAdvisor 來收集容器的各項指標,足以滿足大多數(shù)人的需求,但還是有所欠缺,比如缺少對以下幾個指標的收集: OOM kill 容器重啟的次數(shù) 容器的退出碼 missing-container-metrics 這個項目彌補了 cAdvisor 的缺陷,新增了以上幾個指標,集群管理員可以利用這些

    2024年02月08日
    瀏覽(21)
  • Kubernetes學習筆記-計算資源管理(4)監(jiān)控pod的資源使用量20230219

    前面學了設置資源的requests和limits,這節(jié)課學習如何監(jiān)控資源,根據(jù)監(jiān)控資源使用情況,對requests和limits進行合理配置。 kubelet包含一個agent,名為cAdvisor,它會收集整個節(jié)點上運行的所有單獨容器的資源消耗情況,這些信息可以通過一個附加組件Heapster來集中統(tǒng)計整個集群的監(jiān)

    2024年02月05日
    瀏覽(15)
  • 【k8s】:部署、使用 metrics-server

    【k8s】:部署、使用 metrics-server

    ??The Begin??點點關注,收藏不迷路?? 基于Kubernetes 集群,并已經(jīng)安裝并配置好 kubectl 工具。 Metrics Server 可以幫助我們監(jiān)控集群中節(jié)點和容器的資源使用情況。 在本篇 CSDN 博客中,我將詳細介紹如何部署 Metrics Server 到 Kubernetes 集群中。 工作流程說明: 1、用戶執(zhí)行 kubectl

    2024年04月16日
    瀏覽(21)
  • 17.HPA和rancher

    17.HPA和rancher

    HPA(Horizontal Pod Autoscaling)Pod 水平自動伸縮,Kubernetes 有一個 HPA 的資源,HPA 可以根據(jù) CPU 利用率自動伸縮一個 Replication Controller、 Deployment 或者Replica Set 中的 Pod 數(shù)量。 HPA 基于 Master 上的 kube-controller-manager 服務啟動參數(shù) horizontal-pod-autoscaler-sync-period 定義的時長(默認為30秒)

    2024年02月12日
    瀏覽(23)
  • k8s(1.28)使用Helm安裝metrics-server

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 提示:這里可以添加本文要記錄的大概內(nèi)容: metrics-server安裝后,可以查看集群的node和pod的CPU和Memory占用情況,非常有用。 提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 官網(wǎng)地址:https://github

    2024年02月19日
    瀏覽(42)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包