Ana içeriğe geç

Knative ile Kubernetes Üzerinde Serverless Node.js Uygulaması Çalıştırma

Bu Rehberde Ne Öğreneceksiniz?

Bu rehberde Kubernetes üzerinde serverless mimari kurmayı öğreneceksiniz.
Knative Serving ile Node.js uygulamasını otomatik ölçeklenen bir servis olarak çalıştıracaksınız.


🧠 Teknik Özet

Konu: Kubernetes üzerinde Knative ile serverless servisler
Problem: Pod ve ölçek yönetiminin operasyonel yükü
Çözüm: Knative Serving ile otomatik ölçekleme ve scale-to-zero
Adımlar: Knative kurulumu → Ağ yapılandırması → Servis dağıtımı → Test


Ön Hazırlıklar

Devam etmeden önce aşağıdakiler hazır olmalıdır:

  • En az 2 CPU ve 4 GB RAM içeren bir Kubernetes kümesi
  • kubectl komut satırı aracı
  • Docker Hub üzerinde yayınlanmış bir Node.js imajı
  • Kümeye kubectl üzerinden erişim

1. Knative Serving Kurulumu

Knative Serving, serverless iş yüklerini Kubernetes üzerinde çalıştırır.

kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.8.0/serving-crds.yaml
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.8.0/serving-core.yaml
  • Bu komutlar Knative Serving bileşenlerini kümeye kurar.

Kurulumu doğrulayın:


kubectl get pods -n knative-serving
  • Tüm pod’lar Running durumda olmalıdır.

2. Ağ Katmanı (Kourier) Yapılandırması

  1. Knative, gelen trafiği yönlendirmek için bir ingress katmanı kullanır.
  • Bu rehberde Kourier tercih edilir.

kubectl apply -f https://github.com/knative/net-kourier/releases/download/knative-v1.8.0/kourier.yaml

Knative’yi Kourier kullanacak şekilde ayarlayın:


kubectl patch configmap/config-network \
-n knative-serving \
--type merge \
--patch '{"data":{"ingress-class":"kourier.ingress.networking.knative.dev"}}'

Dış IP adresini alın:



kubectl get svc kourier -n kourier-system

3. Magic DNS (sslip.io) ile Domain Ayarı

  1. Gerçek alan adı olmadan test için Knative’in Magic DNS özelliği kullanılır.

kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.8.0/serving-default-domain.yaml
  • Bu yapılandırma, servis URL’lerini otomatik üretir.

4. Serverless Node.js Servisi Dağıtma (YAML)

  1. Önce izolasyon için namespace oluşturun:

kubectl create namespace serverless-app

Ardından service.yaml dosyasını oluşturun:


apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: rabisu-node-demo
namespace: serverless-app
spec:
template:
spec:
containers:
- image: knative-samples/helloworld-go
ports:
- containerPort: 8080
env:
- name: TARGET
value: "Rabisu Dunyasi"
  • Bu YAML dosyası Knative Service tanımlar.

Servisi dağıtın:


kubectl apply -f service.yaml

5. Uygulamaya Erişim ve Test

  1. Servis URL’sini alın:

kubectl get ksvc -n serverless-app

Tarayıcıda veya curl ile test edin:


curl http://rabisu-node-demo.serverless-app.IP_ADRESI.sslip.io

🔁 Otomatik Ölçekleme (Scale-to-Zero) Testi

  1. Knative, trafik yokken pod sayısını 0’a indirir.
  • Birkaç dakika istek göndermezseniz pod’lar kapanır.

kubectl get pods -n serverless-app
  • Yeni istek geldiğinde pod’lar otomatik başlatılır.

❓ Sıkça Sorulan Sorular (SSS)

1. Knative neden Kubernetes üzerinde tercih edilir? Otomatik ölçekleme ve sürüm yönetimi sağlar.

2. Scale-to-zero ne kazandırır? Kaynak tüketimini ve maliyeti düşürür.

3. Kourier yerine başka ingress kullanabilir miyim? Evet, Istio veya Contour desteklenir.

4. Gerçek domain kullanmak mümkün mü? Evet, DNS kaydı eklenebilir.


Sonuç

Bu rehberde Kubernetes üzerinde Knative ile serverless Node.js servisi kurdunuz. Artık altyapı yönetimi yerine uygulama geliştirmeye odaklanabilirsiniz.

Bu mimariyi Rabisu Bulut Kubernetes altyapısında hemen deneyebilirsiniz.