İçeriğe geç

AWS Cloud Üzerinde Ubuntu Server 20.04 LTS EC2 Sanal Makinenin Üstüne Kubernetes Master ve Slave Kurulumu ve Ayarları

Merhaba Sevgili okuyucu. Bugün bu blog yazısında sizlerle birlikte AWS Cloud Üzerinde iki adet EC2 Makinesi açarak ve içine Linux İşletim Sistemine sahip Ubuntu Server 20.04 LTS İşletim Sistemini yükleyeceğiz. Gerekli ağ ayarlarını yaparak Sanal makineleri birbirine AWS Cloud Websitesi üzerinden bağlayacağız. Ardından bu iki Sanal Makineye uzaktan bağlanarak içine ilk önce Docker Uygulaması ardından Kubernetes Kubeadm, Kubelet ve Kubectl komut satırlarını yükleyerek ayağa kaldıracağız. Master Sanal Makinesinde “kubeadm init” komutunu kullanarak Kubernetes uygulamasını ayağa kaldıracağız ardından Worker Sanal makinesinde “kubeadm join” komut satırını yazarak Master Sanal Makinesine bağlayacağız. Öncelikle Neden Kubernetes uygulamasını kullanıyoruz onu anlamalıyız. Gelin birlikte Kubernetes uygulamasına genel bakış atıp hızlıca sistemlerimizi ayağa kaldıralım.

Kubernetes Nedir?

Kubernetes, yazılım dağıtımını, ölçeklendirmeyi ve yönetimini otomatikleştirmek için açık kaynaklı bir kapsayıcı düzenleme sistemidir. Google başlangıçta Kubernetes’i tasarladı, ancak Cloud Native Computing Foundation artık projeyi sürdürüyor. Kubernetes, Docker, Containerd ve CRI-O ile çalışır.

Devamını okumak istiyorsanız buraya tıklayın.

EC2 Makinesinin Kurulumu ve Linux Ubuntu Server 20.04 LTS İşletim Sisteminin Kurulumu

Sevgili okuyucu biz burada aslında Kubernetes sistemini önceki blog yazılarımda yazdığım uygulamaları Docker uygulaması yerine Kubernetes sisteminin içine kurup ayağa kaldırmak ve yönetmek olacaktır. AWS Cloud Websitesinde iki adet EC2 Sanal Makinesini kurup konfigurasyon işlemlerini uygulayacağız. Eğer örnek olarak bir EC2 Sanal Makinesinin kurulumunu merak ediyorsanız buraya tıklayarak blog yazımı okumalı ve bu yazıya devam etmelisiniz. Çünkü Bir önceki blog yazısında örnek olarak bir EC2 Sanal Makinesi nasıl kurulur, kurulurken kaç adet madde vardır, o maddelerde ne yapmalıyız gibi soruların cevapları vardır.

Master EC2 Sanal Makinesinin Kurulumu

Sevgili okuyucu bir önceki blog yazısını okuduktan sonra bazı maddelere dikkat çekmemiz gerekmektedir. Bunları teker teker uygulayalım.

Birinci olarak ben Application OS Images (AMI) bölümünde free tier eligable checkbox bölümünü işaretleyerek Linux Altyapısına Sahip Ubuntu Server 20.04 LTS İşletim Sistemini kurdum. Çünkü en iyi bildiğim sistemlerden birisidir.

İkinci olarak önemli olan Instance Type bölümüdür. Burada CPU adetini minimum 2gb Ram adetini minimum 2gb seçmeniz gerekmektedir. Ben söylemiyorum Kubernetes sisteminin minimum ayarıdır.

Üçüncü olarak Key Pair bölümünü zaten önceki blog yazımda yazdığım için geçerek ve şuanlık Network Settings ayarlarını geçip bitirip sistemimizi aktive ediyoruz.

Önemli Durum: Worker Sanal Makinesinin Ayarlarını Yaptıktan sonra Bu Maddeyi Uygulayınız..

