Bu serideki yazılar:
1) Kubernetes ile ASP.Net Core Microservices Clean Architecture - Kubernetes ve Docker Kurulumu - Bölüm 1
2) Kubernetes ile ASP.Net Core Microservices Clean Architecture - Observability, APM, Tracing, Logging, Metric, Open Telemetry ve SigNoz - Bölüm 2
3) Kubernetes ile ASP.Net Core Microservices Clean Architecture - PostgreSQL, pgAdmin, Kubegres, High Availability ve Disaster recovery (HA/DR) - Bölüm 3
4) Kubernetes ile ASP.Net Core Microservices Clean Architecture - Service Discovery, API Gateway, CAP Teoremi, Outbox Pattern, Distributed Transaction, Distributed Caching, Kafka, Redis, Ocelot, Consul - Bölüm 4
5) Kubernetes ile ASP.Net Core Microservices Clean Architecture - Blazor Web Assembly, Kubernetes Deployment, Captain Docker, Helm Chart, Init Container ve Jobs, Production, Development, Staging, Local, Private Docker Registry - Bölüm 5
6) Kubernetes ile ASP.Net Core Microservices Clean Architecture - gRPC Web, JsonTranscoding, Swagger, Versioning, Container Design Patterns, RateLimiting, Appsettings, ConfigMap, CQRS, Circuit Breaker, Healtchecks, Data Protection ve Encryption - Bölüm 6
Github Proje: MicroservicesCleanArchitectureWithKubernetes
Visual Studio Extension: Captain Docker
WebAssembly: Web Uygulamalarının Geleceği
WebAssembly, modern web uygulamalarının hızlı, güvenli ve taşınabilir bir şekilde çalışabilmesini sağlayan bir teknolojidir. WebAssembly, tarayıcılar tarafından yorumlanan ve çalıştırılan düşük seviyeli bir derleme formatıdır. Bu, geliştiricilerin web uygulamalarını, performansı artırırken birden çok platformda çalışabilen ve doğrudan web tarayıcısında yürütülebilen kodlara dönüştürmelerini sağlar.
WebAssembly'in Temelleri:
WebAssembly, yüksek düzeyli programlama dilleri tarafından üretilen kodları tarayıcı tarafından yorumlanabilir ikili kodlara çevirir. Bu ikili kodlar, web uygulamasının tarayıcıda hızlı bir şekilde çalışabilmesini sağlamak üzere optimize edilmiştir. WebAssembly, C#, C, C++, Rust gibi dillerden türetilen kodları destekler ve JavaScript dışındaki dillerin tarayıcıda çalışmasına olanak tanır.
Performans ve Taşınabilirlik Avantajları:
WebAssembly, web uygulamalarının daha hızlı yürütülmesini sağlar. Yüksek performanslı derlemeler sayesinde, karmaşık işlemler daha verimli bir şekilde gerçekleştirilebilir. Ayrıca, platform bağımsızdır, bu da aynı kodun farklı tarayıcılarda ve işletim sistemlerinde çalışabilmesini sağlar. Bu, geliştiricilerin uygulamalarını birden çok platformda sorunsuz bir şekilde dağıtabilmelerini sağlar.
Güvenlik:
WebAssembly, güvenli bir ortam sağlamak için tasarlanmıştır. Tarayıcıların güvenlik özelliklerini kullanarak, WebAssembly kodu izole edilir ve güvenlik açıklarına karşı korunur. WebAssembly, kullanıcı verilerine erişimi sınırlar ve tarayıcıda çalışan diğer uygulamalara zarar verme potansiyelini azaltır.
Mevcut Ekosistemle Entegrasyon:
WebAssembly, JavaScript ile sorunsuz bir şekilde entegre olabilir. Mevcut JavaScript kodu ile birlikte çalışabilir ve JavaScript API'leriyle iletişim kurabilir. Bu, geliştiricilerin WebAssembly'yi mevcut projelere eklemelerini ve var olan kaynakları kullanmalarını kolaylaştırır.
Kullanım Alanları:
WebAssembly, geniş bir kullanım alanına sahiptir. Oyun geliştirme, veri işleme, 3D grafikler, sanal gerçeklik (VR) ve artırılmış gerçeklik (AR) gibi performans gerektiren uygulamalar için idealdir. Ayrıca, büyük projelerin web üzerinde çalıştırılmasını kolaylaştırır ve web uygulamalarının masaüstü uygulamalarına daha yakın performans sunmasını sağlar.
WebAssembly, web uygulamalarının performansını artırırken güvenlik ve taşınabilirlik sağlayan bir teknolojidir. Bu, geliştiricilere daha güçlü ve hızlı web uygulamaları oluşturma imkanı verir. WebAssembly, web geliştirme dünyasında geleceğin standartlarından biri olarak kabul edilmektedir ve web uygulamalarının potansiyelini genişletmektedir.
Blazor WebAssembly: Yenilikçi Bir Web Uygulama Geliştirme Çözümü
Blazor WebAssembly, modern web uygulamaları geliştirmek için Microsoft tarafından geliştirilen bir çerçevedir. Bu çözüm, tarayıcıda çalışan tamamen C# ve .NET tabanlı uygulamaların oluşturulmasına olanak tanır. Blazor WebAssembly, geleneksel olarak tarayıcı tarafında gerçekleştirilen web uygulama geliştirme sürecini, daha güçlü bir şekilde gerçekleştirmek ve daha zengin deneyimler sunmak için dönüştürür.
WebAssembly ile Güçlendirilmiş Tamamen Tarayıcı Tabanlı Uygulamalar:
Blazor WebAssembly, web uygulamalarını tamamen tarayıcıda çalışan, tek bir kod tabanı üzerinden oluşturma yeteneği sunar. Bu, geliştiricilere, zengin kullanıcı arayüzleri, etkileşimli özellikler ve verimli performans sunan, geleneksel tarayıcı tabanlı uygulamalardan daha güçlü uygulamalar geliştirme imkanı verir.
C# ve .NET Tabanlı Geliştirme:
Blazor WebAssembly, C# programlama dilini ve .NET platformunu kullanarak web uygulamaları geliştirmeyi sağlar. Bu, .NET geliştiricilerinin mevcut becerilerini kullanarak web uygulamaları oluşturmalarını kolaylaştırır. Ayrıca, zengin .NET ekosistemi ve araçlarından da yararlanabilirler.
İki Modlu Çalışma:
Blazor WebAssembly, iki farklı çalışma modu sunar. İlk olarak, geliştiricilerin tarayıcıda tamamen çalışan bir uygulama oluşturmasına olanak tanıyan Blazor WebAssembly Standalone modu vardır. İkincisi, sunucuyla etkileşim halinde olan bir uygulama oluşturmayı sağlayan Blazor WebAssembly Hosted modudur. Bu mod, sunucu tarafında iş mantığını ve veri erişimini kolaylaştırırken, hala tarayıcı tarafında zengin bir kullanıcı arayüzü sunar.
Kapsamlı UI Kontrolleri ve Özellikler:
Blazor WebAssembly, kullanıcı arayüzünü zenginleştirmek için geniş bir UI kontrol seti sunar. Bu kontroller, sayfa yönetimi, veri bağlama, form girişi, liste görüntüleme ve navigasyon gibi temel web uygulama özelliklerini kapsar. Ayrıca, üçüncü taraf kontrol kütüphanelerini de entegre etme yeteneği vardır.
Performans ve Güvenlik:
Blazor WebAssembly, performans ve güvenlik açısından optimize edilmiştir. WebAssembly'nin avantajlarından faydalanarak, kodlar tarayıcıda hızlı bir şekilde yürütülür. Ayrıca, sunucu tarafında gerçekleştirilen güvenlik kontrolleri ve tarayıcının güvenlik mekanizmalarıyla birleşerek, güvenli bir uygulama geliştirmeye yardımcı olur.
Blazor WebAssembly, geliştiricilere güçlü ve tamamen tarayıcı tabanlı web uygulamaları geliştirme imkanı sunar. C# ve .NET becerilerini kullanarak, geliştiriciler daha verimli bir şekilde uygulamalar oluşturabilir ve zengin kullanıcı deneyimleri sunabilirler. Blazor WebAssembly, web uygulama geliştirme alanında önemli bir yenilik ve gelecek vadeden bir çözümdür.
Kubernetes ve Docker: Konteynerizasyonun Gücünü Birleştiren İlişki
Kubernetes ve Docker, modern yazılım geliştirme ve dağıtım süreçlerinde büyük öneme sahip olan iki popüler teknolojidir. Docker, konteyner tabanlı uygulama paketleme ve çalıştırma platformudur. Kubernetes ise, konteyner orkestrasyon platformudur.
Docker ve Konteynerizasyon:
Docker, uygulamaları konteyner adı verilen izole edilmiş ortamlarda çalıştırmayı sağlayan bir konteynerizasyon teknolojisidir. Konteynerler, uygulama ve bağımlılıklarını birleştirir ve herhangi bir ortamda tutarlı bir şekilde çalışmalarını sağlar. Docker, uygulamaların bağımsız bir şekilde taşınmasını, dağıtılmasını ve çalıştırılmasını kolaylaştırır. Docker, uygulamaların çalışacağı ortamda gereksinim duyulan tüm paketleri ve kaynakları içeren konteyner imajları oluşturur.
Kubernetes ve Konteyner Orkestrasyonu:
Kubernetes, konteyner tabanlı uygulamaların yönetimini ve orkestrasyonunu sağlayan açık kaynaklı bir platformdur. Kubernetes, konteynerlerin dinamik olarak ölçeklenmesini, yüksek kullanılabilirlik sağlanmasını, hata toleransının elde edilmesini ve uygulama güncellemelerinin sorunsuz bir şekilde yapılmasını sağlar. Kubernetes, konteynerlerin dağıtımını, yönetimini, takibini ve hizmet keşfini otomatikleştirir. Konteynerlerin çalıştığı Kubernetes kümesi, düğümlerden oluşur ve bu düğümler, konteynerleri barındırır ve yönetir.
Kubernetes ve Docker'ın İlişkisi:
Kubernetes ve Docker, birbirini tamamlayan teknolojilerdir. Kubernetes, Docker'ın konteynerlerin yönetimi ve orkestrasyonu için ideal bir platform sunar. Kubernetes, Docker imajlarını kullanarak uygulamaları dağıtabilir ve Docker ile uyumlu çalışan bir konteyner çalışma zamanı sağlar. Docker imajları, Kubernetes kümesinde çalıştırılan konteynerlerin temel yapı taşlarıdır. Kubernetes, Docker imajlarının dağıtımını, yönetimini ve ölçeklendirmesini otomatikleştirir.
Konteyner Yönetimi ve Dağıtımı:
Docker, uygulamaların bağımsız konteynerler halinde paketlenmesini ve çalıştırılmasını sağlar. Docker imajları, uygulama ve bağımlılıklarını içeren bir paketleme formatıdır. Kubernetes ise, bu Docker imajlarını alır ve konteynerleri ölçeklendirme, dağıtım, hizmet keşfi ve otomatik hata toleransı sağlama gibi işlevlerle yönetir. Kubernetes, Docker imajlarının çalıştırılacağı düğümleri belirler ve kaynakları etkin bir şekilde yönetir.
Ekosistem ve İşbirliği:
Kubernetes ve Docker, geniş bir ekosistem ve aktif bir topluluğa sahiptir. Docker, birçok araç ve hizmetin yanı sıra Docker Hub gibi merkezi bir imaj deposu sunar. Kubernetes ise, birçok eklenti, yapılandırma aracı ve izleme aracı gibi geniş bir ekosisteme sahiptir. Bu teknolojiler, birlikte çalışabilirliklerini sağlamak için sürekli olarak birbirleriyle entegre olmayı ve iyileştirmeyi hedefleyen işbirliği içindedir.
Kubernetes ve Docker, konteyner tabanlı uygulama dağıtımının güçlü bir ikilisidir. Docker, uygulama paketleme ve çalıştırma işlemlerini kolaylaştırırken, Kubernetes konteynerlerin yönetimi ve orkestrasyonunu sağlar. Docker imajları, Kubernetes üzerinde çalışan konteynerlerin temel yapı taşlarıdır. Bu iki teknoloji, ölçeklenebilir, güvenilir ve esnek uygulama dağıtımı sağlamak için birlikte çalışır. Kubernetes ve Docker'ın geniş ekosistemleri ve toplulukları, sürekli gelişen bir ortam sunar ve yazılım geliştirme ve dağıtım süreçlerinde önemli bir rol oynar.
Private Docker Registry: Güvenli ve Özel Konteyner Depolama ve Dağıtımı
Docker, uygulamaların konteynerleştirilmesi ve dağıtımı için popüler bir platformdur. Docker Hub gibi genel konteyner deposu hizmetleri, herkese açık olarak konteynerlerin paylaşılmasını ve erişimini sağlar. Ancak, bazı durumlarda uygulamaların güvenliği, gizliliği ve özel kullanım gereksinimleri nedeniyle özel bir Docker Registry gerekebilir. Private Docker Registry, konteynerlerin güvenli bir şekilde depolanmasını ve dağıtılmasını sağlayan özel bir konteyner deposu çözümüdür.
Güvenlik ve Girişim İçi Kullanım:
Private Docker Registry, uygulamalarınızın güvenliğini artırmanızı sağlar. Özel bir Docker Registry kullanarak, konteynerlerinize sınırlı erişime sahip olabilir, yetkilendirme ve kimlik doğrulama mekanizmalarıyla koruma sağlayabilirsiniz. Bu, hassas veriler içeren uygulamaların ve işletme içi kullanıma yönelik uygulamaların güvenli bir şekilde depolanmasını ve dağıtılmasını sağlar.
Özel Kurallar ve Yönetim:
Private Docker Registry, uygulamalarınızın depolanma ve dağıtım süreçlerini tam olarak kontrol etmenizi sağlar. Kendi özel kurallarınızı uygulayabilir, belirli gereksinimlere ve politikalara uygun şekilde konteynerlerinizi yönetebilirsiniz. Bu, özel gereksinimlere sahip işletmeler, düzenlemelere tabi olan sektörler veya iç denetim gereksinimleri olan şirketler için önemlidir.
Hızlı ve Güvenli Dağıtım:
Private Docker Registry, konteynerlerinizi hızlı ve güvenli bir şekilde dağıtmanızı sağlar. Kendi ağınız içinde yer aldığından, internet üzerinden hızlı bir şekilde erişim sağlar. Konteynerlerin yerel ağda depolanması ve dağıtılması, performansı artırırken veri bütünlüğünü ve güvenliğini sağlar.
Ölçeklenebilirlik:
Private Docker Registry, ihtiyaçlarınıza göre ölçeklenebilir bir şekilde tasarlanmıştır. Yüksek kullanıcı trafiği veya büyük konteyner depolama gereksinimleri durumunda ölçeklendirilebilir ve performansı korur. Bu, büyük ölçekli projelerde veya kuruluşlarda konteyner yönetiminin verimli bir şekilde gerçekleştirilmesini sağlar.
İçerik Yönetimi ve Versiyonlama:
Private Docker Registry, konteynerlerinizin içerik yönetimini ve versiyon kontrolünü kolaylaştırır. Her bir konteynerin farklı sürümlerini ve değişikliklerini takip edebilir, geri dönüşler yapabilir ve farklı ortamlara dağıtım yapabilirsiniz. Bu, yazılım süreçlerini daha yönetilebilir ve verimli hale getirir.
Private Docker Registry, güvenlik, gizlilik ve özel kullanım gereksinimleri olan projeler için önemli bir araçtır. Konteynerlerin güvenli bir şekilde depolanmasını ve dağıtılmasını sağlar, özelleştirilebilir yönetim ve güvenlik mekanizmaları sunar. Özel kurallara, versiyonlamaya ve içerik yönetimine olanak tanır. İşletmeler, özel gereksinimlere sahip uygulamaları hızlı, güvenli ve kontrol altında yönetmek için Private Docker Registry çözümünü tercih edebilirler.
Captain Docker Visual Studio Extension: Docker İşlemlerini Kolaylaştıran Bir Visual Studio Uzantısı
Captain Docker Visual Studio Extension, Docker konteynerlerini daha kolay bir şekilde yönetmek ve işlemleri otomatikleştirmek için geliştirilmiş bir Visual Studio uzantısıdır. Bu uzantı, Docker projelerini geliştiren ve dağıtan geliştiricilerin, Docker imajlarını oluşturma, yayınlama, çekme, etiketleme ve diğer Docker işlemlerini daha hızlı ve verimli bir şekilde gerçekleştirmelerini sağlar. Captain Docker, Docker entegrasyonunu Visual Studio ortamına getirerek geliştirme sürecini kolaylaştırır.
Docker İşlemlerinin Otomatikleştirilmesi:
Captain Docker Visual Studio Extension, Docker işlemlerini otomatikleştirir. Geliştiriciler, Visual Studio ortamında birkaç tıklama ile Docker imajlarını oluşturabilir, yayınlayabilir, çekebilir, etiketleyebilir ve diğer Docker işlemlerini gerçekleştirebilir. Bu, Docker komutlarını elle çalıştırmak ve terminali kullanmak zorunda kalmadan Docker işlemlerini hızlı ve hatasız bir şekilde gerçekleştirmeyi sağlar.
Kolay Proje Yönetimi:
Captain Docker, Docker projelerinin yönetimini kolaylaştırır. Visual Studio Solution Explorer üzerinden Docker projelerine erişebilir ve Dockerfile'ları kolayca düzenleyebilirsiniz. Proje düzeyinde Docker ayarlarını yapılandırabilirsiniz.
Hızlı Build ve Yayınlama:
Captain Docker, Docker imajlarını hızlı bir şekilde oluşturmayı ve yayınlamayı sağlar. Projenizi derledikten sonra, Captain Docker uzantısı ile Docker imajını otomatik olarak oluşturabilir ve belirli bir Docker Registry'ye yayınlayabilirsiniz. Bu, projenin sürekli entegrasyon (CI) ve sürekli dağıtım (CD) süreçlerini kolaylaştırır.
Güvenli Dağıtım ve Etiketleme:
Captain Docker Visual Studio Extension, Docker imajlarının güvenli bir şekilde dağıtılmasını ve etiketlenmesini sağlar. İmajlarınıza güvenli kimlik doğrulama ve yetkilendirme mekanizmaları ekleyebilir ve belirli etiketlerle imajları etiketleyebilirsiniz. Bu, farklı ortamlarda (örneğin, geliştirme, test, üretim) farklı Docker imajlarının kullanılmasını sağlar.
Özelleştirilebilirlik:
Captain Docker, kullanıcıların ihtiyaçlarına göre özelleştirilebilir. Docker işlemlerini yapısı ve adımları değiştirilebilir ve genişletilebilir bir yapıya sahiptir. Bu, geliştiricilerin kendi iş akışlarına ve gereksinimlerine göre Captain Docker'ı özelleştirmesine olanak tanır.
Captain Docker Visual Studio Extension, Docker konteynerlerinin geliştirme sürecini kolaylaştıran ve otomatikleştiren güçlü bir araçtır. Docker işlemlerini hızlı ve hatasız bir şekilde gerçekleştirirken, proje yönetimini kolaylaştırır. Hızlı build ve yayınlama imkanı sunar, güvenli dağıtım ve etiketleme sağlar. Özelleştirilebilirlik, kullanıcıların kendi iş akışlarına uygun şekilde Captain Docker'ı yapılandırmasını sağlar. Captain Docker, Docker projeleri üzerinde çalışan geliştiricilerin verimliliğini artırır ve Docker entegrasyonunu Visual Studio ortamına getirerek geliştirme sürecini kolaylaştırır.
Github Kaynak Kodu: https://github.com/ayzdru/Captain
Visual Studio 2022 Extension: https://marketplace.visualstudio.com/items?itemName=AyazDuru.AyazDuruCaptainDocker
Helm: Konteyner Orkestrasyonunu Kolaylaştıran Paket Yönetim Aracı
Kubernetes, modern uygulama dağıtımı için popüler bir konteyner orkestrasyon platformudur. Ancak, karmaşık uygulama yapılandırmalarını ve dağıtımlarını yönetmek zor olabilir. İşte bu noktada Kubernetes Helm devreye girer. Kubernetes Helm, uygulamaların paketlenmesini, yapılandırılmasını ve dağıtılmasını kolaylaştıran açık kaynaklı bir paket yönetim aracıdır. Helm, Kubernetes üzerinde uygulama dağıtım sürecini hızlandırır ve yönetimini kolaylaştırır.
Helm'in Temelleri:
Helm, Kubernetes için bir paket yönetim aracıdır. Helm, "Chart" adı verilen yapılandırma dosyalarını kullanarak uygulama paketlerini tanımlar. Chart'lar, uygulamanın gereksinimlerini, servislerini, bağımlılıklarını ve yapılandırmalarını içeren bir arşiv formatında paketlenir. Bu, uygulamaların hızlı ve tekrarlanabilir bir şekilde dağıtılmasını sağlar.
Chart ve Value Dosyaları:
Helm Chart'ları, uygulama paketlerinin yapılandırmasını tanımlar. Bir Chart, uygulama bileşenlerini, gereksinimlerini, konfigürasyon ayarlarını ve kaynaklarını içeren bir dizi dosyadan oluşur. Value dosyaları ise, Chart'ların yapılandırma değerlerini içerir. Bu değerler, uygulama dağıtıldığında kullanılan yapılandırma ayarlarını belirler. Value dosyaları, farklı ortamlar için (geliştirme, test, üretim) özelleştirilebilir.
Dağıtım Kolaylığı:
Helm, uygulama dağıtımını kolaylaştırır. Bir Chart kullanarak, tek bir komutla uygulamalarınızı Kubernetes kümenize dağıtabilirsiniz. Bu, uygulamaların hızlı bir şekilde yüklenmesini ve çalışmasını sağlar. Helm, dağıtımların, güncellemelerin, geri alımların ve silmelerin sorunsuz bir şekilde gerçekleştirilmesini sağlar.
Versioning ve Rollback:
Helm, uygulama sürümlerinin yönetimini kolaylaştırır. Her bir Chart sürümü için bir versiyon numarası belirleyebilir ve farklı sürümleri takip edebilirsiniz. Bu, geri alımların ve güncellemelerin yönetimini kolaylaştırır. Bir hata durumunda veya istenmeyen bir güncelleme sonucunda Helm, bir önceki sürüme geri dönme yeteneği sunar.
Topluluk ve Ekosistem:
Helm, geniş bir topluluk tarafından desteklenen ve geliştirilen bir proje olduğundan zengin bir ekosisteme sahiptir. Helm Hub gibi merkezi bir arşiv, çeşitli hazır Chart'lar ve örnek yapılandırmalar sunar. Bu, geliştiricilerin uygulamalarını hızla dağıtmalarını ve önceden tanımlanmış şablonları kullanmalarını sağlar. Ayrıca, Helm'in API'lerini ve eklentilerini kullanarak daha fazla özelleştirme ve entegrasyon yapılabilir.
Kubernetes Helm, uygulama dağıtımını hızlandıran ve yönetimini kolaylaştıran bir paket yönetim aracıdır. Chart'lar ve Value dosyaları aracılığıyla yapılandırma ve dağıtım ayarlarını tanımlar. Dağıtımları kolaylaştırır, geri alımları ve güncellemeleri yönetir. Zengin bir ekosisteme ve topluluğa sahip olduğundan geniş entegrasyon ve özelleştirme imkanları sunar. Kubernetes kullanıcıları için güçlü bir araçtır ve uygulama dağıtım sürecini kolaylaştırır.
Yazılım Geliştirme Ortamları: Production, Staging, Development ve Local
Yazılım geliştirme sürecinde, farklı aşamalar ve ortamlar kullanılır. Bu ortamlar, yazılımın farklı aşamalarında test edilmesi, hata ayıklanması ve son kullanıcıya sunulması için kullanılır. En yaygın olarak kullanılan geliştirme ortamları Production, Staging, Development ve Local'dır. Her bir ortamın belirli bir amacı ve kullanım senaryosu vardır.
Production Ortamı:
Production (Üretim) ortamı, gerçek kullanıcılara sunulan ve işletimde olan yazılımın çalıştığı ortamdır. Bu ortamda yazılım, kullanıcılar tarafından kullanılır ve işletme sürekliliği ve güvenlik gereksinimlerine uygun olarak çalışır. Production ortamı, hata ayıklama veya yeni özelliklerin denendiği bir ortam değildir. Bu nedenle, yazılımın stabil, güvenli ve yüksek performanslı olduğu bir ortam olarak kabul edilir.
Staging Ortamı:
Staging (Önbellek) ortamı, yazılımın Production ortamına gitmeden önce test edildiği ve doğrulandığı bir ortamdır. Staging ortamı, gerçek kullanıcı verileri yerine test verileri ve senaryoları kullanır. Yazılımın farklı bileşenlerinin uyumlu bir şekilde çalıştığından emin olmak için yapılan entegrasyon testlerine, performans testlerine ve diğer test süreçlerine ev sahipliği yapar. Bu ortam, yazılımın Production ortamına geçmeden önce hataların ve sorunların belirlenip giderilmesini sağlar.
Development Ortamı:
Development (Geliştirme) ortamı, yazılımın aktif olarak geliştirildiği ve test edildiği bir ortamdır. Geliştiriciler, kodlarını bu ortamda yazabilir, hata ayıklama yapabilir ve yeni özellikler ekleyebilir. Development ortamı, geliştiricilerin yazılımı değiştirmeleri, iyileştirmeler yapmaları ve test etmeleri için bir oyun alanıdır. Bu ortam, diğer kullanıcılardan veya sistemlerden bağımsız olarak kullanılabilir.
Local Ortamı:
Local (Yerel) ortamı, geliştiricilerin kendi kişisel bilgisayarlarında veya çalışma istasyonlarında yazılım geliştirdiği ortamdır. Bu ortamda geliştiriciler, kod yazabilir, test edebilir, hata ayıklama yapabilir ve yeni özellikleri deneyebilir. Local ortamı, geliştiricilerin bağımsız bir şekilde çalışmalarını ve yeni kodları diğer ortamlara entegre etmeden önce test etmelerini sağlar.
Yazılım geliştirme sürecinde, farklı ortamlar kullanılır. Production ortamı, gerçek kullanıcılara sunulan ve işletimde olan yazılımın çalıştığı ortamdır. Staging ortamı, yazılımın Production ortamına geçmeden önce test edildiği ve doğrulandığı bir ortamdır. Development ortamı, yazılımın aktif olarak geliştirildiği ve test edildiği ortamdır. Local ortamı ise geliştiricilerin kendi bilgisayarlarında veya çalışma istasyonlarında yazılım geliştirdiği ortamdır. Her bir ortamın belirli bir amacı ve kullanım senaryosu vardır, ve yazılımın farklı aşamalarında kullanılarak güvenli ve stabil bir yazılım süreci sağlanır.
Kubernetes'te Veritabanı Migration'larının Init Container veya Job'lar ile Yürütülmesi
Kubernetes, ölçeklenebilir ve dağıtık uygulamaların yönetimi için popüler bir konteyner orkestrasyon platformudur. Veritabanı migration'ları, uygulamanın versiyon güncellemeleri veya yapısal değişikliklerle birlikte veritabanının düzenlenmesini gerektiren önemli bir süreçtir. Kubernetes, veritabanı migration'larını yürütmek için Init Container veya Job'ları kullanma imkanı sunar.
Kubernetes Init Container ile Veritabanı Migration'ları:
Init Container'lar, uygulama başlamadan önce çalışan ve gereksinimleri karşılayan yardımcı konteynerlerdir. Veritabanı migration'larını Init Container olarak çalıştırmak, uygulamanın başlatılmasından önce veritabanı düzenlemelerini yapmayı sağlar. Init Container, veritabanı migration işlemleri için gereken araçları, betikleri veya komutları içerebilir. Bu, uygulamanın çalışmaya başlamadan önce gerekli veritabanı değişikliklerinin yapılmasını sağlar. Init Container, migration işlemlerinin başarıyla tamamlanmasını sağlamak için gerekli kontrolleri yapabilir ve hata durumunda uygun hata işleme mekanizmalarını tetikleyebilir.
Kubernetes Job ile Veritabanı Migration'ları:
Job, bir kez çalışan ve tamamlanan bir işi temsil eden konteynerlerdir. Veritabanı migration'larını Job olarak çalıştırmak, belirli bir migration işlemini tamamlamak üzere bir kez çalışan bir konteynerin kullanılmasını sağlar. Bu, migration işlemlerini belirli bir sıra ve süreklilikle yürütmek için idealdir. Bir Job, migration işlemlerini gerçekleştirir ve tamamlandığında sonlanır. Eğer bir migration işlemi başarısız olursa, Job Kubernetes tarafından yeniden başlatılabilir veya hata durumuna göre yönetilebilir.
Avantajlar:
Veritabanı migration'larını Init Container veya Job'lar ile yürütmek, birçok avantaj sunar:
- Daha iyi kontrol: Migration işlemleri, uygulama başlamadan önce veya belirli bir sıra ile yürütülebilir. Bu, veritabanı düzenlemelerini kontrollü bir şekilde gerçekleştirme imkanı sağlar.
- İzlenebilirlik: Migration işlemlerinin durumu, loglar ve raporlar aracılığıyla izlenebilir. Başarılı veya başarısız tamamlanan işlemler kaydedilebilir ve hataların nedeni belirlenebilir.
- Hata işleme: Migration işlemleri sırasında ortaya çıkan hatalar yönetilebilir. Init Container veya Job, hataları algılayabilir ve uygun hata işleme mekanizmalarını tetikleyebilir.
- Geri alma: Migration işlemlerini geri almak veya önceki bir duruma dönmek gerektiğinde, Init Container veya Job kullanarak geri alma işlemleri gerçekleştirilebilir.
Kubernetes'te veritabanı migration'larının Init Container veya Job'lar ile yürütülmesi, uygulama başlatma ve yapısal değişikliklerin yönetimini kolaylaştırır. Init Container, uygulama başlamadan önce gereken veritabanı düzenlemelerini yapmayı sağlar. Job ise, belirli bir migration işlemini tamamlamak üzere bir kez çalışan bir konteynerdir. Bu yöntemler, daha iyi kontrol, izlenebilirlik, hata işleme ve geri alma imkanları sunar. Veritabanı migration'larını Init Container veya Job'lar ile çalıştırmak, veritabanı ve uygulama yapılandırması arasındaki uyumu sağlamak için güçlü bir araçtır ve uygulamanın stabilitesini ve güvenliğini artırır.
KURULUMLAR
DOCKER PRIVATE REGISTRY KURULUMU
KubernetesMaster sunucusunda klasörleri oluşturuyoruz:
sudo mkdir /docker_private_registry
sudo chmod -R 777 /docker_private_registry
Namespace oluşturma:
kubectl create namespace docker-registry
Persistent Volume YAML:
apiVersion: v1
kind: PersistentVolume
metadata:
name: docker-private-registry-pv
spec:
capacity:
storage: 60Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
claimRef:
name: docker-private-registry-pv-claim
namespace: docker-registry
persistentVolumeReclaimPolicy: Delete
storageClassName: local-storage
local:
path: /docker_private_registry
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- kubernetesmaster
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: docker-private-registry-pv-claim
namespace: docker-registry
spec:
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
resources:
requests:
storage: 60Gi
storageClassName: local-storage
https://github.com/twuni/docker-registry.helm Helm reposunu ekliyoruz:
kubectl label nodes kubernetesmaster node-type=master
helm repo add twuni https://helm.twun.io
helm repo update
helm upgrade --install docker-registry --namespace docker-registry --set replicaCount=1 --set persistence.enabled=true --set persistence.size=60Gi --set persistence.deleteEnabled=true --set persistence.storageClass=local-storage --set persistence.existingClaim=docker-private-registry-pv-claim --set nodeSelector.node-type=master twuni/docker-registry
Cert-Manager ile Sertifikaları oluşturuyoruz:
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: docker-private-registry-ca
namespace: cert-manager
spec:
isCA: true
commonName: docker-private-registry-ca
secretName: docker-private-registry-ca
privateKey:
algorithm: ECDSA
size: 256
dnsNames:
- dockerprivateregistry.local
issuerRef:
name: selfsigned-cluster-issuer
kind: ClusterIssuer
group: cert-manager.io
---
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: docker-private-registry-cluster-issuer
spec:
ca:
secretName: docker-private-registry-ca
Nginx Ingress yaml dosyasıyla dışarıya açıyoruz:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: "0"
nginx.ingress.kubernetes.io/proxy-read-timeout: "6000"
nginx.ingress.kubernetes.io/proxy-send-timeout: "6000"
nginx.ingress.kubernetes.io/force-ssl-redirect: 'false'
nginx.ingress.kubernetes.io/ssl-redirect: 'false'
kubernetes.io/ingress.class: nginx
cert-manager.io/cluster-issuer: docker-private-registry-cluster-issuer
name: docker-private-registry-ingress
namespace: docker-registry
spec:
rules:
- host: dockerprivateregistry.local
http:
paths:
- pathType: Prefix
path: /
backend:
service:
name: docker-registry
port:
number: 5000
tls:
- hosts:
- dockerprivateregistry.local
secretName: docker-private-registry-tls
Docker Private Registry kurulumu tamamlandığına göre artık host dosyasına;
192.168.1.101 dockerprivateregistry.local
satırını ekleyip, https://dockerprivateregistry.local/v2/_catalog üzerinden erişebilmeniz gerekiyor.
Ben Development ortamı olduğu için Self-Signed sertifaka kullanıyorum. Bunun için insecure-registries kaydını oluşturmamız gerekmektedir. Yoksa docker imagelerini private registry'e atamayacağız. Eğer aktif geçerliliğini olan bir sertifakanız var ise ve Production ortamına kurulum yapıyorsanız bu işlemi sakın yapmayın.
Daha fazla bilgi için https://docs.docker.com/registry/insecure/ ve https://github.com/containerd/containerd/blob/main/docs/hosts.md#bypass-tls-verification-example linklerini inceleyebilirsiniz.
---------SELF-SIGNED SERTIFIKA AYARLARI BAŞLANGICI PRODUCTION ORTAMINDA ÇALIŞTIRMAYIN---------
sudo nano /etc/docker/daemon.json
Komutunu yazıp, aşağıdaki metini yapıştırıyoruz.
{
"insecure-registries" : ["http://dockerprivateregistry.local","https://dockerprivateregistry.local"]
}
KubernetesMaster sunucusunun host dosyasını açıp:
sudo nano /etc/hosts
aşağıdaki satırı ekliyoruz.
192.168.1.101 dockerprivateregistry.local
https://kubernetesmaster.local/#/secret/cert-manager/docker-private-registry-ca?namespace=cert-manager linkinden
ca.crt metnini kopyalıyoruz.
sudo mkdir /etc/docker/certs.d/
sudo mkdir /etc/docker/certs.d/dockerprivateregistry.local
cd /etc/docker/certs.d/dockerprivateregistry.local
sudo nano ca.crt
ca.crt metnini yapıştırıp, CTRL+X ile kaydediyoruz.
sudo mkdir /etc/containerd/certs.d/
sudo mkdir /etc/containerd/certs.d/dockerprivateregistry.local
cd /etc/containerd/certs.d/dockerprivateregistry.local
sudo nano hosts.toml
Komutlarını çalıştırıp:
server = "https://dockerprivateregistry.local"
[host."https://dockerprivateregistry.local"]
capabilities = ["pull", "resolve", "push"]
skip_verify = true
Yukarıdaki metini yapıştırıp, CTRL+X yapıp kaydediyoruz.
En sonunda docker ve containerd servislerini yeniden başlatıyoruz.
sudo systemctl restart docker
sudo systemctl restart containerd
---------SELF-SIGNED SERTIFIKA AYARLARI SONU---------
Visual Studio 2022 üzerine Captain Docker Extension Kurulumu
https://marketplace.visualstudio.com/items?itemName=AyazDuru.AyazDuruCaptainDocker linki üzerinden açıklamadaki adımları uygulayıp kurulumu yapıyoruz.
ExecStart= ..... sonuna -H tcp://0.0.0.0:2375
-H tcp://0.0.0.0:2375 sadece bunu eklememiz yeterli olacaktır.
Captain Docker Visual Studio Extension ile Bütün Projeleri Dockerize ediyoruz:
ApiGateway, Basket, Identity, Catalog, Order, Payment projelerinin hepsini dockerize ediyoruz.
Kurulumunu yaptığımız Private docker registry'e dockerize ettiğimiz bütün imageleri pushluyoruz.
ASP.NET Core uygulaması için Helm Chart oluşturma
Mevcut projede bu klasörler oluşturulmuş olacak ama ben nasıl oluşturduğumu kısacak yazacağım.
Aşağıdaki komutlarla klasörleri ve varsayılan helm proje taslağını oluşturuyoruz.
mkdir charts
cd charts
helm create clean-architecture
cd clean-architecture
rm -r templates/*
cd charts
helm create blazor-webassembly
helm create catalog
helm create identity
helm create order
helm create payment
helm create basket
helm create api-gateway
#Gereksiz dosyaları siliyoruz
rm blazor-webassembly/.helmignore blazor-webassembly/values.yaml blazor-webassembly/templates/hpa.yaml blazor-webassembly/templates/serviceaccount.yaml
rm -r blazor-webassembly/templates/tests
rm identity/.helmignore identity/values.yaml identity/templates/hpa.yaml identity/templates/serviceaccount.yaml
rm -r identity/templates/tests
rm catalog/.helmignore catalog/values.yaml catalog/templates/hpa.yaml catalog/templates/serviceaccount.yaml
rm -r catalog/templates/tests
rm order/.helmignore order/values.yaml order/templates/hpa.yaml order/templates/serviceaccount.yaml
rm -r order/templates/tests
rm payment/.helmignore payment/values.yaml payment/templates/hpa.yaml payment/templates/serviceaccount.yaml
rm -r payment/templates/tests
rm basket/.helmignore basket/values.yaml basket/templates/hpa.yaml basket/templates/serviceaccount.yaml
rm -r basket/templates/tests
rm api-gateway/.helmignore api-gateway/values.yaml api-gateway/templates/hpa.yaml api-gateway/templates/serviceaccount.yaml
rm -r api-gateway/templates/tests
Buraya YAML dosyaları çok fazla olduğundan yazamıyorum. clean-architecture/charts linki üzerinden chartslarda ki YAML dosyalarını inceleyebilirsiniz.
Helm dosyamızı paketledikten sonra, index.yaml dosyamızı oluşturuyoruz.
cd charts
helm package clean-architecture
mkdir MicroservicesCleanArchitectureWithKubernetes
mv clean-architecture-0.1.0.tgz MicroservicesCleanArchitectureWithKubernetes
helm repo index MicroservicesCleanArchitectureWithKubernetes/ --url https://ayzdru.github.io/MicroservicesCleanArchitectureWithKubernetes/
Ben Github projesinde /docs klasörünü Github Pages kullanarak public hale getirdim.
https://ayzdru.github.io/MicroservicesCleanArchitectureWithKubernetes/index.yaml
Helm repomuzu dışarıya açtık. Artık github.io üzerinden bizde kullanabiliriz:
helm repo add AyazDuru https://ayzdru.github.io/MicroservicesCleanArchitectureWithKubernetes
helm repo list
kubectl create namespace clean-architecture
helm install clean-architecture AyazDuru/clean-architecture --set global.env.ASPNETCORE_ENVIRONMENT="Production" --namespace=clean-architecture
Podlar hazır olduğunda:
Host dosyasına aşağıdaki satıları ekliyoruz:
192.168.1.101 catalog-service.clean-architecture
192.168.1.101 identity-service.clean-architecture
192.168.1.101 order-service.clean-architecture
192.168.1.101 payment-service.clean-architecture
192.168.1.101 api-gateway-service.clean-architecture
192.168.1.101 blazor-webassembly-service.clean-architecture
192.168.1.101 basket-service.clean-architecture
Tarayıcıdan bütün servisleri kontrol ediyoruz:
https://catalog-service.clean-architecture/
https://order-service.clean-architecture/
https://payment-service.clean-architecture/
https://basket-service.clean-architecture/
https://api-gateway-service.clean-architecture/swagger/index.html
https://blazor-webassembly-service.clean-architecture/
IdentityDbContextInitialiser dosyasındaki bilgilerle Init Container ve Jobları kullanarak varsayılan bir kullanıcı oluşturduk.
Email: administrator@localhost Parola: Password1@! ile giriş yapabiliriz veya yeni bir kullanıcı oluşturabilirsiniz.
Visual Studio üzerinden Debug yapabilmek, Development (Geliştirme) ortamı için bilgisayarınıza Kafka, Redis, Consul kurarak appsettings.Development.json üzerindeki gerekli yerleri değiştirip, geliştirme, debug yapabilirsiniz. Development ortamı için benimde blog yazılarımda yaptığım gibi self-signed sertifikalar, host dosyalarını düzenleme, kullanılacak uygulamaların servislerini nodePort ile dışarıya açarak erişebilirsiniz.
Production ortam için kesinlikle kubernetes servislerini nodePort olarak dışarıya açmanızı önermem.
Mikroservis mimaride Devops ve kodlama Monolotik mimariye göre çok daha karışıktır. Elimden geldiğince basit anlatmaya çalıştım. Burada amaç Kubernetes ile Mikroservis mimari için en azından aklınızda bir şeyler oluşturması ve güzel bir kaynak olmasını sağlamaktır.
Farklı geliştirme ortamları (Production, Development, Local, Staging) için gerekli konfigurasyonları projenizin ihtiyaçlarına göre yapmanız gerekmektedir.
Buraya kadar okuduğunuz için teşekkürler.
Kendinize iyi bakın. ☜(゚ヮ゚☜)