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.