Ana içeriğe atla

Kubernetes Eğitimi: Uygulamaları Dağıtmaya Yeni Başlayanlar için Kılavuz

Kubernetes’i uygulamalı şekilde öğrenin! Bu rehber, yerel bir Kubernetes kümesi kurmayı, uygulamaları dağıtmayı ve kaynakları verimli biçimde yönetmeyi adım adım gösterir.
Güncel 3 Eki 2026  · 13 dk. oku

Yapay Zeka ile Keşfedin

ChatGPTClaudePerplexity

Makine Öğrenimi Mühendisi olarak çalışmaya başladığımda, asıl zorluğun model geliştirmek olmadığını çabucak fark ettim. Asıl mesele, bu modelleri güvenilir ve ölçeklenebilir bir şekilde üretime almaktı. 

İşte o zaman, sektörde herkesin konuştuğu konteyner orkestrasyon aracı Kubernetes ile tanıştım.

Başlarda, karmaşık mimarisini anlamakta zorlandım. Temellerini açıklayan dokümanlar ve Kubernetes rehberleri okuyarak daha fazla şey öğrenmeye çalıştım. Ancak yine de anlamak benim için zordu.

Ama her şey, kavramları kendim uygulamaya başladığımda değişti. Kendi Kubernetes kümemi kurup farklı yapılandırmalarla denemeler yaparak ve küçük uygulamalar dağıtarak zamanla parçaları birleştirmeye başladım. Uygulamalı deneyim özgüvenimi artırdı ve sonunda Kubernetes’in ölçekli uygulama yönetimini nasıl kolaylaştırdığını kavradım.

Bu eğitim size aynı uygulamalı deneyimi sunmak için hazırlandı. İster yeni başlayan olun ister temelleri güçlendirmek isteyin, bu rehber yerel bir Kubernetes kümesi kurmayı, uygulamaları dağıtmayı ve kaynakları verimli biçimde yönetmeyi adım adım gösterecek. 

Sonunda, Kubernetes temelleri konusunda sağlam bir anlayışa sahip olacak ve bu becerileri gerçek dünyadaki uygulamalara taşımaya hazır olacaksınız!

Başlamadan Önce

Bu rehberi takip edebilmek için ihtiyaç duyacağınız önkoşulları ve araçları gözden geçirelim. 

Ön Koşullar

  • Temel komut satırı bilgisi: Kubernetes komut satırı etkileşimlerine dayandığından, dizinlerde gezinme, komut çalıştırma ve dosya düzenleme gibi temel Linux komutlarına hakim olmalısınız. Örneğin, cd ve ls komutları ile nano veya vim kullanarak temel metin düzenleme.
  • Konteynerleri anlama: Konteynerleştirme kavramları ve Docker gibi araçlar. Docker hakkında daha fazla bilgi için Introduction to Docker ve Intermediate Docker kurslarına göz atın.
  • YAML: YAML dosyaları ve sözdizimine aşina olmanız gerekir. Bu kritiktir; zira Kubernetes’te her şey YAML dosyalarıyla yönetilir.
  • (İsteğe bağlı) Bulut ortamları: AWS, Azure veya GCP gibi genel bulut platformları ve bu platformların yönetilen Kubernetes hizmetleri (ör. EKS, AKS, GKE) hakkında farkındalık. Yerelden buluta geçiş yapmak istediğinizde işinizi kolaylaştırır.

Araçlar

  • minikube: Yerelde tek düğümlü bir Kubernetes kümesi çalıştırmaya yarayan araç (kurulumunu birlikte yapacağız).
  • kubectl: Kümelerle etkileşim için Kubernetes komut satırı aracı (kurulumunu birlikte yapacağız).
  • Metin düzenleyici: YAML dosyası oluşturma ve düzenleme için herhangi bir editör. Öneri olarak, yaşamınızı kolaylaştırmak için YAML tabanlı eklentileri destekleyen bir araç kullanın (ör. VSCode).

