我正在运行kubernetes pod上的负载测试,我想每5分钟采样一次它的CPU和内存使用情况。我目前在kubernetes pod上手动使用linuxtop
命令。
是否有任何方法给定kubernetes pod
每X分钟获取CPU/内存使用情况并将其附加到文件中?
试试下面这行代码:
while [ true ]; do echo $(date) $(date +%s) $(kubectl top -n your-namespace pod $(kubectl get pods -n your-namespace -l your-label-name=your-label-value -o jsonpath='{..metadata.name}') | tail -n 1) | tee -a /path/to/save/your/logs.txt; done
每5分钟加入sleep 300
取样,而不是连续取样。
它将在名称空间your-namespace
中找到一个具有标签your-label-name
的pod,其值为your-label-value
,取其名称,并且只取最后一个这样的pod,如果您有多个具有相同标签的pod(这就是| tail -n 1
的用途)。这样,您就不必手动确定pod的名称。然后它会输出如下内容:
Sun, Mar 12, 2023 4:59:05 PM 1678640345 your-pod-name-5c64678fc6-rsldm 47m 657Mi
其中1678640345
是由$(date +%s)
写入的Unix毫秒时间戳。输出将在控制台(stdout)中打印,并镜像到/path/to/save/your/logs.txt
文件中。
您可以安装度量服务器,然后编写一个小bash脚本,该脚本在循环中调用kubectl top pods --all-namespaces
的组合并输出到文件。如果你想要更多的内容,另一个选择是运行Prometheus和/或kube-state-metrics,并将其设置为从系统中的所有pod中抓取指标。