Kubernetes ve Kernel Panic

Umut Akbulut
BilgeAdam Teknoloji
3 min readAug 2, 2024

Kubernetes, uygulamaların yönetimini ve ölçeklendirilmesini kolaylaştıran güçlü bir konteyner orkestrasyon platformudur. Ancak, Kubernetes üzerinde çalışan sistemlerde zaman zaman çeşitli problemler yaşanabilir. Bu makalede, Kubernetes ile ilişkili kernel panik sorunlarını ele alacağız ve bu sorunların nasıl çözülebileceğini tartışacağız.

Kernel Panik Nedir?

Kernel panik, işletim sisteminin çekirdeğinde (kernel) beklenmeyen ve kritik bir hatanın meydana gelmesi durumunda sistemin çökmesini ifade eder. Bu tür hatalar genellikle donanım arızaları, yazılım hataları veya uyumsuz sürücülerden kaynaklanır. Kernel panik durumunda sistem genellikle kendini yeniden başlatır ve bu durum uygulamalarınızın çalışmasını kesintiye uğratabilir.

Kubernetes ve Kernel Panik

Kubernetes üzerinde çalışan uygulamalar, konteynerler içinde izole edilmiş bir şekilde çalışır. Ancak, konteynerlerin altında yatan işletim sistemi çekirdeği, tüm bu konteynerlerin doğru ve stabil bir şekilde çalışmasını sağlamak için kritik öneme sahiptir. Kernel panik durumları, Kubernetes kümesinde çalışan tüm konteynerlerin etkilenmesine neden olabilir. Örneğin:

  • Aşırı bellek kullanımı: Kubernetes düğümleri (nodes), aşırı bellek kullanımı nedeniyle kernel panik yaşayabilir. Bu durum genellikle bellek sızıntıları veya bellek yoğun uygulamaların çalıştırılması sonucu ortaya çıkar.
  • Uyumlu olmayan çekirdek modülleri: Kubernetes düğümlerinde çalışan çekirdek modülleri, uyumsuzluk nedeniyle kernel panik oluşturabilir. Bu modüller genellikle özel donanım sürücüleri veya üçüncü parti yazılımlar tarafından yüklenir.
  • Donanım arızaları: Özellikle bellek ve depolama birimlerinde meydana gelen donanım arızaları, çekirdek hatalarına yol açabilir.
  • Yanlış yapılandırma: Yanlış yapılandırılmış çekirdek parametreleri veya sistem ayarları, çekirdek paniklerine neden olabilir.

Örnek Olay: Bellek Kullanımı ve Kernel Panik

Bir bankacılık sisteminde çalışan Kubernetes kümesinde, bir mikroservis sürekli olarak bellek sızıntısı yapıyordu. Bu durum, düğümün belleğinin tükenmesine ve kernel panik yaşanmasına neden oldu. Sorunu çözmek için, mikroservisin bellek kullanımını izleyen ve belirli bir sınırı aştığında otomatik olarak yeniden başlatan bir bellek sınırlaması politikası (memory limit policy) uygulandı.

Bellek Sınırlaması Politikası

apiVersion: v1
kind: Pod
metadata:
name: memory-limit-pod
spec:
containers:
- name: memory-limit-container
image: your-application-image
resources:
limits:
memory: "512Mi"
requests:
memory: "256Mi"

Bu YAML dosyası, bir pod içinde çalışan konteyner için bellek sınırlarını belirler. Bu şekilde, konteyner belirli bir bellek miktarını aştığında Kubernetes konteyneri otomatik olarak yeniden başlatır ve olası bir kernel panik durumunu engeller.

Kernel Panik ile Baş Etme Yöntemleri

Güncellemeler ve Yamalar

İşletim sistemi çekirdeğinizi ve Kubernetes bileşenlerinizi düzenli olarak güncellemek, bilinen güvenlik açıklarını ve hataları gidermenizi sağlar. Çoğu kernel panik problemi, yeni yamalarla çözülür.

Kaynak Yönetimi

Kubernetes kaynak yönetimi (resource management) politikalarını kullanarak bellek ve CPU sınırlarını belirlemek, kaynak aşımını engeller ve çekirdek üzerindeki yükü azaltır. Örneğin, limits ve requests ayarlarını kullanarak her bir konteyner için belirli bir kaynak miktarı tanımlayabilirsiniz.

İzleme ve Uyarı Sistemleri

Kernel panik durumlarını erken tespit etmek için izleme ve uyarı sistemlerini (monitoring and alerting systems) kullanın. Prometheus ve Grafana gibi araçlar, sistem performansını izlemek ve olası sorunları tespit etmek için kullanılabilir.

Log Analizi

Kernel loglarını düzenli olarak analiz ederek olası sorunları erken aşamada tespit edin. dmesg ve journalctl gibi komutlar, çekirdek loglarını incelemenizi sağlar.

Sağlık Kontrolleri

Kubernetes’in sağladığı liveness ve readiness kontrolleri ile uygulamalarınızın sağlığını düzenli olarak kontrol edebilir ve sorunlu podları yeniden başlatabilirsiniz. Bu sayede, olası kernel panik durumlarından önce müdahale edebilirsiniz.

Yedekleme ve Kurtarma Planları

Kernel panik durumlarında veri kaybını önlemek için düzenli yedekleme ve kurtarma planları oluşturun. Bu, özellikle kritik uygulamalar ve veriler için önemlidir.

İleri Seviye Çözümler

Kernel Ayarlarını Optimize Etme

Kernel parametrelerini optimize ederek performansı artırabilir ve potansiyel hataları önleyebilirsiniz. Örneğin, sysctlkomutunu kullanarak çekirdek parametrelerini ayarlayabilirsiniz.

# Örnek sysctl ayarları
sysctl -w vm.swappiness=10
sysctl -w fs.inotify.max_user_watches=1048576

Özel Çekirdek Modülleri Kullanma

Özel gereksinimlere sahip sistemler için özel çekirdek modülleri geliştirilebilir veya mevcut modüller optimize edilebilir. Ancak, bu modüllerin doğru ve uyumlu çalıştığından emin olunmalıdır.

--

--

Umut Akbulut
BilgeAdam Teknoloji

"Tech leader & Software Architect. Passionate about digital transformation, microservices, and innovation in the finance and tech sectors."