Kube-Capacity: 一款超實(shí)用的 Kubernetes 資源使用量終端管理工具
使用 Kube-capacity CLI 查看 Kubernetes 資源請(qǐng)求、限制和利用率。
Kube-capacity 是一個(gè)簡(jiǎn)單而強(qiáng)大的 CLI,它提供了Kubernetes集群中資源請(qǐng)求、限制和利用率的概覽。它將輸出的最佳部分結(jié)合kubectl top到kubectl describe一個(gè)易于使用的集中于集群資源的 CLI 中。
不過像這樣的工具確實(shí)好用一些,比如我想看這個(gè)kube-system下有哪些pod有沒有設(shè)置request和limit的時(shí)候,實(shí)際上,我需要輸入一段很長(zhǎng)的命令才能列出,而且需要一些調(diào)試,這看起來不是特別方便。
# 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>
那么這個(gè)工具實(shí)際上解決的問題就是幫助我們快速查看概覽整個(gè)集群和pod的資源配置情況。
安裝
Go 二進(jìn)制文件由GoReleaser隨每個(gè)版本自動(dòng)構(gòu)建。這些可以在此項(xiàng)目的 GitHub發(fā)布頁(yè)面上訪問。
- https://github.com/goreleaser/goreleaser
- https://github.com/robscott/kube-capacity/releases
Homebrew
這個(gè)項(xiàng)目可以用Homebrew安裝:
brew tap robscott/tap
brew install robscott/tap/kube-capacity
Krew
這個(gè)項(xiàng)目可以用Krew安裝:
kubectl krew install resource-capacity
用法
默認(rèn)情況下,kube-capacity 將輸出一個(gè)節(jié)點(diǎn)列表,其中包含 CPU 和內(nèi)存資源請(qǐng)求的總數(shù)以及在它們上運(yùn)行的所有 pod 的限制。對(duì)于具有多個(gè)節(jié)點(diǎn)的集群,第一行還將包括集群范圍的總數(shù)。該輸出將如下所示:
包括 Pod
對(duì)于更詳細(xì)的輸出,kube-capacity 可以在輸出中包含 pod。當(dāng)-p或--pods被傳遞給 kube-capacity 時(shí),它將包含如下所示的特定于 pod 的輸出
包括利用率
為了幫助了解資源利用率與配置的請(qǐng)求和限制的比較,kube-capacity 可以在輸出中包含利用率指標(biāo)。請(qǐng)務(wù)必注意,此輸出依賴于集群中的metrics-server正常運(yùn)行。當(dāng)-u或--util被傳遞給 kube-capacity 時(shí),它將包含如下所示的資源利用率信息:
包括 Pod 和利用率
對(duì)于更詳細(xì)的輸出,kube-capacity 可以在輸出中包含 pod 和資源利用率。當(dāng)--util和--pods傳遞給 kube-capacity 時(shí),它將產(chǎn)生如下所示的寬輸出:
值得注意的是,來自 pod 的利用率數(shù)字可能不會(huì)與總節(jié)點(diǎn)利用率相加。與節(jié)點(diǎn)和集群級(jí)別數(shù)字代表 pod 值總和的請(qǐng)求和限制數(shù)字不同,節(jié)點(diǎn)指標(biāo)直接來自指標(biāo)服務(wù)器,并且可能包括其他形式的資源利用率。
排序
要突出顯示具有最高指標(biāo)的節(jié)點(diǎn)、pod 和容器,您可以按各種列進(jìn)行排序:
顯示 Pod 計(jì)數(shù)
要顯示每個(gè)節(jié)點(diǎn)和整個(gè)集群的 pod 數(shù)量,可以通過--pod-count參數(shù):
按標(biāo)簽過濾
對(duì)于更高級(jí)的使用,kube-capacity 還支持按 pod、命名空間和/或節(jié)點(diǎn)標(biāo)簽進(jìn)行過濾。以下示例展示了如何使用這些過濾器:
kube-capacity --pod-labels app=nginx
kube-capacity --namespace 默認(rèn)
kube-capacity --namespace-labels team=api
kube-capacity --node-labels kubernetes.io/role=node
JSON 和 YAML 輸出
默認(rèn)情況下,kube-capacity 將以表格格式提供輸出。要以 JSON 或 YAML 格式查看此數(shù)據(jù),可以使用輸出標(biāo)志。以下是一些示例命令:
kube-capacity --pods --output json
kube-capacity --pods --containers --util --output yaml
支持的標(biāo)志
先決條件
任何請(qǐng)求集群利用率的命令都依賴于集群上運(yùn)行的metrics-server。如果尚未安裝,您可以使用官方helm chart進(jìn)行安裝。
- https://github.com/helm/charts/tree/master/stable/metrics-server
- https://github.com/kubernetes-incubator/metrics-server