Portal/Notes πŸ“
Cka

Resource Quota

Versi Bahasa Indonesia. Baca dalam Bahasa Inggris

Ketika beberapa pengguna atau tim berbagi klaster dengan jumlah node yang tetap, ada kekhawatiran bahwa satu tim dapat menggunakan lebih dari bagian sumber daya yang adil. Resource quota adalah alat bagi administrator untuk mengatasi masalah ini.

Resource quota, yang didefinisikan oleh objek ResourceQuota, memberikan batasan yang membatasi konsumsi sumber daya agregat per namespace. Ini dapat membatasi jumlah objek yang dapat dibuat dalam satu namespace berdasarkan jenisnya, serta jumlah total sumber daya komputasi yang dapat dikonsumsi oleh sumber daya di namespace tersebut.

Compute Resource Quota

Batasan ini mengontrol berapa banyak CPU dan memory yang dapat dialokasikan ke pod dalam sebuah namespace.

Mari kita buat file resource_quota.yaml dan masukkan konfigurasi berikut.

apiVersion: v1
kind: ResourceQuota
metadata:
  name: compute-quota
  namespace: limited
spec:
  hard:
    requests.cpu: "1"
    requests.memory: "2Gi"
    limits.cpu: "2"
    limits.memory: "4Gi"
  • request.cpu: Total CPU maksimum yang diminta di semua pod dalam namespace ini tidak boleh melebihi 1 core.
  • request.memory: Total memori maksimum yang diminta di semua pod dalam namespace ini tidak boleh melebihi 2GB.
  • limits.cpu: Total CPU maksimum yang digunakan oleh semua pod dalam namespace ini tidak boleh melebihi 2 core.
  • limits.memory: Total memori maksimum yang digunakan oleh semua pod dalam namespace ini tidak boleh melebihi 4GB.

Menerapkan dan Memvalidasi

Mari kita terapkan file konfigurasi menggunakan perintah kubectl apply.

➜ kubectl apply -f resource_quota.yaml 
resourcequota/compute-quota created

Kita dapat memvalidasinya menggunakan kubectl describe quota di namespace tertentu seperti ini.

➜ kubectl -n limited describe quota
Name:            compute-quota
Namespace:       limited
Resource         Used  Hard
--------         ----  ----
limits.cpu       0     2
limits.memory    0     4Gi
requests.cpu     0     1
requests.memory  0     2Gi

Storage Resource Quota

Kuota ini membatasi berapa banyak penyimpanan (Persistent Volumes) yang dapat dibuat dalam sebuah namespace.

Tambahkan beberapa baris ke file konfigurasi sebelumnya di bagian spec.hard untuk menentukan batas penyimpanan.

requests.storage: "64Gi"
persistentvolumeclaims: "10"
  • requests.storage: Total penyimpanan yang diminta oleh PVC dalam namespace ini tidak boleh melebihi 64GB.
  • persistentvolumeclaims: Jumlah total PVC dalam namespace ini tidak boleh melebihi 10.

Menerapkan dan Memvalidasi

Mari kita terapkan file konfigurasi dan validasi.

➜ kubectl apply -f resource_quota.yaml
resourcequota/compute-quota configured
➜ kubectl -n limited describe quota   
Name:                   compute-quota
Namespace:              limited
Resource                Used  Hard
--------                ----  ----
limits.cpu              0     2
limits.memory           0     4Gi
persistentvolumeclaims  0     10
requests.cpu            0     1
requests.memory         0     2Gi
requests.storage        0     64Gi

Object Count Quota

Kuota ini membatasi jumlah objek (Pods, Services, ConfigMaps, dll.) yang dapat dimiliki sebuah namespace.

Tambahkan beberapa baris ke file konfigurasi sebelumnya di bagian spec.hard untuk menentukan batas pod, service, secret, dan configmap.

pods: "5"
services: "2"
secrets: "2"
configmaps: "2"
  • pods: Jumlah total Pod dalam status non-terminal di namespace ini tidak boleh melebihi 5. Sebuah pod berada dalam status terminal jika .status.phase di (Failed, Succeeded) adalah true.
  • services: Jumlah total service dalam namespace ini tidak boleh melebihi 2.
  • secrets: Jumlah total secret dalam namespace ini tidak boleh melebihi 2.
  • configmaps: Jumlah total configmap dalam namespace ini tidak boleh melebihi 2.

Menerapkan dan Memvalidasi

Sekali lagi, mari kita terapkan konfigurasi dan validasi.

➜ kubectl apply -f resource_quota.yaml
➜ kubectl -n limited describe quota   
Name:                   compute-quota
Namespace:              limited
Resource                Used  Hard
--------                ----  ----
configmaps              1     2
limits.cpu              0     2
limits.memory           0     4Gi
persistentvolumeclaims  0     10
pods                    0     5
requests.cpu            0     1
requests.memory         0     2Gi
requests.storage        0     64Gi
secrets                 0     2
services                0     2

Kita dapat melihat semua batasan sumber daya yang baru saja kita buat. Ini akan memastikan sumber daya namespace ini tidak melebihi batas yang ditentukan.

Apa yang Terjadi jika Batas Dilampaui?

  • Jika membuat atau memperbarui sumber daya melanggar batasan kuota, permintaan akan gagal dengan kode status HTTP 403 FORBIDDEN dengan pesan yang menjelaskan batasan yang dilanggar.
  • Jika kuota diaktifkan dalam namespace untuk sumber daya komputasi seperti cpu dan memory, pengguna harus menentukan requests atau limits untuk nilai tersebut; jika tidak, sistem kuota dapat menolak pembuatan pod.
  • Kita dapat menggunakan LimitRange untuk memberlakukan request dan limit default untuk sumber daya komputasi.

Referensi


Edit on GitHub

Last updated on

Resource Quota | Faisal Affan