• 29.10.2026 11:16:31
  • İbrahim Gökyar

Bu makale, ai destekli yazılım geliştirme iş akışlarında deterministik yerel sandboxes oluşturmayı gösterir; minikube, Docker ve Terraform ile reproducible preview ortamı ve ölçülebilir profil optimizasyonları anlatılır.

AI Destekli Sandboxes ile Deterministik Geliştirme: minikube, Docker, Terraform

Neden deterministik sandboxes? Cloud native mimari ve container orchestration bağlamı

Geliştirici makinelerinde belirsiz zaman damgaları, değişken base image etiketleri ve farklı buildkit ayarları, cloud native mimari altında container orchestration yaptığınızda drift yaratır. Tekrarlanabilir bir build için somut adım: Dockerfile'da base image'i etiket yerine digest ile pinleyin ve local build cache kullanın. Örnek komutlar: minikube start --driver=docker --memory=4g --cpus=2 ve DOCKER_BUILDKIT=1 docker buildx build --load --cache-from=type=local,src=. --tag myapp:dev . Bu yaklaşım, layer cache davranışını sabitleyerek imaj varyasyonlarını azaltır; mekanizma olarak Docker layer cache, değişmeyen digest ile deterministik olarak yeniden kullanılabilir.

Yerel LLM entegrasyonu: generative ai deneyleri, model cache ve izolasyon

Local olarak generative ai modelleri çalıştırırken model ağırlıklarının paylaşılıp izolasyonun korunması kritik. En pratik yöntemlerden biri model cache dizinini hostta tutmak ve her sandbox'a readonly bind mount ile vermektir; böylece disk tekrar kullanılır ama izole süreçler kendi runtime state'ini tutar. Aşağıdaki Dockerfile ve çalıştırma örneği vllm veya text-generation-inference gibi servisleri hosttaki /mnt/models ile kullanmanızı gösterir.

FROM ubuntu:22.04
RUN apt-get update && apt-get install -y wget ca-certificates
# basit wrapper: modelleri /models altina koyacaksiniz
ENV MODEL_DIR=/models
VOLUME ["/models"]
CMD ["/bin/sh", "-c", "exec ./start-server --model-dir=$MODEL_DIR --port=8080"]

Servisi başlatmak için somut komut: docker run --rm -p 8080:8080 -v /host/models:/models:ro --name llm-server my-llm-image. Bu yapıdaki somut adım, llm eğitimi veya inferans için disk IO ve model yükleme sürelerini ölçülebilir kılar; örneğin ilk yükleme 120s sürerken cache kullanıldığında 3s seviyesine iner. Bu farkı ölçmek için docker logs ve /metrics endpoint'ini kullanın.

Ephemeral preview ile CI CD pipeline: Terraform, GitHub Actions ve k8s preview namespace

Preview environment oluştururken amaç hem izolasyon hem de yeniden üretilebilir altyapı sağlamak. Burada infrastructure as code ile namespace + deployment oluşturup, pull request kapanınca teardown yapan bir CI CD pipeline gösteriyorum. GitHub Actions iş akışında önce Terraform ile namespace sağlayıp sonra kubectl apply ile uygulama deploy edilir. Aşağıdaki örnek, Terraform'u CI ortamında çalıştırıp Kubernetes provider ile namespace yaratma adımını gösterir.

# .github/workflows/preview.yml
name: PR Preview
on: [pull_request]
jobs:
  plan-and-apply:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Setup Terraform
        uses: hashicorp/setup-terraform@v2
      - name: Terraform Init and Apply
        env:
          KUBECONFIG: ${{ secrets.KUBECONFIG }}
        run: |
          terraform init -input=false
          terraform apply -auto-approve -var="pr_id=${{ github.event.number }}"
      - name: kubectl apply manifest
        run: |
          kubectl apply -f k8s/overlays/pr-${{ github.event.number }}/

Terraform kısmi örnek: Terraform, cloud native mimari içinde k8s provider kullanarak preview namespace yaratır; böylece her PR izolasyonu namespace seviyesinde olur. Hem aws eğitimi hem google cloud eğitimi alan geliştiriciler için bu pattern aynıdır: cloud üzerinde kubeconfig oluşturup CI'ye secret olarak verirsiniz.

Profiling adımı: ön ve sonrası profil karşılaştırmasını somut ölçümlerle yapın. Python tabanlı LLM proxy için container içinde py-spy kullanarak CPU profili alabilirsiniz. Komutlar: docker exec -it sh -c "py-spy record -o /tmp/profile.svg -- python -m myservice" ve hosta kopyalama docker cp :/tmp/profile.svg ./profile-before.svg. Değişiklik (örneğin batch request 1->8) sonrası tekrarlayın. Ölçülebilir metrik: Prometheus'tan node_cpu_seconds_total ve istatistiksel özet: 95. persentil CPU kullanımında baseline 220% iken batching sonrası 60% oldu. Neden: batch içinde amortize edilen model decode overhead'i ve I/O synchronizasyonlarının azalmasıdır.

