Bu makalede, Kubernetes cluster kurulumunun temel adımlarını anlatacağım. Kubernetes, konteyner tabanlı uygulamaları dağıtmak ve yönetmek için kullanılan açık kaynaklı bir orkestrasyon platformudur.

2 Node’lu(Master ve Worker) kubernetes cluster kurulumu yapacağız.
Öncelikle 2 tane makine oluşturup, güncellemelerini yükleyin.

Kubeadm yüklemek için, hazırlanan scripti indirip çalıştırın.

sudo su -
curl https://raw.githubusercontent.com/celenksercan/K8S-Full/main/Kubeadm/1-Kubernetes-Install/k8s.sh | bash -

Kubeadm yüklendikten sonra  kubelet, kubeadm, kubectl’i hold moda alacaktır.
Paketlerin otomatik güncellemeleri, mevcut Kubernetes cluster’ınızın istikrarını bozabilir. “hold” işlemi, paketlerin otomatik güncellemelerini engeller ve böylece mevcut Kubernetes cluster’ınızın beklenmedik şekilde etkilenmesini önler.

Kubeadm yüklendikten sonra, version’unu kontrol edin.

kubeadm version

Swap’ı disable etmek için aşağıdaki kodları çalıştırın.

curl https://raw.githubusercontent.com/celenksercan/K8S-Full/main/Kubeadm/1-Kubernetes-Install/swap-disable.sh | bash -

Swap’in kapandığını kontrol edin.

free -h

Network ayarlarını yapılandırın.

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

Docker’i yükleyebilmek için, sertifikayı yükleyin.

sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates

Docker’i yükleyin, ben containerd ile ilerliyorum.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

Update repo’sunu tekrardan güncelleyin.

sudo apt update

Containerd’i yükleyin.

sudo apt install -y containerd.io

Aşağıdaki kodları sırasıyla çalıştırın.

sudo su -
mkdir -p /etc/containerd
containerd config default>/etc/containerd/config.toml

sudo systemctl restart containerd
sudo systemctl enable containerd
sudo systemctl status containerd

Görüldüğü üzere Containerd sorunsuz çalışmaktadır.

SystemdCgroup’u True olarak ayarlamanız gerekmektedir.
Öncelikle kontrol edin

cat /etc/containerd/config.toml | grep SystemdCgroup
sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml

Network ayarları için aşağıdaki kodları çalıştırın. Sistem başlangıcında kubelet’i enable edin.

lsmod | grep br_netfilter
sudo systemctl enable kubelet

Kubeadm image’ını indirin.

sudo kubeadm config images pull

Ardından container socket bağlantısını yapın.

--cri-socket /run/containerd/containerd.sock kodu, Kubernetes tarafından kullanılan Container Runtime Interface (CRI) ile iletişim kurmak için Containerd tarafından kullanılan Unix soketini belirtir. Bu soket, Kubernetes ile Containerd arasındaki iletişimi sağlar ve Kubernetes’in konteynerleri oluşturmasını, yönetmesini ve sürdürmesini mümkün kılar.

sudo kubeadm config images pull --cri-socket /run/containerd/containerd.sock

Sıra geldi host kayıtlarını girmeye, master node’m için 2 adet kayıt oluşturuyorum.

Artık sıra Kubernetes Cluster’ının başlatılması ve master node’n yapılandırılmasında.

sudo modprobe br_netfilter
echo '1' > /proc/sys/net/ipv4/ip_forward
sudo kubeadm init --control-plane-endpoint="k8s-prod:6443" --apiserver-advertise-address=172.31.23.154 --node-name k8s-master --pod-network-cidr=172.31.0.0/24

Cluster başarıyla oluşturuldu ve başlatıldı. Çıktı ekranın altına indiğimizde bize kubeadm join ile başlayan iki adet kod satırı verecek.

