Kubeadm ile Üretim Ortamına Yakın Kubernetes Cluster Kurulumu
Kubernetes, konteynerize edilmiş uygulamaları otomatik olarak dağıtmak, ölçeklemek ve yönetmek için güçlü bir platformdur. Bir Kubernetes kümesi kurmanın birçok yolu olsa da, Kubeadm, resmi ve en çok tercih edilen yöntemlerden biridir. Bu rehberde, Kubeadm kullanarak temel bir Kubernetes kümesini adım adım nasıl kuracağınızı detaylı bir şekilde anlatacağız. Rehber, üretim ortamına yakın bir yapılandırma sağlamayı hedefler.
Ön Koşullar
Kuruluma başlamadan önce aşağıdaki gereksinimleri karşıladığınızdan emin olun:
- İşletim Sistemi: Ubuntu 20.04/22.04 LTS veya CentOS 7/8. Bu rehberde Ubuntu 22.04 referans alınacaktır.
- Sunucular: En az 2 sunucu (1 Master Düğüm, 1 Worker Düğüm). Fiziksel sunucular, sanal makineler veya bulut örnekleri olabilir.
- Donanım Gereksinimleri (Her Düğüm için minimum):
- 2 vCPU
- 2 GB RAM
- 20 GB Disk alanı
- Ağ: Düğümler arasında tam ağ bağlantısı (internete erişim).
- Hostname’ler: Her düğüm için benzersiz bir hostname.
- Ayrıcalıklar: Tüm adımları gerçekleştirmek için root ayrıcalıklarına sahip veya
sudoyetkisi olan bir kullanıcı. - Açık Portlar:
- Master Düğüm: 6443 (Kubernetes API sunucusu), 2379-2380 (etcd), 10250 (Kubelet API), 10251 (Kube-scheduler), 10252 (Kube-controller-manager)
- Worker Düğümler: 10250 (Kubelet API), 30000-32767 (NodePort hizmetleri için)
Tüm Düğümlerde Ortak Adımlar (Master ve Worker)
Aşağıdaki adımlar, hem Master hem de Worker düğümlerinde uygulanmalıdır.
1. Sistem Güncellemesi ve Temel Paket Kurulumu
sudo apt update && sudo apt upgrade -y
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
2. Swap Alanını Devre Dışı Bırakma
Kubernetes, kararlılık ve performans nedenleriyle swap alanının devre dışı bırakılmasını önerir.
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
3. Kernel Modüllerini ve Sysctl Parametrelerini Yapılandırma
Kubernetes ağının düzgün çalışması için bazı kernel modüllerinin yüklenmesi ve sysctl parametrelerinin ayarlanması gerekir.
sudo modprobe overlay
sudo modprobe br_netfilter
# Gerekli sysctl parametrelerini ayarla
sudo tee /etc/modules-load.d/k8s.conf <
4. Container Runtime Kurulumu (Containerd)
Kubernetes, Pod'ları çalıştırmak için bir Container Runtime Interface (CRI) uyumlu bir çalışma zamanına ihtiyaç duyar. Containerd, Docker'a göre daha hafif ve Kubernetes ile daha entegre bir seçenektir.
Docker'ın GPG anahtarını ve deposunu ekleyin:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
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
sudo apt update
Containerd'yi kurun:
sudo apt install -y containerd.io
Containerd yapılandırma dosyasını oluşturun ve systemd cgroup sürücüsünü etkinleştirin:
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml
# SystemdCgroup = true olarak değiştirin
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
Containerd servisini yeniden başlatın ve etkinleştirin:
sudo systemctl restart containerd
sudo systemctl enable containerd
5. Kubeadm, Kubelet ve Kubectl Kurulumu
Bu araçlar, Kubernetes kümesini yönetmek için temel bileşenlerdir.
Kubernetes GPG anahtarını ve deposunu ekleyin:
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
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
Not: kubernetes-xenial, Kubernetes'in Ubuntu üzerinde kullandığı bir depodur. Ubuntu sürümünüz ne olursa olsun genellikle bu şekilde kullanılır.
Kubeadm, Kubelet ve Kubectl'yi kurun:
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
apt-mark hold komutu, bu paketlerin otomatik olarak yükseltilmesini engeller, bu da kararlılık için önemlidir.
Master Düğümünde Yapılacaklar
Sadece Master düğümünde aşağıdaki adımları uygulayın.
1. Kubeadm ile Küme Başlatma
kubeadm init komutu, kontrol düzlemi bileşenlerini (API sunucusu, etcd, scheduler, controller-manager) başlatır. --pod-network-cidr parametresi, Pod'lar için kullanılacak ağ aralığını belirtir ve bu, seçeceğiniz ağ eklentisi (CNI) ile uyumlu olmalıdır. Flannel için genellikle 10.244.0.0/16 kullanılır.
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
Bu komutun çıktısında, worker düğümlerinin kümeye katılması için kullanacağınız kubeadm join komutu yer alacaktır. Bu komutu not alın!
2. Kubectl için Yapılandırma
Kubernetes kümesini yönetmek için kubectl komutunu kullanabilmeniz için yapılandırma dosyasını kopyalamanız gerekir.
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
3. Ağ Eklentisi (CNI) Kurulumu
Pod'lar arasında iletişimi sağlamak için bir ağ eklentisi kurmanız gerekir. Bu rehberde popüler ve kurulumu kolay olan Flannel'ı kullanacağız. Diğer popüler seçenekler arasında Calico, Cilium vb. bulunur.
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
Ağ eklentisi kurulduktan sonra, Master düğümünüzün durumunun NotReady'den Ready'ye değiştiğini göreceksiniz. Bu biraz zaman alabilir.
4. Düğüm Durumunu Kontrol Etme
Master düğümünün durumunu kontrol edin:
kubectl get nodes
Başlangıçta Master düğümünüz NotReady durumunda görünebilir. Ağ eklentisi kurulduktan ve Pod'lar çalışmaya başladıktan sonra Ready durumuna geçecektir.
Worker Düğümlerinde Yapılacaklar
Her bir Worker düğümünde aşağıdaki adımı uygulayın.
1. Cluster'a Katılma
Master düğümünde kubeadm init komutunun çıktısında size verilen kubeadm join komutunu Worker düğümlerinde çalıştırın. Örnek bir komut aşağıdaki gibi olacaktır (kendi token ve hash değerlerinizle değiştirin):
sudo kubeadm join <MASTER_IP>:6443 --token <TOKEN> --discovery-token-ca-cert-hash sha256:<HASH>
<MASTER_IP> yerine Master düğümünüzün IP adresini, <TOKEN> ve <HASH> yerine kendi değerlerinizi yazın.
Eğer kubeadm join komutunu kaybettiyseniz, Master düğümünde aşağıdaki komutu çalıştırarak yeni bir token oluşturabilir ve katılma komutunu alabilirsiniz:
sudo kubeadm token create --print-join-command
Kurulumu Doğrulama
Master düğümüne geri dönerek tüm düğümlerin kümeye katılıp katılmadığını ve hazır olup olmadığını kontrol edin:
kubectl get nodes
Tüm düğümlerinizin durumu Ready olarak görünmelidir.
Kümedeki tüm namespace'lerde çalışan Pod'ları kontrol edin:
kubectl get pods --all-namespaces
kube-system namespace'indeki Pod'ların (CoreDNS, kube-flannel, vs.) Running durumda olduğunu görmelisiniz.
Önemli Notlar ve Sonraki Adımlar
- Master Düğümdeki Taint: Varsayılan olarak, Master düğüm üzerinde Pod'ların zamanlanmasını engelleyen bir
NoScheduletaint'i bulunur. Eğer Master düğümünüzde uygulama Pod'ları çalıştırmak istiyorsanız, bu taint'i kaldırabilirsiniz:kubectl taint nodes <master-node-adı> node-role.kubernetes.io/control-plane:NoSchedule-(Eski versiyonlarda
node-role.kubernetes.io/master:NoSchedule-olabilir.) - Kubernetes Dashboard: Kümenizi görsel olarak yönetmek için Kubernetes Dashboard kurmayı düşünebilirsiniz.
- Depolama Sınıfları (StorageClasses): Persistent Volume'lar için depolama sınıflarını yapılandırmanız gerekecektir.
- Yüksek Erişilebilirlik (HA): Bu rehber tek bir Master düğümü ile temel bir kurulumu kapsamaktadır. Üretim ortamları için birden fazla Master düğümü ile Yüksek Erişilebilirlik (HA) kurulumu planlamak önemlidir. Kubeadm, bu tür kurulumları da destekler.
- Güvenlik: Kümenizin güvenliğini sağlamak için RBAC (Role-Based Access Control) politikalarını, ağ politikalarını ve diğer güvenlik önlemlerini yapılandırmayı unutmayın.
Sonuç
Tebrikler! Kubeadm kullanarak temel bir Kubernetes kümesini başarıyla kurdunuz. Bu temel kurulumla, konteynerize edilmiş uygulamalarınızı dağıtabilir, yönetebilir ve ölçeklendirebilirsiniz. Kubernetes dünyasına attığınız bu ilk adımla, daha karmaşık ve güçlü yapılandırmaları keşfetmeye hazırsınız. Unutmayın, Kubernetes dinamik bir platformdur ve sürekli öğrenme gerektirir.
