Kubernetes öğrenme notlarım — 2

Semih Saydam
21 min readSep 23, 2024

--

Merhabalar, k8s öğrenmeye bu yazıyla kaldığımız yerden devam edeceğiz. Önceki yazıda teorik kısmı/k8s mimarisini öğrenmiştik, artık yavaş yavaş kurulumlarla da olsa işe başlıyor olacağız. Bu kısımda Kubernetes’ın çeşitli kurulum/kullanım yöntemlerini öğreneceğiz.

Kubectl kurulumu

Önceki yazıda da gördüğümüz gibi k8s’e komut yollamak istediğimiz zaman bunu kube-api-server üzerinden yaparız. Api-server ile iletişim kurmak için 3 yolumuz bulunur :

  • Kube-api-server bir rest api sunucusudur, bundan dolayı da biz api-server ile rest api çağrılarıyla iletişime geçebiliriz(örneğin curl ile yada geliştirdiğimiz bir uygulamanın içinden rest isteklerle). Bu yöntem sürekli rest istek atmak gerekeceğinden zahmetli olacaktır, bu nedenle bu yöntemi genelde uygulamalar içinden k8s ile iletişim kurmak istediğimizde kullanılırız.
  • Kube-api-server ile iletişim kuracak bir grafiksel arayüz ile de işlemlerimizi yapabiliriz. k8s’in resmi GUI aracı olan Kube-dashboard ya da Octant, Lens bu tür araçların en bilinenleridir.
  • GUI işlemciler bu tarz ortamlar için en temel yönetim araçları değildir, gui yerine komut satırından çalışmak tercih edilir. Bunu sağlamak için kubernetes kubectl adında bir cli içerir. Terminal üzerinden kube-api-server ile iletişim kurarak ona komutlar gönderebilmemizi sağlayan, k8s projesinin resmi cli aracıdır. Bizler de yazı serisi boyunca bu cli aracını kullanacağız.

K8s cluster’ı kurmadan önce kubectl kurup, ikisini de kurduktan sonra aralarında bağlantı kurmamız gerekiyor. Bu başlık altında kubectl kurulumunu beraber yapalım, kullanımını başka başlıkta öğreniyor oluruz :)

Linke tıkladıktan sonra gelen pencerede Linux & MacOs & Windows için kurulum yönlendiricilerini göreceksiniz :

Burada tüm işletim sistemleri için bir sürü adım ile kurulum gösterilmiş. Buradaki adımları yapmak yerine paket yöneticilerden(apt/yum/dnf vb.[Linux], homebrew[mac], chocolatey[win]…) yararlanabiliriz. Biz ilk olarak bu paket yöneticilerden işletim sistemimize göre olanı kuralım, sonrasında kubectl’i kurmak çok daha kolay olacaktır.

Windows

Windows işletim sistemi için chocolatey ile kuruluma bakalım :

Choco’yu kurmak için linkteki adrese gidip; powershell’i yönetici olarak çalıştırıp, Set-ExecutionPolicy AllSigned ayarını yapmak gerekiyor. Ardından verdiği kurulum script’ini yapıştırıp kurulmasını sağlıyoruz. choco? ile de kurulduğunu teyit ediyoruz.

Choco’yu kurduk şimdi kubectl’i kuralım. Linkteki adrese gidip, “Install on windows using Chocolatey” başlığına iniyoruz. Dokümandaki choco install kubernetes-cli ile kurulum yapıp, ardından kontrol için kubectl version --client komutlarını işletiyoruz :

MacOs

MacOs için brew ile kurulum yapalım :

Brew kurulumunu yaptıktan sonra kurulum sayfamızdaki şu başlığa gidiyoruz. Aşağıdaki komutları işletip kurulumu halletmiş oluyoruz :

Kubernetes kurulum çeşitleri

Kubectl kurduk artık kubernetes kurulumu yapabiliriz. Fakat hangi kubernetes? İşte bu kısımda bu sorunun cevabını vereceğiz.

Kubernetes github üzerinde open-source olarak yayınlanan bir proje, buradan kodunu alır çalıştırabiliriz fakat bu çok uzun ve zahmetli bir yol. Bu karmaşıklığı azaltmak için bu kurulumları otomatize eden araçlar geliştirilmiştir, bu araçlar aracılıyla istediğimiz ortamlara k8s kurabiliriz. Otomatize bile olsa yine de zor bir kurulumu vardır, bunu da aşmak için kurulumlar paket haline getirilmiş ve bir nevi “distro”lar şeklinde hazır çözümler sunulmuştur. Aynı linux distro’ları gibi her biri farklı bir ihtiyacı karşılamakta ve farklı durumlar için uygun olmaktadır :

  • Öğrenme/Test etme veya geliştirme : Kendi bilgisayarınıza ufak bir kubernetes cluster kurmak istiyorsunuz. Bu tarz kullanımlar için Minikube yada docker desktop en uygun k8s kurulumları olacaktır.
  • Production : Birkaç sanal makine veya fiziksel makine üzerine tam bir k8s cluster kurulumu gerçekleştirmek istiyorsanız bu kısımdaki distro’lara bakmak gerekir. Production ortamda kullanmak için bu tarz bir senaryo olabilir fakat bunun yanında birkaç sunucu kaldırıp test için cluster kurmak için de uygun olabilir. Bu yazılarda Kubeadm’i görecek ve onunla k8s kurulumunu öğrenmeye çalışacağız.
  • Public Cloud Managed Kubernetes : Public cloud firmalarının sunduğu, yönetilen k8s hizmetlerini kullanmaktır. Yönetilen k8s hizmetinden kastımız; cloud firması k8s kurulumunu bir hizmet olarak sunar, tek bir komutla hızlı bir şekilde k8s cluster ayağa kaldırabilirsiniz. Cluster’ın master node component’leri cloud firması tarafından yönetilir. Buradaki 3 servis üzerinden kurulumlar gerçekleştirip, inceleyeceğiz.

