İ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 > Ağ 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 > Ağ 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.