Kubernetes Kümesi Kurulumu: Kubeadm ile Adım Adım Rehber
Merhaba değerli sistem yöneticileri ve DevOps meraklıları! Bugün, konteyner tabanlı uygulamaların orkestrasyonunda endüstri standardı haline gelen Kubernetes (k8s) kümesini, Kubeadm aracı ile nasıl kuracağımızı adım adım inceleyeceğiz. Bu rehber, fiziksel sunucular veya sanal makineler üzerinde bir Kubernetes kümesi oluşturmak isteyenler için idealdir.
Kubeadm, Kubernetes kümesi kurma sürecini basitleştiren bir araçtır. Özellikle bare-metal veya VM ortamlarında hızlı ve güvenilir bir kurulum sağlamak için tasarlanmıştır. Bu rehberde, bir Master (kontrol düzlemi) düğümü ve bir veya daha fazla Worker (işçi) düğümünden oluşan basit bir küme kuracağız.
Ön Gereksinimler
- İşletim Sistemi: Ubuntu 20.04/22.04 LTS (veya CentOS 7/8 Stream). Bu rehber Ubuntu odaklı olacaktır.
- Sistem Kaynakları:
- Master Düğümü: En az 2 CPU, 2GB RAM, 20GB disk alanı.
- Worker Düğümü: En az 1 CPU, 1GB RAM, 20GB disk alanı.
- Ağ Yapılandırması:
- Tüm düğümlerde statik IP adresleri.
- Tüm düğümlerin birbiriyle iletişim kurabilmesi için ağ bağlantısı.
- Master düğümde açık portlar: 6443 (API Sunucusu), 2379-2380 (etcd), 10250 (Kubelet API), 10251 (kube-scheduler), 10252 (kube-controller-manager).
- Worker düğümlerinde açık portlar: 10250 (Kubelet API), 30000-32767 (NodePort hizmetleri için varsayılan aralık).
- Tüm düğümlerde root veya sudo yetkilerine sahip bir kullanıcı.
- Tüm düğümlerde internet erişimi.
Adım 1: Temel Sistem Ayarlamaları (Tüm Düğümlerde)
Her düğümde aşağıdaki adımları uygulayın:
1.1 Sistemi Güncelleme ve Swap’ı Kapatma
Swap’ın kapatılması, Kubernetes’in performans sorunları yaşamaması için kritik öneme sahiptir. Ayrıca, kernel modüllerini yüklemeliyiz.
sudo apt update && sudo apt upgrade -y
sudo swapoff -a # Swap'ı anında kapatır
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab # fstab dosyasında swap'ı kalıcı olarak devre dışı bırakır
1.2 Gerekli Kernel Modüllerini Yükleme ve Ayarları Yapılandırma
Kubernetes kümesinin doğru çalışması için bazı kernel modüllerinin etkinleştirilmesi ve sysctl ayarlarının yapılması gerekmektedir.
sudo modprobe overlay
sudo modprobe br_netfilter
# Kernel modüllerini kalıcı yapmak için
sudo tee /etc/modules-load.d/k8s.conf <<EOF
overlay
br_netfilter
EOF
# Kubernetes ağ ayarları için sysctl parametrelerini yapılandırma
sudo tee /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system # sysctl ayarlarını uygula
1.3 Güvenlik Duvarını Devre Dışı Bırakma (veya Yapılandırma)
Kurulumu basitleştirmek için güvenlik duvarını devre dışı bırakmak iyi bir başlangıç olabilir. Üretim ortamlarında güvenlik duvarı kurallarını uygun şekilde yapılandırmanız önerilir.
sudo ufw disable # Ubuntu için
# CentOS için: sudo systemctl stop firewalld && sudo systemctl disable firewalld
1.4 Hostname Ayarları
Her düğümün benzersiz bir hostname’i olmalı ve diğer düğümler tarafından çözümlenebilir olmalıdır. /etc/hosts dosyasını düzenleyerek bu çözünürlüğü sağlayabilirsiniz.
# Master düğümde (örneğin k8s-master)
sudo hostnamectl set-hostname k8s-master
# Worker düğümde (örneğin k8s-worker1)
sudo hostnamectl set-hostname k8s-worker1
# Tüm düğümlerde /etc/hosts dosyasını düzenleyin:
sudo nano /etc/hosts
/etc/hosts dosyasına aşağıdaki gibi bir giriş ekleyin (IP adreslerini ve hostname’leri kendi ortamınıza göre düzenleyin):
<MASTER_IP_ADRESI> k8s-master
<WORKER1_IP_ADRESI> k8s-worker1
<WORKER2_IP_ADRESI> k8s-worker2
Adım 2: Container Runtime Kurulumu (Tüm Düğümlerde)
Kubernetes, konteynerleri çalıştırmak için bir Container Runtime Interface (CRI) uyumlu runtime’a ihtiyaç duyar. Containerd, Kubernetes tarafından tercih edilen ve önerilen runtime’dır.
# Gerekli paketleri yükleyin
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
# Docker GPG anahtarını ekleyin
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Docker APT deposunu ekleyin (containerd bu depoda bulunur)
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y containerd.io
# Containerd varsayılan yapılandırmasını oluşturun
sudo containerd config default | sudo tee /etc/containerd/config.toml
# Systemd Cgroup sürücüsünü kullanmak için yapılandırmayı düzenleyin
# /etc/containerd/config.toml dosyasını açın ve 'SystemdCgroup = false' satırını 'SystemdCgroup = true' olarak değiştirin.
# Hızlı bir şekilde yapmak için:
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl enable containerd
Adım 3: Kubeadm, Kubelet ve Kubectl Kurulumu (Tüm Düğümlerde)
Kubernetes bileşenlerini (kubeadm, kubelet, kubectl) tüm düğümlere yükleyin.
# Kubernetes GPG anahtarını ekleyin
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
# Kubernetes APT deposunu ekleyin
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
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl # Otomatik güncellemeleri engelle
Adım 4: Master Düğümünü Başlatma (Yalnızca Master Düğümünde)
Master düğümde Kubernetes kontrol düzlemini başlatın. --pod-network-cidr Flannel için varsayılan olarak 10.244.0.0/16 kullanılır. --apiserver-advertise-address parametresini Master düğümünüzün IP adresiyle değiştirin.
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=<MASTER_IP_ADRESI>
Bu komut tamamlandığında, kümenizi yönetmek için kullanmanız gereken komutları ve Worker düğümlerini kümeye dahil etmek için gerekli olan kubeadm join komutunu gösterecektir. Bu komutları mutlaka kaydedin!
Kurulumdan sonra, kümenizle etkileşim kurmak için aşağıdaki komutları çalıştırı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 komutu her oturum açtığınızda çalıştırmamak için .bashrc'nize ekleyebilirsiniz.
# echo "export KUBECONFIG=$HOME/.kube/config" >> ~/.bashrc
# source ~/.bashrc
Adım 5: CNI (Container Network Interface) Kurulumu (Yalnızca Master Düğümünde)
Pod’ların birbirleriyle ve küme dışıyla iletişim kurabilmesi için bir CNI eklentisi kurmanız gerekir. Bu rehberde popüler bir seçim olan Flannel’ı kullanacağız.
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
Birkaç dakika bekleyin ve Pod’ların durumunu kontrol edin:
kubectl get pods --all-namespaces
Tüm Pod’lar Running durumunda olmalıdır. Özellikle kube-flannel-*-* Pod’larının çalıştığından emin olun.
Adım 6: Worker Düğümlerini Kümeye Ekleme (Worker Düğümlerinde)
Master düğümünde kubeadm init komutunun çıktısında gördüğünüz kubeadm join komutunu her Worker düğümünde çalıştırın.
sudo kubeadm join <MASTER_IP_ADRESI>:6443 --token <TOKEN> --discovery-token-ca-cert-hash sha256:<HASH>
Eğer kubeadm join komutunu kaybettiyseniz veya token’ın süresi dolduysa, Master düğümünde yeni bir token ve hash oluşturabilirsiniz:
# Yeni token oluşturma
kubeadm token create --print-join-command
# Veya sadece token: kubeadm token create
# CA sertifika hash'ini alma
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 | sed 's/^.* //'
Adım 7: Kümenin Durumunu Kontrol Etme (Yalnızca Master Düğümünde)
Master düğümde tüm düğümlerin kümeye başarıyla katıldığını doğrulayın:
kubectl get nodes
Tüm düğümlerin durumu Ready olmalıdır.
Sorun Giderme
kubectl get nodeskomutu düğümleri “NotReady” gösteriyorsa:sudo systemctl status kubeletvesudo journalctl -u kubelet --no-pagerkomutlarıyla kubelet servisinin loglarını kontrol edin.- Güvenlik duvarı ayarlarını (ufw, firewalld) kontrol edin.
- Swap’ın kapalı olduğundan emin olun.
- CNI eklentisinin (Flannel) doğru kurulduğundan ve podlarının çalıştığından emin olun.
- Kubeadm join hatası alıyorsanız:
- Token’ın süresinin dolup dolmadığını veya yanlış girilip girilmediğini kontrol edin.
--discovery-token-ca-cert-hashdeğerinin doğru olduğundan emin olun.
Sonuç
Tebrikler! Kubeadm kullanarak temel bir Kubernetes kümesi kurmayı başardınız. Artık bu küme üzerinde uygulamalarınızı dağıtabilir, yönetebilir ve ölçeklendirebilirsiniz. Bu rehber temel bir kurulum için bir başlangıç noktasıdır. Üretim ortamlarında yüksek erişilebilirlik, depolama çözümleri ve gelişmiş güvenlik yapılandırmaları gibi konuları araştırmayı unutmayın.
Bir sonraki adım olarak, kümenize örnek bir uygulama dağıtmayı veya Kubernetes Dashboard’unu kurmayı düşünebilirsiniz. Mutlu konteynerleştirmeler!
