Kubernetes ile ASP.Net Core Microservices Clean Architecture - PostgreSQL, pgAdmin, Kubegres, High Availability ve Disaster recovery (HA/DR) - Bölüm 3

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 ProjeMicroservicesCleanArchitectureWithKubernetes

Visual Studio ExtensionCaptain Docker

PostgreSQL: Açık Kaynaklı Bir İlişkisel Veritabanı Yönetim Sistemi

PostgreSQL, dünyanın en popüler açık kaynaklı ilişkisel veritabanı yönetim sistemlerinden biridir. İşletmeler ve geliştiriciler tarafından geniş çapta kullanılan PostgreSQL, gelişmiş veritabanı özellikleri, güvenilirlik ve performansıyla tanınır. Bu makalede, PostgreSQL'ün temel özelliklerini, kullanımını ve avantajlarını inceleyeceğiz.

PostgreSQL'ün Temel Özellikleri

  1. Açık Kaynak ve Ücretsiz: PostgreSQL, açık kaynak bir projedir ve ücretsiz olarak kullanılabilir. Bu, kullanıcıların yazılımı indirip kurarak ihtiyaçlarına göre özelleştirmeler yapabilecekleri anlamına gelir.

  2. İlişkisel Veritabanı Yönetimi: PostgreSQL, ilişkisel veritabanı modelini temel alır ve SQL (Structured Query Language) standardını destekler. Bu sayede verileri tablolar ve ilişkiler aracılığıyla yapılandırabilir ve sorgulayabilirsiniz.

  3. Geniş Veri Türü Desteği: PostgreSQL, standart veri tiplerinin yanı sıra kullanıcı tanımlı veri tiplerini de destekler. Metin, sayı, tarih/zaman, resimler, sesler, JSON gibi farklı veri tiplerini saklayabilir ve işleyebilirsiniz.

  4. Gelişmiş Veri Bütünlüğü: PostgreSQL, veri bütünlüğünü sağlamak için çeşitli mekanizmalara sahiptir. Bu mekanizmalar, birincil anahtarlar, yabancı anahtarlar, benzersiz kısıtlamalar, tetikleyiciler ve sıralı veri türlerini içerir.

  5. Yüksek Veri Güvenliği: PostgreSQL, veri güvenliği konusunda da güçlüdür. Şifreleme, erişim kontrolü, kullanıcı yetkilendirmesi, SSL/TLS desteği gibi güvenlik özelliklerini destekler.

  6. Genişletilebilirlik: PostgreSQL, kullanıcıların ihtiyaçlarına göre özelleştirilebilir ve genişletilebilir bir yapıya sahiptir. Yeni veri tipleri, fonksiyonlar, diller ve indeks türleri ekleyebilir, özel uzantılar oluşturabilirsiniz.

PostgreSQL'ün Avantajları

  1. Güvenilirlik: PostgreSQL, ACID (Atomik, Tutarlı, İzole, Dayanıklı) özelliklerini destekleyerek veri bütünlüğünü ve güvenilirliği sağlar. Veritabanı çökmesi durumunda veri kaybını en aza indirmek için çeşitli kurtarma mekanizmaları sunar.

  2. Performans: PostgreSQL, optimize edilmiş sorgu yürütme planları ve veri depolama mekanizmalarıyla yüksek performans sunar. İndeksleme, sorgu optimizasyonu ve paralel sorgulama gibi özellikler sayesinde büyük veri kümelerini etkin bir şekilde işleyebilirsiniz.

  3. Uzantı Ekosistemi: PostgreSQL, zengin bir uzantı ekosistemine sahiptir. Bu uzantılar, coğrafi veri işleme, tam metin arama, zaman serisi analizi, veri analitiği gibi alanlarda özel çözümler sunar.

  4. Topluluk Desteği: PostgreSQL, güçlü bir topluluk tarafından desteklenir. Bu topluluk, kullanıcılara forumlar, e-posta listeleri ve çevrimiçi kaynaklar aracılığıyla yardımcı olur. PostgreSQL'ün düzenli olarak güncellenen sürümleri ve güvenlik yamaları da sağladığı avantajlardandır.