Docker Desktop

Bu başlıkta Docker desktop ile gelen single-node k8s kurulumunu inceleyeceğiz. Container devrimini başlatan Docker firmasının; birçok ürün ve servisi mevcut. Bunların en temelinde de, K8s’in 1.20 version’una kadar varsayılan container engine olarak kullandığı, Docker engine bulunuyor. Docker Desktop ise docker engine’in GUI ve birkaç ek özellikle güçlendirilmiş halidir. Docker Desktop ile single-node k8s ayağa kaldırabilme imkanına sahibiz. Böylelikle bilgisayarınızdan hem container’larını oluşturup çalıştırabilir hem de k8s üzerinde geliştirme yapabiliyor hale gelirsiniz.

Docker desktop’ı indirmek için linke gittikten sonra “Download for <işletim_sisteminiz>” kısmından docker desktop’ı indirip direkt kurulumunu yapabilirsiniz. Kurulumdan sonra Docker Desktop’ı açıp :

Settings → Kubernetes → Enable Kubernetes’e tıkladıktan sonra Apply & restart’a tıklıyoruz, single node k8s cluster’ı sizler için başlatıyor ve sizin kubectl’inizle entegre ediyor. Bunun başladığını test etmek adına kubectl version ve kubectl get nodes komutlarını çalıştırıp,

PS C:\WINDOWS\system32> kubectl get nodes
NAME STATUS ROLES AGE VERSION
docker-desktop Ready control-plane 3m18s v1.27.2

single node k8s cluster’ın oluştuğunu görebiliyoruz.

Minikube

Bazı durumlarda docker-desktop içinde gelen single node k8s kurulumu bizler için uygun olmayabilir(örneğin linux version’una sahip değilseniz bunu kullanamıyoruz). Bunun gibi durumlar için ikinci alternatifimiz olan kubernetes kurulumumuz Minikube olacaktır. Aynı docker’ın sağladığı gibi kendi bilgisayarımızda single node cluster kurabilmemizi sağlıyor(ilerde buna birden fazla node da ekleyeceğiz) ve bunun yanında da farklı add-on’lar ile temel özelliklerin de genişletilmesini imkan veriyor. Örneğin sadece cloud kurulumlarında erişebildiğiniz load-balancer tipi servisi bir add-on ile minikube üstünde de simüle edebiliyoruz. Bunun yanında tek bir komut ile cluster’ı durdurup, tekrar çalıştırabiliyoruz. Biz de yazı serisi boyunca minikube kullanıyor olacağız. Minikube sistemde mevcut olan bir sanallaştırma platformu(Docker, Hyper-V, Podman, Virtualbox vb…) mevcut mu ona bakıyor ve varsa onun üzerinden çalışıyor. Benim sistemimde Docker yüklü olduğu için Docker üzerinden k8s’i ayağa kaldıracaktır.

Şimdi Minikube kurulumu için linke gidelim. Burada Linux | macOs | Windows seçeneklerinden size uygun olanla ilerleyebilirsiniz. Ben Windows kullandığım ve sistemimde winget olduğu için winget install minikube kurulumunu tercih ediyorum(Bunu yaparken powershell’i admin olarak başlatalım) :

Minikube status komutunu verince profile bulunamadığı için hata veriyor fakat biz anlıyoruz ki minikube kurulumu yapıldığını anlamış oluyoruz :

Yukarıda verilen hatayı google’ladığımızda minikube’un docker’ı default olarak almadığı için olduğunu görüyoruz. Bunun için docker’ın context’ini default’a çekiyoruz :

Gördüğünüz gibi o hata gidiyor ve sadece profil olmaması durumu kalıyor.

Minikube’u yükledik, fakat biz bunu k8s cluster kurabilmek için yükledik. K8s cluster oluşturmaya bakacağız. minikube start dersek bu komut sistem üzerinde k8s cluster ayağa kaldıracak ve kubectl ile bunu konuşturacak şekilde de ayarlamasını yapmış olacaktır. Minikube’un çeşitli sanallaştırma platformlarını desteklediğinden bahsetmiştik; bu platformlardan birkaçına sahipseniz ve hangisi üzerinde çalıştırılacağına karar vermek isterseniz minikube start --driver=hyper-v diyebiliyoruz. minikube start --driver=docker vb. diyebiliyoruz fakat hiçbir şey girmezseniz de varsayılan driver olarak docker’ı kullanacaktır.

