Alıştırma - Kubernetes kümesinin işlevselliğini keşfetme
Kubernetes’i yerel olarak çalıştırırken kullanabileceğiniz çeşitli seçenekler vardır. Kubernetes’i fiziksel makinelere veya sanal makinelere yükleyebilir ya da Azure Kubernetes Service (AKS) gibi bulut tabanlı bir çözüm kullanabilirsiniz.
Bu alıştırmadaki amacınız tek düğümlü kümeye sahip olan bir Kubernetes yüklemesini keşfetmektir. Bu alıştırmada, kurulumu ve yok olması kolay bir MicroK8s ortamı yapılandırmayı ve yüklemeyi öğreneceksiniz. Ardından bir Kubernetes hizmeti dağıtıp bir web sitesini barındırmak için ölçeğini birden çok örneğe genişletirsiniz.
Dekont
Bu alıştırma isteğe bağlıdır ve bu alıştırmada kullanacağınız yazılım ve kaynakları silip kaldırmayı gösteren adımlar içerir.
MiniKube ve Docker’da Kubernetes desteği gibi aynı işlevi gören başka seçeneklerinizin olduğunu da aklınızda bulundurun.
MicroK8s nedir?
MicroK8s, hedef iş istasyonlarına ve Nesnelerin İnterneti (IoT) cihazlarına tek düğümlü bir Kubernetes kümesini tek bir paket olarak dağıtma seçeneğidir. Ubuntu Linux'un yaratıcısı olan Canonical, başlangıçta geliştirilmiştir ve şu anda MicroK8'lerin bakımını üstlenmiştir.
MicroK8s’i Linux, Windows ve macOS üzerinde yükleyebilirsiniz. Ancak, yükleme yönergeleri her bir işletim sistemi için biraz farklıdır. Ortamınıza en uygun olan seçeneği belirleyin.
MicroK8s’i Linux üzerinde yükleme
MicroK8s’i Linux üzerinde yükleme, en az adıma sahip yükleme seçeneğidir. Bir terminal penceresine geçiş yapın ve şu yönergelerde yer alan komutları çalıştırın:
MicroK8s anlık görüntü uygulamasını yükleyin. Bu adımın tamamlanması, internet bağlantınızın ve masaüstünüzün hızına bağlı olarak birkaç dakika sürebilir.
sudo snap install microk8s --classic
Başarılı bir yüklemede aşağıdaki ileti gösterilir.
2020-03-16T12:50:59+02:00 INFO Waiting for restart... microk8s v1.17.3 from Canonical✓ installed
Şimdi kümeye eklentiler yüklemeye hazırsınız.
MicroK8s’i Windows üzerinde yükleme
Windows üzerinde MicroK8s’i çalıştırmak için Multipass kullanın. Multipass Linux, Windows ve macOS için hafif bir sanal makine yöneticisidir.
En güncel Windows için Multipass sürümünü GitHub’dan indirip yükleyin.
Microk8s-vm görüntüsünü yapılandırıp çalıştırmak için bir komut konsolunda Multipass başlatma komutunu çalıştırın. Bu adımın tamamlanması, internet bağlantınızın ve masaüstünüzün hızına bağlı olarak birkaç dakika sürebilir.
multipass launch --name microk8s-vm --memory 4G --disk 40G
microk8s-vm için başlatma onayını aldıktan sonra komutunu çalıştırarak
multipass shell microk8s-vm
VM örneğine erişin.multipass shell microk8s-vm
Çoklu geçiş çalışmaya başladığında, kümenizi barındırmak ve MicroK8s yüklemek için Ubuntu VM'sine erişebilirsiniz.
MicroK8s anlık görüntü uygulamasını yükleyin. Bu adımın tamamlanması, internet bağlantınızın ve masaüstünüzün hızına bağlı olarak birkaç dakika sürebilir.
sudo snap install microk8s --classic
Başarılı bir yükleme aşağıdaki iletiyi gösterir:
2020-03-16T12:50:59+02:00 INFO Waiting for restart... microk8s v1.17.3 from Canonical✓ installed
Şimdi kümeye eklentiler yüklemeye hazırsınız.
MicroK8s’i macOS üzerinde yükleme
macOS üzerinde MicroK8s’i çalıştırmak için Multipass kullanın. Multipass Linux, Windows ve macOS için hafif bir sanal makine yöneticisidir.
macOS üzerinde Multipass’i yüklemek için iki seçeneğiniz vardır. GitHub’dan macOS için Multipass’in en son sürümünü indirin veya
brew cask install multipass
komutuyla Multipass’i yüklemek için Homebrew’u kullanın.brew install --cask multipass
Microk8s-vm görüntüsünü yapılandırıp çalıştırmak için bir komut konsolunda Multipass başlatma komutunu çalıştırın. Bu adımın tamamlanması, internet bağlantınızın ve masaüstünüzün hızına bağlı olarak birkaç dakika sürebilir.
multipass launch --name microk8s-vm --memory 4G --disk 40G
microk8s-vm için başlatma onayını aldıktan sonra komutunu çalıştırarak
multipass shell microk8s-vm
VM örneğini girin.multipass shell microk8s-vm
Bu noktada, kümenizi barındırmak için Ubuntu VM'sine erişebilirsiniz. MicroK8s’i yine de yüklemeniz gerekir. Buradaki adımları izleyin.
MicroK8s anlık görüntü uygulamasını yükleyin. Bu adımın tamamlanması, internet bağlantınızın ve masaüstünüzün hızına bağlı olarak birkaç dakika sürebilir.
sudo snap install microk8s --classic
Başarılı bir yükleme aşağıdaki iletiyi gösterir:
2020-03-16T12:50:59+02:00 INFO Waiting for restart... microk8s v1.17.3 from Canonical✓ installed
Şimdi kümeye eklentiler yüklemeye hazırsınız.
Kümeyi hazırlama
Kümenizde yüklü olan eklentilerin durumunu görüntülemek için MicroK8s’deki durum komutunu kullanın. Bu eklentiler, daha önce ele aldığınız birkaç hizmeti sağlar. DNS işlevselliği bir örnektir.
Yüklemenin durumunu denetlemek için
microk8s.status --wait-ready
komutunu çalıştırın.sudo microk8s.status --wait-ready
Kümenizde birkaç devre dışı eklenti olduğuna dikkat edin. Tanımadığınız eklentiler konusunda endişelenmeyin.
microk8s is running addons: cilium: disabled dashboard: disabled dns: disabled fluentd: disabled gpu: disabled helm3: disabled helm: disabled ingress: disabled istio: disabled jaeger: disabled juju: disabled knative: disabled kubeflow: disabled linkerd: disabled metallb: disabled metrics-server: disabled prometheus: disabled rbac: disabled registry: disabled storage: disabled
Listeden DNS, Pano ve Kayıt Defteri eklentilerini etkinleştirmeniz gerekir. Her eklentinin amaçları şunlardır:
Eklentiler Purpose DNS coreDNS
hizmetini dağıtır.Kokpit kubernetes-dashboard
hizmetini ve bu hizmetin işlevselliğini destekleyen diğer çeşitli hizmetleri dağıtır. Genel amaçlı, Kubernetes kümelerine yönelik web tabanlı bir kullanıcı arabirimidir.Kapsayıcı Kayıt Defteri Özel bir kayıt defteri ve bu kayıt defterinin işlevselliğini destekleyen diğer çeşitli hizmetleri dağıtır. Özel kapsayıcıları depolamak için bu kayıt defterini kullanın. Eklentileri yüklemek için aşağıdaki komutu çalıştırın.
sudo microk8s.enable dns dashboard registry
Artık ile kubectl
kümenize erişmeye hazırsınız.
Kubernetes kümesini keşfetme
MicroK8s, yeni Kubernetes kümenizle etkileşim kurmak için kullanabileceğiniz bir kubectl
sürümü sağlar. kubectl
öğesinin bu kopyası, işlevselliğini etkilemeden başka bir sistem genelindeki kubectl
örneğinin paralel yüklemesine sahip olmanızı sağlar.
microk8s.kubectl
komutunakubectl
diğer adını vermek içinsnap alias
komutunu çalıştırın. Bu adım kullanımı basitleştirir.sudo snap alias microk8s.kubectl kubectl
Komut başarıyla tamamlandığında aşağıdaki çıkış görüntülenir:
Added: - microk8s.kubectl as kubectl
Küme düğümü bilgilerini görüntüleme
Kontrol düzlemleri ve çalışan düğümleri dışında bir Kubernetes kümesinin bulunduğunu önceden hatırlarsınız. Nelerin yüklü olduğunu görmek için yeni kümeyi keşfedelim.
Kümenizde çalışmakta olan düğümleri denetleyin.
MicroK8s’nin tek bir düğüm kümesi yüklemesi olduğunu biliyorsunuz, yani yalnızca tek bir düğüm görmeyi beklersiniz. Yine de bu düğümün kümede hem denetim düzlemi hem de çalışan düğümü olduğunu aklınızda bulundurun.
kubectl get nodes
komutunu çalıştırarak bu yapılandırmayı onaylayın. Kümenizdeki tüm kaynaklar hakkında bilgi almak için komutunukubectl get
çalıştırın:sudo kubectl get nodes
Sonuç, kümede microk8s-vm adlı tek bir düğüm olduğunu gösteren aşağıdaki örneğe benzer. Düğümün, hazır durumda olduğuna dikkat edin. Hazır durumu, kontrol düzleminin bu düğüm üzerinde iş yükleri zamanlayabileceğini belirtir.
NAME STATUS ROLES AGE VERSION microk8s-vm Ready <none> 35m v1.17.3
İstenen belirli kaynak için daha fazla bilgi edinebilirsiniz. Örneğin, düğümün IP adresini bulmanız gerektiğini varsayalım. API sunucusundan ek bilgi getirmek için parametresini
-o wide
çalıştırın:sudo kubectl get nodes -o wide
Sonuç aşağıdaki örneğe benzer. Şu anda düğümün iç IP adresini, düğüm üzerinde çalışan işletim sistemini, çekirdek sürümünü ve kapsayıcı çalışma zamanını görebildiğinize dikkat edin.
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME microk8s-vm Ready <none> 36m v1.17.3 192.168.56.132 <none> Ubuntu 18.04.4 LTS 4.15.0-88-generic containerd://1.2.5
Sonraki adım, kümenizde çalışan hizmetleri keşfetmektir. Düğümlerde olduğu gibi, küme üzerinde çalışan hizmetlerle ilgili bilgileri bulmak için
kubectl get
komutunu çalıştırın.sudo kubectl get services -o wide
Sonuç aşağıdaki örneğe benzer, ancak yalnızca bir hizmetin listelendiğine dikkat edin. Daha önce kümeye eklentiler yüklemişsinizdir ve bu hizmetleri de görmeyi beklersiniz.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 37m <none>
Tek bir hizmet listesinin nedeni, Kubernetes'in bir kümeyi mantıksal olarak birden çok sanal kümeye bölmek için ad alanları adlı bir kavram kullanmasıdır.
Tüm ad alanları içindeki tüm hizmetleri getirmek için parametresini
--all-namespaces
geçirin:sudo kubectl get services -o wide --all-namespaces
Sonuç aşağıdaki örneğe benzer. Kümenizde üç ad alanı olduğuna dikkat edin.
container-registry
vekube-system
ad alanları varsayılandır. Burada, yüklediğinizregistry
,kube-dns
vekubernetes-dashboard
örneklerini görebilirsiniz. Bazı eklentilerle birlikte yüklenen destekleyici hizmetler de vardır.NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR container-registry registry NodePort 10.152.183.36 <none> 5000:32000/TCP 28m app=registry default kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 37m <none> kube-system dashboard-metrics-scraper ClusterIP 10.152.183.130 <none> 8000/TCP 28m k8s-app=dashboard-metrics-scraper kube-system heapster ClusterIP 10.152.183.115 <none> 80/TCP 28m k8s-app=heapster kube-system kube-dns ClusterIP 10.152.183.10 <none> 53/UDP,53/TCP,9153/TCP 28m k8s-app=kube-dns kube-system kubernetes-dashboard ClusterIP 10.152.183.132 <none> 443/TCP 28m k8s-app=kubernetes-dashboard kube-system monitoring-grafana ClusterIP 10.152.183.88 <none> 80/TCP 28m k8s-app=influxGrafana kube-system monitoring-influxdb ClusterIP 10.152.183.232 <none> 8083/TCP,8086/TCP 28m k8s-app=influxGrafana
Artık kümede çalışan hizmetleri görebildiğinize göre, çalışan düğümü üzerinde iş yükü zamanlayabilirsiniz.
Kümeye web sunucusu yükleme
Müşterilerinize bir web sitesi sunmak için küme üzerinde bir web sunucusu zamanlamak istiyorsunuz. Farklı seçeneklerden birini kullanabilirsiniz. Bu örnekte NGINX kullanırsınız.
Önceden hatırlayacağınız gibi, iş yüklerini tanımlamak amacıyla podlarınızı, çoğaltma kümelerinizi ve dağıtımlarınızı tanımlamak için pod bildirim dosyalarını kullanabilirsiniz. Bu dosyaları ayrıntılı olarak ele almadığınızdan, bilgileri doğrudan API sunucusuna geçirmek için komutunu çalıştırırsınız kubectl
.
kubectl
kullanımı yararlı olsa da, bildirim dosyalarının kullanılması en iyi uygulamadır. Bildirim dosyaları, kümenizdeki dağıtımları kolayca ileri veya geri sarmanıza olanak verir. Bu dosyalar, bir kümenin yapılandırmasını belgelemeye de yardımcı olur.
NGINX dağıtımınızı oluşturmak için
kubectl create deployment
komutunu çalıştırın. Tek bir pod örneği oluşturmak için dağıtımın ve kapsayıcı görüntüsünün adını belirtin.sudo kubectl create deployment nginx --image=nginx
Sonuç aşağıdaki örneğe benzer:
deployment.apps/nginx created
Dağıtımınız hakkındaki bilgileri getirmek için komutunu çalıştırın
kubectl get deployments
:sudo kubectl get deployments
Sonuç aşağıdaki örneğe benzer. Dağıtım adının verdiğiniz adla eşleştiğini ve bu ada sahip dağıtımın hazır ve kullanılabilir durumda olduğuna dikkat edin.
NAME READY UP-TO-DATE AVAILABLE AGE nginx 1/1 1 1 18s
Dağıtım bir pod oluşturdu. Kümenizin podları hakkında bilgi almak için komutunu
kubectl get pods
çalıştırın:sudo kubectl get pods
Sonuç aşağıdaki örneğe benzer. Pod adının, dağıtımın adıyla ön ekli oluşturulan bir değer olduğuna ve podun Çalışıyor durumuna sahip olduğuna dikkat edin.
NAME READY STATUS RESTARTS AGE nginx-86c57db685-dj6lz 1/1 Running 0 33s
Web site yüklemesini test etme
Podun IP adresi aracılığıyla web sunucusuna bağlanarak NGINX yüklemesini test edin.
Podun adresini bulmak için parametresini
-o wide
geçirin:sudo kubectl get pods -o wide
Sonuç aşağıdaki örneğe benzer. Komutun hem düğümün IP adresini hem de iş yükünün zamanlandığı düğümün adını döndürdüğüne dikkat edin.
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-86c57db685-dj6lz 1/1 Running 0 4m17s 10.1.83.10 microk8s-vm <none> <none>
Web sitesine erişmek için aşağıdakiler öncesinde listelenen IP'de komutunu çalıştırın
wget
:wget <POD_IP>
Sonuç aşağıdaki örneğe benzer:
--2020-03-16 13:34:17-- http://10.1.83.10/ Connecting to 10.1.83.10:80... connected. HTTP request sent, awaiting response... 200 OK Length: 612 [text/html] Saving to: 'index.html' index.html 100%[==============================================================================================>] 612 --.-KB/s in 0s 2020-03-16 13:34:17 (150 MB/s) - 'index.html' saved [612/612]
Küme üzerinde bir web sunucusu dağıtımını ölçeklendirme
Web sitenize erişen kullanıcı sayısına birden artış gördüğünüzü ve yükten dolayı web sitenin hata vermeye başladığını varsayalım. Kümenizde sitenin daha fazla örneğini dağıtabilir ve yükü örneklere bölebilirsiniz.
Dağıtımınızdaki çoğaltma sayısını ölçeklendirmek için kubectl scale
komutunu çalıştırın. İhtiyaç duyduğunuz çoğaltma sayısını ve dağıtımın adını belirtirsiniz.
NGINX podlarının toplamını üçe ölçeklendirmek için komutunu çalıştırın
kubectl scale
:sudo kubectl scale --replicas=3 deployments/nginx
Sonuç aşağıdaki örneğe benzer:
deployment.apps/nginx scaled
Ölçeklendirme komutu, örnek sayısının ölçeğini artırıp azaltmasına olanak verir.
Çalışan pod sayısını denetlemek için komutunu çalıştırın
kubectl get
ve parametresini-o wide
yeniden geçirin:sudo kubectl get pods -o wide
Sonuç aşağıdaki örneğe benzer. Artık her biri benzersiz IP adresine sahip olan üç çalışan podunuz olduğuna dikkat edin.
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-86c57db685-dj6lz 1/1 Running 0 7m57s 10.1.83.10 microk8s-vm <none> <none> nginx-86c57db685-lzrwp 1/1 Running 0 9s 10.1.83.12 microk8s-vm <none> <none> nginx-86c57db685-m7vdd 1/1 Running 0 9s 10.1.83.11 microk8s-vm <none> <none> ubuntu@microk8s-vm:~$
Web sitenizi genel kullanıma açık bir web sitesi olarak etkili bir şekilde kullanıma sunabilmek için kümeye birkaç yapılandırma daha uygulamanız gerekir. Örneğin, yük dengeleyici yükleme ve düğüm IP adreslerini eşleme. Bu tür bir yapılandırma, sonra keşfedeceğiniz gelişmiş boyutların bir kısmını oluşturur. Özette, VM'nizi kaldırıp temizlemeyi seçerseniz yönergeler vardır.