PostgreSQL, açık kaynaklı ve güçlü bir ilişkisel veritabanı yönetim sistemidir. İleri düzeyde veri bütünlüğü, geniş veri türü desteği, güvenlik özellikleri, genişletilebilirlik ve yüksek performansıyla tercih edilen bir seçenektir. İşletmeler ve geliştiriciler, PostgreSQL'ün esnekliği ve güvenilirliği sayesinde çeşitli uygulama ve projelerde kullanabilirler.

 

PostgreSQL High Availability ve Disaster Recovery: Veritabanı Güvenilirliğinin Temel Taşları

PostgreSQL, işletmelerin kritik verilerini yönetmeleri için güvenilir bir ilişkisel veritabanı yönetim sistemidir. PostgreSQL High Availability (yüksek kullanılabilirlik) ve Disaster Recovery (felaket kurtarma) teknikleri, veritabanının sürekli çalışmasını ve veri kaybını en aza indirmeyi sağlayan önemli stratejilerdir.

PostgreSQL High Availability (Yüksek Kullanılabilirlik)

PostgreSQL High Availability, bir PostgreSQL veritabanının kesintisiz çalışmasını sağlamak için kullanılan bir dizi yöntem ve araçları içerir. Aşağıda High Availability'nin temel unsurlarını bulabilirsiniz:

  1. Yedekleme: PostgreSQL'in yedekleme özellikleri, veritabanınızın anlık bir görüntüsünü almanızı ve veri kaybını önlemek için düzenli aralıklarla yedekler oluşturmanızı sağlar. Yedekler, veritabanınızın durumunu geri yüklemeniz gerektiğinde kullanılabilir.

  2. Standby Sunucuları: Standby sunucuları, yedek veritabanı sunucularıdır ve ana veritabanı sunucusuyla senkronize olarak çalışırlar. Ana sunucuda bir kesinti olduğunda, standby sunucuları otomatik olarak devreye girer ve hizmetin kesintisiz bir şekilde devam etmesini sağlar.

  3. Streaming Replication: PostgreSQL, ana veritabanı sunucusundaki verilerin gerçek zamanlı olarak bir veya daha fazla standby sunucusuna aktarılmasını sağlayan streaming replication özelliğine sahiptir. Bu, verilerin güncellenmesinin ve senkronize edilmesinin hızlı bir şekilde gerçekleşmesini sağlar.

  4. Otomatik Başarısızlık Algılama ve Geçiş: PostgreSQL High Availability çözümleri, sunucu veya ağ bağlantısı gibi sorunları algılar ve otomatik olarak hızlı bir şekilde çalışan bir yedek sunucuya geçiş yapar. Bu, kesintileri en aza indirir ve hizmetin sürekliliğini sağlar.

PostgreSQL Disaster Recovery (Felaket Kurtarma)

PostgreSQL Disaster Recovery, veritabanında meydana gelen büyük felaketlerin (sunucu çökmesi, doğal afetler, veri kaybı vb.) ardından veritabanını eski haline getirme ve iş sürekliliğini sağlama sürecidir. İşte PostgreSQL Disaster Recovery'nin önemli unsurları:

  1. Point-in-Time Recovery (PITR): Point-in-Time Recovery, belirli bir noktada veritabanının durumunu geri yüklemenizi sağlar. Bu, yedeklerin yanı sıra WAL (Write-Ahead Log) dosyalarını da kullanır ve belirli bir zamana kadar olan veri durumunu geri yükler.

  2. WAL Arşivleme: PostgreSQL, Write-Ahead Log (WAL) dosyalarını kullanarak veritabanı değişikliklerini kaydeder. Felaket durumunda, WAL dosyaları veritabanını eski haline getirmek için kullanılabilir. WAL dosyalarının düzenli aralıklarla arşivlenmesi ve güvenli bir yerde saklanması önemlidir.

  3. Veritabanı Replica'sı: PostgreSQL'de, veritabanının bir replica'sını (kopyasını) oluşturabilirsiniz. Replica sunucusu, ana sunucudaki verileri yansıtır ve veri kaybını en aza indirir. Bir felaket durumunda, replica sunucusu ana sunucu olarak devreye girebilir ve hizmetin kesintisiz bir şekilde devam etmesini sağlar.

  4. İş Sürekliliği Planlaması: PostgreSQL Disaster Recovery'nin önemli bir parçası, iş sürekliliği planlamasıdır. Bu, potansiyel felaket senaryolarını ve bunlara yanıt olarak alınacak adımları belirlemeyi içerir. Planlı yedeklemeler, veri kurtarma prosedürleri, düzenli testler ve personel eğitimi gibi unsurlar iş sürekliliğini sağlamada önemlidir.