Ortam

  • Donanım: En az 2 CPU, 2 GB boş bellek ve 20 GB boş disk alanı.
  • Konteyner yöneticisi: Konteyner imajlarını yönetmek için (ör. Docker, Podman).

Kubernetes ve Docker nasıl karşılaştırılır öğrenmek ister misiniz? Konumlandırılmış ortamlardaki rollerini anlamak için bu kapsamlı Kubernetes ve Docker karşılaştırmasına göz atın.

Yerel Kubernetes Kümenizi Kurma

Şimdi somutlaşalım ve yerel Kubernetes kümenizi kuralım! 

Peki Kubernetes kümesi nedir? Kubernetes kümesi, uygulamalarınızı çalıştırmak için birlikte çalışan düğümlerden oluşur. İki bileşenden oluşur: 

  1. Kontrol düzlemi (control plane): Kümenin yönetimini üstlenir; uygulamaları zamanlama, hedef durumu koruma ve uygulamalarınızı hedef duruma ölçekleme gibi işleri yapar.
  2. İşçi düğümler (worker nodes): Uygulamalarınızı Kubernetes’in en küçük birimi olan Pod’lar içinde çalıştıran makineler (buna birazdan değineceğiz). 

Kubernetes’in temel bileşenleri.

Kubernetes’in temel bileşenleri. Görsel: Kubernetes.io

minikube kurulumu

Minikube; Windows, Linux ve MacOS üzerinde kurulabilir. Lütfen resmi Minikube dokümantasyonundaki Başlangıç bölümündeki talimatları izleyin.

Windows üzerinde çalışıyorum ama Linux arayüzünü tercih ettiğim için WSL2 kullanıyorum. Windows makinenizde WSL2 kurmak isterseniz, lütfen Microsoft Kurulum kılavuzunu okuyun.

kubectl kurulumu

kubectl, Kubernetes kaynaklarınıza komut satırı arayüzüdür. Resmi Kubernetes dokümantasyonunu izleyerek veya minikube içine entegre kurulumla yükleyebilirsiniz.

 Ben, kubectl’i bağımsız bir komut olarak kullanmanıza olanak tanıdığı için resmi Kubernetes dokümantasyonunu kullanarak kurmanızı öneririm. Minikube ile kullanırsanız komutları minikube önekiyle çalıştırmanız gerekir.

minikube kümesi başlatma

Artık minikube’u kurduğumuza göre, yönetici yetkilerine sahip bir terminalden şu komutla bir küme başlatabiliriz: 

minikube start

Bu komut, gerekli Kubernetes ikililerini otomatik olarak indirir ve sizin için tek düğümlü bir küme başlatır. 

Kümeyi doğrulama

Artık kümenin durumunu doğrulayarak her şeyin beklendiği gibi çalışıp çalışmadığını kontrol edebiliriz:

minikube status

Şuna benzer bir çıktı vermelidir:

minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

Bir adım daha ileri gidip kümedeki tüm düğümleri kubectl ile alabiliriz; burada yalnızca bir tane olmalıdır: 

kubectl get nodes 

Yukarıdaki komut aşağıdakine benzer bir çıktı döndürmelidir: 

NAME       STATUS   ROLES           AGE   VERSION
minikube   Ready    control-plane   10m   v1.32.0

Kümeyi durdurma

Küme gerekmediğinde kaynakları boşaltmak için kümeyi durdurmak isterseniz şu komutu çalıştırabilirsiniz: 

bash
minikube stop

Kubernetes ile çalışmaya devam etmek istediğinizde, bir dahaki sefere yeniden başlatmanız yeterlidir.

Kümeyi silme

Minikube kümenizi ve ona eklenen tüm kaynakları tamamen silmek isterseniz şunu çalıştırabilirsiniz:

minikube delete

Kubernetes Temelleri: Pod’lar, Dağıtımlar (Deployment), Servisler ve Ad Alanları (Namespace)

