Local Kubernetes Multi-Node Cluster Kurulumu (On Premise)

İlk olarak

Eğer düşük kaynaklı bir bilgisayarınız varsa ve kubernetes'i denemek istiyorsanız, single node bir cluster için minikube kullanabilirsiniz.

"Yok ben sanal makineler oluşturup, lokalimde multi-node bir kubernetes cluster yapısı kurmak istiyorum." diyorsanız.

Doğru yerdesiniz :)

1) Sanal Makine Oluşturmak

Ubuntu Desktop ve VirtualBox indirip, kuruyoruz.

Ben İşletim sistemi ve Hypervisor olarak bunları kullanacağım, alternatiflerini de kullanabilirsiniz.

 

Daha sonra VirtualBox üzerine KubernetesBase adında bir sanal makine oluşturuyoruz. Bunun yapmamızın sebebi ileride KubernetesMaster ve KubernetesWorker1 sanal makinelerini bu klon üzerinden kolayca oluşturabilmektir. VirtualBox üzerine Ubuntu kurulumunu burada yazmıyorum, internette bir sürü kaynak var.

KubernetesBase sanal makinemizi kurduktan sonra konfigurasyonlarını aşağıdaki komutlarla sırasıyla yapıyoruz.

İlk olarak güncellemelerimizi yapıyoruz. 

sudo su
apt-get update

 Swap alanı, RAM miktarı ihtiyacı karşılamadığı durumlarda kullanmak için işletim sisteminin hard disk üzerinde geçici olarak kullandığı alandır. Kubernetes swap açıkken stabil çalışmamaktadır. O yüzden kapatıyoruz.

sudo swapoff -a
sudo nano /etc/fstab

/etc/fstab dosyasında swap ile başlayan satırı yoruma alıyoruz.

CTRL + X ve y tuşuna basıp, kaydediyoruz.

Aşağıda ki komutları sırayla çalıştıralım.

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

sudo modprobe overlay
sudo modprobe br_netfilter

 

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

Yukarıdaki değişiklikleri yeniden yüklemek için, aşağıdaki komutu çalıştırın.

sudo sysctl --system

Master ve Worker sunucularının ip adreslerinin hosts dosyasına giriyoruz.

sudo nano /etc/hosts

CTRL + X ve y tuşuna basıp, kaydediyoruz.

Docker ve Container.d kuruyoruz.

sudo apt-get update
sudo apt-get install ca-certificates curl gnupg

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Containerd'yi, systemd'yi cgroup olarak kullanmaya başlayacak şekilde yapılandı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

Docker ve Container.d başlatma ve başlangıçta çalıştırma

sudo systemctl start docker
sudo systemctl enable docker

sudo systemctl restart containerd
sudo systemctl enable containerd

Kubernetes Kurulumu

sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl

curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg

echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | 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

sudo systemctl enable kubelet
sudo systemctl start kubelet

Son olarak Kubernetes dosyalarını kurduktan sonra KubernetesBase sanal makinesini kapatıyoruz ve KubernetesMaster ve KubernetesWorker1 klonunu VirtualBox üzerinden alıyoruz.

2) KubernetesMaster kurulumu

 

Klon aldığımız KubernetesMaster sanal makinesini çalıştırmadan önce VirtualBox üzerinde sağ tıklayıp Ayarlar > sekmesine giriyoruz.

Bilgisayarımız ve Sanal makinelerimizin birbiriyle aynı ağda olması gerekiyor. Daha sonra sanal makinemizi başlatıyoruz. Ağ ayarlarından ip adresini aşağıdaki gibi değiştiriyoruz.

IP Değişikliklerinin güncellenmesi için ağ bağdaştırıcısını kapatıp, tekrar açın.

Hostname'i değiştiriyoruz.

sudo hostnamectl set-hostname kubernetesmaster

Kubernetes Master üzerinden Clustur'ı başlatıyoruz. Biraz uzun sürebilir, terminalini kapatmayın.

sudo kubeadm init

Kurulum bittikten sonra aşağıdaki bir çıktı alıyoruz.

Yukarıda ilk kutucukta yazılan kodları kopyalayıp çalıştırıyoruz.

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

İkinci kutudaki komutu kopyalıp bir yerde saklayalım. İleride KubernetesWorker'i dahil etmek için kullanacağız.

Core DNS'in çalışabilmesi için, bir network provider kullanıyoruz.

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

Kubernetes Dashboard (Web UI) kurulumu

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

Dashboard için kullanıcı oluşturuyoruz

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard
EOF

Token'ı aşağıdaki komut ile alıyoruz.

kubectl -n kubernetes-dashboard create token admin-user --duration=8760h

 Son kullanma tarihi -duration=87600h 10 Yıl olarak belirledik. Dilerseniz farklı bir değer verebilirsiniz.

Yukarıdaki token'ı kopyalıyoruz.

Dashboard'ı çalıştırıyoruz.

kubectl proxy

http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/ adresine gidiyoruz.

Kopyaladığımız token'ı buraya yapıştırıyoruz.

Dashboard kurulumu tamamlanmıştır.

 

Sadece KubernetesMaster'ı kuracaksanız veya KubernetesMaster'ında worker node gibi çalışmasını istiyorsanız aşağıda kurulumunu tamamladıktan sonra:

kubectl taint node kubernetesmaster node-role.kubernetes.io/control-plane:NoSchedule-

komutunu çalıştırınız.

3) KubernetesWorker1 kurulumu

Klon aldığımız KubernetesWorker1 sanal makinesini çalıştırmadan önce, VirtualBox üzerinden sağ tıklayıp Ayarlar >  sekmesine giriyoruz.

Sanal makinemizi çalıştırdıktan sonra ilk olarak ip ayarlarını yapıyoruz.

Hostname'i değiştiriyoruz.

sudo hostnamectl set-hostname kubernetesworker1
KuberneteMaster kubeadm init komutunun çıktısında kopyaladığımız komutu çalıştırıyoruz.
kubeadm join 192.168.1.101:6443 --token c4jhek.2wh4iglwrz2p6766 
\ --discovery-token-ca-cert-hash sha256:46c173219f29d1c86826e9bc5c2583d2d033fda3e65fa0bb30bbfc2b43d3f6bc

 Her şey yolunda giderse şöyle bir çıktı alacağız.

Bu komut ile istediğimiz kadar node ekleyebiliriz.

Sağlıcakla kalın.

Yorumlar kapalı