Kubernetes

MinIO - DirectPV & Performance

yu3papa 2025. 9. 20. 10:38

실습 환경 구성

AWS 서울리전에 EC2 리눅스를 1대 생성하고 4개의 EBS를 연결하여 DirectPV 실습

경량의 쿠버네티스인 k3s 이용하여 MinIO를 이용한 DirectPV 실습

(참고) CloudFormation을 EC2 생성시 아래 스크립트를 이용하여 k3s 및 관련 툴이 설치 됩니다.

hostnamectl --static set-hostname k3s-s

# Config convenience
echo 'alias vi=vim' >> /etc/profile
echo "sudo su -" >> /home/ubuntu/.bashrc
ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

# Disable ufw & apparmor 
systemctl stop ufw && systemctl disable ufw
systemctl stop apparmor && systemctl disable apparmor

# Install packages
apt update && apt-get install bridge-utils net-tools conntrack ngrep jq yq tree unzip kubecolor fio tuned -y

# local dns - hosts file
echo "192.168.10.10 k3s-s" >> /etc/hosts

# Install k3s-server
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.33.4+k3s1 INSTALL_K3S_EXEC=" --disable=traefik" K3S_KUBECONFIG_MODE="644" sh -s - server --token miniotoken

# Change kubeconfig
echo 'export KUBECONFIG=/etc/rancher/k3s/k3s.yaml' >> /etc/profile

# Install Helm
curl -s https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash

# Alias kubectl to k
echo 'alias kc=kubecolor' >> /etc/profile
echo 'alias k=kubectl' >> /etc/profile
echo 'complete -o default -F __start_kubectl k' >> /etc/profile

# kubectl Source the completion
source <(kubectl completion bash)
echo 'source <(kubectl completion bash)' >> /etc/profile

# Install Kubectx & Kubens
git clone https://github.com/ahmetb/kubectx /opt/kubectx
ln -s /opt/kubectx/kubens /usr/local/bin/kubens
ln -s /opt/kubectx/kubectx /usr/local/bin/kubectx

# Install Kubeps & Setting PS1
git clone https://github.com/jonmosco/kube-ps1.git /root/kube-ps1
cat <<"EOT" >> ~/.bash_profile
source /root/kube-ps1/kube-ps1.sh
KUBE_PS1_SYMBOL_ENABLE=true
function get_cluster_short() {
  echo "$1" | cut -d . -f1
}
KUBE_PS1_CLUSTER_FUNCTION=get_cluster_short
KUBE_PS1_SUFFIX=') '
PS1='$(kube_ps1)'$PS1
EOT

# Install MC : https://docs.min.io/community/minio-object-store/reference/minio-mc.html
curl -O https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
cp mc /usr/bin

minio-ec2-1node.yaml
0.01MB

 

  • VPC 1개,  EC2 인스턴스 1대 (Ubuntu 24.04 LTS, t3.xlarge - vCPU 4 , Mem 16, Data용 EBS 볼륨 4개)
  • CloudFormation 을 이용할 실습환경 배포
# CloudFormation 스택 배포
aws cloudformation deploy --template-file minio-ec2-1node.yaml --stack-name miniolab --parameter-overrides KeyName=yu3papa SgIngressSshCidr=125.176.27.182/32 --region ap-northeast-2
Waiting for changeset to be created..
Waiting for stack create/update to complete
Successfully created/updated stack - miniolab

# CloudFormation 스택 배포 완료 후 작업용 EC2 IP 출력

# 생성된 우분투 ec2 리눅스에 SSH 접속
ssh -i yu3papa.pem ubuntu@3.36.72.189
...(생략)...
Last login: Sat Sep 20 10:20:14 2025 from 125.176.27.182
(⎈|default:N/A) root@k3s-s:~#

 

EC2 접속후 krew 플러그인을 설치합니다.

kc get node -o wide
NAME    STATUS   ROLES                  AGE   VERSION        INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION    CONTAINER-RUNTIME
k3s-s   Ready    control-plane,master   20m   v1.33.4+k3s1   192.168.10.10   <none>        Ubuntu 24.04.3 LTS   6.14.0-1012-aws   containerd://2.0.5-k3s2

hostnamectl
 Static hostname: k3s-s
       Icon name: computer-vm
         Chassis: vm 🖴
      Machine ID: ec29fa949c1835c935138ba971cbb155
         Boot ID: 90ef457b6b4c4b14ab8f500a0c3afbcc
  Virtualization: amazon
Operating System: Ubuntu 24.04.3 LTS
          Kernel: Linux 6.14.0-1012-aws
    Architecture: x86-64
 Hardware Vendor: Amazon EC2
  Hardware Model: t3.xlarge
Firmware Version: 1.0
   Firmware Date: Mon 2017-10-16
    Firmware Age: 7y 11month 4d

# Install Krew
wget -P /root "https://github.com/kubernetes-sigs/krew/releases/latest/download/krew-linux_amd64.tar.gz"
tar zxvf "/root/krew-linux_amd64.tar.gz" --warning=no-unknown-keyword
./krew-linux_amd64 install krew
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH" # export PATH="$PATH:/root/.krew/bin"
echo 'export PATH="$PATH:/root/.krew/bin:/root/go/bin"' >> /etc/profile
kubectl krew install get-all neat rolesum pexec stern
kubectl krew list
PLUGIN   VERSION
get-all  v1.4.2
krew     v0.4.5
neat     v2.0.4
pexec    v0.4.1
rolesum  v1.5.5
stern    v1.33.0

 

위와 같이 설정한 EC2에는 총 5개의 EBS가 장착되어 있고 sda는 운영체제가 설치되어 있고, sdb~sde 까지 DirectPV에서 사용할 예정입니다.

 

DirectPV 실습전에 AWS의 EBS 볼륨에 대한 성능을 확인해 보겠습니다.

fio 라는 대표적인 디스크 성능측정도구를 이용하겠습니다.

lsblk -a -o NAME,KNAME,MAJ:MIN,SIZE,TYPE,MOUNTPOINT,FSTYPE,UUID,MODEL,SERIAL
NAME         KNAME      MAJ:MIN  SIZE TYPE MOUNTPOINT                   FSTYPE   UUID                                 MODEL                      SERIAL
loop0        loop0        7:0   27.6M loop /snap/amazon-ssm-agent/11797 squashfs
loop1        loop1        7:1   73.9M loop /snap/core22/2111            squashfs
loop2        loop2        7:2   50.8M loop /snap/snapd/25202            squashfs
loop3        loop3        7:3      0B loop
loop4        loop4        7:4      0B loop
loop5        loop5        7:5      0B loop
loop6        loop6        7:6      0B loop
loop7        loop7        7:7      0B loop
nvme2n1      nvme2n1    259:0     30G disk                                                                            Amazon Elastic Block Store vol0d1b5e3a4b519fd5c
nvme1n1      nvme1n1    259:1     30G disk                                                                            Amazon Elastic Block Store vol0ce96fb18da9930ca
nvme0n1      nvme0n1    259:2     30G disk                                                                            Amazon Elastic Block Store vol0f8084134c5b34fb5
├─nvme0n1p1  nvme0n1p1  259:5     29G part /                            ext4     04a692e8-fb29-4bab-b64d-906697110bb7
├─nvme0n1p14 nvme0n1p14 259:6      4M part
├─nvme0n1p15 nvme0n1p15 259:7    106M part /boot/efi                    vfat     F567-A352
└─nvme0n1p16 nvme0n1p16 259:8    913M part /boot                        ext4     13015197-4a14-4c28-bbd2-85341b3dff09
nvme3n1      nvme3n1    259:3     30G disk                                                                            Amazon Elastic Block Store vol037a27b57f3caaf4c
nvme4n1      nvme4n1    259:4     30G disk                                                                            Amazon Elastic Block Store vol0102cfd2ed23c6fb5

# 측정 기본
## IOPS: 초당 입출력 횟수
## Throughput: 초당 MB 전송량
## Block size, Queue depth, RW 패턴 (랜덤/순차, 읽기/쓰기) 조합에 따라 결과가 달라집니다.
## AWS gp3는 기본 IOPS 3000/Throughput 125MB/s

# 4k 랜덤 읽기/쓰기, iodepth=16, numjobs=4
## --rw=randrw : 랜덤 읽기/쓰기 혼합
## --rwmixread=70 : 70% 읽기 / 30% 쓰기
## --bs=4k : 4KB 블록 → IOPS 측정용
## --iodepth=16 : 큐 깊이 16
## --numjobs=4 : 4개의 병렬 job
## --time_based --runtime=60 : 60초 동안 측정
## --group_reporting : 그룹 단위 결과 요약

# Random Read/Write 성능측정
fio --name=randrw_test \

  --filename=/mnt/testfile \
  --size=4G \
  --rw=randrw \
  --rwmixread=70 \
  --bs=4k \
  --iodepth=16 \
  --numjobs=4 \
  --time_based \
  --runtime=60 \
  --group_reporting

## 읽기 평균 IOPS : 2388
  read: IOPS=2388, BW=9553KiB/s (9782kB/s)(560MiB/60003msec)

## 쓰기 평균 IOPS : 1030
  write: IOPS=1030, BW=4121KiB/s (4220kB/s)(241MiB/60003msec); 0 zone resets

## 디스크 활용률 : 읽기/쓰기 IO 수량(132k/49k) , 디스크 활용률 87%
Disk stats (read/write):
  nvme0n1: ios=132972/49709, sectors=1063776/420736, merge=0/8, ticks=232695/154017, in_queue=386713, util=87.09%

# 측정 결과 EBS의 3000 IOPS 를 지원하고 있음

 

minio 권장 커널 파라미터

MinIO의 최적 성능을 사용하려면 아래 주소에서 확인할 수 있는 권장 설정이 확인되어야 합니다.

MinIO 는 디스크의 최적의 성능을 사용하는게 목적인데,  어플리케이션 레벨에서 수행되는 파일 인덱스 처리, 안티바이러스 프로그램은  오히려 성능을 저하시키니 Disable 하는것을 권장합니다.

(참고로  AWS EC2  에는 아래 기능 자체가 설치되어 있지는 않습니다.)

# mlocate or plocate
systemctl disable --now plocate-updatedb 
systemctl list-timers | grep locate

# updatedb
systemctl disable --now updatedb.timer
systemctl list-timers | grep updatedb

# auditd
systemctl disable --now auditd
systemctl list-timers | grep audit

# Crowdstrike Falcon & Antivirus software (clamav)

 

DirectPV

쿠버네티스 CSI (Container Storage Interface) 표준을 따르는 DAS (direct attached storage) 로컬 볼륨

 

  • 구성요소 : CSI Driver, Plugin
    • 로컬 볼륨을 프로비저닝하는 Kubernetes 클러스터에 직접 설치된 DirectPV CSI 드라이버
    • 명령줄 인터페이스를 통해 DirectPV CSI 드라이버를 관리하기 위해 로컬 머신에 설치된 DirectPV 플러그인
    • 기본적으로 DirectPV는 분산형 영구 볼륨 관리자입니다. DirectPV는 SAN(Storage Area Network)이나 NAS(Network Attached Storage)와 같은 스토리지 시스템이 아닙니다. DirectPV를 사용하면 분산 환경의 여러 서버에서 드라이브를 검색, 포맷, 마운트, 예약 및 모니터링할 수 있습니다.
    • DirectPV는 마운트된 드라이브를 사용하여 Kubernetes가 PVC를 이행하는 데 사용하는 PV를  생성합니다.(https://kubernetes.io/docs/concepts/storage/persistent-volumes/)

DirectPV 설치 & Disk 구성

# DirectPV를 사용하기 위한 도구를 krew 플러그인에서 제공합니다.
k krew install directpv
Updated the local copy of plugin index.
Installing plugin: directpv
Installed plugin: directpv
\
 | Use this plugin:
 |      kubectl directpv
 | Documentation:
 |      https://github.com/minio/directpv
/
WARNING: You installed plugin "directpv" from the krew-index plugin repository.
   These plugins are not audited for security by the Krew maintainers.
   Run them at your own risk.

# 도움말 확인
k directpv -h

# 설치
k directpv install
Installing on unsupported Kubernetes v1.33

 ███████████████████████████████████████████████████████████████████████████ 100%

┌──────────────────────────────────────┬──────────────────────────┐
│ NAME                                 │ KIND                     │
├──────────────────────────────────────┼──────────────────────────┤
│ directpv                             │ Namespace                │
│ directpv-min-io                      │ ServiceAccount           │
│ directpv-min-io                      │ ClusterRole              │
│ directpv-min-io                      │ ClusterRoleBinding       │
│ directpv-min-io                      │ Role                     │
│ directpv-min-io                      │ RoleBinding              │
│ directpvdrives.directpv.min.io       │ CustomResourceDefinition │
│ directpvvolumes.directpv.min.io      │ CustomResourceDefinition │
│ directpvnodes.directpv.min.io        │ CustomResourceDefinition │
│ directpvinitrequests.directpv.min.io │ CustomResourceDefinition │
│ directpv-min-io                      │ CSIDriver                │
│ directpv-min-io                      │ StorageClass             │
│ node-server                          │ Daemonset                │
│ controller                           │ Deployment               │
└──────────────────────────────────────┴──────────────────────────┘

DirectPV installed successfully

# CRD 확인
k get crd | grep min
directpvdrives.directpv.min.io         2025-09-20T02:33:01Z
directpvinitrequests.directpv.min.io   2025-09-20T02:33:01Z
directpvnodes.directpv.min.io          2025-09-20T02:33:01Z
directpvvolumes.directpv.min.io        2025-09-20T02:33:01Z

k get sc
NAME                   PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
directpv-min-io        directpv-min-io         Delete          WaitForFirstConsumer   true                   2m10s
local-path (default)   rancher.io/local-path   Delete          WaitForFirstConsumer   false                  87m

k get sc directpv-min-io -o yaml | yq
{
  "allowVolumeExpansion": true,
  "allowedTopologies": [
    {
      "matchLabelExpressions": [
        {
          "key": "directpv.min.io/identity",
          "values": [
            "directpv-min-io"
          ]
        }
      ]
    }
  ],
  "apiVersion": "storage.k8s.io/v1",
  "kind": "StorageClass",
  "metadata": {
    "annotations": {
      "directpv.min.io/plugin-version": "v4.1.4"
    },
    "creationTimestamp": "2025-09-20T02:33:01Z",
    "finalizers": [
      "foregroundDeletion"
    ],
    "labels": {
      "application-name": "directpv.min.io",
      "application-type": "CSIDriver",
      "directpv.min.io/created-by": "kubectl-directpv",
      "directpv.min.io/version": "v1beta1"
    },
    "name": "directpv-min-io",
    "resourceVersion": "2102",
    "uid": "37c78747-d7cd-47e0-89ef-6ca2def20162"
  },
  "parameters": {
    "csi.storage.k8s.io/fstype": "xfs"
  },
  "provisioner": "directpv-min-io",
  "reclaimPolicy": "Delete",
  "volumeBindingMode": "WaitForFirstConsumer"
}

k get-all -n directpv

I0920 11:35:40.914210    9503 warnings.go:110] "Warning: v1 Endpoints is deprecated in v1.33+; use discovery.k8s.io/v1 EndpointSlice"
NAME                                                        NAMESPACE  AGE
configmap/kube-root-ca.crt                                  directpv   2m39s
pod/controller-77b4dd6494-7nhs7                             directpv   2m39s
pod/controller-77b4dd6494-pntfl                             directpv   2m39s
pod/controller-77b4dd6494-sqfsn                             directpv   2m39s
pod/node-server-l792h                                       directpv   2m39s
serviceaccount/default                                      directpv   2m39s
serviceaccount/directpv-min-io                              directpv   2m39s
controllerrevision.apps/node-server-76c6d7d5b9              directpv   2m39s
daemonset.apps/node-server                                  directpv   2m39s
deployment.apps/controller                                  directpv   2m39s
replicaset.apps/controller-77b4dd6494                       directpv   2m39s
lease.coordination.k8s.io/directpv-min-io                   directpv   2m29s
lease.coordination.k8s.io/external-resizer-directpv-min-io  directpv   2m28s
rolebinding.rbac.authorization.k8s.io/directpv-min-io       directpv   2m39s
role.rbac.authorization.k8s.io/directpv-min-io              directpv   2m39s

k get deploy,ds,pod -n directpv
NAME                         READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/controller   3/3     3            3           3m12s

NAME                         DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/node-server   1         1         1       1            1           <none>          3m12s

NAME                              READY   STATUS    RESTARTS   AGE
pod/controller-77b4dd6494-7nhs7   3/3     Running   0          3m12s
pod/controller-77b4dd6494-pntfl   3/3     Running   0          3m12s
pod/controller-77b4dd6494-sqfsn   3/3     Running   0          3m12s
pod/node-server-l792h             4/4     Running   0          3m12s

# 권한 확인
k rolesum directpv-min-io -n directpv
ServiceAccount: directpv/directpv-min-io
Secrets:

Policies:
• [RB] directpv/directpv-min-io ⟶  [R] directpv/directpv-min-io
  Resource                    Name  Exclude  Verbs  G L W C U P D DC
  leases.coordination.k8s.io  [*]     [-]     [-]   ✔ ✔ ✔ ✔ ✔ ✖ ✔ ✖


• [CRB] */directpv-min-io ⟶  [CR] */directpv-min-io
  Resource                                                          Name  Exclude  Verbs  G L W C U P D DC
  csinodes.storage.k8s.io                                           [*]     [-]     [-]   ✔ ✔ ✔ ✖ ✖ ✖ ✖ ✖
  customresourcedefinition.[apiextensions.k8s.io,directpv.min.io]   [*]     [-]     [-]   ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✖
  customresourcedefinitions.[apiextensions.k8s.io,directpv.min.io]  [*]     [-]     [-]   ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✖
  directpvdrives.directpv.min.io                                    [*]     [-]     [-]   ✔ ✔ ✔ ✔ ✔ ✖ ✔ ✖
  directpvinitrequests.directpv.min.io                              [*]     [-]     [-]   ✔ ✔ ✔ ✔ ✔ ✖ ✔ ✖
  directpvnodes.directpv.min.io                                     [*]     [-]     [-]   ✔ ✔ ✔ ✔ ✔ ✖ ✔ ✖
  directpvvolumes.directpv.min.io                                   [*]     [-]     [-]   ✔ ✔ ✔ ✔ ✔ ✖ ✔ ✖
  endpoints                                                         [*]     [-]     [-]   ✔ ✔ ✔ ✔ ✔ ✖ ✔ ✖
  events                                                            [*]     [-]     [-]   ✖ ✔ ✔ ✔ ✔ ✔ ✖ ✖
  leases.coordination.k8s.io                                        [*]     [-]     [-]   ✔ ✔ ✔ ✔ ✔ ✖ ✔ ✖
  nodes                                                             [*]     [-]     [-]   ✔ ✔ ✔ ✖ ✖ ✖ ✖ ✖
  persistentvolumeclaims                                            [*]     [-]     [-]   ✔ ✔ ✔ ✖ ✔ ✖ ✖ ✖
  persistentvolumeclaims/status                                     [*]     [-]     [-]   ✖ ✖ ✖ ✖ ✖ ✔ ✖ ✖
  persistentvolumes                                                 [*]     [-]     [-]   ✔ ✔ ✔ ✔ ✖ ✔ ✔ ✖
  pod                                                               [*]     [-]     [-]   ✔ ✔ ✔ ✖ ✖ ✖ ✖ ✖
  pods                                                              [*]     [-]     [-]   ✔ ✔ ✔ ✖ ✖ ✖ ✖ ✖
  secret                                                            [*]     [-]     [-]   ✔ ✔ ✔ ✖ ✖ ✖ ✖ ✖
  secrets                                                           [*]     [-]     [-]   ✔ ✔ ✔ ✖ ✖ ✖ ✖ ✖
  storageclasses.storage.k8s.io                                     [*]     [-]     [-]   ✔ ✔ ✔ ✖ ✖ ✖ ✖ ✖
  volumeattachments.storage.k8s.io                                  [*]     [-]     [-]   ✔ ✔ ✔ ✖ ✖ ✖ ✖ ✖
  volumesnapshotcontents.snapshot.storage.k8s.io                    [*]     [-]     [-]   ✔ ✔ ✖ ✖ ✖ ✖ ✖ ✖
  volumesnapshots.snapshot.storage.k8s.io                           [*]     [-]     [-]   ✔ ✔ ✖ ✖ ✖ ✖ ✖ ✖

k get directpvnodes.directpv.min.io
NAME    AGE
k3s-s   3m59s

k get directpvnodes.directpv.min.io -o yaml | yq
{
  "apiVersion": "v1",
  "items": [
    {
      "apiVersion": "directpv.min.io/v1beta1",
      "kind": "DirectPVNode",
      "metadata": {
        "creationTimestamp": "2025-09-20T02:33:11Z",
        "generation": 1,
        "labels": {
          "directpv.min.io/created-by": "node-controller",
          "directpv.min.io/node": "k3s-s",
          "directpv.min.io/version": "v1beta1"
        },
        "name": "k3s-s",
        "resourceVersion": "2188",
        "uid": "1cc32f4b-deee-4a39-82a8-3814b07339c9"
      },
      "spec": {},
      "status": {
        "devices": [
          {
            "deniedReason": "Too small",
            "id": "259:6$lVCOx26hZO2s872NOjNJra4S5ZaX9+Q56CQObs9o5+w=",
            "majorMinor": "259:6",
            "make": "Amazon Elastic Block Store (Part 14)",
            "name": "nvme0n1p14",
            "size": 4194304
          },
          {
            "deniedReason": "Mounted",
            "fsType": "ext4",
            "fsuuid": "13015197-4a14-4c28-bbd2-85341b3dff09",
            "id": "259:8$QUneuLFDTeOsXC2uD/VKWrKx/gv975cbvXzIYrtxX5Q=",
            "majorMinor": "259:8",
            "make": "Amazon Elastic Block Store (Part 16)",
            "name": "nvme0n1p16",
            "size": 957350400
          },
          {
            "deniedReason": "Mounted",
            "fsType": "ext4",
            "fsuuid": "04a692e8-fb29-4bab-b64d-906697110bb7",
            "id": "259:5$oDeIgERHCSJIXrymn/bbYWBp7fQGVXvfqoHG05mL1dE=",
            "majorMinor": "259:5",
            "make": "Amazon Elastic Block Store (Part 1)",
            "name": "nvme0n1p1",
            "size": 31137447424
          },
          {
            "id": "259:0$xi6Ajz0HPzT6wr/uMMViQ3psRBdWHeOwQOySleQps3o=",
            "majorMinor": "259:0",
            "make": "Amazon Elastic Block Store",
            "name": "nvme2n1",
            "size": 32212254720
          },
          {
            "deniedReason": "Too small; Mounted",
            "fsType": "vfat",
            "fsuuid": "F567-A352",
            "id": "259:7$4Ghr/DjNZtwvOsBElnLkwg4okZ2vh00OJifip6QiZfc=",
            "majorMinor": "259:7",
            "make": "Amazon Elastic Block Store (Part 15)",
            "name": "nvme0n1p15",
            "size": 111149056
          },
          {
            "deniedReason": "Partitioned",
            "id": "259:2$jc81R04kRB2F2ve1IxDxP8tYwx31Sh++HnpXlpnEmkk=",
            "majorMinor": "259:2",
            "make": "Amazon Elastic Block Store",
            "name": "nvme0n1",
            "size": 32212254720
          },
          {
            "id": "259:4$r2C4ZMPnjz1wv/ZB7XNgDtEcvApI3aLSJN1f8ejPQbw=",
            "majorMinor": "259:4",
            "make": "Amazon Elastic Block Store",
            "name": "nvme4n1",
            "size": 32212254720
          },
          {
            "id": "259:1$fBOgXnM6DRfwqOJX4IkNNw2u0MEwzvBRjAIxhootiIs=",
            "majorMinor": "259:1",
            "make": "Amazon Elastic Block Store",
            "name": "nvme1n1",
            "size": 32212254720
          },
          {
            "id": "259:3$ezOPU9Oa/SQcVhrmeyDJ4lxcPQjEgYqYrZwOfzgsiVY=",
            "majorMinor": "259:3",
            "make": "Amazon Elastic Block Store",
            "name": "nvme3n1",
            "size": 32212254720
          }
        ]
      }
    }
  ],
  "kind": "List",
  "metadata": {
    "resourceVersion": ""
  }
}

# node-server 로그
kubectl stern -n directpv -l selector.directpv.min.io.service=enabled
+ node-server-jm5bk › node-controller
+ node-server-jm5bk › liveness-probe
+ node-server-jm5bk › node-driver-registrar
+ node-server-jm5bk › node-server
...

# controller 로그
kubectl stern -n directpv -l selector.directpv.min.io=controller-4h5ww
+ controller-6d678bbb-8tt8z › csi-provisioner
+ controller-6d678bbb-8tt8z › controller
+ controller-6d678bbb-8tt8z › csi-resizer
...

# controller 파드 1대 정보 확인
kc describe pod -n directpv controller-75d5595d5b-bqwbs
...
Containers:
  csi-provisioner:
    ...
    Args:
      --v=3
      --timeout=300s
      --csi-address=$(CSI_ENDPOINT)
      --leader-election
      --feature-gates=Topology=true
      --strict-topology
    ...
    Environment:
      CSI_ENDPOINT:  unix:///csi/csi.sock
    Mounts:
      /csi from socket-dir (rw)
  ...
  csi-resizer:
    ...
    Args:
      --v=3
      --timeout=300s
      --csi-address=$(CSI_ENDPOINT)
      --leader-election
    ...
    Environment:
      CSI_ENDPOINT:  unix:///csi/csi.sock
    Mounts:
      /csi from socket-dir (rw)
  ...
  controller:
    ...
    Args:
      controller
      --identity=directpv-min-io
      -v=3
      --csi-endpoint=$(CSI_ENDPOINT)
      --kube-node-name=$(KUBE_NODE_NAME)
      --readiness-port=30443
    ...
    Environment:
      KUBE_NODE_NAME:   (v1:spec.nodeName)
      CSI_ENDPOINT:    unix:///csi/csi.sock
    Mounts:
      /csi from socket-dir (rw)
