Kubectl ile Hızlı Kaynak Oluşturma: YAML Dosyalarına Alternatif Yaklaşım
Kubernetes ile çalışırken, çoğu geliştirici ve DevOps mühendisi kaynakları oluşturmak için YAML dosyaları kullanır. Ancak özellikle sınav ortamlarında veya hızlı test senaryolarında, YAML dosyaları oluşturmak zaman alıcı ve hata yapmaya açık olabilir. Bu yazıda, kubectl komutlarını kullanarak YAML dosyalarına ihtiyaç duymadan kaynakları nasıl oluşturabileceğinizi öğreneceksiniz.
Neden Kubectl Komutlarını Kullanmalıyız?
Sınav Ortamında Avantajlar
Kubernetes sertifika sınavlarında (CKA, CKAD, CKS) zaman çok değerlidir. YAML dosyalarını tarayıcıdan terminale kopyalarken:
- Zaman kaybı: Formatlama hataları, girinti sorunları
- Syntax hataları: YAML'in hassas yapısı nedeniyle kolayca hata yapılabilir
- Kopyala-yapıştır sorunları: Özellikle sınav ortamlarında zor olabilir
Günlük Kullanımda Faydaları
- Hızlı prototipleme: Hemen test etmek istediğiniz kaynaklar için
- Öğrenme aşaması: YAML yapısını anlamak için template oluşturma
- Otomasyon: Script'lerde kullanım kolaylığı
Temel Kubectl Komutları
Pod Oluşturma
En basit kullanım senaryosu ile başlayalım:
# Basit bir nginx pod'u oluştur
kubectl run nginx --image=nginx
Bu komut, nginx adında bir pod oluşturur ve nginx:latest image'ını kullanır. Komut çalıştırıldığında pod hemen oluşturulur ve çalışmaya başlar.
Pod Manifest'i Oluşturmadan İnceleme
Bazen bir pod'un YAML manifest'ini görmek isteyebilirsiniz ama henüz oluşturmak istemeyebilirsiniz:
# Pod manifest'ini oluşturmadan göster (dry-run)
kubectl run nginx --image=nginx --dry-run=client -o yaml
Bu komut size pod'un YAML formatını gösterir ancak gerçekte pod'u oluşturmaz. --dry-run=client parametresi, komutun sadece istemci tarafında çalıştırılmasını sağlar.
Önemli Not: Kubernetes 1.18+ sürümlerinde --dry-run=client kullanılmalıdır. Eski sürümlerde --dry-run kullanılabilir.
YAML Dosyasına Kaydetme
Manifest'i bir dosyaya kaydetmek isterseniz:
# YAML dosyasına kaydet
kubectl run nginx --image=nginx --dry-run=client -o yaml > nginx-pod.yaml
Dosyayı oluşturduktan sonra, gerekli değişiklikleri yapıp kaynağı oluşturabilirsiniz:
kubectl create -f nginx-pod.yaml
Deployment Oluşturma
Basit Deployment
Pod'lar geçici kaynaklardır. Production ortamlarında genellikle Deployment kullanılır:
# Deployment oluştur
kubectl create deployment nginx --image=nginx
Bu komut, nginx adında bir deployment oluşturur ve varsayılan olarak 1 replica ile başlar.
Replica Sayısı Belirleme
Kubernetes 1.19+ sürümlerinde, replica sayısını doğrudan belirtebilirsiniz:
# 4 replica ile deployment oluştur
kubectl create deployment nginx --image=nginx --replicas=4
Deployment YAML'ını İnceleme
Deployment'ın YAML formatını görmek için:
# Deployment manifest'ini göster
kubectl create deployment nginx --image=nginx --dry-run=client -o yaml
Deployment YAML'ını Dosyaya Kaydetme
# YAML dosyasına kaydet
kubectl create deployment nginx --image=nginx --replicas=4 --dry-run=client -o yaml > nginx-deployment.yaml
Dosyayı düzenledikten sonra:
kubectl create -f nginx-deployment.yaml
Gelişmiş Senaryolar
Port Belirleme
Pod veya deployment oluştururken port belirtebilirsiniz:
# Port belirterek pod oluştur
kubectl run nginx --image=nginx --port=8080
Environment Variables
Environment variable'lar eklemek için:
# Environment variable ile pod oluştur
kubectl run nginx --image=nginx --env="KEY=value" --env="ANOTHER_KEY=another_value"
Command ve Args
Container'ın çalıştıracağı komutu değiştirmek için:
# Özel komut ile pod oluştur
kubectl run nginx --image=nginx --command -- sleep 3600
Resource Limits
Kaynak sınırları belirlemek için YAML dosyası gerekir, ancak önce template oluşturup sonra düzenleyebilirsiniz:
# Template oluştur
kubectl run nginx --image=nginx --dry-run=client -o yaml > nginx-pod.yaml
# Dosyayı düzenleyip resource limits ekleyin
# Sonra oluşturun
kubectl create -f nginx-pod.yaml
Pratik Kullanım Senaryoları
Senaryo 1: Hızlı Test Pod'u
# Hızlıca bir test pod'u oluştur
kubectl run test-pod --image=busybox --command -- sleep 3600
# Pod'a bağlan
kubectl exec -it test-pod -- /bin/sh
Senaryo 2: Çoklu Replica Deployment
# Yüksek erişilebilirlik için deployment
kubectl create deployment web-app --image=nginx:1.21 --replicas=3
# Deployment durumunu kontrol et
kubectl get deployment web-app
Senaryo 3: Farklı Namespace'lerde Kaynak Oluşturma
# Belirli bir namespace'de pod oluştur
kubectl run nginx --image=nginx -n production
# Namespace ile deployment
kubectl create deployment nginx --image=nginx -n production
YAML vs Kubectl Komutları: Ne Zaman Hangisini Kullanmalı?
Kubectl Komutlarını Kullanın:
- ✅ Hızlı test ve prototipleme
- ✅ Sınav ortamlarında zaman tasarrufu
- ✅ Basit kaynaklar için (pod, deployment)
- ✅ Öğrenme ve keşif aşamasında
YAML Dosyalarını Kullanın:
- ✅ Karmaşık yapılandırmalar (ConfigMap, Secret, Service)
- ✅ Production ortamları
- ✅ Version control gerektiren durumlar
- ✅ GitOps yaklaşımları
- ✅ Resource limits, volumes, security contexts gibi detaylı ayarlar
Sınav İpuçları
1. Komut Referansını Hatırlayın
Kubernetes resmi dokümantasyonundaki kubectl conventions sayfasını bookmark'layın:
https://kubernetes.io/docs/reference/kubectl/conventions/
2. Dry-Run Kullanımı
Her zaman önce --dry-run=client -o yaml ile kontrol edin:
# Önce kontrol et
kubectl run nginx --image=nginx --dry-run=client -o yaml
# Doğruysa oluştur
kubectl run nginx --image=nginx
3. Hızlı Düzeltmeler
Oluşturduğunuz bir kaynağı düzenlemek için:
# Mevcut kaynağın YAML'ını al
kubectl get pod nginx -o yaml > nginx-pod.yaml
# Düzenle ve uygula
kubectl apply -f nginx-pod.yaml
Yaygın Hatalar ve Çözümleri
Hata 1: Image Pull BackOff
# Yanlış image adı
kubectl run nginx --image=ngnix # Typo!
# Doğrusu
kubectl run nginx --image=nginx
Hata 2: Namespace Sorunları
# Namespace belirtmeyi unutma
kubectl run nginx --image=nginx -n default
Hata 3: Dry-Run Parametresi
# Eski sürümlerde
kubectl run nginx --image=nginx --dry-run -o yaml
# Yeni sürümlerde (1.18+)
kubectl run nginx --image=nginx --dry-run=client -o yaml
Özet: Hızlı Referans
# Pod oluştur
kubectl run <name> --image=<image>
# Pod YAML'ını göster (oluşturma)
kubectl run <name> --image=<image> --dry-run=client -o yaml
# Pod YAML'ını dosyaya kaydet
kubectl run <name> --image=<image> --dry-run=client -o yaml > pod.yaml
# Deployment oluştur
kubectl create deployment <name> --image=<image>
# Deployment replica ile
kubectl create deployment <name> --image=<image> --replicas=<number>
# Deployment YAML'ını göster
kubectl create deployment <name> --image=<image> --dry-run=client -o yaml
# Deployment YAML'ını dosyaya kaydet
kubectl create deployment <name> --image=<image> --replicas=<number> --dry-run=client -o yaml > deployment.yaml
Sonuç
Kubectl komutlarını kullanarak YAML dosyalarına ihtiyaç duymadan kaynakları hızlıca oluşturabilirsiniz. Bu yaklaşım özellikle:
- Sınav ortamlarında zaman tasarrufu sağlar
- Hızlı test senaryolarında pratiklik kazandırır
- Öğrenme sürecinde YAML yapısını anlamaya yardımcı olur
Ancak unutmayın ki, karmaşık yapılandırmalar ve production ortamları için YAML dosyaları hala en iyi pratiktir. Her iki yaklaşımı da duruma göre kullanabilmek, etkili bir Kubernetes kullanıcısı olmanın anahtarıdır.
İleri Seviye Öğrenme
- kubectl explain: Herhangi bir kaynak tipinin dokümantasyonunu görmek için
- kubectl get -o yaml: Mevcut kaynakların YAML'ını görmek için
- kubectl apply: YAML dosyalarını uygulamak için (create yerine)
# Kaynak tipini öğren
kubectl explain pod
# Mevcut pod'un YAML'ını gör
kubectl get pod nginx -o yaml
# YAML dosyasını uygula (create yerine, güncelleme yapabilir)
kubectl apply -f nginx-pod.yaml
Bu teknikleri kullanarak Kubernetes kaynaklarınızı daha verimli bir şekilde yönetebilirsiniz. Başarılar!