Bir küme kurup her şeyin çalıştığını doğruladığımıza göre, ilk uygulamamızı oluşturma zamanı.

Ancak ilk uygulamayı oluşturmadan önce Kubernetes’in temellerini anlamak kritik. Daha kapsamlı bir giriş istiyorsanız, Introduction to Kubernetes kursuna göz atmanızı öneririm.

Kubernetes’te en temel kavramlar Pod, Deployment ve Service’tir. Bu üç kaynak türünü bilmek güçlü uygulamalar geliştirmenize yardımcı olur. O halde bunlara biraz daha yakından bakalım.

Pod nedir?

Pod, Kubernetes’te dağıtılabilir en küçük birimdir. Aynı depolama, ağ ve ad alanını paylaşan, birbirine sıkı sıkıya bağlı bir veya daha fazla konteyner çalıştırır. Bir Pod her zaman bir Kubernetes düğümünde zamanlanır. 

Pod’unuzun ne kadar kaynak (ör. CPU ve bellek) alacağını tanımlayabilirsiniz. 

İki konteynerli örnek bir uygulama; uygulama konteyneriniz ile günlükleri toplayıp bir yere gönderen yardımcı bir konteyner olabilir. 

Bir Pod’un özellikleri:

  • Tek örnek: Her Pod uygulamanızın tek bir örneğini çalıştırır.
  • Doğası gereği geçici: Pod’lar geçici olacak şekilde tasarlanmıştır ve başarısız olduklarında veya güncellendiklerinde değiştirilirler.

Bir Pod oluşturmak için örnek YAML:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: nginx-container
    image: nginx:1.21
    ports:
    - containerPort: 80

Pod’u daha sonra kubectl ile kurabilirsiniz:

kubectl apply -f pod.yaml

Bu, my-pod adlı bir Pod başlatarak sizin için bir nginx web sunucusu çalıştırır.

Deployment nedir?

Deployment, Pod’ların yaşam döngüsünü yönetmek için kullanılan, daha üst düzey bir Kubernetes nesnesidir. İstenen Pod kopyası sayısının çalıştığından emin olur; güncellemeleri ve geri almaları yönetir. 

Bir Deployment’ın özellikleri:

  • Kopya yönetimi: İstenen sayıda pod’un her zaman çalıştığından emin olur.
  • Kendini iyileştirme: Sağlıksız Pod’ları otomatik olarak değiştirir.
  • Kademeli güncellemeler (rolling updates): Uygulama sürümünü kesinti olmadan (yapılandırılırsa) adım adım günceller.

Üç kopyayla yine bir nginx web sunucusu oluşturan bir Deployment YAML dosyası şöyle görünebilir:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.21
        ports:
        - containerPort: 80

Bu Deployment’ı kubectl ile kurabilirsiniz:

kubectl apply -f deployment.yaml

Yukarıdaki tanım, her biri nginx konteyneri çalıştıran üç Pod oluşturan nginx-deployment adlı bir Deployment yaratır. 

Service nedir?

Şimdi son kısma gelelim: Servisler. 

Service, Pod’ların IP adresleri değişse bile onlara kararlı ağ erişimi sağlayan bir soyutlamadır. Uygulamalarınız ile harici istemciler arasında köprü görevi görür. 

Peki bu neden gerekli? Her Pod’un bir IP adresi var. Neden doğrudan o IP’yi kullanamıyoruz? 

Kullanabiliriz! Ama kullanmamalıyız. Neden? 

Çünkü Pod geçicidir; Deployment tarafından öldürülebilir ve Pod sağlıksız hale geldiğinde yenisi ölçeklenir. Bu yeni Pod’un IP adresi farklı olacaktır. Bu da uygulamanızı kullanmak isteyen istemcinin, bir Pod her çöktüğünde IP adresini sürekli değiştirmesi gerektiği anlamına gelir ki bu sıkça olabilir.

