监控Kubernetes PVC磁盘使用情况

gopyfrb3  于 12个月前  发布在  Kubernetes
关注(0)|答案(2)|浏览(77)

我正在尝试监控Kubernetes PVC磁盘使用情况。我需要用于持久卷声明的内存。我找到了命令:
kubectl get --raw /API/v1/persistentvolumeclaims| JQ
返回:

"status":{
            "phase":"Bound",
            "accessModes":[
               "ReadWriteOnce"
            ],
            "capacity":{
               "storage":"1Gi"
            }
         }

字符串
但它只给我带来了磁盘的全部容量,就像我说的,我需要用过的
有谁知道哪个命令可以返回此信息给我?

l3zydbqr

l3zydbqr1#

我没有一个明确的答案,但我希望这将帮助你。此外,我会很感兴趣,如果有人有一个更好的答案。

获取当前使用情况

PersistentVolume子系统为用户和管理员提供了一个API,该API可以从存储的使用方式中抽象出如何提供存储的详细信息。
--持久卷|Kubernetes
正如Kubernetes文档中所述,PV(PersistentVolume)和PVC(PersistentVolumeClaim)是对存储的抽象。因此,我认为您不能检查PV或PVC,但您可以检查存储介质。
要获取使用情况,请创建一个调试pod,它将使用您的PVC,您将从中检查使用情况。这应该取决于您的存储提供商。

# 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

字符串
使用kubectl apply -f volume-size-debugger.yaml应用上面的清单,并在其中使用kubectl exec -it volume-size-debugger sh运行shell。在shell中运行du -sh以获得人类可读格式的用法。

监控

我相信你已经注意到了,这对监控并不是特别有用。它可能对偶尔的一次性检查有用,但对监控或磁盘空间不足警报没有帮助。
设置监控的一种方法是使用类似于我们上面的sidecar pod,并从那里收集我们的指标。
另一种方法是使用CSI(容器存储接口)。我没有使用过CSI,对它的了解不足以真正解释更多。但这里有一些相关的问题和相关的Kubernetes文档:

kq0g1dla

kq0g1dla2#

+1到touchmarine's的答案,但我想扩大它一点,并添加我的三美分。
但它只给我带来了磁盘的全部容量,就像我说的,我需要用过的
PVC是一个抽象,它表示对存储的请求,只是不存储磁盘使用情况等信息。作为一个更高级别的抽象,它根本不关心底层存储如何被其消费者使用。
@touchmarine,而不是使用一个Pod,其唯一的功能是sleep,每次你需要检查磁盘使用情况,你需要附加到它maually,我建议使用这样的东西:

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

字符串
当然,它可以是一个单一的容器busyboxPod,就像@touchmarine的例子一样,但在这里我决定展示如何将它用作一个sidecar,在一个单一的Pod中运行在nginx容器旁边。
当它运行一个简单的bash脚本时-一个无限的while循环,它将当前的磁盘使用情况打印到标准输出中,它可以用kubectl logs读取,而不需要使用kubectl exec并附加到Pod

$ kubectl logs nginx-deployment-56bb5c87f6-dqs5h busybox
20.0K   /data
20.0K   /data
20.0K   /data


我想它也可以更有效地用于配置某种磁盘使用情况的监控。

相关问题