PostgreSQL High Availability ve Disaster Recovery teknikleri, veritabanının sürekli çalışmasını, veri kaybını en aza indirmeyi ve iş sürekliliğini sağlamayı amaçlar. Yedekleme, standby sunucuları, streaming replication, PITR, WAL arşivleme ve iş sürekliliği planlaması gibi unsurlar, PostgreSQL veritabanınızı güvenilir bir şekilde yönetmenize ve felaket durumlarında hızlı bir şekilde iyileşmenizi sağlar. İşletmeler, bu teknikleri kullanarak verilerini koruma altına alabilir ve veritabanlarının sürekliliğini sağlayabilirler.

PgAdmin: PostgreSQL İçin Açık Kaynaklı Bir Yönetim ve Geliştirme Aracı

PgAdmin, PostgreSQL veritabanı yönetimi ve geliştirme için kullanılan bir açık kaynaklı araçtır. PostgreSQL veritabanını etkin bir şekilde yönetmek ve sorguları çalıştırmak için kullanıcı dostu bir arayüz sunar.

PgAdmin'in Temel Özellikleri

  1. Veritabanı Yönetimi: PgAdmin, PostgreSQL veritabanı sunucusuna bağlanmanıza ve veritabanınızı yönetmenize olanak tanır. Veritabanı, şema, tablo, görünüm, fonksiyon, tetikleyici ve indeks gibi nesneleri oluşturabilir, düzenleyebilir ve silebilirsiniz. Veri tablolarını görüntüleyebilir, sorgular çalıştırabilir ve sonuçları görsel olarak analiz edebilirsiniz.

  2. Sorgu Editörü: PgAdmin'in içinde yer alan sorgu editörü, SQL sorgularınızı oluşturmanıza ve çalıştırmanıza olanak sağlar. Zengin düzenleme özellikleri, otomatik tamamlama, renklendirme ve hata ayıklama gibi özellikler sayesinde sorgularınızı daha verimli bir şekilde yazabilirsiniz.

  3. Veritabanı Güvenliği: PgAdmin, veritabanınızın güvenliğini sağlamak için çeşitli araçlar sunar. Kullanıcı ve rol yönetimi, erişim kontrolü, şifre yönetimi gibi özellikler sayesinde veritabanınızı güvence altına alabilirsiniz.

  4. Veri İçe Aktarma ve Dışa Aktarma: PgAdmin, verileri kolayca içe aktarmanıza ve dışa aktarmanıza olanak tanır. CSV, Excel, JSON gibi farklı dosya biçimlerinden veri içe aktarabilir veya verilerinizi bu biçimlere dışa aktarabilirsiniz.

  5. Görsel Sorgu Planlama: PgAdmin, sorgularınızın performansını analiz etmek için görsel sorgu planlama araçları sunar. Sorguların yürütme planlarını görsel olarak görüntüleyebilir, endeksleme ve sorgu optimizasyonu için iyileştirmeler yapabilirsiniz.

  6. Uzantı Desteği: PgAdmin, kullanıcıların özelliklerini genişletmesine olanak tanıyan uzantılar sunar. Özel raporlama araçları, veri görselleştirme araçları veya özel veri işleme eklentileri gibi özellikleri PgAdmin'e ekleyebilirsiniz.