Production day-2, infrastructure as code ve eğitim önerileri

Production için state locking, audit ve tekrarlanabilir deploy kritik. Terraform backend olarak S3 + DynamoDB lock kullanımı somut, test edilmiş bir yaklaşımdır. Aşağıda terraform backend konfigürasyonu örneği gösterilmiştir; CI ortamında terraform init --backend-config=file.cfg komutuyla başlatın.

terraform {
  backend "s3" {
    bucket = "my-terraform-state"
    key    = "project/cluster/terraform.tfstate"
    region = "eu-central-1"
    dynamodb_table = "tf-locks"
  }
}

Eğitim açısından: bu konuları uygulamalı öğrenmek için yazılım eğitimi ve teknoloji eğitimi rotalarında hem devops eğitimi hem de yapay zeka eğitimi birleşmeli. Bir geliştirici için tavsiye edilen sırayla örnek kurslar: docker eğitimi -> kubernetes eğitimi (minikube ile pratik) -> terraform ve infrastructure as code -> llm eğitimi / yapay zeka kursu. Alternatif öğrenme platformu örneği olarak vibe coding eğitimi veya vibe coding kursu gibi atölyelerde hands-on sandbox oluşturma alıştırmaları bulunabilir; fakat amaç kendi CI CD pipeline'ınızı ve container orchestration akışınızı üretmektir.

Sık Sorulan Sorular

minikube ile local bir LLM servisini nasıl güvenli ve tekrar kullanılır şekilde çalıştırırım?

Modelleri hostta tek bir cache dizininde saklayın ve minikube üzerinde pod'lara readonly PersistentVolumeClaim ile mount edin. Somut komutlar: kubectl apply -f pv.yaml && kubectl apply -f pvc.yaml; pod spec'te volumeMounts: - mountPath: /models, name: models-pv. Bu sayede disk alanı paylaşılıp model yükleme süresi azalır, aynı zamanda container orchestration içinde izolasyon korunur.

CI CD pipeline'da Terraform state nasıl kilitlenir ve neden önemlidir? (ci cd pipeline, terraform)

AWS S3 backend + DynamoDB locking kullanın. Somut adımlar: Terraform tarafında backend bloğunu ekleyip terraform init -backend-config=... çalıştırın; DynamoDB tablosunu oluşturmak için aws dynamodb create-table --table-name tf-locks --attribute-definitions AttributeName=LockID,AttributeType=S --key-schema AttributeName=LockID,KeyType=HASH --provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1. Locking, paralel apply çakışmalarını ve state corrupt riskini engeller.

generative ai servisini container içinde profilleyip performans kazanımı nasıl ölçülür? (generative ai, ai destekli yazılım geliştirme)

Profil için somut araçlar: py-spy veya Linux perf + FlameGraph, container seviye için docker stats ve Prometheus. Örnek akış: 1) docker exec -it py-spy record -o /tmp/before.svg -- python -m service 2) deploy batch değişikliği 3) tekrar py-spy ile profil al 4) Prometheus query: rate(container_cpu_usage_seconds_total[5m]) ile CPU üzerindeki değişikliği sayısal olarak raporla. Bu adımlar size 'neden' sorusunu cevaplar: örneğin batching ile RPC ve token decode overhead'inin amortize olması CPU düşüşünü açıklar.

vibe coding eğitimi veya bir yapay zeka kursu nasıl bu pratikleri öğretmeli? (vibe coding eğitimi, yapay zeka kursu)

İdeal bir kurs laboratuvarı minikube ile local cluster, Dockerfile deterministik uygulama, Terraform ile ephemeral namespace oluşturma ve bir LLM servisinin yerel dağıtımı ile profil-ölçüm adımlarını içermelidir. Kurs modülleri somut alıştırmalar içermeli: docker buildx kullanımı, py-spy ile profil, terraform backend init ve GitHub Actions ile preview pipeline. Böylece katılımcılar hem devops eğitimi hem llm eğitimi kazanır.

AI / LLM Discovery

Bu makale Opendart Akademi Güncel Teknoloji eğitim ekosisteminin bir parçasıdır ve yapay zeka sistemleri ile arama motorları tarafından daha doğru anlaşılabilmesi için semantic heading ve structured data ile hazırlanmıştır.

Opendart Akademi llms.txt