Yazılım Geliştiriciler için Azure: Azure VM Üzerine Kubernetes (MicroK8s) Kurulumu

020319_2152_YazlmGeliti4.png

MicroK8s’i, Canonical (Ubuntu dersem tanıdık gelecektir) mühendisleri tarafından geliştirilmiş ve “Kubernetes for workstations and appliances” olarak tanımladıkları; development, test ve küçük boyuttaki CI/CD süreçleriniz için kullanabileceğiniz bir Kubernetes deployment olarak tanımlayabiliriz. Eğer Kubernetes ile ilgili bir bilgim yok ya da sadece duydum diyorsanız; okumaya başlamadan önce Onur Yüksektepeli’nin Kubernetes Nedir? yazısını okumanızı tavsiye ediyorum.

NOT: Azure üzerinden yönetilen bir Kubernetes servisi (Azure Kubernetes Service, AKS) mevcut. Bu konuya da ilerleyen zamanlarda değineceğiz.

Kurulumu local bir VM ya da eğer Ubuntu kullanıyorsanız direkt bilgisayarınız üzerine kurabilirsiniz. Bu yazıda işin içine biraz daha network (internet) tarafını dahil etmek için Azure üzerinde kuracağımız bir Ubuntu VM üzerine yapacağız.

Öncelikle Azure üzerinde bir sanal makine tanımı yaparak başlayalım. Resim-1‘de göreceğiniz gibi standart olarak bir VM tanımlıyoruz. Basic A2 boyutunda yani 2 vcpu ve 3,5 GB RAM’e sahip bir VM’e Ubuntu Server 18.04 LTS kuracağız. Authentication type olarak kullanıcı adı ve şifre seçiyorum. Sunucuya SSH üzerinden bağlanacağımız için de HTTP (80) ve HTTPS (443) portları dışında bir de SSH (22) portunu açıyorum.

Resim-1

Gerekli tanımlamaları yaptıktan sonra Resim-2‘de göreceğiniz gibi özet sayfasını göreceksiniz. Çok fazla özelliğe ihtiyacımız olmadığı için birçok “Off” ve “Disabled” görüyorsunuz.

Resim-2

Sanal makinemiz aktif hale geldikten sonra DNS tanımı yapmamız gerekiyor. Bunun için de Resim-3‘te göreceğiniz gibi Overview altında, DNS name yanındaki Configure’a tıklıyoruz.

Resim-3

Settings/Configuration altında DNS name label’a sanal makineye verdiğimiz ismi veriyoruz (Resim-4). Diğer ayarları olduğu gibi bırakabiliriz.

Resim-4

Ayarları kaydettikten sonra Resim-5‘teki gibi DNS name yanında <dns_label>.<location>.cloudapp.azure.com formatındaki DNS adresimizi görebilirsiniz.

Resim-5

Sanal makine ile ilgili ayarları tamamladıktan sonra sıra geldi bağlanmaya. Linux makine olduğu için biz de standartlara uyarak SSH ile bağlanalım. Bunun için Resim-6‘da göreceğiniz gibi ssh <kullanıcı_adi>@<dns_adı> şeklinde bağlantıyı sağlayabiliriz.

Resim-6

Bağlantıyı sağladıktan sonra artık terminal üzerinde çalışmaya başlayabiliriz. Ubuntu kurduktan sonra ilk yapılacak işlerden biri de tabi ki güncellemek :) Bunun için apt-get update ve apt-get upgrade komutlarını çalıştırıyoruz (Resim-7).

Resim-7

Güncel bir Ubuntu’ya sahip olduğumuzdan emin olduktan sonra sırada MicroK8s kurmaya geldi. Kubernetes kurulumu deyince karışık adımları olacağı akla gelebilir ama MicroK8s tek bir komutla kuruluyor. Ubuntu ile gelen ve “Linux’un App Store’u” olarak tanımlanan snap aracılığı ile kurulumu hızlıca yapabiliyoruz.

Terminale sudo snap install microk8s –classic yazmamız yeterli (Resim-8).

Resim-8

