Vagrant ve Kind Kullanarak Kubernetes Cluster Kurulumu

Giriş
Kind, Docker kullanarak Kubernetes cluster’ı oluşturmamızı sağlayan bir araçtır. Basit kullanımı sayesinde cluster kurulumu sırasında harcanan zamanı en aza indirir. Daha da hızlı olması için buna ek olarak Vagrant kullanacağız.
Yani bugün Vagrant ile ayağa kaldırdığımız sunucuya Docker ve Kind kurarak, bir Kubernetes ortamı oluşturmaya çalışacağız. Öyleyse başlayalım…
1) Vagrantfile Hazırlama
Başlamadan önce Vagrant’ın ne olduğuna biraz değinelim. Vagrant, sanal makine oluşturmak ve oluşturulan sanal makineleri yönetmek için kullanılan oldukça kullanışlı bir araçtır. Biz de Vagrant ile bir sanal Ubuntu makinesi oluşturacağız. Ben aşağıdaki gibi bir Vagrantfile hazırladım ve sunucu özelliklerini minimum düzeyde tuttum. Siz de buradaki ayarları kendinize göre değiştirebilirsiniz.
IMAGE_NAME = "bento/ubuntu-16.04" Vagrant.configure("2") do |config| config.ssh.insert_key = false config.vm.provider "virtualbox" do |v| v.memory = 2048 v.cpus = 2 end config.vm.define "kind" do |master| master.vm.box = IMAGE_NAME master.vm.network "private_network", ip: "192.168.50.10" master.vm.hostname = "kind" end end
Bu Vagrantfile’ı çalıştırdığımızda bize Ubuntu-16.04 sürümünde, belli bir CPU ve memory kullanan ve IP adresini belirlediğimiz bir Ubuntu sunucusunu ayağa kaldırır. Terminalimizden bu Vagrantfile’ın bulunduğu path’e gidelim ve sırasıyla aşağıdaki komutu yazalım;
vagrant upvagrant ssh kind”#091a47″
‘Vagrant up’ komutu ile Bento/Ubuntu-16.04 box’ını çektik ve ayağa kaldırdık, daha sonrasında bu sanal sunucuya erişmek için diğer bir komut olan ‘vagrant ssh kind’ komutunu yazdık. Eğer sunucuya giriş yaptıysanız, her şey yolunda gidiyor demektir.
2) Docker Kurulumu
Docker’ı hızlı bir şekilde bu adresten, kullandığınız ortama uygun olarak kurabilirsiniz. Ben de Docker’ın kendi kurulum talimatlarını referans alarak, sizlere Ubuntu için gereken adımları aşağıya sıralı olarak ekleyeceğim. Bunları adım adım Vagrant ile ayağa kaldırdığınız sunucuda uygulayabilirsiniz.
$ sudo apt-get update -y $ sudo apt-get install -y \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - $ sudo apt-key fingerprint 0EBFCD88 $ sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" $ sudo apt-get update -y $ sudo apt-get install docker-ce docker-ce-cli containerd.io -y
Kurulum adımlarını yaptıktan sonra, başlayıp silinecek bir test container’ı başlatalım.
$ docker run --rm hello-world && docker rmi hello-world

Eğer yukarıdaki gibi bir çıktı aldıysanız Docker da başarılı bir şekilde kurulmuş demektir.
NOT: Eğer yukarıdaki gibi bir çıktı almadıysanız, bunun sebebi kurulum adımının sonunda girdiğiniz komuttur. Exit ile sunucudan çıkıp tekrar giriş yaptıktan sonra sorununuzun düzelmiş olması gerekir.
3) Kind Kurulumu
Kind’ı kurmak için buradaki GitHub adresine gidebilirsiniz ve sizin sisteminize uygun olan Kind sürümünü kurabilirsiniz. Linux kullananlar benim yaptığım işlemleri yapabilir.
$ kind version
Kind’ı kurduktan sonra ‘kind version’ komutu ile versiyon kontrolünü yapalım. “kind v0.9.0 go1.15.2 linux/amd64” benzeri bir çıktı aldıysanız devam edelim.
4) Kubectl Kurulumu
Kubernetes API ile konuşmamız için gerekli olan kubectl aracını kurmamız gerekmekte. Bu adresten kurulumu kendi sisteminize göre yapabilirsiniz.
$ curl -LO "[https://storage.googleapis.com/kubernetes-release/release/$(curl](https://storage.googleapis.com/kubernetes-release/release/$(curl) -s [https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl](https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl)" $ chmod +x ./kubectl $ sudo mv ./kubectl /usr/local/bin/kubectl $ kubectl version
5) Kind ile Kubernetes Cluster Kurulumu
Başlamadan önce önemli bir konuya değinmek istiyorum. Eğer siz de benim gibi Vagrant, VirtualBox, Vmware gibi bir ortamda sunucuyu ayağa kaldırıp, bu sunucuya Docker ve Kind kurup işlemlerinizi yapıyorsanız, bazı ayarlar yapmanız gerekir (birazdan bahsedeceğim). Fakat bu şekilde değil de, bir Linux kullanıyorsanız ve Docker’ınız bu Linux üzerindeyse veya Windows kullanıyorsanız ve Docker’ınız Docker desktop ise işiniz gayet kolay. Peki bu ayarlar nedir?
Kind, Docker container olarak çalışmakta ve bu yüzden biz araya label (vagrant vs) eklediğimiz zaman bu node’da ayağa kaldırdığımız uygulamalara dışardan erişemeyiz doğal olarak (sadece, sunucu içinden veya container’a exec olarak erişebilirsiniz). İşte bu noktada bizim, cluster’ı ayağa kaldırırken hazırlamamız gereken bir config dosyası olması gerekiyor ve bu config dosyasında istediğimiz portları belirtmemiz gerekiyor. Ben uygulamalara nodePort vereceğim için, bu port aralığı 30000–32767 olmalı. Yani bu aralıkta dışarı bir port açmam gerekiyor. Lafı uzatmadan işlemlerimize devam edelim, bu sayede daha iyi anlayabilirsiniz. Size local’da çalışanlar için nasıl cluster kurulacağını ve daha sonra Vagrant, Vmware vb. ortamlarda çalışanlar için ne yapılması gerektiğini göstereyim.
5.1) Sanal Sunucu (Vagrant, Vmware vb.) Kullanmayanlar İçin Cluster Kurma
Eğer siz harici bir sunucu veya Vagrant kullanmıyorsanız, aşağıda belirtilen dosyayı oluşturmanıza gerek yok. Direkt aşağıdaki komut ile Node’u çalıştırabilirsiniz.
$ kind create cluster --name NODE-ISMI
Yukarıdaki komutu çalıştırarak işleminize devam edebilirsiniz ( —name parametresi zorunlu değil). Eğer eklemezseniz Node ismi default ve Kind olarak ayarlanacaktır. İlk başta görüntüyü çekmesi, internet hızınıza bağlı olmakla beraber biraz zaman alabilir (sonraki cluster kurulumları çok hızlı bir şekilde işleniyor). Daha sonra aşağıdaki gibi bir ekran görmeniz gerekiyor.

