Portal/Notes πŸ“
Cka

Limit Range

Versi Bahasa Indonesia. Baca dalam Bahasa Inggris

Secara default, container berjalan dengan sumber daya komputasi tanpa batas pada klaster Kubernetes.

LimitRange adalah resource Kubernetes yang memberlakukan batasan resource (CPU, memory) di tingkat namespace. Ini memastikan bahwa setiap pod/container dalam namespace memiliki request dan limit resource default. Container tidak dapat melebihi limit yang ditentukan. Menggunakan LimitRange akan mencegah konsumsi resource yang berlebihan oleh satu pod/container.

Mendefinisikan LimitRange

Mari kita buat file baru limitrange.yaml dan masukkan definisi di bawah ini. Konfigurasi ini akan membatasi CPU dan Memory di tingkat container.

apiVersion: v1
kind: LimitRange
metadata:
  name: resource-limits
  namespace: limited
spec:
  limits:
  - type: Container
    defaultRequest:
      cpu: "100m"
      memory: "64Mi"
    default:
      cpu: "100m"
      memory: "64Mi"
    max:
      cpu: "250m"
      memory: "128Mi"
  • defaultRequest: Menentukan request default untuk setiap container.
    • cpu: "100m": Mengatur resource.request.cpu container menjadi 100m jika tidak ditentukan secara eksplisit.
    • memory: "64Mi": Mengatur resource.request.memory container menjadi 64Mi jika tidak ditentukan secara eksplisit.
  • default: Menentukan limit default untuk setiap container.
    • cpu: "100m": Mengatur resource.limits.cpu container menjadi 100m jika tidak ditentukan secara eksplisit.
    • memory: "64Mi": Mengatur resource.limits.memory container menjadi 64Mi jika tidak ditentukan secara eksplisit.
  • max: Menentukan batas maksimum. Limit yang dikonfigurasi di setiap container tidak boleh melebihi nilai ini.

Menerapkan dan Memvalidasi

Mari kita terapkan file konfigurasi menggunakan perintah kubectl apply.

➜ kubectl apply -f limitrange.yaml 
limitrange/resource-limits created

Kita dapat memvalidasinya menggunakan perintah kubectl describe limitranges dengan namespace tertentu.

➜ kubectl -n limited describe limitranges 
Name:       resource-limits
Namespace:  limited

Type        Resource  Min  Max    
----        --------  ---  ---    
Container   cpu       -    250m   
Container   memory    -    128Mi  

Default Request  Default Limit  Max Limit/Request Ratio
---------------  -------------  -----------------------
100m             100m           -
64Mi             64Mi           -

Menguji LimitRange

Untuk menguji apakah konfigurasi kita berfungsi seperti yang diharapkan, kita dapat menjalankan pod tanpa menentukan resource apapun.

➜ kubectl -n limited run nginx --image=nginx          
pod/nginx created

Mari kita lihat detail pod menggunakan perintah kubectl describe.

➜ kubectl -n limited describe pod nginx  
Name:             nginx
Namespace:        limited
Priority:         0
Service Account:  default
Node:             minikube/192.168.49.2
Start Time:       Wed, 05 Feb 2025 17:49:07 +0700
Labels:           run=nginx
Annotations:      kubernetes.io/limit-ranger: LimitRanger plugin set: cpu, memory request for container nginx; cpu, memory limit for container nginx
Status:           Pending
IP:               
IPs:              <none>
Containers:
  nginx:
    Container ID:   
    Image:          nginx
    Image ID:       
    Port:           <none>
    Host Port:      <none>
    State:          Waiting
      Reason:       ContainerCreating
    Ready:          False
    Restart Count:  0
    Limits:
      cpu:     100m
      memory:  64Mi
    Requests:
      cpu:        100m
      memory:     64Mi
    Environment:  <none>
...

Seperti yang Anda lihat di atas, jika kita tidak menentukan resource.request dan resource.limits, maka akan diatur ke default yang baru saja kita konfigurasikan.

Sekarang mari kita coba membuat pod baru yang akan melebihi konfigurasi max dari LimitRange kita. Buat file baru bernama limitrange-pod.yaml dan masukkan definisi di bawah ini.

apiVersion: v1
kind: Pod
metadata:
  name: over-limit-pod
  namespace: limited
spec:
  containers:
  - name: over-limit-container
    image: nginx
    resources:
      limits:
        cpu: "1"  # Exceeds the 250m limit
        memory: "512Mi"  # Exceeds the 128Mi limit

Mari kita terapkan dan lihat apa yang terjadi.

➜ kubectl apply -f limitrange-pod.yaml

Error from server (Forbidden): error when creating "limitrange-pod.yaml": pods "over-limit-pod" is forbidden: [maximum cpu usage per Container is 250m, but limit is 1, maximum memory usage per Container is 128Mi, but limit is 512Mi]

Seperti yang Anda lihat, kita mendapat error saat membuat pod "over-limit-pod" karena CPU dan Memory limit melebihi LimitRange.

Referensi


Edit on GitHub

Last updated on

Limit Range | Faisal Affan