İşte Service burada devreye girer: Belirli bir etiketi eşleyen tüm Pod’ları arar ve trafiği otomatik olarak onlara yönlendirir. Bir Pod sağlıksız hale gelirse Service o Pod’a trafik göndermeyi keser. Yeni bir Pod gelirse ona trafik göndermeye başlar. 

Service ayrıca trafiği Deployment’ınızın tüm kopyaları arasında dağıtır; bu harikadır çünkü uygulama mantığınızla uğraşmadan, trafiği dağıtmak için daha fazla örnek oluşturabilirsiniz.

Service türleri:

  • ClusterIP (varsayılan): Service’i küme içinde erişilebilir kılar.
  • NodePort: Service’i küme dışından erişilebilen bir kapıda (port) sunar.
  • LoadBalancer: Bulut sağlayıcılarıyla entegre olup Service’i yük dengeleyici üzerinden sunar.

nginx web sunucumuzu küme dışına açmak için örnek YAML:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: NodePort

Bu servisi yine kubectl ile oluşturabilirsiniz:

kubectl apply -f service.yaml

Bu Service artık gelen trafiği, Etiketi app=nginx olan tüm Pod’lara 80 Portu üzerinden dağıtır. 

Yeni oluşturduğunuz Service üzerinde describe komutunu çalıştırırsanız, her biri şu anda çalışan bir Pod’un IP adresini temsil eden üç uç nokta (endpoint) olduğunu görmelisiniz:

kubectl describe service nginx-service

Yukarıdaki komut şuna benzer bir çıktı vermelidir: 

Name:                     nginx-service
Namespace:                default
Labels:                   <none>
Annotations:              <none>
Selector:                 app=nginx
Type:                     NodePort
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.104.53.131
IPs:                      10.104.53.131
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  32256/TCP
Endpoints:                10.244.0.5:80,10.244.0.6:80,10.244.0.7:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

Pod, Deployment ve Service arasındaki ilişkiler

Kısaca özetlemek gerekirse:

  • Pod’lar: Bireysel uygulama örneklerini temsil eder.
  • Deployment’lar: Pod’ların yaşam döngüsünü yönetir ve sağlıklı olmalarını sağlar.
  • Servisler: Pod’lara kararlı erişim sağlar, harici veya dahili iletişimi mümkün kılar.

Namespace nedir?

Kubernetes’te Namespace’ler, bir küme içindeki kaynakları düzenlemenizi ve yalıtmanızı sağlar. Aynı fiziksel küme içinde sanal kümeler gibi düşünebilirsiniz. 

Namespace kullanmanın faydaları:

  • Sorumluluk ayrımı: Farklı ekipler veya uygulamalar, diğerlerini etkilemeden kendi namespace’lerinde çalışabilir. 
  • Kaynak yönetimi: Farklı namespace’ler için kaynak kotaları ve sınırlar belirleyebilirsiniz.
  • Güvenlik ve erişim kontrolü: Politikalar namespace düzeyinde uygulanabilir.

Varsayılan olarak Kubernetes birkaç yerleşik namespace ile gelir:

  • default: Aksi belirtilmedikçe kaynakların oluşturulduğu varsayılan namespace
  • kube-system: Dahili Kubernetes bileşenleri (ör. API sunucusu, zamanlayıcı vb.) için kullanılır.
  • kube-public: Herkese okunabilir bir namespace.
  • kube-node-lease: Düğüm kalp atışlarını izlemek için kullanılır.

Bir YAML dosyası kullanarak bir namespace oluşturabilirsiniz: 

apiVersion: v1
kind: Namespace
metadata:
  name: my-namespace

namespace.yaml adıyla kaydedin ve şu komutla uygulayın: 

kubectl apply -f namespace.yaml

Aşağıdaki komutu çalıştırdığınızda, listelenen tüm varsayılan namespace’leri ve yeni oluşturduğunuzu görmelisiniz: 

kubectl get namespaces

