Kubernetes Öğrenme Yolculuğu

Kubernetes Öğrenme Yolculuğu

İçindekiler

Kubernetes öğrenmeye çalışan çoğu kişi aynı yerden başlıyor: internetten bir YAML dosyası kopyalıyor, kubectl apply diyor, çalışınca seviniyor, çalışmayınca ne olduğunu anlamıyor. Ben de öyle başladım. Sorun şu ki Kubernetes bir komut seti değil, bir model; o modeli anlamadan ezberlenen komutlar ilk arızada işe yaramıyor.

Bu seride konuyu baştan ve sırayla ele alacağız: önce Kubernetes’in neden var olduğunu ve neyden oluştuğunu, sonra kümeyi kurup üzerinde uygulama çalıştırmayı, en sonunda da o kümeyi üretimde ayakta tutmak için gerekenleri. Her başlık kendi yazısı olacak; bu yazı da hepsinin içindekiler sayfası.

Blogda daha önce yayımladığım Ansible ile RKE2 küme kurulumu, Longhorn ve Lens Desktop yazıları bu yolculuğun parçası. Aşağıdaki listede linkli olan başlıklar yayımlanmış yazılardır; diğerleri sırası geldikçe linke dönüşecek.

Yol Haritası

Kabaca dört evre var: temel kavramlar ve mimari (1-2), kümeyi kurup ilk iş yüklerini çalıştırmak (3-5), altyapı katmanları — ağ, depolama, yapılandırma, kaynak yönetimi (6-9) ve üretime hazırlık (10-14). Sırayla okumak en verimlisi, ama her yazı tek başına da ayakta duracak.

