쿠버네티스 일반

[kubectl df-pv] Kube PV 사용량 확인 Tool

Jerry_이정훈 2021. 7. 21. 12:33
728x90

오늘도 얇디 얇은 ^^ Kube Tool 관련 정보 공유 합니다. 

 

Kube PV가 실제로 사용하는(allocate, PVC 할당량이 아니라) Disk 사용량을 확인하려면 개별 POD 접속해서 일일이 df 명령어로 확인 해야 합니다. 하지만 kubectl df-pv Tool 사용하시면 빠르게 확인 가능합니다. 사용법 공유 합니다. 

 

Test 내역

  • kubectl df-pv 설치
  • 전체 Namespace 및 개별 Namespace 단위 PV Disk 사용량 확인
    (--help 옵션 리스트)

그럼 설치부터 해 보겠습니다. 설치는 kube krew 사용하여 아주 간단합니다. (사전에 kubectl krew 설치가 필요합니다.) kubectl krew 설치는 아래 링크 참고 부탁 드립니다.

https://github.com/kubernetes-sigs/krew/

https://wookiist.dev/78

 

kube df-pv 설치

[spkr@erdia22 hosts (ubuns:rook-ceph)]$ curl https://krew.sh/df-pv | bash
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  2225    0  2225    0     0   1931      0 --:--:--  0:00:01 --:--:--  1929
./LICENSE
./krew-darwin_amd64
./krew-darwin_arm64
./krew-linux_amd64
./krew-linux_arm
./krew-linux_arm64
./krew-windows_amd64.exe
WARNING: Detected stdin, but discarding it because of --manifest or args
Installing plugin: krew
W0721 11:14:19.289989   13391 install.go:160] Skipping plugin "krew", it is already installed
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH" not found in bashrc, adding now
Updated the local copy of plugin index.
  New plugins available:
    * assert
    * cost
    * cyclonus
    * karbon
    * mc
    * multinet
    * pexec
    * pod-lens
    * promdump
    * pvmigrate
    * rbac-tool
    * reliably
    * resource-versions
    * tunnel
    * vela
    * whisper-secret
  Upgrades available for installed plugins:
    * minio v3.0.29 -> v4.1.3
    * neat v2.0.2 -> v2.0.3
    * rabbitmq v1.4.0 -> v1.8.0
    * starboard v0.9.2 -> v0.10.3
WARNING: Detected stdin, but discarding it because of --manifest or args
Installing plugin: df-pv
Installed plugin: df-pv
\
 | Use this plugin:
 |      kubectl df-pv
 | Documentation:
 |      https://github.com/yashbhutwala/kubectl-df-pv
/
WARNING: You installed plugin "df-pv" from the krew-index plugin repository.
   These plugins are not audited for security by the Krew maintainers.
   Run them at your own risk.
you will need to reload your shell with  or add krew to your path with 'export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"' before krew can be used

이제 설치가 완료 되었습니다. 처음 krew 설치하셨다면 아래 source 명령어 실행합니다.

[spkr@erdia22 kvdi (ubuns:yelb)]$ source ~/.bashrc

이제 kubectl df-pv 사용해 보겠습니다. 사용법은 아주 간단합니다. 사용 용량 별 색깔도 구분하고  깔끔하네요.  

이미지가 너무 작네요 ㅎㅎ

[spkr@erdia22 kvdi (ubuns:yelb)]$ k df-pv

 PV NAME                                   PVC NAME   NAMESPACE  NODE NAME  POD NAME                         VOLUME MOUNT NAME  SIZE   USED  AVAILABLE  %USED  IUSED  IFREE     %IUSED
 pvc-67192cbc-6ec5-4224-8bf2-8e5dd4e5bb21  rbd-pvc    default    ubun20-1   csirbd-demo-pod                  mypvc              975Mi  2Mi   957Mi      0.26   11     65525     0.02
 pvc-2fabb3b3-e368-4bd5-bb6b-1fb66eb0b6f2  redis-pvc  yelb       ubun20-2   yelb-appserver-5c895ddb7f-h9lzh  cart-redis-data    195Gi  50Gi  145Gi      25.56  12     13107188  0.00

kubernetes가 사용하는 전체 pv를 포함합니다.   

[spkr@erdia22 kvdi (ubuns:yelb)]$ k get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM             STORAGECLASS      REASON   AGE
pvc-2fabb3b3-e368-4bd5-bb6b-1fb66eb0b6f2   200Gi      RWO            Delete           Bound    yelb/redis-pvc    rook-ceph-block            85m
pvc-67192cbc-6ec5-4224-8bf2-8e5dd4e5bb21   1Gi        RWO            Delete           Bound    default/rbd-pvc   rook-ceph-block            8h

위에서 확인 하실 수 있듯이 k get pv로 하면 실제 사용량이 아니라 할당량(CAPACITY)이 조회되어 실 사용량을 아실 수 없습니다.

 

