Alıştırma - Kubernetes kümesinin işlevselliğini keşfetme

Tamamlandı

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:

  1. 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.

  1. En güncel Windows için Multipass sürümünü GitHub’dan indirip yükleyin.

  2. 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
    
  3. 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.

  4. 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.

  1. 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
    
  2. 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
    
  3. 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.

  4. 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.

  1. 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
    
  2. 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 kubectlkü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.

  1. microk8s.kubectl komutuna kubectl diğer adını vermek için snap 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.

  1. 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 komutunu kubectl 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
    
  2. 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 ve kube-system ad alanları varsayılandır. Burada, yüklediğiniz registry, kube-dns ve kubernetes-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.

  1. 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
    
  2. 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
    
  3. 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.

  1. 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>
    
  2. 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.

  1. 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.

  2. Ç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.