Bare-Metal & Sanallaştırılmış Düğümler Üzerinde Vanilla Kubernetes Kümesi, Flannel CNI, Rook-Ceph Dağıtık Blok/Dosya Depolama ve S3 Uyumlu MinIO Obje Depolama Entegrasyonu.
Teknik Dokümantasyon (PDF) • Geliştirici Portföyü • Mimari Şema • Test & Dogrulama
Bu çalışma; yüksek erişilebilirlik (High Availability), hata toleransı ve dinamik veri kalıcılığı (Dynamic Volume Provisioning) sağlamak amacıyla oluşturulan kurumsal bir Kubernetes + Rook-Ceph Dağıtık Depolama altyapı projesidir.
Kubernetes üzerindeki durum bilgisi tutan (stateful) mikroservislerin ve bulut-yerel uygulamaların veri sürekliliğini garanti altına almak için, ham blok diskler Rook operatörü aracılığıyla Ceph depolama havuzuna (Storage Pool) dahil edilmiş; CSI (Container Storage Interface) sürücüleri üzerinden uygulamalara otomatik kalıcı birim (PersistentVolumeClaim - PVC) tahsis edilmiştir.
┌───────────────────────────┐
│ Kubernetes Control Plane│
│ k8s-master (192.168.175.129)
│ API Server, etcd, Flannel │
└─────────────┬─────────────┘
│
┌──────────────────────┴──────────────────────┐
▼ ▼
┌───────────────────────────┐ ┌───────────────────────────┐
│ k8s-node-1 (Worker 1) │ │ k8s-node-2 (Worker 2) │
│ IP: 192.168.175.131 │ │ IP: 192.168.175.130 │
│ RAM: 4 GB | OS: 40 GB │ │ RAM: 4 GB | OS: 40 GB │
│ Ceph Disk: /dev/sdb 100GB│ │ Ceph Disk: /dev/sdb 100GB│
└─────────────┬─────────────┘ └─────────────┬─────────────┘
│ │
└──────────────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ Rook-Ceph Storage Cluster Mesh │
│ • Ceph MON, MGR & OSD Daemonlar │
│ • 2x Replicated Pool (200 GB Raw) │
│ • Ceph Block Pool & CephFS │
└──────────────────┬──────────────────┘
│
┌──────────────────────┴──────────────────────┐
▼ ▼
┌───────────────────────────┐ ┌───────────────────────────┐
│ Stateful API Mikroservisi │ │ S3 Uyumlu MinIO Gateway │
│ Flask App + Persistent PVC│ │ Obje Depolama & Web Panel │
└───────────────────────────┘ └───────────────────────────┘
| Düğüm Adı | Rolü | Statik IP | vCPU / RAM | Sistem Diski | Ceph OSD Veri Diski |
|---|---|---|---|---|---|
| k8s-master | Control Plane | 192.168.175.129 |
2 Core / 2 GB | 20 GB | - |
| k8s-node-1 | Worker Node | 192.168.175.131 |
2 Core / 4 GB | 40 GB | /dev/sdb (100 GB Raw SSD) |
| k8s-node-2 | Worker Node | 192.168.175.130 |
2 Core / 4 GB | 40 GB | /dev/sdb (100 GB Raw SSD) |
- Container Runtime: Docker yerine güncel standart olan
containerdçalışma zamanı kurulmuş veSystemdCgroup = trueyapılandırması uygulanmıştır. - Küme Başlatma:
kubeadm init --pod-network-cidr=10.244.0.0/16ile master düğüm oluşturulmuş; worker düğümleri şifreli token ile kümeye eklenmiştir. - CNI Ağ Katmanı: Düğümler arası pod haberleşmesi için
Flannel CNIuygulanmıştır.
- Cloud-Native Depolama Operatörü: Kubernetes CRD (Custom Resource Definition) mekanizması kullanan Rook operatörü dağıtılmıştır.
- Otomatik OSD Keşfi: Worker düğümlerine takılan biçimlendirilmemiş 100 GB'lık
/dev/sdbikincil diskleri taranarakCeph OSD (Object Storage Daemon)podlarına dönüştürülmüştür. - StorageClass & Dynamic Provisioning: Uygulamaların talebine göre anında hacim üreten
rook-ceph-blockdepolama sınıfı tanımlanmıştır.
- Stateful File API: Base64 formatında dosya yükleme/indirme yapan Python/Flask tabanlı REST servisi geliştirilmiş ve Dockerize edilmiştir.
- PVC Entegrasyonu: Uygulama podunun
/datadizini Ceph CSI üzerinden sağlanan PVC'ye bağlanmıştır. - MinIO Obje Depolama: S3 uyumlu API uç noktası sağlamak amacıyla Ceph kalıcı hacmi üzerinde MinIO sunucusu çalıştırılmıştır.
Depolama kümesinin dayanıklılığı ve hata toleransı şu senaryolarla test edilmiş ve doğrulanmıştır:
-
Pod Yeniden Başlatma & Yeniden Dağıtım (Resilience Test):
- Mikroservis üzerinden Ceph kalıcı birimine dosyalar yüklendi.
kubectl delete podkomutuyla pod zorla sonlandırıldı.- Yeni açılan pod aynı PVC'ye bağlandı ve tüm verilerin eksiksiz olarak korunduğu doğrulandı.
-
Düğüm Arızası ve Veri Kurtarma (Node Eviction Test):
- Worker 1 üzerinde çalışan pod kapatıldığında, Kubernetes pod'u Worker 2 düğümüne taşıdı.
- Ceph'in replike veri dağıtım mimarisi sayesinde veri kaybı ve I/O kilitlenmesi yaşanmadı.
-
MinIO S3 Obje İletişimi:
- Web arayüzü ve AWS CLI/S3 API aracılığıyla bucket oluşturma ve obje yükleme testleri başarıyla tamamlandı.
Tüm sunucularda swap alanını kapatın ve kernel parametrelerini yükleyin:
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfiltergit clone --single-branch --branch v1.12.0 https://github.com/rook/rook.git
cd rook/deploy/examples
kubectl create -f crds.yaml -f common.yaml -f operator.yaml
kubectl create -f cluster.yamlkubectl -n rook-ceph get pod
kubectl -n rook-ceph get cephcluster- Detaylı Rapor ve Teknik Dokümantasyon: Projenin adım adım konsol çıktıları, mimari diyagramları ve analizlerini içeren tam metin PDF dosyası repo içerisinde yer almaktadır:
MuhammetAtmaca-Kubernetes.pdf.
Muhammet Atmaca
- Web Sitesi: muhammetatmaca.com.tr
- GitHub: @muhammetatmaca
- E-posta: info@muhammetatmaca.com.tr
Bu proje MIT lisansı altında sunulmaktadır.