如何通过OpenShiftClient或oc CLI获取PVC的Used列数据?
获取OpenShift PVC的已用空间(Used)值
用oc CLI提取已用空间
OCP界面的「Used」列数据,多数情况下可通过PVC的status.usedCapacity字段直接获取,用自定义列输出即可:
oc get pvc -o custom-columns=NAME:.metadata.name,STATUS:.status.phase,CAPACITY:.spec.resources.requests.storage,USED:.status.usedCapacity
若你的OCP版本中PVC无usedCapacity字段,可通过PVC绑定的PV获取已用空间——PV的status.used字段会存储对应数据,用脚本批量查询:
oc get pvc -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.resources.requests.storage}{"\t"}{.status.phase}{"\t"}{.status.volumeName}{"\n"}{end}' | while read pvc_name capacity phase pv_name; do used=$(oc get pv "$pv_name" -o jsonpath='{.status.used}' 2>/dev/null) echo "PVC: $pvc_name | Status: $phase | Capacity: $capacity | Used: ${used:-N/A}" done
用OpenShiftClient获取已用空间
以Java版OpenShiftClient为例,获取逻辑和CLI一致:优先从PVC本身读取,若字段不存在则关联查询绑定的PV:
import io.fabric8.openshift.client.OpenShiftClient; import io.fabric8.kubernetes.api.model.PersistentVolumeClaim; import io.fabric8.kubernetes.api.model.PersistentVolume; import java.util.List; public class PvcUsedQuery { public static void main(String[] args) { try (OpenShiftClient openshiftClient = new OpenShiftClient()) { List<PersistentVolumeClaim> pvcs = openshiftClient.persistentVolumeClaims().list().getItems(); for (PersistentVolumeClaim pvc : pvcs) { String pvcName = pvc.getMetadata().getName(); String status = pvc.getStatus().getPhase(); String capacity = pvc.getSpec().getResources().getRequests().get("storage").toString(); String used = "N/A"; // 尝试从PVC直接获取已用空间 if (pvc.getStatus() != null && pvc.getStatus().getUsedCapacity() != null) { used = pvc.getStatus().getUsedCapacity().toString(); } else { // 关联查询绑定的PV String pvName = pvc.getStatus().getVolumeName(); if (pvName != null) { PersistentVolume pv = openshiftClient.persistentVolumes().withName(pvName).get(); if (pv != null && pv.getStatus() != null && pv.getStatus().getUsed() != null) { used = pv.getStatus().getUsed().toString(); } } } System.out.printf("PVC: %s | Status: %s | Capacity: %s | Used: %s%n", pvcName, status, capacity, used); } } } }
注意:已用空间数据的可用性取决于存储类是否支持容量监控,部分存储后端可能无法返回该值,此时会显示N/A。
内容的提问来源于stack exchange,提问作者alm
相关产品推荐
相关产品推荐