Daha sonra, kaynağınızın metadata bölümünde namespace’i ayarlayarak o namespace içinde kaynaklar oluşturabilirsiniz. 

Yeni oluşturduğunuz namespace içinde nginx Deployment’ımız şöyle görünürdü:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: my-namespace
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.21
        ports:
        - containerPort: 80

Artık -n argümanını kullanarak, yeni oluşturduğunuz namespace’ten kaynakları almak istediğinizi açıkça belirtmeniz gerekir: 

kubectl get deployment -n my-namespace

Kubernetes ile İlk Uygulamanızı Yönetme

Tamam, artık Kubernetes’in temel kavramlarına aşina olduğunuza göre, ilk web uygulamamızı Kubernetes’e dağıtalım ve erişmeyi deneyelim. 

Bu bölümde bir nginx web sunucusu oluşturacak, bu sunucuyu Service ile dış dünyaya açacak, yüksek trafik davranışını simüle etmek için uygulamayı ölçekleyecek ve kademeli güncelleme (rolling update) ile uygulamayı daha yeni bir sürüme yükselteceğiz.

Haydi eğlenceli kısma başlayalım!

Basit bir web uygulaması dağıtımı oluşturma

İlk adım, Nginx imajını kullanan bir konteyner oluşturan web sunucumuz için bir Deployment yaratmaktır.

Aşağıdaki kodu kopyalayıp nginx-deployment.yaml adlı bir dosyaya kaydedin.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

Ardından, bu Deployment’ı aşağıdaki komutla kümenize uygulayın:

kubectl apply -f nginx-deployment.yaml

Pod’un çalıştığını şu şekilde doğrulayabilirsiniz: 

kubectl get pods

Uygulamayı bir servis ile açığa çıkarma

nginx web sunucusunu dış dünyaya bir Service aracılığıyla açığa çıkarmalıyız. Bunun için NodePort türünde bir Service oluşturuyoruz; çünkü nginx web sunucusuna Kubernetes kümesi dışındaki yerel makinemizden erişmek istiyoruz.

Bu nedenle nginx-service.yaml adlı bir dosya oluşturun ve aşağıdaki içeriği ekleyin:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: NodePort

Servisi aşağıdaki komutla uygulayabilirsiniz:

kubectl apply -f nginx-service.yaml

Son olarak, nginx web sunucunuzun URL’sini almak için minikube’u kullanabilirsiniz:

minikube service nginx-service --url

Bu URL’yi tarayıcınızda açın; nginx web sunucunuzun karşılama sayfasını görmelisiniz.

Yerel bir tarayıcıda nginx web sunucusunun karşılama sayfasının ekran görüntüsü.

Yerel bir tarayıcıda nginx web sunucusunun karşılama sayfasının ekran görüntüsü.

Uygulamayı ölçekleme

Şu anda bir Pod çalışıyor. Ancak web sayfamızı ziyaret eden çok sayıda kullanıcı olabilir. Bu nedenle Kubernetes’te uygulamanızı hızla ölçekleyerek daha fazla Pod çalıştırabilirsiniz. 

Service, o Deployment’a ait tüm Pod’ları otomatik olarak algılar ve gelen istekleri nginx web sunucusunu çalıştıran tüm Pod’lar arasında yük dengeler. Bu, özellikle yoğun trafik geldiğinde web sayfamızın genel performansını iyileştirir.

Şimdi aşağıdaki komutla uygulamamızı 3 kopyaya ölçekleyelim:

kubectl scale deployment nginx-deployment --replicas=3

Artık çalışan tüm Pod’ları tekrar alabilirsiniz; üç tane olmalıdır:

kubectl get pods

nginx-service’imizin bağlı olduğu tüm uç noktaları almak için aşağıdaki komutu da kullanabilirsiniz. Üç uç nokta döndürmelidir; her uç nokta kendi dahili küme IP adresidir:

kubectl get endpoints nginx-service

Kademeli güncellemeler (rolling updates)