PgAdmin'in Avantajları

  1. Kullanıcı Dostu Arayüz: PgAdmin, kullanıcı dostu bir arayüze sahiptir. Kolaylıkla navigasyon yapabilir, veritabanı nesnelerini hızlı bir şekilde bulabilir ve sorguları çalıştırabilirsiniz. Veritabanı yönetimi ve geliştirme süreçlerini hızlandırır ve kolaylaştırır.

  2. PostgreSQL ile Tam Uyumluluk: PgAdmin, PostgreSQL veritabanı sunucusu ile tam uyumludur. Bu, PostgreSQL'in sunduğu tüm özelliklere ve işlevlere erişebileceğiniz anlamına gelir. PostgreSQL sürümlerinin güncellenmesiyle birlikte PgAdmin de sürekli olarak güncellenir ve uyumluluğu sağlar.

  3. Açık Kaynak ve Topluluk Desteği: PgAdmin, açık kaynak bir projedir ve aktif bir topluluk tarafından desteklenir. Bu topluluk, sorunları çözmek, yeni özellikler eklemek ve kullanıcılarına destek sağlamak için birlikte çalışır. Bu da sürekli gelişen ve güncellenen bir araç sağlar.

  4. Çok Platform Desteği: PgAdmin, Windows, macOS ve Linux gibi farklı işletim sistemlerinde kullanılabilir. Bu, çeşitli platformlarda çalışan ekiplerin kolaylıkla kullanabilmesini sağlar.

PgAdmin, PostgreSQL veritabanı yönetimi ve geliştirme süreçlerini kolaylaştıran güçlü bir araçtır. Kullanıcı dostu arayüzü, zengin özellikleri ve PostgreSQL ile tam uyumluluğu sayesinde geliştiriciler ve veritabanı yöneticileri için ideal bir seçenektir. Açık kaynak olması ve aktif bir topluluk desteğiyle sürekli olarak güncellenir ve geliştirilir.

Kubegres: PostgreSQL İçin Kubernetes Tabanlı Bir Veritabanı Yönetimi Aracı

Kubegres, PostgreSQL veritabanını Kubernetes ortamında yönetmek için tasarlanmış bir araçtır. Kubernetes, ölçeklenebilir, yüksek kullanılabilirlik ve otomatik hata düzeltme gibi özellikler sunan bir konteyner orkestrasyon platformudur. Kubegres, PostgreSQL veritabanlarının Kubernetes üzerinde kolayca dağıtılmasını, ölçeklendirilmesini ve yönetilmesini sağlar. Bu makalede, Kubegres'in temel özelliklerini, avantajlarını ve kullanımını detaylı bir şekilde inceleyeceğiz.

Kubegres'in Temel Özellikleri

  1. Otomatik Dağıtım ve Ölçeklendirme: Kubegres, PostgreSQL veritabanını Kubernetes ortamında otomatik olarak dağıtır ve ölçeklendirir. Bu, veritabanınızın taleplere göre dinamik olarak ölçeklenmesini sağlar. Yüksek trafik dönemlerinde daha fazla kaynak sağlamak için otomatik ölçeklendirme politikaları belirleyebilirsiniz.

  2. Yüksek Kullanılabilirlik: Kubegres, yüksek kullanılabilirlik için tasarlanmıştır. Veritabanınızın kesintisiz çalışmasını sağlamak için yedekli PostgreSQL sunucuları oluşturabilir ve otomatik başarısızlık algılama ve otomatik geçiş mekanizmaları kullanabilirsiniz.

  3. Konfigürasyon ve İzleme: Kubegres, PostgreSQL veritabanı yapılandırmasını kolaylaştırır. YAML tabanlı yapılandırma dosyaları kullanarak veritabanı yapılandırmasını tanımlayabilir ve hızlı bir şekilde yeniden yapılandırabilirsiniz. Ayrıca, Kubegres üzerindeki veritabanı ölçümlemelerini ve durumunu izleyebilirsiniz.

  4. Yedekleme ve Geri Yükleme: Kubegres, PostgreSQL veritabanının yedeklenmesini ve geri yüklenmesini kolaylaştırır. Otomatik yedekleme politikaları belirleyebilir ve yedekleri isteğe bağlı olarak depolayabilirsiniz. Felaket durumlarına karşı verilerinizi korumak için hızlı bir geri yükleme süreci sağlar.

  5. Güvenlik: Kubegres, veritabanınızın güvenliğini sağlamak için çeşitli özellikler sunar. Parola koruması, kimlik doğrulama ve yetkilendirme gibi güvenlik önlemleriyle PostgreSQL veritabanınızı korur. Ayrıca, veri şifrelemesi ve ağ güvenliği gibi ek güvenlik seçenekleri de sunar.

