Kubernetes'te Resource Request ve Limit: Pod'ları Kontrol Altına Al
Kubernetes cluster'ında bir Pod'un ne kadar kaynak (CPU, bellek) kullanacağını önceden söylemezsen iki sorun çıkar: Ya node'lar aşırı yüklenir, ya da Pod'lar birbirini öldürür. Request ve Limit ayarlaması ile bunu kontrol edersin.
Request: Pod'un minimum olarak ihtiyaç duyduğu kaynak. Scheduler bunu dikkate alarak Pod'u uygun node'a yerleştirir.
Limit: Pod'un maksimum kullanabileceği kaynak. Bunu aşarsa sistem Pod'u durdurur.
Bir YAML dosyası oluştur:
1apiVersion: v12kind: Pod3metadata:4name: web-app5spec:6containers:7- name: app8image: nginx:latest9resources:10requests:11memory: "128Mi"12cpu: "100m"13limits:14memory: "256Mi"15cpu: "500m"Burada:
- 100m = CPU'nun %0.1'i (1000m = 1 CPU)
- 128Mi = 128 Megabyte bellek
Pod'u çalıştır:
1kubectl apply -f pod.yamlPod'un gerçek tüketimini görmek için:
1kubectl top pod web-appÖrnek çıktı:
1NAME CPU(cores) MEMORY(bytes)2web-app 50m 64MiPod 50m CPU ve 64Mi bellek kullanıyor. Limit'in altında güvenli.
Genellikle Deployment kullanırsın. Hepsi aynı resource'u miras alır:
1apiVersion: apps/v12kind: Deployment3metadata:4name: api-server5spec:6replicas: 37selector:8matchLabels:9app: api10template:11metadata:12labels:13app: api14spec:15containers:16- name: api17image: myapp:v118resources:19requests:20memory: "256Mi"21cpu: "200m"22limits:23memory: "512Mi"24cpu: "1000m"Uygula:
1kubectl apply -f deployment.yaml2kubectl get pods3kubectl top pods -l app=apiCluster'da kaç kaynak kaldığını görmek için:
1kubectl describe nodesÇıktı örneği:
1Allocated resources:2(Total limits may be over 100 percent, i.e., overcommitted.)3Resource Requests Limits4-------- -------- ------5cpu 800m 2000m6memory 512Mi 1GiEğer Requests toplam node CPU'sunu aşarsa, yeni Pod'lar pending kalır.
Request ve Limit'i belirlerken:
- Request = uygulamanın normal tüketimi
- Limit = spike anında max tüketim
Birini hiç ayarlamazsan Kubernetes sınırsız kaynak vermeyi dener, cluster'ı çökertebilir.
[Kubernetes CronJob ile Periyodik Yedekleme Otomatikleştirme]
5 yorum
Yani pod başlasında iyi gidiyor sonra birden crash oluyor öyle mi Çünkü scheduler
ikisi de olabilir aslında scheduler podu yanlış yere koyar çünkü o kaynakların yeterli
peki ya requesti çok düşük set edersen ne oluyor pod yanlış yere mi gidiyor yoksa başlayınca crash mı oluyor
aynen request schedulera söylediğin "en az buna ihtiyacım var" demek limit ise "bundan fazla kullanmayın" demek ikisini ayarlamadığın zaman pod
ha böyle işte request ve limit arasındaki farkı hiç bilmiyordum requesti minimum gibi