Şimdi Kubernetes kullanmanın bir başka önemli faydası: Kademeli güncellemeler.

Kademeli güncellemenin amacı, web uygulamanızda kesintiyi önlemektir. Amazon gibi şirketlerin, her yeni sürüm yayınladıklarında sitelerinin kapalı kalmasının yaratacağı mali kaybı bir düşünün.

Kademeli güncellemede Kubernetes, yeni bir Pod’u ölçekler, sağlıklı olup olmadığını kontrol eder ve ardından eski olanı küçültür. 

Varsayılan olarak Kubernetes, istenen Pod sayısının en az %75’inin çalışır durumda olmasını sağlar; azami %25’i kullanılamaz olabilir. Bizim üç kopyalık örneğimizde Kubernetes her seferinde yalnızca bir yeni Pod ekler, onun sağlıklı olduğunu doğrularsa başka bir Pod’u küçültür. Tüm Pod’lar yeni sürüme güncellenene kadar bu işlemi tekrarlar.

Şimdi latest olan nginx imaj sürümümüzü 1.23 olarak değiştirerek bunu yapalım:

kubectl set image deployment/nginx-deployment nginx=nginx:1.23

Dağıtım durumunu şu komutla izleyebilirsiniz: 

kubectl rollout status deployment/nginx-deployment

Çıktı şuna benzer olacaktır: 

Waiting for deployment "nginx-deployment" rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "nginx-deployment" rollout to finish: 1 old replicas are pending termination...
deployment "nginx-deployment" successfully rolled out

Ve dağıtım devam ederken web sayfanız, hiç kesinti olmadan her an erişilebilir kalır!

Harika değil mi?

Kubernetes Kaynaklarını Yönetme

Kubernetes, her türden kaynağı incelemek, değiştirmek ve silmek için güçlü araçlar sunar. Kaynakları etkin bir şekilde yönetmek, daha iyi sorun giderme, kaynak tahsisi ve genel küme bakımı sağlar. 

Bu bölümde, kaynaklarınızı etkili biçimde yönetmenize ve sorun halinde çözüm üretmenize yardımcı olacak diğer temel komutlara değineceğiz.

Küme kaynaklarını görüntüleme

Herhangi bir kaynağı değiştirmeden önce, kümenizde şu anda çalışan kaynakları görüntülemek ve incelemek önemlidir.

Örneğin, kümenizde neler olup bittiğini görmek için çalışan tüm Pod, Service ve Deployment’ları listeleyebilirsiniz: 

# çalışan Pod’ları listele
kubectl get pods

# çalışan Servisleri listele 
kubectl get services

# çalışan Deployment’ları listele
kubectl get deployments

Belirli bir kaynağa daha derinlemesine bakmak isterseniz, describe komutundan yararlanabilirsiniz:

kubectl describe deployment nginx-deployment

Bu, kademeli güncellemeler, ölçekleme veya imaj çekme olayları gibi daha fazla bilgi gösterir. Bir şeyler ters giderse başvurabileceğiniz ilk noktadır.

Bir Pod içinde neler olup bittiğini görmek için çalışan bir Pod’un günlüklerini aşağıdaki komutla kontrol edebilirsiniz:

kubectl logs <pod-name>

Kaynakları silme

Artık kullanılmayan kaynakları temizlemek de önemlidir; böylece yeni uygulamalar için küme kaynaklarını serbest bırakabilirsiniz. 

Bir Pod’u şu komutla silebilirsiniz:

kubectl delete pod <pod-name>

Bunu nginx pod’larımızdan biri için yapabiliriz; ancak bunlar bir Deployment tarafından yönetildiğinden, üç kopyanın çalışır durumda olmasını sağlamak için anında yeni bir Pod ölçeklenecektir. 

Dolayısıyla burada nginx-deployment’ı silmemiz gerekir: 

kubectl delete deployment nginx-deployment