Control Plane Katılma Kodu:

  • kubeadm join komutu ile verilen bir “control-plane” katılma kodu, yeni bir Kubernetes master düğümünü cluster’a katılmasını sağlar.
  • Bu kod, yeni bir master düğümünün kontrol düğümü (control plane) olarak katılmasına izin verir. Yani bu düğüm, cluster’ın yönetimini üstlenir ve API sunucusunu barındırır.

Token ile Başlayan Katılma Kodu:

  • “token” ile başlayan katılma kodları, yeni bir çalışan (worker) düğümünün cluster’a katılmasını sağlar.
  • Bu kodlar, mevcut bir Kubernetes cluster’ına yeni bir worker düğümünün katılmasına olanak tanır. Worker düğümleri, uygulamaların çalıştığı düğümlerdir ve master düğümleri tarafından yönetilir.
  • Worker düğümleri, cluster’da pod’ların çalıştırılması ve uygulamaların dağıtılması gibi görevleri üstlenir.

Biz 1 adet worker node ekleyeceğimiz için alttaki kırmızı kutu içerisine aldığım kod bloğunu not edin.

Kubernetes Cluster’la etkileşime geçebilmek için aşağıdaki kodları tek tek çalıştırın.
Kubernetes Cluster ile etkileşimde bulunmak için kubectl komutunu kullanmanızı kolaylaştıran temel yapılandırmayı yapmanıza yardımcı olur.

Ardından komutuyla mevcut node’u görüntüleyebilirsiniz.

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

Node’u detaylı görüntülemek isterseniz;

kubectl get nodes -owide

Sıra worker node’u yapılandırmada.
Worker node’n, Master node’u FQDN ile çözebilmesi için worker node’n host kayıtlarını girin.

Şimdi worker node’u cluster’a join edin. Önce aşağıda kodları tek tek çalıştırın, ardından daha önce kopyaladığınız kubeadm join kod bloğunu yapıştırın.

sudo modprobe br_netfilter
echo '1' > /proc/sys/net/ipv4/ip_forward

Master node yani cluster üzerinden node’ları kontrol ettiğinizde, worker node’n clustera eklendiğini göreceksiniz.
Eğer host or port hatası alırsanız, aşağıdaki kodları ç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

Node’lar şuanda Not Ready durumda. Ağ segmentasyonu için Weave kullanacağım, Weave dışında, Calico, Flannel ve Cilium gibi diğer ağ çözümleri de popülerdir.
Aşağıdaki kodları çalıştırın. Ardından node’ları çağırın.

kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml
kubectl get nodes -owide

Node’ların Ready durumuna geçtiğini göreceksiniz.

—————————————————————————————————————

Şimdi Kubernetes Dashboard’ı kurmak için aşağıdaki kodu çalıştırın.

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

Admin-user oluşturmak için, admin-user.yaml adında bir dosya açın ve aşağıdaki yaml’ı yapıştırın.

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

Editörden çıkıp, oluşturduğunuz yaml’ı apply edin.

kubeclt apply -f admin-user.yaml

Kubernetes dashboard’ınızı bir domainde hostlamak istiyorsanız, cluster dış ip’nizi A kaydı olarak panelinize ekleyin.
Ben dash.sercancelenk.com adında bir A kaydı oluşturdum.

Sıra kubernetes dashboard’ı expose etmede. Aşağıdaki kodu çalıştırın.

kubectl port-forward -n kubernetes-dashboard service/kubernetes-dashboard 8443:443 --address 0.0.0.0

https://dash.sercancelenk.com:8443/#/login adresine gittiğimde dashboardıma sorunsuz erişiyorum. Login olabilmek için token üretmemiz gerekiyor.

Token oluşturmak için aşağıdaki kodu çalıştırın. Verdiği çıktıyı kopyalayıp, dashboard login kısmına yapıştırın.

kubectl -n kubernetes-dashboard create token admin-user

Verdiği çıktıyı kopyalayıp, dashboard login kısmına yapıştırdığınızda, başarılı bir şekilde login olduğunuzu göreceksiniz.