minikube start komutunu uygulayıp docker engine üzerinden k8s cluster ayağa kaldıracaktır. Image’ı indirip, bundan bir container oluşturacak ve bu container bizim k8s cluster’ımız olacak :

minikube status komutu daha önce bize bir çıktı vermemişti, şimdi tekrar denediğimizde mevcut profilin oluştuğunu ve sistemde çalışan bir k8s cluster olduğunu görebiliyoruz. kubectl get nodes komutu ile de minikube’ün bir k8s cluster ayağa kaldırmış, bunu kubectl ile de iletişim kurabilecek hale getirmiş olduğunu görebiliyoruz.

Minikube’un bir diğer avantajı da; minikube delete komutuyla k8s cluster’ı silebiliyoruz, bu ne anlama geliyor? Belli biraz zaman sonra cluster kirlenecek denemeler yaparken, hızlı şekilde sıfırdan k8s cluster oluşturmak isterseniz; minikube delete ile hızlıca silip minikube start ile tekrar sıfırdan bir tane k8s cluster oluşturabiliyoruz. Silmek istemiyor, sadece durdurmak istiyorsanız(sistem kaynaklarını kullanmasın, boş yere arka tarafta çalışmasın diyorsanız); minikube stop komutuyla k8s cluster’ı durdurur(silmez) tekrardan minikube start ile çalışmaya devam ettirebilirsiniz.

Aşağıdaki başlıklarda Azure Kubernetes Service(AKS) | Google Kubernetes Engine(GKE) | Amazon Elastic Kubernetes Service(EKS) | kısımlarında cloud’da kullanabileceğimiz yönetilen k8s kurulumlarından bahsedeceğiz. Yazılar boyunca bu seçenekler direkt olarak kullanılmayacak fakat yine de bu kısımları atlamadan nasıl yapıldığını görmek sizler için güzel olacaktır. Kurulumlar kredi kartı bilgileri vb. isteyeceği için ben de bu kısımları uygulamalı yapmayıp sadece kurstan bilgileri sizlere aktarmaya çalışacağım :)

Azure Kubernetes Service(AKS)

Microsoft’un cloud platformu Azure’un sunduğu yönetilen k8s hizmeti; AKS ile başlayalım. AKS kullanmak için Azure hesabına ihtiyacımız olacak. Burada göreceğimiz cloud servis sağlayacıları ücretli fakat bu 3 servis sağlayıcısı da sizlere belirli oranlarda ücretsiz kullanım imkanı sunuyor. Fakat yukarıda da belirttiğim üzere sonraki kullanımlarınız için kredi kartı bilgilerinizi isteyecektir.

AKS, hesap oluşturulduğu anda 30 gün içinde geçerli olan 200$ hesabınıza tanımlar, bu süre zarfında servisleri deneyebilirsiniz. Hesap oluşturmak için bu linke gidebilirsiniz. Sonraki adımlarda sizden üyelik bilgileri isteyecek ve işlemler tamamlandığında “Build in the portal” seçeneğine tıklayarak ana portal’a gidiyoruz. Sağ üstte kullanıcı simgenize tıklayarak kaç dolarınız kaldığını vb. bilgileri görebiliyoruz. Artık Azure kurulumumuz hazır olduğuna göre Amazon Kubernetes Service(AKS) kurulumuna geçebiliriz.

Resource groups kısmına tıklıyoruz ve + Create’i seçiyoruz. Free Trial → Resource group → örneğin ismini rg-k8s-test koyduk → Region : (Europe) North Europe seçerek ilerledik. Resource group’u bir klasör gibi düşünebiliriz. Cloud üzerinde bir klasör ve bunun üzerinde kaynaklarımızı oluşturacağız gibi düşünebiliriz. Oluşan resources group’a tıklıyoruz ve RG’miz artık hazır AKS’i oluşturabiliriz :

Kubernetes Service → Create’e tıkladıktan sonra size bazı detaylar soracaktır :

Bildiğiniz üzere k8s’te master ve worker node’lar var. AKS, bize kaç worker node ve ne tipte worker node istediğimizi soruyor. Cloud üzerinde k8s cluster kurarken, sadece worker node’larla uğraşmanızı sağlıyor. K8s service provider(microsoft azure,google)lar master node’u hallediyor ve bundan para da almıyorlar. Sadece worker node için para ödüyoruz(aws hariç). Kaç worker node, ne tipte worker node ve hangi güçte(ram, cpu vb.) seçtiğinize göre ücretlendirme değişiyor. Yukarıdaki fotoğrafta gördüğünüz “Node Size” kısmında “Change Size”ı seçerek aşağıdaki ayarları yapabilirsiniz ve ücretlerini de görebilirsiniz :

k8s Cluster için ayarları bitirdikten sonra “Review And Create”e tıklıyoruz. 5 dakika civarında(konfigürasyonunuza göre) oluşturması sürüyor. “Your deployment is complete” mesajını gördükten sonra “Go to resource” ile seçeneğine tıklayarak AKS’i, portal üzerinde görebilirsiniz.