Bu komutu çalıştırdıktan sonra çalışan tüm nginx Pod’ları silinmelidir. 

Bir Namespace içindeki tüm kaynakları da silebiliriz. Aşağıdaki komut, varsayılan olarak default Namespace’te oluşturulmuş tüm kaynaklarımızı silecektir:

kubectl delete all --all

Sonuç

Tebrikler! Sona ulaştınız ve Kubernetes’te ilk adımları başarıyla attınız. 

Bu eğitimi takip ederek şunları öğrendiniz:

  • minikube kullanarak yerel bir Kubernetes kümesi kurmak.
  • Kubernetes’in temel yapı taşları olan Pod, Deployment, Service ve Namespace’lerle çalışmak.
  • Basit bir web uygulamasını Kubernetes içinde dağıtmak ve yönetmek.
  • Uygulamaları dinamik olarak ölçeklemek ve kesinti olmadan kademeli güncellemeler yapmak.
  • Kubernetes kaynaklarını listeleyerek, açıklayarak ve silerek yönetmek.

Kubernetes başlangıçta karmaşık görünebilir (en azından bana öyle gelmişti). Ancak onu temel kavramlara bölmek işi daha ulaşılabilir kılar. 

Deney yapmaya devam edin ve daha fazla uygulama dağıtın. 

Kubernetes’i öğrenmenin en iyi yolu yaparak öğrenmektir; o halde inşa etmeye başlayın!

Kubernetes becerilerinizi daha da geliştirmek için şunları keşfetmeyi düşünebilirsiniz:

  • ConfigMap ve Secret’larla çalışma: Yapılandırma ayarlarını güvenle saklayın ve yönetin.
  • Kalıcı depolama birimleri: Pod yeniden başlatmalarından sonra da kalıcı olan verileri nasıl saklayacağınızı öğrenin.
  • Ağ ve ingress denetleyicileri: Alan adı tabanlı yönlendirme kurun ve harici trafiği yönetin.
  • Helm: Karmaşık uygulamaları paketlemek ve dağıtmak için Helm chart’larını kullanın.
  • Bulutta Kubernetes: AWS EKS, Azure AKS veya Google GKE gibi yönetilen Kubernetes hizmetleriyle deney yapın.

Son olarak, DataCamp’teki Docker ve Kubernetes ile Konteynerleştirme ve Sanallaştırma programı, hem Docker hem de Kubernetes’i pratik etmek için mükemmel bir kaynaktır.

SSS

Pod yeniden başlatmaları arasında Kubernetes’te veriyi nasıl kalıcı kılarım?

Kubernetes Pod’ları geçicidir; yani yeniden başlatıldıklarında verileri kaybolur. Veriyi kalıcı kılmak için Kalıcı Hacimler (PV) ve Kalıcı Hacim Talepleri (PVC) kullanabilirsiniz. Bunlar, verinin bir Pod’un yaşam döngüsünden bağımsız olarak saklanmasına olanak tanır. YAML ile bir Kalıcı Hacim tanımlayabilir ve bir Pod’a bağlayabilirsiniz; böylece Pod silinse ve yeniden oluşturulsa bile veri korunur.

Kubernetes uygulamamı bir alan adıyla internete nasıl açarım?

Uygulamanızı özel bir alan adıyla genel internete açmak için bir Ingress Controller kullanmanız gerekir. Ingress, harici trafiğin servislerinize yönlendirilmesi için kurallar tanımlamanıza olanak tanır. Genellikle harici bir LoadBalancer ve kümenize işaret eden yapılandırılmış bir DNS gerektirir. NGINX Ingress Controller, Kubernetes’te trafiği yönetmek için popüler bir tercihtir.

Kubernetes kümemi yetkisiz erişime karşı nasıl güvence altına alırım?

