Kubernetes’te Postgresql ve Trino Bağlantısı
Günümüzde veri analizi, iş dünyasında stratejik kararların alınmasında kritik bir rol oynamaktadır. Bu yazıda, Kubernetes ortamında PostgreSQL ve Trino’nun nasıl entegre edileceğini ve bu kombinasyonun veri analizi için nasıl güçlü bir çözüm oluşturduğunu ele alacağız.
Kubernetes: Modern Çağın Orkestrasyon Platformu
Kubernetes, mikro servislerin yönetimi ve ölçeklendirilmesi için dünya çapında tercih edilen bir konteyner orkestrasyon platformudur. Sağladığı yüksek kullanılabilirlik ve esneklik sayesinde, karmaşık uygulamaların yönetimini basitleştirmektedir.
PostgreSQL: Güvenilir ve Esnek Bir Veri Tabanı Sistemi
PostgreSQL, işletmeler tarafından yaygın olarak kullanılan açık kaynaklı bir ilişkisel veri tabanı yönetim sistemidir. Güçlü özellikleri ve yüksek güvenilirliği ile bilinir.
Trino: Yüksek Performanslı SQL Sorgulama Motoru
Trino, büyük veri setleri üzerinde yüksek hızda SQL sorgulamaları yapabilen, dağıtılmış bir SQL sorgulama motorudur. Veri gölleri (data lake), veri tabanları ve diğer kaynaklardan veri sorgulamak için idealdir.
Kullanacağımız araçlardan bahsettiğimize göre yapacağımız adımları gözden geçirip uygulamaya başlayabiliriz.
- Kubernetes Ortamının Hazırlanması
- Trino Kurulumu
- PostgreSQL Kurulumu
- Konfigürasyon ve Bağlantı
- Test ve Doğrulama
1. Kubernetes Ortamının Hazırlanması
Küçük ölçekli ve yerel bir ortamda kubernetes ortamı için minikube kullanacağız. Minikube, yerel bilgisayarınızda tek bir düğüm (node) Kubernetes kümesi oluşturmak ve çalıştırmak için kullanılan bir araçtır.
Minikube Kurulumu ve Başlatılması
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube
İstenilen memory değeriyle minikube başlatalım.
minikube start --memory 10240
Kubectl
kubectl (Kubernetes Command-Line Tool), Kubernetes kümesini yönetmek için kullanılan bir komut satırı aracıdır.
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl kubectl version
Helm
Helm, Kubernetes için paket yöneticisi olarak kullanılmaktadır.
2. Trino Kurulumu
Kubernetes’de namespace’ler, küme kaynaklarını bölme ve izole etmek için kullanılır. Kurulumlar farklı namespaceler üzerinden yapılacak.
kubectl create namespace trino
Helm Chart’ın indirilmesi
helm repo add trino https://trinodb.github.io/charts/ -n trino helm install trino trino/trino --version 0.15.0 -n trino
Yaml’ları oluşturulan klasöre aktarılması
mkdir /yamls
values-trino.yaml
Oluşturulması
helm show values trino/trino > values-trino.yaml
3. PostgreSQL Kurulumu
kubectl create ns postgres
Helm Chart’ın indirilmesi
helm repo add bitnami https://charts.bitnami.com/bitnami -n postgres helm install postgresql bitnami/postgresql --version 13.2.27 -n postgres
export POSTGRES_PASSWORD=$(kubectl get secret --namespace postgres postgresql -o jsonpath="{.data.postgres-password}" | base64 -d)
values-postgres.yaml
Oluşturulması
helm show values bitnami/postgresql > values-postgres.yaml
PostgreSQL Bağlantısı ve Test
my-postgesql-0
Poduna bağlanma
kubectl exec -it pod/postgresql-0 -n postgres -- /bin/bash
Daha önce $POSTGRES_PASSWORD
değişkenine kaydedilen postgresql şifresi yazdırılıyor.
echo $POSTGRES_PASSWORD
postgres kullanıcısıyla PostgreSQL veritabanı sunucusuna bağlanılıyor.
psql -U postgres
Yeni kullanıcı ve veri tabanı oluşturuluyor. Oluşturulan kullanıcı yetki ataması yapılıyor.
CREATE DATABASE postgres_db; CREATE USER vbo WITH PASSWORD 'vbo123'; grant all privileges on database postgres_db to vbo;
Yeni kullanıcı ve veri tabanı ile giriş yapılıyor.
psql -U vbo -d postgres_db
Postgresql test ediliyor.
CREATE SCHEMA IF NOT EXISTS my_schema; SET search_path TO my_schema, public; CREATE TABLE my_schema.customers ( id SERIAL PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50), email VARCHAR(100) ); INSERT INTO my_schema.customers (first_name, last_name, email) VALUES ('James', 'Smith', 'james.smith@example.com'), ('Maria', 'Garcia', 'maria.garcia@example.com'), ('Robert', 'Johnson', 'robert.johnson@example.com'), ('Patricia', 'Williams', 'patricia.williams@example.com'), ('John', 'Brown', 'john.brown@example.com'), ('Jennifer', 'Jones', 'jennifer.jones@example.com'), ('Michael', 'Miller', 'michael.miller@example.com'), ('Linda', 'Davis', 'linda.davis@example.com'), ('William', 'Garcia', 'william.garcia@example.com'), ('Elizabeth', 'Martinez', 'elizabeth.martinez@example.com'), ('David', 'Hernandez', 'david.hernandez@example.com'), ('Barbara', 'Moore', 'barbara.moore@example.com'), ('Richard', 'Taylor', 'richard.taylor@example.com'), ('Susan', 'Anderson', 'susan.anderson@example.com'), ('Joseph', 'Thomas', 'joseph.thomas@example.com'), ('Margaret', 'Jackson', 'margaret.jackson@example.com'), ('Charles', 'White', 'charles.white@example.com'), ('Karen', 'Harris', 'karen.harris@example.com'), ('Thomas', 'Martin', 'thomas.martin@example.com'), ('Nancy', 'Thompson', 'nancy.thompson@example.com'), ('Alice', 'Young', 'alice.young@example.com'), ('Daniel', 'King', 'daniel.king@example.com'), ('Katherine', 'Wright', 'katherine.wright@example.com'), ('Matthew', 'Lopez', 'matthew.lopez@example.com'), ('Samantha', 'Hill', 'samantha.hill@example.com'), ('Jason', 'Scott', 'jason.scott@example.com'), ('Chloe', 'Green', 'chloe.green@example.com'), ('Andrew', 'Adams', 'andrew.adams@example.com'), ('Emily', 'Baker', 'emily.baker@example.com'), ('Mark', 'Gonzalez', 'mark.gonzalez@example.com'); SELECT * FROM my_schema.customers LIMIT 5;
4. Konfigürasyon ve Bağlantı
values-trino-yaml
Konfigürasyonu
values-trino.yaml
dosyasında additionalCatalogs
kısmına postgresql katalog bilgileri ekleniyor.
additionalCatalogs: postgresql: |- connector.name=postgresql connection-url=jdbc:postgresql://postgresql.postgres.svc.cluster.local:5432/postgres_db connection-user=vbo connection-password=vbo123
Katalog ekleme işleminden sonra helm chart upgrade işlemi yapılıyor.
helm upgrade trino trino/trino --values values-trino.yaml -n trino
trino
namespace’indeki pod’lar restart ediliyor.
kubectl delete pods -l app=trino -n trino
Podlar hazır olana kadar bekleyelim.
5. Test ve Doğrulama
Port yönlendirme işlemi yapıldıktan sonra DBeaver aracı üzerinden sorgulama işlemlerini yapabileceğiz.
Koordinartör pod’u POD_NAME değişkenine atanıyor.
export POD_NAME=$(kubectl get pods --namespace trino -l "app=trino,release=trino,component=coordinator" -o jsonpath="{.items[0].metadata.name}")
Port yönlendirme işlemi yapılıyor.
kubectl port-forward $POD_NAME 8080:8080 -n trino
DBeaver aracı üzerinden trino veri kaynağı seçiliyor.
Bağlantı bilgileri dolduruluyor.
Bağlantı başarılı şekilde sağlandı.
Postgresql üzerinde oluşturulan tabloyu trino üzerinden görebiliyoruz.
Trino üzerinden yapılan sorguda daha önce insert edilen veri setine ulaşabiliyoruz.
Bu yazıda Kubernetes ortamında Postgresql ve Trino entegrasyonunu ele aldık. Herkese keyifli okumalar dilerim.