FibaCloud
İçeriğe geç
Soru sor

Kapatmak için ESC tuşuna basın

Docker ve Minikube ile Yerel Kubernetes Kurulumu

Minikube, Kubernetes’i öğrenmek ve uygulama tanımlarını yerelde denemek için tek makinede bir küme oluşturur. Docker driver, Minikube düğümünü Docker içinde çalıştırır; Kubernetes’in uygulama konteynerlerini Docker Engine’e doğrudan yönettiği anlamına gelmez. Küme içindeki çalışma zamanı CRI üzerinden yönetilir.

Bu rehber Ubuntu 24.04 LTS, x86-64, Docker Engine ve Minikube v1.39.0 için ayrı bir yerel laboratuvar kurar. Minikube üretim ortamının yüksek erişilebilirlik, yedekleme veya güvenlik tasarımı yerine geçmez.

Denetleyici döngüsü nasıl işler?
Denetleyici döngüsü nasıl işler? Deployment istenen kopya sayısını belirtir. Denetleyiciler mevcut durumu gözler ve farkı gidermeye çalışır. Service, uygun Pod’lara kararlı bir erişim noktası sağlar.
Görselin adım adım açıklaması
  1. Tanımla: Deployment ile istenen durumu belirt.
  2. Gözle: Çalışan Pod’ların durumunu izle.
  3. Uzlaştır: Denetleyiciler farkı gidermeye çalışır.
  4. Ulaştır: Service ile hazır Pod’lara eriş.

1. Ön koşulları ve Docker erişimini doğrulayın

En az iki CPU, 2 GB boş bellek ve 20 GB boş disk Minikube’un başlangıç gereksinimleridir; örnek için 4 GB bellek ayırıyoruz. Host işletim sistemi için ayrıca kaynak bırakın. Gerekli imajları indirmek için internet erişimi gerekir.

uname -m
free -h
df -h
docker version
docker info --format '{{.OSType}}'

Son iki komut Minikube’u çalıştıracak kullanıcıyla, sudo olmadan başarılı olmalı ve işletim sistemi linux olmalıdır. sudo docker çalışıyor diye aynı kullanıcının Docker driver erişimi olduğu varsayılamaz. Docker socket erişimi güçlü yetkiler verir; hesabı gelişigüzel docker grubuna eklemeyin. Yetki modelinizi Docker’ın resmî kurulum belgesine göre hazırlayın. Rootless Docker kullanıyorsanız Minikube’un rootless bölümünü ayrıca izleyin; bu örnek iki modu karıştırmaz.

2. Sürümlü Minikube dosyasını doğrulayarak kurun

Bu komutlar x86-64 içindir; ARM sistemde uygun mimari dosyasını seçin. Yeni bir indirme klasöründe:

mkdir -p fc-minikube-download
cd fc-minikube-download
FC_MINIKUBE_VERSION=v1.39.0
curl --fail --location --proto '=https' "https://github.com/kubernetes/minikube/releases/download/${FC_MINIKUBE_VERSION}/minikube-linux-amd64" -o minikube-linux-amd64
curl --fail --location --proto '=https' "https://github.com/kubernetes/minikube/releases/download/${FC_MINIKUBE_VERSION}/minikube-linux-amd64.sha256" -o minikube-linux-amd64.sha256
printf '%s  %s\n' "$(cat minikube-linux-amd64.sha256)" minikube-linux-amd64 | sha256sum --check

Checksum kontrolü başarısızsa kurmayın. Başarılıysa:

sudo install -m 0755 minikube-linux-amd64 /usr/local/bin/minikube
minikube version

Hash dosyasını ve çalıştırılabilir dosyayı aynı resmî sürüm adresinden almak aktarım tutarlılığını kontrol eder; bağımsız bir imza denetimi iddiası değildir. Güncellemede yeni sürümün notlarını ve uyumluluğunu inceleyin.

3. Ayrı profilde yerel kümeyi başlatın

minikube profile list
minikube start -p fc-lab --driver=docker --container-runtime=containerd --cpus=2 --memory=4096
minikube status -p fc-lab
minikube -p fc-lab kubectl -- --context=fc-lab get nodes -o wide
minikube -p fc-lab kubectl -- --context=fc-lab version

fc-lab zaten varsa önce kime ve hangi iş yüküne ait olduğunu kontrol edin; gerekiyorsa başka profil adı kullanın. Düğüm Ready olmalıdır. Kubernetes sunucu ve istemci sürümlerini kayıt altına alın. Ayrı kubectl kurmak yerine Minikube’un kendi sürümle eşleşen kubectl -- sarmalayıcısını kullanıyoruz; böylece kurulmamış bir komutu çağırmıyoruz. Her komutta açık context kullanılması başka bir kümeyi yanlışlıkla değiştirme riskini azaltır.