Güvenlik, Kubernetes’te kritik öneme sahiptir. Kümenizi güvenceye almak için bazı temel adımlar şunlardır:

  • Rol Tabanlı Erişim Denetimi (RBAC) kullanarak erişimi kullanıcı rollerine göre kısıtlayın.
  • Pod’lar arasındaki trafiği kısıtlamak için ağ politikalarını etkinleştirin.
  • Güvenlik açıklarını yamalamak için Kubernetes’i ve bağımlılıklarını düzenli olarak güncelleyin.
  • API erişimini kimlik doğrulama ve yetkilendirme mekanizmalarıyla kısıtlayın.
  • API anahtarları ve kimlik bilgileri gibi hassas verileri güvenle yönetmek için Secret’ları kullanın.

Kubernetes kümemin performansını nasıl izlerim?

Kümenizi şu araçlarla izleyebilirsiniz:

  • Prometheus & Grafana – Metrikleri toplayıp görselleştirin.
  • Kubernetes Dashboard – Küme yönetimi için bir web arayüzü.
  • kubectl top – Düğüm ve Pod’lar için CPU ve bellek kullanımını sağlar.
  • Fluentd veya Loki gibi günlükleme çözümleri – Sorun gidermek için günlükleri merkezileştirin.

Kubernetes uygulamasını üretim ortamına nasıl dağıtırım?

Prodüksiyonda şunları yapmalısınız:

  • AWS EKS, Azure AKS veya Google GKE gibi Yönetilen Kubernetes Hizmeti kullanın.
  • Yatay Pod Otomatik Ölçekleyici (HPA) ve Küme Otomatik Ölçekleyici ile otomatik ölçekleme uygulayın.
  • Otomatik dağıtımlar için CI/CD hatları (ör. GitHub Actions, ArgoCD veya Jenkins) kullanın.
  • RBAC, ağ politikaları ve imaj taraması gibi en iyi uygulamalarla kümenizi güvenceye alın.
  • Prometheus, Loki veya bulut-yerel bir izleme çözümüyle kümeyi izleyin.

Patrick Brus's photo
Author
Patrick Brus
LinkedIn

Elektrik Mühendisliği, makine öğrenimi ve programlama alanlarında sağlam bir temele sahip bir Bulut Mühendisiyim. Kariyerime görüntü sınıflandırmaya odaklanan bilgisayarla görü alanında başladım, ardından MLOps ve DataOps’a geçiş yaptım. MLOps platformları kurma, veri bilimcilerini destekleme ve makine öğrenimi iş akışlarını kolaylaştırmak için Kubernetes tabanlı çözümler sunma konularında uzmanım.

Konular
Cloud
MLOps

Bu kurslarla Docker ve Kubernetes hakkında daha fazlasını öğrenin!

Kurs

Docker'a Giriş

4 sa
52.8K
Docker'a giriş yapın ve veri uzmanlarının araç setinde Docker'ın önemini keşfedin. Docker konteynerleri, görüntüler ve daha fazlası hakkında bilgi edinin.
Ayrıntıları GörüntüleRight Arrow
Kursa Başla
Devamını GörRight Arrow
İlgili

blog

Hızlı Sevkiyat İçin Pratik Vibe Kodlama Teknoloji Yığını

Ön uç, arka uç, veritabanları, kimlik doğrulama, depolama, e-posta, test, dağıtım ve izleme için en iyi araçları keşfedin.
Abid Ali Awan's photo

Abid Ali Awan

14 dk.

blog

2026’da En Popüler 40 Yazılım Mühendisi Mülakat Sorusu

Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Dario Radečić's photo

Dario Radečić

15 dk.

Eğitim

.gitignore Nasıl Kullanılır: Örneklerle Pratik Bir Giriş

Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Kurtis Pykes 's photo

Kurtis Pykes

8 dk.

Eğitim

Python'da Listeyi String'e Nasıl Dönüştürürsünüz

Bu hızlı eğitimde, Python'da bir listeyi string'e nasıl dönüştüreceğinizi öğrenin.
Adel Nehme's photo

Adel Nehme

Devamını GörDevamını Gör