Biz AKS’i portal üzerinden değil kubectl ile bağlanıp yöneteceğiz. Terminalinizden Azure ile konuşabilmek için Azure CLI’ı yüklemeniz gerekiyor, linke giderek bu kurulumu yapabilirsiniz. Ardından terminalde az login komutunu yazdığınızda sizi tarayıcınız üzerinden login olma ekranına gönderecektir:

Tekrar terminale döndüğünüzde login olabildiğinizi göreceksiniz, artık azure’a cli olarak bağlanmış oldunuz. az group list komutu ile resources group’larınızı görebilirsiniz, kendi açtığınız RG orada mı kontrol edebilirsiniz. az group list -o table ile de tablo şeklinde görebilirsiniz :

Şimdi asıl kısma gelelim ve azure üzerindeki k8s cluster’ını local’imizdeki kubectl ile yönetmeyi inceleyelim.

az aks get-credentials --name aks-k8s-test --resource-group rg-k8s-test

komutunu uyguluyoruz. Burada --name ile verdiğiniz k8s cluster name’i ve --resource-group parametresiyle de, verdiğiniz resource group’un ismini giriyorsunuz. Ardından bu komutu işlettiğinizde ./kube/config dosyasına context’i kayıt eder, bu dosyayı ve içeriğini sonraki kısımlarda daha detaylı inceleyeceğiz. Özetle bu dosyanın yaptığı işlem ise “aks-k8s-test” ismini verdiğimiz cluster ile bizim konuşabilmemizi sağlayacak.

Gördüğünüz üzere kubectl get nodes komutunu işlettiğimizde “kubectl” AKS’e bağlı olduğu için AKS üzerindeki node’ları gösterecektir.

İşleriniz bittiğinde kaynaklar boşa gitmesin, para harcamasın gibi nedenlerle bu kaynakları silmek isterseniz; AKS konsolu üzerinden resources group’a gelip “Delete resources group” seçeneği ile RG’yi silmeniz yeterli olacaktır. RG içindeki tüm kaynaklar yani dolayısıyla AKS ile beraber silinecektir.

Google Kubernetes Engine(GKE)

Google’un sunduğu yönetilen k8s hizmeti; GKE ile devam edelim. AKS’teki ücretlendirme kısımları GKE için de geçerli, aynı şekilde bize bir süre denemeniz için bir kredi sağlıyor. GKE biraz daha cömert davranıyor ve 90 gün boyunca kullanabileceğiniz 300$’lık bir kredi sağlıyor. Linke gidip “Get started for free”ye tıklayarak google hesabınıza giriş yaparak(yoksa yeni üyelik alarak) başlayabilirsiniz.

Üyelik işlemleri bittikten sonra sol menüden “Kubernetes Engine Create”e tıklıyoruz. İlk açılışta bizden Kubernetes Engine’i aktif etmemizi istiyor, aktif etme için “Enable”a tıklıyoruz. Bir süre sonra K8s engine aktif oluyor ve sağ üstte görüldüğü gibi cluster oluşturmak için “Create” butonuna tıklıyoruz.

Ardından gelen ekranda cluster’ın ismini vb. girip “Create” işaretliyoruz. Cluster’ı oluşturması yine biraz zaman alacaktır. Bu tamamlanana kadar hadi gidip bu cluster’a local’imizden(kubectl ile gke’ye bağlanma) nasıl bağlanacağız ona bakalım. Yine Azure cli gibi burada da gcloud cli yükleyeceğiz. Yüklemek için bu linke gidip, “Cloud SDK Installer”ı indirelim, en hızlı ve kolay bu şekilde kurulacaktır.

Hiçbir şey seçmeden sürekli “Next” diyerek ilerleyebilirsiniz. Kurulum bittikten sonra terminal’e gidip gcloud komutunu yazdığınızda komutun çalıştığını görerek test yapabilirsiniz :

Eğer Unrestricted Policy hatası alırsanız gcloud yazdığınızda, çözmek için PowerShell’i yönetici olarak başlatıp; Set-ExecutionPolicy -ExecutionPolicy Unrestricted komutunu girebilirsiniz. Terminal sizden bir cevap beklediğinde A yazıp enter’layabilirsiniz.”[A] Yes to All” anlamına gelmektedir. Tekrar gcloud komutunu işleterek bu hatanın giderildiğini test edebilirsiniz.

Gcloud cli’ın yüklendiğini anladığımıza göre gcloud init komutunu işleterek işe başlıyoruz :

Bu komut ile gcloud cli ile Google cloud’u bağlayacak, komutta istenen cevaba “Y” diyip enter’ladığınızda sizi Azure’daki gibi tarayıcı üzerinde bir login ekranına yönlendirecektir. Login olduktan sonra sizlere 1–2 soru soruyor :

Yeni bir proje oluşturmadan default olanı seçebilir ve ikinci seçeneğe “n” ile cevap verebilirsiniz. Artık gcloud cli kurulumunu ve ayarlamalarını yapmış olduk. Şimdi arka planda k8s kurulumunun tamamlanıp tamamlanmadığını kontrol edebilirsiniz :

