AWS Bottlerocket ile Kubernetes Altyapısını İyileştirmek
AWS Bottlerocket ile Kubernetes Altyapısını İyileştirmek
Bottlerocket, özellikle AWS ve Kubernetes ortamlarında konteynerleri çalıştırmak için tasarlanmış ve optimize edilmiş Linux tabanlı bir işletim sistemidir.
AWS, Bottlerocket'ı konteynerleri hizmetlerinde çalıştırmak için daha iyi bir temel sağlamak amacıyla oluşturdu:
- Amazon EKS (Elastic Kubernetes Service)
- Amazon ECS (Elastic Container Service)
AWS tarafından geliştirilmiş olsa da, açık kaynaklı ve bulut-bağımsızdır. Yani:
- Herkes kullanabilir, katkıda bulunabilir veya değiştirebilir.
- Bare metal, VMware ve diğer bulut sağlayıcılarında çalışabilir.
- Topluluk gelişimine katılabilir.
Bu yaklaşım, AWS'nin Firecracker (AWS Lambda ve Fargate'in arkasındaki mikroVM teknolojisi) gibi diğer projelerini açık kaynak haline getirmesine benzer.

Bottlerocket, Amazon Linux'un Yerini mi Alıyor?
Hayır, Bottlerocket, Amazon Linux'un yerini almıyor. Farklı amaçlara hizmet ediyorlar ve bir arada var olacaklar. Amazon Linux genel amaçlı bir işletim sistemidir.
Bottlerocket ve Talos Linux, felsefe olarak birbirine en çok benzeyenlerdir; her ikisi de varsayılan olarak SSH erişimini devre dışı bırakır ve API tabanlı yapılandırma kullanır, bu da onları değişmez (immutable) altyapı modelleri için çok uygun hale getirir.

Bottlerocket'ta Bash Komutları Var mı?
Hayır, Bottlerocket standart bir Linux dağıtımında bulacağınız tüm geleneksel bash komutlarına sahip değildir. Bu tasarım gereğidir.
- Bottlerocket, yalnızca konteynerleri çalıştırmak için gerekenlere indirgenmiştir.
- Yönetim için bir kontrol konteyneri ve bir yönetici (admin) konteyneri modeli kullanır.
- Çoğu geleneksel Linux yardımcı programı ve kabuğu temel işletim sistemine dahil değildir.
Bottlerocket'ın kendisinin bir kabuğu (shell) yoktur. Buna ihtiyacı da yoktur. Sistemle hala ayrıcalıklı "host" konteynerleri (kabukları olan) aracılığıyla etkileşime girebilirsiniz.
Uygulama Zamanı!
Bottlerocket, yapılandırma için TOML kullanır. YAML'nin aksine, girintileme ayrıştırmayı etkilemez ve JSON'un aksine yorum satırlarına izin verir, bu da onu daha okunabilir kılar.
EKS üzerinde bir Bottlerocket kümesi kurmak için bir AWS hesabınızın, AWS CLI, kubectl ve eksctl'nin kurulu olduğunu varsayıyoruz.
Proje Yapısı
Proje yapısı, her bir .tf dosyasının amacını tanımlamayı kolaylaştıracak şekilde düzenlenmiştir.

Terraform ile altyapı kurulumunu otomatikleştirebiliriz. bottlerocket-userdata.toml.tpl dosyası, Terraform tarafından kümeye özgü değerlerle (Cluster Name, API Server, Certificate) doldurulur ve Bottlerocket bu dosyayı ilk açılışta okuyarak düğümü yapılandırır.
Kurulumu otomatikleştiren bir bash betiği (setup-terraform.sh) kullanarak süreci hızlandırabilirsiniz. Bu betik ön gereksinimleri kontrol eder, Terraform'u başlatır ve kurulumu gerçekleştirir.

Kurulum tamamlandıktan sonra, düğümlerin Bottlerocket işletim sistemiyle çalıştığını kubectl get nodes -o wide komutuyla doğrulayabilirsiniz.

Not: Bottlerocket API kullanarak Kubernetes küme sürümünü (örneğin 1.30'dan 1.31'e) yükseltemezsiniz. Bottlerocket API yalnızca bireysel düğümlerdeki işletim sistemi ayarlarını ve güncellemelerini yönetir.
eBPF ve İzlenebilirlik
Bottlerocket, eBPF programlarını çalıştırmak için gerekli yapılandırma ve güncel Linux çekirdeği ile birlikte gelir. Çekirdek başlıklarını veya modüllerini manuel olarak yüklemenize gerek yoktur.
Örnek bir eBPF demosu ile, sistemdeki dosya açılışlarını veya TCP bağlantılarını gerçek zamanlı olarak izleyebilirsiniz. Bu araçlar, hata ayıklama ve güvenlik izleme için kritik öneme sahiptir.

Neden Bottlerocket?
Genel amaçlı işletim sistemlerine (Amazon Linux veya Ubuntu gibi) kıyasla avantajları şunlardır:
- Daha Küçük Saldırı Yüzeyi: Yalnızca konteyner çalıştırmak için gerekenleri içerir.
- Otomatik Güncellemeler: İşletim sistemi güncellemelerini işlemsel (transactional) olarak destekler.
- Kubernetes için Optimize Edilmiş: EKS ile sorunsuz çalışacak şekilde tasarlanmıştır.
- Kutudan Çıktığı Gibi eBPF Desteği: Manuel yapılandırma gerektirmez.
- Tutarlılık: Tüm düğümler aynı minimal işletim sistemini çalıştırır.
Değişmezlik (Immutability) Ne Anlama Geliyor?
Bottlerocket değişmezdir, yani:
- Salt Okunur Kök Dosya Sistemi:
/salt okunur olarak bağlanır. Sistem dosyalarını değiştiremezsiniz. - Görüntü Tabanlı Güncellemeler: Güncellemeler tüm işletim sistemi görüntüsünü atomik olarak değiştirir.
- Çift Bölümleme (Partition): Güncellemeler pasif bölüme yazılır ve yeniden başlatma ile aktif hale gelir. Hata durumunda geri alınabilir (rollback).

Geçiş Süreci ve Dikkat Edilmesi Gerekenler
Amazon Linux veya Ubuntu'dan Bottlerocket'a geçiş şeffaf değildir:
- Paket Yöneticisi Yok:
apt installveyayum installçalışmaz. - SSH Yok: SSM veya yönetici konteynerleri kullanmalısınız.
- Docker Yok: Bottlerocket sadece containerd kullanır. Kubernetes 1.24+ ile zaten containerd standart hale geldiği için iş yükleriniz farkı hissetmeyecektir.
Temizlik
Demo tamamlandığında, maliyet oluşmaması için kaynakları temizlemeyi unutmayın. cleanup.sh betiği veya terraform destroy komutu ile tüm altyapıyı kaldırabilirsiniz.

Bottlerocket, DevOps süreçlerinizde konteyner iş yüklerini (ve eBPF araçlarını) ölçekli olarak çalıştırmayı daha kolay, daha güvenli ve daha tutarlı hale getirir.