카테고리 없음

k8s SC 별 usage 계산하기

자바바라 2024. 11. 22. 07:41

 

 

 

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)

sum by (storageclass) ( kubelet_volume_stats_capacity_bytes{namespace!=""} ) / 1024 / 1024 / 1024
  • kubelet_volume_stats_capacity_bytes는 각 볼륨의 총 크기를 바이트 단위로 나타냅니다.
  • namespace!=""는 네임스페이스가 지정된 모든 PVC를 포함합니다.

2. StorageClass별 사용 중인 용량 (Used Capacity)

sum by (storageclass) ( kubelet_volume_stats_used_bytes{namespace!=""} ) / 1024 / 1024 / 1024
  • kubelet_volume_stats_used_bytes는 현재 사용 중인 볼륨의 용량을 나타냅니다.

3. StorageClass별 여유 용량 (Available Capacity)

sum by (storageclass) ( kubelet_volume_stats_available_bytes{namespace!=""} ) / 1024 / 1024 / 1024
  • kubelet_volume_stats_available_bytes는 볼륨에서 사용 가능한 공간을 나타냅니다.

4. StorageClass별 총 사용률 (Usage Percentage)

sum by (storageclass) ( kubelet_volume_stats_used_bytes{namespace!=""} ) / sum by (storageclass) ( kubelet_volume_stats_capacity_bytes{namespace!=""} ) * 100
  • 사용량(used)을 총 용량(capacity)으로 나눈 값에 100을 곱하여 퍼센트로 변환합니다.

5. StorageClass별 사용량 및 총 용량 한 번에 출력

아래는 사용량(Used), 총 용량(Capacity), 여유 용량(Available)을 함께 표시하는 PromQL입니다.

sum by (storageclass) ( kubelet_volume_stats_used_bytes{namespace!=""} ) / 1024 / 1024 / 1024 or sum by (storageclass) ( kubelet_volume_stats_capacity_bytes{namespace!=""} ) / 1024 / 1024 / 1024 or sum by (storageclass) ( kubelet_volume_stats_available_bytes{namespace!=""} ) / 1024 / 1024 / 1024

 

# 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이 제대로 설정되어 있어야 합니다.