Tamamlandığını görüyoruz, şimdi biz bu k8s cluster’ını bizim kubectl config’ine context olarak eklememiz gerekiyor. Bunun için üç noktaya tıklıyoruz ve :

Connect” seçeneğini seçtikten sonra verdiği komutu kopyalıyoruz ve terminalimizde işletiyoruz. Terminalde gördüğünüz üzere kubeconfig’e gke-test’i context olarak ekliyor ve bizim GKE üzerinde oluşturduğumuz gke-test cluster’ını kubectl ile kullanabilmemizi sağlıyoruz :

Yine azure’daki gibi bu oluşturduğunuz kaynakları işiniz bittiğinde silmek isterseniz :

Sadece “Delete”e basarak bu cluster’ı silebilirsiniz :)

Amazon Elastic Kubernetes Service(EKS)

AWS üzerinde yönetilen k8s servisini ücretsiz kullanma imkanımız yok. Google ve Microsoft’un GKE ve AKS’sini kullanırken Master node kullanımları için bir ücret almadıklarını, sadece worker node’lar için ücret ödediğimizi belirtmiştik. AWS’te ise Control Plane için aylık 74$ ödeme bekliyor. AWS ücretsiz kullanım özellikleri de GKE ve AKS gibi değil, size diğer firmaların sunduğu gibi belirli bir dönem kullanabileceğiniz bir tutar sağlamıyor. Bunun yerine belirli servislerini belirli kotalarda 12 ay boyunca ücretsiz kullandırıyor. EKS bu kapsama girmiyor, dolayısıyla EKS’i ücretsiz olarak deneyemiyoruz ve 1 aylık bir EKS kullanımı en az 125$’a denk geliyor. Eğitim için zaten minikube vb. kullanıyor olacağız ama yine de bilgimiz olması açısından burayı da inceleyelim ^^.

Öncelikle linke giderek hesap oluşturacağız. Email adresi, şifre, adres, kredi kartı bilgileri vb. tüm cevapları doldurduktan sonra AWS management console’e bağlanabileceksiniz. AWS management console’a bağlandığınızda ilk yapmanız gereken kendinize bir user oluşturmak;

“IAM”(Identity and Access Management)’a gittikten sonra gelen ekranda user’ınız için username, password vb. ayarları veriyorsunuz(Programmatic access ve Aws Management console access seçeneklerini de işaretleyiniz). Sonraki ekranda bu user’a verilecek izinleri soracak, aşağıda gördüğünüz gibi :

Admin yetkisi verebilirsiniz. Ardından farklı bir işlem yapmadan ilerleyip “Create User” ile user’ı oluşturabilirsiniz. Kullanıcınız oluştuktan sonra sizi karşılayacak ekranda :

1,2 ve 3 numarada gözüken bilgileri kaydediniz ve bu bilgileri kimseyle paylaşmayınız. Ardından sağ üst taraftan “Sign out” olup; 1'de kopyaladığınız linke tarayıcınızdan gidin :

IAM user ile giriş yapabilmeniz için size bir “Sign In” ekranı getirecektir. Oluşturduğunuz kullanıcı adı ve şifre ile buraya giriş yapabilirsiniz. Ardından yine Sağ üst köşeden region’ı “Europe” olarak ayarlayabilirsiniz. Şimdi asıl işimize gelelim ve “EKS” aramamızı yapıp işe başlayalım :

Elastic Kubernetes Service’i bulduktan sonra “Create EKS Cluster”a tıklayıp cluster oluşturma işimize geçiyoruz. Bizden cluster ismi, k8s version’u vb. bilgiler istiyor. Bir de “Cluster Service Role” oluşturmamızı istiyor, IAM üzerinden daha önce user oluşturduğumuz gibi bir de Role oluşturmamız gerekiyor. Fotoğrafta gördüğünüz “IAM Console”a tıklayarak direkt olarak IAM console’a gidip :

Tıkladıktan sonra gelen ekrandan 1'nci adımdaki gibi Role kısmına gelip, yeni role oluşturuyoruz. 2'nci adımda EKS seçeneğini seçip; 3'üncü adımdaki gibi sonraki ekrandan Role ismi veriyoruz. Role’ü oluşturduktan sonra tekrar EKS ekranında 4'ncü adımda gördüğünüz gibi oluşturduğumuz role’ü giriyoruz. Sonra sadece 5'nci adımdaki security group’u aşağıda çıkan default seçeneği seçip; hiçbir ayarı değiştirmeden Next’leyerek EKS’i oluşturuyoruz. EKS’in oluşturulması da GKE ve AKS gibi bir süre bekletecek; o süre zarfında hadi biz local’imizdeki kubectl’den nasıl bu EKS cluster’a erişeceğiz ona bakalım ve “AWS Cli”ımızı kuralım :

Linke gidip işletim sisteminize göre uygun seçenek ile devam edelim. Windows için bir .msi dosyası indirecek, onu açıp Next’liyoruz ve kurulmuş oluyor. Kurulmuş olduğunu powershell’i açıp aws --version ile kontrol edebilirsiniz.

