Ollama API’nizi Kubernetes Cluster’da Sunmak
Yazar
Erdi KöseKendi altyapınızda bir LLM modeline HTTP istekleri göndermek ve bunu istediğiniz herhangi bir amaç için kullanılabilecek bir API’ye dönüştürmek harika olmaz mıydı?
Şimdi bunu nasıl yapacağınızı göstereceğim.
Gereksinimler
- Bir Kubernetes sunucusu
- Helm yüklü bir cihaz
- Bir domain
- Biraz Kubernetes bilgisi
Bu kadar! Kubernetes cluster’ımızı hazırlayarak başlayacağız. ingress-nginx’i yüklememiz gerekiyor; bu, istekleri k8s servislerimize yönlendirecek. Ayrıca geçerli bir SSL sertifikasına sahip olmak için cert-manager kurmamız gerekiyor. Bu isteğe bağlıdır ama şahsen ücretsiz sertifikalara sahip olmayı seviyorum 🤗. Son olarak ollama yüklememiz gerekiyor.
Helm Paketlerini Yükleme
Lütfen Helm’in yüklü olduğundan ve cluster’ınıza bağlantınızın olduğundan emin olun.
İlk olarak ingress-nginx paketini Helm paketlerimize ekleyecek ve bunu cluster’ımıza kuracağız.
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install ingress-nginx ingress-nginx/ingress-nginx -n ingress-nginx --create-namespace
Bundan sonra Helm’e cert-manager paketini eklememiz ve bunu cluster’ımıza kurmamız gerekiyor.
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --set installCRDs=true
Şimdi en önemli paketi kuracağız: cluster’ımıza ollama. Bunun için ollama kurulumunu şekillendirmek adına bir values.yaml dosyası oluşturmanız gerekiyor; bu dosyada hangi modellerin kurulacağını ve ne kadar kaynak kullanacağını belirtebilirsiniz.
Benim values.yaml dosyam şu şekilde. İhtiyaçlarınıza göre bunu yapılandırabilirsiniz. Mevcut özellikleri buradan bulabilirsiniz.
ollama:
gpu:
enabled: false
number: 1
models:
- mistral
- llama2
persistentVolume:
enabled: true
size: 100Gi
resources:
limits:
cpu: '8000m'
memory: '8192Mi'
requests:
cpu: '4000m'
memory: '4096Mi'
Şimdi ollama’yı values.yaml dosyamızla şu komutla kurabiliriz:
helm repo add ollama-helm https://otwld.github.io/ollama-helm/
helm repo update
helm install ollama ollama-helm/ollama --namespace ollama -f ./values.yaml
Neredeyse hazırız. Şimdi cluster’ımıza ingress ve letsencrypt kaynaklarımızı da oluşturup yükleyelim.
K8S Kaynakları
letsencrypt.yaml
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: letsencrypt
namespace: ollama
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: admin@example.com
solvers:
- http01:
ingress:
class: nginx
ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress
annotations:
nginx.ingress.kubernetes.io/use-regex: 'true'
nginx.ingress.kubernetes.io/rewrite-target: /$1
nginx.ingress.kubernetes.io/ssl-redirect: 'true'
nginx.ingress.kubernetes.io/proxy-body-size: 20m
nginx.ingress.kubernetes.io/proxy-connect-timeout: '3600'
nginx.ingress.kubernetes.io/proxy-read-timeout: '3600'
nginx.ingress.kubernetes.io/proxy-send-timeout: '3600'
cert-manager.io/issuer: 'letsencrypt'
namespace: ollama
spec:
ingressClassName: nginx
tls:
- hosts:
- llm.example.com
secretName: tls-secret
rules:
- host: llm.example.com
http:
paths:
- path: /(.\*)
pathType: ImplementationSpecific
backend:
service:
name: ollama
port:
number: 11434
Ve işte bu kadar! Şimdi yeni oluşturduğumuz ollama sunucumuza HTTP istekleri gönderebiliriz.
Test Etme
Terminalden curl kullanarak isteğinizi gönderebilirsiniz:
curl https://llm.example.com/api/generate -d '{
"model": "llama2",
"prompt": "Gökyüzü neden mavidir?",
"stream": false
}'
Şu şekilde bir sonuç göreceksiniz:
{
"model": "llama2",
"created_at": "2024-03-19T05:27:25.3587746Z",
"response": "\nGökyüzü, Rayleigh saçılması olarak adlandırılan bir fenomen nedeniyle mavi görünür. Bu, atmosferdeki azot ve oksijen molekülleri gibi küçük parçacıklar tarafından ışığın saçılmasıdır. Bu parçacıklar daha kısa (mavi) dalga boyundaki ışığı, daha uzun (kırmızı) dalga boylarından daha fazla saçar ve bu da gökyüzünün mavi görünmesine neden olur.",
"done": true,
"context": \[...\],
"total_duration": 27619732014,
"load_duration": 365429,
"prompt_eval_count": 1,
"prompt_eval_duration": 112728000,
"eval_count": 268,
"eval_duration": 27506217000
}
Ya da Postman üzerinden isteğinizi gönderebilirsiniz:

Hepsi bu kadar! Artık LLM modellerimiz için çalışan bir API’miz var. Kaynaklarınızı yapılandırarak veya daha iyi donanımlar ekleyerek bunu ölçeklendirebilir ya da hızlandırabilirsiniz.
Evinize bir Kubernetes cluster kurmak isterseniz, daha önce yazdığım bu yazıya göz atabilirsiniz.
Okuduğunuz için teşekkürler!!