Sevgili okuyucu bu maddeyi Worker EC2 Sanal Makinesinin kurulumu adlı başlığı uyguladıktan sonra buraya uğrayınız.

Burada aslında bu maddenin önemli olmasının sebebi Worker Sanal Makinesinin Master Sanal Makinesine bağlanırken 6443 nolu Port numarasını Ubuntu İşletim Sistemi içinden açsak da AWS Cloud yönetimi bu iki makinenin bağlanmasını engelliyor. Bunun çözümü olarak Security Group sekmesine gelip Master EC2 Sanal Makinenin Security Group ayarlarına gelip 6443 nolu port adresini bağlamamız gerekiyor. Gelin Bunu nasıl yaptığımızı gösterelim.

Ardından Master EC2 Sanal Makinesinin Security Group ID kısmına basıp içine gireceğiz. Benim Burada “launch-wizard-1” yer alıyor. Bu ID bölümüne tıkladıktan sonra “edit inbound rules” butonuna tıklayıp gerekli eklemeyi yapıyoruz.

Burada sg ile başlayan bölüm Worker EC2 Sanal Makinesinin Security Group ID numarasıdır. Bu ayarları yaptıktan sonra uzaktan bağlanacağız.

Worker EC2 Sanal Makinesinin Kurulumu

Sevgili okuyucu bir önceki blog yazısını okuduktan sonra bazı maddelere dikkat çekmemiz gerekmektedir. Bunları teker teker uygulayalım.

Birinci olarak ben Application OS Images (AMI) bölümünde free tier eligable checkbox bölümünü işaretleyerek Linux Altyapısına Sahip Ubuntu Server 20.04 LTS İşletim Sistemini kurdum. Çünkü en iyi bildiğim sistemlerden birisidir.

İkinci olarak önemli olan Instance Type bölümüdür. Burada CPU adetini minimum 2gb Ram adetini minimum 2gb seçmeniz gerekmektedir. Ben söylemiyorum Kubernetes sisteminin minimum ayarıdır.

Üçüncü olarak Key Pair bölümünü zaten önceki blog yazımda yazdığım için geçerek ve şuanlık Network Settings ayarlarını geçiyoruz. Burada sistemimizi Master kümesine aktarmak için 2 temel port numarasını eklememiz gerekiyor. İlk başta Network Settings bölümünde “Edit” butonuna basarak Subnet bölümümüzü seçiyoruz. Ardından “Security Group Role” bölümüne geçiş yapmamız gerekmektedir. Burada “Add Security Group Role” butonuna tıklayarak yeni bir rol oluşturmamız gerekiyor. Bu 2 temel port numarası 1. olarak “10250” port numarası ve “30000-32767” port numaraları aralığıdır. Source kısmına ise Master EC2 Sanal Makinesinin Security Group ID adresini eklemeniz gerekmektedir.

Master ve Slave EC2 Sanal Makinelerine Uzaktan Erişim ve Docker Uygulamasının Kurulumu

Ben Master ve Slave EC2 Sanal Makinelerine uzaktan bağlanabilmek için Windows İşletim Sistemine sahip Command Prompt uygulamasını kullanıyorum. Önceki Blog yazımdan hatırlayacağınız üzere Key Pair dosyasının gerekli izinlerini ayarlayarak Sanal Makinelerine uzaktan bağlanıyoruz.

Ben yeni kurduğum için aşağıdaki komutları uygulayarak Ubuntu İşletim Sisteminin stabil çalışmasını sağlıyorum. Eğer Siz yeni kurmadıysanız bu adımı geçebilirsiniz.

sudo apt-get update -y
sudo apt-get upgrade -y

x

Ardından aşağıdaki komut satırlarını uygulayarak Docker uygulamamızı sistemlerimizde ayağa kaldırıyoruz.

sudo swapoff -a
sudo sed -i ‘/ swap / s/^\(.*\)$/#\1/g’ /etc/fstab
sudo cat /etc/fstab
sudo apt-get update
sudo apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg –dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo “deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable” | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update -y
sudo apt-get install docker-ce docker-ce-cli containerd.io -y