Şimdi AKS ve GKE’de de yaptığımız gibi login olmamız gerekiyor fakat AWS diğerleri gibi bir login mekanizması sunmuyor bunun yerine AWS’de konfigüre ediyoruz. Daha önce IAM user oluştururken kaydettiğimiz Access Key ve Secret Access key ile aws’i konfigüre etmek için şimdi kullanacağız :

aws configure komutunu yazdıktan sonra kaydettiğiniz Access Key ve Secret Key’i buraya yapıştırabilirsiniz. Ardından Değiştirdiğimiz region’ı da buraya yazıyoruz ve output format’ı boş bırakıp enter’lıyoruz. Böylelikle AWS Cli’nı konfigüre etmiş olduk, artık AWS ile cli üzerinden konuşabiliyor olduk.

Paralelde çalışan EKS oluşmuş mu? Gidip kontrol edelim :

“eks-test” cluster’ımızın “Active” durumuna geçtiğini gördük, artık cluster’ımız hazır. Fakat cluster’ı kurduğunda master node’ları kurmuş oldu, henüz daha “compute” yani worker node kurmadık. Bunu da şu şekilde yapıyoruz :

“Compute” kısmına gelip “Add Node Group”a tıklıyoruz.

Ardından gelen ekranda node group’umuza bir isim veriyoruz, yine bizden node için IAM Role istiyor. “IAM Console” ifadesinden direkt o sayfaya yönlenip, “Create Role” ile yeni bir role oluşturma adımına başlıyoruz. Worker node’lar birer EC2 instance’ı olacağı için bu sefer EC2 use case’ini seçiyoruz. Sonrasında :

Role permission’ları için fotoğrafta gördüğünüz permission’ları veriyoruz. Son adımda role’e bir isim verdikten sonra kaldığımız ekrana dönüyor ve Node IAM Role kısmına yeni oluşturduğumuz rolü veriyoruz.

Ardından Next’liyoruz ve 3'ncü adıma kadar bir şey değiştirmeden devam ediyoruz. 3'ncü adımda bizden “Siz 2 tane EC2 instance oluşturdunuz bunlara bağlanmanız gerekirse diye SSH keypair’larına ihtiyacınız var.” diyor. Bu adımda istediğini yapıyoruz :

Bu bilgiyi de oluşturup Adım 3 için verdikten sonra Next’liyoruz ve bir süre bekledikten sonra Node Group’umuz da oluşuyor ve artık hazırız. Local’den kubectl ile bağlanabilmek için kubeconfig’i AWS’ye güncellettirelim ve oluşturduğumuz 2 node’lu node group’a erişebiliyor muyuz görelim :

Erişebildiğimizi gördüğümüze göre, son olarak diğer cloud service provider’larda da yaptığımız gibi; para yakmasın diye bu cluster’ı nasıl sileceğimizi de gösterelim :

Şeklinde basitçe silebilirsiniz. Cloud servis sağlayıcılarının sağladığı AWS, EKS, AKS konularını böylece öğrenmiş olduk. Şimdi başka bir başlığa ışınlanalım.

Kubeadm ile Kubernetes Cluster Kurulumu

Bu başlıkta k8s platformunun temel kurulum aracı olan Kubeadm ile k8s cluster kurulumunu inceleyeceğiz. Birkaç makine ayağa kaldırıp bunların üzerinde koşan bir k8s cluster koşmak istediğimizde kullanacağımız araç budur. Ayakta olan sanal veya fiziksel cihazlar üzerinde Linux işletim sistemi yükledikten sonra Kubeadm ile bu makinelerden oluşan bir cluster kurma işlemini hallederiz. Bunu yapmak adına kendi bilgisayarımız üzerinde 2 tane sanal makine oluşturup; bunlardan bir tanesi k8s control plane(master node) ikinci sistemi de worker node yapacağız. Sizler de aynı adımları takip ederek, kendi sisteminize yada cloud servis sağlaycılar üzerinden oluşturacağınız birkaç sanal makineye de benzer bir cluster kurabilirsiniz. Ya da sadece burada yapılanları okuyarak uygulamadan geçebilirsiniz(Cloud kurulumlarındaki gibi), çünkü bu yazı serisi boyunca k8s’in nerede koştuğu önemli değil. Önemli olan k8s’i anlamamız :)

Bu arada minikube ile ne farkı var derseniz, minikube daha çok kolayca single node cluster’lar kurmak için kullanılır. K8S öğrenmek için daha kolay kurulan minikube ile başlanır. Biz de zaten yazı serisi boyunca minikube ile ilerleyeceğiz; sadece diğer kurulum yöntemlerini de öğrenmemiz hepimize fayda sağlayacaktır ^^.

VirtualBox, VMware vb. gibi programlarla sanal makineler oluşturup onlar üzerinde yapabiliriz fakat bu işlemler bildiğiniz üzere biraz zahmetli olduğu için Multipass isimli bir araç kullanacağız. Ubuntu’yu üreten firma tarafından sağlanan bu araç; komut satırı üzerinden çok basit şekilde ubuntu sanal makine ayağa kaldırmamızı sağlıyor. Linke giderek bu aracın kurulumuna başlayalım :

