Kubernetes 1.30 Install - Onprem


Gereksinimler
Onprem DNS Server : Windows veya Linux Bind vb 
Yeni kurulmuş ve update edilmiş Rocky Linux 9.3
Sudo ile birlikte admin yetkisine sahip bir kullanıcı veya direkt root user
Her makinede en az 2 vCPU 2 GB ram
Stabil bir internet bağlantısı

Lab ortamı 
ilk olarak DNS Server üzerinde gerekli dns ve sunucu isimlerini açıyoruz.
dns.1w2.io     -> 192.168.1.60 -> Windows Server
master.1w2.io  -> 192.168.1.65 -> Rocky Linux Server
worker1.1w2.io -> 192.168.1.66 -> Rocky Linux Server
worker2.1w2.io -> 192.168.1.67 -> Rocky Linux Server

1 - Linux makinelerin isimlerini aşağıdaki gibi ayarlıyoruz.
sudo hostnamectl set-hostname “master.1w2.io” && exec bash
sudo hostnamectl set-hostname “worker1.1w2.io” && exec bash
sudo hostnamectl set-hostname “worker2.1w2.io” && exec bash

Bu adımda eğer ortamınızda Windows veya Linux DNS sever yok ise kullanın, eğer dns server var ise dns kayıtlarını açmalısınız. Her bi node içindeki /etc/hosts dosyasına aşağıdaki girdileri ekleyin.

192.168.1.65   master.1w2.io
192.168.1.66   worker1.1w2.io
192.168.1.67   worker2.1w2.io


2 - Her node üzerinde takas alanının disable edin. Kubelet' in sorunsuz çalışması için tüm node’ lar takas alanını devre dışı bırakmalıyız. Swap alanının server açılışına eklenmesini de aynı aşamada yapıyoruz. Sırası ile, aşağıdaki komutları çalıştırın,

sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

3 - Kubernetes için SELinux ve Güvenlik Duvarı (Firewall) Kurallarını Ayarlama
Aşağıdaki komutları kullanarak tüm node'lardaki SELinux modunu izinli olarak ayarlayın,
(Bu ayarları her node üzerinde yapıyoruz)

sudo setenforce 0
sudo sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/sysconfig/selinux

Master Node, firewall aşağıdaki bağlantı noktalarına izin verin.

sudo firewall-cmd --permanent --add-port={6443,2379,2380,10250,10251,10252,10257,10259,179}/tcp
sudo firewall-cmd --permanent --add-port=4789/udp
sudo firewall-cmd --reload

Worker Node, firewall alttaki bağlantı noktalarına izin verin,

sudo firewall-cmd --permanent --add-port={179,10250,30000-32767}/tcp
sudo firewall-cmd --permanent --add-port=4789/udp
sudo firewall-cmd --reload

4 - Gerekli Kernel Modüllerini ve Parametreleri ekliyoruz.
Kubernetes cluster için, tüm master ve worker üzerinde overlay ve br_netfilter kernel modüllerini eklemeliyiz.

sudo tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF

Modulleri yüklemek için komutlar aşağıda

sudo modprobe overlay
sudo modprobe br_netfilter

Kernel parametreleri için aşağıdaki dosyayı oluşturup içine satırları ekleyip kayıt ediyoruz. ( vi veya nano kullanılabilir)
sudo vi /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables   = 1
net.ipv4.ip_forward                        = 1
net.bridge.bridge-nf-call-ip6tables = 1

Bu komut ile yaptığımız kernel modul ve parametreleri devreye alıyoruz load yapıyoruz. 

sudo sysctl --system

5 - Containerd Runtime yüklüyoruz ( Docker Yerine )
Kubernetes bir konteyner runtime gerektirir ve en popüler seçeneklerden biri containerd dir. Ancak Rocky Linux varsayılan paket depolarında mevcut değildir, bu nedenle tüm master ve worker nodeler' e aşağıdaki docker deposunu ekleyin.

sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

Şimdi tüm master ve worker nodeler üzerinde containerd yüklemesi yapıyoruz.

sudo dnf install containerd.io -y

Sırada containerd' yi systemdcgroup kullanacak şekilde yapılandırma var, her master ve worker node  üzerinde aşağıdaki komutları çalıştırın.

containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml

Containerd servisini restart ediyoruz ve server açılışına ekliyoruz her master ve worker node üzerinde yapıyoruz.

sudo systemctl restart containerd
sudo systemctl enable containerd

Containerd çalışma durumunu bir kontrol edelim her master ve worker node üzerinde yapıyoruz.

sudo systemctl status containerd

6 - Kubernetes araçlarını (tools) yüklüyoruz.

