1. HugePages Nedir?
HugePages, Linux çekirdeğinde standart bellek sayfalarına kıyasla daha büyük bellek blokları ayırarak bellek yönetimini iyileştiren bir özelliktir. Büyük bellek tahsisi gerektiren veritabanları, yüksek performanslı hesaplama uygulamaları ve bellek yoğun programlar için oldukça faydalıdır.
2. Kubernetes’te HugePages Kullanımı Neden Önemli?
- Bellek Yönetimi: Daha büyük bellek sayfaları kullanarak TLB (Translation Lookaside Buffer) girişlerini azaltır, böylece CPU’nun bellek erişimini hızlandırır.
- Daha Az Overhead: Küçük bellek sayfalarının neden olduğu yönetim yükünü azaltarak performansı artırır.
- Optimize Edilmiş Performans: Redis, PostgreSQL, MySQL gibi uygulamalarda büyük veri işlemleri için daha verimli bellek tahsisi sağlar.
3. Kubernetes’te HugePages Nasıl Kullanılır?
Adım 1: Node’larda HugePages Desteğini Kontrol Etme
Öncelikle, mevcut HugePages desteğini görmek için şu komutu çalıştırın:
grep Huge /proc/meminfo
Çıktıda şu değerleri görmelisiniz:
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
📌 Eğer Hugepagesize: 1048576 kB
görüyorsanız, 1Gi HugePages destekleniyor demektir.
Adım 2: HugePages’i Etkinleştirme
2MB (2048KB) Sayfa Boyutları İçin:
echo 512 > /proc/sys/vm/nr_hugepages
1GB (1048576KB) Sayfa Boyutları İçin:
echo 8 > /proc/sys/vm/nr_hugepages
Bu değişiklikleri kalıcı hale getirmek için:
echo "vm.nr_hugepages=512" >> /etc/sysctl.conf
sysctl -p
Adım 3: Kubernetes Node’larda HugePages Tanımlama
Kubernetes’in HugePages’i tanıyıp tanımadığını kontrol etmek için:
kubectl describe node <node-name> | grep hugepages
Eğer tanımlanmamışsa, Kubelet için şu ayarı yapmalısınız:
Dosyayı aç:
sudo nano /etc/kubernetes/kubelet.env
Mevcut KUBELET_ARGS
değişkenini şu şekilde güncelleyin:
KUBELET_ARGS="--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf \
--config=/etc/kubernetes/kubelet-config.yaml \
--kubeconfig=/etc/kubernetes/kubelet.conf \
--container-runtime-endpoint=unix:///var/run/containerd/containerd.sock \
--runtime-cgroups=/system.slice/containerd.service \
--feature-gates=HugePageStorageMediumSize=true"
Kaydedip çıkın ve ardından şu komutları çalıştırın:
sudo systemctl daemon-reload
sudo systemctl restart kubelet
4. HugePages Türleri: hugepages-2Mi
ve hugepages-1Gi
Nedir?
Linux çekirdeği, farklı boyutlarda HugePages destekler. Kubernetes’te iki tür HugePages kullanabilirsin:
hugepages-2Mi
(2MB HugePages): Küçük ve orta ölçekli bellek tahsisleri için uygundur. Çoğu modern CPU’da varsayılan olarak desteklenir.hugepages-1Gi
(1GB HugePages): Büyük bellek tahsisleri yapan uygulamalar için optimize edilmiştir. Daha az sayıda büyük sayfa kullanarak bellek yönetimini iyileştirir.
32GB RAM İçin Hangisini Kullanmalıyım?
- 2MB HugePages için:
32GB / 2MB = 16384 adet HugePages gerekir. echo 16384 > /proc/sys/vm/nr_hugepages
resources: requests: hugepages-2Mi: 32Gi limits: hugepages-2Mi: 32Gi
- 1GB HugePages için:
32GB / 1GB = 32 adet HugePages gerekir. echo 32 > /proc/sys/vm/nr_hugepages
resources: requests: hugepages-1Gi: 32Gi limits: hugepages-1Gi: 32Gi
📌 Öneri: Eğer donanımın 1Gi HugePages destekliyorsa, 32GB için en verimli seçenek hugepages-1Gi
olacaktır.
Adım 5: Kubernetes’te Pod İçin HugePages Tanımlama
Bir Pod’un HugePages kullanmasını sağlamak için resource limits ayarlarını tanımlamalıyız:
apiVersion: v1
kind: Pod
metadata:
name: hugepage-pod
spec:
containers:
- name: hugepage-container
image: busybox
command: ["sleep", "3600"]
resources:
requests:
hugepages-2Mi: 100Mi
limits:
hugepages-2Mi: 100Mi
Eğer 1GB HugePages kullanacaksanız:
requests:
hugepages-1Gi: 1Gi
limits:
hugepages-1Gi: 1Gi
Adım 6: High Availability İçin Doğru Yaklaşım
- Tüm Worker Node’lara aynı miktarda HugePages tahsis edilmeli.
- Pod’un belirli bir node’a bağımlı olmaması için
nodeSelector
yerinenodeAffinity
kullanılmalı. - Pod’ları otomatik olarak dağıtmak için ReplicaSet veya Deployment kullanılmalı.
Node Affinity ile HugePages Destekleyen Node’lara Yönlendirme:
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: hugepages-enabled
operator: In
values:
- "true"
Bu sayede Kubernetes, hangi Worker Node müsaitse otomatik olarak oraya Pod’u yerleştirebilir.
Sonuç
High Availability için ReplicaSet veya Deployment ile pod’lar otomatik olarak dağıtılmalıdır.
Kubernetes’te HugePages kullanımı, bellek tahsisini optimize ederek performansı artırır.
Sadece Pod’un çalışacağı node’da değil, tüm uygun Worker Node’larda HugePages yapılandırılmalıdır.
Pod’ların herhangi bir node’a bağımlı olmasını engellemek için nodeAffinity
kullanılmalıdır.