TR/EN
Blog

Kubectl Nasıl Çalışır? En Çok Kullanılan Kubectl Komutları

Yayın tarihi: · 10 dk okuma

Kubernetes ile ilk tanıştığınızda hemen her işi tek bir araçla yaptığınızı fark ediyorsunuz: kubectl. Peki kubectl nasıl çalışır, yazdığınız komut cluster'a nasıl ulaşıyor ve günlük işlerde en çok hangi kubectl komutları lazım oluyor? Bu yazıda önce perde arkasını, sonra da işinize yarayacak komutları tablolar halinde topladık. Kubernetes'e tamamen yeniyseniz önce Kubernetes nedir yazımıza göz atmanızı öneririz.

Kubectl Nedir?

kubectl, Kubernetes cluster'larını komut satırından yönetmek için kullanılan resmi araç. Pod listelemek, uygulama deploy etmek, log okumak, bir pod'un içine girmek, ölçeklendirmek... hepsi kubectl ile yapılıyor. Okunuşu konusunda topluluk hala anlaşamadı; "kube-control", "kube-c-t-l" hatta "kube-cuttle" diyenler var, hangisini derseniz deyin herkes anlıyor.

Kubectl Nasıl Çalışır?

Önemli bir detay: kubectl cluster'daki sunuculara doğrudan bağlanmıyor. Yaptığı tek şey Kubernetes API sunucusuyla (kube-apiserver) HTTPS üzerinden konuşmak. Bir komut yazdığınızda arka planda kabaca şunlar oluyor:

  1. kubeconfig okunur: kubectl hangi cluster'a, hangi kullanıcıyla bağlanacağını ~/.kube/config dosyasından öğrenir.
  2. İstek hazırlanır: kubectl get pods gibi bir komut, API sunucusuna gidecek bir REST isteğine (ör. GET /api/v1/namespaces/default/pods) çevrilir.
  3. Kimlik doğrulama: API sunucusu sertifika veya token ile kim olduğunuzu kontrol eder.
  4. Yetkilendirme (RBAC): Bu işlemi yapmaya yetkiniz var mı diye bakılır.
  5. Kayıt: Değişiklik içeren isteklerde (apply, scale, delete) yeni "istenen durum" cluster'ın veritabanı olan etcd'ye yazılır.
  6. Uygulama: Scheduler yeni pod'ları uygun node'lara yerleştirir, controller'lar istenen durumla gerçek durumu eşitler, her node'daki kubelet de container'ları başlatır.

Yani kubectl aslında akıllı bir API istemcisi. Bunu bilmek, "neden komut hemen bitti ama pod hala Pending?" gibi soruların cevabını da veriyor: kubectl isteği iletip dönüyor, asıl iş arka planda devam ediyor.

İpucu: Herhangi bir komuta -v=6 eklerseniz kubectl'in API sunucusuna hangi istekleri gönderdiğini görebilirsiniz. Öğrenmek için çok faydalı.

Kubeconfig Dosyası ve Context Mantığı

kubeconfig dosyası üç ana bölümden oluşuyor:

  • clusters: API sunucusunun adresi ve sertifikası,
  • users: kimlik bilgileri (sertifika, token vb.),
  • contexts: "şu cluster'a, şu kullanıcıyla, şu namespace'te bağlan" eşleştirmesi.

Birden fazla cluster ile çalışıyorsanız (ör. test ve prod) context'ler arasında geçiş yaparsınız:

kubectl config get-contexts                 # tanımlı context'leri listeler
kubectl config current-context              # şu an hangi context'tesiniz
kubectl config use-context prod-cluster     # başka bir cluster'a geçer
kubectl config set-context --current --namespace=uygulama   # varsayılan namespace'i değiştirir

Prod ortamında yanlış context'te komut çalıştırmak malesef en sık yapılan hatalardan biri. Komut yazmadan önce current-context'e bakmayı alışkanlık haline getirin.

Kubectl Kurulumu

kubectl macOS, Linux ve Windows'ta çalışıyor. macOS'ta brew install kubectl, Linux'ta resmi paket deposu veya tek bir binary indirerek, Windows'ta winget/choco ile kurabilirsiniz. Kurulumu kontrol etmek için:

kubectl version --client

kubectl sürümünün cluster sürümünden en fazla bir minor sürüm ileri veya geri olması öneriliyor.

Kubectl Komut Yapısı

Neredeyse tüm komutlar aynı kalıbı izliyor:

kubectl [komut] [kaynak-türü] [ad] [bayraklar]

# örnek:
kubectl get pods web-7d4b9 -n uygulama -o wide

Burada get komut, pods kaynak türü, web-7d4b9 kaynağın adı, -n ve -o da bayraklar.

En Çok Kullanılan Kubectl Komutları

Bilgi Alma ve İnceleme

KomutNe yapar?
kubectl get podsPod'ları listeler (-A ile tüm namespace'ler)
kubectl get allNamespace'teki temel kaynakları birlikte gösterir
kubectl describe pod <ad>Kaynağın detaylarını ve son olaylarını gösterir; hata ayıklamada ilk durak
kubectl logs <pod>Container loglarını gösterir (-f canlı takip, --previous çöken önceki container)
kubectl get events --sort-by=.lastTimestampCluster'daki son olayları sıralı listeler
kubectl top pods / top nodesCPU ve RAM kullanımını gösterir (metrics-server gerekir)

Oluşturma ve Güncelleme

KomutNe yapar?
kubectl apply -f app.yamlYAML'daki kaynakları oluşturur ya da günceller (en çok kullanılan)
kubectl create deployment web --image=nginxHızlıca bir deployment oluşturur
kubectl edit deploy/webKaynağı editörde açıp canlı düzenlemenizi sağlar
kubectl patch deploy/web -p '{...}'Kaynağın sadece belirli alanlarını değiştirir
kubectl set image deploy/web web=nginx:1.27Container imajını günceller
kubectl scale deploy/web --replicas=5Kopya sayısını değiştirir

Silme

KomutNe yapar?
kubectl delete -f app.yamlYAML'da tanımlı kaynakları siler
kubectl delete pod <ad>Pod'u siler; deployment'a bağlıysa yerine yenisi açılır
kubectl delete deploy/webDeployment'ı ve pod'larını siler

Hata Ayıklama

KomutNe yapar?
kubectl exec -it <pod> -- shÇalışan container'ın içinde shell açar
kubectl port-forward svc/web 8080:80Servisi kendi bilgisayarınızın 8080 portuna bağlar
kubectl cp <pod>:/yol ./yerelPod ile bilgisayarınız arasında dosya kopyalar
kubectl debug -it <pod> --image=busyboxPod'a geçici bir hata ayıklama container'ı ekler

Rollout (Sürüm) Yönetimi

KomutNe yapar?
kubectl rollout status deploy/webGüncellemenin ilerleyişini takip eder
kubectl rollout history deploy/webÖnceki sürümleri listeler
kubectl rollout undo deploy/webBir önceki sürüme geri döner
kubectl rollout restart deploy/webPod'ları sırayla yeniden başlatır (kesintisiz)

Çıktı Formatları