...
Volumes:
  socket-dir:
    Type:          HostPath (bare host directory volume)
    Path:          /var/lib/kubelet/plugins/controller-controller
    HostPathType:  DirectoryOrCreate
...


ls -l /var/lib/kubelet/plugins/controller-controller

total 0
srwxr-xr-x 1 root root 0 Sep 20 11:33 csi.sock

# 누가 leader 인지 확인
k get lease -n directpv
NAME                               HOLDER                               AGE
directpv-min-io                    1758335591796-9374-directpv-min-io   8m5s
external-resizer-directpv-min-io   controller-77b4dd6494-pntfl          8m4s

k get lease -n directpv -o yaml | yq
{
  "apiVersion": "v1",
  "items": [
    {
      "apiVersion": "coordination.k8s.io/v1",
      "kind": "Lease",
      "metadata": {
        "creationTimestamp": "2025-09-20T02:33:11Z",
        "name": "directpv-min-io",
        "namespace": "directpv",
        "resourceVersion": "2568",
        "uid": "587b607f-1a66-4352-9cbc-da3878c8e3cf"
      },
      "spec": {
        "acquireTime": "2025-09-20T02:33:11.797196Z",
        "holderIdentity": "1758335591796-9374-directpv-min-io",
        "leaseDurationSeconds": 15,
        "leaseTransitions": 0,
        "renewTime": "2025-09-20T02:41:37.290618Z"
      }
    },
    {
      "apiVersion": "coordination.k8s.io/v1",
      "kind": "Lease",
      "metadata": {
        "creationTimestamp": "2025-09-20T02:33:12Z",
        "name": "external-resizer-directpv-min-io",
        "namespace": "directpv",
        "resourceVersion": "2569",
        "uid": "ed2e8598-976e-43b8-ab96-69738511891b"
      },
      "spec": {
        "acquireTime": "2025-09-20T02:33:12.244361Z",
        "holderIdentity": "controller-77b4dd6494-pntfl",
        "leaseDurationSeconds": 15,
        "leaseTransitions": 0,
        "renewTime": "2025-09-20T02:41:37.777013Z"
      }
    }
  ],
  "kind": "List",
  "metadata": {
    "resourceVersion": ""
  }
}


k get pod -n directpv -l selector.directpv.min.io.service=enabled
NAME                READY   STATUS    RESTARTS   AGE
node-server-l792h   4/4     Running   0          9m9s

kc describe pod -n directpv -l selector.directpv.min.io.service=enabled
Name:             node-server-l792h
Namespace:        directpv
Priority:         0
Service Account:  directpv-min-io
Node:             k3s-s/192.168.10.10
Start Time:       Sat, 20 Sep 2025 11:33:01 +0900
Labels:           controller-revision-hash=76c6d7d5b9
                  pod-template-generation=1
                  selector.directpv.min.io=directpv-min-io-d3an7
                  selector.directpv.min.io.service=enabled
Annotations:      created-by: kubectl-directpv
Status:           Running
IP:               10.42.0.5
IPs:
  IP:           10.42.0.5
