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.

  1. Kubernetes Ortamının Hazırlanması
  2. Trino Kurulumu
  3. PostgreSQL Kurulumu
  4. Konfigürasyon ve Bağlantı
  5. 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.

Kaynaklar:

  1. Cover Photo by Ian Taylor on Unsplash
  2. https://kubernetes.io/docs/home/
  3. https://minikube.sigs.k8s.io/docs/start/
  4. https://helm.sh/docs/intro/install/
  5. https://artifacthub.io/
  6. https://trino.io/docs/current/installation/kubernetes.html

Yazar Hakkında
Toplam 1 yazı
Mazlum Uzunca
Mazlum Uzunca
Yorumlar (Yorum yapılmamış)

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

×

Bir Şeyler Ara