Başlıkları seçerken kendi deneyimimin yanında CNCF’in resmî CKA müfredatını da ölçüt aldım; sınav hedeflemeseniz bile o müfredat “bir küme yöneticisinin bilmesi gereken” konuların iyi bir listesi. Dikkat çeken bir ayrıntı: CKA’da en ağır domain %30 ile sorun giderme. Aşağıdaki 11. başlığın neden bu kadar kabarık olduğunu bu açıklıyor — işin çoğu orada geçiyor.

  1. Giriş: Kubernetes Nedir, Ne Zaman Gerekir?
    1.1 Konteyner nedir, sanal makineden farkı nedir?
    1.2 Docker’dan orkestrasyona: tek sunucuda çözülemeyen problemler
    1.3 Kubernetes’e gerçekten ihtiyacınız var mı? Gereksiz olduğu durumlar
  2. Mimari: Küme Neyden Oluşur?
    2.1 Control plane bileşenleri: kube-apiserver, etcd, scheduler, controller-manager
    2.2 Worker düğüm bileşenleri: kubelet, kube-proxy, konteyner çalışma zamanı
    2.3 Deklaratif model: istenen durum, gözlenen durum ve uzlaşma döngüsü
    2.4 Konteyner çalışma zamanları: dockershim’in 1.24’te kaldırılması, containerd ve CRI-O
    2.5 Genişletme arayüzleri: CRI, CNI ve CSI kümenin neresine takılır?
  3. Kümeyi Kurmak
    3.1 Öğrenme kümesi: kind veya k3s ile tek düğümde başlamak
    3.2 Ansible ile RKE2 Kubernetes Kümesi Kurulumu
    3.3 Dağıtım seçenekleri: kubeadm, RKE2, k3s ve yönetilen servisler
    3.4 kubeconfig, bağlam (context) ve birden fazla kümeyle çalışmak
    3.5 Kurulum sonrası ilk doğrulama: küme gerçekten sağlıklı mı?
  4. kubectl ve Nesne Modeli
    4.1 kubectl temelleri: get, describe, logs, exec
    4.2 Pod nedir? Tek konteynerden sidecar ve init konteyner desenlerine
    4.3 Namespace, label, selector ve annotation
    4.4 Manifest anatomisi: apiVersion, kind, metadata, spec, status
    4.5 Lens Desktop ile kümeyi görselleştirmek
  5. Uygulama Çalıştırmak: İş Yükü Nesneleri
    5.1 ReplicaSet ve Deployment: kopyaları kim ayakta tutuyor?
    5.2 Güncelleme stratejileri: rolling update, rollback, maxSurge ve maxUnavailable
    5.3 StatefulSet: kimliği ve diski olan uygulamalar
    5.4 DaemonSet, Job ve CronJob
    5.5 Sağlık kontrolleri: liveness, readiness ve startup probe farkı
  6. Ağ: Trafiği Pod’a Ulaştırmak
    6.1 Kubernetes ağ modeli ve CNI eklentileri
    6.2 Service türleri: ClusterIP, NodePort, LoadBalancer ve arkalarındaki EndpointSlice
    6.3 CoreDNS: küme içi ad çözümleme ve servis keşfi
    6.4 Ingress controller ve TLS sonlandırma
    6.5 Gateway API: Ingress’in halefi — Ingress desteklenmeye devam ediyor ama yeni özellik almıyor
    6.6 NetworkPolicy: varsayılan olarak her pod herkesle konuşur
  7. Depolama: Veriyi Kalıcı Kılmak
    7.1 Volume, PersistentVolume ve PersistentVolumeClaim ilişkisi; erişim modları ve geri kazanım (reclaim) politikaları
    7.2 StorageClass ve dinamik sağlama
    7.3 Longhorn ile dağıtık blok depolama
    7.4 Anlık görüntü, yedekleme ve geri dönüş tatbikatı
  8. Yapılandırma ve Gizli Bilgi
    8.1 ConfigMap ile yapılandırmayı imajdan ayırmak
    8.2 Secret neden şifreleme değildir: base64, etcd ve at-rest şifreleme
    8.3 Ortam değişkeni mi, dosya olarak bağlamak mı?
    8.4 Harici gizli bilgi yönetimi: External Secrets ve Vault
  9. Zamanlama ve Kaynak Yönetimi
    9.1 requests ve limits: scheduler’ın gerçekte baktığı değerler
    9.2 QoS sınıfları ve pod tahliyesi (eviction)
    9.3 Yerleşimi yönlendirmek: nodeSelector, affinity, taint ve toleration
    9.4 Otomatik ölçekleme: HPA, VPA ve Cluster Autoscaler
    9.5 ResourceQuota ve LimitRange ile namespace sınırları
  10. Güvenlik
    10.1 RBAC: Role, ClusterRole, RoleBinding ve ServiceAccount
    10.2 Pod Security Admission: 1.25’te kaldırılan PodSecurityPolicy’nin yerine ne geldi?
    10.3 Konteyner ayrıcalıkları: root’suz çalıştırma, capability düşürme, read-only kök dosya sistemi
    10.4 İmaj güvenliği: registry, imza doğrulama ve zafiyet taraması
    10.5 Küme sertleştirme: CIS Benchmark ve kube-bench
  11. İzleme, Günlük ve Sorun Giderme
    11.1 Monitoring nedir, neden önemlidir? — küme metrikleri neyi anlatır?
    11.2 Prometheus ve Grafana kurulumu üzerine kube-state-metrics eklemek
    11.3 Günlük toplama: Loki ve EFK yaklaşımları
    11.4 Pod düzeyinde sorun giderme: CrashLoopBackOff, ImagePullBackOff, Pending pod
    11.5 Küme bileşenlerinde sorun giderme: kubelet, apiserver, etcd ve sertifika süreleri
    11.6 Servis ve ağ sorunları: DNS çözümlenmiyor, Service’e trafik gitmiyor, endpoint listesi boş
    11.7 Kaynak kullanımını okumak: metrics-server, kubectl top, düğüm koşulları ve eviction
    11.8 Olay akışını okumak: kubectl get events ve olayların 1 saatlik ömrü
  12. Paketleme ve Sürekli Teslimat
    12.1 Helm: chart, release ve values mantığı
    12.2 Kustomize ile ortam bazlı yapılandırma
    12.3 Jenkins pipeline ile kümeye dağıtım
    12.4 GitOps: Argo CD ve Flux ile git’i tek doğruluk kaynağı yapmak
    12.5 Ansible ile küme yaşam döngüsü yönetimi
  13. Üretime Almadan Önce
    13.1 Yüksek erişilebilirlik: birden fazla control plane ve etcd quorum aritmetiği
    13.2 etcd yedeği ve felaket kurtarma tatbikatı
    13.3 Düğüm bakımı: cordon, drain ve PodDisruptionBudget
    13.4 Sürüm yükseltme stratejisi ve API kullanımdan kaldırma (deprecation) takibi
    13.5 Kapasite planlama: küme ne zaman büyümeli, ne zaman bölünmeli?
    13.6 Üretim öncesi kontrol listesi
  14. İleri Konular ve Kaynaklar
    14.1 CRD ve operator deseni: Kubernetes’i kendi nesnenizle genişletmek
    14.2 Service mesh’e giriş
    14.3 Sertifikasyon yolu: KCNA, CKAD, CKA ve CKS
    14.4 Belgeler, kitaplar ve topluluk kaynakları