kubectl df-pv 가 없으면 아래와 같이 해 주어야 하는데 훨씬 간단하네요.

[spkr@erdia22 kvdi (ubuns:yelb)]$ k exec -it yelb-appserver-5c895ddb7f-h9lzh -- bash -c 'df -h'
Filesystem                         Size  Used Avail Use% Mounted on
overlay                            196G   14G  172G   8% /
tmpfs                               64M     0   64M   0% /dev
tmpfs                              7.9G     0  7.9G   0% /sys/fs/cgroup
/dev/mapper/ubuntu--vg-ubuntu--lv  196G   14G  172G   8% /etc/hosts
shm                                 64M     0   64M   0% /dev/shm
/dev/rbd0                          196G   51G  146G  26% /var/lib/redis
tmpfs                              7.9G   12K  7.9G   1% /run/secrets/kubernetes.io/serviceaccount
tmpfs                              7.9G     0  7.9G   0% /proc/acpi
tmpfs                              7.9G     0  7.9G   0% /proc/scsi
tmpfs                              7.9G     0  7.9G   0% /sys/firmware

이것은 PV 하나에 대한 실 사용량이고 PV가 10개, 100개 이면 10개, 100개 POD에서 일일이 해야 합니다. 

 

그럼, k df-pv 옵션 사용법을 help로 확인해 보겠습니다.

[spkr@erdia22 kvdi (ubuns:yelb)]$ k df-pv -h
df-pv emulates Unix style df for persistent volumes w/ ability to filter by namespace

It autoconverts all "sizes" to IEC values (see: https://en.wikipedia.org/wiki/Binary_prefix and https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#meaning-of-memory)

It colors the values based on "severity" [red: > 75% (too high); yellow: < 25% (too low); green: >= 25 and <= 75 (OK)]

Usage:
  df-pv [flags]

Flags:
      --as string                      Username to impersonate for the operation
      --as-group stringArray           Group to impersonate for the operation, this flag can be repeated to specify multiple groups.
      --cache-dir string               Default HTTP cache directory (default "/home/spkr/.kube/http-cache")
      --certificate-authority string   Path to a cert file for the certificate authority
      --client-certificate string      Path to a client certificate file for TLS
      --client-key string              Path to a client key file for TLS
      --cluster string                 The name of the kubeconfig cluster to use
      --context string                 The name of the kubeconfig context to use
  -d, --disable-color                  boolean flag for disabling colored output
  -h, --help                           help for df-pv
      --insecure-skip-tls-verify       If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure
      --kubeconfig string              Path to the kubeconfig file to use for CLI requests.
  -n, --namespace string               If present, the namespace scope for this CLI request
      --request-timeout string         The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0")
  -s, --server string                  The address and port of the Kubernetes API server
      --tls-server-name string         Server name to use for server certificate validation. If it is not provided, the hostname used to contact the server is used
      --token string                   Bearer token for authentication to the API server
      --user string                    The name of the kubeconfig user to use
  -v, --verbosity string               log level; one of [info, debug, trace, warn, error, fatal, panic] (default "info")

몇가지 옵션이 있는데, 사용 할만한 건 -n, namespace 단위로 구분하는 옵션이네요. -n 옵션 사용해서 namespace 단위로 구분하시면 됩니다. 

[spkr@erdia22 kvdi (ubuns:yelb)]$ k df-pv -n default

 PV NAME                                   PVC NAME  NAMESPACE  NODE NAME  POD NAME         VOLUME MOUNT NAME  SIZE   USED  AVAILABLE  %USED  IUSED  IFREE  %IUSED
 pvc-67192cbc-6ec5-4224-8bf2-8e5dd4e5bb21  rbd-pvc   default    ubun20-1   csirbd-demo-pod  mypvc              975Mi  2Mi   957Mi      0.26   11     65525  0.02

이름도 df-pv 로 외우기도 쉽고 직관적이라 활용성이 뛰어나네요.

 

이상, 간단한 Tool 설치로 PV 사용량을 확인하실 수 있는 kubectl df-pv 공유 하였습니다.


kubectl df-pv 공식 사이트

https://github.com/yashbhutwala/kubectl-df-pv

 

GitHub - yashbhutwala/kubectl-df-pv: kubectl plugin - giving admins df (disk free) like utility for persistent volumes

kubectl plugin - giving admins df (disk free) like utility for persistent volumes - GitHub - yashbhutwala/kubectl-df-pv: kubectl plugin - giving admins df (disk free) like utility for persistent vo...

github.com

 

반응형

'쿠버네티스 일반' 카테고리의 다른 글

Gitlab Helm Install on On-Prem  (0) 2021.07.30
Kubernetes PVC Replication  (8) 2021.07.28
Kube snapshot scheduler  (0) 2021.07.22
Kubernetes Snapshot 백업/복구  (0) 2021.07.16
Kube Project 수행 시 필요한 Tool Set List  (0) 2021.06.20