Bu araç terminalden kolayca sanal makine oluşturmamıza olanak sağlıyor fakat fotoğrafta da gördüğünüz gibi bunu yaparken arka planda driver kullanması gerekiyor. Eğer Windows 10 Pro/Ent./Education v1803 ve üstü bir version’daysanız HyperV’yi devreye alıp onu driver olarak kullanacaktır fakat bu version’ların altındaysanız driver olarak VirtualBox indirmeniz gerekir. Linke giderek eğer version’unuz uyumsuzsa ve yoksa VirtualBox’ı kurabilirsiniz. Zaten kurulum aşamasında da sizi uyaracaktır veya her ikisi de varsa size seçim sunacaktır :

Kurulum bittikten sonra kurulup kurulmadığını terminal’e multipass yazarak test edebilirsiniz :

Multipass’i kurduk, şimdilik bunu parkedip KubeAdm ile k8s kurulumunu nasıl yapabiliriz linke gidip ona bir göz atalım :

Bu tutorial size detaylı şekilde bir anlatım sağlıyor, fakat bu biraz karışık olduğu için Özgür Öztürk bizler için bunu daha sade halini markdown formatında Github’ta paylaşmış; Onu takip ederek adımları gerçekleştirelim :

multipass launch --name master -c 2 -m 2G -d 10G
multipass launch --name node1 -c 2 -m 2G -d 10G

Komutlarını işleterek master ve node1 adında iki tane sanal makine oluşturuyoruz. Bu komutlar sırasında multipass connect hatası almışsanız, yüksek ihtimalle bilgisayarınızı restart’lamadığınız içindir. Virtualbox, kurulum sonrası restart ister. Restart sonrası tekrar deneyiniz. Hatasız olarak kurulduysa komutlardan şu şekilde bir çıktı göreceksiniz :

Yanyana iki terminal açıp, iki sanal makineye de bağlanalım. Sanal makineye bağlanmak için multipass shell <makine_ismi> komutunu işletiyoruz :

Ardından iki sanal makine için de setup.md de kurulum adımındaki komutları direkt işletiyoruz :

Burada komutların detaylarını şimdilik bilmemize gerek yok; swap kapatma vb. işlemler yapılıyor. Biraz daha detaya kaçıyor ve şimdilik bilmemize gerek yok ^^. Fakat yine de merak edenler varsa ya kubernetes’in ilk paylaştığım kubeadm kurulum dokümanına bakabilir ya da ChatGPT’den yararlanabilir. ChatGPT yanıtlarını da turuncuyla yan tarafına koydum; Merak edenler okuyabilir :).

Sonrasında containerd kurulumu yapıyoruz, biliyorsunuz ki k8s container orchestration aracı ve container engine(container oluşturma vb. işler)’i sizlerden bekler. Bu sebeple containerd yi kuruyoruz. Ardından bu başlıkta işlediğimiz ve k8s cluster kurmamızı sağlayacakkubeadm kurulumunu da adımlardan yapıyoruz.

Bu aşamadan itibaren k8s cluster kurulumuna geçiyoruz. kubeadm komutları ile öncelikle master node’da k8s cluster ayağa kaldıracağız, sonra da worker node’u ayağa kaldırıp master node’a bağlamamız gerekiyor. Öncelikle master node ile işe başlayalım.

kubeadm bizim k8s cluster oluşturduğumuz aracımız ve kubeadm init komutuyla bir sistem üzerinde k8s cluster oluşturuyoruz. Bu andan itibaren de bu komutu girdiğimiz makine bu cluster’ın master node’u olarak devreye giriyor. Bu sebeple master ile adlandırdığımız sanal makinede bu komutu giriyor ve ip adresi olarak da bu sanal makinenin ip adresini veriyoruz :

k8s cluster’ı yönetebilmek adına “./kube/config” dosyasını “admin.conf”tan kopyalayıp kubectl’i kullanabilir hale geliyoruz ve kubeadm init komutunun bizi yönlendirdiğini de görebiliyoruz :

Yönlendirmelerden yararlanıp fotoğrafta da gördüğünüz gibi “./kube/config”i ayarlayıp kubectl komutunu kullanabiliyor hale geliyoruz. Şimdi node1 adındaki sanal makinemiz de yönlendirmelerden yararlanıp worker node yapalım :

Yönlendirmedeki komutu işlettikten sonra gördüğünüz üzere kubectl get nodes komutunu master node’da işlettikten sonra node1'in worker node olarak geldiğini görebilirsiniz. Fakat master ve node1 ikisinin de STATUS kolonunda “NotReady” olduğunu görüyoruz. Bunun nedeni; Biz bir cluster kurduğumuz zaman, cluster varsayılan bir networking altyapısı ile gelmez. Bunu bizim seçerek kurmamız gerekir, ileriki yazılarda service kısmında burayı daha detaylı öğreneceğiz. Şimdilik bilmemiz gereken şey; bir cluster kurduğumuz zaman bu networking altyapısını yönetecek bir plugin kurmamız gerekecek. En bilinen networkin plugin’i calico’dur ve setup.md dosyasındaki şu iki komut ile kuruluyor :

