Kubeadm ile Üretim Ortamına Hazır Kubernetes (K8s) Cluster Kurulum Rehberi
Kubernetes, konteynerleştirilmiş uygulamaların dağıtımı, ölçeklendirilmesi ve yönetilmesi için endüstri standardı haline gelmiş güçlü bir orkestrasyon platformudur. Kendi Kubernetes kümenizi kurmak, platformu derinlemesine anlamanın ve uygulamalarınızı kontrol etmenin ilk adımıdır. Bu rehberde, kubeadm aracını kullanarak baştan sona bir Kubernetes (K8s) kümesi kurma sürecini adım adım ele alacağız. Kubeadm, production-ready bir küme kurmak için Kubernetes projesi tarafından sağlanan resmi bir araçtır.
Bu rehber, bir adet Kontrol Düzlemi (Master) düğümü ve bir veya daha fazla İşçi (Worker) düğümünden oluşan temel bir küme kurulumunu kapsayacaktır.
Ön Gereksinimler
Kuruluma başlamadan önce aşağıdaki ön gereksinimleri karşıladığınızdan emin olun:
- İşletim Sistemi: Ubuntu 22.04/20.04, CentOS 7/8 veya diğer uyumlu Linux dağıtımları. (Bu rehberde Ubuntu 22.04 üzerinden ilerlenecektir.)
- Donanım:
- Kontrol Düzlemi Düğümü: En az 2 CPU, 2GB RAM.
- İşçi Düğümleri: En az 1 CPU, 1GB RAM (önerilen 2 CPU, 2GB RAM).
- Ağ Yapısı: Tüm düğümlerin birbirleriyle iletişim kurabilmesi (hem iç IP’ler hem de 6443 portu üzerinden Kontrol Düzlemi). Düğümlerin statik IP adreslerine sahip olması şiddetle tavsiye edilir.
- Hostname: Her düğümün benzersiz bir hostname’e sahip olması.
- İnternet Erişimi: Paket indirme ve Docker imajlarını çekmek için.
Tüm Düğümlerde Ortak Ayarlar (Master ve Worker)
Bu adımlar, hem kontrol düzlemi hem de işçi düğümlerinde uygulanmalıdır.
1. Swap’ı Kapatma
Kubernetes, swap’ın kapalı olmasını gerektirir. Performans nedenleriyle ve kubelet’in düzgün çalışabilmesi için bu zorunludur.
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
2. Kernel Modüllerini Yükleme ve Ağ Ayarlarını Yapılandırma
Kubernetes kümesinin ağ yapısı (özellikle CNI eklentileri) için gerekli kernel modüllerini yüklüyoruz ve ağ köprüleme ayarlarını yapıyoruz.
sudo modprobe overlay
sudo modprobe br_netfilter
# Modülleri kalıcı hale getirme
cat <
3. Container Runtime Kurulumu (containerd)
Kubernetes, konteynerleri çalıştırmak için bir Container Runtime Interface (CRI) uyumlu runtime’a ihtiyaç duyar. Bu rehberde, yaygın olarak kullanılan ve önerilen containerd‘yi kuracağız.
# apt paket listesini güncelleme ve gerekli paketleri yükleme
sudo apt update && sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
# Docker'ın GPG anahtarını ekleme (containerd için de kullanılıyor)
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# Docker APT deposunu ekleme
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# containerd'yi yükleme
sudo apt update && sudo apt install -y containerd.io
# containerd varsayılan yapılandırmasını oluşturma ve systemd cgroup driver'ı etkinleştirme
sudo systemctl enable --now containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
sudo systemctl restart containerd
4. Kubeadm, Kubelet ve Kubectl Kurulumu
Bu araçlar, Kubernetes kümesinin yönetimini ve çalışmasını sağlar:
kubeadm: Kümeyi başlatmak ve düğümleri birleştirmek için.kubelet: Her düğümde çalışan ve konteynerleri yöneten ana aracı.kubectl: Küme ile etkileşim kurmak için komut satırı arayüzü.
# Kubernetes GPG anahtarını ekleme
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
# Kubernetes APT deposunu ekleme
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
# Kube bileşenlerini yükleme
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
5. Güvenlik Duvarı ve SELinux’u Devre Dışı Bırakma (veya Yapılandırma)
Üretim ortamlarında güvenlik duvarı ve SELinux’u uygun şekilde yapılandırmak önemlidir. Ancak basit bir kurulum ve test için genellikle devre dışı bırakılırlar. Güvenlik duvarını tamamen kapatmak yerine gerekli portları açmanız önerilir (K8s port listesi için Kubernetes dökümantasyonuna bakınız).
# UFW (Ubuntu) için
sudo ufw disable
sudo systemctl stop ufw
sudo systemctl disable ufw
# Eğer SELinux etkinse (Ubuntu'da varsayılan olarak kapalıdır, CentOS'ta kontrol edin)
# sudo setenforce 0
# sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
Kontrol Düzlemi (Master) Düğümünde Yapılacaklar
Ortak ayarları tamamladıktan sonra, sadece Kontrol Düzlemi düğümünde aşağıdaki adımları uygulayın.
1. Kubernetes Kümesini Başlatma (kubeadm init)
Bu adım, kontrol düzlemi bileşenlerini (API Sunucusu, Etcd, Scheduler vb.) kurar ve kümenin temelini oluşturur. --pod-network-cidr parametresi, seçeceğiniz CNI eklentisine göre Pod’lar için ayrılacak IP bloğunu tanımlar. Yaygın olarak Flannel için 10.244.0.0/16, Calico için 192.168.0.0/16 kullanılır.
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
Komut başarıyla tamamlandığında, size kubectl‘i yapılandırmak için gereken komutları ve işçi düğümlerini kümeye katmak için kubeadm join komutunu gösterecektir. Bu çıktıdaki kubeadm join komutunu kopyalayın ve güvenli bir yere kaydedin!
2. Kubeconfig Yapılandırması
kubectl komutunun küme ile iletişim kurabilmesi için gerekli yapılandırmayı (kubeconfig dosyası) kullanıcınızın ana dizinine 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
3. CNI (Container Network Interface) Eklentisi Kurulumu
Pod’ların birbirleriyle ve dış dünyayla iletişim kurabilmesi için bir CNI eklentisi kurmanız gerekir. Bu rehberde basitliği nedeniyle Flannel‘ı kullanacağız. Alternatif olarak Calico gibi daha gelişmiş CNI’lar da mevcuttur.
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
İşçi (Worker) Düğümlerinde Yapılacaklar
Ortak ayarları tamamladıktan sonra, her bir işçi düğümünde aşağıdaki adımı uygulayın.
1. Kümeye Katılma (kubeadm join)
Kontrol düzlemi düğümünde kubeadm init komutunun çıktısında gördüğünüz kubeadm join komutunu buraya yapıştırın ve çalıştırın. Örnek bir komut aşağıdaki gibidir:
# Bu komutu, KONTROL DÜZLEMİ düğümündeki kubeadm init çıktısından kopyalamalısınız.
# Token ve hash değerleri sizin kurulumunuza özel olacaktır.
sudo kubeadm join <KONTROL_DÜZLEMİ_IP_ADRESİ>:6443 --token <TOKEN_DEĞERİ> \
--discovery-token-ca-cert-hash sha256:<HASH_DEĞERİ>
Not: Bu token varsayılan olarak 24 saat geçerlidir. Eğer token süresi dolarsa veya kaybederseniz, kontrol düzlemi düğümünde aşağıdaki komutla yeni bir token oluşturabilirsiniz:
sudo kubeadm token create --print-join-command
Kurulumu Doğrulama
Kontrol düzlemi düğümüne geri dönün ve kümenin durumunu kontrol edin:
kubectl get nodes
Tüm düğümlerinizin Ready durumunda olduğunu görmelisiniz. Bu işlem CNI eklentisinin dağıtılması ve düğümlerin katılması biraz zaman alabilir.
kubectl get pods -A
kube-system namespace’indeki tüm pod’ların (özellikle Flannel ve kube-proxy) Running durumda olduğunu doğrulayın.
