Dan*_*ori 7 monitoring kubernetes
我正在尝试监控 Kubernetes PVC 磁盘的使用情况。我需要用于持久卷声明的内存。我找到了命令:
kubectl get --raw /api/v1/persistentvolumeclaims | kubectl get --raw /api/v1/persistentvolumeclaims | 杰克
返回:
"status":{
"phase":"Bound",
"accessModes":[
"ReadWriteOnce"
],
"capacity":{
"storage":"1Gi"
}
}
Run Code Online (Sandbox Code Playgroud)
但它只给我带来了磁盘的全部容量,正如我所说,我需要用过的磁盘
有谁知道哪个命令可以将此信息返回给我?
我没有明确的答案,但希望这对你有帮助。另外,如果有人有更好的答案,我会很感兴趣。
PersistentVolume 子系统为用户和管理员提供了一个 API,该 API 从存储的使用方式中抽象出存储的提供方式和使用方式的详细信息。
正如 Kubernetes 文档中所述,PV(PersistentVolume)和 PVC(PersistentVolumeClaim)是对存储的抽象。因此,我认为你不能检查PV或PVC,但你可以检查存储介质。
要获取使用情况,请创建一个将使用您的 PVC 的调试 pod,从中您可以检查使用情况。这应该取决于您的存储提供商。
# volume-size-debugger.yaml
kind: Pod
apiVersion: v1
metadata:
name: volume-size-debugger
spec:
volumes:
- name: debug-pv
persistentVolumeClaim:
claimName: <pvc-name>
containers:
- name: debugger
image: busybox
command: ["sleep", "3600"]
volumeMounts:
- mountPath: "/data"
name: debug-pv
Run Code Online (Sandbox Code Playgroud)
使用 来应用上面的清单kubectl apply -f volume-size-debugger.yaml,并使用 来在其中运行一个 shell kubectl exec -it volume-size-debugger sh。在 shell 内运行du -sh以获取人类可读格式的用法。
我相信您已经注意到,这对于监控来说并不是特别有用。它对于不时进行一次性检查可能很有用,但对于监视或磁盘空间不足警报则不那么有用。
设置监控的一种方法是拥有一个与我们上面类似的 sidecar pod,并从那里收集我们的指标。node_exporter就是这样的一个例子。
另一种方法是使用CSI(容器存储接口)。我没有使用过 CSI,对它了解不够,无法真正解释更多。但这里有一些相关问题和相关 Kubernetes 文档:
+1 touchmarine 的答案,但我想稍微扩展一下,并添加我的三分钱。
但它只给我带来了磁盘的全部容量,正如我所说,我需要用过的磁盘
PVC是一个抽象,表示对存储的请求,并且不存储磁盘使用等信息。作为更高级别的抽象,它根本不关心其消费者如何使用底层存储。
@touchmarine,我建议使用这样的东西,而不是使用Pod其唯一功能是每次需要检查需要手动附加到它的磁盘使用情况时:sleep
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
volumes:
- name: media
persistentVolumeClaim:
claimName: media
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
volumeMounts:
- mountPath: "/data"
name: media
- name: busybox
image: busybox
command: ["/bin/sh"]
args: ["-c", "while true; do du -sh /data; sleep 10;done"]
volumeMounts:
- mountPath: "/data"
name: media
Run Code Online (Sandbox Code Playgroud)
它当然可以是单个容器,busybox Pod如 @touchmarine 的示例中所示,但在这里我决定还展示它如何用作在nginx单个Pod.
因为它运行一个简单的 bash 脚本 - 一个无限的 while 循环,它将当前磁盘使用情况打印到标准输出,可以读取它,而kubectl logs无需使用kubectl exec并附加到Pod:
$ kubectl logs nginx-deployment-56bb5c87f6-dqs5h busybox
20.0K /data
20.0K /data
20.0K /data
Run Code Online (Sandbox Code Playgroud)
我想它还可以更有效地用于配置某种磁盘使用情况监控。