Docker Uygulamamızı kurduktan sonra uygulamanın yetkilerini genişletip ve “daemon.json” dosyasın içine bu komut satırını yazarak uyguluyoruz.

cat <

Böylelikle Docker Uygulamamız konfigüre oluyor.

Kubernetes Sisteminin Kurulumu

Aşağıdaki komut satırlarını uyguluyoruz. Ben burada uyguladığım versiyon “1.24.3” versiyonudur. Şuan son versiyon olarak “1.25.0” versiyonudur ama seçtiğim versiyon sistemimiz için en uygun olanıdır.

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 update
sudo apt-get install -y kubelet=1.24.3-00 kubeadm=1.24.3-00 kubectl=1.24.3-00
sudo apt-mark hold kubelet kubeadm kubectl

Master EC2 Sanal Makinesi için Devamı

Öncelikle “sudo kubeadm init” komut satırını kullanmadan önce “containerd” servisinin bünyesinde bulunan “config.toml” dosyasının silinmesi gerekmektedir. Ondan sonra “sudo kubeadm init” komut satırını uyguluyoruz.

sudo rm -rf /etc/containerd/config.toml
sudo systemctl restart containerd

Tüm bu adımları bitirdikten sonra aşağıdaki komut satırını uygulayarak Master EC2 Sanal Makinesinin içinde Kubernetes uygulamasını çalıştırıyoruz.

Not: “kubeadm init” komut satırını kullanmadan “sudo systemctl status kubelet” komut satırını kullanırsanız kubelet servisinin diaktif olduğunu görürsünüz. Bunun sebebi “kubeadm init” komut satırının çalışmadığıdır. Daha açık ifade etmek gerekirse Kubelet servisinin aktif olabilmesi için Master Node bölümünün ayağa kalkması gerekmektedir.

sudo kubeadm init –image-repository registry.aliyuncs.com/google_containers –service-cidr=10.1.0.0/16 –pod-network-cidr=10.244.0.0/16

Son resimde gördüğünüz “To start using your cluster…” yazısının altındaki 3 temel komut satırını uygulamanız şarttır. Ve Tekrardan son resimde gördüğünüz “kubeadm join” ile başlayan komut satırını bir yerde saklayınız. Bunun nedeni Worker Node üyelerimizi bu komut satırlarıyla birlikte bağlayacağız. Tüm bu durumlardan sonra aşağıdaki şu komut satırını uygulayarak sistemimize bağlı “node” üyelerini görebiliriz.

kubectl get nodes

Öncelikle “kube-flannel” uygulamamızı Kubernetes sisteminde ayağa kaldırmamız gerekiyor. Bunun sebebi Worker Node üyelerini eklerken Load Balancer yapabilmesi için gereklidir.

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

Ekstra olarak “kubectl get pods” dediğimiz anda default olarak eklenen pod üyeleri yer alır. Eğer “kubectl get pods -n ornek” yazarsanız “ornek” namespace alanındaki pod üyelerini görürsünüz. Son olarak ise “kubectl get pod –all-namespaces” yazarsanız tüm namespace bölümdeki tüm üyeleri ekrana gösterecektir.

kubectl get pods
kubectl get pods -n ornek
kubectl get pods –all-namespaces

Gördüğünüz üzere Master Node üyemiz “NotReady” durumu veriyor. Bu aslında bir hatadır. Bu hatanın sebebi “The runtime network not ready” budur. Bunun çözümü aslında ben çok araştırdım. Birçok siteye baktım ve sebebi aslında başta Containerd servisinin bünyesinde barındıran “config.toml” dosyasının silinmesidir. Bu dosyayı tekrardan oluşturup içine default ayarları yaptıktan sonra Containerd Servisini tekrardan yeniden başlatmak gerekmektedir. İlk komut satırı olan “sudo nano /etc/containerd/config.toml” komut satırını uyguladıktan sonra dosyanın içeriğine bir şey yapmadan “ctrl+s” ve “ctrl+ x” tuş kombinasyonlarını uygulayarak dosyanın içinden çıkmanız gerekmektedir.

