k8s SC 별 usage 계산하기
StorageClass (SC),
Persistent Volume (PV) 및 Persistent Volume Claim (PVC)의 총 용량과 사용량
#!/bin/bash
# StorageClass 정보
echo "StorageClass 정보:"
kubectl get storageclass
echo ""
echo "Persistent Volume (PV) 정보:"
# Persistent Volume의 총 용량 및 사용량
total_pv_capacity=0
used_pv_capacity=0
# PVC를 통해 사용 중인 PV의 사용량을 파악
for pv in $(kubectl get pv -o jsonpath='{.items[*].metadata.name}'); do
capacity=$(kubectl get pv "$pv" -o jsonpath='{.spec.capacity.storage}')
total_pv_capacity=$(echo "$total_pv_capacity + $capacity" | bc)
# PVC가 바인딩된 경우 사용량 확인
if [[ $(kubectl get pv "$pv" -o jsonpath='{.spec.claimRef}') ]]; then
used_capacity=$(kubectl get pvc "$(kubectl get pv "$pv" -o jsonpath='{.spec.claimRef.name}')" -n "$(kubectl get pv "$pv" -o jsonpath='{.spec.claimRef.namespace}')" -o jsonpath='{.status.capacity.storage}')
used_pv_capacity=$(echo "$used_pv_capacity + $used_capacity" | bc)
fi
done
# 결과 출력
echo "총 PV 용량: $total_pv_capacity"
echo "사용 중인 PV 용량: $used_pv_capacity"
# PVC 정보
echo ""
echo "Persistent Volume Claim (PVC) 정보:"
kubectl get pvc --all-namespaces
```
위 스크립트를 사용하기 위해서는 다음 단계를 따라 주시기 바랍니다:
1. 위 코드를 `pv-pvc-info.sh`와 같은 이름의 파일로 저장합니다.
2. 터미널에서 스크립트의 실행 권한을 부여합니다:
chmod +x pv-pvc-info.sh
3. 스크립트를 실행합니다:
./pv-pvc-info.sh
#!/bin/bash
# Get the total and used capacity of StorageClass
echo "StorageClass Information:"
kubectl get sc -o json | jq -r '.items[] | "\(.metadata.name): \(.provisioner), Total Capacity: \(.parameters.capacity), Used Capacity: \(.status.used)"'
echo ""
# Get the total and used capacity of PersistentVolume
echo "PersistentVolume Information:"
kubectl get pv -o json | jq -r '.items[] | "\(.metadata.name): \(.spec.capacity.storage), \(.status.phase)"'
echo ""
# Get the total and used capacity of PersistentVolumeClaim
echo "PersistentVolumeClaim Information:"
kubectl get pvc -o json | jq -r '.items[] | "\(.metadata.name) (\(.spec.accessModes[0])): \(.spec.resources.requests.storage), \(.status.phase)"'
Kubernetes에서 스토리지 관련 정보를 Prometheus와 PromQL을 사용하여 모니터링하려면, Persistent Volume (PV)와 Persistent Volume Claim (PVC)의 사용량을 확인할 수 있는 쿼리를 작성할 수 있습니다.
1. **Persistent Volume (PV) 용량 확인:**
PVC의 요청 용량을 확인하려면 다음과 같은 PromQL을 사용할 수 있습니다.
sum(kube_persistentvolume_capacity_bytes) by (persistentvolume)
이 쿼리는 모든 Persistent Volume의 총 용량을 바이트 단위로 반환합니다.
2. **Persistent Volume Claim (PVC) 요청 확인:**
PVC의 요청 용량을 확인하려면 다음과 같은 PromQL을 사용할 수 있습니다.
sum(kube_persistentvolumeclaim_requests_storage_bytes) by (persistentvolumeclaim, namespace)
이 쿼리는 모든 PVC의 요청 용량을 바이트 단위로 반환하며, PVC 이름과 네임스페이스별로 그룹화됩니다.
3. **Persistent Volume Claim의 사용량 확인:**
PVC의 실제 사용량을 확인하려면 다음과 같은 PromQL을 사용할 수 있습니다. 이는 PVC의 실제 사용량을 측정하는 메트릭이 수집되고 있어야 합니다. 이를 위해 `kubelet_volume_stats_used_bytes` 메트릭을 사용할 수 있습니다.
sum(kubelet_volume_stats_used_bytes) by (persistentvolumeclaim, namespace)
4. **Persistent Volume과 PVC의 사용량 차이를 시각화하기:**
PV의 용량과 PVC의 사용량을 함께 비교할 수 있는 쿼리를 작성할 수 있습니다. 예를 들어, PVC의 사용량과 요청 용량을 비교하려면 다음 쿼리를 사용할 수 있습니다.
sum(kubelet_volume_stats_used_bytes) by (persistentvolumeclaim, namespace)
/
sum(kube_persistentvolumeclaim_requests_storage_bytes) by (persistentvolumeclaim, namespace)
위의 PromQL 쿼리를 사용하여 Kubernetes 클러스터 내에서 스토리지 관련 메트릭을 모니터링할 수 있습니다. 필요한 경우 쿼리를 조정하여 특정 네임스페이스나 라벨에 맞게 필터링할 수 있습니다.
Prometheus를 이용하여 Kubernetes 클러스터의 StorageClass(SC)별 전체 크기와 사용량을 출력하는 PromQL 쿼리
# SC별 전체 크기
sum by (storageclass) (kube_persistentvolume_capacity_bytes)
# SC별 사용량
sum by (storageclass) (kubelet_volume_stats_used_bytes)
이 쿼리들은 각 StorageClass의 전체 용량과 현재 사용량을 바이트 단위로 반환합니다15.
추가적으로, 사용률을 백분율로 계산하려면 다음 쿼리를 사용할 수 있습니다:
# SC별 사용률 (%)
(sum by (storageclass) (kubelet_volume_stats_used_bytes) / sum by (storageclass) (kube_persistentvolume_capacity_bytes)) * 100
이 쿼리들을 Grafana 대시보드에서 사용하면 StorageClass별 용량 및 사용량을 시각적으로 모니터링할 수 있습니다
PV별 StorageClass의 전체 크기와 사용량을 출력하는 PromQL
# PV별 SC의 전체 크기
sum by (persistentvolume, storageclass) (kube_persistentvolume_capacity_bytes)
# PV별 SC의 사용량
sum by (persistentvolume, storageclass) (kubelet_volume_stats_used_bytes)
각 PersistentVolume과 해당 StorageClass의 전체 용량과 현재 사용량을 바이트 단위로 반환
# PV별 SC의 사용률 (%)
(sum by (persistentvolume, storageclass) (kubelet_volume_stats_used_bytes) / sum by (persistentvolume, storageclass) (kube_persistentvolume_capacity_bytes)) * 100
PVC별 StorageClass의 전체 크기와 사용량을 출력하는 PromQL 쿼리는 다음과 같습니다:
text
# PVC별 SC의 전체 크기
sum by (persistentvolumeclaim, storageclass, namespace) (kubelet_volume_stats_capacity_bytes)
# PVC별 SC의 사용량
sum by (persistentvolumeclaim, storageclass, namespace) (kubelet_volume_stats_used_bytes)
이 쿼리들은 각 PersistentVolumeClaim(PVC)과 해당 StorageClass의 전체 용량과 현재 사용량을 바이트 단위로 반환합니다.
추가로, 사용률을 백분율로 계산하려면 다음 쿼리를 사용할 수 있습니다:
text
# PVC별 SC의 사용률 (%)
(sum by (persistentvolumeclaim, storageclass, namespace) (kubelet_volume_stats_used_bytes) / sum by (persistentvolumeclaim, storageclass, namespace) (kubelet_volume_stats_capacity_bytes)) * 100
이 쿼리들을 사용하면 각 PVC와 StorageClass별 용량 및 사용량을 상세하게 모니터링할 수 있습니다. namespace를 포함시켜 더 정확한 식별이 가능
Kubernetes 클러스터에서 StorageClass별로 사용량과 크기를 출력하려면 Prometheus의 kubelet_volume_stats_* 메트릭을 사용
1. StorageClass별 총 용량 (Provisioned Capacity)
- kubelet_volume_stats_capacity_bytes는 각 볼륨의 총 크기를 바이트 단위로 나타냅니다.
- namespace!=""는 네임스페이스가 지정된 모든 PVC를 포함합니다.
2. StorageClass별 사용 중인 용량 (Used Capacity)
- kubelet_volume_stats_used_bytes는 현재 사용 중인 볼륨의 용량을 나타냅니다.
3. StorageClass별 여유 용량 (Available Capacity)
- kubelet_volume_stats_available_bytes는 볼륨에서 사용 가능한 공간을 나타냅니다.
4. StorageClass별 총 사용률 (Usage Percentage)
- 사용량(used)을 총 용량(capacity)으로 나눈 값에 100을 곱하여 퍼센트로 변환합니다.
5. StorageClass별 사용량 및 총 용량 한 번에 출력
아래는 사용량(Used), 총 용량(Capacity), 여유 용량(Available)을 함께 표시하는 PromQL입니다.
# StorageClass별 PVC 크기와 사용량
sum by (storageclass) (
(persistentvolumeclaims[1m].capacity["iBytes"] - persistentvolumeclaims[1m].status["available"]["iBytes"])
* on (namespace) group_left (storageclass)
persistentvolumeclaims[1m]
)
# StorageClass별 PV 크기와 사용량
sum by (storageclass) (
(persistentvolumes[1m].capacity["iBytes"] - persistentvolumes[1m].status["available"]["iBytes"])
* on (namespace) group_left (storageclass)
persistentvolumes[1m]
)
StorageClass(SC) 전체 크기와 각각의 사용량을 모니터링하고자 하시는군요.
이를 위해서는 PersistentVolume(PV) 리소스의 정보를 수집해야 합니다.
다음은 이를 위한 PromQL 쿼리 예제입니다.
1. **각각의 사용량 (바이트 기준)**: 각 PersistentVolume의 사용량을 조회하는 쿼리입니다.
```promql
kubelet_volume_stats_used_bytes
```
2. **각각의 전체 크기 (바이트 기준)**: 각 PersistentVolume의 전체 크기를 조회하는 쿼리입니다.
```promql
kubelet_volume_stats_capacity_bytes
```
3. **StorageClass 별로 그룹화된 사용량 (바이트 기준)**: 각각의 StorageClass 별로 사용량을 합산한 결과를 조회하는 쿼리입니다.
```promql
sum by (storageclass) (kubelet_volume_stats_used_bytes)
```
4. **StorageClass 별로 그룹화된 전체 크기 (바이트 기준)**: 각각의 StorageClass 별로 전체 크기를 합산한 결과를 조회하는 쿼리입니다.
```promql
sum by (storageclass) (kubelet_volume_stats_capacity_bytes)
```
5. **하나의 쿼리에서 사용량과 전체 크기를 동시에 조회**: 각각의 StorageClass 별로 사용량과 전체 크기를 하나의 쿼리로 조회할 수도 있습니다. `label_join`을 이용하여 storageclass를 라벨링합니다.
```promql
sum by (persistentvolumeclaim, storageclass) (kubelet_volume_stats_used_bytes) / sum by (persistentvolumeclaim, storageclass) (kubelet_volume_stats_capacity_bytes)
```
위 예제들로 Kubernetes 클러스터에서 StorageClass 별 사용량과 전체 크기를 조회할 수 있습니다. 실제 환경에 맞추어 필요에 따라 쿼리를 수정해 사용하시면 됩니다.
추가적으로 궁금하신 점이나 열람을 원하시는 정보가 있으면 말씀해 주세요. 더 도와드릴 수 있도록 하겠습니다.
알겠습니다. Kubernetes 클러스터에서 StorageClass(SC)별로 크기와 각각의 사용량을 출력하는 PromQL 쿼리를 작성해 드리겠습니다.
다음은 각각의 StorageClass 별로 사용량 및 전체 크기를 조회하는 PromQL 쿼리입니다.
1. **StorageClass 별로 그룹화된 사용량 (바이트 기준)**: 각 StorageClass 별로 사용된 용량을 합산한 결과를 조회하는 쿼리입니다.
```promql
sum by (storageclass) (kubelet_volume_stats_used_bytes{storageclass!=""})
```
2. **StorageClass 별로 그룹화된 전체 크기 (바이트 기준)**: 각 StorageClass 별로 전체 용량을 합산한 결과를 조회하는 쿼리입니다.
```promql
sum by (storageclass) (kubelet_volume_stats_capacity_bytes{storageclass!=""})
```
위 두 쿼리를 통해 각 StorageClass 별로 사용된 용량과 전체 용량을 확인할 수 있습니다.
추가적으로, 사용량과 전체 크기를 한 번에 조회하고자 하는 경우 다음과 같은 쿼리를 사용할 수 있습니다. 이 쿼리는 `label_replace`을 사용하여 PersistentVolume(PV)를 StorageClass로 그룹화합니다.
3. **StorageClass 별로 사용량 및 전체 크기를 한 번에 조회**:
- 사용량 (바이트 기준):
```promql
sum by (storageclass) (
label_replace(
kubelet_volume_stats_used_bytes{persistentvolumeclaim!=""},
"storageclass",
"$1",
"persistentvolumeclaim",
"(.*)"
)
)
```
- 전체 크기 (바이트 기준):
```promql
sum by (storageclass) (
label_replace(
kubelet_volume_stats_capacity_bytes{persistentvolumeclaim!=""},
"storageclass",
"$1",
"persistentvolumeclaim",
"(.*)"
)
)
```
이렇게 작성된 쿼리들을 사용하여 Kubernetes 클러스터 내 각 StorageClass 별로 사용된 용량과 전체 용량을 모니터링하실 수 있습니다.
혹시 더 궁금한 점이나 추가적으로 필요하신 정보가 있으시면 언제든지 말씀해 주세요. 제가 가능한 한 최대한 도와드리겠습니다.
# 모든 PVC(퍼시스턴트 볼륨 클레임)와 그에 연결된 PV(퍼시스턴트 볼륨) 정보를 가져옵니다.
kubectl get pvc --all-namespaces -o json | jq -r '.items[] | "\(.metadata.namespace) \(.metadata.name) \(.spec.resources.requests.storage)"'
# 각 PVC의 사용량을 확인하기 위해 PV 정보를 가져옵니다.
kubectl get pv -o json | jq -r '.items[] | "\(.metadata.name) \(.spec.capacity.storage) \(.status.phase)"'
# 특정 스토리지 클래스를 사용하는 PVC만 필터링
kubectl get pvc --all-namespaces -o json | jq -r '.items[] | select(.spec.storageClassName == "your-storage-class-name") | "\(.metadata.namespace) \(.metadata.name) \(.spec.resources.requests.storage)"'
#!/bin/bash
# 모든 StorageClass 리스트 가져오기
storage_classes=$(kubectl get sc -o jsonpath='{.items[*].metadata.name}')
echo "StorageClass 사용량:"
echo ""
# 각 StorageClass별로 사용된 PVC 찾기
for sc in $storage_classes; do
echo "StorageClass: $sc"
kubectl get pvc --all-namespaces --field-selector=spec.storageClassName=$sc \
-o custom-columns='NAMESPACE:.metadata.namespace,PVC:.metadata.name,STATUS:.status.phase,VOLUME:.spec.volumeName,STORAGE:.spec.resources.requests.storage'
echo "-------------------------------"
done
#!/bin/bash
# StorageClass 목록 얻기
storage_classes=$(kubectl get sc -o jsonpath='{.items[*].metadata.name}')
echo "StorageClass 사용량 및 총 크기:"
echo ""
# 각 StorageClass에 대해 반복
for sc in $storage_classes; do
echo "StorageClass: $sc"
# PVC 조회: 해당 StorageClass에 속한 Namespace와 요청된 storage 크기를 가져옴
kubectl get pvc --all-namespaces --output=jsonpath="{range .items[?(@.spec.storageClassName=='$sc')]}{.metadata.namespace} {.spec.volumeName} {.spec.resources.requests.storage}{'\n'}{end}" | while read namespace volume size; do
# PV 조회: 해당 PV의 이름과 실제 할당된 storage 크기 가져옴
pv_size=$(kubectl get pv "$volume" --output=jsonpath="{.spec.capacity.storage}")
echo " Namespace: $namespace, PVC Volume: $volume, Requested Size: $size, PV Actual Size: $pv_size"
done | awk -v sc="$sc" '
BEGIN {
used_sum = 0
total_sum = 0
}
{
# Gi를 Ki로 변환하고 합산
split($3, requested, "Gi")
split($5, actual, "Gi")
used_sum += requested[1] * 1024
total_sum += actual[1] * 1024
}
END {
if (NR > 0) {
printf "\n Total used: %.2f GiB\n", used_sum / 1024
printf " Total capacity: %.2f GiB\n", total_sum / 1024
} else {
print " No PVC found"
}
print "-------------------------------"
}'
done
설명
- StorageClass 루프: 모든 StorageClass를 대상으로 루프를 돌며 사용량을 계산합니다.
- PVC 정보 검색: 각 StorageClass에 속하는 PVC의 네임스페이스, 볼륨 이름, 요청된 저장소 크기를 가져옵니다.
- PV 정보 검색: 각 PV의 실제 크기를 가져옵니다.
- AWK 합산: 각 StorageClass에 대해 요청된 저장소와 할당된 저장소 크기를 합산하여 GiB로 출력합니다.
이 스크립트는 각 StorageClass에 대한 사용량과 할당된 총 크기를 보여줍니다. 이 스크립트를 실행하려면 클러스터 접근 권한이 필요하며, kubectl이 제대로 설정되어 있어야 합니다.