【问题标题】:Monitoring Kubernetes PVC disk usage监控 Kubernetes PVC 磁盘使用情况
【发布时间】:2021-02-08 16:36:04
【问题描述】:

我正在尝试监控 Kubernetes PVC 磁盘使用情况。我需要用于持久卷声明的内存。我找到了命令:

kubectl get --raw / api / v1 / persistentvolumeclaims

返回:

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

但它只为我带来了磁盘的全部容量,正如我所说,我需要用过的那个

有谁知道哪个命令可以将此信息返回给我?

【问题讨论】:

    标签: kubernetes monitoring


    【解决方案1】:

    我没有确定的答案,但我希望这会对你有所帮助。另外,如果有人有更好的答案,我会很感兴趣。

    获取当前使用情况

    PersistentVolume 子系统为用户和管理员提供了一个 API,该 API 从存储的使用方式中提取了存储提供方式的详细信息。

    -- Persistent Volume | Kubernetes

    如 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
    

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

    监控

    我相信您已经注意到,这对于监控并不是特别有用。它可能对不时进行一次性检查很有用,但不适用于监控或磁盘空间不足警报。

    设置监控的一种方法是使用与上述类似的 sidecar pod,并从那里收集我们的指标。 node_exporter 就是一个这样的例子。

    另一种方法是使用CSI(容器存储接口)。我没有使用过 CSI,也没有足够的了解来真正解释更多。但这里有几个相关的问题和相关的 Kubernetes 文档:

    【讨论】:

      【解决方案2】:

      +1 到touchmarine's 回答,但我想扩大一点,并加上我的三分钱。

      但它只会给我带来磁盘的全部容量,正如我所说,我 需要用过的

      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
      

      它当然可以是单个容器busyboxPod,就像@touchmarine 的示例一样,但在这里我决定展示它如何用作在单个@ 中的nginx 容器旁边运行的sidecar 987654329@.

      因为它运行一个简单的 bash 脚本 - 一个无限的 while 循环,它将当前磁盘使用情况打印到标准输出,它可以使用 kubectl logs 读取,而无需使用 kubectl exec 并附加到 Pod

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

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

      【讨论】:

      • 这是一种利用日志的简单而有用的方法。
      • 我是 Kubernetes 新手,我看到你放了一个 yaml。我将如何运行这个脚本?是收集信息的命令吗?
      • 如果您分享您的DeploymentPod 定义,会更容易回答您的问题。我猜你的PVC 被一些Pod 使用,所以你可以在这个定义中添加第二个busybox 容器,它的唯一功能是安装相同的卷并检查它的当前使用情况。 command: ["/bin/sh"]args: ["-c", "while true; do du -sh /data; sleep 10;done"] 是这里的关键行。 du -sh /data 每 10 秒检查一次磁盘使用情况并将其打印到标准输出,以便使用 kubectl logs &lt;pod_name&gt; &lt;container_name&gt; 轻松检查。您可以通过kubectl apply -f 申请
      猜你喜欢
      • 2013-05-03
      • 2011-08-04
      • 2017-11-26
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 2020-01-11
      • 2013-05-18
      • 1970-01-01
      相关资源
      最近更新 更多