NimbusNotes, Docker ile container hâline getirilmiş ve Google Kubernetes Engine üzerinde çalıştırılmış bulut tabanlı bir not yönetim uygulamasıdır. Uygulama, kullanıcıdan aldığı notları kalıcı olarak saklar ve Kubernetes bileşenleri üzerinden yönetilir.
NimbusNotes basit bir Flask web uygulamasıdır.
- Kullanıcı web arayüzünden not ekler veya siler.
- Flask uygulaması gelen istekleri işler.
- Notlar
/data/notes.txtdosyasına yazılır. /datadizini Kubernetes PVC ile kalıcı diske bağlanır.- Böylece pod silinse veya yeniden oluşsa bile notlar korunur.
Kullanıcı → LoadBalancer Service → Kubernetes Deployment → Flask Container → Persistent Volume Claim → Persistent Volume
Projede kullanılan Kubernetes bileşenleri:
- Deployment: Uygulama pod’unu yönetir ve yeni sürümlerin dağıtılmasını sağlar.
- Service: LoadBalancer tipiyle uygulamaya dış IP üzerinden erişim sağlar.
- PersistentVolumeClaim: Uygulama verilerinin kalıcı tutulmasını sağlar.
- NetworkPolicy: Pod trafiği için ağ politikası tanımlar.
- Python Flask
- Docker
- Google Cloud Build
- Artifact Registry
- Google Kubernetes Engine
- Kubernetes Deployment
- Kubernetes Service
- Persistent Volume Claim
- NetworkPolicy
- GitHub
Uygulama Dockerfile ile container hâline getirilmiştir. Docker image, Artifact Registry üzerinde saklanmıştır.
Image adresi:
europe-west1-docker.pkg.dev/nimbusnotes-busra-2026/nimbusnotes-repo/nimbusnotes:v10
Projede CI/CD yapılandırması için cloudbuild.yaml kullanılmıştır.
Cloud Build akışı:
Kaynak kod → Cloud Build → Docker image build → Artifact Registry push
Cloud Build ile uygulamanın Docker image'ı otomatik olarak oluşturulmuş ve Artifact Registry'ye gönderilmiştir. Kubernetes deployment güncellemesi ise kubectl set image komutu ile uygulanmıştır.
Deployment, NimbusNotes uygulamasının pod olarak çalışmasını sağlar.
Service ise uygulamanın dış dünyadan erişilebilir olmasını sağlar. Bu projede Service tipi LoadBalancer olarak tanımlanmıştır.
Uygulamadaki notlar container içinde geçici olarak tutulmamaktadır. Bunun yerine /data dizini PVC ile kalıcı diske bağlanmıştır.
Bu sayede:
- Pod silinse bile veri kaybolmaz.
- Yeni pod aynı veriye erişebilir.
- Uygulama daha güvenilir hâle gelir.
Projede network-policy.yaml dosyası ile NetworkPolicy tanımlanmıştır. Bu dosya, NimbusNotes podları için ingress ağ politikası oluşturur.
Demo ortamında LoadBalancer üzerinden uygulamaya erişimin kesilmemesi için ingress trafiğine izin verilmiştir. Böylece NetworkPolicy bileşeninin Kubernetes ortamında nasıl tanımlandığı gösterilmiştir.
Yeni uygulama sürümleri Kubernetes rolling update ile canlı ortama alınmıştır.
Örnek komut:
kubectl set image deployment/nimbusnotes-deployment nimbusnotes=europe-west1-docker.pkg.dev/nimbusnotes-busra-2026/nimbusnotes-repo/nimbusnotes:v10
Rolling update sayesinde Kubernetes eski pod’u kapatıp yeni image ile pod oluşturur.
Kubernetes rollout geçmişi üzerinden eski sürümlere geri dönülebilir.
Örnek komut:
kubectl rollout undo deployment/nimbusnotes-deployment
Bu özellik, hatalı bir sürüm yayınlandığında önceki çalışan sürüme dönmeyi sağlar.
Deployment replica sayısı değiştirilerek uygulama ölçeklenebilir.
Örnek komut:
kubectl scale deployment nimbusnotes-deployment --replicas=2
Bu projede PVC ReadWriteOnce yapıda olduğu için kalıcı disk aynı anda birden fazla pod tarafından kullanılamaz. Bu nedenle uygulama final durumda 1 replica ile çalıştırılmıştır. Scaling komutu test edilmiştir ve PVC kullanılan uygulamalarda storage stratejisinin önemli olduğu görülmüştür.
kubectl get podskubectl get servicekubectl get pvckubectl get deploymentkubectl rollout history deployment/nimbusnotes-deploymentkubectl rollout status deployment/nimbusnotes-deployment
app/app.pyapp/Dockerfileapp/requirements.txtapp/static/clouds.jpgk8s/deployment.yamlk8s/service.yamlk8s/pvc.yamlk8s/network-policy.yamlcloudbuild.yamlREADME.md
Uygulama, proje geliştirme ve test sürecinde Google Kubernetes Engine üzerinde başarıyla çalıştırılmıştır. Proje tamamlandıktan sonra ek bulut maliyeti oluşmaması amacıyla aktif GKE kaynakları devre dışı bırakılmıştır.
Kaynak kod, Docker ve Kubernetes yapılandırmaları bu depoda incelenebilir.
https://github.com/Busra1101/nimbusnotes
kubectl get pods
kubectl get svc
kubectl get pvc
kubectl get deploymentDeployment replica sayısı değiştirilerek scaling testi yapılmıştır.
kubectl scale deployment nimbusnotes-deployment --replicas=2
kubectl get podsPVC ReadWriteOnce kullandığı için final çalışan sürümde replica sayısı tekrar 1 yapılmıştır.
kubectl scale deployment nimbusnotes-deployment --replicas=1Yeni image sürümü deployment üzerine uygulanmıştır.
kubectl set image deployment/nimbusnotes-deployment nimbusnotes=europe-west1-docker.pkg.dev/nimbusnotes-busra-2026/nimbusnotes-repo/nimbusnotes:v10
kubectl rollout status deployment/nimbusnotes-deploymentHatalı veya istenmeyen bir güncelleme durumunda önceki sürüme dönüş test edilmiştir.
kubectl rollout undo deployment/nimbusnotes-deployment
kubectl rollout status deployment/nimbusnotes-deploymentUygulamanın kullandığı gerçek veri dosyası pod içindeki /data/notes.txt yolundadır.
kubectl get pods
kubectl exec -it POD_ADI -- cat /data/notes.txtUygulamanın mimarisini, Docker ve Kubernetes yapılandırmalarını, GKE dağıtımını, kalıcı veri saklama yaklaşımını ve CI/CD sürecini içeren proje sunumuna aşağıdaki bağlantıdan ulaşabilirsiniz.
Projenin teknik dokümantasyonu ve sunum materyalleri tarafımdan hazırlanmıştır.