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: v1
2kind: Pod
3metadata:
4name: web-app
5spec:
6containers:
7- name: app
8image: nginx:latest
9resources:
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.yaml

Pod'un gerçek tüketimini görmek için:

1kubectl top pod web-app

Örnek çıktı:

1NAME CPU(cores) MEMORY(bytes)
2web-app 50m 64Mi

Pod 50m CPU ve 64Mi bellek kullanıyor. Limit'in altında güvenli.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

Genellikle Deployment kullanırsın. Hepsi aynı resource'u miras alır:

1apiVersion: apps/v1
2kind: Deployment
3metadata:
4name: api-server
5spec:
6replicas: 3
7selector:
8matchLabels:
9app: api
10template:
11metadata:
12labels:
13app: api
14spec:
15containers:
16- name: api
17image: myapp:v1
18resources:
19requests:
20memory: "256Mi"
21cpu: "200m"
22limits:
23memory: "512Mi"
24cpu: "1000m"

Uygula:

1kubectl apply -f deployment.yaml
2kubectl get pods
3kubectl top pods -l app=api

Cluster'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 Limits
4-------- -------- ------
5cpu 800m 2000m
6memory 512Mi 1Gi

Eğ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]

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz
  • adlı kullanıcıya yanıt verdi
    limonlukek

    Yani pod başlasında iyi gidiyor sonra birden crash oluyor öyle mi Çünkü scheduler

  • adlı kullanıcıya yanıt verdi
    kodkafasi

    ikisi de olabilir aslında scheduler podu yanlış yere koyar çünkü o kaynakların yeterli

  • adlı kullanıcıya yanıt verdi
    limonlukek

    peki ya requesti çok düşük set edersen ne oluyor pod yanlış yere mi gidiyor yoksa başlayınca crash mı oluyor

  • adlı kullanıcıya yanıt verdi
    kodkafasi

    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

  • limonlukek

    ha böyle işte request ve limit arasındaki farkı hiç bilmiyordum requesti minimum gibi