Hyper-V üzerinde Kubernetes Cluster Kurulumu
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;
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)
1 x Worker( Ubuntu 20.04)
Ö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 tamamlandı;
Worker tamamlandı;
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.
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ı;
Makinelerdeki kubeadm versiyon kontrolü ile herhangi bir sorun olup olmadığını teyit edelim;
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
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’ı 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.
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
Kurulum tamamlandı. Clusterın ilk deploymentını yapalım. Ben nginx ile devam ediyorum.
kubectl create deployment nginx — image=nginx
kubectl expose deploy nginx — port 80 — target-port 80 — type NodePort
Aşağıdaki komut ile podun hangi nodeda oluştuğunu ve durumunu kontrol edelim;
kubectl get pod -o wide
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.
Teşekkür Notu
Bu yazının yazılmasının temelinde ve kariyerimde önemli yerleri olan, birlikte çalışma şansına sahip olduğum değerli insanlar; Deniz UMUL, Kayra OTANER ve Oğuzhan EREN’e teşekkürler.
Referanslar;