Hyper-V üzerinde Kubernetes Cluster Kurulumu

Kemal Meler
Devops Türkiye☁️ 🐧 🐳 ☸️
5 min readMay 6, 2022

Herkese Merhaba,
Daha önce belki 100'lerce yazı okumama rağmen ilk defa Mediumda yazıyorum o yüzden muhtemelen hatalar olacaktır. kemal@kemalmeler.com mail adresi üzerinden düzeltme ve iyileştirme ile ilgili feedbacklerinizi iletebilirsiniz. Şimdiden teşekkürler.

Kısa k8s Bilgisi;
“Kubernetes” kelimesinin ilk ve son harfi arasında 8 karakter olduğu için, çoğu kaynakta “k8s”olarak kısaltılıyor. Google tarafından, GO dilinde geliştirildi ve ilk olarak 2014 yılında open source olarak paylaşıldı. Google yaklaşık 15 yıldır kendi altayapısını kubernetes ile yönetiyor.
Daha detaylı bilgi için DevOps Türkiye Medium sayfasını inceleyebilirsiniz;

#InfoOnSecurity
k8s architecture
#tbt

Başlıktan da anlaşılacağı gibi bu yazımda Hyper-V üzerinde k8s cluster kuracağız. K8s cluster kurmak istiyorsanız minimum iki node’a ihtiyacınız var. 1 master node, 1 worker node. Sizin yapınızda gereklilik durumuna göre bu sayıyı arttırabilirsiniz.

Direkt cluster kurulumuna geçebilmek için makinelerde standart ayarlamaları daha önceden yaptım.
Lab ortamım;
Windows Server 2019(Hyper-V)
1 x Master ( Ubuntu 20.04)

Master Conf

1 x Worker( Ubuntu 20.04)

Worker Conf

Öncelikle hem master’a hem worker’a, sırasıyla docker, kubectl ve kubeadm kuracağız. Sonrasında master ve worker a ayrı ayrı kurulumlar yaparak cluster yapısını tamamlayacağız.

Paketleri güncelliyoruz. Bu ekranda “y” ile devam ediyoruz.

Master
Worker

Master tamamlandı;

Worker tamamlandı;

Worker

Docker kurulumu

curl -fsSL https://get.docker.com -o get-docker.sh

sudo sh get-docker.sh

Yukarıdaki komutlar ile kurulumları tamamladıktan sonra,

systemctl status docker

komutu ile servisi kontrol ediyoruz. Aşağıda gördüğünüz üzere master ve workerda docker servisi başarıyla kuruldu ve çalışıyor.

Master
Worker

Kubectl ve Kubeadm kuralım;

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

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

echo “deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main” | sudo tee /etc/apt/sources.list.d/kubernetes.list

sudo apt-get install -y kubelet kubeadm kubectl

Yukarıdaki adımda “No apt package “kubeadm”, but there is a snap with that name.” hatası alırsanız,
sudo apt-add-repository “deb http://apt.kubernetes.io/ kubernetes-xenial main”
komutu ile çözebilirsiniz.

sudo apt-mark hold kubelet kubeadm kubectl

Yukarıdaki komutlar sonrası, makinelerimizdeki en son görüntüler aşağıdaki gibi olmalı;

Master
Worker

Makinelerdeki kubeadm versiyon kontrolü ile herhangi bir sorun olup olmadığını teyit edelim;

Master
Worker

Swap’ı kapatalım;

sudo swapoff -a

Önce masterda ayarlarımızı yapacağız sonrasında worker nodea geçeceğiz.

IP bloğumuzu oluşturuyoruz, siz kendi IP bloğunuz ile güncelleyebilirsiniz.

sudo kubeadm init — pod-network-cidr=10.244.0.0/16

Master

Aşağıdaki komut ile devam ediyoruz.

export KUBECONFIG=/etc/kubernetes/admin.conf

Sıra worker node ayarlamasında. Pod network ayarını girdiğimiz(2 adım önce) komut çıktısında yer alan, worker node’un master node’a katılımını sağlayacak kodu giriyoruz. (Bu kod sizde farklı olacaktır, aşağıdaki benim lab ortamıma özel..)

kubeadm join xx.xx.xx.xx:6443 — token r3e6pp.3thxv2ze1aehvm7j \
— discovery-token-ca-cert-hash sha256:5ce2e1ba5e84ce3ca9212089aaf0f282e23a741ed3ba7dd5c6576fdede43c9e1

Worker

Worker’ı başarılı bir şekilde Master node’a tanıttık. Bu işlemin sağlamasını yapıp aşağıdaki komut ile cluster durumunu kontrol edebiliriz.

Master

Görüldüğü gibi durumları “NotReady”. Son olarak Podların birbiriyle iletişim kuracağı, Pod Networkü oluşturacağız. Aşağıdaki komut ile pod ağını oluşturalım.

sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Master

Kurulum tamamlandı. Clusterın ilk deploymentını yapalım. Ben nginx ile devam ediyorum.

kubectl create deployment nginx — image=nginx

Master

kubectl expose deploy nginx — port 80 — target-port 80 — type NodePort

Master

Aşağıdaki komut ile podun hangi nodeda oluştuğunu ve durumunu kontrol edelim;

kubectl get pod -o wide

Master
Networkte herhangi bir cihaz

Kubernetes clusterımızı oluşturmuş olduk. Bir kaç kez kontrol ettim fakat elbet gözden kaçan hatalar olmuştur. Yazının başındada belirttiğim gibi feedbacklerinizi iletmenizden memnuniyet duyacağım.

--

--