Kubegres'in Avantajları

  1. Kolay Yönetim: Kubegres, PostgreSQL veritabanınızı Kubernetes üzerinde yönetmek için kullanıcı dostu bir arayüz sunar. Yapılandırma, dağıtım, ölçeklendirme ve izleme gibi işlemleri kolaylıkla gerçekleştirebilirsiniz.

  2. Ölçeklenebilirlik: Kubegres, Kubernetes'in ölçeklenebilirlik özelliklerini kullanarak PostgreSQL veritabanınızı gereksinimlerinize göre ölçeklendirebilir. Bu, yüksek trafik dönemlerinde daha fazla kaynak sağlama esnekliği sağlar.

  3. Yüksek Kullanılabilirlik: Kubegres, yedekli sunucular ve otomatik geçiş mekanizmalarıyla PostgreSQL veritabanınızın yüksek kullanılabilirlik sağlamasını sağlar. Veritabanı sunucusunda bir kesinti olduğunda otomatik olarak yedek sunucuya geçiş yapar ve kesintisiz hizmet sunar.

  4. Veri Güvenliği: Kubegres, PostgreSQL veritabanınızın güvenliğini sağlamak için çeşitli güvenlik önlemleri sunar. Kimlik doğrulama, yetkilendirme, veri şifrelemesi ve ağ güvenliği gibi özellikler verilerinizi korur.

 

Kubegres, PostgreSQL veritabanını Kubernetes üzerinde kolayca yönetmenizi sağlayan güçlü bir araçtır. Otomatik dağıtım, ölçeklendirme, yüksek kullanılabilirlik ve güvenlik gibi özellikleri sayesinde PostgreSQL veritabanınızı güvenli ve ölçeklenebilir bir şekilde yönetebilirsiniz. Kubegres, gelişmiş PostgreSQL veritabanı yönetimi için Kubernetes kullanımının avantajlarını sunar ve işletmelerin veritabanı operasyonlarını daha etkin hale getirir.

KURULUM

1) Kubegres operator Kurulumu

kubectl apply -f https://raw.githubusercontent.com/reactive-tech/kubegres/v1.16/kubegres.yaml

2) Klasörlerin Oluşturulması

Aşağıdaki komutlarla gerekli klasörleri PostgreSQL kurulacak bütün nodelarda oluşturuyoruz. Kubernetes'in erişebilmesi için yetkileri verdik. Ben kolaylık olsun diye everyone olarak yetkilendirdim ve KuberneteMasterKubernetesWorker1 sunucularında bu klasörleri oluşturdum.

sudo mkdir /identity-postgresql
sudo chmod -R 777 /identity-postgresql
sudo mkdir /catalog-postgresql
sudo chmod -R 777 /catalog-postgresql
sudo mkdir /order-postgresql
sudo chmod -R 777 /order-postgresql
sudo mkdir /payment-postgresql
sudo chmod -R 777 /payment-postgresql

3) PostgreSQL Şifrelerinin Oluşturulması

İlk olarak database adında bir namespace oluşturuyoruz.

kubectl create ns database

 Identity PostgreSQL Secret YAML Dosyası:

apiVersion: v1
kind: Secret
metadata:
  name: identity-postgresql-secret
  namespace: database