Kubeadm, kubectl ve kubelet gibi Kubernetes araçları Rocky Linux 9'un varsayılan paket depolarında mevcut değildir. Bu nedenle, bu araçları yüklemek için aşağıdaki depoyu her master ve worker node üzerinde ekleyin.

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.30/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.30/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF


Not: Bu yazının yazıldığı sırada Kubernetes 1.30 sürümü mevcuttur, bu nedenle depoyu eklerken v1.30'dan bahsettim.

Sırada aşağıdaki komut ile Kubernetes araçları kubeadm kubectl ve kubelet yüklemelerini her master ve her node üzerine yüklüyoruz.
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

 

Kubernetes araçlarını yükledikten sonra, kubelet servisini her master ve her node üzerinde server  açılışına ekliyoruz.

sudo systemctl enable --now kubelet

7- Kubernetes yüklemsine başlıyoruz şimdi :) 

Şimdi, Kubernetes kurmaya kurmaya hazırız. Kubernetes cluster' in master node' dan başlatmak için Kubeadm komutunu aşağıdaki gibi çalıştırın. Komut satırının sonundaki server ismine dikkat ederek ve değiştirerek komutu uygulayınız.

sudo kubeadm init --control-plane-endpoint=master

Yukarıdaki komut sonrasında aşağıdaki gibi bir çıktı vermesi gerekiyor master node. Burada alt satırda bulunan resimde sarı ve sarı okla işaretlediğim alanda isin worker node' larınızı cluster ortamına eklemek için gerekli olan komut satırlarını göreceksiniz bu alanı bir notapad e kayıt etmeniz sizin için iyi olacaktır. Hatta prod ortamınıza sonradan cluster' e ekleme yaparkende kullanabileceksiniz.

örnek : 

kubeadm join master:6443 --token 5hihin.pd0x69fm9c84lj0l \

        --discovery-token-ca-cert-hash sha256:358499b111f8b3e6da00add3eba8b58bce57c36d9768e30bd1f3caa7ef532e1d

Sürece master node üzerinde işlem yaparak devam ediyoruz aşağıdaki komutları girerek.

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

Arkasından yukarıda örneği ve resimde işaretli alandaki komut ile worker node' ları cluster içine ekliyoruz.

kubeadm join master:6443 --token 5hihin.pd0x69fm9c84lj0l \
--discovery-token-ca-cert-hash sha256:358499b111f8b3e6da00add3eba8b58bce57c36d9768e30bd1f3caa7ef532e1d

Her worker node üzerinde komut çalıştırıldıktan sonra aşağıdaki resimlerdeki gibi çıktıları almanız gerekiyor.

Worker1

Worker2


Sonrasında Master node arayüzüne geçip aşağıdaki komutu çalıştırıyoruz.

kubectl get nodes


Buraya kadar bir cluster kurulumunu yaptık ve bitirdik ama default olarak birkaç ekleme yapmamız lazım ki en önemlisi network ayarı ve yönetimi bunun için 8. adımdan devam ediyoruz. Zaten resimde not ready yani network yok iletişim yok diye sadece status bölümünü istediğimiz gibi göremiyoruz birkaç adım sonra görebileceğiz ok.

8 - Calico Network Addon yüklemesi
Kubernetes cluster içinde podlar arasında iletişimi sağlamak, DNS hizmetinin küme ile çalışmasını sağlamak, master ve worker durumunu Hazır hale getirmek için Calico network addın gereklidir.
calico CNI (Container Network Interface) eklentisini yüklemek için aşağıdaki kubectl komutlarını yalnızca master node üzerinden çalıştırmalısınız.

kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.3/manifests/calico.yaml

Calico yüklemesi sonrasında bir süre bekleyip aşağıdaki komut girelim bu komut calico pod durumlarını kontrol ediyor ve status durumları running modda olmalıdır.

kubectl get pods -n kube-system


Test öncesinde cluster durumu gözlemleyelim artık not ready bölümü resimde görebileceğiniz gibi ready hale geldi calico install sonrasında 
kubectl get nodes

Buraya ekstra bir not: Kubernetes Cluster kurulumu bittikten sonra ekranda 
kubectl get nodes ekran çıktısında worker node role ataması için aşağıdaki komut kullanılabilir.

kubectl label node worker1.1w2.io node-role.kubernetes.io/worker=worker
kubectl label node worker2.1w2.io node-role.kubernetes.io/worker=worker
Eklenen label silmek içinde aşağıdaki komutu kullanabilirsiniz

kubectl label node worker1.1w2.io node-role.kubernetes.io/worker- (sondaki isim ve - işareti çok önemli )
kubectl label node worker2.1w2.io node-role.kubernetes.io/worker- (sondaki isim ve - işareti çok önemli )

 Bu makaleyi 2024 Mayıs ta yazdım ama yayınlamak yeni nasip oldu bilgilerinize. :) 

Daha yeni Daha eski