Kind, Docker kullanarak kubernetes kümesi oluşturmamızı sağlayan bir araçtır. Basit kullanımı sayesinde cluster kurulumu sırasında harcanan zamanı en aza indiriyor aslında. 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…
NOT: Vagrant kullanmak istemiyorsanız 2.adımdan devam edebilirsiniz. Docker olan bir ortamda kolaylıkla adımları uygulayabilirsiniz.
Öncelikle bilgisayarınıza daha önce Vagrant'ı kurmadıysanız bu adresten sisteminize göre indirebilirsiniz.
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. Bizde 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
Şimdi 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 sunucusu ayağa kaldıracak. Terminalimizden bu Vagrantfile’ın bulunduğu path’e gidiyoruz ve sırasıyla aşağıdaki komutu yazıyoruz.
vagrant up
vagrant ssh kind
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 login olduysanız herşey yolunda gidiyor demektir 😊
Docker’ı hızlı bir şekilde kurmak için bu adresinden 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
#Docker'ı kendi kullanıcımıza eklemek için;
$ usermod -aG docker ${USER}
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 komuttan dolayı olmakta. Exit ile sunucudan çıkıp veya terminalinizi yeniledikten sonra sorununuzun düzelmiş olması gerekiyor.
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
Şimdi 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.
Şimdi 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
Başlamadan önce önemli bir konuya değinmek istiyorum. Eğer siz de benim gibi vagrant, virtualbox, vmware gibi bir ortamda sunucu ayağa kaldırıp bu sunucuya docker ve kind kurup işlemlerinizi yapıyorsanız bazı ayarlar yapmanız gerekicek(birazdan bahsedeceğim). Fakat bu şekilde değilde, 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 ne bu ayarlar?
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şemeyeceğiz doğal olarak(sunucu içinden veya container’a exec olarak erişebilirsiniz sadece). İş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 anlayacaksınız. Şimdi önce local de çalışanlar için nasıl cluster kurulacağınız göstereceğim ve daha sonra vagrant, vmware vs. ortamında çalışanlar için ne yapılması gerektiğini göstereceğim.
Eğer siz harici bir sunucu veya vagrant kullanmıyorsanız aşağıda belirtilen dosyayı oluşturmanıza gerek yok direk 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 olarak kind olarak ayarlanacaktır.
İlk başta image’i ç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üyorsanız tebrikler node’unuz hazır. Şimdi node’umuzu görmek için aşağıdaki komutu yazıyoruz ve karşımıza node’umuz ile ilgili bir kaç bilgi çıkmakta.
$ 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.)
Şimdi yukarda 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.
Burda 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’in 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ına192.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 yukarda oluşturduğumuz komutu girmeniz yeterli olacaktır. Image 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 biriside_kubectl port-forward_
,dilerseniz bu adreesten daha fazla bilgi alabilirsiniz. kullanabilirsiniz.
Kind hızlı bir şekilde cluster ortamı kurabileceğimiz ve testlerimizi yapabileceğimiz çok kullanışlı bir araç. Ayrıca kind ile birden fazla node ayağa kaldırabilirsiniz. Daha fazla bilgi için kind’ın kendi dökümanını ziyaret edebilirsiniz.