- kubeadm ne yapar, ne yapmaz?
- Başlamadan önce hazırlık listesi
- Control plane'i kubeadm init ile başlatma
- kubectl erişimi ve ağ eklentisi
- Worker düğümlerini kubeadm join ile ekleme
- Kurulumu doğrulama akışı
- Sık yapılan hatalar ve nereye bakılmalı
- Bu beceriyi Mindset programlarında nerede çalışırsınız?
- Sık sorulan sorular
Kubernetes kümesini kubeadm ile sıfırdan kurmak
kubeadm ile control plane başlatma, kubeconfig, ağ eklentisi ve worker düğüm ekleme adımları; kurulum sonrası doğrulama ve sık hatalar.
kubeadm ne yapar, ne yapmaz?
kubeadm, Kubernetes projesinin kendi küme önyükleme aracıdır. Bir control plane düğümünde sertifikaları üretir, API sunucusu, controller manager, scheduler ve etcd bileşenlerini static pod olarak ayağa kaldırır, ardından diğer makinelerin kümeye katılması için bir birleştirme komutu hazırlar.
kubeadm makineleri sizin yerinize hazırlamaz. İşletim sistemi ayarları, container runtime kurulumu, ağ eklentisi (CNI), yük dengeleyici, yedekleme ve izleme sizin sorumluluğunuzdadır. Bu yüzden kubeadm bir 'tek tuşla kurulum' değil, kümenin iskeletini standart biçimde çıkaran bir yöntemdir. Yönetilen servisler (bulut sağlayıcıların Kubernetes ürünleri) bu işleri sağlayıcıya devrederken kubeadm size kümenin her katmanını öğretir; sınav hazırlığında ve kendi veri merkezinde küme işletirken tercih edilmesinin nedeni budur.
Başlamadan önce hazırlık listesi
Kurulum komutlarından önce her makinede şu hazırlıklar tamamlanmış olmalıdır:
- Deb veya rpm tabanlı bir Linux dağıtımı ve makineler arasında tam ağ erişimi
- Her düğümde benzersiz hostname, MAC adresi ve ürün kimliği
- Kapatılmış swap alanı (kubelet varsayılan olarak swap açıkken başlamaz)
- Kurulu bir container runtime ve onunla uyumlu cgroup sürücüsü ayarı
- kubeadm, kubelet ve kubectl paketleri; paketler otomatik güncellenmesin diye sürüm sabitleme (hold)
- Control plane düğümü için resmî belgede belirtilen asgari CPU ve bellek
- Güvenlik duvarında API sunucusu, kubelet ve etcd'nin kullandığı portların düğümler arasında açık olması
Ağ tarafında sık yapılan hata, makinenin birden çok arayüzü olduğunda Kubernetes'in yanlış arayüzün adresini seçmesidir. Varsayılan ağ geçidinin çıktığı arayüzde Kubernetes'in kullanmasını istediğiniz IP bulunmalıdır. Bunu görmek için ip route show çıktısındaki default via satırına bakın. Gerekirse init sırasında --apiserver-advertise-address, join sırasında ise kubelet yapılandırmasında node IP ayarı ile adresi açıkça belirtirsiniz.
Control plane'i kubeadm init ile başlatma
İsteğe bağlı bir ön adım olarak kontrol bileşenlerinin imajlarını önceden indirebilirsiniz:
sudo kubeadm config images pull
Sonra ilk control plane düğümünde kümeyi başlatın:
sudo kubeadm init --pod-network-cidr=<CNI_in_bekledigi_aralik>
Burada kritik nokta pod ağı aralığıdır. Seçeceğiniz ağ eklentisi hangi aralığı bekliyorsa onu vermelisiniz; ağ eklentisinin belgesini kurulumdan önce okumak, sonradan kümeyi sıfırlamaktan çok daha ucuzdur. Yüksek erişilebilirlik planlıyorsanız ilk düğümde yük dengeleyici adresini --control-plane-endpoint ile vermek gerekir; sonradan eklemek zordur.
Init önce ön kontrolleri çalıştırır (swap, runtime, port çakışması), sonra sertifikaları ve static pod manifestlerini üretir. Başarıyla biter ve çıktının sonunda şunları yazdırır: kubectl için yapılandırma komutları ve worker düğümler için kubeadm join komutu. Bu çıktıyı bir yere kaydedin.
kubectl erişimi ve ağ eklentisi
Init çıktısındaki komutlarla yönetici kubeconfig dosyasını kendi kullanıcınıza kopyalayın:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
Bu noktada kubectl get nodes komutu control plane düğümünü NotReady gösterir. Bu bir hata değil, beklenen durumdur: ağ eklentisi henüz kurulmadığı için düğüm hazır sayılmaz ve CoreDNS pod'ları Pending kalır.
Tercih ettiğiniz CNI eklentisinin (Calico, Cilium, Flannel, Antrea gibi seçenekler vardır) kendi belgesindeki manifesti uygulayın:
kubectl apply -f <cni_manifest_dosyasi>.yaml
Birkaç dakika içinde kube-system içindeki pod'ların Running durumuna geçmesini izleyin. Network policy kullanmayı planlıyorsanız seçtiğiniz eklentinin bunu destekleyip desteklemediğini bu aşamada kontrol edin; flannel gibi bazı eklentiler tek başına network policy uygulamaz.
Worker düğümlerini kubeadm join ile ekleme
Her worker makinede hazırlık listesindeki adımlar bittikten sonra, init çıktısındaki komutu kök yetkisiyle çalıştırın. Komutun genel biçimi şöyledir:
sudo kubeadm join <control_plane_adresi>:<api_portu> --token <token> --discovery-token-ca-cert-hash sha256:<hash>
Token süreli olduğundan, init çıktısını kaybettiyseniz ya da token süresi dolduysa control plane düğümünde yenisini üretirsiniz:
kubeadm token create --print-join-command
Kubeadm, control plane düğümlerine varsayılan olarak NoSchedule etkili bir control-plane taint'i ekler; normal iş yükleri o düğümlerde çalışmaz. Tek düğümlü bir test kümesinde iş yüklerini aynı makinede çalıştırmak istiyorsanız taint'i şu komutla kaldırabilirsiniz:
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
Üretim kümesinde bunu yapmayın; control plane'in kaynağını uygulamalarla paylaştırmak, bir kaynak tüketim sorununda kümenin yönetim katmanını da düşürür.
Kurulumu doğrulama akışı
Kurulumun bittiğini düşünmeden önce şu kontrolleri sırayla yapın:
- kubectl get nodes -o wide: tüm düğümler Ready olmalı, sürüm ve iç IP beklediğiniz gibi görünmeli
- kubectl get pods -A: kube-system içinde apiserver, controller-manager, scheduler, etcd, kube-proxy, CoreDNS ve CNI pod'ları Running olmalı
- kubectl cluster-info: API sunucusu ve CoreDNS adresleri yanıt vermeli
- Örneğin küçük bir test Deployment'ı oluşturup birkaç kopyaya ölçekleyin, pod'ların farklı worker'lara dağıldığını ve bir servis üzerinden birbirine erişebildiğini doğrulayın
Test bitince kaynakları silin. Düğümü kümeden çıkarmak gerekirse önce kubectl drain <dugum> --delete-emptydir-data --force --ignore-daemonsets ile boşaltın, kubectl delete node <dugum> ile kaydını silin ve o makinede sudo kubeadm reset çalıştırın.
Sık yapılan hatalar ve nereye bakılmalı
- Swap açık kaldığı için kubelet başlamıyor: journalctl -xeu kubelet çıktısı çoğu zaman nedeni doğrudan söyler
- Container runtime ile kubelet'in cgroup sürücüleri uyumsuz: kubelet sürekli yeniden başlar, control plane pod'ları ayağa kalkmaz
- Pod ağı aralığı ile ağ eklentisinin beklediği aralık farklı: pod'lar IP alamaz veya düğümler arası trafik kopar
- Yanlış arayüzün IP'si kullanılmış: düğümler birbirine ulaşamaz, join zaman aşımına uğrar
- Token süresi dolmuş: kubeadm token create --print-join-command ile yenileyin
- Güvenlik duvarı portları kapatmış: join sırasında API sunucusuna bağlanılamaz
- Eski bir denemeden kalan dosyalar: başarısız kurulumdan sonra kubeadm reset çalıştırıp /etc/cni ve ilgili yapılandırma kalıntılarını temizleyin
Kurulum başarılı olsa bile iş bitmez. Sertifikaların süreli olduğunu, etcd yedeğinin ayrıca planlanması gerektiğini ve sürüm yükseltmenin ayrı bir prosedür olduğunu unutmayın; bunlar sonraki becerilerdir.
Bu beceriyi Mindset programlarında nerede çalışırsınız?
Kubernetes Administrator (CKA) Hazırlık eğitimi, küme yönetimini sınav odaklı çalışmak isteyen sistem yöneticileri, DevOps ve platform mühendisleri için kurgulanmıştır. Müfredattaki Küme Kurulum ve Yapılandırma modülü bu sayfadaki işi, Sorun Giderme ve Teşhis modülü ise kurulum sonrası karşılaşılan hataları kapsar.
Kurumsal bir ekip için anlamı şudur: kümeyi kendi altyapınızda işletecek ekipte en az birkaç kişinin kurulumu elle yapıp gerekçelerini bilmesi, otomasyon araçları kullanılsa bile bir arıza anında kümeyi anlamayı kolaylaştırır. Eğitim takvimi ve içerik ayrıntıları ilgili eğitim sayfasında yer alır.
İlgili Mindset programı
Kubernetes Administrator (CKA) Hazırlık
Sık sorulan sorular
kubeadm yalnızca öğrenme amaçlı mı, üretimde kullanılır mı?
kubeadm, Kubernetes projesinin resmî küme önyükleme aracıdır ve üretim kümeleri de bununla kurulabilir. Ancak yüksek erişilebilirlik, yedekleme, sertifika yenileme ve yükseltme sorumlulukları size aittir. Birçok ekip kubeadm'i doğrudan kullanmak yerine onu altında kullanan otomasyon araçlarıyla çalışır.
kubeadm init sonrası düğüm neden NotReady görünüyor?
Ağ eklentisi (CNI) henüz kurulmamıştır. Kubelet, pod ağı hazır olmadan düğümü hazır saymaz ve CoreDNS pod'ları Pending kalır. Seçtiğiniz eklentinin manifestini uyguladıktan sonra kube-system pod'ları ayağa kalkar ve düğüm Ready olur.
Join komutundaki token süresi dolarsa ne yapılır?
Control plane düğümünde kubeadm token create --print-join-command komutunu çalıştırın. Komut, yeni bir token ve doğrulama özetiyle birlikte hazır bir join komutu yazdırır. Mevcut token'ları ve kalan sürelerini kubeadm token list ile görebilirsiniz; yeni düğüm eklemeyi planladığınız gün token'ı o zaman üretmek yeterlidir.
Kubernetes'i kubeadm olmadan kurmanın alternatifleri var mı?
Evet. Yönetilen bulut servisleri kurulumu sağlayıcıya bırakır; küme API'si ya da altyapı otomasyon araçları kubeadm'i arka planda kullanabilir; hafif dağıtımlar tek bir ikili dosyayla gelir. Hangisinin uygun olduğu işletme yükünüze, ekip yetkinliğine ve veri merkezi gereksinimlerinize bağlıdır.
İlgili rehberler
Kategori: DevOps ve Bulut Teknolojileri