TR/EN
Blog

Kubernetes Sunucusu Nasıl Kurulur? kubeadm ile Adım Adım Rehber

Yayın tarihi: · 12 dk okuma

Kubernetes'i öğrenmeye başlayan herkesin bir noktada sorduğu soru: Kubernetes sunucusu nasıl kurulur? Bu yazıda farklı kurulum yöntemlerini karşılaştırıp ardından en yaygın yöntem olan kubeadm ile Ubuntu üzerinde adım adım bir Kubernetes cluster'ı kuruyoruz. Kubernetes'in ne olduğunu henüz bilmiyorsanız önce Kubernetes nedir yazımıza göz atmanızı öneririz.

Kubernetes Kurulum Yöntemleri

Kubernetes'i kurmanın tek bir yolu yok. İhtiyacınıza ve tecrübenize göre farklı araçlar var:

YöntemZorlukÖzelliğiKimler için?
kubeadmOrtaResmi araç, "saf" Kubernetes kurarKubernetes'i derinlemesine öğrenmek isteyenler, üretim ortamları
k3sKolayHafif dağıtım, tek komutla kurulurKüçük sunucular, test, edge
RKE2OrtaGüvenlik odaklı, Rancher ile uyumluKurumsal ortamlar, Rancher kullananlar
MicroK8sKolaySnap paketiyle kurulur, eklentilerle genişlerGeliştirme ortamları
Yönetilen KubernetesKolayControl plane'i sağlayıcı yönetirBüyük ve kritik iş yükleri, bütçesi olanlar
Hazır Kubernetes ServerÇok kolayKubernetes kurulu teslim edilirHemen başlamak isteyenler

Bu yazıda kubeadm'i anlatıyoruz çünkü hem resmi yöntem, hem de kurarken Kubernetes'in parçalarını gerçekten öğreniyorsunuz.

Donanım Gereksinimleri

RolMinimumÖnerilen
Control plane2 CPU, 2 GB RAM4 CPU, 8 GB RAM, NVMe disk
Worker1–2 CPU, 2 GB RAMİş yükünüze göre; genelde 4+ CPU, 8+ GB RAM
Tek node (hepsi bir arada)2 CPU, 4 GB RAM4 CPU, 8–16 GB RAM

Tüm sunucuların birbirine ağ üzerinden erişebilmesi, her birinin farklı bir hostname'e sahip olması ve swap'ın kapalı olması gerekiyor.

Tek Node mu, Çok Node mu?

Tek nodeÇok nodeYüksek erişilebilirlik (HA)
Sunucu sayısı11 control plane + 2+ worker3 control plane + 2+ worker
Bir sunucu çökerseHerşey dururWorker çökerse pod'lar taşınır; control plane çökerse yönetim dururCluster çalışmaya devam eder
Kimler için?Öğrenme, test, stagingKüçük–orta üretimKritik üretim ortamları

Açılması Gereken Portlar

PortNerede?Ne için?
6443Control planeKubernetes API sunucusu (kubectl buraya bağlanır)
2379–2380Control planeetcd veritabanı
10250Tüm node'larkubelet API
10257 / 10259Control planecontroller-manager / scheduler
30000–32767Tüm node'larNodePort servisleri

Kullandığınız ağ eklentisi de kendi portlarını kullanır (örneğin Flannel için UDP 8472). Güvenlik duvarında node'lar arasındaki trafiğe izin verdiğinizden emin olun.

kubeadm ile Kubernetes Kurulumu (Ubuntu 24.04)