Eğer böyle bir ekran görürseniz tebrikler, node’unuz hazır. Node’umuzu görmek için aşağıdaki komutu yazdığımız zaman, karşımıza node’umuz ile ilgili birkaç bilgi çıkar;
$ kubectl get node
Evet artık bir uygulama ile test edebiliriz. Aşağıda örnek bir deployment.yaml dosyası bulunmakta, dilerseniz bu deployment ile node’unuzu test edebilirsiniz (siz config adımını geçebilirsiniz).
5.2) Sanal Sunucu (vagrant, vmware vb.) Kullananlar için Cluster Kurulumu
Şimdi yukarıda da bahsettiğim gibi siz Vagrant, Vmware vs. kullanıyorsanız, öncelikle kindconfig.yaml adında bir dosya oluşturmalısınız ve aşağıda belirttiğim gibi ayarlamalısınız.
Burada yaptığımız işlem aslında şu; master node’umuzda 30080 portunu açmasını söylüyoruz, böylece node içerisinde 30080 portunda çalışan bir uygulama olduğu takdirde dışardan bu uygulamaya erişebileceğiz. Hemen test bir deployment üzerinde deneyelim.
Şimdi bu deployment.yaml dosyası ile bir deployment ve service oluşturuyoruz. Basitçe bir nginx çalıştırıyoruz aslında. Service kısmında gördüğünüz üzere bu service’ın type’ı olarak NodePort kullanıyorum ve nodePort olarak da 30080 portunu verdim. Hatırlarsanız kindconfig.yaml dosyasında da bu portu kullanmıştık. Şimdi uygulamamızı ayağa kaldıralım bunun için;
$ kubectl apply -f deployment.yaml

Yukarıdaki resimdeki gibi pod’unuzun STATUS değeri Running ise başarılı bir şekilde çalıştığı anlamına geliyor. Şimdi bunu test etmek için local bilgisayarınızdan herhangi bir tarayıcı açın ve adres alanına 192.168.50.10:30080 (kendi IP adresinize göre) değerini girin ve enter’a basın.

Yukarıdaki gibi bir ekran sizi karşılıyorsa, uygulamanız ve node’unuz başarılı bir şekilde çalışıyor demektir. İşiniz bittiğinde cluster’ı silmek için aşağıdaki komutu kullanmanız gerekiyor;
$ kind delete clusters [NODE-NAME]
Daha sonra tekrar başlatmak için, yukarıda oluşturduğumuz komutu girmeniz yeterli olacaktır. Görüntü Docker’da hazır olduğu için cluster’ın kurulması çok kısa sürecektir.
NOT: Unutmayın, silip tekrar cluster oluştururken bir sanal sunucu kullanıyorsanız, mutlaka — config parametresini kullanmanız gerekiyor. Biz tek port açmıştık fakat siz daha fazla port açabilirsiniz ve bu şekilde uygulamalara erişebilirsiniz. NodePort kullanmak istemezseniz eğer bunun dışında birçok yol bulunmakta, bunlardan birisi de _kubectl port-forward_. Dilerseniz bu adresten daha fazla bilgi alabilirsiniz.
Kind bence hızlı bir şekilde cluster ortamı kurabildiği için ve hızlı bir şekilde testlerimizi yapabildiğimiz için çok kullanışlı bir araç. Fakat birçok sıkıntısı bulunmakta ve bu sıkıntıların da zaman geçtikçe giderileceğine inanıyorum. Kind ile birden fazla node ayağa kaldırabilirsiniz. Daha fazla bilgi için sizi Kind’ın kendi dokümanına alalım.
Kendinize çok iyi bakın.
Yazan: Doğukan Turan
Yayınlanma Tarihi: 29.04.2021
