Bir pod'un neden CrashLoopBackOff durumunda olduğunu bulmak için kubectl get pods, kubectl describe pod, kubectl logs --previous ve kubectl get events --sort-by komutlarını sırayla yazdığın anı düşün. Dördü de doğru komut, ama aynı bilgiye ulaşmak için dört kez pod adını kopyalayıp yapıştırmak günde otuz kez tekrarlandığında ciddi bir zaman kaybına dönüşüyor. k9s ve Lens tam olarak bu tekrarı ortadan kaldırmak için var.
İkisi de kümeye yeni bir yetki eklemez, yeni bir bileşen kurmaz — ikisi de senin kubeconfig dosyanı okuyup aynı Kubernetes API'sini çağırır. Fark, bilgiyi sunuş biçimindedir: k9s terminalde yaşayan, klavyeyle sürülen ve sunucuya SSH ile bağlanıp da çalıştırabileceğin bir arayüz; Lens ise masaüstünde çalışan, birden çok kümeyi yan yana gösteren grafik bir uygulama. Bu rehberde ikisini de kuracağız, günlük iş akışında hangi tuşların gerçekten işe yaradığını göreceğiz ve hangi durumda hangisini seçmen gerektiğini net biçimde ayıracağız.
Neden Sadece kubectl Yetmiyor#
kubectl eksik bir araç değil; aksine her şeyi yapabilen tam yetkili istemci. Sorun, çıktısının statik olmasında. Bir Deployment güncellemesi izlerken kubectl get pods --watch çalıştırırsın, ekranda satırlar akar, sonra bir pod'un loguna bakmak istersin ve izlemeyi kapatıp başka bir komut yazman gerekir. Odaklandığın bağlam her komutta sıfırlanır.
İkinci sorun bağlam yönetimidir. Üç kümeyle çalışıyorsan (uretim, staging, yerel bir test kümesi) hangi bağlamda olduğunu her seferinde kubectl config current-context ile doğrulamak zorundasın. Yanlış bağlamda çalıştırılan bir kubectl delete, bu işteki en pahalı yazım hatalarından biridir. k9s ve Lens ikisi de aktif bağlamı ekranın üstünde sürekli gösterir; bu tek başına bile kurulumu hak eden bir özellik.
| İhtiyaç | kubectl | k9s | Lens |
|---|---|---|---|
| Canlı kaynak listesi | --watch ile kısmen | Sürekli tazelenir | Sürekli tazelenir |
| Log takibi | Ayrı komut | Tuşla anında | Panelde sekme |
| Bağlam görünürlüğü | Elle sorgu | Üst çubukta | Sol menüde |
| Sunucu üzerinden kullanım | Evet | Evet | Hayır (masaüstü) |
| Kurulum yükü | Tek ikili dosya | Tek ikili dosya | Masaüstü uygulaması |
Kısacası kubectl'i bırakmıyorsun — betiklerin ve CI hatların hâlâ onunla çalışacak. Bu araçlar günlük gözlem ve hata ayıklama için kubectl'in üstüne binen bir katman. CI tarafında kubectl komutlarını nasıl kuracağını GitHub Actions ile CI/CD kurulumu yazısında ayrıntılı anlatıyorum.
k9s Kurulumu#
k9s tek bir ikili dosyadan ibarettir; bağımlılığı yoktur ve doğrudan kubeconfig'ini kullanır. Linux üzerinde en temiz kurulum, sürüm arşivini indirip /usr/local/bin altına koymaktır:
# Mimarine uygun arşivi indir (x86_64 için)
curl -sSL -o /tmp/k9s.tar.gz \
https://github.com/derailed/k9s/releases/latest/download/k9s_Linux_amd64.tar.gz
# Aç ve kur
tar -xzf /tmp/k9s.tar.gz -C /tmp k9s
sudo install -m 0755 /tmp/k9s /usr/local/bin/k9s
# Doğrula
k9s version
Paket yöneticisiyle kurmayı tercih ediyorsan macOS'ta brew install k9s, Arch tabanlı dağıtımlarda pacman -S k9s çalışır. AlmaLinux veya Rocky gibi RHEL türevlerinde depoda bulunmaz; yukarıdaki doğrudan indirme yöntemi en pratiğidir. Paket yönetiminin ayrıntıları için dnf paket yönetimi yazısına bakabilirsin.
k9s'i başlatmak için tek kelime yeter:
# Varsayılan bağlamla aç
k9s
# Belirli bir namespace ile aç
k9s -n staging
# Belirli bir kubeconfig ile aç
k9s --kubeconfig ~/.kube/uretim.yaml
# Salt-okunur modda aç (yanlışlıkla silmeye karşı)
k9s --readonly
Son satırdaki --readonly bayrağını üretim kümelerinde varsayılan yapmanı öneririm. Kabuk takma adı olarak tanımlamak on saniyelik bir iş ve bir gün seni gerçekten kurtarır:
# ~/.bashrc veya ~/.zshrc içine
alias k9sp='k9s --context uretim --readonly'
k9s ile Günlük İş Akışı#
k9s'te her şey klavyeyle yapılır ve öğrenmen gereken tuş sayısı şaşırtıcı derecede az. İki nokta üst üste (:) tuşu komut satırını açar, oraya kaynak adını yazarsın: :pods, :deploy, :svc, :ns, :hpa. Kaynak adları kubectl'dekiyle aynıdır, kısaltmalar da çalışır.
| Tuş | Ne yapar |
|---|---|
: | Komut satırı (kaynak tipi yazmak için) |
/ | Listede filtrele |
l | Seçili pod'un logunu aç |
d | describe çıktısını göster |
y | YAML tanımını göster |
s | Container içinde kabuk aç |
e | Kaynağı düzenle |
Ctrl-d | Kaynağı sil (onay ister) |
Esc | Bir üst ekrana dön |
0-9 | Namespace hızlı geçişi |
? | Tuş yardımı |
Günlük hata ayıklama akışı pratikte şöyle işliyor. Önce :pods yazıp namespace'i seçersin, sorunlu pod'u / ile filtrelersin, d tuşuyla describe çıktısına bakıp Events bölümünü okursun. Sebep açıksa (ImagePullBackOff, Insufficient cpu) iş orada biter. Değilse Esc ile geri döner, l tuşuyla logu açar, önceki çöken container'ın logunu görmek için log ekranında p tuşuna basarsın. Gerekirse s ile container'ın içine girip dosya sistemine bakarsın — Docker tarafında docker exec ile yaptığın işin aynısı, yöntemi container loglarını okuma ve exec yazısında anlattığım mantıkla birebir örtüşür.
k9s'in az bilinen ama çok işe yarayan iki ekranı var. :pulses kümenin genel nabzını (hatalı pod'lar, olaylar, dağıtımların durumu) tek ekranda gösterir; sabah ilk baktığın yer olmaya çok uygundur. :xray deploy ise bir Deployment'tan başlayarak ReplicaSet, Pod ve Container zincirini ağaç hâlinde çizer — "servisim neden trafiği almıyor" sorusunda hangi katmanda koptuğunu görmenin en hızlı yolu budur.
Lens Kurulumu ve Kullanımı#
Lens masaüstünde çalışan bir uygulamadır; Linux'ta AppImage, Snap veya .deb/.rpm paketi olarak, Windows ve macOS'ta ise kurulum dosyasıyla gelir. İlk açılışta ~/.kube/config dosyanı otomatik okur ve tanımlı bağlamları sol panelde listeler. Küme eklemek için bağlantı bilgisi girmen gerekmez; kubeconfig'in kendisi yeterlidir.
Lens'in gerçek katkısı üç yerde ortaya çıkıyor. Birincisi çoklu küme görünümü: üç kümeyi yan yana sekmeler hâlinde tutabilir, birinden diğerine tıklayarak geçebilirsin. İkincisi kaynak grafikleri: Prometheus kurulu bir kümeye bağlandığında pod ve namespace başına CPU/bellek grafiklerini otomatik çizer. Üçüncüsü yerleşik terminal: uygulamanın alt panelinde bağlamı zaten ayarlanmış bir kabuk açılır, orada doğrudan kubectl yazabilirsin.
Lens'i verimli kullanmak için ilk gün yapman gereken üç ayar var:
- Küme ayarlarından Metrics bölümünü aç ve kümede zaten çalışan Prometheus'u işaretle; yoksa Lens kendi Prometheus yığınını kurmayı teklif eder, üretim kümesinde bunu kabul etmeden önce iki kez düşün.
- Sol menüde sık kullandığın kaynakları sabitle; varsayılan liste çok uzundur ve her seferinde aşağı kaydırmak zaman kaybettirir.
- Küme adına bir renk ata. Üretim kümesini kırmızı yapmak, yanlış sekmedeyken bir şey silmenin en ucuz sigortasıdır.
Lens'in dikkat etmen gereken tarafı, bir masaüstü uygulaması olmasıdır: sunucu üzerinden SSH ile kullanamazsın ve kubeconfig'i kişisel makinene indirmeni gerektirir. Üretim kubeconfig'ini dizüstü bilgisayarında tutuyorsan, o dosyanın diskte şifreli bir bölümde durduğundan ve makine kaybolduğunda ilgili ServiceAccount token'ını iptal edebileceğinden emin ol.
Hangisini Ne Zaman Kullanmalı#
İkisi rakip değil, farklı bağlamların araçları. Pratikte ekiplerin çoğu ikisini birden kurar ve şu ayrımı yapar:
| Durum | Tercih | Neden |
|---|---|---|
| Sunucuya SSH ile bağlıyken | k9s | Terminalde çalışır, ek bağımlılık yok |
| Gece bir alarma müdahale | k9s | Açılış hızlı, tuşlarla anında log |
| Birden çok kümeyi kıyaslama | Lens | Sekmeli çoklu küme görünümü |
| Kaynak kullanımı grafiği izleme | Lens | Prometheus grafikleri hazır |
| Ekipteki yeni birine küme gösterme | Lens | Görsel yapı öğrenmeyi hızlandırır |
| Kısıtlı yetkili hesapla inceleme | k9s --readonly | Yanlışlıkla değiştirme riski sıfır |
Bu ikisinin dışında günlük hayatı kolaylaştıran iki küçük araç daha var: kubectx bağlamlar arasında, kubens ise namespace'ler arasında tek komutla geçmeni sağlar. kubectl krew ise kubectl için eklenti yöneticisidir ve kubectl neat, kubectl tree gibi faydalı eklentileri kurar. Bunlar k9s'in yerini tutmaz ama betik yazarken işini görür.
Güvenlik: Araç Kadar kubeconfig Önemli#
Burada net olmakta fayda var: ne k9s ne de Lens sana yeni bir yetki verir. İkisi de kubeconfig'indeki kimlikle API'ye bağlanır, dolayısıyla yapabildikleri tam olarak o kimliğin RBAC yetkisi kadardır. Bu, iyi haber: aracı kurmak güvenlik açığı yaratmaz. Kötü haber ise şudur: kubeconfig dosyan cluster-admin yetkisi taşıyorsa, o dosyayı okuyan herkes kümenin tamamına sahiptir.
Bu yüzden günlük çalışmada kullandığın kimliği daraltmanı öneririm. Kubernetes namespace ve RBAC yazısında anlattığım gibi, kendine yalnızca gerekli namespace'lerde view veya edit yetkisi olan ayrı bir ServiceAccount tanımla ve k9s'i onunla çalıştır. Yönetici yetkisini yalnızca gerçekten gerektiğinde, ayrı bir kubeconfig dosyasıyla kullan:
# Günlük iş: dar yetkili bağlam
export KUBECONFIG=~/.kube/gunluk.yaml
k9s
# Yalnızca gerektiğinde: yönetici bağlamı
KUBECONFIG=~/.kube/admin.yaml k9s
kubeconfig dosyalarının izinlerini de sıkı tut; içinde token bulunan bir dosyanın herkes tarafından okunabilir olması, sunucuda .env dosyasını yayına açmakla aynı sınıfta bir hatadır — konunun yayın tarafındaki hâli .git klasörü ve .env dosyası ifşası yazısında.
chmod 600 ~/.kube/*.yaml
Sık Yapılan Hatalar#
Yanlış bağlamda çalışmak. k9s'te aktif bağlam üst çubukta yazar ama alışkanlık oluşana kadar gözden kaçar. Üretim bağlamını --readonly ile açan bir takma ad tanımlamak, bu hatanın maliyetini sıfıra indirir.
Lens'in Prometheus yığınını üretim kümesine kurdurmak. Lens metrik bulamayınca kendi Prometheus'unu kurmayı teklif eder. Test kümesinde sorun değil, ama üretimde zaten çalışan bir izleme yığını varsa ikinci bir Prometheus gereksiz kaynak tüketir ve karışıklık yaratır. Ayarlardan mevcut Prometheus adresini elle göstermek doğrusudur.
k9s'i eski sürümde bırakmak. k9s, Kubernetes API sürümleriyle uyumlu kalmak için sık güncellenir. Küme sürümünü yükselttikten sonra k9s'i güncellemezsen bazı kaynak tiplerinin listelenmediğini veya boş göründüğünü fark edersin. Sorun kümede değil, istemcidedir.
Terminalin renk desteğini yok saymak. k9s renkli bir arayüzdür; TERM değişkeni xterm gibi sınırlı bir değere sabitlenmiş bir SSH oturumunda ekran bozuk görünür. export TERM=xterm-256color çoğu durumda düzeltir.
Salt-okunur sandığın oturumda düzenleme yapmak. --readonly bayrağı yalnızca k9s tarafındaki eylemleri kapatır; aynı oturumdan :shell ile bir düğüme veya container'a girip komut çalıştırmak hâlâ mümkündür. Gerçek koruma RBAC'ten gelir, bayraktan değil.
Sıkça Sorulan Sorular#
k9s ücretsiz mi#
Evet, k9s açık kaynaklı ve tamamen ücretsizdir; Apache 2.0 lisansıyla dağıtılır. Tek bir ikili dosya olarak indirip çalıştırırsın, herhangi bir hesap açman veya lisans anahtarı girmen gerekmez. Kurumsal bir destek paketi de yoktur; sorun yaşarsan proje deposundaki konu başlıkları ve topluluk kaynakları temel destek kanalıdır.
Lens kullanmak için kümeye bir şey kurmam gerekir mi#
Temel kullanım için hayır; Lens kubeconfig'inle doğrudan Kubernetes API'sine bağlanır ve pod, deployment, servis gibi kaynakları listelemek için kümede ek bir bileşene ihtiyaç duymaz. Ancak CPU ve bellek grafiklerini görmek istiyorsan kümede bir Prometheus bulunması gerekir. Lens bunu bulamazsa kendi yığınını kurmayı teklif eder; zaten bir izleme çözümün varsa bu teklifi reddedip mevcut Prometheus adresini ayarlardan göstermelisin.
k9s ile kubectl'i aynı anda kullanabilir miyim#
Evet, ikisi aynı kubeconfig'i okur ve birbirini etkilemez. k9s açıkken başka bir terminalde kubectl komutları çalıştırabilirsin; k9s ekranı değişikliği birkaç saniye içinde kendiliğinden yansıtır. Aslında yaygın çalışma biçimi de budur: gözlemi k9s'te yaparsın, betiklenebilir işlemleri kubectl ile yazarsın.
k9s bağlantı kuramıyor, ne kontrol etmeliyim#
Önce kubectl get nodes komutunun aynı makinede çalışıp çalışmadığına bak; çalışmıyorsa sorun k9s'te değil kubeconfig veya ağ erişimindedir. Çalışıyorsa KUBECONFIG değişkeninin k9s'i başlattığın kabukta doğru dosyayı gösterdiğini doğrula. Bir de k9s sürümünün küme sürümüne göre çok eski olmadığını kontrol et; sürüm uyumsuzluğunda bazı kaynaklar boş listelenebilir.
Bu araçlar üretim kümesinde güvenli mi#
İkisi de kümeye ek bir servis kurmadığı ve yalnızca senin kimliğinle API çağrısı yaptığı için ek bir saldırı yüzeyi açmazlar. Asıl risk kullandığın kubeconfig'in yetkisindedir: cluster-admin yetkili bir dosyayla çalışıyorsan tek bir yanlış tuş üretimi etkileyebilir. Günlük kullanım için dar yetkili ayrı bir kimlik tanımlamak ve k9s'i --readonly ile açmak en pratik korumadır.
Web tabanlı bir alternatif var mı#
Var, ancak dikkatli olmak gerekir. Kümeye kurulan web arayüzleri (Kubernetes Dashboard ve benzerleri) kendi ServiceAccount'larıyla çalışır ve internete açık bırakıldıklarında ciddi bir risk oluştururlar. k9s ve Lens'in avantajı, kümeye hiçbir şey kurmamaları ve yetkiyi senin kimliğinden almalarıdır. Web arayüzü kullanacaksan mutlaka kimlik doğrulamalı bir ters vekil arkasına al ve doğrudan yayına açma.
Kapanış#
Kubernetes'i günlük olarak yönetirken kazanacağın zaman, doğru aracı doğru bağlamda kullanmaktan geliyor: sunucudayken ve hızlı müdahale gerekirken k9s, birden çok kümeyi kıyaslarken ve kaynak grafiklerine bakarken Lens, betik ve otomasyon yazarken kubectl. Bunlara üç alışkanlık ekle — üretim bağlamını --readonly ile aç, günlük işte dar yetkili bir kubeconfig kullan ve k9s'i küme sürümüyle birlikte güncelle — günlük operasyon çok daha az riskli hâle gelir.
Kubernetes kümeni barındıracak altyapı için tam root erişimli VDS ve esnek büyüyen bulut sunucu paketlerimiz uygun bir zemin sunuyor; kurulum, sürüm yükseltme ve izleme yığınıyla uğraşmak istemiyorsan sunucu yönetimi hizmetimiz bu işi sizin yerinize üstlenir. Kümeye açtığın servislerin dışarıdan erişilebilirliğini kontrol etmek istersen ücretsiz araçlarımıza da göz atabilirsin.