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
kubectlkomut 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ı
- 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ı
- 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)
- Ö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
- 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
- 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.