type: Opaque
stringData:
  superUserPassword: 78H!hwTmvMQSPP=RnjtdKNX4RqaqZC
  replicationUserPassword: 78H!hwTmvMQSPP=RnjtdKNX4RqaqZC
  • host: identity-postgresql.database
  • port: 5432
  • username: postgres
  • password: 78H!hwTmvMQSPP=RnjtdKNX4RqaqZC

Bilgileriyle bağlanabilirsiniz.

Custom DatabaseName, UserName ve Password için kubegres resmi dökümantasyonuna bakabilirsiniz.

Catalog PostgreSQL Secret YAML Dosyası:

apiVersion: v1
kind: Secret
metadata:
  name: catalog-postgresql-secret
  namespace: database
type: Opaque
stringData:
  superUserPassword: N+F_!ZRDcj%q@c8jUpzLrtBCem6?9P
  replicationUserPassword: N+F_!ZRDcj%q@c8jUpzLrtBCem6?9P

Order PostgreSQL Secret YAML Dosyası:

apiVersion: v1
kind: Secret
metadata:
  name: order-postgresql-secret
  namespace: database
type: Opaque
stringData:
  superUserPassword: YUGWdu@m&Sb94+q%yEKP75Z$uym8b8
  replicationUserPassword: YUGWdu@m&Sb94+q%yEKP75Z$uym8b8

Payment PostgreSQL Secret YAML Dosyası:

apiVersion: v1
kind: Secret
metadata:
  name: payment-postgresql-secret
  namespace: database
type: Opaque
stringData:
  superUserPassword: JBL=c+x@weP?bF4Q6pQgCn@#PT3&+W
  replicationUserPassword: JBL=c+x@weP?bF4Q6pQgCn@#PT3&+W

4) PostgreSQL Persistent Volume Yaml Dosyalarını Oluşturuyoruz.

Identity PostgreSQL Persistent Volume YAML Dosyası:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: identity-postgresql-pv-master
spec:
  capacity:
    storage: 1Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /identity-postgresql
  nodeAffinity:
    required:
      nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
                - kubernetesmaster
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: identity-postgresql-pv-worker1
spec:
  capacity:
    storage: 1Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /identity-postgresql
  nodeAffinity:
    required:
      nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
                - kubernetesworker1
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: identity-postgresql-backup-pv-master
spec:
  capacity:
    storage: 500Mi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  claimRef:
    name: identity-postgresql-backup-pvc-master
    namespace: database
  local:
    path: /identity-postgresql-backup
  nodeAffinity:
    required:
      nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
                - kubernetesmaster

 

5) PostgreSQL Backup Persistent Volume Claim Yaml Dosyalarını oluşturuyoruz.

KubernetesMaster sunucusuna gerekli klasörleri oluşturuyoruz:

sudo mkdir /identity-postgresql-backup
sudo chmod -R 777 /identity-postgresql-backup
sudo mkdir /order-postgresql-backup
sudo chmod -R 777 /order-postgresql-backup
sudo mkdir /catalog-postgresql-backup
sudo chmod -R 777 /catalog-postgresql-backup
sudo mkdir /payment-postgresql-backup
sudo chmod -R 777 /payment-postgresql-backup

Identity PostgreSQL Backup Persistent Volume Claim YAML Dosyası:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: identity-postgresql-backup-pvc-master
  namespace: database
spec:
  storageClassName: "local-stograge"
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 500Mi

6) PostgreSQL YAML Dosyalarını oluşturuyoruz. 

Identity PostgreSQL Kubegress YAML:

apiVersion: kubegres.reactive-tech.io/v1
kind: Kubegres
metadata:
  name: identity-postgresql
  namespace: database
spec:
   replicas: 2
   image: postgres:15.3
   database:
      size: 1Gi
   backup:
      schedule: "* */1 * * *"
      pvcName: identity-postgresql-backup-pvc-master
      volumeMount: /var/lib/backup
   env:
      - name: POSTGRES_PASSWORD
        valueFrom:
           secretKeyRef:
              name: identity-postgresql-secret
              key: superUserPassword
      - name: POSTGRES_REPLICATION_PASSWORD
        valueFrom:
           secretKeyRef:
              name: identity-postgresql-secret
              key: replicationUserPassword