Bu komutları sadece master node’da işletiyorsunuz ve plugin kurulumu sonrası node’larınızın Ready’e geldiğini görebilirsiniz :

Son olarak setup.md’de kalan şu iki komutu da işletiyoruz :

Bu iki komutun amacı, Kubernetes control plane (master) node’ları üzerindeki taint’leri kaldırarak bu node’ları uygulama pod’ları için kullanılabilir hale getirmektir. Bu, özellikle az sayıda node’a sahip küçük bir cluster’da faydalıdır, çünkü control plane node’lar da iş yükünü paylaşabilir.

Böylelikle kubeadm ile kubernetes cluster kurmuş olduk ^^. Şimdi play with kubernetes’i de inceleyip; bu kurulum işlerini kapatalım ve asıl işlerimize gelebilelim. Bu arada play with kubernetes başlığında da kubeadm k8s cluster kurulumunu tekrar etmiş ve özet şekilde görüyor olacağız →

Play with Kubernetes

Buraya kadar cloud üzerinde kurulumlar, sanal makineler ile kurulumlar ile uğraştık. Fakat bazı durumlarda üzerine herhangi bir şey kuramadığımız bir şirket bilgisayarı olabilir. Böyle durumlarda tarayıcınızdan ulaşabileceğiniz ve docker firması tarafından sağlanan play with kubernetes ile çalışabilirsiniz. K8s ile ilgili bir eğitim vb. verecekseniz ve hızlıca ayakta olan bir cluster sizlere yeterli oluyorsa burayı kullanmanız size faydalı olacaktır. Bizler bildiğiniz üzere minikube ile ilerliyor olacağız ama yine de bunu da bilmenizde fayda var, zaten 4 saatlik geçici bir session veriyor fakat pratik yapmak istediğinizde vb. faydası olabilir ^^.

Linke giderek play with kubernetes’e docker veya github hesabınızla Login olup direkt kullanmaya başlayabilirsiniz. Size 4 saatlik bir session sağlayacaktır. 4 saat sonra sisteminiz sıfırlanır ve yeniden bir session açıp, sisteminizi yeniden oluşturmanız gerekir. Bu 4 saatlerin bir kısıtı yoktur, istediğiniz kadar açabilirsiniz ama her defasında sil baştan başlamanız gerekir :)

1–2 dakika içinde birden fazla node’lu bir k8s cluster kurup, kullanmaya başlayabileceğiz. Fotoğrafta da gördüğünüz “Add New Instance”ı tıklayarak 3 tane instance oluşturmamız bizim için yeterli(maksimum 5 instance’a izin verir). Ardından herhangi bir instance’ınıza girin ve onunla k8s cluster oluşturalım :

Komutları sırasıyla girdiğimizde ip’si solda gözüken node1 makinesinde bir k8s cluster oluşturuyoruz ve kubeadm init <...> komutunu girdiğimiz için de bu makine control plane(master node) olarak seçilmiş oluyor. Burada kubeadm kısmını okuduysanız benzer şeyleri yapıyor olacağımızı göreceksiniz. İlk olarak kubeadm init — apiserver-advertise-address $(hostname -i) — pod-network-cidr <ip> komutunu giriyoruz(sitede ctrl+c/v çalışmıyor kopyala yapıştır için Ctrl + Insert ve Shift+Insert yapmalısınız). Bu komut sonlandığında yine hatırladığınız üzere bize yönlendirmeler veriyordu :

Diğer instance’lara gidip onları k8s cluster’ımıza worker node olarak bağlamak için yukarıda sizi yönlendirdiği komutu alıp diğer instance’lara yazıyoruz(2). Sonra yine bizi yönlendirdiği üzere master node’umuza gidip “./kube/config” ayarını yapıyoruz(1). Bu adımlardan sonra :

kubectl get nodes komutunda da görüldüğü üzere işlemimiz başarılı. İlk kez play with kubernetes’i açtığımızda bize 3 adım vermişti biz ilkini yani kubeadm init adımını yaptık. “NotReady”lerin “Ready” olabilmesi için hatırlarsanız networking’i ayarlamamız gerekiyordu. Ayarlamak için bize verdiği ikinci komutu da çalıştıralım :

Komutu çalıştırdıktan sonra networking’i ayarlıyor bizim için ve node’larımız “Ready” statüsüne geliyor. Üçüncü adım optional olarak verilmiş, isterseniz bir nginx deployment yapabileceğinizi söylüyor. Şimdilik orayı atlayalım; dilerseniz kendiniz bir deneyebilirsiniz ^^. kubeadm kısmında öğrendiklerimizi de böylece pekiştirmiş olduk.

Kurulumlarla ilgili epey bir şey öğrendik; Sonraki yazılarımızda asıl işimize geçip k8s dünyasını keşfedelim.

Şimdi biraz dinlenme vakti. Sonraki yazılarda görüşmek üzere, sağlıklı | mutlu günler.

--

--