使用 Kube-capacity CLI 查看 Kubernetes 资源请求、限制和利用率
关 注 微 信 公 众 号 《 云 原 生 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
发布页面上访问。
http://github.com/goreleaser/goreleaser
http://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
进行安装。
http://github.com/helm/charts/tree/master/stable/metrics-server
http://github.com/kubernetes-incubator/metrics-server
- Go 中的构建器模式
- 让我们使用 Go 实现基本的服务发现
- 云原生下一步的发展方向是什么?
- 用更云原生的方式做诊断|大规模 K8s 集群诊断利器深度解析
- 多个维度分析k8s多集群管理工具,到底哪个才真正适合你
- 使用 Kube-capacity CLI 查看 Kubernetes 资源请求、限制和利用率
- 使用 Go 在 Kubernetes 中构建自己的准入控制器
- 云原生数仓如何破解大规模集群的关联查询性能问题?
- 云原生趋势下的迁移与灾备思考
- 2022 年不容错过的六大云原生趋势!
- 使用 Prometheus 监控 Golang 应用程序
- 云原生时代下的机遇与挑战 DevOps如何破局
- 如何在云原生格局中理解Kubernetes合规性和安全框架
- 设计云原生应用程序的15条基本原则
- 使用 Operator SDK 为 Pod 标签编写Controller
- Kubernetes Visitor 模式
- 为什么云原生是第二次云革命
- 构建云原生安全的六个重要能力
- 扩展云原生策略的步骤有哪些?
- 七个值得关注的开源云原生工具