ÖNEMLİ NOT:

Yukarıda karışık olmaması için sadece Identity mikro servis için YAML dosyasını paylaştım. Siz  4. 5. 6. maddelerde sırasıyla identity gördüğünüz yerlere catalog, order, payment alanlarıyla değiştirip tekrarlayın.

Gördüğünüz gibi KubernetesMaster ve KubernetesWorker1 nodelarımızda iki ayrı postgresql sunucumuz çalışmakta ve backup sistemi her dakika çalışıyor.

7) pgAdmin Kurulumu

KubernetesMaster sunucusuna gerekli klasörleri oluşturuyoruz:

sudo mkdir /pgadmin
sudo chmod -R 777 /pgadmin

pgAdmin Sertifika YAML:

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: pgadmin-dashboard-ca
  namespace: cert-manager
spec:
  isCA: true
  commonName: pgadmin-dashboard-ca
  secretName: pgadmin-dashboard-ca
  privateKey:
    algorithm: ECDSA
    size: 256
  dnsNames:
  - pgadmindashboard.local
  issuerRef:
    name: selfsigned-cluster-issuer
    kind: ClusterIssuer
    group: cert-manager.io
---
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: pgadmin-dashboard-cluster-issuer  
spec:
  ca:
    secretName: pgadmin-dashboard-ca

pgAdmin parolası oluşturmak için:

echo -n 'Password1@_' | base64

Çıktı: UGFzc3dvcmQxQF8=

pgAdmin YAML:

apiVersion: v1
kind: Secret
metadata:
  name: pgadmin-secret
  namespace: database
type: Opaque
data:
  pgadmin-default-password: UGFzc3dvcmQxQF8=
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pgadmin-pvc
  namespace: database
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pgadmin-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  claimRef:
    name: pgadmin-pvc
    namespace: database
  local:
    path: /pgadmin
  nodeAffinity:
    required:
      nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
                - kubernetesmaster
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: pgadmin
  namespace: database
spec:
  selector:
   matchLabels:
    app: pgadmin
  replicas: 1
  template:
    metadata:
      labels:
        app: pgadmin
    spec:
      volumes:
        - name: pgadminstorage
          persistentVolumeClaim:
            claimName: pgadmin-pvc
      containers:
        - name: pgadmin4
          image: dpage/pgadmin4
          volumeMounts:
            - mountPath: /var/lib/pgadmin
              name: pgadminstorage
          env:
           - name: PGADMIN_DEFAULT_EMAIL
             value: "admin@admin.com"
           - name: PGADMIN_DEFAULT_PASSWORD
             valueFrom:
               secretKeyRef:
                 name: pgadmin-secret
                 key: pgadmin-default-password
           - name: PGADMIN_PORT
             value: "80"
          ports:
            - containerPort: 80
              name: pgadminport
---
apiVersion: v1
kind: Service
metadata:
  name: pgadmin-service
  namespace: database
  labels:
    app: pgadmin
spec:
  ports:
    - targetPort: 80
      port: 80
  type: ClusterIP
  selector:
    app: pgadmin
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: pgadmin-dashboard-cluster-issuer
  name: pgadmin-dashboard-ingress
  namespace: database
spec:
  rules:
  - host: pgadmindashboard.local
    http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: pgadmin-service
            port:
              number: 80
  tls:
  - hosts:
    - pgadmindashboard.local
    secretName: pgadmin-dashboard-tls

 

pgAdmin Dashboard kurulumu tamamlandığına göre artık host dosyasına;

192.168.1.101 pgadmindashboard.local

satırını ekliyoruz.

Hepsi bu kadar.. Artık https://pgadmindashboard.local üzerinden pgAdmin Dashboard'a

Email: admin@admin.com

Parola: Password1@_

bilgileriyle erişebiliyor olmanız gerekiyor.

Görüşmek dileğiyle.. :)

Yorumlar kapalı