使用 Kube-capacity CLI 檢視 Kubernetes 資源請求、限制和利用率

語言: CN / TW / HK

C T O

   

 

Go Rust Python Istio containerd CoreDNS Envoy etcd Fluentd Harbor Helm Jaeger Kubernetes Open Policy Agent Prometheus Rook TiKV TUF Vitess Arg o Buildpacks CloudEvents CNI Contour Cortex CRI-O Falco Flux gRPC KubeEdge Linkerd NATS Notary OpenTracing Operator  Framework SPIFFE SPIRE     Thanos

使用 Kube-capacity CLI 檢視 Kubernetes 資源請求、限制和利用率

Kube-capacity 是一個簡單而強大的 CLI ,它提供了 Kubernetes 叢集中資源請求、限制和利用率的概覽。它將輸出的最佳部分結合 kubectl top kubectl describe 一個易於使用的集中於叢集資源的 CLI 中。

不過像這樣的工具確實好用一些,比如我想看這個 kube-system 下有哪些 pod 有沒有設定 request limit 的時候,實際上,我需要輸入一段很長的命令才能列出,而且需要一些除錯,這看起來不是特別方便

# kubectl get pod -n kube-system  -o=custom-columns=NAME:.metadata.name,NAMESPACE:.metadata.namespace,PHASE:.status.phase,Request-cpu:.spec.containers\[0\].resources.requests.cpu,Request-memory:.spec.containers\[0\].resources.requests.memory,Limit-cpu:.spec.containers\[0\].resources.limits.cpu,Limit-memory:.spec.containers\[0\].resources.limits.memory
NAME                                       NAMESPACE     PHASE     Request-cpu   Request-memory   Limit-cpu   Limit-memory
calico-kube-controllers-7d4c6544cc-g6x6q   kube-system   Running   <none>        <none>           <none>      <none>
calico-node-4fjn8                          kube-system   Running   250m          <none>           <none>      <none>
calico-node-7nbpj                          kube-system   Running   250m          <none>           <none>      <none>
calico-node-qvdlr                          kube-system   Running   250m          <none>           <none>      <none>
coredns-7977f69688-4nz9q                   kube-system   Running   100m          70Mi             <none>      170Mi
coredns-7977f69688-frkt5                   kube-system   Running   100m          70Mi             <none>      170Mi
etcd-k8s-master1                           kube-system   Running   100m          100Mi            <none>      <none>
etcd-k8s-master2                           kube-system   Running   100m          100Mi            <none>      <none>
etcd-k8s-master3                           kube-system   Running   100m          100Mi            <none>      <none>
kube-apiserver-k8s-master1                 kube-system   Running   250m          <none>           <none>      <none>

那麼這個工具實際上解決的問題就是幫助我們快速檢視概覽整個叢集和 pod 的資源配置情況

安裝

Go 二進位制檔案由 GoReleaser 隨每個版本自動構建。這些可以在此專案的 GitHub 釋出頁面上訪問。

https://github.com/goreleaser/goreleaser
https://github.com/robscott/kube-capacity/releases

Homebrew

這個專案可以用 Homebrew 安裝:

brew tap robscott/tap
brew install robscott/tap/kube-capacity

Krew

這個專案可以用 Krew 安裝:

kubectl krew install resource-capacity

用法

預設情況下, kube-capacity 將輸出一個節點列表,其中包含 CPU 和記憶體資源請求的總數以及在它們上執行的所有 pod 的限制。對於具有多個節點的叢集,第一行還將包括叢集範圍的總數。該輸出將如下所示:

包括 Pod

對於更詳細的輸出, kube-capacity 可以在輸出中包含 pod 。當 -p --pods 被傳遞給 kube-capacity 時,它將包含如下所示的特定於 pod 的輸出

包括利用率

為了幫助瞭解資源利用率與配置的請求和限制的比較, kube-capacity 可以在輸出中包含利用率指標。請務必注意,此輸出依賴於叢集中的 metrics-server 正常執行。當 -u --util 被傳遞給 kube-capacity 時,它將包含如下所示的資源利用率資訊:

包括 Pod 和利用率

對於更詳細的輸出, kube-capacity 可以在輸出中包含 pod 和資源利用率。當 --util --pods 傳遞給 kube-capacity 時,它將產生如下所示的寬輸出:

值得注意的是,來自 pod 的利用率數字可能不會與總節點利用率相加。與節點和叢集級別數字代表 pod 值總和的請求和限制數字不同,節點指標直接來自指標伺服器,並且可能包括其他形式的資源利用率。

排序

要突出顯示具有最高指標的節點、 pod 和容器,您可以按各種列進行排序:

顯示 Pod 計數

要顯示每個節點和整個叢集的 pod 數量,可以通過 --pod-count 引數:

按標籤過濾

對於更高階的使用, kube-capacity 還支援按 pod 、名稱空間和/或節點標籤進行過濾。以下示例展示瞭如何使用這些過濾器:

kube-capacity --pod-labels app=nginx 
kube-capacity --namespace 預設
kube-capacity --namespace-labels team=api 
kube-capacity --node-labels kubernetes.io/role=node

JSON 和 YAML 輸出

預設情況下, kube-capacity 將以表格格式提供輸出。要以 JSON YAML 格式檢視此資料,可以使用輸出標誌。以下是一些示例命令:

kube-capacity --pods --output json
kube-capacity --pods --containers --util --output yaml

支援的標誌

先決條件

任何請求叢集利用率的命令都依賴於叢集上執行的 metrics-server 。如果尚未安裝,您可以使用官方 helm chart 進行安裝。

https://github.com/helm/charts/tree/master/stable/metrics-server
https://github.com/kubernetes-incubator/metrics-server