MicroK8s birçok eklenti ile birlikte geliyor. Kurulumda bunlar aktif olmadığı için ihtiyaca göre aktif hale getirebilirsiniz.

  • DNS: Kube dns’i kuruyor, diğer eklentiler tarafından ihtiyaç duyulabileceğinden her zaman aktifleştirilmesi öneriliyor.
  • Dashboard: Kubernetes dashboard ile birlikte Grafana ve Influxdb’yi de kuruyor.
  • Storage: Varsayılan storage class’ı kurmak için gerekli.
  • Ingress: Bir ingress controller kurmak için aktifleştirebilirsiniz.
  • GPU: GPU’ları MicroK8s’e expose etmek için gerekli nvidia-docker runtime ve nvidia-device-plugin-daemonset ‘i aktifleştirmek için, host üzerinden nvidia sürücülerinin kurulu olması gerekiyor.
  • Istio: Core Istio servislerini kuruyor.
  • Registry: localhost:32000 üzerinden çalışan local bir docker registry kuruyor.

DNS, Kubernetes dashboard ve local docker registry’yi aktif hale getirmek için Resim-9‘daki microk8s.enable komutunu çalıştırıyoruz.

Resim-9

MicroK8s ile birlikte geldiği için ayrıca Kubectl ve docker daemon kurmadık. microk8s.docker ve microk8s.kubectl şeklinde uzun uzun yazmamak için alias tanımı yapabiliriz (Resim-10).

Resim-10

Her şey hazır gibi görünüyor, kubectl get all –all-namespaces komutu ile ne var ne yok her şeyi görebilirsiniz (Resim-11).

Resim-11

Her şey çalışıyor görünüyor ancak bir eksiğimiz var. Kubernetes dashboard’a sanal makine dışından yani kendi bilgisayarımızdan dns adını yazarak erişemiyoruz. Bunun için küçük bir güncelleme yapmamız gerekiyor.

kubectl -n kube-system edit service kubernetes-dashboard komutu ile kube-system namespace’i altında yer alan kubernetes-dashboard servisinin config dosyasında bir güncelleme yapacağız. Resim-12‘de göreceğiniz gibi servis tipi Cluster-IP. Bu varsayılan tip ve sadece cluster içerisinden erişebiliriz anlamına geliyor.

Resim-12

Cluster dışından erişmek istiyoruz ancak servis tipi olarak LoadBalancer tanımı da yapamıyoruz çünkü bir yük dengeleyici konumlandırmadık. Bu durumda servis tipini NodePort olarak yapabiliriz (Resim-13), bu da açılan port üzerine gelen isteklerin bu servise yönlendirileceği anlamına geliyor.

NOT: Bu işlemi vi editör ile yaptığımız için i ile insert mode’a alıyoruz. Değişiklikleri yaptıktan sonra ESC ile insert mode’den çıkıp, : bastıktan sonra wq! Yazarak değişiklikleri kaydedip çıkış yapabilirsiniz.

Resim-13

Node port’un, servis başına sadece bir port ve 30000–32767 arasında olması gerekiyor. kubectl -n kube-system get services komutu ile atanan node port değerine bakalım (Resim-14).

Resim-14

31559 portu üzerinden sunucuya geldiğimizde dashboard’a erişebiliriz. Ancak bu port standart bir port olmadığı için Azure üzerinden erişime açmamız gerekiyor. VM ile birlikte oluşturulan network security group’a Add inbound security rule seçeneği ile port tanımını yapabiliriz. Sadece Destination port range‘e node port değerini ekliyoruz ve k8sDashboard adını veriyoruz (Resim-15).

Resim-15

Ekledikten sonra Resim-16‘da göreceğiniz gibi VM oluştururken açtığımız diğer portlarla birlikte node port değerini de görebilirsiniz.

Resim-16

Portu açtıktan sonra dashboard’a erişimi test etmek kalıyor. Tarayıcıya <dns_adı>:<node_port> şeklinde yazarak Resim-17‘de göreceğiniz şekilde dashboard’a erişebiliyoruz. Erişim için herhangi bir ayar yapmadığımız için devam etmek için skip diyebilirsiniz.

Resim-17

Son olarak Kubernetes dashboard kullanıma hazır (Resim-18).

Resim-18

Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.

Referanslar

www.mshowto.org

https://microk8s.io/docs/

https://github.com/kubernetes/dashboard/wiki/Accessing-Dashboard—1.7.X-and-above

https://tutorials.ubuntu.com/tutorial/install-a-local-kubernetes-with-microk8s#2

TAGs: Azure, Azure Portal, Azure VM, Yazılım Geliştiriciler için Azure, Kubernetes, k8s, MicroK8s, Docker, Containers, Linux, Ubuntu, LoadBalancer, NodePort, ClusterIP, Kubernetes Dashboard, vi editor, vi, ssh, terminal, shell, snap

Yazı gezinmesi

Mobil sürümden çık