Aşağıdaki 1–4. adımları tüm sunucularda (control plane ve worker'lar), 5–7. adımları sadece control plane'de çalıştırın.

1. Hazırlık: hostname ve swap

Kubelet varsayılan olarak swap açıkken çalışmıyor, o yüzden kapatıyoruz:

sudo hostnamectl set-hostname k8s-cp-1      # her sunucuya farklı bir ad verin
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab   # yeniden başlatmada da kapalı kalsın

2. Kernel modülleri ve ağ ayarları

Pod'lar arası trafiğin düzgün yönlendirilmesi için gerekli modülleri ve ayarları açıyoruz:

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF
sudo sysctl --system

3. Container runtime: containerd

Kubernetes container'ları çalıştırmak için bir runtime'a ihtiyaç duyuyor. containerd'yi kurup cgroup sürücüsünü systemd olarak ayarlıyoruz; bu ayar atlanırsa kubelet sürekli yeniden başlar:

sudo apt-get update
sudo apt-get install -y containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml > /dev/null
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl enable containerd

4. kubeadm, kubelet ve kubectl

Paketleri resmi Kubernetes deposundan kuruyoruz. Sürüm numarası depo adresinin içinde geçiyor; kurulumdan önce kubernetes.io'dan güncel kararlı sürümü kontrol edip K8S_VERSION değerini ona göre güncelleyin:

K8S_VERSION=v1.34   # güncel sürümü kubernetes.io'dan kontrol edin

sudo apt-get install -y apt-transport-https ca-certificates curl gpg
sudo mkdir -p -m 755 /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/${K8S_VERSION}/deb/Release.key \
  | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/${K8S_VERSION}/deb/ /" \
  | sudo tee /etc/apt/sources.list.d/kubernetes.list

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl   # paketler kendiliğinden güncellenmesin

5. Cluster'ı başlatın (sadece control plane)

sudo kubeadm init --pod-network-cidr=10.244.0.0/16

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Komut bitince ekrana bir kubeadm join ... komutu basılır. Worker eklerken lazım olacak, bir kenara not edin.

6. Ağ eklentisini (CNI) kurun

Pod'ların birbiriyle konuşabilmesi için bir ağ eklentisi şart. Basit ve hafif olduğu için Flannel kullanıyoruz (Calico veya Cilium da çok yaygın seçenekler):

kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
kubectl get nodes        # birkaç dakika içinde STATUS: Ready olmalı

7. Tek node kullanacaksanız: control plane'de pod çalıştırmaya izin verin

Varsayılan olarak control plane'e uygulama pod'u yerleştirilmez. Tek sunuculu bir kurulumda bu engeli kaldırmanız gerekiyor:

kubectl taint nodes --all node-role.kubernetes.io/control-plane-

8. Worker node'ları ekleyin

# worker sunucuda, kubeadm init çıktısındaki komutu çalıştırın:
sudo kubeadm join 10.0.0.10:6443 --token abcdef.0123456789abcdef \
  --discovery-token-ca-cert-hash sha256:<hash>

# komutu kaybettiyseniz control plane'de yeniden üretin:
kubeadm token create --print-join-command

9. Test edin

Her şey yolundaysa basit bir nginx uygulaması deploy edip dışarıdan erişelim:

kubectl create deployment web --image=nginx
kubectl expose deployment web --port=80 --type=NodePort
kubectl get svc web      # PORT(S) sütunundaki 30000-32767 arası portu not edin

Tarayıcıdan http://SUNUCU_IP:NODEPORT adresine girdiğinizde nginx karşılama sayfasını görüyorsanız cluster'ınız hazır. Komutların detayları için kubectl komutları yazımıza bakabilirsiniz.

Kurulumdan Sonra Yapılması Gerekenler

  • Ingress controller: Alan adına göre trafiği servislere yönlendirmek için (ör. ingress-nginx) ve sertifikalar için cert-manager.
  • Kalıcı depolama: Veritabanı gibi uygulamalar için bir StorageClass (tek node için local-path-provisioner basit bir başlangıç).
  • metrics-server: kubectl top ve otomatik ölçeklendirme için.
  • Yedekleme: etcd'nin düzenli yedeğini alın; uygulama verileri için Velero gibi araçlar kullanabilirsiniz.
  • Güncellemeler: kubeadm ile sürüm yükseltmelerini düzenli takip edin, birden fazla minor sürüm atlamayın.

Daha Hızlı Bir Yol: k3s

Tüm bu adımlar fazla geldiyse, hafif bir Kubernetes dağıtımı olan k3s tek komutla kuruluyor ve küçük sunucular için gayet iyi bir seçenek:

curl -sfL https://get.k3s.io | sh -
sudo k3s kubectl get nodes

Sık Karşılaşılan Sorunlar

BelirtiOlası sebepÇözüm
Node NotReady durumundaAğ eklentisi (CNI) kurulmamış6. adımı uygulayın, pod'ların çalıştığını kontrol edin
kubelet sürekli yeniden başlıyorSwap açık veya cgroup sürücüsü uyumsuz1. ve 3. adımları kontrol edin (SystemdCgroup = true)
kubeadm join hata veriyorToken süresi dolmuş (varsayılan 24 saat)kubeadm token create --print-join-command
Pod'lar Pending kalıyorTek node'da taint kaldırılmamış ya da kaynak yetersiz7. adım; kubectl describe pod ile sebebe bakın
Worker control plane'e bağlanamıyor6443 portu kapalıGüvenlik duvarı kurallarını kontrol edin

Hiç Uğraşmadan Kubernetes İsterseniz

Amacınız Kubernetes kurmak değil de Kubernetes üzerinde uygulama çalıştırmaksa, bu adımların hepsini atlayabilirsiniz. VECDC Kubernetes Server paketleri Kubernetes kurulu olarak teslim ediliyor; aylık $6'dan başlıyor ve otomatik kurulum sayesinde yaklaşık 5 dakikada kubeconfig dosyanız hazır oluyor. Kendi kurulumunuzu yapmak isterseniz de NVMe diskli sanal sunucularımız bu rehber için birebir.

Çok node'lu, yüksek erişilebilir ve üretime hazır bir cluster lazımsa Kubernetes danışmanlık ekibimiz tasarımdan kuruluma kadar destek veriyor; birden fazla cluster'ı tek panelden yönetmek için Rancher danışmanlığı da sunuyoruz.

Sık Sorulan Sorular

Kubernetes kurmak için kaç sunucu gerekir?

Öğrenme ve test için tek bir sunucu yeterlidir; control plane ve worker aynı makinede çalışır. Üretim için genelde 1 control plane ve en az 2 worker, yüksek erişilebilirlik için ise 3 control plane önerilir.

kubeadm mi, k3s mi kullanmalıyım?

Kubernetes'i derinlemesine öğrenmek ve standart bir kurulum yapmak istiyorsanız kubeadm; küçük sunucularda hızlı ve hafif bir kurulum istiyorsanız k3s daha uygundur. İkisi de standart Kubernetes API'sini sunar.

Kubernetes kurulumu ne kadar sürer?

Hazırlıklı bir şekilde kubeadm ile tek node bir kurulum genelde 20–40 dakika sürer. k3s ile birkaç dakikada, hazır bir Kubernetes Server ile ise yaklaşık 5 dakikada kullanıma hazır bir cluster elde edebilirsiniz.

Kubernetes için swap neden kapatılmalı?

kubelet, kaynak yönetimini öngörülebilir tutmak için varsayılan olarak swap açıkken çalışmayı reddeder. Yeni sürümlerde swap desteği eklense de standart kurulumlarda swap'ın kapatılması önerilir.

Kısacası

Kubernetes kurmak ilk bakışta karışık görünse de adımlar belli: sunucuları hazırla, containerd'yi kur, kubeadm ile cluster'ı başlat, ağ eklentisini ekle ve worker'ları bağla. Bir kere kendiniz kurduğunuzda Kubernetes'in nasıl çalıştığını çok daha iyi anlıyorsunuz. Kurulumda takıldığınız birşey olursa bize yazın, yardımcı olalım.

Sanal Sunucunuz 5 Dakikada Hazır

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

Paketleri İncele →