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": Mengaturresource.request.cpucontainer menjadi100mjika tidak ditentukan secara eksplisit.memory: "64Mi": Mengaturresource.request.memorycontainer menjadi64Mijika tidak ditentukan secara eksplisit.
default: Menentukan limit default untuk setiap container.cpu: "100m": Mengaturresource.limits.cpucontainer menjadi100mjika tidak ditentukan secara eksplisit.memory: "64Mi": Mengaturresource.limits.memorycontainer menjadi64Mijika 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 createdKita 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 createdMari 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 limitMari 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
- https://kubernetes.io/docs/concepts/policy/limit-range/
- https://kubernetes.io/docs/tasks/administer-cluster/manage-resources/memory-default-namespace/
Last updated on