4. Sınırlı bir uygulama tanımı oluşturun

Yeni fc-demo.yaml dosyasına yazın:

apiVersion: v1
kind: Namespace
metadata:
  name: fc-demo
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
  namespace: fc-demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      automountServiceAccountToken: false
      securityContext:
        runAsNonRoot: true
        runAsUser: 101
        runAsGroup: 101
        fsGroup: 101
        seccompProfile:
          type: RuntimeDefault
      containers:
        - name: web
          image: nginxinc/nginx-unprivileged:stable-alpine
          ports:
            - containerPort: 8080
          securityContext:
            allowPrivilegeEscalation: false
            readOnlyRootFilesystem: true
            capabilities:
              drop: [ALL]
          resources:
            requests:
              cpu: 50m
              memory: 32Mi
            limits:
              cpu: 250m
              memory: 256Mi
          readinessProbe:
            httpGet:
              path: /
              port: 8080
            initialDelaySeconds: 3
            periodSeconds: 5
          livenessProbe:
            httpGet:
              path: /
              port: 8080
            initialDelaySeconds: 15
            periodSeconds: 10
          volumeMounts:
            - name: temporary
              mountPath: /tmp
      volumes:
        - name: temporary
          emptyDir:
            sizeLimit: 64Mi
---
apiVersion: v1
kind: Service
metadata:
  name: web
  namespace: fc-demo
spec:
  selector:
    app: web
  ports:
    - port: 80
      targetPort: 8080
  type: ClusterIP

Nginx’in ayrıcalıksız imajı 8080 üzerinde çalışır; root olmayan kullanıcı, salt okunur kök dosya sistemi ve sınırlı geçici alan kullanır. stable-alpine değişebilir: gerçek bir dağıtımda test ettiğiniz imaj digest’ini kaydedip YAML’de sabitleyin. Secret değerlerini bu dosyaya gömmeyin. emptyDir kalıcı uygulama verisi için uygun değildir.

5. Uygulayın ve erişimi test edin

minikube -p fc-lab kubectl -- --context=fc-lab apply --dry-run=client -f fc-demo.yaml
minikube -p fc-lab kubectl -- --context=fc-lab apply -f fc-demo.yaml
minikube -p fc-lab kubectl -- --context=fc-lab -n fc-demo rollout status deployment/web --timeout=120s
minikube -p fc-lab kubectl -- --context=fc-lab -n fc-demo get pods,service
minikube -p fc-lab kubectl -- --context=fc-lab -n fc-demo port-forward --address=127.0.0.1 service/web 8080:80

Port-forward terminalini açık bırakın; başka bir terminalde curl --fail http://127.0.0.1:8080/ ile yanıt alın. Service yalnız ClusterIP’dir; bu akış genel internete LoadBalancer veya NodePort açmaz. --address=0.0.0.0 kullanmak erişim sınırını değiştirir.

Readiness, Pod’un trafik almaya hazır olup olmadığını; liveness, yeniden başlatma gerektiren durumu ölçer. Her uygulamada aynı URL veya gecikmeler doğru olmayabilir. Başarılı apply sonucu tek başına uygulamanın çalıştığını göstermez.

Sorun giderme, geri dönüş ve temizlik

Pending: kaynakları ve olayları inceleyin. ImagePullBackOff: imaj adı, mimari ve depo erişimini kontrol edin. CrashLoopBackOff: günlük, çıkış nedeni, bellek sınırı ve gereken yazılabilir yolları inceleyin. Port-forward hatası: yerel 8080 portunun boş ve Pod’un hazır olduğunu doğrulayın.

minikube -p fc-lab kubectl -- --context=fc-lab -n fc-demo describe deployment web
minikube -p fc-lab kubectl -- --context=fc-lab -n fc-demo logs deployment/web --tail=50
minikube logs -p fc-lab --problems

Bir Deployment güncellemesinden sonra önceki çalışan revizyona dönmek için rollout geçmişini inceleyip rollout undo deployment/web -n fc-demo kullanın; aynı context sarmalayıcısını koruyun. Bu işlem haricî veritabanını geri yüklemez.

Port-forward’ı Ctrl+C ile kapatın. Çalışmayı saklamak için minikube stop -p fc-lab kullanın. Yalnız bu laboratuvarı kalıcı olarak kaldırmak istediğinizde minikube delete -p fc-lab çalıştırın; içindeki iş yükü ve veriler kaybolabilir. Tam Docker/Minikube ağ ve çalışma kabulü kendi ayrı makinenizde tamamlanmalıdır; YAML kontrolü bunun yerine geçmez.

Resmî kaynaklar

Teknik içerik ve kaynaklar 4 Ekim 2026 tarihinde gözden geçirildi. Sürüm veya sağlayıcı değişikliğinde ilgili resmî belgeyi yeniden kontrol edin.

Bir yanıt yazın

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