Controlled By:  DaemonSet/node-server
Containers:
  node-driver-registrar:
    Container ID:  containerd://e547d9fed659baf8866b56e627ecde175fd572a377d60cba04ca48ea948f9f57
    Image:         quay.io/minio/csi-node-driver-registrar@sha256:dafc7f667aa2e20d7f059c20db02dd6987c2624d64d8f166cd5930721be98ea9
    Image ID:      quay.io/minio/csi-node-driver-registrar@sha256:dafc7f667aa2e20d7f059c20db02dd6987c2624d64d8f166cd5930721be98ea9
    Port:          <none>
    Host Port:     <none>
    Args:
      --v=3
      --csi-address=unix:///csi/csi.sock
      --kubelet-registration-path=/var/lib/kubelet/plugins/directpv-min-io/csi.sock
    State:          Running
      Started:      Sat, 20 Sep 2025 11:33:05 +0900
    Ready:          True
    Restart Count:  0
    Environment:
      KUBE_NODE_NAME:   (v1:spec.nodeName)
    Mounts:
      /csi from socket-dir (rw)
      /registration from registration-dir (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-z6b2w (ro)
  node-server:
    Container ID:  containerd://bdf91ce5b4cf531b605c46d863cbf19187a893bcd6c8e95fdd795e57f5e52500
    Image:         quay.io/minio/directpv:v4.1.4
    Image ID:      quay.io/minio/directpv@sha256:83fd05fe114ed15c3975333c90cbe18c782d9c4d5c7ad6fdb8cc835e380ba505
    Ports:         30443/TCP, 9898/TCP, 10443/TCP
    Host Ports:    0/TCP, 0/TCP, 0/TCP
    Args:
      node-server
      -v=3
      --identity=directpv-min-io
      --csi-endpoint=$(CSI_ENDPOINT)
      --kube-node-name=$(KUBE_NODE_NAME)
      --readiness-port=30443
      --metrics-port=10443
    State:          Running
      Started:      Sat, 20 Sep 2025 11:33:11 +0900
    Ready:          True
    Restart Count:  0
    Liveness:       http-get http://:healthz/healthz delay=60s timeout=10s period=10s #success=1 #failure=5
    Readiness:      http-get http://:readinessport/ready delay=60s timeout=10s period=10s #success=1 #failure=5
    Environment:
      KUBE_NODE_NAME:   (v1:spec.nodeName)
      CSI_ENDPOINT:    unix:///csi/csi.sock
    Mounts:
      /csi from socket-dir (rw)
      /dev from devfs (ro)
      /run/udev/data from run-udev-data-dir (ro)
      /sys from sysfs (rw)
      /var/lib/direct-csi/ from direct-csi-common-root (rw)
      /var/lib/directpv/ from directpv-common-root (rw)
      /var/lib/kubelet/plugins from plugins-dir (rw)
      /var/lib/kubelet/pods from mountpoint-dir (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-z6b2w (ro)
  node-controller:
    Container ID:  containerd://3030445af8cac15c284cca614b81ad01c4c463f83d3e1081ddfe8d559d85f5bb
    Image:         quay.io/minio/directpv:v4.1.4
    Image ID:      quay.io/minio/directpv@sha256:83fd05fe114ed15c3975333c90cbe18c782d9c4d5c7ad6fdb8cc835e380ba505
    Port:          <none>
    Host Port:     <none>
    Args:
      node-controller
      -v=3
      --kube-node-name=$(KUBE_NODE_NAME)
    State:          Running
      Started:      Sat, 20 Sep 2025 11:33:11 +0900
    Ready:          True
    Restart Count:  0
    Environment:
      KUBE_NODE_NAME:   (v1:spec.nodeName)
    Mounts:
      /csi from socket-dir (rw)
      /dev from devfs (ro)
      /run/udev/data from run-udev-data-dir (ro)
      /sys from sysfs (rw)
      /var/lib/direct-csi/ from direct-csi-common-root (rw)
      /var/lib/directpv/ from directpv-common-root (rw)
      /var/lib/kubelet/plugins from plugins-dir (rw)
      /var/lib/kubelet/pods from mountpoint-dir (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-z6b2w (ro)
  liveness-probe:
    Container ID:  containerd://8ca4ce18d00186a9390e1a29ce5d077ea96950bf36d4efb52156d55c3996669b
    Image:         quay.io/minio/livenessprobe@sha256:783010e10e4d74b6b2b157a4b52772c5a264fd76bb2ad671054b8c3f706c8324
    Image ID:      quay.io/minio/livenessprobe@sha256:783010e10e4d74b6b2b157a4b52772c5a264fd76bb2ad671054b8c3f706c8324
    Port:          <none>
    Host Port:     <none>
    Args:
      --csi-address=/csi/csi.sock
      --health-port=9898
    State:          Running
      Started:      Sat, 20 Sep 2025 11:33:15 +0900
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /csi from socket-dir (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-z6b2w (ro)
Conditions:
  Type                        Status
  PodReadyToStartContainers   True
  Initialized                 True
  Ready                       True
  ContainersReady             True
  PodScheduled                True
Volumes:
  socket-dir:
    Type:          HostPath (bare host directory volume)
    Path:          /var/lib/kubelet/plugins/directpv-min-io
    HostPathType:  DirectoryOrCreate
  mountpoint-dir:
    Type:          HostPath (bare host directory volume)
    Path:          /var/lib/kubelet/pods
    HostPathType:  DirectoryOrCreate
  registration-dir:
    Type:          HostPath (bare host directory volume)
    Path:          /var/lib/kubelet/plugins_registry
    HostPathType:  DirectoryOrCreate
  plugins-dir:
    Type:          HostPath (bare host directory volume)
    Path:          /var/lib/kubelet/plugins
    HostPathType:  DirectoryOrCreate
  directpv-common-root:
    Type:          HostPath (bare host directory volume)
    Path:          /var/lib/directpv/
    HostPathType:  DirectoryOrCreate
  direct-csi-common-root:
    Type:          HostPath (bare host directory volume)
    Path:          /var/lib/direct-csi/
    HostPathType:  DirectoryOrCreate
  sysfs:
    Type:          HostPath (bare host directory volume)
    Path:          /sys
    HostPathType:  DirectoryOrCreate
  devfs:
    Type:          HostPath (bare host directory volume)
    Path:          /dev
    HostPathType:  DirectoryOrCreate
  run-udev-data-dir:
    Type:          HostPath (bare host directory volume)
    Path:          /run/udev/data
    HostPathType:  DirectoryOrCreate
  kube-api-access-z6b2w:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    Optional:                false
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/disk-pressure:NoSchedule op=Exists
                             node.kubernetes.io/memory-pressure:NoSchedule op=Exists
                             node.kubernetes.io/not-ready:NoExecute op=Exists
                             node.kubernetes.io/pid-pressure:NoSchedule op=Exists
                             node.kubernetes.io/unreachable:NoExecute op=Exists
                             node.kubernetes.io/unschedulable:NoSchedule op=Exists
Events:
  Type    Reason     Age    From               Message
  ----    ------     ----   ----               -------
  Normal  Scheduled  9m34s  default-scheduler  Successfully assigned directpv/node-server-l792h to k3s-s
  Normal  Pulling    9m35s  kubelet            Pulling image "quay.io/minio/csi-node-driver-registrar@sha256:dafc7f667aa2e20d7f059c20db02dd6987c2624d64d8f166cd5930721be98ea9"
  Normal  Pulled     9m31s  kubelet            Successfully pulled image "quay.io/minio/csi-node-driver-registrar@sha256:dafc7f667aa2e20d7f059c20db02dd6987c2624d64d8f166cd5930721be98ea9" in 3.589s (3.589s including waiting). Image size: 17235263 bytes.
  Normal  Created    9m31s  kubelet            Created container: node-driver-registrar
  Normal  Started    9m31s  kubelet            Started container node-driver-registrar
  Normal  Pulling    9m31s  kubelet            Pulling image "quay.io/minio/directpv:v4.1.4"
  Normal  Pulled     9m25s  kubelet            Successfully pulled image "quay.io/minio/directpv:v4.1.4" in 5.842s (5.842s including waiting). Image size: 94515090 bytes.
  Normal  Created    9m25s  kubelet            Created container: node-server
  Normal  Started    9m25s  kubelet            Started container node-server
  Normal  Pulled     9m25s  kubelet            Container image "quay.io/minio/directpv:v4.1.4" already present on machine
  Normal  Created    9m25s  kubelet            Created container: node-controller
  Normal  Started    9m25s  kubelet            Started container node-controller
  Normal  Pulling    9m25s  kubelet            Pulling image "quay.io/minio/livenessprobe@sha256:783010e10e4d74b6b2b157a4b52772c5a264fd76bb2ad671054b8c3f706c8324"
  Normal  Pulled     9m22s  kubelet            Successfully pulled image "quay.io/minio/livenessprobe@sha256:783010e10e4d74b6b2b157a4b52772c5a264fd76bb2ad671054b8c3f706c8324" in 3.294s (3.294s including waiting). Image size: 17370202 bytes.
  Normal  Created    9m22s  kubelet            Created container: liveness-probe
  Normal  Started    9m21s  kubelet            Started container liveness-probe

 

discover → init

  • DirectPV를 이용하여 물리디스크 관리
# 현재 노드의 모든 Disk가 관리가 되고 있지 않습니다.
k directpv info
┌─────────┬──────────┬───────────┬─────────┬────────┐
│ NODE    │ CAPACITY │ ALLOCATED │ VOLUMES │ DRIVES │
├─────────┼──────────┼───────────┼─────────┼────────┤
│ • k3s-s │ -        │ -         │ -       │ -      │
└─────────┴──────────┴───────────┴─────────┴────────┘

0 B/0 B used, 0 volumes, 0 drives

# 사용가능한 Disk 를 찾기
 k directpv discover

 Discovered node 'k3s-s' ✔

┌─────────────────────┬───────┬─────────┬────────┬────────────┬────────────────────────────┬───────────┬─────────────┐
│ ID                  │ NODE  │ DRIVE   │ SIZE   │ FILESYSTEM │ MAKE                       │ AVAILABLE │ DESCRIPTION │
├─────────────────────┼───────┼─────────┼────────┼────────────┼────────────────────────────┼───────────┼─────────────┤
│ 259:1$fBOgXnM6DR... │ k3s-s │ nvme1n1 │ 30 GiB │ -          │ Amazon Elastic Block Store │ YES       │ -           │
│ 259:0$xi6Ajz0HPz... │ k3s-s │ nvme2n1 │ 30 GiB │ -          │ Amazon Elastic Block Store │ YES       │ -           │
│ 259:3$ezOPU9Oa/S... │ k3s-s │ nvme3n1 │ 30 GiB │ -          │ Amazon Elastic Block Store │ YES       │ -           │
│ 259:4$r2C4ZMPnjz... │ k3s-s │ nvme4n1 │ 30 GiB │ -          │ Amazon Elastic Block Store │ YES       │ -           │
└─────────────────────┴───────┴─────────┴────────┴────────────┴────────────────────────────┴───────────┴─────────────┘

Generated 'drives.yaml' successfully.

# (참고) 적용 예외 설정 시 select: "no" 설정
cat drives.yaml | yq
{
  "version": "v1",
  "nodes": [
    {
      "name": "k3s-s",
      "drives": [
        {
          "id": "259:3$ezOPU9Oa/SQcVhrmeyDJ4lxcPQjEgYqYrZwOfzgsiVY=",
          "name": "nvme3n1",
          "size": 32212254720,
          "make": "Amazon Elastic Block Store",
          "select": "yes"
        },
        {
          "id": "259:4$r2C4ZMPnjz1wv/ZB7XNgDtEcvApI3aLSJN1f8ejPQbw=",
          "name": "nvme4n1",
          "size": 32212254720,
          "make": "Amazon Elastic Block Store",
          "select": "yes"
        },
        {
          "id": "259:1$fBOgXnM6DRfwqOJX4IkNNw2u0MEwzvBRjAIxhootiIs=",
          "name": "nvme1n1",
          "size": 32212254720,
          "make": "Amazon Elastic Block Store",
          "select": "yes"
        },
        {
          "id": "259:0$xi6Ajz0HPzT6wr/uMMViQ3psRBdWHeOwQOySleQps3o=",
          "name": "nvme2n1",
          "size": 32212254720,
          "make": "Amazon Elastic Block Store",
          "select": "yes"
        }
      ]
    }
  ]
}

# 초기화를 수행하면 기존 Disk의 내용이 삭제되므로 주의사항이 뜸
k directpv init drives.yaml
ERROR Initializing the drives will permanently erase existing data. Please review carefully before performing this *DANGEROUS* operation and retry this command with --dangerous flag.

# Perform initialization of drives which will permanently erase existing data
k directpv init drives.yaml --dangerous

 ███████████████████████████████████████████████████████████████████████████ 100%

 Processed initialization request '810a7d56-1a42-4875-bdb7-cfecbe8dc668' for node 'k3s-s' ✔

┌──────────────────────────────────────┬───────┬─────────┬─────────┐
│ REQUEST_ID                           │ NODE  │ DRIVE   │ MESSAGE │
├──────────────────────────────────────┼───────┼─────────┼─────────┤
│ 810a7d56-1a42-4875-bdb7-cfecbe8dc668 │ k3s-s │ nvme1n1 │ Success │
│ 810a7d56-1a42-4875-bdb7-cfecbe8dc668 │ k3s-s │ nvme2n1 │ Success │
│ 810a7d56-1a42-4875-bdb7-cfecbe8dc668 │ k3s-s │ nvme3n1 │ Success │
│ 810a7d56-1a42-4875-bdb7-cfecbe8dc668 │ k3s-s │ nvme4n1 │ Success │
└──────────────────────────────────────┴───────┴─────────┴─────────┘

k directpv list drives
┌───────┬─────────┬────────────────────────────┬────────┬────────┬─────────┬────────┐
│ NODE  │ NAME    │ MAKE                       │ SIZE   │ FREE   │ VOLUMES │ STATUS │
├───────┼─────────┼────────────────────────────┼────────┼────────┼─────────┼────────┤
│ k3s-s │ nvme1n1 │ Amazon Elastic Block Store │ 30 GiB │ 30 GiB │ -       │ Ready  │
│ k3s-s │ nvme2n1 │ Amazon Elastic Block Store │ 30 GiB │ 30 GiB │ -       │ Ready  │
│ k3s-s │ nvme3n1 │ Amazon Elastic Block Store │ 30 GiB │ 30 GiB │ -       │ Ready  │
│ k3s-s │ nvme4n1 │ Amazon Elastic Block Store │ 30 GiB │ 30 GiB │ -       │ Ready  │
└───────┴─────────┴────────────────────────────┴────────┴────────┴─────────┴────────┘

# 현재 120G 를 사용할 수 있음
k directpv info
┌─────────┬──────────┬───────────┬─────────┬────────┐
│ NODE    │ CAPACITY │ ALLOCATED │ VOLUMES │ DRIVES │
├─────────┼──────────┼───────────┼─────────┼────────┤
│ • k3s-s │ 120 GiB  │ 0 B       │ 0       │ 4      │
└─────────┴──────────┴───────────┴─────────┴────────┘

0 B/120 GiB used, 0 volumes, 4 drives

# Disk 초기화가 되었기 때문에 Mount Point가 설정되었음
lsblk
NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
loop0          7:0    0 27.6M  1 loop /snap/amazon-ssm-agent/11797
loop1          7:1    0 73.9M  1 loop /snap/core22/2111
loop2          7:2    0 50.8M  1 loop /snap/snapd/25202
loop3          7:3    0   16M  0 loop
nvme2n1      259:0    0   30G  0 disk /var/lib/directpv/mnt/94dca655-fc05-4e5f-a7d8-a8b1e953f220
nvme1n1      259:1    0   30G  0 disk /var/lib/directpv/mnt/afa0c1ac-a9a4-4cd5-8ea2-3d1cb51a9445
nvme0n1      259:2    0   30G  0 disk
├─nvme0n1p1  259:5    0   29G  0 part /
├─nvme0n1p14 259:6    0    4M  0 part
├─nvme0n1p15 259:7    0  106M  0 part /boot/efi
└─nvme0n1p16 259:8    0  913M  0 part /boot
nvme3n1      259:3    0   30G  0 disk /var/lib/directpv/mnt/94ca8715-bbb0-47ad-93f9-43af207e0240
nvme4n1      259:4    0   30G  0 disk /var/lib/directpv/mnt/668267e9-fdd2-46c9-b854-1ac1de70132f
(⎈|default:N/A) root@k3s-s:~# df -hT --type xfs
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/nvme3n1   xfs    30G  248M   30G   1% /var/lib/directpv/mnt/94ca8715-bbb0-47ad-93f9-43af207e0240
/dev/nvme2n1   xfs    30G  248M   30G   1% /var/lib/directpv/mnt/94dca655-fc05-4e5f-a7d8-a8b1e953f220
/dev/nvme4n1   xfs    30G  248M   30G   1% /var/lib/directpv/mnt/668267e9-fdd2-46c9-b854-1ac1de70132f
/dev/nvme1n1   xfs    30G  248M   30G   1% /var/lib/directpv/mnt/afa0c1ac-a9a4-4cd5-8ea2-3d1cb51a9445

tree -h /var/lib/directpv/
[4.0K]  /var/lib/directpv/
├── [4.0K]  mnt
│   ├── [  75]  668267e9-fdd2-46c9-b854-1ac1de70132f
│   ├── [  75]  94ca8715-bbb0-47ad-93f9-43af207e0240
│   ├── [  75]  94dca655-fc05-4e5f-a7d8-a8b1e953f220
│   └── [  75]  afa0c1ac-a9a4-4cd5-8ea2-3d1cb51a9445
└── [  40]  tmp

7 directories, 0 files

# CR 확인
k get directpvdrives.directpv.min.io -o yaml | yq
{
  "apiVersion": "v1",
  "items": [
    {
      "apiVersion": "directpv.min.io/v1beta1",
      "kind": "DirectPVDrive",
      "metadata": {
        "creationTimestamp": "2025-09-20T02:56:01Z",
        "finalizers": [
          "directpv.min.io/data-protection"
        ],
        "generation": 1,
        "labels": {
          "directpv.min.io/access-tier": "Default",
          "directpv.min.io/created-by": "directpv-driver",
          "directpv.min.io/drive-name": "nvme4n1",
          "directpv.min.io/node": "k3s-s",
          "directpv.min.io/version": "v1beta1"
        },
        "name": "668267e9-fdd2-46c9-b854-1ac1de70132f",
        "resourceVersion": "3180",
        "uid": "c58a2447-5406-4068-98b7-0fd2421ecc7f"
      },
      "spec": {},
      "status": {
        "allocatedCapacity": 0,
        "freeCapacity": 32196100096,
        "fsuuid": "668267e9-fdd2-46c9-b854-1ac1de70132f",
        "make": "Amazon Elastic Block Store",
        "status": "Ready",
        "topology": {
          "directpv.min.io/identity": "directpv-min-io",
          "directpv.min.io/node": "k3s-s",
          "directpv.min.io/rack": "default",
          "directpv.min.io/region": "default",
          "directpv.min.io/zone": "default"
        },
        "totalCapacity": 32212254720
      }
    },
    {
      "apiVersion": "directpv.min.io/v1beta1",
      "kind": "DirectPVDrive",
      "metadata": {
        "creationTimestamp": "2025-09-20T02:56:01Z",
        "finalizers": [
          "directpv.min.io/data-protection"
        ],
        "generation": 1,
        "labels": {
          "directpv.min.io/access-tier": "Default",
          "directpv.min.io/created-by": "directpv-driver",
          "directpv.min.io/drive-name": "nvme3n1",
          "directpv.min.io/node": "k3s-s",
          "directpv.min.io/version": "v1beta1"
        },
        "name": "94ca8715-bbb0-47ad-93f9-43af207e0240",
        "resourceVersion": "3178",
        "uid": "bbf8a31e-4e26-4742-a9db-941c60064ee0"
      },
      "spec": {},
      "status": {
        "allocatedCapacity": 0,
        "freeCapacity": 32196100096,
        "fsuuid": "94ca8715-bbb0-47ad-93f9-43af207e0240",
        "make": "Amazon Elastic Block Store",
        "status": "Ready",
        "topology": {
          "directpv.min.io/identity": "directpv-min-io",
          "directpv.min.io/node": "k3s-s",
          "directpv.min.io/rack": "default",
          "directpv.min.io/region": "default",
          "directpv.min.io/zone": "default"
        },
        "totalCapacity": 32212254720
      }
    },
    {
      "apiVersion": "directpv.min.io/v1beta1",
      "kind": "DirectPVDrive",
      "metadata": {
        "creationTimestamp": "2025-09-20T02:56:01Z",
        "finalizers": [
          "directpv.min.io/data-protection"
        ],
        "generation": 1,
        "labels": {
          "directpv.min.io/access-tier": "Default",
          "directpv.min.io/created-by": "directpv-driver",
          "directpv.min.io/drive-name": "nvme2n1",
          "directpv.min.io/node": "k3s-s",
          "directpv.min.io/version": "v1beta1"
        },
        "name": "94dca655-fc05-4e5f-a7d8-a8b1e953f220",
        "resourceVersion": "3179",
        "uid": "16b03e2e-ddfd-4de6-9af9-f0e70a2a4f32"
      },
      "spec": {},
      "status": {
        "allocatedCapacity": 0,
        "freeCapacity": 32196100096,
        "fsuuid": "94dca655-fc05-4e5f-a7d8-a8b1e953f220",
        "make": "Amazon Elastic Block Store",
        "status": "Ready",
        "topology": {
          "directpv.min.io/identity": "directpv-min-io",
          "directpv.min.io/node": "k3s-s",
          "directpv.min.io/rack": "default",
          "directpv.min.io/region": "default",
          "directpv.min.io/zone": "default"
        },
        "totalCapacity": 32212254720
      }
    },
    {
      "apiVersion": "directpv.min.io/v1beta1",
      "kind": "DirectPVDrive",
      "metadata": {
        "creationTimestamp": "2025-09-20T02:56:01Z",
        "finalizers": [
          "directpv.min.io/data-protection"
        ],
        "generation": 1,
        "labels": {
          "directpv.min.io/access-tier": "Default",
          "directpv.min.io/created-by": "directpv-driver",
          "directpv.min.io/drive-name": "nvme1n1",
          "directpv.min.io/node": "k3s-s",
          "directpv.min.io/version": "v1beta1"
        },
        "name": "afa0c1ac-a9a4-4cd5-8ea2-3d1cb51a9445",
        "resourceVersion": "3181",
        "uid": "158b3114-7960-4d06-af89-8b9b97c8d40e"
      },
      "spec": {},
      "status": {
        "allocatedCapacity": 0,
        "freeCapacity": 32196100096,
        "fsuuid": "afa0c1ac-a9a4-4cd5-8ea2-3d1cb51a9445",
        "make": "Amazon Elastic Block Store",
        "status": "Ready",
        "topology": {
          "directpv.min.io/identity": "directpv-min-io",
          "directpv.min.io/node": "k3s-s",
          "directpv.min.io/rack": "default",
          "directpv.min.io/region": "default",
          "directpv.min.io/zone": "default"
        },
        "totalCapacity": 32212254720
      }
    }
  ],
  "kind": "List",
  "metadata": {
    "resourceVersion": ""
  }
}

k get directpvdrives.directpv.min.io
NAME                                   AGE
668267e9-fdd2-46c9-b854-1ac1de70132f   58s
94ca8715-bbb0-47ad-93f9-43af207e0240   58s
94dca655-fc05-4e5f-a7d8-a8b1e953f220   58s
afa0c1ac-a9a4-4cd5-8ea2-3d1cb51a9445   58s

# OS 가 재기동되면 Mount 정보가 사라지므로, OS 재기동 후 유지하려면  /etc/fstab 파일 수정할 것
cat /etc/fstab
LABEL=cloudimg-rootfs   /        ext4   discard,commit=30,errors=remount-ro     0 1
LABEL=BOOT      /boot   ext4    defaults        0 2
LABEL=UEFI      /boot/efi       vfat    umask=0077      0 1

 

DirectPV 간단 테스트

# 현재 Drive만 만들었고, Volume은 아직 만들지 않은 상태입니다.
df -hT --type xfs
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/nvme3n1   xfs    30G  248M   30G   1% /var/lib/directpv/mnt/94ca8715-bbb0-47ad-93f9-43af207e0240
/dev/nvme2n1   xfs    30G  248M   30G   1% /var/lib/directpv/mnt/94dca655-fc05-4e5f-a7d8-a8b1e953f220
/dev/nvme4n1   xfs    30G  248M   30G   1% /var/lib/directpv/mnt/668267e9-fdd2-46c9-b854-1ac1de70132f
/dev/nvme1n1   xfs    30G  248M   30G   1% /var/lib/directpv/mnt/afa0c1ac-a9a4-4cd5-8ea2-3d1cb51a9445

k get directpvdrives,directpvvolumes
NAME                                                                 AGE
directpvdrive.directpv.min.io/668267e9-fdd2-46c9-b854-1ac1de70132f   23m
directpvdrive.directpv.min.io/94ca8715-bbb0-47ad-93f9-43af207e0240   23m
directpvdrive.directpv.min.io/94dca655-fc05-4e5f-a7d8-a8b1e953f220   23m
directpvdrive.directpv.min.io/afa0c1ac-a9a4-4cd5-8ea2-3d1cb51a9445   23m

# PVC를 만들때 SC를 directpv-min-io 를 지정하면 PV가 만들어지고 실제 볼륨도 생성됩니다.
#
cat << EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nginx-pvc
spec:
  volumeMode: Filesystem
  storageClassName: directpv-min-io
  accessModes: [ "ReadWriteOnce" ]
  resources:
    requests:
      storage: 8Mi
---
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  volumes:
    - name: nginx-volume
      persistentVolumeClaim:
        claimName: nginx-pvc
  containers:
    - name: nginx-container
      image: nginx:alpine
      volumeMounts:
        - mountPath: "/mnt"
          name: nginx-volume
EOF
persistentvolumeclaim/nginx-pvc unchanged
pod/nginx-pod created

k get pod,pvc,pv
NAME            READY   STATUS    RESTARTS   AGE
pod/nginx-pod   1/1     Running   0          93s

NAME                              STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      VOLUMEATTRIBUTESCLASS   AGE
persistentvolumeclaim/nginx-pvc   Bound    pvc-5d47ac1c-7d95-4e4c-8cef-357987f64e82   8Mi        RWO            directpv-min-io   <unset>                 2m27s

NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM               STORAGECLASS      VOLUMEATTRIBUTESCLASS   REASON   AGE
persistentvolume/pvc-5d47ac1c-7d95-4e4c-8cef-357987f64e82   8Mi        RWO            Delete           Bound    default/nginx-pvc   directpv-min-io   <unset>                          93s

# nginx POD에서 mount  정보를 확인해보면 8M 사이즈의 볼륨이 마운트 되었습니다.
k exec -it nginx-pod -- df -hT -t xfs
Filesystem           Type            Size      Used Available Use% Mounted on
/dev/nvme4n1         xfs             8.0M         0      8.0M   0% /mnt

# hello.txt 파일 생성
k exec -it nginx-pod -- sh -c 'echo hello > /mnt/hello.txt'
k exec -it nginx-pod -- sh -c 'cat /mnt/hello.txt'
hello

# HOST 에서 Block 정보 확인
lsblk
NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
loop0          7:0    0 27.6M  1 loop /snap/amazon-ssm-agent/11797
loop1          7:1    0 73.9M  1 loop /snap/core22/2111
loop2          7:2    0 50.8M  1 loop /snap/snapd/25202
loop3          7:3    0   16M  0 loop
nvme2n1      259:0    0   30G  0 disk /var/lib/directpv/mnt/94dca655-fc05-4e5f-a7d8-a8b1e953f220
nvme1n1      259:1    0   30G  0 disk /var/lib/directpv/mnt/afa0c1ac-a9a4-4cd5-8ea2-3d1cb51a9445
nvme0n1      259:2    0   30G  0 disk
├─nvme0n1p1  259:5    0   29G  0 part /
├─nvme0n1p14 259:6    0    4M  0 part
├─nvme0n1p15 259:7    0  106M  0 part /boot/efi
└─nvme0n1p16 259:8    0  913M  0 part /boot
nvme3n1      259:3    0   30G  0 disk /var/lib/directpv/mnt/94ca8715-bbb0-47ad-93f9-43af207e0240
nvme4n1      259:4    0   30G  0 disk /var/lib/kubelet/pods/476727a6-6ab9-4862-b4df-4036b2b3791f/volumes/kubernetes.io~csi/pvc-5d47ac1c-7d95-4e4c-8cef-357987f64e82/mount
                                      /var/lib/kubelet/plugins/kubernetes.io/csi/directpv-min-io/ece2c81c42117a6e6a095e54ba4ac74caa9f3fde023d6544fc4adf56513fbf27/globalmount
                                      /var/lib/directpv/mnt/668267e9-fdd2-46c9-b854-1ac1de70132f

tree -a /var/lib/directpv/mnt
/var/lib/directpv/mnt
├── 668267e9-fdd2-46c9-b854-1ac1de70132f
│   ├── .FSUUID.668267e9-fdd2-46c9-b854-1ac1de70132f -> .
│   ├── .directpv
│   │   └── meta.info
│   └── pvc-5d47ac1c-7d95-4e4c-8cef-357987f64e82
│       └── hello.txt
├── 94ca8715-bbb0-47ad-93f9-43af207e0240
│   ├── .FSUUID.94ca8715-bbb0-47ad-93f9-43af207e0240 -> .
│   └── .directpv
│       └── meta.info
├── 94dca655-fc05-4e5f-a7d8-a8b1e953f220
│   ├── .FSUUID.94dca655-fc05-4e5f-a7d8-a8b1e953f220 -> .
│   └── .directpv
│       └── meta.info
└── afa0c1ac-a9a4-4cd5-8ea2-3d1cb51a9445
    ├── .FSUUID.afa0c1ac-a9a4-4cd5-8ea2-3d1cb51a9445 -> .
    └── .directpv
        └── meta.info

cat /var/lib/directpv/mnt/*/pvc*/hello.txt
hello

k get directpvvolumes
NAME                                       AGE
pvc-5d47ac1c-7d95-4e4c-8cef-357987f64e82   5m49s

k get directpvvolumes -o yaml | yq
{
  "apiVersion": "v1",
  "items": [
    {
      "apiVersion": "directpv.min.io/v1beta1",
      "kind": "DirectPVVolume",
      "metadata": {
        "creationTimestamp": "2025-09-20T03:23:28Z",
        "finalizers": [
          "directpv.min.io/pv-protection",
          "directpv.min.io/purge-protection"
        ],
        "generation": 3,
        "labels": {
          "directpv.min.io/created-by": "directpv-controller",
          "directpv.min.io/drive": "668267e9-fdd2-46c9-b854-1ac1de70132f",
          "directpv.min.io/drive-name": "nvme4n1",
          "directpv.min.io/node": "k3s-s",
          "directpv.min.io/pod.name": "nginx-pod",
          "directpv.min.io/pod.namespace": "default",
          "directpv.min.io/version": "v1beta1"
        },
        "name": "pvc-5d47ac1c-7d95-4e4c-8cef-357987f64e82",
        "resourceVersion": "4366",
        "uid": "94d5c75e-b7cc-4d7d-ae0c-d35211c1085b"
      },
      "status": {
        "availableCapacity": 8388608,
        "dataPath": "/var/lib/directpv/mnt/668267e9-fdd2-46c9-b854-1ac1de70132f/.FSUUID.668267e9-fdd2-46c9-b854-1ac1de70132f/pvc-5d47ac1c-7d95-4e4c-8cef-357987f64e82",
        "fsuuid": "668267e9-fdd2-46c9-b854-1ac1de70132f",
        "stagingTargetPath": "/var/lib/kubelet/plugins/kubernetes.io/csi/directpv-min-io/ece2c81c42117a6e6a095e54ba4ac74caa9f3fde023d6544fc4adf56513fbf27/globalmount",
        "status": "Ready",
        "targetPath": "/var/lib/kubelet/pods/476727a6-6ab9-4862-b4df-4036b2b3791f/volumes/kubernetes.io~csi/pvc-5d47ac1c-7d95-4e4c-8cef-357987f64e82/mount",
        "totalCapacity": 8388608,
        "usedCapacity": 0
      }
    }
  ],
  "kind": "List",
  "metadata": {
    "resourceVersion": ""
  }
}

# NGINX POD를 삭제해도  PVC, PV는 삭제되지 않음
k delete pod nginx-pod
pod "nginx-pod" deleted

k get pvc,pv
NAME                              STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      VOLUMEATTRIBUTESCLASS   AGE
persistentvolumeclaim/nginx-pvc   Bound    pvc-5d47ac1c-7d95-4e4c-8cef-357987f64e82   8Mi        RWO            directpv-min-io   <unset>                 7m23s

NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM               STORAGECLASS      VOLUMEATTRIBUTESCLASS   REASON   AGE
persistentvolume/pvc-5d47ac1c-7d95-4e4c-8cef-357987f64e82   8Mi        RWO            Delete           Bound    default/nginx-pvc   directpv-min-io   <unset>                          6m29s

# PVC를 삭제하면 PV도 삭제되고 실제 볼륨도 삭제됨
k delete pvc nginx-pvc
persistentvolumeclaim "nginx-pvc" deleted

k get pvc,pv
No resources found

lsblk
NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
loop0          7:0    0 27.6M  1 loop /snap/amazon-ssm-agent/11797
loop1          7:1    0 73.9M  1 loop /snap/core22/2111
loop2          7:2    0 50.8M  1 loop /snap/snapd/25202
loop3          7:3    0   16M  0 loop
nvme2n1      259:0    0   30G  0 disk /var/lib/directpv/mnt/94dca655-fc05-4e5f-a7d8-a8b1e953f220
nvme1n1      259:1    0   30G  0 disk /var/lib/directpv/mnt/afa0c1ac-a9a4-4cd5-8ea2-3d1cb51a9445
nvme0n1      259:2    0   30G  0 disk
├─nvme0n1p1  259:5    0   29G  0 part /
├─nvme0n1p14 259:6    0    4M  0 part
├─nvme0n1p15 259:7    0  106M  0 part /boot/efi
└─nvme0n1p16 259:8    0  913M  0 part /boot
nvme3n1      259:3    0   30G  0 disk /var/lib/directpv/mnt/94ca8715-bbb0-47ad-93f9-43af207e0240
nvme4n1      259:4    0   30G  0 disk /var/lib/directpv/mnt/668267e9-fdd2-46c9-b854-1ac1de70132f

tree -a /var/lib/directpv/mnt
/var/lib/directpv/mnt
├── 668267e9-fdd2-46c9-b854-1ac1de70132f
│   ├── .FSUUID.668267e9-fdd2-46c9-b854-1ac1de70132f -> .
│   └── .directpv
│       └── meta.info
├── 94ca8715-bbb0-47ad-93f9-43af207e0240
│   ├── .FSUUID.94ca8715-bbb0-47ad-93f9-43af207e0240 -> .
│   └── .directpv
│       └── meta.info
├── 94dca655-fc05-4e5f-a7d8-a8b1e953f220
│   ├── .FSUUID.94dca655-fc05-4e5f-a7d8-a8b1e953f220 -> .
│   └── .directpv
│       └── meta.info
└── afa0c1ac-a9a4-4cd5-8ea2-3d1cb51a9445
    ├── .FSUUID.afa0c1ac-a9a4-4cd5-8ea2-3d1cb51a9445 -> .
    └── .directpv
        └── meta.info

13 directories, 4 files

 

특정 Drive 에 볼륨 사용 테스트

쿠버네티스 환경에서 API 리소스에 사용하는 Label은 아키텍처적으로 중요한 역할을 합니다. 특정 Label 이 있는 리소스를 필터링해서 Self Healing을 하거나, 네트워크 패킷을 포워딩하거나, 특정 Drive를 선택하게 할 수 있습니다.

vi create-storage-class.sh

# 첫번째 Disk에 tier=fast 레이블을 적용
# Label the 'nvme1n1' drive in all nodes as 'fast' with the 'tier' key.
kubectl directpv label drives --drives=nvme1n1 tier=fast
Label 'directpv.min.io/tier:fast' successfully set on k3s-s/nvme1n1

# Verify that the labels are properly set by using the list command
k directpv list drives --show-labels
┌───────┬─────────┬────────────────────────────┬────────┬────────┬─────────┬────────┬───────────┐
│ NODE  │ NAME    │ MAKE                       │ SIZE   │ FREE   │ VOLUMES │ STATUS │ LABELS    │
├───────┼─────────┼────────────────────────────┼────────┼────────┼─────────┼────────┼───────────┤
│ k3s-s │ nvme1n1 │ Amazon Elastic Block Store │ 30 GiB │ 30 GiB │ -       │ Ready  │ tier=fast │
│ k3s-s │ nvme2n1 │ Amazon Elastic Block Store │ 30 GiB │ 30 GiB │ -       │ Ready  │ -         │
│ k3s-s │ nvme3n1 │ Amazon Elastic Block Store │ 30 GiB │ 30 GiB │ -       │ Ready  │ -         │
│ k3s-s │ nvme4n1 │ Amazon Elastic Block Store │ 30 GiB │ 30 GiB │ -       │ Ready  │ -         │
└───────┴─────────┴────────────────────────────┴────────┴────────┴─────────┴────────┴───────────┘

k get sc
NAME                   PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
directpv-min-io        directpv-min-io         Delete          WaitForFirstConsumer   true                   119m
local-path (default)   rancher.io/local-path   Delete          WaitForFirstConsumer   false                  3h24m

# DirectPV를 이용하여 새로운 스토리지 클래스를 생성하는 스크립트 생성
# https://docs.min.io/community/minio-directpv/resource-management/scripts/#create-storage-classsh
vi create-storage-class.sh
chmod +x create-storage-class.sh

# 도움말 확인
./create-storage-class.sh -h
USAGE:
  create-storage-class.sh <NAME> <DRIVE-LABELS> ...
ARGUMENTS:
  NAME           new storage class name.
  DRIVE-LABELS   drive labels to be attached.
EXAMPLE:
  # Create new storage class 'fast-tier-storage' with drive labels 'directpv.min.io/tier: fast'
  $ create-storage-class.sh fast-tier-storage 'directpv.min.io/tier: fast'
  # Create new storage class with more than one drive label
  $ create-storage-class.sh fast-tier-unique 'directpv.min.io/tier: fast' 'directpv.min.io/volume-claim-id: bcea279a-df70-4d23-be41-9490f9933004'

# directpv.min.io/tier: fast 레이블을 이용하여 SC 생성
./create-storage-class.sh fast-tier-storage 'directpv.min.io/tier: fast'
storageclass.storage.k8s.io/fast-tier-storage created

k get sc
NAME                   PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
directpv-min-io        directpv-min-io         Delete          WaitForFirstConsumer   true                   120m
fast-tier-storage      directpv-min-io         Delete          WaitForFirstConsumer   true                   7s
local-path (default)   rancher.io/local-path   Delete          WaitForFirstConsumer   false                  3h25m

kc describe sc fast-tier-storag
Name:            fast-tier-storage
IsDefaultClass:  No
Annotations:     kubectl.kubernetes.io/last-applied-configuration={"allowVolumeExpansion":true,"allowedTopologies":[{"matchLabelExpressions":[{"key":"directpv.min.io/identity","values":["directpv-min-io"]}]}],"apiVersion":"storage.k8s.io/v1","kind":"StorageClass","metadata":{"annotations":{},"finalizers":["foregroundDeletion"],"labels":{"application-name":"directpv.min.io","application-type":"CSIDriver","directpv.min.io/created-by":"kubectl-directpv","directpv.min.io/version":"v1beta1"},"name":"fast-tier-storage"},"parameters":{"directpv.min.io/tier":"fast","fstype":"xfs"},"provisioner":"directpv-min-io","reclaimPolicy":"Delete","volumeBindingMode":"WaitForFirstConsumer"}

Provisioner:           directpv-min-io
Parameters:            directpv.min.io/tier=fast,fstype=xfs
AllowVolumeExpansion:  True
MountOptions:          <none>
ReclaimPolicy:         Delete
VolumeBindingMode:     WaitForFirstConsumer
AllowedTopologies:
  Term 0:              directpv.min.io/identity in [directpv-min-io]
Events:                <none>

# 특정레이블이 붙어 있는 DirectPV를 사용하는 PVC,PV, POD 생성
cat << EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nginx-pvc
spec:
  volumeMode: Filesystem
  storageClassName: fast-tier-storage
  accessModes: [ "ReadWriteOnce" ]
  resources:
    requests:
      storage: 8Mi
---
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  volumes:
    - name: nginx-volume
      persistentVolumeClaim:
        claimName: nginx-pvc
  containers:
    - name: nginx-container
      image: nginx:alpine
      volumeMounts:
        - mountPath: "/mnt"
          name: nginx-volume
EOF
persistentvolumeclaim/nginx-pvc created
pod/nginx-pod created

# 해당 drive가 있는 node 에 pv 가 만들어지고, 파드 역시 해당 node 에 기동되었음
k get pod,pvc,pv -owide
NAME            READY   STATUS    RESTARTS   AGE   IP           NODE    NOMINATED NODE   READINESS GATES
pod/nginx-pod   1/1     Running   0          15s   10.42.0.10   k3s-s   <none>           <none>

NAME                              STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS        VOLUMEATTRIBUTESCLASS   AGE   VOLUMEMODE
persistentvolumeclaim/nginx-pvc   Bound    pvc-825cf353-c880-449f-8482-15770a1ec908   8Mi        RWO            fast-tier-storage   <unset>                 15s   Filesystem

NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM               STORAGECLASS        VOLUMEATTRIBUTESCLASS   REASON   AGE   VOLUMEMODE
persistentvolume/pvc-825cf353-c880-449f-8482-15770a1ec908   8Mi        RWO            Delete           Bound    default/nginx-pvc   fast-tier-storage   <unset>                          15s   Filesystem

kc describe pv
Name:              pvc-825cf353-c880-449f-8482-15770a1ec908
Labels:            <none>
Annotations:       pv.kubernetes.io/provisioned-by: directpv-min-io
                   volume.kubernetes.io/provisioner-deletion-secret-name:
                   volume.kubernetes.io/provisioner-deletion-secret-namespace:
Finalizers:        [external-provisioner.volume.kubernetes.io/finalizer kubernetes.io/pv-protection]
StorageClass:      fast-tier-storage
Status:            Bound
Claim:             default/nginx-pvc
Reclaim Policy:    Delete
Access Modes:      RWO
VolumeMode:        Filesystem
Capacity:          8Mi
Node Affinity:
  Required Terms:
    Term 0:        directpv.min.io/region in [default]
                   directpv.min.io/zone in [default]
                   directpv.min.io/identity in [directpv-min-io]
                   directpv.min.io/node in [k3s-s]
                   directpv.min.io/rack in [default]
Message:
Source:
    Type:              CSI (a Container Storage Interface (CSI) volume source)
    Driver:            directpv-min-io
    FSType:            xfs
    VolumeHandle:      pvc-825cf353-c880-449f-8482-15770a1ec908
    ReadOnly:          false
    VolumeAttributes:      directpv.min.io/tier=fast
                           fstype=xfs
                           storage.kubernetes.io/csiProvisionerIdentity=1758335591796-9374-directpv-min-io
Events:                <none>

kc describe node
Name:               k3s-s
Roles:              control-plane,master
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/instance-type=k3s
                    beta.kubernetes.io/os=linux
                    directpv.min.io/identity=directpv-min-io
                    directpv.min.io/node=k3s-s
                    directpv.min.io/rack=default
                    directpv.min.io/region=default
                    directpv.min.io/zone=default
                    kubernetes.io/arch=amd64
                    kubernetes.io/hostname=k3s-s
                    kubernetes.io/os=linux
                    node-role.kubernetes.io/control-plane=true
                    node-role.kubernetes.io/master=true
                    node.kubernetes.io/instance-type=k3s
Annotations:        alpha.kubernetes.io/provided-node-ip: 192.168.10.10
                    csi.volume.kubernetes.io/nodeid: {"directpv-min-io":"k3s-s"}
                    flannel.alpha.coreos.com/backend-data: {"VNI":1,"VtepMAC":"a2:6c:e1:80:d1:28"}
                    flannel.alpha.coreos.com/backend-type: vxlan
                    flannel.alpha.coreos.com/kube-subnet-manager: true
                    flannel.alpha.coreos.com/public-ip: 192.168.10.10
                    k3s.io/hostname: k3s-s
                    k3s.io/internal-ip: 192.168.10.10
                    k3s.io/node-args: ["server","--disable","traefik","server","--token","********"]
                    k3s.io/node-config-hash: RE5Q4OCGORC6RD2UFXPER7OWY5V7RM6A3BSJ6UPUELZ3Z3HOPRCQ====
                    k3s.io/node-env: {"K3S_KUBECONFIG_MODE":"644"}
                    node.alpha.kubernetes.io/ttl: 0
                    volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp:  Sat, 20 Sep 2025 10:07:54 +0900
Taints:             <none>
Unschedulable:      false
Lease:
  HolderIdentity:  k3s-s
  AcquireTime:     <unset>
  RenewTime:       Sat, 20 Sep 2025 13:34:13 +0900
Conditions:
  Type             Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message
  ----             ------  -----------------                 ------------------                ------                       -------
  MemoryPressure   False   Sat, 20 Sep 2025 13:30:20 +0900   Sat, 20 Sep 2025 10:07:54 +0900   KubeletHasSufficientMemory   kubelet has sufficient memory available
  DiskPressure     False   Sat, 20 Sep 2025 13:30:20 +0900   Sat, 20 Sep 2025 10:07:54 +0900   KubeletHasNoDiskPressure     kubelet has no disk pressure
  PIDPressure      False   Sat, 20 Sep 2025 13:30:20 +0900   Sat, 20 Sep 2025 10:07:54 +0900   KubeletHasSufficientPID      kubelet has sufficient PID available
  Ready            True    Sat, 20 Sep 2025 13:30:20 +0900   Sat, 20 Sep 2025 10:07:54 +0900   KubeletReady                 kubelet is posting ready status
Addresses:
  InternalIP:  192.168.10.10
  Hostname:    k3s-s
Capacity:
  cpu:                4
  ephemeral-storage:  29378688Ki
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             16167188Ki
  pods:               110
Allocatable:
  cpu:                4
  ephemeral-storage:  28579587664
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             16167188Ki
  pods:               110
System Info:
  Machine ID:                 ec29fa949c1835c935138ba971cbb155
  System UUID:                ec29fa94-9c18-35c9-3513-8ba971cbb155
  Boot ID:                    90ef457b-6b4c-4b14-ab8f-500a0c3afbcc
  Kernel Version:             6.14.0-1012-aws
  OS Image:                   Ubuntu 24.04.3 LTS
  Operating System:           linux
  Architecture:               amd64
  Container Runtime Version:  containerd://2.0.5-k3s2
  Kubelet Version:            v1.33.4+k3s1
  Kube-Proxy Version:
PodCIDR:                      10.42.0.0/24
PodCIDRs:                     10.42.0.0/24
ProviderID:                   k3s://k3s-s
Non-terminated Pods:          (8 in total)
  Namespace                   Name                                       CPU Requests  CPU Limits  Memory Requests  Memory Limits  Age
  ---------                   ----                                       ------------  ----------  ---------------  -------------  ---
  default                     nginx-pod                                  0 (0%)        0 (0%)      0 (0%)           0 (0%)         38s
  directpv                    controller-77b4dd6494-7nhs7                0 (0%)        0 (0%)      0 (0%)           0 (0%)         121m
  directpv                    controller-77b4dd6494-pntfl                0 (0%)        0 (0%)      0 (0%)           0 (0%)         121m
  directpv                    controller-77b4dd6494-sqfsn                0 (0%)        0 (0%)      0 (0%)           0 (0%)         121m
  directpv                    node-server-l792h                          0 (0%)        0 (0%)      0 (0%)           0 (0%)         121m
  kube-system                 coredns-64fd4b4794-ms5h2                   100m (2%)     0 (0%)      70Mi (0%)        170Mi (1%)     3h26m
  kube-system                 local-path-provisioner-774c6665dc-bmshm    0 (0%)        0 (0%)      0 (0%)           0 (0%)         3h26m
  kube-system                 metrics-server-7bfffcd44-45wzq             100m (2%)     0 (0%)      70Mi (0%)        0 (0%)         3h26m
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource           Requests    Limits
  --------           --------    ------
  cpu                200m (5%)   0 (0%)
  memory             140Mi (0%)  170Mi (1%)
  ephemeral-storage  0 (0%)      0 (0%)
  hugepages-1Gi      0 (0%)      0 (0%)
  hugepages-2Mi      0 (0%)      0 (0%)
Events:              <none>

k get directpvnodes.directpv.min.io -o yaml | yq
{
  "apiVersion": "v1",
  "items": [
    {
      "apiVersion": "directpv.min.io/v1beta1",
      "kind": "DirectPVNode",
      "metadata": {
        "creationTimestamp": "2025-09-20T02:33:11Z",
        "generation": 3,
        "labels": {
          "directpv.min.io/created-by": "node-controller",
          "directpv.min.io/node": "k3s-s",
          "directpv.min.io/version": "v1beta1"
        },
        "name": "k3s-s",
        "resourceVersion": "3135",
        "uid": "1cc32f4b-deee-4a39-82a8-3814b07339c9"
      },
      "spec": {},
      "status": {
        "devices": [
          {
            "deniedReason": "Too small; Mounted",
            "fsType": "vfat",
            "fsuuid": "F567-A352",
            "id": "259:7$4Ghr/DjNZtwvOsBElnLkwg4okZ2vh00OJifip6QiZfc=",
            "majorMinor": "259:7",
            "make": "Amazon Elastic Block Store (Part 15)",
            "name": "nvme0n1p15",
            "size": 111149056
          },
          {
            "id": "259:3$ezOPU9Oa/SQcVhrmeyDJ4lxcPQjEgYqYrZwOfzgsiVY=",
            "majorMinor": "259:3",
            "make": "Amazon Elastic Block Store",
            "name": "nvme3n1",
            "size": 32212254720
          },
          {
            "id": "259:4$r2C4ZMPnjz1wv/ZB7XNgDtEcvApI3aLSJN1f8ejPQbw=",
            "majorMinor": "259:4",
            "make": "Amazon Elastic Block Store",
            "name": "nvme4n1",
            "size": 32212254720
          },
          {
            "id": "259:1$fBOgXnM6DRfwqOJX4IkNNw2u0MEwzvBRjAIxhootiIs=",
            "majorMinor": "259:1",
            "make": "Amazon Elastic Block Store",
            "name": "nvme1n1",
            "size": 32212254720
          },
          {
            "id": "259:0$xi6Ajz0HPzT6wr/uMMViQ3psRBdWHeOwQOySleQps3o=",
            "majorMinor": "259:0",
            "make": "Amazon Elastic Block Store",
            "name": "nvme2n1",
            "size": 32212254720
          },
          {
            "deniedReason": "Too small",
            "id": "259:6$lVCOx26hZO2s872NOjNJra4S5ZaX9+Q56CQObs9o5+w=",
            "majorMinor": "259:6",
            "make": "Amazon Elastic Block Store (Part 14)",
            "name": "nvme0n1p14",
            "size": 4194304
          },
          {
            "deniedReason": "Mounted",
            "fsType": "ext4",
            "fsuuid": "13015197-4a14-4c28-bbd2-85341b3dff09",
            "id": "259:8$QUneuLFDTeOsXC2uD/VKWrKx/gv975cbvXzIYrtxX5Q=",
            "majorMinor": "259:8",
            "make": "Amazon Elastic Block Store (Part 16)",
            "name": "nvme0n1p16",
            "size": 957350400
          },
          {
            "deniedReason": "Mounted",
            "fsType": "ext4",
            "fsuuid": "04a692e8-fb29-4bab-b64d-906697110bb7",
            "id": "259:5$oDeIgERHCSJIXrymn/bbYWBp7fQGVXvfqoHG05mL1dE=",
            "majorMinor": "259:5",
            "make": "Amazon Elastic Block Store (Part 1)",
            "name": "nvme0n1p1",
            "size": 31137447424
          },
          {
            "deniedReason": "Partitioned",
            "id": "259:2$jc81R04kRB2F2ve1IxDxP8tYwx31Sh++HnpXlpnEmkk=",
            "majorMinor": "259:2",
            "make": "Amazon Elastic Block Store",
            "name": "nvme0n1",
            "size": 32212254720
          }
        ]
      }
    }
  ],
  "kind": "List",
  "metadata": {
    "resourceVersion": ""
  }
}

kc describe directpvdrives.directpv.min.io
Name:         668267e9-fdd2-46c9-b854-1ac1de70132f
Namespace:
Labels:       directpv.min.io/access-tier=Default
              directpv.min.io/created-by=directpv-driver
              directpv.min.io/drive-name=nvme4n1
              directpv.min.io/node=k3s-s
              directpv.min.io/version=v1beta1
Annotations:  <none>
API Version:  directpv.min.io/v1beta1
Kind:         DirectPVDrive
Metadata:
  Creation Timestamp:  2025-09-20T02:56:01Z
  Finalizers:
    directpv.min.io/data-protection
  Generation:        3
  Resource Version:  4662
  UID:               c58a2447-5406-4068-98b7-0fd2421ecc7f
Spec:
Status:
  Allocated Capacity:  16154624
  Free Capacity:       32196100096
  Fsuuid:              668267e9-fdd2-46c9-b854-1ac1de70132f
  Make:                Amazon Elastic Block Store
  Status:              Ready
  Topology:
    directpv.min.io/identity:  directpv-min-io
    directpv.min.io/node:      k3s-s
    directpv.min.io/rack:      default
    directpv.min.io/region:    default
    directpv.min.io/zone:      default
  Total Capacity:              32212254720
Events:                        <none>


Name:         94ca8715-bbb0-47ad-93f9-43af207e0240
Namespace:
Labels:       directpv.min.io/access-tier=Default
              directpv.min.io/created-by=directpv-driver
              directpv.min.io/drive-name=nvme3n1
              directpv.min.io/node=k3s-s
              directpv.min.io/version=v1beta1
Annotations:  <none>
API Version:  directpv.min.io/v1beta1
Kind:         DirectPVDrive
Metadata:
  Creation Timestamp:  2025-09-20T02:56:01Z
  Finalizers:
    directpv.min.io/data-protection
  Generation:        1
  Resource Version:  3178
  UID:               bbf8a31e-4e26-4742-a9db-941c60064ee0
Spec:
Status:
  Allocated Capacity:  0
  Free Capacity:       32196100096
  Fsuuid:              94ca8715-bbb0-47ad-93f9-43af207e0240
  Make:                Amazon Elastic Block Store
  Status:              Ready
  Topology:
    directpv.min.io/identity:  directpv-min-io
    directpv.min.io/node:      k3s-s
    directpv.min.io/rack:      default
    directpv.min.io/region:    default
    directpv.min.io/zone:      default
  Total Capacity:              32212254720
Events:                        <none>


Name:         94dca655-fc05-4e5f-a7d8-a8b1e953f220
Namespace:
Labels:       directpv.min.io/access-tier=Default
              directpv.min.io/created-by=directpv-driver
              directpv.min.io/drive-name=nvme2n1
              directpv.min.io/node=k3s-s
              directpv.min.io/version=v1beta1
Annotations:  <none>
API Version:  directpv.min.io/v1beta1
Kind:         DirectPVDrive
Metadata:
  Creation Timestamp:  2025-09-20T02:56:01Z
  Finalizers:
    directpv.min.io/data-protection
  Generation:        1
  Resource Version:  3179
  UID:               16b03e2e-ddfd-4de6-9af9-f0e70a2a4f32
Spec:
Status:
  Allocated Capacity:  0
  Free Capacity:       32196100096
  Fsuuid:              94dca655-fc05-4e5f-a7d8-a8b1e953f220
  Make:                Amazon Elastic Block Store
  Status:              Ready
  Topology:
    directpv.min.io/identity:  directpv-min-io
    directpv.min.io/node:      k3s-s
    directpv.min.io/rack:      default
    directpv.min.io/region:    default
    directpv.min.io/zone:      default
  Total Capacity:              32212254720
Events:                        <none>


Name:         afa0c1ac-a9a4-4cd5-8ea2-3d1cb51a9445
Namespace:
Labels:       directpv.min.io/access-tier=Default
              directpv.min.io/created-by=directpv-driver
              directpv.min.io/drive-name=nvme1n1
              directpv.min.io/node=k3s-s
              directpv.min.io/tier=fast
              directpv.min.io/version=v1beta1
Annotations:  <none>
API Version:  directpv.min.io/v1beta1
Kind:         DirectPVDrive
Metadata:
  Creation Timestamp:  2025-09-20T02:56:01Z
  Finalizers:
    directpv.min.io/data-protection
    directpv.min.io.volume/pvc-825cf353-c880-449f-8482-15770a1ec908
  Generation:        2
  Resource Version:  7435
  UID:               158b3114-7960-4d06-af89-8b9b97c8d40e
Spec:
Status:
  Allocated Capacity:  8388608
  Free Capacity:       32187711488
  Fsuuid:              afa0c1ac-a9a4-4cd5-8ea2-3d1cb51a9445
  Make:                Amazon Elastic Block Store
  Status:              Ready
  Topology:
    directpv.min.io/identity:  directpv-min-io
    directpv.min.io/node:      k3s-s
    directpv.min.io/rack:      default
    directpv.min.io/region:    default
    directpv.min.io/zone:      default
  Total Capacity:              32212254720
Events:
  Type    Reason       Age   From                 Message
  ----    ------       ----  ----                 -------
  Normal  VolumeAdded  61s   directpv-controller  volume pvc-825cf353-c880-449f-8482-15770a1ec908 with size 8,388,608 is added
# 삭제
kubectl delete pod nginx-pod && kubectl delete pvc nginx-pvc
pod "nginx-pod" deleted
persistentvolumeclaim "nginx-pvc" deleted

# 삭제 확인
k get pv,pvc,po
No resources found

 

minio 설치 & 버킷 생성 mybucket

helm repo add minio-operator https://operator.min.io
"minio-operator" has been added to your repositories

# https://github.com/minio/operator/blob/master/helm/operator/values.yaml
cat << EOF > minio-operator-values.yaml
operator:
  env:
  - name: MINIO_OPERATOR_RUNTIME
    value: "Rancher"
  replicaCount: 1
EOF

helm install --namespace minio-operator --create-namespace minio-operator minio-operator/operator --values minio-operator-values.yaml
NAME: minio-operator
LAST DEPLOYED: Sat Sep 20 13:55:26 2025
NAMESPACE: minio-operator
STATUS: deployed
REVISION: 1
TEST SUITE: None

# 확인 : 참고로 현재는 오퍼레이터 관리 웹 미제공
k get crd
NAME                                   CREATED AT
addons.k3s.cattle.io                   2025-09-20T01:07:53Z
directpvdrives.directpv.min.io         2025-09-20T02:33:01Z
directpvinitrequests.directpv.min.io   2025-09-20T02:33:01Z
directpvnodes.directpv.min.io          2025-09-20T02:33:01Z
directpvvolumes.directpv.min.io        2025-09-20T02:33:01Z
etcdsnapshotfiles.k3s.cattle.io        2025-09-20T01:07:53Z
helmchartconfigs.helhttp://m.cattle.io 2025-09-20T01:07:53Z
helmcharts.helhttp://m.cattle.io 2025-09-20T01:07:53Z
policybindings.sts.min.io              2025-09-20T04:55:27Z
tenants.minio.min.io                   2025-09-20T04:55:27Z

k get-all -n minio-operator
I0920 13:56:03.476883   18612 warnings.go:110] "Warning: v1 Endpoints is deprecated in v1.33+; use discovery.k8s.io/v1 EndpointSlice"
NAME                                           NAMESPACE       AGE
configmap/kube-root-ca.crt                     minio-operator  36s
endpoints/operator                             minio-operator  36s
endpoints/sts                                  minio-operator  36s
pod/minio-operator-75946dc4db-g4qhv            minio-operator  36s
secret/sh.helhttp://m.release.v1.minio-operator.v1 minio-operator  36s
secret/sts-tls                                 minio-operator  26s
serviceaccount/default                         minio-operator  36s
serviceaccount/minio-operator                  minio-operator  36s
service/operator                               minio-operator  36s
service/sts                                    minio-operator  36s
deployment.apps/minio-operator                 minio-operator  36s
replicaset.apps/minio-operator-75946dc4db      minio-operator  36s
lease.coordination.k8s.io/minio-operator-lock  minio-operator  31s
endpointslice.discovery.k8s.io/operator-kwwh9  minio-operator  36s
endpointslice.discovery.k8s.io/sts-jrqkd       minio-operator  36s

k get pod,svc,ep -n minio-operator
Warning: v1 Endpoints is deprecated in v1.33+; use discovery.k8s.io/v1 EndpointSlice
NAME                                  READY   STATUS    RESTARTS   AGE
pod/minio-operator-75946dc4db-g4qhv   1/1     Running   0          44s

NAME               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/operator   ClusterIP   10.43.36.168    <none>        4221/TCP   44s
service/sts        ClusterIP   10.43.148.194   <none>        4223/TCP   44s

NAME                 ENDPOINTS         AGE
endpoints/operator   10.42.0.11:4221   44s
endpoints/sts        10.42.0.11:4223   44s

k exec -it -n minio-operator deploy/minio-operator -- env | grep MINIO
MINIO_OPERATOR_RUNTIME=Rancher

# If using Amazon Elastic Block Store (EBS) CSI driver : Please make sure to set xfs for "csi.storage.k8s.io/fstype" parameter under StorageClass.parameters.
k get sc directpv-min-io -o yaml | grep -i fstype
  csi.storage.k8s.io/fstype: xfs

# tenant values : https://github.com/minio/operator/blob/master/helm/tenant/values.yaml
cat << EOF > minio-tenant-1-values.yaml
tenant:
  name: tenant1

  configSecret:
    name: tenant1-env-configuration
    accessKey: minio
    secretKey: minio123

  pools:
    - servers: 1
      name: pool-0
      volumesPerServer: 4
      size: 10Gi
      storageClassName: directpv-min-io
  env:
    - name: MINIO_STORAGE_CLASS_STANDARD
      value: "EC:1"

  metrics:
    enabled: true
    port: 9000
    protocol: http
EOF

helm install --namespace tenant1 --create-namespace --values minio-tenant-1-values.yaml tenant1 minio-operator/tenant \
 && kubectl get tenants -A -w
NAME: tenant1
LAST DEPLOYED: Sat Sep 20 13:56:57 2025
NAMESPACE: tenant1
STATUS: deployed
REVISION: 1
TEST SUITE: None
NAMESPACE   NAME      STATE   HEALTH   AGE
tenant1     tenant1                    0s
tenant1     tenant1                    5s
tenant1     tenant1                    5s
tenant1     tenant1   Waiting for MinIO TLS Certificate            5s
tenant1     tenant1   Provisioning MinIO Cluster IP Service            15s
tenant1     tenant1   Provisioning Console Service                     15s
tenant1     tenant1   Provisioning MinIO Headless Service              15s
tenant1     tenant1   Provisioning MinIO Headless Service              16s
tenant1     tenant1   Provisioning MinIO Statefulset                   16s
tenant1     tenant1   Provisioning MinIO Statefulset                   16s
tenant1     tenant1   Provisioning MinIO Statefulset                   16s
tenant1     tenant1   Waiting for Tenant to be healthy                 17s

kubectl get tenants -n tenant1
NAME      STATE         HEALTH   AGE
tenant1   Initialized   green    4m29s

kubectl get tenants -n tenant1 -owide -o yaml | yq
{
  "apiVersion": "v1",
  "items": [
    {
      "apiVersion": "minio.min.io/v2",
      "kind": "Tenant",
      "metadata": {
        "annotations": {
          "meta.helm.sh/release-name": "tenant1",
          "meta.helm.sh/release-namespace": "tenant1",
          "prometheus.io/path": "/minio/v2/metrics/cluster",
          "prometheus.io/port": "9000",
          "prometheus.io/scheme": "http",
          "prometheus.io/scrape": "true"
        },
        "creationTimestamp": "2025-09-20T04:56:57Z",
        "generation": 1,
        "labels": {
          "app": "minio",
          "app.kubernetes.io/managed-by": "Helm"
        },
        "name": "tenant1",
        "namespace": "tenant1",
        "resourceVersion": "8886",
        "uid": "eb27e7f5-830f-4b19-9c76-1ff4a57c9891"
      },
      "spec": {
        "configuration": {
          "name": "tenant1-env-configuration"
        },
        "env": [
          {
            "name": "MINIO_STORAGE_CLASS_STANDARD",
            "value": "EC:1"
          }
        ],
        "features": {
          "bucketDNS": false,
          "enableSFTP": false
        },
        "image": "quay.io/minio/minio:RELEASE.2025-04-08T15-41-24Z",
        "imagePullPolicy": "IfNotPresent",
        "mountPath": "/export",
        "podManagementPolicy": "Parallel",
        "pools": [
          {
            "name": "pool-0",
            "servers": 1,
            "volumeClaimTemplate": {
              "metadata": {
                "name": "data"
              },
              "spec": {
                "accessModes": [
                  "ReadWriteOnce"
                ],
                "resources": {
                  "requests": {
                    "storage": "10Gi"
                  }
                },
                "storageClassName": "directpv-min-io"
              }
            },
            "volumesPerServer": 4
          }
        ],
        "poolsMetadata": {
          "annotations": {},
          "labels": {}
        },
        "prometheusOperator": false,
        "requestAutoCert": true,
        "subPath": "/data"
      },
      "status": {
        "availableReplicas": 1,
        "certificates": {
          "autoCertEnabled": true,
          "customCertificates": {}
        },
        "currentState": "Initialized",
        "drivesOnline": 4,
        "healthStatus": "green",
        "pools": [
          {
            "legacySecurityContext": false,
            "ssName": "tenant1-pool-0",
            "state": "PoolInitialized"
          }
        ],
        "revision": 0,
        "syncVersion": "v6.0.0",
        "usage": {
          "capacity": 32212094976,
          "rawCapacity": 42949459968,
          "rawUsage": 212992,
          "usage": 159744
        },
        "writeQuorum": 3
      }
    }
  ],
  "kind": "List",
  "metadata": {
    "resourceVersion": ""
  }
}

kc describe tenants -n tenant1
Name:         tenant1
Namespace:    tenant1
Labels:       app=minio
              app.kubernetes.io/managed-by=Helm
Annotations:  meta.helm.sh/release-name: tenant1
              meta.helm.sh/release-namespace: tenant1
              prometheus.io/path: /minio/v2/metrics/cluster
              prometheus.io/port: 9000
              prometheus.io/scheme: http
              prometheus.io/scrape: true
API Version:  minio.min.io/v2
Kind:         Tenant
Metadata:
  Creation Timestamp:  2025-09-20T04:56:57Z
  Generation:          1
  Resource Version:    8886
  UID:                 eb27e7f5-830f-4b19-9c76-1ff4a57c9891
Spec:
  Configuration:
    Name:  tenant1-env-configuration
  Env:
    Name:   MINIO_STORAGE_CLASS_STANDARD
    Value:  EC:1
  Features:
    Bucket DNS:           false
    Enable SFTP:          false
  Image:                  quay.io/minio/minio:RELEASE.2025-04-08T15-41-24Z
  Image Pull Policy:      IfNotPresent
  Mount Path:             /export
  Pod Management Policy:  Parallel
  Pools:
    Name:     pool-0
    Servers:  1
    Volume Claim Template:
      Metadata:
        Name:  data
      Spec:
        Access Modes:
          ReadWriteOnce
        Resources:
          Requests:
            Storage:         10Gi
        Storage Class Name:  directpv-min-io
    Volumes Per Server:      4
  Pools Metadata:
    Annotations:
    Labels:
  Prometheus Operator:  false
  Request Auto Cert:    true
  Sub Path:             /data
Status:
  Available Replicas:  1
  Certificates:
    Auto Cert Enabled:  true
    Custom Certificates:
  Current State:  Initialized
  Drives Online:  4
  Health Status:  green
  Pools:
    Legacy Security Context:  false
    Ss Name:                  tenant1-pool-0
    State:                    PoolInitialized
  Revision:                   0
  Sync Version:               v6.0.0
  Usage:
    Capacity:      32212094976
    Raw Capacity:  42949459968
    Raw Usage:     212992
    Usage:         159744
  Write Quorum:    3
Events:
  Type     Reason                 Age                    From            Message
  ----     ------                 ----                   ----            -------
  Normal   CSRCreated             5m38s                  minio-operator  MinIO CSR Created
  Normal   SvcCreated             5m28s                  minio-operator  MinIO Service Created
  Normal   SvcCreated             5m28s                  minio-operator  Console Service Created
  Normal   SvcCreated             5m28s                  minio-operator  Headless Service created
  Normal   PoolCreated            5m27s                  minio-operator  Tenant pool pool-0 created
  Normal   Updated                5m23s                  minio-operator  Headless Service Updated
  Warning  WaitingMinIOIsHealthy  5m13s (x4 over 5m26s)  minio-operator  Waiting for MinIO to be ready

lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
loop0         7:0    0 27.6M  1 loop /snap/amazon-ssm-agent/11797
loop1         7:1    0 73.9M  1 loop /snap/core22/2111
loop2         7:2    0 50.8M  1 loop /snap/snapd/25202
loop3         7:3    0   16M  0 loop
nvme2n1     259:0    0   30G  0 disk /var/lib/kubelet/pods/96e4e9ba-def5-4051-a89a-8d3bf6efd8b1/volumes/kubernetes.io~csi/pvc-6aa17a8c-3e37-4dbd-a837-32683b6d765f/mount
                                     /var/lib/kubelet/plugins/kubernetes.io/csi/directpv-min-io/1303f8614e90f62edef9c5293c7415b999bccfac7d71c9b210b24281e6837828/globalmount
                                     /var/lib/directpv/mnt/94dca655-fc05-4e5f-a7d8-a8b1e953f220
nvme1n1     259:1    0   30G  0 disk /var/lib/kubelet/pods/96e4e9ba-def5-4051-a89a-8d3bf6efd8b1/volumes/kubernetes.io~csi/pvc-a6e3bbf9-ab29-41d8-ac3b-c1d8920e0d98/mount
                                     /var/lib/kubelet/plugins/kubernetes.io/csi/directpv-min-io/b1fcff20409de9e419cac67cfada28d24fd259e30f5ea0f294205e4619cff68b/globalmount
                                     /var/lib/directpv/mnt/afa0c1ac-a9a4-4cd5-8ea2-3d1cb51a9445
nvme0n1     259:2    0   30G  0 disk
├─nvme0n1p1 259:5    0   29G  0 part /
├─nvme0n1p14
│           259:6    0    4M  0 part
├─nvme0n1p15
│           259:7    0  106M  0 part /boot/efi
└─nvme0n1p16
            259:8    0  913M  0 part /boot
nvme3n1     259:3    0   30G  0 disk /var/lib/kubelet/pods/96e4e9ba-def5-4051-a89a-8d3bf6efd8b1/volumes/kubernetes.io~csi/pvc-4a372c6f-6fe1-4ec8-8616-eba5e6b03b57/mount
                                     /var/lib/kubelet/plugins/kubernetes.io/csi/directpv-min-io/2f2e1ad824df2e9a63b1c08f2944717c807ba77d59ae6b36686aea080bf56e9d/globalmount
                                     /var/lib/directpv/mnt/94ca8715-bbb0-47ad-93f9-43af207e0240
nvme4n1     259:4    0   30G  0 disk /var/lib/kubelet/pods/96e4e9ba-def5-4051-a89a-8d3bf6efd8b1/volumes/kubernetes.io~csi/pvc-214d8389-2b4c-48b6-b2d4-67fc413e78fd/mount
                                     /var/lib/kubelet/plugins/kubernetes.io/csi/directpv-min-io/ff3df50badeadcbe76e413d19beabe12727118b85265d067058892fd39269817/globalmount
                                     /var/lib/directpv/mnt/668267e9-fdd2-46c9-b854-1ac1de70132f

 k directpv info
┌─────────┬──────────┬───────────┬─────────┬────────┐
│ NODE    │ CAPACITY │ ALLOCATED │ VOLUMES │ DRIVES │
├─────────┼──────────┼───────────┼─────────┼────────┤
│ • k3s-s │ 120 GiB  │ 40 GiB    │ 4       │ 4      │
└─────────┴──────────┴───────────┴─────────┴────────┘

40 GiB/120 GiB used, 4 volumes, 4 drives

k directpv list drives
┌───────┬─────────┬────────────────────────────┬────────┬────────┬─────────┬────────┐
│ NODE  │ NAME    │ MAKE                       │ SIZE   │ FREE   │ VOLUMES │ STATUS │
├───────┼─────────┼────────────────────────────┼────────┼────────┼─────────┼────────┤
│ k3s-s │ nvme1n1 │ Amazon Elastic Block Store │ 30 GiB │ 20 GiB │ 1       │ Ready  │
│ k3s-s │ nvme2n1 │ Amazon Elastic Block Store │ 30 GiB │ 20 GiB │ 1       │ Ready  │
│ k3s-s │ nvme3n1 │ Amazon Elastic Block Store │ 30 GiB │ 20 GiB │ 1       │ Ready  │
│ k3s-s │ nvme4n1 │ Amazon Elastic Block Store │ 30 GiB │ 20 GiB │ 1       │ Ready  │
└───────┴─────────┴────────────────────────────┴────────┴────────┴─────────┴────────┘

k directpv list volumes
┌──────────────────────────────────────────┬──────────┬───────┬─────────┬──────────────────┬──────────────┬─────────┐
│ VOLUME                                   │ CAPACITY │ NODE  │ DRIVE   │ PODNAME          │ PODNAMESPACE │ STATUS  │
├──────────────────────────────────────────┼──────────┼───────┼─────────┼──────────────────┼──────────────┼─────────┤
│ pvc-a6e3bbf9-ab29-41d8-ac3b-c1d8920e0d98 │ 10 GiB   │ k3s-s │ nvme1n1 │ tenant1-pool-0-0 │ tenant1      │ Bounded │
│ pvc-6aa17a8c-3e37-4dbd-a837-32683b6d765f │ 10 GiB   │ k3s-s │ nvme2n1 │ tenant1-pool-0-0 │ tenant1      │ Bounded │
│ pvc-4a372c6f-6fe1-4ec8-8616-eba5e6b03b57 │ 10 GiB   │ k3s-s │ nvme3n1 │ tenant1-pool-0-0 │ tenant1      │ Bounded │
│ pvc-214d8389-2b4c-48b6-b2d4-67fc413e78fd │ 10 GiB   │ k3s-s │ nvme4n1 │ tenant1-pool-0-0 │ tenant1      │ Bounded │
└──────────────────────────────────────────┴──────────┴───────┴─────────┴──────────────────┴──────────────┴─────────┘

k get directpvvolumes.directpv.min.io
NAME                                       AGE
pvc-214d8389-2b4c-48b6-b2d4-67fc413e78fd   6m23s
pvc-4a372c6f-6fe1-4ec8-8616-eba5e6b03b57   6m23s
pvc-6aa17a8c-3e37-4dbd-a837-32683b6d765f   6m23s
pvc-a6e3bbf9-ab29-41d8-ac3b-c1d8920e0d98   6m23s

k get directpvvolumes.directpv.min.io -o yaml | yq
{
  "apiVersion": "v1",
  "items": [
    {
      "apiVersion": "directpv.min.io/v1beta1",
      "kind": "DirectPVVolume",
      "metadata": {
        "creationTimestamp": "2025-09-20T04:57:13Z",
        "finalizers": [
          "directpv.min.io/pv-protection",
          "directpv.min.io/purge-protection"
        ],
        "generation": 3,
        "labels": {
          "directpv.min.io/created-by": "directpv-controller",
          "directpv.min.io/drive": "668267e9-fdd2-46c9-b854-1ac1de70132f",
          "directpv.min.io/drive-name": "nvme4n1",
          "directpv.min.io/node": "k3s-s",
          "directpv.min.io/pod.name": "tenant1-pool-0-0",
          "directpv.min.io/pod.namespace": "tenant1",
          "directpv.min.io/version": "v1beta1"
        },
        "name": "pvc-214d8389-2b4c-48b6-b2d4-67fc413e78fd",
        "resourceVersion": "8674",
        "uid": "10192b4c-44b1-4355-af69-1abb230d52b1"
      },
      "status": {
        "availableCapacity": 10737418240,
        "dataPath": "/var/lib/directpv/mnt/668267e9-fdd2-46c9-b854-1ac1de70132f/.FSUUID.668267e9-fdd2-46c9-b854-1ac1de70132f/pvc-214d8389-2b4c-48b6-b2d4-67fc413e78fd",
        "fsuuid": "668267e9-fdd2-46c9-b854-1ac1de70132f",
        "stagingTargetPath": "/var/lib/kubelet/plugins/kubernetes.io/csi/directpv-min-io/ff3df50badeadcbe76e413d19beabe12727118b85265d067058892fd39269817/globalmount",
        "status": "Ready",
        "targetPath": "/var/lib/kubelet/pods/96e4e9ba-def5-4051-a89a-8d3bf6efd8b1/volumes/kubernetes.io~csi/pvc-214d8389-2b4c-48b6-b2d4-67fc413e78fd/mount",
        "totalCapacity": 10737418240,
        "usedCapacity": 0
      }
    },
    {
      "apiVersion": "directpv.min.io/v1beta1",
      "kind": "DirectPVVolume",
      "metadata": {
        "creationTimestamp": "2025-09-20T04:57:13Z",
        "finalizers": [
          "directpv.min.io/pv-protection",
          "directpv.min.io/purge-protection"
        ],
        "generation": 4,
        "labels": {
          "directpv.min.io/created-by": "directpv-controller",
          "directpv.min.io/drive": "94ca8715-bbb0-47ad-93f9-43af207e0240",
          "directpv.min.io/drive-name": "nvme3n1",
          "directpv.min.io/node": "k3s-s",
          "directpv.min.io/pod.name": "tenant1-pool-0-0",
          "directpv.min.io/pod.namespace": "tenant1",
          "directpv.min.io/version": "v1beta1"
        },
        "name": "pvc-4a372c6f-6fe1-4ec8-8616-eba5e6b03b57",
        "resourceVersion": "8671",
        "uid": "bfc7feef-d793-466a-bf01-73bb86bbacf3"
      },
      "status": {
        "availableCapacity": 10737418240,
        "dataPath": "/var/lib/directpv/mnt/94ca8715-bbb0-47ad-93f9-43af207e0240/.FSUUID.94ca8715-bbb0-47ad-93f9-43af207e0240/pvc-4a372c6f-6fe1-4ec8-8616-eba5e6b03b57",
        "fsuuid": "94ca8715-bbb0-47ad-93f9-43af207e0240",
        "stagingTargetPath": "/var/lib/kubelet/plugins/kubernetes.io/csi/directpv-min-io/2f2e1ad824df2e9a63b1c08f2944717c807ba77d59ae6b36686aea080bf56e9d/globalmount",
        "status": "Ready",
        "targetPath": "/var/lib/kubelet/pods/96e4e9ba-def5-4051-a89a-8d3bf6efd8b1/volumes/kubernetes.io~csi/pvc-4a372c6f-6fe1-4ec8-8616-eba5e6b03b57/mount",
        "totalCapacity": 10737418240,
        "usedCapacity": 0
      }
    },
    {
      "apiVersion": "directpv.min.io/v1beta1",
      "kind": "DirectPVVolume",
      "metadata": {
        "creationTimestamp": "2025-09-20T04:57:13Z",
        "finalizers": [
          "directpv.min.io/pv-protection",
          "directpv.min.io/purge-protection"
        ],
        "generation": 3,
        "labels": {
          "directpv.min.io/created-by": "directpv-controller",
          "directpv.min.io/drive": "94dca655-fc05-4e5f-a7d8-a8b1e953f220",
          "directpv.min.io/drive-name": "nvme2n1",
          "directpv.min.io/node": "k3s-s",
          "directpv.min.io/pod.name": "tenant1-pool-0-0",
          "directpv.min.io/pod.namespace": "tenant1",
          "directpv.min.io/version": "v1beta1"
        },
        "name": "pvc-6aa17a8c-3e37-4dbd-a837-32683b6d765f",
        "resourceVersion": "8673",
        "uid": "7a87c555-55d2-4397-9e20-095fb47819b1"
      },
      "status": {
        "availableCapacity": 10737418240,
        "dataPath": "/var/lib/directpv/mnt/94dca655-fc05-4e5f-a7d8-a8b1e953f220/.FSUUID.94dca655-fc05-4e5f-a7d8-a8b1e953f220/pvc-6aa17a8c-3e37-4dbd-a837-32683b6d765f",
        "fsuuid": "94dca655-fc05-4e5f-a7d8-a8b1e953f220",
        "stagingTargetPath": "/var/lib/kubelet/plugins/kubernetes.io/csi/directpv-min-io/1303f8614e90f62edef9c5293c7415b999bccfac7d71c9b210b24281e6837828/globalmount",
        "status": "Ready",
        "targetPath": "/var/lib/kubelet/pods/96e4e9ba-def5-4051-a89a-8d3bf6efd8b1/volumes/kubernetes.io~csi/pvc-6aa17a8c-3e37-4dbd-a837-32683b6d765f/mount",
        "totalCapacity": 10737418240,
        "usedCapacity": 0
      }
    },
    {
      "apiVersion": "directpv.min.io/v1beta1",
      "kind": "DirectPVVolume",
      "metadata": {
        "creationTimestamp": "2025-09-20T04:57:13Z",
        "finalizers": [
          "directpv.min.io/pv-protection",
          "directpv.min.io/purge-protection"
        ],
        "generation": 3,
        "labels": {
          "directpv.min.io/created-by": "directpv-controller",
          "directpv.min.io/drive": "afa0c1ac-a9a4-4cd5-8ea2-3d1cb51a9445",
          "directpv.min.io/drive-name": "nvme1n1",
          "directpv.min.io/node": "k3s-s",
          "directpv.min.io/pod.name": "tenant1-pool-0-0",
          "directpv.min.io/pod.namespace": "tenant1",
          "directpv.min.io/version": "v1beta1"
        },
        "name": "pvc-a6e3bbf9-ab29-41d8-ac3b-c1d8920e0d98",
        "resourceVersion": "8672",
        "uid": "57f4e39b-4334-42ce-9d3e-66411e53a1bb"
      },
      "status": {
        "availableCapacity": 10737418240,
        "dataPath": "/var/lib/directpv/mnt/afa0c1ac-a9a4-4cd5-8ea2-3d1cb51a9445/.FSUUID.afa0c1ac-a9a4-4cd5-8ea2-3d1cb51a9445/pvc-a6e3bbf9-ab29-41d8-ac3b-c1d8920e0d98",
        "fsuuid": "afa0c1ac-a9a4-4cd5-8ea2-3d1cb51a9445",
        "stagingTargetPath": "/var/lib/kubelet/plugins/kubernetes.io/csi/directpv-min-io/b1fcff20409de9e419cac67cfada28d24fd259e30f5ea0f294205e4619cff68b/globalmount",
        "status": "Ready",
        "targetPath": "/var/lib/kubelet/pods/96e4e9ba-def5-4051-a89a-8d3bf6efd8b1/volumes/kubernetes.io~csi/pvc-a6e3bbf9-ab29-41d8-ac3b-c1d8920e0d98/mount",
        "totalCapacity": 10737418240,
        "usedCapacity": 0
      }
    }
  ],
  "kind": "List",
  "metadata": {
    "resourceVersion": ""
  }
}

kc describe directpvvolumes
Name:         pvc-214d8389-2b4c-48b6-b2d4-67fc413e78fd
Namespace:
Labels:       directpv.min.io/created-by=directpv-controller
              directpv.min.io/drive=668267e9-fdd2-46c9-b854-1ac1de70132f
              directpv.min.io/drive-name=nvme4n1
              directpv.min.io/node=k3s-s
              directpv.min.io/pod.name=tenant1-pool-0-0
              directpv.min.io/pod.namespace=tenant1
              directpv.min.io/version=v1beta1
Annotations:  <none>
API Version:  directpv.min.io/v1beta1
Kind:         DirectPVVolume
Metadata:
  Creation Timestamp:  2025-09-20T04:57:13Z
  Finalizers:
    directpv.min.io/pv-protection
    directpv.min.io/purge-protection
  Generation:        3
  Resource Version:  8674
  UID:               10192b4c-44b1-4355-af69-1abb230d52b1
Status:
  Available Capacity:   10737418240
  Data Path:            /var/lib/directpv/mnt/668267e9-fdd2-46c9-b854-1ac1de70132f/.FSUUID.668267e9-fdd2-46c9-b854-1ac1de70132f/pvc-214d8389-2b4c-48b6-b2d4-67fc413e78fd
  Fsuuid:               668267e9-fdd2-46c9-b854-1ac1de70132f
  Staging Target Path:  /var/lib/kubelet/plugins/kubernetes.io/csi/directpv-min-io/ff3df50badeadcbe76e413d19beabe12727118b85265d067058892fd39269817/globalmount
  Status:               Ready
  Target Path:          /var/lib/kubelet/pods/96e4e9ba-def5-4051-a89a-8d3bf6efd8b1/volumes/kubernetes.io~csi/pvc-214d8389-2b4c-48b6-b2d4-67fc413e78fd/mount
  Total Capacity:       10737418240
  Used Capacity:        0
Events:                 <none>


Name:         pvc-4a372c6f-6fe1-4ec8-8616-eba5e6b03b57
Namespace:
Labels:       directpv.min.io/created-by=directpv-controller
              directpv.min.io/drive=94ca8715-bbb0-47ad-93f9-43af207e0240
              directpv.min.io/drive-name=nvme3n1
              directpv.min.io/node=k3s-s
              directpv.min.io/pod.name=tenant1-pool-0-0
              directpv.min.io/pod.namespace=tenant1
              directpv.min.io/version=v1beta1
Annotations:  <none>
API Version:  directpv.min.io/v1beta1
Kind:         DirectPVVolume
Metadata:
  Creation Timestamp:  2025-09-20T04:57:13Z
  Finalizers:
    directpv.min.io/pv-protection
    directpv.min.io/purge-protection
  Generation:        4
  Resource Version:  8671
  UID:               bfc7feef-d793-466a-bf01-73bb86bbacf3
Status:
  Available Capacity:   10737418240
  Data Path:            /var/lib/directpv/mnt/94ca8715-bbb0-47ad-93f9-43af207e0240/.FSUUID.94ca8715-bbb0-47ad-93f9-43af207e0240/pvc-4a372c6f-6fe1-4ec8-8616-eba5e6b03b57
  Fsuuid:               94ca8715-bbb0-47ad-93f9-43af207e0240
  Staging Target Path:  /var/lib/kubelet/plugins/kubernetes.io/csi/directpv-min-io/2f2e1ad824df2e9a63b1c08f2944717c807ba77d59ae6b36686aea080bf56e9d/globalmount
  Status:               Ready
  Target Path:          /var/lib/kubelet/pods/96e4e9ba-def5-4051-a89a-8d3bf6efd8b1/volumes/kubernetes.io~csi/pvc-4a372c6f-6fe1-4ec8-8616-eba5e6b03b57/mount
  Total Capacity:       10737418240
  Used Capacity:        0
Events:
  Type    Reason             Age    From                 Message
  ----    ------             ----   ----                 -------
  Normal  VolumeProvisioned  6m33s  directpv-controller  volume is reused


Name:         pvc-6aa17a8c-3e37-4dbd-a837-32683b6d765f
Namespace:
Labels:       directpv.min.io/created-by=directpv-controller
              directpv.min.io/drive=94dca655-fc05-4e5f-a7d8-a8b1e953f220
              directpv.min.io/drive-name=nvme2n1
              directpv.min.io/node=k3s-s
              directpv.min.io/pod.name=tenant1-pool-0-0
              directpv.min.io/pod.namespace=tenant1
              directpv.min.io/version=v1beta1
Annotations:  <none>
API Version:  directpv.min.io/v1beta1
Kind:         DirectPVVolume
Metadata:
  Creation Timestamp:  2025-09-20T04:57:13Z
  Finalizers:
    directpv.min.io/pv-protection
    directpv.min.io/purge-protection
  Generation:        3
  Resource Version:  8673
  UID:               7a87c555-55d2-4397-9e20-095fb47819b1
Status:
  Available Capacity:   10737418240
  Data Path:            /var/lib/directpv/mnt/94dca655-fc05-4e5f-a7d8-a8b1e953f220/.FSUUID.94dca655-fc05-4e5f-a7d8-a8b1e953f220/pvc-6aa17a8c-3e37-4dbd-a837-32683b6d765f
  Fsuuid:               94dca655-fc05-4e5f-a7d8-a8b1e953f220
  Staging Target Path:  /var/lib/kubelet/plugins/kubernetes.io/csi/directpv-min-io/1303f8614e90f62edef9c5293c7415b999bccfac7d71c9b210b24281e6837828/globalmount
  Status:               Ready
  Target Path:          /var/lib/kubelet/pods/96e4e9ba-def5-4051-a89a-8d3bf6efd8b1/volumes/kubernetes.io~csi/pvc-6aa17a8c-3e37-4dbd-a837-32683b6d765f/mount
  Total Capacity:       10737418240
  Used Capacity:        0
Events:                 <none>


Name:         pvc-a6e3bbf9-ab29-41d8-ac3b-c1d8920e0d98
Namespace:
Labels:       directpv.min.io/created-by=directpv-controller
              directpv.min.io/drive=afa0c1ac-a9a4-4cd5-8ea2-3d1cb51a9445
              directpv.min.io/drive-name=nvme1n1
              directpv.min.io/node=k3s-s
              directpv.min.io/pod.name=tenant1-pool-0-0
              directpv.min.io/pod.namespace=tenant1
              directpv.min.io/version=v1beta1
Annotations:  <none>
API Version:  directpv.min.io/v1beta1
Kind:         DirectPVVolume
Metadata:
  Creation Timestamp:  2025-09-20T04:57:13Z
  Finalizers:
    directpv.min.io/pv-protection
    directpv.min.io/purge-protection
  Generation:        3
  Resource Version:  8672
  UID:               57f4e39b-4334-42ce-9d3e-66411e53a1bb
Status:
  Available Capacity:   10737418240
  Data Path:            /var/lib/directpv/mnt/afa0c1ac-a9a4-4cd5-8ea2-3d1cb51a9445/.FSUUID.afa0c1ac-a9a4-4cd5-8ea2-3d1cb51a9445/pvc-a6e3bbf9-ab29-41d8-ac3b-c1d8920e0d98
  Fsuuid:               afa0c1ac-a9a4-4cd5-8ea2-3d1cb51a9445
  Staging Target Path:  /var/lib/kubelet/plugins/kubernetes.io/csi/directpv-min-io/b1fcff20409de9e419cac67cfada28d24fd259e30f5ea0f294205e4619cff68b/globalmount
  Status:               Ready
  Target Path:          /var/lib/kubelet/pods/96e4e9ba-def5-4051-a89a-8d3bf6efd8b1/volumes/kubernetes.io~csi/pvc-a6e3bbf9-ab29-41d8-ac3b-c1d8920e0d98/mount
  Total Capacity:       10737418240
  Used Capacity:        0
Events:                 <none>

tree -ah /var/lib/kubelet/plugins
[4.0K]  /var/lib/kubelet/plugins
├── [4.0K]  controller-controller
│   └── [   0]  csi.sock
├── [4.0K]  directpv-min-io
│   └── [   0]  csi.sock
└── [4.0K]  kubernetes.io
    └── [4.0K]  csi
        └── [4.0K]  directpv-min-io
            ├── [4.0K]  1303f8614e90f62edef9c5293c7415b999bccfac7d71c9b210b24281e6837828
            │   ├── [  18]  globalmount
            │   │   └── [  24]  data
            │   │       └── [  98]  .minio.sys
            │   │           ├── [  77]  buckets
            │   │           │   ├── [  21]  .background-heal.json
            │   │           │   │   └── [ 466]  xl.meta
            │   │           │   ├── [  21]  .bloomcycle.bin
            │   │           │   │   └── [ 515]  xl.meta
            │   │           │   └── [  21]  .usage.json
            │   │           │       └── [ 534]  xl.meta
            │   │           ├── [  36]  config
            │   │           │   ├── [  21]  config.json
            │   │           │   │   └── [5.1K]  xl.meta
            │   │           │   └── [  25]  iam
            │   │           │       └── [  21]  format.json
            │   │           │           └── [ 431]  xl.meta
            │   │           ├── [ 342]  format.json
            │   │           ├── [   6]  multipart
            │   │           ├── [  21]  pool.bin
            │   │           │   └── [ 464]  xl.meta
            │   │           └── [  64]  tmp
            │   │               ├── [ 182]  .trash
            │   │               │   ├── [  25]  0d56f005-fcad-4df2-8c8d-94ef6aeb7bb5
            │   │               │   │   └── [ 507]  xl.meta.bkp
            │   │               │   ├── [  25]  b1d56ad7-cf29-49d0-b5d9-1a8bacab4457
            │   │               │   │   └── [ 494]  xl.meta.bkp
            │   │               │   ├── [  25]  c92d62ca-87d1-4b6c-912e-ac3cb35adce7
            │   │               │   │   └── [ 534]  xl.meta.bkp
            │   │               │   └── [  25]  d2b50b25-0660-4fae-8191-92d21fce691e
            │   │               │       └── [ 534]  xl.meta.bkp
            │   │               └── [2.0K]  1fc71795-b86c-4d31-a636-64c9d2353ec7
            │   └── [  91]  vol_data.json
            ├── [4.0K]  2f2e1ad824df2e9a63b1c08f2944717c807ba77d59ae6b36686aea080bf56e9d
            │   ├── [  18]  globalmount
            │   │   └── [  24]  data
            │   │       └── [  98]  .minio.sys
            │   │           ├── [  77]  buckets
            │   │           │   ├── [  21]  .background-heal.json
            │   │           │   │   └── [ 466]  xl.meta
            │   │           │   ├── [  21]  .bloomcycle.bin
            │   │           │   │   └── [ 515]  xl.meta
            │   │           │   └── [  21]  .usage.json
            │   │           │       └── [ 534]  xl.meta
            │   │           ├── [  36]  config
            │   │           │   ├── [  21]  config.json
            │   │           │   │   └── [5.1K]  xl.meta
            │   │           │   └── [  25]  iam
            │   │           │       └── [  21]  format.json
            │   │           │           └── [ 431]  xl.meta
            │   │           ├── [ 342]  format.json
            │   │           ├── [   6]  multipart
            │   │           ├── [  21]  pool.bin
            │   │           │   └── [ 464]  xl.meta
            │   │           └── [  64]  tmp
            │   │               ├── [ 182]  .trash
            │   │               │   ├── [  25]  178d3d1f-c9a0-4577-9277-ea9205157477
            │   │               │   │   └── [ 534]  xl.meta.bkp
            │   │               │   ├── [  25]  8bd8f221-14f7-4356-b927-2bd65120dddd
            │   │               │   │   └── [ 507]  xl.meta.bkp
            │   │               │   ├── [  25]  c788b2f7-0af0-481e-8f92-6fbbdafd5897
            │   │               │   │   └── [ 494]  xl.meta.bkp
            │   │               │   └── [  25]  ce051ba8-d500-4d3f-8dd3-6101c78eaac0
            │   │               │       └── [ 534]  xl.meta.bkp
            │   │               └── [2.0K]  49594e7d-93b3-4d93-9a9e-71fe2fe4793b
            │   └── [  91]  vol_data.json
            ├── [4.0K]  b1fcff20409de9e419cac67cfada28d24fd259e30f5ea0f294205e4619cff68b
            │   ├── [  18]  globalmount
            │   │   └── [  24]  data
            │   │       └── [  98]  .minio.sys
            │   │           ├── [  77]  buckets
            │   │           │   ├── [  21]  .background-heal.json
            │   │           │   │   └── [ 466]  xl.meta
            │   │           │   ├── [  21]  .bloomcycle.bin
            │   │           │   │   └── [ 515]  xl.meta
            │   │           │   └── [  21]  .usage.json
            │   │           │       └── [ 534]  xl.meta
            │   │           ├── [  36]  config
            │   │           │   ├── [  21]  config.json
            │   │           │   │   └── [5.1K]  xl.meta
            │   │           │   └── [  25]  iam
            │   │           │       └── [  21]  format.json
            │   │           │           └── [ 431]  xl.meta
            │   │           ├── [ 342]  format.json
            │   │           ├── [   6]  multipart
            │   │           ├── [  21]  pool.bin
            │   │           │   └── [ 464]  xl.meta
            │   │           └── [  64]  tmp
            │   │               ├── [ 182]  .trash
            │   │               │   ├── [  25]  040bd878-2bcf-4b24-a313-c571e04b9836
            │   │               │   │   └── [ 534]  xl.meta.bkp
            │   │               │   ├── [  25]  069ca199-851c-402b-9158-2206a3f53012
            │   │               │   │   └── [ 494]  xl.meta.bkp
            │   │               │   ├── [  25]  155bf173-abf6-49f4-81cd-d8eda8f97b1b
            │   │               │   │   └── [ 534]  xl.meta.bkp
            │   │               │   └── [  25]  1d1e29d1-a4aa-45df-bfcb-8fd00e75d7ad
            │   │               │       └── [ 507]  xl.meta.bkp
            │   │               └── [2.0K]  4eca5a1c-f617-41dc-a50e-47b18b54bf43
            │   └── [  91]  vol_data.json
            └── [4.0K]  ff3df50badeadcbe76e413d19beabe12727118b85265d067058892fd39269817
                ├── [  18]  globalmount
                │   └── [  24]  data
                │       └── [  98]  .minio.sys
                │           ├── [  77]  buckets
                │           │   ├── [  21]  .background-heal.json
                │           │   │   └── [ 466]  xl.meta
                │           │   ├── [  21]  .bloomcycle.bin
                │           │   │   └── [ 515]  xl.meta
                │           │   └── [  21]  .usage.json
                │           │       └── [ 534]  xl.meta
                │           ├── [  36]  config
                │           │   ├── [  21]  config.json
                │           │   │   └── [5.1K]  xl.meta
                │           │   └── [  25]  iam
                │           │       └── [  21]  format.json
                │           │           └── [ 431]  xl.meta
                │           ├── [ 342]  format.json
                │           ├── [   6]  multipart
                │           ├── [  21]  pool.bin
                │           │   └── [ 464]  xl.meta
                │           └── [  64]  tmp
                │               ├── [ 182]  .trash
                │               │   ├── [  25]  58121f85-78dd-4ad0-b5b5-c242e32e6a6c
                │               │   │   └── [ 534]  xl.meta.bkp
                │               │   ├── [  25]  7df339a2-977d-42a4-a335-4195b29bb5db
                │               │   │   └── [ 534]  xl.meta.bkp
                │               │   ├── [  25]  fabbbcac-1149-4894-be28-5871f6a69d44
                │               │   │   └── [ 494]  xl.meta.bkp
                │               │   └── [  25]  fb9950b3-2aaf-4ed2-8419-632cd4ef1c99
                │               │       └── [ 507]  xl.meta.bkp
                │               └── [2.0K]  0f3ba3ea-5262-4c76-804c-46cc321fedcb
                └── [  91]  vol_data.json

86 directories, 54 files

tree -ah /var/lib/directpv/mnt
[4.0K]  /var/lib/directpv/mnt
├── [ 123]  668267e9-fdd2-46c9-b854-1ac1de70132f
│   ├── [   1]  .FSUUID.668267e9-fdd2-46c9-b854-1ac1de70132f -> .
│   ├── [  23]  .directpv
│   │   └── [  82]  meta.info
│   └── [  18]  pvc-214d8389-2b4c-48b6-b2d4-67fc413e78fd
│       └── [  24]  data
│           └── [  98]  .minio.sys
│               ├── [  77]  buckets
│               │   ├── [  21]  .background-heal.json
│               │   │   └── [ 466]  xl.meta
│               │   ├── [  21]  .bloomcycle.bin
│               │   │   └── [ 515]  xl.meta
│               │   └── [  21]  .usage.json
│               │       └── [ 534]  xl.meta
│               ├── [  36]  config
│               │   ├── [  21]  config.json
│               │   │   └── [5.1K]  xl.meta
│               │   └── [  25]  iam
│               │       └── [  21]  format.json
│               │           └── [ 431]  xl.meta
│               ├── [ 342]  format.json
│               ├── [   6]  multipart
│               ├── [  21]  pool.bin
│               │   └── [ 464]  xl.meta
│               └── [  64]  tmp
│                   ├── [ 182]  .trash
│                   │   ├── [  25]  58121f85-78dd-4ad0-b5b5-c242e32e6a6c
│                   │   │   └── [ 534]  xl.meta.bkp
│                   │   ├── [  25]  7df339a2-977d-42a4-a335-4195b29bb5db
│                   │   │   └── [ 534]  xl.meta.bkp
│                   │   ├── [  25]  fabbbcac-1149-4894-be28-5871f6a69d44
│                   │   │   └── [ 494]  xl.meta.bkp
│                   │   └── [  25]  fb9950b3-2aaf-4ed2-8419-632cd4ef1c99
│                   │       └── [ 507]  xl.meta.bkp
│                   └── [2.0K]  0f3ba3ea-5262-4c76-804c-46cc321fedcb
├── [ 123]  94ca8715-bbb0-47ad-93f9-43af207e0240
│   ├── [   1]  .FSUUID.94ca8715-bbb0-47ad-93f9-43af207e0240 -> .
│   ├── [  23]  .directpv
│   │   └── [  82]  meta.info
│   └── [  18]  pvc-4a372c6f-6fe1-4ec8-8616-eba5e6b03b57
│       └── [  24]  data
│           └── [  98]  .minio.sys
│               ├── [  77]  buckets
│               │   ├── [  21]  .background-heal.json
│               │   │   └── [ 466]  xl.meta
│               │   ├── [  21]  .bloomcycle.bin
│               │   │   └── [ 515]  xl.meta
│               │   └── [  21]  .usage.json
│               │       └── [ 534]  xl.meta
│               ├── [  36]  config
│               │   ├── [  21]  config.json
│               │   │   └── [5.1K]  xl.meta
│               │   └── [  25]  iam
│               │       └── [  21]  format.json
│               │           └── [ 431]  xl.meta
│               ├── [ 342]  format.json
│               ├── [   6]  multipart
│               ├── [  21]  pool.bin
│               │   └── [ 464]  xl.meta
│               └── [  64]  tmp
│                   ├── [ 182]  .trash
│                   │   ├── [  25]  178d3d1f-c9a0-4577-9277-ea9205157477
│                   │   │   └── [ 534]  xl.meta.bkp
│                   │   ├── [  25]  8bd8f221-14f7-4356-b927-2bd65120dddd
│                   │   │   └── [ 507]  xl.meta.bkp
│                   │   ├── [  25]  c788b2f7-0af0-481e-8f92-6fbbdafd5897
│                   │   │   └── [ 494]  xl.meta.bkp
│                   │   └── [  25]  ce051ba8-d500-4d3f-8dd3-6101c78eaac0
│                   │       └── [ 534]  xl.meta.bkp
│                   └── [2.0K]  49594e7d-93b3-4d93-9a9e-71fe2fe4793b
├── [ 123]  94dca655-fc05-4e5f-a7d8-a8b1e953f220
│   ├── [   1]  .FSUUID.94dca655-fc05-4e5f-a7d8-a8b1e953f220 -> .
│   ├── [  23]  .directpv
│   │   └── [  82]  meta.info
│   └── [  18]  pvc-6aa17a8c-3e37-4dbd-a837-32683b6d765f
│       └── [  24]  data
│           └── [  98]  .minio.sys
│               ├── [  77]  buckets
│               │   ├── [  21]  .background-heal.json
│               │   │   └── [ 466]  xl.meta
│               │   ├── [  21]  .bloomcycle.bin
│               │   │   └── [ 515]  xl.meta
│               │   └── [  21]  .usage.json
│               │       └── [ 534]  xl.meta
│               ├── [  36]  config
│               │   ├── [  21]  config.json
│               │   │   └── [5.1K]  xl.meta
│               │   └── [  25]  iam
│               │       └── [  21]  format.json
│               │           └── [ 431]  xl.meta
│               ├── [ 342]  format.json
│               ├── [   6]  multipart
│               ├── [  21]  pool.bin
│               │   └── [ 464]  xl.meta
│               └── [  64]  tmp
│                   ├── [ 182]  .trash
│                   │   ├── [  25]  0d56f005-fcad-4df2-8c8d-94ef6aeb7bb5
│                   │   │   └── [ 507]  xl.meta.bkp
│                   │   ├── [  25]  b1d56ad7-cf29-49d0-b5d9-1a8bacab4457
│                   │   │   └── [ 494]  xl.meta.bkp
│                   │   ├── [  25]  c92d62ca-87d1-4b6c-912e-ac3cb35adce7
│                   │   │   └── [ 534]  xl.meta.bkp
│                   │   └── [  25]  d2b50b25-0660-4fae-8191-92d21fce691e
│                   │       └── [ 534]  xl.meta.bkp
│                   └── [2.0K]  1fc71795-b86c-4d31-a636-64c9d2353ec7
└── [ 123]  afa0c1ac-a9a4-4cd5-8ea2-3d1cb51a9445
    ├── [   1]  .FSUUID.afa0c1ac-a9a4-4cd5-8ea2-3d1cb51a9445 -> .
    ├── [  23]  .directpv
    │   └── [  82]  meta.info
    └── [  18]  pvc-a6e3bbf9-ab29-41d8-ac3b-c1d8920e0d98
        └── [  24]  data
            └── [  98]  .minio.sys
                ├── [  77]  buckets
                │   ├── [  21]  .background-heal.json
                │   │   └── [ 466]  xl.meta
                │   ├── [  21]  .bloomcycle.bin
                │   │   └── [ 515]  xl.meta
                │   └── [  21]  .usage.json
                │       └── [ 534]  xl.meta
                ├── [  36]  config
                │   ├── [  21]  config.json
                │   │   └── [5.1K]  xl.meta
                │   └── [  25]  iam
                │       └── [  21]  format.json
                │           └── [ 431]  xl.meta
                ├── [ 342]  format.json
                ├── [   6]  multipart
                ├── [  21]  pool.bin
                │   └── [ 464]  xl.meta
                └── [  64]  tmp
                    ├── [ 182]  .trash
                    │   ├── [  25]  040bd878-2bcf-4b24-a313-c571e04b9836
                    │   │   └── [ 534]  xl.meta.bkp
                    │   ├── [  25]  069ca199-851c-402b-9158-2206a3f53012
                    │   │   └── [ 494]  xl.meta.bkp
                    │   ├── [  25]  155bf173-abf6-49f4-81cd-d8eda8f97b1b
                    │   │   └── [ 534]  xl.meta.bkp
                    │   └── [  25]  1d1e29d1-a4aa-45df-bfcb-8fd00e75d7ad
                    │       └── [ 507]  xl.meta.bkp
                    └── [2.0K]  4eca5a1c-f617-41dc-a50e-47b18b54bf43

89 directories, 52 files

cat /var/lib/kubelet/plugins/kubernetes.io/csi/directpv-min-io/*/vol_data.json
{"driverName":"directpv-min-io","volumeHandle":"pvc-6aa17a8c-3e37-4dbd-a837-32683b6d765f"}
{"driverName":"directpv-min-io","volumeHandle":"pvc-4a372c6f-6fe1-4ec8-8616-eba5e6b03b57"}
{"driverName":"directpv-min-io","volumeHandle":"pvc-a6e3bbf9-ab29-41d8-ac3b-c1d8920e0d98"}
{"driverName":"directpv-min-io","volumeHandle":"pvc-214d8389-2b4c-48b6-b2d4-67fc413e78fd"}

k get pvc -n tenant1
NAME                     STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      VOLUMEATTRIBUTESCLASS   AGE
data0-tenant1-pool-0-0   Bound    pvc-a6e3bbf9-ab29-41d8-ac3b-c1d8920e0d98   10Gi       RWO            directpv-min-io   <unset>                 6m58s
data1-tenant1-pool-0-0   Bound    pvc-214d8389-2b4c-48b6-b2d4-67fc413e78fd   10Gi       RWO            directpv-min-io   <unset>                 6m58s
data2-tenant1-pool-0-0   Bound    pvc-4a372c6f-6fe1-4ec8-8616-eba5e6b03b57   10Gi       RWO            directpv-min-io   <unset>                 6m58s
data3-tenant1-pool-0-0   Bound    pvc-6aa17a8c-3e37-4dbd-a837-32683b6d765f   10Gi       RWO            directpv-min-io   <unset>                 6m58s

k get pvc -n tenant1 -o yaml | yq
{
  "apiVersion": "v1",
  "items": [
    {
      "apiVersion": "v1",
      "kind": "PersistentVolumeClaim",
      "metadata": {
        "annotations": {
          "pv.kubernetes.io/bind-completed": "yes",
          "pv.kubernetes.io/bound-by-controller": "yes",
          "volume.beta.kubernetes.io/storage-provisioner": "directpv-min-io",
          "volume.kubernetes.io/selected-node": "k3s-s",
          "volume.kubernetes.io/storage-provisioner": "directpv-min-io"
        },
        "creationTimestamp": "2025-09-20T04:57:13Z",
        "finalizers": [
          "kubernetes.io/pvc-protection"
        ],
        "labels": {
          "v1.min.io/console": "tenant1-console",
          "v1.min.io/pool": "pool-0",
          "v1.min.io/tenant": "tenant1"
        },
        "name": "data0-tenant1-pool-0-0",
        "namespace": "tenant1",
        "resourceVersion": "8633",
        "uid": "a6e3bbf9-ab29-41d8-ac3b-c1d8920e0d98"
      },
      "spec": {
        "accessModes": [
          "ReadWriteOnce"
        ],
        "resources": {
          "requests": {
            "storage": "10Gi"
          }
        },
        "storageClassName": "directpv-min-io",
        "volumeMode": "Filesystem",
        "volumeName": "pvc-a6e3bbf9-ab29-41d8-ac3b-c1d8920e0d98"
      },
      "status": {
        "accessModes": [
          "ReadWriteOnce"
        ],
        "capacity": {
          "storage": "10Gi"
        },
        "phase": "Bound"
      }
    },
    {
      "apiVersion": "v1",
      "kind": "PersistentVolumeClaim",
      "metadata": {
        "annotations": {
          "pv.kubernetes.io/bind-completed": "yes",
          "pv.kubernetes.io/bound-by-controller": "yes",
          "volume.beta.kubernetes.io/storage-provisioner": "directpv-min-io",
          "volume.kubernetes.io/selected-node": "k3s-s",
          "volume.kubernetes.io/storage-provisioner": "directpv-min-io"
        },
        "creationTimestamp": "2025-09-20T04:57:13Z",
        "finalizers": [
          "kubernetes.io/pvc-protection"
        ],
        "labels": {
          "v1.min.io/console": "tenant1-console",
          "v1.min.io/pool": "pool-0",
          "v1.min.io/tenant": "tenant1"
        },
        "name": "data1-tenant1-pool-0-0",
        "namespace": "tenant1",
        "resourceVersion": "8646",
        "uid": "214d8389-2b4c-48b6-b2d4-67fc413e78fd"
      },
      "spec": {
        "accessModes": [
          "ReadWriteOnce"
        ],
        "resources": {
          "requests": {
            "storage": "10Gi"
          }
        },
        "storageClassName": "directpv-min-io",
        "volumeMode": "Filesystem",
        "volumeName": "pvc-214d8389-2b4c-48b6-b2d4-67fc413e78fd"
      },
      "status": {
        "accessModes": [
          "ReadWriteOnce"
        ],
        "capacity": {
          "storage": "10Gi"
        },
        "phase": "Bound"
      }
    },
    {
      "apiVersion": "v1",
      "kind": "PersistentVolumeClaim",
      "metadata": {
        "annotations": {
          "pv.kubernetes.io/bind-completed": "yes",
          "pv.kubernetes.io/bound-by-controller": "yes",
          "volume.beta.kubernetes.io/storage-provisioner": "directpv-min-io",
          "volume.kubernetes.io/selected-node": "k3s-s",
          "volume.kubernetes.io/storage-provisioner": "directpv-min-io"
        },
        "creationTimestamp": "2025-09-20T04:57:13Z",
        "finalizers": [
          "kubernetes.io/pvc-protection"
        ],
        "labels": {
          "v1.min.io/console": "tenant1-console",
          "v1.min.io/pool": "pool-0",
          "v1.min.io/tenant": "tenant1"
        },
        "name": "data2-tenant1-pool-0-0",
        "namespace": "tenant1",
        "resourceVersion": "8662",
        "uid": "4a372c6f-6fe1-4ec8-8616-eba5e6b03b57"
      },
      "spec": {
        "accessModes": [
          "ReadWriteOnce"
        ],
        "resources": {
          "requests": {
            "storage": "10Gi"
          }
        },
        "storageClassName": "directpv-min-io",
        "volumeMode": "Filesystem",
        "volumeName": "pvc-4a372c6f-6fe1-4ec8-8616-eba5e6b03b57"
      },
      "status": {
        "accessModes": [
          "ReadWriteOnce"
        ],
        "capacity": {
          "storage": "10Gi"
        },
        "phase": "Bound"
      }
    },
    {
      "apiVersion": "v1",
      "kind": "PersistentVolumeClaim",
      "metadata": {
        "annotations": {
          "pv.kubernetes.io/bind-completed": "yes",
          "pv.kubernetes.io/bound-by-controller": "yes",
          "volume.beta.kubernetes.io/storage-provisioner": "directpv-min-io",
          "volume.kubernetes.io/selected-node": "k3s-s",
          "volume.kubernetes.io/storage-provisioner": "directpv-min-io"
        },
        "creationTimestamp": "2025-09-20T04:57:13Z",
        "finalizers": [
          "kubernetes.io/pvc-protection"
        ],
        "labels": {
          "v1.min.io/console": "tenant1-console",
          "v1.min.io/pool": "pool-0",
          "v1.min.io/tenant": "tenant1"
        },
        "name": "data3-tenant1-pool-0-0",
        "namespace": "tenant1",
        "resourceVersion": "8641",
        "uid": "6aa17a8c-3e37-4dbd-a837-32683b6d765f"
      },
      "spec": {
        "accessModes": [
          "ReadWriteOnce"
        ],
        "resources": {
          "requests": {
            "storage": "10Gi"
          }
        },
        "storageClassName": "directpv-min-io",
        "volumeMode": "Filesystem",
        "volumeName": "pvc-6aa17a8c-3e37-4dbd-a837-32683b6d765f"
      },
      "status": {
        "accessModes": [
          "ReadWriteOnce"
        ],
        "capacity": {
          "storage": "10Gi"
        },
        "phase": "Bound"
      }
    }
  ],
  "kind": "List",
  "metadata": {
    "resourceVersion": ""
  }
}

kc describe pvc -n tenant1
Name:          data0-tenant1-pool-0-0
Namespace:     tenant1
StorageClass:  directpv-min-io
Status:        Bound
Volume:        pvc-a6e3bbf9-ab29-41d8-ac3b-c1d8920e0d98
Labels:        v1.min.io/console=tenant1-console
               v1.min.io/pool=pool-0
               v1.min.io/tenant=tenant1
Annotations:   pv.kubernetes.io/bind-completed: yes
               pv.kubernetes.io/bound-by-controller: yes
               volume.beta.kubernetes.io/storage-provisioner: directpv-min-io
               volume.kubernetes.io/selected-node: k3s-s
               volume.kubernetes.io/storage-provisioner: directpv-min-io
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      10Gi
Access Modes:  RWO
VolumeMode:    Filesystem
Used By:       tenant1-pool-0-0
Events:
  Type    Reason                 Age                    From                                                                              Message
  ----    ------                 ----                   ----                                                                              -------
  Normal  WaitForFirstConsumer   7m10s                  persistentvolume-controller                                                       waiting for first consumer to be created before binding
  Normal  ExternalProvisioning   7m10s (x2 over 7m10s)  persistentvolume-controller                                                       Waiting for a volume to be created either by the external provisioner 'directpv-min-io' or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered.
  Normal  Provisioning           7m10s                  directpv-min-io_controller-77b4dd6494-sqfsn_abc55137-7bf2-4ecc-82c5-d801bfd9579c  External provisioner is provisioning volume for claim "tenant1/data0-tenant1-pool-0-0"
  Normal  ProvisioningSucceeded  7m10s                  directpv-min-io_controller-77b4dd6494-sqfsn_abc55137-7bf2-4ecc-82c5-d801bfd9579c  Successfully provisioned volume pvc-a6e3bbf9-ab29-41d8-ac3b-c1d8920e0d98


Name:          data1-tenant1-pool-0-0
Namespace:     tenant1
StorageClass:  directpv-min-io
Status:        Bound
Volume:        pvc-214d8389-2b4c-48b6-b2d4-67fc413e78fd
Labels:        v1.min.io/console=tenant1-console
               v1.min.io/pool=pool-0
               v1.min.io/tenant=tenant1
Annotations:   pv.kubernetes.io/bind-completed: yes
               pv.kubernetes.io/bound-by-controller: yes
               volume.beta.kubernetes.io/storage-provisioner: directpv-min-io
               volume.kubernetes.io/selected-node: k3s-s
               volume.kubernetes.io/storage-provisioner: directpv-min-io
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      10Gi
Access Modes:  RWO
VolumeMode:    Filesystem
Used By:       tenant1-pool-0-0
Events:
  Type    Reason                 Age                    From                                                                              Message
  ----    ------                 ----                   ----                                                                              -------
  Normal  WaitForFirstConsumer   7m10s                  persistentvolume-controller                                                       waiting for first consumer to be created before binding
  Normal  ExternalProvisioning   7m10s (x2 over 7m10s)  persistentvolume-controller                                                       Waiting for a volume to be created either by the external provisioner 'directpv-min-io' or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered.
  Normal  Provisioning           7m10s                  directpv-min-io_controller-77b4dd6494-sqfsn_abc55137-7bf2-4ecc-82c5-d801bfd9579c  External provisioner is provisioning volume for claim "tenant1/data1-tenant1-pool-0-0"
  Normal  ProvisioningSucceeded  7m10s                  directpv-min-io_controller-77b4dd6494-sqfsn_abc55137-7bf2-4ecc-82c5-d801bfd9579c  Successfully provisioned volume pvc-214d8389-2b4c-48b6-b2d4-67fc413e78fd


Name:          data2-tenant1-pool-0-0
Namespace:     tenant1
StorageClass:  directpv-min-io
Status:        Bound
Volume:        pvc-4a372c6f-6fe1-4ec8-8616-eba5e6b03b57
Labels:        v1.min.io/console=tenant1-console
               v1.min.io/pool=pool-0
               v1.min.io/tenant=tenant1
Annotations:   pv.kubernetes.io/bind-completed: yes
               pv.kubernetes.io/bound-by-controller: yes
               volume.beta.kubernetes.io/storage-provisioner: directpv-min-io
               volume.kubernetes.io/selected-node: k3s-s
               volume.kubernetes.io/storage-provisioner: directpv-min-io
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      10Gi
Access Modes:  RWO
VolumeMode:    Filesystem
Used By:       tenant1-pool-0-0
Events:
  Type     Reason                 Age                    From                                                                              Message
  ----     ------                 ----                   ----                                                                              -------
  Normal   WaitForFirstConsumer   7m10s                  persistentvolume-controller                                                       waiting for first consumer to be created before binding
  Normal   ExternalProvisioning   7m10s (x2 over 7m10s)  persistentvolume-controller                                                       Waiting for a volume to be created either by the external provisioner 'directpv-min-io' or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered.
  Warning  ProvisioningFailed     7m10s                  directpv-min-io_controller-77b4dd6494-sqfsn_abc55137-7bf2-4ecc-82c5-d801bfd9579c  failed to provision volume with StorageClass "directpv-min-io": rpc error: code = Internal desc = unable to update reserved drive for volume pvc-4a372c6f-6fe1-4ec8-8616-eba5e6b03b57; drive=668267e9-fdd2-46c9-b854-1ac1de70132f, node=k3s-s, name=nvme4n1; Operation cannot be fulfilled on directpvdrives.directpv.min.io "668267e9-fdd2-46c9-b854-1ac1de70132f": the object has been modified; please apply your changes to the latest version and try again
  Normal   Provisioning           7m9s (x2 over 7m10s)   directpv-min-io_controller-77b4dd6494-sqfsn_abc55137-7bf2-4ecc-82c5-d801bfd9579c  External provisioner is provisioning volume for claim "tenant1/data2-tenant1-pool-0-0"
  Normal   ProvisioningSucceeded  7m9s                   directpv-min-io_controller-77b4dd6494-sqfsn_abc55137-7bf2-4ecc-82c5-d801bfd9579c  Successfully provisioned volume pvc-4a372c6f-6fe1-4ec8-8616-eba5e6b03b57


Name:          data3-tenant1-pool-0-0
Namespace:     tenant1
StorageClass:  directpv-min-io
Status:        Bound
Volume:        pvc-6aa17a8c-3e37-4dbd-a837-32683b6d765f
Labels:        v1.min.io/console=tenant1-console
               v1.min.io/pool=pool-0
               v1.min.io/tenant=tenant1
Annotations:   pv.kubernetes.io/bind-completed: yes
               pv.kubernetes.io/bound-by-controller: yes
               volume.beta.kubernetes.io/storage-provisioner: directpv-min-io
               volume.kubernetes.io/selected-node: k3s-s
               volume.kubernetes.io/storage-provisioner: directpv-min-io
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      10Gi
Access Modes:  RWO
VolumeMode:    Filesystem
Used By:       tenant1-pool-0-0
Events:
  Type    Reason                 Age                    From                                                                              Message
  ----    ------                 ----                   ----                                                                              -------
  Normal  WaitForFirstConsumer   7m10s                  persistentvolume-controller                                                       waiting for first consumer to be created before binding
  Normal  ExternalProvisioning   7m10s (x2 over 7m10s)  persistentvolume-controller                                                       Waiting for a volume to be created either by the external provisioner 'directpv-min-io' or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered.
  Normal  Provisioning           7m10s                  directpv-min-io_controller-77b4dd6494-sqfsn_abc55137-7bf2-4ecc-82c5-d801bfd9579c  External provisioner is provisioning volume for claim "tenant1/data3-tenant1-pool-0-0"
  Normal  ProvisioningSucceeded  7m10s                  directpv-min-io_controller-77b4dd6494-sqfsn_abc55137-7bf2-4ecc-82c5-d801bfd9579c  Successfully provisioned volume pvc-6aa17a8c-3e37-4dbd-a837-32683b6d765f
(⎈|default:N/A) root@k3s-s:~# kubectl get sts,pod,svc,ep,pvc,secret -n tenant1
Warning: v1 Endpoints is deprecated in v1.33+; use discovery.k8s.io/v1 EndpointSlice
NAME                              READY   AGE
statefulset.apps/tenant1-pool-0   1/1     7m17s

NAME                   READY   STATUS    RESTARTS   AGE
pod/tenant1-pool-0-0   2/2     Running   0          7m17s

NAME                      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/minio             ClusterIP   10.43.170.174   <none>        443/TCP    7m18s
service/tenant1-console   ClusterIP   10.43.98.213    <none>        9443/TCP   7m18s
service/tenant1-hl        ClusterIP   None            <none>        9000/TCP   7m18s

NAME                        ENDPOINTS         AGE
endpoints/minio             10.42.0.12:9000   7m18s
endpoints/tenant1-console   10.42.0.12:9443   7m18s
endpoints/tenant1-hl        10.42.0.12:9000   7m18s

NAME                                           STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      VOLUMEATTRIBUTESCLASS   AGE
persistentvolumeclaim/data0-tenant1-pool-0-0   Bound    pvc-a6e3bbf9-ab29-41d8-ac3b-c1d8920e0d98   10Gi       RWO            directpv-min-io   <unset>                 7m17s
persistentvolumeclaim/data1-tenant1-pool-0-0   Bound    pvc-214d8389-2b4c-48b6-b2d4-67fc413e78fd   10Gi       RWO            directpv-min-io   <unset>                 7m17s
persistentvolumeclaim/data2-tenant1-pool-0-0   Bound    pvc-4a372c6f-6fe1-4ec8-8616-eba5e6b03b57   10Gi       RWO            directpv-min-io   <unset>                 7m17s
persistentvolumeclaim/data3-tenant1-pool-0-0   Bound    pvc-6aa17a8c-3e37-4dbd-a837-32683b6d765f   10Gi       RWO            directpv-min-io   <unset>                 7m17s

NAME                                   TYPE                 DATA   AGE
secret/sh.helm.release.v1.tenant1.v1   helm.sh/release.v1   1      7m33s
secret/tenant1-env-configuration       Opaque               1      7m33s
secret/tenant1-tls                     Opaque               2      7m23s

kubectl get pod -n tenant1 -l v1.min.io/pool=pool-0 -owide
NAME               READY   STATUS    RESTARTS   AGE     IP           NODE    NOMINATED NODE   READINESS GATES
tenant1-pool-0-0   2/2     Running   0          7m23s   10.42.0.12   k3s-s   <none>           <none>

kc describe pod -n tenant1 -l v1.min.io/pool=pool-0
Name:             tenant1-pool-0-0
Namespace:        tenant1
Priority:         0
Service Account:  tenant1-sa
Node:             k3s-s/192.168.10.10
Start Time:       Sat, 20 Sep 2025 13:57:15 +0900
Labels:           apps.kubernetes.io/pod-index=0
                  controller-revision-hash=tenant1-pool-0-b5b7b8c97
                  statefulset.kubernetes.io/pod-name=tenant1-pool-0-0
                  v1.min.io/console=tenant1-console
                  v1.min.io/pool=pool-0
                  v1.min.io/tenant=tenant1
Annotations:      min.io/revision: 0
Status:           Running
IP:               10.42.0.12
IPs:
  IP:           10.42.0.12
Controlled By:  StatefulSet/tenant1-pool-0
Init Containers:
  validate-arguments:
    Container ID:  containerd://98370489d3114970050995891d82ba1c386c7e46261776fd38a45fc7b4b03a88
    Image:         quay.io/minio/operator-sidecar:v7.0.1
    Image ID:      quay.io/minio/operator-sidecar@sha256:ccc4fb79135aed8bf9c73d6f758d8e4f4ff24f51ca1bdd6f5b8ad9a9ad841a2f
    Port:          <none>
    Host Port:     <none>
    Args:
      validate
      --tenant
      tenant1
    State:          Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Sat, 20 Sep 2025 13:57:19 +0900
      Finished:     Sat, 20 Sep 2025 13:57:19 +0900
    Ready:          True
    Restart Count:  0
    Environment:
      CLUSTER_DOMAIN:  cluster.local
    Mounts:
      /tmp/minio-config from configuration (rw)
      /tmp/minio/ from cfg-vol (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-smh8h (ro)
Containers:
  minio:
    Container ID:  containerd://7c0810a86316e58cc6b8fec6285ef84f095c8ec629aff095d5ab8e452f2335ed
    Image:         quay.io/minio/minio:RELEASE.2025-04-08T15-41-24Z
    Image ID:      quay.io/minio/minio@sha256:8834ae47a2de3509b83e0e70da9369c24bbbc22de42f2a2eddc530eee88acd1b
    Ports:         9000/TCP, 9443/TCP
    Host Ports:    0/TCP, 0/TCP
    Args:
      server
      --certs-dir
      /tmp/certs
      --console-address
      :9443
    State:          Running
      Started:      Sat, 20 Sep 2025 13:57:24 +0900
    Ready:          True
    Restart Count:  0
    Environment:
      MINIO_CONFIG_ENV_FILE:  /tmp/minio/config.env
    Mounts:
      /export0 from data0 (rw)
      /export1 from data1 (rw)
      /export2 from data2 (rw)
      /export3 from data3 (rw)
      /tmp/certs from tenant1-tls (rw)
      /tmp/minio/ from cfg-vol (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-smh8h (ro)
  sidecar:
    Container ID:  containerd://f22ed43f8774d13c96cf51a460cdb70cba1ba2d366fd43f9e4e850b4921e5e8a
    Image:         quay.io/minio/operator-sidecar:v7.0.1
    Image ID:      quay.io/minio/operator-sidecar@sha256:ccc4fb79135aed8bf9c73d6f758d8e4f4ff24f51ca1bdd6f5b8ad9a9ad841a2f
    Port:          <none>
    Host Port:     <none>
    Args:
      sidecar
      --tenant
      tenant1
      --config-name
      tenant1-env-configuration
    State:          Running
      Started:      Sat, 20 Sep 2025 13:57:24 +0900
    Ready:          True
    Restart Count:  0
    Readiness:      http-get http://:4444/ready delay=5s timeout=1s period=1s #success=1 #failure=1
    Environment:
      CLUSTER_DOMAIN:  cluster.local
    Mounts:
      /tmp/minio-config from configuration (rw)
      /tmp/minio/ from cfg-vol (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-smh8h (ro)
Conditions:
  Type                        Status
  PodReadyToStartContainers   True
  Initialized                 True
  Ready                       True
  ContainersReady             True
  PodScheduled                True
Volumes:
  data0:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  data0-tenant1-pool-0-0
    ReadOnly:   false
  data1:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  data1-tenant1-pool-0-0
    ReadOnly:   false
  data2:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  data2-tenant1-pool-0-0
    ReadOnly:   false
  data3:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  data3-tenant1-pool-0-0
    ReadOnly:   false
  cfg-vol:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:
    SizeLimit:  <unset>
  tenant1-tls:
    Type:        Projected (a volume that contains injected data from multiple sources)
    SecretName:  tenant1-tls
    Optional:    false
  configuration:
    Type:        Projected (a volume that contains injected data from multiple sources)
    SecretName:  tenant1-env-configuration
    Optional:    false
  kube-api-access-smh8h:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    Optional:                false
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason     Age    From               Message
  ----    ------     ----   ----               -------
  Normal  Scheduled  7m25s  default-scheduler  Successfully assigned tenant1/tenant1-pool-0-0 to k3s-s
  Normal  Pulling    7m25s  kubelet            Pulling image "quay.io/minio/operator-sidecar:v7.0.1"
  Normal  Pulled     7m22s  kubelet            Successfully pulled image "quay.io/minio/operator-sidecar:v7.0.1" in 3.618s (3.618s including waiting). Image size: 22033319 bytes.
  Normal  Created    7m22s  kubelet            Created container: validate-arguments
  Normal  Started    7m22s  kubelet            Started container validate-arguments
  Normal  Pulling    7m21s  kubelet            Pulling image "quay.io/minio/minio:RELEASE.2025-04-08T15-41-24Z"
  Normal  Pulled     7m17s  kubelet            Successfully pulled image "quay.io/minio/minio:RELEASE.2025-04-08T15-41-24Z" in 4.255s (4.255s including waiting). Image size: 63924941 bytes.
  Normal  Created    7m17s  kubelet            Created container: minio
  Normal  Started    7m17s  kubelet            Started container minio
  Normal  Pulled     7m17s  kubelet            Container image "quay.io/minio/operator-sidecar:v7.0.1" already present on machine
  Normal  Created    7m17s  kubelet            Created container: sidecar
  Normal  Started    7m17s  kubelet            Started container sidecar
(⎈|default:N/A) root@k3s-s:~# kubectl stern -n tenant1 -l v1.min.io/pool=pool-0
+ tenant1-pool-0-0 › minio
+ tenant1-pool-0-0 › validate-arguments
+ tenant1-pool-0-0 › sidecar
tenant1-pool-0-0 sidecar 2025/09/20 04:57:24 sidecar_utils.go:50: Starting Sidecar
tenant1-pool-0-0 minio INFO: Formatting 1st pool, 1 set(s), 4 drives per set.
tenant1-pool-0-0 minio INFO: WARNING: Host local has more than 1 drives of set. A host failure will result in data becoming unavailable.
tenant1-pool-0-0 minio MinIO Object Storage Server
tenant1-pool-0-0 minio Copyright: 2015-2025 MinIO, Inc.
tenant1-pool-0-0 minio License: GNU AGPLv3 - https://www.gnu.org/licenses/agpl-3.0.html
tenant1-pool-0-0 minio Version: RELEASE.2025-04-08T15-41-24Z (go1.24.2 linux/amd64)
tenant1-pool-0-0 minio
tenant1-pool-0-0 minio API: https://minio.tenant1.svc.cluster.local
tenant1-pool-0-0 minio WebUI: https://10.42.0.12:9443 https://127.0.0.1:9443
- tenant1-pool-0-0 › validate-arguments
tenant1-pool-0-0 minio
tenant1-pool-0-0 minio Docs: https://docs.min.io
tenant1-pool-0-0 minio INFO:
tenant1-pool-0-0 minio  You are running an older version of MinIO released 5 months before the latest release
tenant1-pool-0-0 minio  Update: Run `mc admin update ALIAS`
tenant1-pool-0-0 minio
tenant1-pool-0-0 minio
^C

kubectl exec -it -n tenant1 sts/tenant1-pool-0 -c minio -- id
uid=1000 gid=1000 groups=1000

kubectl exec -it -n tenant1 sts/tenant1-pool-0 -c minio -- env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=tenant1-pool-0-0
MINIO_ACCESS_KEY_FILE=access_key
MINIO_SECRET_KEY_FILE=secret_key
MINIO_ROOT_USER_FILE=access_key
MINIO_ROOT_PASSWORD_FILE=secret_key
MINIO_KMS_SECRET_KEY_FILE=kms_master_key
MINIO_UPDATE_MINISIGN_PUBKEY=RWTx5Zr1tiHQLwG9keckT0c45M3AGeHD6IvimQHpyRywVWGbP1aVSGav
MINIO_CONFIG_ENV_FILE=/tmp/minio/config.env
MC_CONFIG_DIR=/tmp/.mc
TENANT1_CONSOLE_SERVICE_PORT=9443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
TENANT1_CONSOLE_SERVICE_HOST=10.43.98.213
TENANT1_CONSOLE_SERVICE_PORT_HTTPS_CONSOLE=9443
TENANT1_CONSOLE_PORT_9443_TCP=tcp://10.43.98.213:9443
TENANT1_CONSOLE_PORT_9443_TCP_PORT=9443
KUBERNETES_SERVICE_HOST=10.43.0.1
KUBERNETES_PORT=tcp://10.43.0.1:443
MINIO_SERVICE_HOST=10.43.170.174
MINIO_PORT_443_TCP_PORT=443
TENANT1_CONSOLE_PORT_9443_TCP_PROTO=tcp
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT_443_TCP=tcp://10.43.0.1:443
KUBERNETES_PORT_443_TCP_PORT=443
MINIO_PORT_443_TCP_PROTO=tcp
MINIO_PORT_443_TCP_ADDR=10.43.170.174
TENANT1_CONSOLE_PORT=tcp://10.43.98.213:9443
TENANT1_CONSOLE_PORT_9443_TCP_ADDR=10.43.98.213
KUBERNETES_PORT_443_TCP_ADDR=10.43.0.1
MINIO_SERVICE_PORT=443
MINIO_SERVICE_PORT_HTTPS_MINIO=443
MINIO_PORT=tcp://10.43.170.174:443
MINIO_PORT_443_TCP=tcp://10.43.170.174:443
TERM=xterm
HOME=/

kubectl exec -it -n tenant1 sts/tenant1-pool-0 -c minio -- cat /tmp/minio/config.env
export MINIO_ARGS="/export{0...3}/data"
export MINIO_PROMETHEUS_JOB_ID="minio-job"
export MINIO_ROOT_PASSWORD="minio123"
export MINIO_ROOT_USER="minio"
export MINIO_SERVER_URL="https://minio.tenant1.svc.cluster.local:443"
export MINIO_STORAGE_CLASS_STANDARD="EC:1"
export MINIO_UPDATE="on"
export MINIO_UPDATE_MINISIGN_PUBKEY="RWTx5Zr1tiHQLwG9keckT0c45M3AGeHD6IvimQHpyRywVWGbP1aVSGav"

kubectl get secret -n tenant1 tenant1-env-configuration -o jsonpath='{.data.config\.env}' | base64 -d ; echo
export MINIO_ROOT_USER="minio"
export MINIO_ROOT_PASSWORD="minio123"

kubectl get secret -n tenant1 tenant1-tls -o jsonpath='{.data.public\.crt}' | base64 -d
-----BEGIN CERTIFICATE-----
MIICeDCCAh2gAwIBAgIQVEwEIiO82AwdroJiVOiK0DAKBggqhkjOPQQDAjAjMSEw
HwYDVQQDDBhrM3Mtc2VydmVyLWNhQDE3NTgzMzA0NjMwHhcNMjUwOTIwMDQ1MjAy
WhcNMjYwOTIwMDQ1MjAyWjBUMRUwEwYDVQQKEwxzeXN0ZW06bm9kZXMxOzA5BgNV
BAMMMnN5c3RlbTpub2RlOioudGVuYW50MS1obC50ZW5hbnQxLnN2Yy5jbHVzdGVy
LmxvY2FsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEQbjj5L1YuN7lpbO7cm+X
oCWi2n7zUZHK7sLp44nALR5ap9SLmvZPlY7DqCvjtWQS47uvJNKYNe2x+SMzWZu3
JKOCAQAwgf0wDgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwG
A1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAU50QQ6n95QeBQjoRIIR8gysXkH/cwgaYG
A1UdEQSBnjCBm4I1dGVuYW50MS1wb29sLTAtMC50ZW5hbnQxLWhsLnRlbmFudDEu
c3ZjLmNsdXN0ZXIubG9jYWyCH21pbmlvLnRlbmFudDEuc3ZjLmNsdXN0ZXIubG9j
YWyCDW1pbmlvLnRlbmFudDGCEW1pbmlvLnRlbmFudDEuc3ZjggIqLoIbKi50ZW5h
bnQxLnN2Yy5jbHVzdGVyLmxvY2FsMAoGCCqGSM49BAMCA0kAMEYCIQChMJnhgXLN
gxkHFT81X6gYx6hlDzGM6GbQusUG7JETkQIhAO1coIJQDqny6ATPnAS6DeiBsene
kSgZhA6DNY7/O5vl
-----END CERTIFICATE-----

kubectl get secret -n tenant1 tenant1-tls -o jsonpath='{.data.public\.crt}' | base64 -d | openssl x509 -noout -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            54:4c:04:22:23:bc:d8:0c:1d:ae:82:62:54:e8:8a:d0
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: CN = k3s-server-ca@1758330463
        Validity
            Not Before: Sep 20 04:52:02 2025 GMT
            Not After : Sep 20 04:52:02 2026 GMT
        Subject: O = system:nodes, CN = system:node:*.tenant1-hl.tenant1.svc.cluster.local
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:41:b8:e3:e4:bd:58:b8:de:e5:a5:b3:bb:72:6f:
                    97:a0:25:a2:da:7e:f3:51:91:ca:ee:c2:e9:e3:89:
                    c0:2d:1e:5a:a7:d4:8b:9a:f6:4f:95:8e:c3:a8:2b:
                    e3:b5:64:12:e3:bb:af:24:d2:98:35:ed:b1:f9:23:
                    33:59:9b:b7:24
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            X509v3 Extended Key Usage:
                TLS Web Server Authentication
            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Authority Key Identifier:
                E7:44:10:EA:7F:79:41:E0:50:8E:84:48:21:1F:20:CA:C5:E4:1F:F7
            X509v3 Subject Alternative Name:
                DNS:tenant1-pool-0-0.tenant1-hl.tenant1.svc.cluster.local, DNS:minio.tenant1.svc.cluster.local, DNS:minio.tenant1, DNS:minio.tenant1.svc, DNS:*., DNS:*.tenant1.svc.cluster.local
    Signature Algorithm: ecdsa-with-SHA256
    Signature Value:
        30:46:02:21:00:a1:30:99:e1:81:72:cd:83:19:07:15:3f:35:
        5f:a8:18:c7:a8:65:0f:31:8c:e8:66:d0:ba:c5:06:ec:91:13:
        91:02:21:00:ed:5c:a0:82:50:0e:a9:f2:e8:04:cf:9c:04:ba:
        0d:e8:81:b1:e9:de:91:28:19:84:0e:83:35:8e:ff:3b:9b:e5

kubectl patch svc -n tenant1 tenant1-console -p '{"spec": {"type": "NodePort", "ports": [{"port": 9443, "targetPort": 9443, "nodePort": 30001}]}}'
service/tenant1-console patched

# 기본키(minio , minio123)
echo "https://$(curl -s ipinfo.io/ip):30001"
https://3.36.72.189:30001


kubectl patch svc -n tenant1 minio -p '{"spec": {"type": "NodePort", "ports": [{"port": 443, "targetPort": 9000, "nodePort": 30002}]}}'
service/minio patched

# mc alias
mc alias set k8s-tenant1 https://127.0.0.1:30002 minio minio123 --insecure
mc: Configuration written to `/root/.mc/config.json`. Please update your access credentials.
mc: Successfully created `/root/.mc/share`.
mc: Initialized share uploads `/root/.mc/share/uploads.json` file.
mc: Initialized share downloads `/root/.mc/share/downloads.json` file.
Added `k8s-tenant1` successfully.

mc alias list
gcs
  URL       : https://storage.googleapis.com
  AccessKey : YOUR-ACCESS-KEY-HERE
  SecretKey : YOUR-SECRET-KEY-HERE
  API       : S3v2
  Path      : dns
  Src       : /root/.mc/config.json

k8s-tenant1
  URL       : https://127.0.0.1:30002
  AccessKey : minio
  SecretKey : minio123
  API       : s3v4
  Path      : auto
  Src       : /root/.mc/config.json

local
  URL       : http://localhost:9000
  AccessKey :
  SecretKey :
  API       :
  Path      : auto
  Src       : /root/.mc/config.json

play
  URL       : https://play.min.io
  AccessKey : Q3AM3UQ867SPQQA43P2F
  SecretKey : zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG
  API       : S3v4
  Path      : auto
  Src       : /root/.mc/config.json

s3
  URL       : https://s3.amazonaws.com
  AccessKey : YOUR-ACCESS-KEY-HERE
  SecretKey : YOUR-SECRET-KEY-HERE
  API       : S3v4
  Path      : dns
  Src       : /root/.mc/config.json

mc admin info k8s-tenant1 --insecure
●  127.0.0.1:30002
   Uptime: 10 minutes
   Version: 2025-04-08T15:41:24Z
   Network: 1/1 OK
   Drives: 4/4 OK
   Pool: 1

┌──────┬──────────────────────┬─────────────────────┬──────────────┐
│ Pool │ Drives Usage         │ Erasure stripe size │ Erasure sets │
│ 1st  │ 0.0% (total: 30 GiB) │ 4                   │ 1            │
└──────┴──────────────────────┴─────────────────────┴──────────────┘

4 drives online, 0 drives offline, EC:1

# 버킷 생성
mc mb k8s-tenant1/mybucket --insecure
Bucket created successfully `k8s-tenant1/mybucket`.

mc ls k8s-tenant1 --insecure
[2025-09-20 14:07:55 KST]     0B mybucket/



 

활용 실습

 

MinIO Client — MinIO Object Storage (AGPLv3)

The following commands add a temporary extension to your system PATH for running the mc utility. Defer to your operating system instructions for making permanent modifications to your system PATH. Alternatively, execute mc by navigating to the parent folde

docs.min.io

 

# [신규 터미널] 모니터링 Show HTTP call trace for all incoming and internode on MinIO
https://docs.min.io/community/minio-object-store/reference/minio-mc-admin/mc-admin-trace.html
# mc admin trace --errors -v -a k8s-tenant1 --insecure # 4xx, 5xx 에러만 보기
mc admin trace -v -a k8s-tenant1 --insecure

# https://docs.min.io/community/minio-object-store/reference/minio-mc/mc-ls.html
mc ls --summarize --recursive k8s-tenant1 --insecure

Total Size: 0 B
Total Objects: 0

# https://docs.min.io/community/minio-object-store/reference/minio-mc/mc-cat.html
echo hello > hello.txt
mc cp ./hello.txt k8s-tenant1/mybucket/ --insecure
/root/hello.txt:           6 B / 6 B ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 494 B/s 0s

mc cat k8s-tenant1/mybucket/hello.txt --insecure
hello

# 100MB 파일 생성
</dev/urandom tr -dc 'A-Za-z0-9' | head -c 100M > randtext.txt
ls -alh randtext.txt
-rw-r--r-- 1 root root 100M Sep 20 14:24 randtext.txt
cat randtext.txt | md5sum
e9dacdeefb85d5ab467b39dbd062eb28  -

# https://docs.min.io/community/minio-object-store/reference/minio-mc/mc-cp.html
mc cp ./randtext.txt k8s-tenant1/mybucket/ --insecure
/root/randtext.txt:        100.00 MiB / 100.00 MiB ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 309.26 MiB/s 0s

mc cat k8s-tenant1/mybucket/randtext.txt --insecure | md5sum
e9dacdeefb85d5ab467b39dbd062eb28  -

# MinIO Multipart Upload는 '큰 파일을 S3 방식으로 업로드할 때 쪼개서 올리고, 다 올리면 서버가 합쳐주는' 기능
[Client] ---CreateMultipartUpload---> [MinIO]
         <--- UploadId ---------------
[Client] ---UploadPart(part1)--------> [MinIO]
[Client] ---UploadPart(part2)--------> [MinIO]
...
[Client] ---CompleteMultipartUpload--> [MinIO]
         <--- OK + Final Object -------


mc admin trace -v -a k8s-tenant1 --insecure
127.0.0.1:30002 [REQUEST s3.CompleteMultipartUpload] [2025-09-14T15:11:04.710] [Client IP: 10.42.0.1]
127.0.0.1:30002 POST /mybucket/randtext.txt?uploadId=ZTMyZjNlMjAtZDkyNi00YjcyLTlhNGItZTI4ODBiNzBmZTM1LmY3N2ZiOTY0LWM5NmItNDE5YS1iNThmLWY3ODAyM2FmY2JjM3gxNzU3ODMwMjY0NDE5MzA0NDQ1
127.0.0.1:30002 Proto: HTTP/1.1
127.0.0.1:30002 Host: 127.0.0.1:30002
127.0.0.1:30002 Content-Type: application/octet-stream
127.0.0.1:30002 User-Agent: MinIO (linux; amd64) minio-go/v7.0.90 mc/RELEASE.2025-08-13T08-35-41Z
127.0.0.1:30002 X-Amz-Content-Sha256: 159a60374060e572e313b089f1d4658285b3676e38c08cdba940c0342f7431a9
127.0.0.1:30002 X-Amz-Date: 20250914T061104Z
127.0.0.1:30002 Accept-Encoding: zstd,gzip
127.0.0.1:30002 Authorization: AWS4-HMAC-SHA256 Credential=minio/20250914/us-east-1/s3/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=3006225675b1e83ec73a4acdc49e14912ea547e075be739cc9a580ebde31a858
127.0.0.1:30002 Content-Length: 687
127.0.0.1:30002 <CompleteMultipartUpload xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Part><PartNumber>1</PartNumber><ETag>2e7fda86cc02f78e25480c65efb94a29</ETag></Part><Part><PartNumber>2</PartNumber><ETag>e2b66d6f0368ce9a13de6ca12ed78a90</ETag></Part><Part><PartNumber>3</PartNumber><ETag>7b0ae1958b0f62992b13dfe4a7dddf07</ETag></Part><Part><PartNumber>4</PartNumber><ETag>942130b42c320b33a77ad9812416546b</ETag></Part><Part><PartNumber>5</PartNumber><ETag>81bea9efbeb94cadacb210343698806d</ETag></Part><Part><PartNumber>6</PartNumber><ETag>89c6655445c13b36c83a37b8b8e589c1</ETag></Part><Part><PartNumber>7</PartNumber><ETag>084d78f3c6126f91dc72c1933754ec46</ETag></Part></CompleteMultipartUpload>

127.0.0.1:30002 [RESPONSE] [2025-09-14T15:11:04.717] [ Duration 7.469ms TTFB 7.391942ms ↑ 793 B  ↓ 321 B ]
...
<CompleteMultipartUploadResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Location>https://127.0.0.1:30002/mybucket/randtext.txt</Location><Bucket>mybucket</Bucket><Key>randtext.txt</Key><ETag>&#34;2ab7293624b88db302add6a2cacdd804-7&#34;</ETag></CompleteMultipartUploadResult>
# 참고) put https://docs.min.io/community/minio-object-store/reference/minio-mc/mc-put.html

cp randtext.txt randtext2.txt
mc cp ./randtext2.txt k8s-tenant1/mybucket/ --disable-multipart --insecure
/root/randtext2.txt:       100.00 MiB / 100.00 MiB ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 272.52 MiB/s 0s

mc ls --summarize --recursive --versions k8s-tenant1 --insecure
[2025-09-20 14:07:55 KST]     0B mybucket/
[2025-09-20 14:24:08 KST]     6B STANDARD null v1 PUT mybucket/hello.txt
[2025-09-20 14:24:59 KST] 100MiB STANDARD null v1 PUT mybucket/randtext.txt
[2025-09-20 14:25:49 KST] 100MiB STANDARD null v1 PUT mybucket/randtext2.txt

Total Size: 200 MiB
Total Objects: 4

k exec -it -n tenant1 tenant1-pool-0-0 -c minio -- sh -c 'df -hT --type xfs'
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/nvme1n1   xfs    10G   67M   10G   1% /export0
/dev/nvme4n1   xfs    10G   67M   10G   1% /export1
/dev/nvme3n1   xfs    10G   67M   10G   1% /export2
/dev/nvme2n1   xfs    10G   67M   10G   1% /export3

k exec -it -n tenant1 tenant1-pool-0-0 -c minio -- ls -R /export0
/export0:
data

/export0/data:
mybucket

/export0/data/mybucket:
hello.txt  randtext.txt  randtext2.txt

/export0/data/mybucket/hello.txt:
xl.meta

/export0/data/mybucket/randtext.txt:
373427ec-c35a-4cb4-ada6-cfff86ac1d2b  xl.meta

/export0/data/mybucket/randtext.txt/373427ec-c35a-4cb4-ada6-cfff86ac1d2b:
part.1  part.2  part.3  part.4  part.5  part.6  part.7

/export0/data/mybucket/randtext2.txt:
e3d23b43-5fbf-4fa9-8b29-b67e9075ad76  xl.meta

/export0/data/mybucket/randtext2.txt/e3d23b43-5fbf-4fa9-8b29-b67e9075ad76:
part.1

k exec -it -n tenant1 tenant1-pool-0-0 -c minio -- ls -R /export1
/export1:
data

/export1/data:
mybucket

/export1/data/mybucket:
hello.txt  randtext.txt  randtext2.txt

/export1/data/mybucket/hello.txt:
xl.meta

/export1/data/mybucket/randtext.txt:
373427ec-c35a-4cb4-ada6-cfff86ac1d2b  xl.meta

/export1/data/mybucket/randtext.txt/373427ec-c35a-4cb4-ada6-cfff86ac1d2b:
part.1  part.2  part.3  part.4  part.5  part.6  part.7

/export1/data/mybucket/randtext2.txt:
e3d23b43-5fbf-4fa9-8b29-b67e9075ad76  xl.meta

/export1/data/mybucket/randtext2.txt/e3d23b43-5fbf-4fa9-8b29-b67e9075ad76:
part.1
k exec -it -n tenant1 tenant1-pool-0-0 -c minio -- ls -R /export2
/export2:
data

/export2/data:
mybucket

/export2/data/mybucket:
hello.txt  randtext.txt  randtext2.txt

/export2/data/mybucket/hello.txt:
xl.meta

/export2/data/mybucket/randtext.txt:
373427ec-c35a-4cb4-ada6-cfff86ac1d2b  xl.meta

/export2/data/mybucket/randtext.txt/373427ec-c35a-4cb4-ada6-cfff86ac1d2b:
part.1  part.2  part.3  part.4  part.5  part.6  part.7

/export2/data/mybucket/randtext2.txt:
e3d23b43-5fbf-4fa9-8b29-b67e9075ad76  xl.meta

/export2/data/mybucket/randtext2.txt/e3d23b43-5fbf-4fa9-8b29-b67e9075ad76:
part.1
k exec -it -n tenant1 tenant1-pool-0-0 -c minio -- ls -R /export3
/export3:
data

/export3/data:
mybucket

/export3/data/mybucket:
hello.txt  randtext.txt  randtext2.txt

/export3/data/mybucket/hello.txt:
xl.meta

/export3/data/mybucket/randtext.txt:
373427ec-c35a-4cb4-ada6-cfff86ac1d2b  xl.meta

/export3/data/mybucket/randtext.txt/373427ec-c35a-4cb4-ada6-cfff86ac1d2b:
part.1  part.2  part.3  part.4  part.5  part.6  part.7

/export3/data/mybucket/randtext2.txt:
e3d23b43-5fbf-4fa9-8b29-b67e9075ad76  xl.meta

/export3/data/mybucket/randtext2.txt/e3d23b43-5fbf-4fa9-8b29-b67e9075ad76:
part.1

tree -a /var/lib/directpv/mnt
/var/lib/directpv/mnt
├── 668267e9-fdd2-46c9-b854-1ac1de70132f
│   ├── .FSUUID.668267e9-fdd2-46c9-b854-1ac1de70132f -> .
│   ├── .directpv
│   │   └── meta.info
│   └── pvc-214d8389-2b4c-48b6-b2d4-67fc413e78fd
│       └── data
│           ├── .minio.sys
│           │   ├── buckets
│           │   │   ├── .background-heal.json
│           │   │   │   └── xl.meta
│           │   │   ├── .bloomcycle.bin
│           │   │   │   └── xl.meta
│           │   │   ├── .usage-cache.bin
│           │   │   │   └── xl.meta
│           │   │   ├── .usage-cache.bin.bkp
│           │   │   │   └── xl.meta
│           │   │   ├── .usage.json
│           │   │   │   └── xl.meta
│           │   │   └── mybucket
│           │   │       ├── .metadata.bin
│           │   │       │   └── xl.meta
│           │   │       ├── .usage-cache.bin
│           │   │       │   └── xl.meta
│           │   │       └── .usage-cache.bin.bkp
│           │   │           └── xl.meta
│           │   ├── config
│           │   │   ├── config.json
│           │   │   │   └── xl.meta
│           │   │   └── iam
│           │   │       ├── format.json
│           │   │       │   └── xl.meta
│           │   │       └── sts
│           │   │           ├── 7MBQEE4A1RCSD8MXVICS
│           │   │           │   └── identity.json
│           │   │           │       └── xl.meta
│           │   │           └── 7MH3LVEE6GR4R51PRCOF
│           │   │               └── identity.json
│           │   │                   └── xl.meta
│           │   ├── format.json
│           │   ├── multipart
│           │   ├── pool.bin
│           │   │   └── xl.meta
│           │   └── tmp
│           │       ├── .trash
│           │       │   ├── 006fdcfb-80d6-4591-82c0-b961d5e988cd
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 049ee707-f322-4c15-869b-3467630c3547
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 04bd7c26-3182-43e7-b8a7-222b17b8fa48
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 0bd70081-bdd8-42e7-a9a0-c50629cdb913
│           │       │   ├── 100bf5c5-4d43-4acb-b5c5-c03d3d54c0cc
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 11f80acd-8e00-40ae-8f4d-c9a6bd3cc265
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 15414eab-7a3b-4a97-aec0-3bd425784ceb
│           │       │   ├── 21a98aae-b503-4b61-8e04-eb18d3ce840d
│           │       │   ├── 30b97719-61f9-43da-a401-cb8779bb0b9c
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 3f0adbe8-4184-43d2-a187-aedd294ceef3
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 4e77226a-4dbe-4569-9b0e-ce42f124be65
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 4f597774-3c8c-4ea4-aca8-129edd62b530
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 571d2a47-58fe-4113-a578-dbd82ce0b98a
│           │       │   ├── 58742c44-8d0a-4f1e-be39-1b045014c91b
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 5c0da458-5cff-4e8b-93f8-0e3efe388ac9
│           │       │   ├── 6721d170-fcd7-4198-ac26-655f791bf041
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 6b3e1d30-ad3c-4527-98d0-1a430c697674
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 6b477cbf-d77b-4e5b-b478-f28653abff4f
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 707151d5-45f0-4c96-8391-694589c55d91
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 872cbfdd-8d97-427c-b00b-3ecc2394ad7e
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 9471b23a-aace-4759-a894-45db581da583
│           │       │   ├── 948cd323-9cf9-4b1c-aeb8-f8dcefbd3472
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 9564c467-f1b4-4064-a1e6-45116771e308
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 969f27c5-1af3-4048-8520-06087235c86e
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 98d270a7-2bfb-4d2d-8995-0c6d84236b65
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 9d76c024-e1fa-4f45-9323-c779c00ae80a
│           │       │   ├── a17ed609-8165-42dd-9a0f-0f8004d5691d
│           │       │   ├── a54af509-fa05-417b-8961-982f47c53662
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── a5ee46a9-60e4-4cff-861e-cff3fc662cd8
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── cb1e96eb-1cb9-49b6-b8a0-179214287378
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── dcc6fe56-e62c-4d1a-8311-ca1349ae69a7
│           │       │   │   └── xl.meta.bkp
│           │       │   └── e93df4d6-cc56-4bde-822b-ee06d7f1153f
│           │       │       └── xl.meta.bkp
│           │       └── 0f3ba3ea-5262-4c76-804c-46cc321fedcb
│           └── mybucket
│               ├── hello.txt
│               │   └── xl.meta
│               ├── randtext.txt
│               │   ├── 373427ec-c35a-4cb4-ada6-cfff86ac1d2b
│               │   │   ├── part.1
│               │   │   ├── part.2
│               │   │   ├── part.3
│               │   │   ├── part.4
│               │   │   ├── part.5
│               │   │   ├── part.6
│               │   │   └── part.7
│               │   └── xl.meta
│               └── randtext2.txt
│                   ├── e3d23b43-5fbf-4fa9-8b29-b67e9075ad76
│                   │   └── part.1
│                   └── xl.meta
├── 94ca8715-bbb0-47ad-93f9-43af207e0240
│   ├── .FSUUID.94ca8715-bbb0-47ad-93f9-43af207e0240 -> .
│   ├── .directpv
│   │   └── meta.info
│   └── pvc-4a372c6f-6fe1-4ec8-8616-eba5e6b03b57
│       └── data
│           ├── .minio.sys
│           │   ├── buckets
│           │   │   ├── .background-heal.json
│           │   │   │   └── xl.meta
│           │   │   ├── .bloomcycle.bin
│           │   │   │   └── xl.meta
│           │   │   ├── .usage-cache.bin
│           │   │   │   └── xl.meta
│           │   │   ├── .usage-cache.bin.bkp
│           │   │   │   └── xl.meta
│           │   │   ├── .usage.json
│           │   │   │   └── xl.meta
│           │   │   └── mybucket
│           │   │       ├── .metadata.bin
│           │   │       │   └── xl.meta
│           │   │       ├── .usage-cache.bin
│           │   │       │   └── xl.meta
│           │   │       └── .usage-cache.bin.bkp
│           │   │           └── xl.meta
│           │   ├── config
│           │   │   ├── config.json
│           │   │   │   └── xl.meta
│           │   │   └── iam
│           │   │       ├── format.json
│           │   │       │   └── xl.meta
│           │   │       └── sts
│           │   │           ├── 7MBQEE4A1RCSD8MXVICS
│           │   │           │   └── identity.json
│           │   │           │       └── xl.meta
│           │   │           └── 7MH3LVEE6GR4R51PRCOF
│           │   │               └── identity.json
│           │   │                   └── xl.meta
│           │   ├── format.json
│           │   ├── multipart
│           │   ├── pool.bin
│           │   │   └── xl.meta
│           │   └── tmp
│           │       ├── .trash
│           │       │   ├── 00429d98-9994-4ef5-ad5d-da1af22deec8
│           │       │   ├── 00453b3f-9c16-472a-8d1b-a500092addd4
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 05cd70b9-fa7e-4b55-94ac-6ae7527182fd
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 078726d8-849c-4b2a-8061-345e9aad4b57
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 0828a598-2376-45ef-8ef0-13cca73cba1e
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 22a805bd-f4a6-42f5-819b-73116159991f
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 26e28304-1087-4c89-8dcf-6adc5c1f3998
│           │       │   ├── 2eba803e-e18d-4b85-aeeb-0c55c7aced90
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 368dce08-f056-453d-a09c-d56b9cd0512d
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 42095284-2f39-4ad9-899b-7aa026cd7fff
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 44de14b6-033a-46df-ba7c-4caf929913f8
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 4b64ab54-0233-48a1-9130-d71ad13dedfa
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 4f0dbb28-ed3b-49e8-b06c-79fe75639c8c
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 54fd0e5a-db30-4306-b106-691d5002babb
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 57b307cb-02e6-4b40-81c3-b097b657e437
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 5bf1d20a-ef64-4d46-9f3a-966b701c44ca
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 76d95cd5-5f69-45ce-87a5-2a0c155d7871
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 85661bc6-7c93-4a0f-99e1-320b441197d3
│           │       │   ├── 9076fbea-8b8d-4666-8185-1ac076f46b89
│           │       │   ├── beaaa1a1-2b83-433e-b86d-26d3f75f81df
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── c288aa6c-87a3-4227-9183-ea5964051d40
│           │       │   ├── c76aaa46-6fd9-4b50-a928-bc0396670df4
│           │       │   ├── d32eedb8-0f2a-4c85-97a7-1fc9db40c3d9
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── d451e679-5bfa-4b3c-89b6-29c19206f4f1
│           │       │   ├── dbaa1c58-3d47-4e12-9737-bfb56b6e6371
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── e09a53cb-2a1a-4889-bfa9-6d683998a02c
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── e5b6681e-cc28-4fbc-80cd-39a066d0d09b
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── e8f12744-4f79-464c-a7da-ec7245578ecf
│           │       │   ├── f34e5780-c827-4d02-8905-5634db2310e6
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── f433ed4e-450b-4aaa-9d90-49a04e2fe427
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── fbf234bc-a79b-4911-b831-7927c1538dae
│           │       │   │   └── xl.meta.bkp
│           │       │   └── ffce816c-a115-4765-b5ce-2b2174403a89
│           │       │       └── xl.meta.bkp
│           │       └── 49594e7d-93b3-4d93-9a9e-71fe2fe4793b
│           └── mybucket
│               ├── hello.txt
│               │   └── xl.meta
│               ├── randtext.txt
│               │   ├── 373427ec-c35a-4cb4-ada6-cfff86ac1d2b
│               │   │   ├── part.1
│               │   │   ├── part.2
│               │   │   ├── part.3
│               │   │   ├── part.4
│               │   │   ├── part.5
│               │   │   ├── part.6
│               │   │   └── part.7
│               │   └── xl.meta
│               └── randtext2.txt
│                   ├── e3d23b43-5fbf-4fa9-8b29-b67e9075ad76
│                   │   └── part.1
│                   └── xl.meta
├── 94dca655-fc05-4e5f-a7d8-a8b1e953f220
│   ├── .FSUUID.94dca655-fc05-4e5f-a7d8-a8b1e953f220 -> .
│   ├── .directpv
│   │   └── meta.info
│   └── pvc-6aa17a8c-3e37-4dbd-a837-32683b6d765f
│       └── data
│           ├── .minio.sys
│           │   ├── buckets
│           │   │   ├── .background-heal.json
│           │   │   │   └── xl.meta
│           │   │   ├── .bloomcycle.bin
│           │   │   │   └── xl.meta
│           │   │   ├── .usage-cache.bin
│           │   │   │   └── xl.meta
│           │   │   ├── .usage-cache.bin.bkp
│           │   │   │   └── xl.meta
│           │   │   ├── .usage.json
│           │   │   │   └── xl.meta
│           │   │   └── mybucket
│           │   │       ├── .metadata.bin
│           │   │       │   └── xl.meta
│           │   │       ├── .usage-cache.bin
│           │   │       │   └── xl.meta
│           │   │       └── .usage-cache.bin.bkp
│           │   │           └── xl.meta
│           │   ├── config
│           │   │   ├── config.json
│           │   │   │   └── xl.meta
│           │   │   └── iam
│           │   │       ├── format.json
│           │   │       │   └── xl.meta
│           │   │       └── sts
│           │   │           ├── 7MBQEE4A1RCSD8MXVICS
│           │   │           │   └── identity.json
│           │   │           │       └── xl.meta
│           │   │           └── 7MH3LVEE6GR4R51PRCOF
│           │   │               └── identity.json
│           │   │                   └── xl.meta
│           │   ├── format.json
│           │   ├── multipart
│           │   ├── pool.bin
│           │   │   └── xl.meta
│           │   └── tmp
│           │       ├── .trash
│           │       │   ├── 032027e7-b5a6-4064-a53b-02d228ec5f0a
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 034f62b2-744c-4806-b70b-a4f45a19f841
│           │       │   ├── 0949eea7-f714-4975-bab2-414db9b69f6e
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 0f6dd7c4-c48b-4874-aafd-60fc4a84e25a
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 12673790-7565-4fea-84d6-2af512f62f3d
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 1461ae9e-0295-45d4-8600-c417fa387a64
│           │       │   ├── 167dc3ef-3ce8-4e49-85b2-dcc91bbfa015
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 16cb95fc-55ae-4c13-b4f0-76164f2435e1
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 3872b7ac-4f03-49e0-99d5-5976e6a140ff
│           │       │   ├── 3cac4403-d128-4f98-9c6a-baed7e0070b0
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 4993e421-dc05-4ce3-9aed-965eb523387d
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 4f9b40de-af26-4641-83d0-d34c98cf0ad3
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 5483040f-7068-4eb6-911e-8db3aa07c8f1
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 64b2e147-6f85-4204-879f-1b94d7b3bd8b
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 711d1818-731c-4471-b133-e87da045c7e9
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 7508f792-391c-42d3-909f-71499f0ea2f1
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 80c3c43d-64f3-4ff4-b185-e19a60282dd6
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 84df7354-1928-48f8-a6bf-c2ec4698bf19
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 8ac6fef1-8a7e-43fd-805b-1db1c3947d9a
│           │       │   ├── 8ad30567-ef42-40bb-8063-51991b94d0d2
│           │       │   ├── 96f79219-ba78-45b9-80b8-acaad6e3be71
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── 97c1d642-b38a-4ea6-8094-fd7338f153c0
│           │       │   ├── b6cca107-478b-47ec-ba57-61b26709278f
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── bd37c07a-7240-4bdb-ad64-0019edabc3ff
│           │       │   ├── c05f3c4e-7b6f-4532-95fe-5b575665ebbc
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── ca92ad81-f8fc-423e-a03c-8bab94d7134e
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── cbc9252d-0511-43cf-b32d-52ca00850a54
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── d3c710bc-98d0-4902-b3bd-a5f4b2df85d7
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── d54eff25-5850-4b9b-b5cd-09ba3d902b60
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── ec701ed0-6701-4688-b2a4-fb858e90f299
│           │       │   │   └── xl.meta.bkp
│           │       │   ├── efbfa4d6-592c-4495-836e-5c1d968908e1
│           │       │   │   └── xl.meta.bkp
│           │       │   └── f675868f-1053-4683-acab-d784ff035146
│           │       └── 1fc71795-b86c-4d31-a636-64c9d2353ec7
│           └── mybucket
│               ├── hello.txt
│               │   └── xl.meta
│               ├── randtext.txt
│               │   ├── 373427ec-c35a-4cb4-ada6-cfff86ac1d2b
│               │   │   ├── part.1
│               │   │   ├── part.2
│               │   │   ├── part.3
│               │   │   ├── part.4
│               │   │   ├── part.5
│               │   │   ├── part.6
│               │   │   └── part.7
│               │   └── xl.meta
│               └── randtext2.txt
│                   ├── e3d23b43-5fbf-4fa9-8b29-b67e9075ad76
│                   │   └── part.1
│                   └── xl.meta
└── afa0c1ac-a9a4-4cd5-8ea2-3d1cb51a9445
    ├── .FSUUID.afa0c1ac-a9a4-4cd5-8ea2-3d1cb51a9445 -> .
    ├── .directpv
    │   └── meta.info
    └── pvc-a6e3bbf9-ab29-41d8-ac3b-c1d8920e0d98
        └── data
            ├── .minio.sys
            │   ├── buckets
            │   │   ├── .background-heal.json
            │   │   │   └── xl.meta
            │   │   ├── .bloomcycle.bin
            │   │   │   └── xl.meta
            │   │   ├── .usage-cache.bin
            │   │   │   └── xl.meta
            │   │   ├── .usage-cache.bin.bkp
            │   │   │   └── xl.meta
            │   │   ├── .usage.json
            │   │   │   └── xl.meta
            │   │   └── mybucket
            │   │       ├── .metadata.bin
            │   │       │   └── xl.meta
            │   │       ├── .usage-cache.bin
            │   │       │   └── xl.meta
            │   │       └── .usage-cache.bin.bkp
            │   │           └── xl.meta
            │   ├── config
            │   │   ├── config.json
            │   │   │   └── xl.meta
            │   │   └── iam
            │   │       ├── format.json
            │   │       │   └── xl.meta
            │   │       └── sts
            │   │           ├── 7MBQEE4A1RCSD8MXVICS
            │   │           │   └── identity.json
            │   │           │       └── xl.meta
            │   │           └── 7MH3LVEE6GR4R51PRCOF
            │   │               └── identity.json
            │   │                   └── xl.meta
            │   ├── format.json
            │   ├── multipart
            │   ├── pool.bin
            │   │   └── xl.meta
            │   └── tmp
            │       ├── .trash
            │       │   ├── 0304523e-8f2e-4835-bb34-0aca8df3e9a9
            │       │   ├── 03739d19-d53a-4372-8933-8351e5711aa5
            │       │   │   └── xl.meta.bkp
            │       │   ├── 1055d635-0916-43e9-8e26-7e474ab6cd1a
            │       │   │   └── xl.meta.bkp
            │       │   ├── 14d29fdb-ef2a-445e-976c-648a0762c066
            │       │   │   └── xl.meta.bkp
            │       │   ├── 1ba4f3a7-be5e-463f-b64e-585b94beec85
            │       │   ├── 1deda179-282f-4b3d-9612-f942fed452b2
            │       │   │   └── xl.meta.bkp
            │       │   ├── 1f99bf28-678c-4b5a-965b-8eed3dbf1bb7
            │       │   │   └── xl.meta.bkp
            │       │   ├── 22bb00bd-cc1b-41a1-b60c-14cc8b5d4e91
            │       │   │   └── xl.meta.bkp
            │       │   ├── 246695ca-8a7a-4253-87e9-3ecba6a3a7e4
            │       │   │   └── xl.meta.bkp
            │       │   ├── 2d197490-bd5d-4fbe-9268-a1539156dc26
            │       │   │   └── xl.meta.bkp
            │       │   ├── 351180bb-c1b5-4a15-8641-761e7c1ba6e6
            │       │   │   └── xl.meta.bkp
            │       │   ├── 3eb3ef1e-2d76-45c2-9997-0cb122faab64
            │       │   ├── 4af1135a-d470-423d-ac00-b75279120b83
            │       │   │   └── xl.meta.bkp
            │       │   ├── 518242f7-6b63-4022-beb3-d0f86fac9c2e
            │       │   │   └── xl.meta.bkp
            │       │   ├── 5af48e46-f887-4259-8a99-33fef0ad6915
            │       │   │   └── xl.meta.bkp
            │       │   ├── 68dee719-884d-4290-af20-ab0f38d7cb43
            │       │   ├── 6a149cd9-8583-41cf-abc2-89d08376525c
            │       │   │   └── xl.meta.bkp
            │       │   ├── 7047e8f5-e137-46cc-8ac3-12e223813b6a
            │       │   ├── 8d53a24e-cba6-416d-892b-a5902e0992fd
            │       │   │   └── xl.meta.bkp
            │       │   ├── 9c630f25-19bb-4d6e-9803-1570a5d46780
            │       │   ├── 9f901e89-f1fe-4a5e-827d-038042d40e02
            │       │   │   └── xl.meta.bkp
            │       │   ├── a251fadf-5cf0-4b89-b5d7-934feeea89bd
            │       │   ├── b11d73f3-0352-434e-9944-77f0d9b469e7
            │       │   │   └── xl.meta.bkp
            │       │   ├── c6766137-3249-45f2-81f9-2782603ddb8d
            │       │   │   └── xl.meta.bkp
            │       │   ├── ceb2aa42-f25f-45f6-8e05-648b472773ac
            │       │   │   └── xl.meta.bkp
            │       │   ├── d65ba5b3-ec17-40a7-970c-e57e2f75a6ff
            │       │   │   └── xl.meta.bkp
            │       │   ├── d6dd1d39-dd96-4887-83d7-b1c2b41739ba
            │       │   │   └── xl.meta.bkp
            │       │   ├── d962df64-4be9-4a07-bf22-b5bd3522b91b
            │       │   │   └── xl.meta.bkp
            │       │   ├── e6fd6a44-9636-4f99-9bb8-1266f37baab9
            │       │   │   └── xl.meta.bkp
            │       │   ├── ee036975-a68f-4807-9791-4f0d3e0559d0
            │       │   │   └── xl.meta.bkp
            │       │   ├── fbddbf16-901c-4189-a680-c5dcf7f7f27c
            │       │   │   └── xl.meta.bkp
            │       │   └── fc9cf036-bc12-4128-a3c1-ca886f151cf7
            │       └── 4eca5a1c-f617-41dc-a50e-47b18b54bf43
            └── mybucket
                ├── hello.txt
                │   └── xl.meta
                ├── randtext.txt
                │   ├── 373427ec-c35a-4cb4-ada6-cfff86ac1d2b
                │   │   ├── part.1
                │   │   ├── part.2
                │   │   ├── part.3
                │   │   ├── part.4
                │   │   ├── part.5
                │   │   ├── part.6
                │   │   └── part.7
                │   └── xl.meta
                └── randtext2.txt
                    ├── e3d23b43-5fbf-4fa9-8b29-b67e9075ad76
                    │   └── part.1
                    └── xl.meta

241 directories, 232 files

# rm - https://docs.min.io/community/minio-object-store/reference/minio-mc/mc-rm.html
mc rm k8s-tenant1/mybucket/randtext2.txt --insecure
Removed `k8s-tenant1/mybucket/randtext2.txt`.

mc cp k8s-tenant1/mybucket/randtext.txt ./randtext3.txt  --insecure
.../mybucket/randtext.txt: 100.00 MiB / 100.00 MiB ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 569.60 MiB/s 0s

(⎈|default:N/A) root@k3s-s:~#

 

실습 환경 삭제

aws cloudformation delete-stack --stack-name miniolab