Saat melakukan membuat Proof of Concept (POC) di Minikube untuk Redis HA, saya mendapat issue, PVC statusnya masih pending dan setelah dicari tau ternyata issue tersebut karena PV di kubernetes belum dibuat. Solusinya disini tidak bisa digunakan di AWS, Azure ataupun Google Cloud karena jenis storage yang dibutuhkan berbeda, tetapi untuk cara troubleshooting sama.

Contoh error yang muncul di events anda describe

$ kubectl get events -n infra -w
45s         Warning   FailedScheduling         pod/redis-redis-ha-server-0                          0/2 nodes are available: persistentvolumeclaim "data-redis-redis-ha-server-0" bound to non-existent persistentvolume "data-redis-0". preemption: 0/2 nodes are available: 2 Preemption is not helpful for scheduling..

Solusi

Cara troubleshooting dan solusi atas masalah ini akan kita bahas disini

1. Cek PVC

Cek status PVC di namespace yang bersangkutan

$ kubectl get pvc -n infra
NAME                           STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
data-redis-redis-ha-server-0   Pending                                                                        standard       9m59s

untuk lebih detail kenapa statusnya pending, coba di describe

$ kubectl describe pvc/data-redis-redis-ha-server-0 -n infra
# output
...
Normal  ExternalProvisioning  52s (x43 over 10m)  persistentvolume-controller  Waiting for a volume to be created either by the external provisioner 'k8s.io/minikube-hostpath' or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered.

Cek berapa ukuran storage yang direquest oleh PVC dan accessModes

kubectl get pvc/data-redis-redis-ha-server-0 -o yaml -n infra
# output
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

accessModes harus sesuai dengan accessModes di PVC, untuk storage minimum storage yang tersedia di PV harus lebih besar atau sama dengan yang direquest PVC.

karena PVC dibuat dari PV, maka cek juga object tersebut

$ kubectl get pv
# output
No resources found

pada kasus ini karena cluster ini baru, belum ada PV yang dibuat sebelumnya yang bisa memberikan kebutuhan storage yang diminta oleh PVC.

2. Buat PV

Buat pv.yaml yang berisi

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-data-01
spec:
  storageClassName: standard
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Delete
  hostPath:
    path: "/tmp/data-redis-0"

deploy object pv tersebut

kubectl apply -f pv.yaml

tunggu beberapa saat hingga PV dibuat, lalu cek juga PVC, seharusnya statusnya sudah bound

$ kubectl get pvc -n infra
NAME                           STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
data-redis-redis-ha-server-0   Bound    pv-data-01                                 10Gi       RWO            standard       5m

Bila anda menemukan issue seperti ini di cluster Kubernetes anda baca referensi cloud provider masing-masing, untuk mendapatkan informasi yang lebih akurat.

Leave a comment

Your email address will not be published. Required fields are marked *