Ön Koşullar

Kubernetes bir soyutlama katmanı; altındaki katmanı bilmiyorsanız soyutlama size yardım etmez, sadece hatayı gizler. Başlamadan önce şunlar elinizde olsun:

  • Linux komut satırı. Dosya izinleri, süreçler, servisler ve günlükler. Sıfırdan başlıyorsanız GNU/Linux Öğrenme Yolculuğu serisi tam olarak bu boşluğu dolduruyor.
  • Konteyner kavramı. Bir imajı çalıştırmış, log’una bakmış, port yayımlamış olmak yeter. Konteyner ile sanal makine farkını sanallaştırma yazısında ele almıştım.
  • Temel ağ bilgisi. IP, port, NAT ve DNS’in ne yaptığını bilmek. Kubernetes’te karşılaşacağınız sorunların önemli bir kısmı aslında ağ sorunudur.
  • YAML okuryazarlığı. Girinti duyarlı olduğunu ve liste ile eşleme (map) arasındaki farkı bilmek yeterli.

Nasıl İlerleyeceğiz

Yazıların çoğu, okurken aynı anda deneyebileceğiniz biçimde kurgulanacak. Öğrenmeye başlamak için güçlü bir sunucuya gerek yok: kind veya k3s ile dizüstü bilgisayarınızda tek düğümlü bir küme dakikalar içinde ayağa kalkar ve 1-8 arası başlıkların neredeyse tamamı orada denenebilir.

Ama tek düğümlü kümenin gösteremediği şeyler var: bir düğüm kaybedildiğinde pod’ların yeniden zamanlanması, etcd quorum’unun bozulması, dağıtık depolamanın kopyaları senkronlaması. Bunları görmek için en az üç düğüm gerekiyor — birkaç sanal makine yeter. Evde böyle bir ortam kurmak isterseniz Proxmox ile homelab yazısı iyi bir başlangıç.

Serideki yazılarda geçen sunucu adları, IP adresleri ve çıktılar örnek değerlerdir; komutlar ve davranışlar gerçektir. Kendi ortamınızda çalıştırmadan önce değerleri kendinize göre uyarlayın.

Yolculuk buradan başlıyor. Bir sonraki yazıda ilk maddeyi ele alacağız: konteyner tam olarak nedir, ve neden bir noktadan sonra tek başına yetmiyor?

Paylaş :

İlgili Yazılar

Linux'ta Gruplar: Kullanıcıları Gruplara Ekleme ve Çıkarma

Linux'ta Gruplar: Kullanıcıları Gruplara Ekleme ve Çıkarma

Bir önceki yazıda tek bir kullanıcının bilgilerini ve parolasını yönettik. Ama gerçek sistemlerde izinler tek tek kullanıcılara verilmez — gruplara verilir.

Ansible ile RKE2 Kubernetes Kümesi Kurulumu

Ansible ile RKE2 Kubernetes Kümesi Kurulumu

Bu yazı Kubernetes Öğrenme Yolculuğu serisinin bir parçasıdır. Günümüzde konteyner teknolojileri ve Kubernetes, yazılım geliştirme ve operasyon süreçlerinde devrim yaratan araçlar arasında yer alıyor. Kubernetes, uygulamaların dağıtımını, ölçeklendirilmesini ve yönetimini kolaylaştırarak, geliştiriciler ve sistem yöneticileri için vazgeçilmez bir araç haline geldi. Bu yazıda, Ansible kullanarak nasıl hızlı ve kolay bir şekilde RKE2 tabanlı bir Kubernetes kümesi kurabileceğinizi paylaşacağım.

Veri Merkezinde BT Yedekliliği: Ağdan Kümeye Uçtan Uca Hata Alanları

Veri Merkezinde BT Yedekliliği: Ağdan Kümeye Uçtan Uca Hata Alanları

Serinin ilk yazısında DC-IST1’de bir bakım gecesi yaşamış, rack 07’de iki sunucunun kapandığını görmüştük. Sebep, iki güç kordonunun da aynı PDU’ya takılmış olmasıydı.