sudo nano /etc/containerd/config.toml
sudo chmod -R 666 /etc/containerd/config.toml
sudo chown user:user /etc/containerd/config.toml
sudo containerd config default > /etc/containerd/config.toml
sudo systemctl restart containerd

Slave EC2 Sanal Makinesi için Devamı

Öncelikle “sudo kubeadm join” komut satırını kullanmadan önce “containerd” servisinin bünyesinde bulunan “config.toml” dosyasının silinmesi gerekmektedir. Ondan sonra “sudo kubeadm join” komut satırını uyguluyoruz.

sudo rm -rf /etc/containerd/config.toml
sudo systemctl restart containerd

Ardından Master Node üyemizi ayağa kaldırdığımızda “kubeadm join” ile başlayan komut satırını Worker EC2 Sanal Makinesine uyguluyoruz. Örnek olarak aldığım komut satırı aşağıdadır.

kubeadm join 172.31.5.220:6443 –token 5vbv1l.55f9blqx4zj34odk \
–discovery-token-ca-cert-hash sha256:d5f0c20598689c5433ec98d41652fbc73fd6cad8f384be40710cec11d61bb187

Tüm bu işlemlerden sonra Master Node üyemizin yaşadığı aynı sorun Worker Node üyemiz için de geçerli olacaktır. Master Node üyemiz için uyguladığımız komut satırlarını Worker Node üyemiz için de uygulayacağız. Burada yapmamız gereken iki önemli işlem vardır. Bunlardan birincisi Master Node Üyemizin içinde Worker Node üyemizi silmek ve ardından Worker Node üyemizi “kubeadm reset” komut satırıyla birlikte “kubeadm join” komut satırıyla uyguladığımız komut satırını ortadan kaldırmaktır. Gelin Birlikte uygulayalım.

#Master Node için
kubectl delete node worker
#Worker Node için
sudo kubeadm reset

#Worker Node için
sudo nano /etc/containerd/config.toml
sudo chmod -R 666 /etc/containerd/config.toml
sudo chown user:user /etc/containerd/config.toml
sudo containerd config default > /etc/containerd/config.toml
sudo systemctl restart containerd

Bu komut satırlarıyla birlikte tekrardan “sudo kubeadm join komut satırıyla birlikte tekrardan Master Node üyemize bağlanıyoruz.

kubeadm join 172.31.5.220:6443 –token 5vbv1l.55f9blqx4zj34odk \
–discovery-token-ca-cert-hash sha256:d5f0c20598689c5433ec98d41652fbc73fd6cad8f384be40710cec11d61bb187

Sonuç olarak…

Merhaba Sevgili okuyucu. Bugün bu blog yazısında sizlerle birlikte AWS Cloud Üzerinde iki adet EC2 Makinesi açarak ve içine Linux İşletim Sistemine sahip Ubuntu Server 20.04 LTS İşletim Sistemini yükledik. Gerekli ağ ayarlarını yaparak Sanal makineleri birbirine AWS Cloud Websitesi üzerinden bağladık. Ardından bu iki Sanal Makineye uzaktan bağlanarak içine ilk önce Docker Uygulaması ardından Kubernetes Kubeadm, Kubelet ve Kubectl komut satırlarını yükleyip ayağa kaldırdık. Master Sanal Makinesinde “kubeadm init” komutunu kullanarak Kubernetes uygulamasını ayağa kaldırdıktan sonra Worker Sanal makinesinde “kubeadm join” komut satırını yazarak Master Sanal Makinesine bağladık. Diğer blog yazılarımı okumak istiyorsanız buraya tıklamanız yeterlidir. İyi okumalar dilerim.

Kategori:AmazonAmazon Web ServicesAWSDevOpsDockerDocker ComposeEC2EC2 ServicesK8SKubernetesmaster-k8sVirtual MachineVMworker-k8s

Bu yazı yorumlara kapalı.