BayrakNe verir?
-o wideEk sütunlar (node adı, IP vb.)
-o yaml / -o jsonKaynağın tam tanımı
-o nameSadece kaynak adları (script'lerde işe yarar)
-o jsonpath='{.items[*].metadata.name}'İstediğiniz alanı seçip çıkarır
-wDeğişiklikleri canlı izler (watch)

Kaynak Türlerinin Kısa Adları

Her seferinde uzun uzun yazmak yerine kısa adları kullanabilirsiniz:

KaynakKısa adKaynakKısa ad
podspoconfigmapscm
servicessvcingressesing
deploymentsdeploypersistentvolumeclaimspvc
namespacesnsnodesno

Imperative mi, Declarative mi?

kubectl ile iki farklı şekilde çalışabilirsiniz. Komutla doğrudan "şunu yap" demek (imperative) ya da YAML'da "şöyle olsun" deyip apply etmek (declarative).

Imperative (komutla)Declarative (YAML + apply)
Örnekkubectl create deployment, kubectl scalekubectl apply -f app.yaml
HızTek seferlik işler için çok hızlıİlk yazımı biraz daha uzun
TekrarlanabilirlikDüşük, ne yapıldığı kayıt altında değilYüksek, dosya her şeyi anlatır
Git / CI/CD uyumuZayıfÇok iyi (GitOps'un temeli)
Ne zaman?Test, deneme, acil müdahaleÜretim ortamı ve ekip çalışması

apply, create ve replace Arasındaki Fark

KomutKaynak yoksaKaynak varsaNe zaman kullanılır?
kubectl createOluştururHata verirBir kere oluşturulacak kaynaklar
kubectl applyOluştururFarkları birleştirerek güncellerGünlük kullanım, GitOps
kubectl replaceHata verirKaynağı tamamen yenisiyle değiştirirTüm tanımı bilerek ezmek istediğinizde

Hayatınızı Kolaylaştıracak Birkaç İpucu

  • Kısayol tanımlayın: alias k=kubectl ile her seferinde 7 harf yerine 1 harf yazarsınız.
  • Otomatik tamamlama: source <(kubectl completion bash) (zsh için completion zsh) ile kaynak adlarını Tab ile tamamlayabilirsiniz.
  • YAML'ı sıfırdan yazmayın: kubectl create deployment web --image=nginx --dry-run=client -o yaml > web.yaml size hazır bir şablon verir.
  • Alanların ne işe yaradığını öğrenin: kubectl explain deployment.spec.strategy ile herhangibir alanın açıklamasını terminalden okuyabilirsiniz.
  • Etiketlerle filtreleyin: kubectl get pods -l app=web sadece o etikete sahip pod'ları getirir.

Kubectl'i Denemek İçin Hazır Bir Cluster

Bu komutları okumak bir şey, denemek başka birşey. Kendi bilgisayarınıza cluster kurmakla uğraşmak istemiyorsanız VECDC Kubernetes Server paketleri Kubernetes ön kurulu geliyor; aylık $6'dan başlıyor ve otomatik kurulum sayesinde yaklaşık 5 dakikada kubeconfig dosyanız e-postanızda oluyor. Dosyayı ~/.kube/config olarak kaydettiğiniz an bu yazıdaki tüm komutları deneyebilirsiniz. Üretim için çok node'lu bir yapı gerekiyorsa Kubernetes danışmanlık ekibimiz yardımcı olabilir.

Sık Sorulan Sorular

kubectl ile kubeadm arasındaki fark nedir?

kubeadm, Kubernetes cluster'ını kurmak (node eklemek, control plane'i ayağa kaldırmak) için kullanılır. kubectl ise kurulu bir cluster'ı yönetmek için kullanılan istemci araçtır; pod listelemek, deploy etmek, log okumak gibi işler kubectl ile yapılır.

kubeconfig dosyası nerede durur?

Varsayılan olarak kullanıcı dizinindeki ~/.kube/config dosyasıdır. Farklı bir dosya kullanmak için KUBECONFIG ortam değişkenini veya --kubeconfig bayrağını kullanabilirsiniz.

kubectl apply mi, kubectl create mi kullanmalıyım?

Günlük kullanımda ve üretim ortamında kubectl apply önerilir; kaynak yoksa oluşturur, varsa farkları birleştirerek günceller ve YAML dosyalarıyla Git üzerinden yönetime uygundur. create ise kaynak zaten varsa hata verir.

Yanlış cluster'da komut çalıştırmayı nasıl önlerim?

Komut çalıştırmadan önce kubectl config current-context ile hangi cluster'da olduğunuzu kontrol edin, prod ve test için ayrı context ve namespace kullanın; terminal isteminize aktif context'i gösteren araçlar da bu hatayı büyük ölçüde azaltır.

Kısacası

kubectl, kubeconfig dosyasındaki bilgilerle Kubernetes API sunucusuna istek gönderen bir komut satırı aracı. Asıl işi cluster'ın kendisi yapıyor, kubectl sadece ne istediğinizi iletiyor. Bu yazıdaki tabloları bir kenara kaydedin; günlük işlerin büyük kısmı bu komutlarla hallediliyor. Takıldığınız bir yer olursa bize yazın.

Sanal Sunucunuz 5 Dakikada Hazır

Adanmış kaynaklı NVMe sanal sunucu paketleri aylık $6'dan başlıyor.

Paketleri İncele →