Latihan - Jelajahi fungsionalitas kluster Kubernetes

Selesai

Beberapa opsi tersedia saat Anda menjalankan Kubernetes secara lokal. Anda dapat menginstal Kubernetes pada mesin fisik atau VM, atau menggunakan solusi berbasis cloud seperti Azure Kubernetes Service (AKS).

Tujuan Anda dalam latihan ini adalah mengeksplorasi instalasi Kubernetes dengan kluster single-node. Dalam latihan ini, Anda mempelajari cara mengonfigurasi dan menginstal lingkungan MicroK8s yang mudah diatur dan dirobohkan. Kemudian, Anda menyebarkan layanan Kubernetes dan menskalakannya ke beberapa instans untuk menghosting situs web.

Catatan

Latihan ini bersifat opsional dan mencakup langkah-langkah yang menunjukkan cara menghapus dan membongkar perangkat lunak dan sumber daya yang akan Anda gunakan dalam latihan.

Perlu diingat bahwa ada opsi lain, seperti dukungan MiniKube dan Kubernetes di Docker, untuk melakukan hal yang sama.

Apa itu MicroK8s?

MicroK8s adalah opsi untuk menyebarkan kluster Kubernetes satu node sebagai paket tunggal untuk menargetkan workstation dan perangkat Internet of Things (IoT). Canonical, pembuat Ubuntu Linux, awalnya dikembangkan dan saat ini mempertahankan MicroK8s.

Anda dapat menginstal MicroK8s di Linux, Windows, dan macOS. Namun, instruksi instalasi sedikit berbeda untuk setiap sistem operasi. Pilih opsi yang paling sesuai dengan lingkungan Anda.

Instal MicroK8s di Linux

Instalasi Linux MicroK8s adalah opsi instalasi yang memiliki jumlah langkah terendah. Beralih ke jendela terminal dan jalankan perintah dalam instruksi berikut:

  1. Instal aplikasi snap MicroK8s. Langkah ini mungkin perlu waktu beberapa menit untuk diselesaikan, tergantung pada kecepatan koneksi internet dan desktop Anda.

    sudo snap install microk8s --classic
    

    Instalasi yang berhasil memperlihatkan pesan berikut ini.

    2020-03-16T12:50:59+02:00 INFO Waiting for restart...
    microk8s v1.17.3 from Canonical✓ installed
    

Anda sekarang siap untuk menginstal add-on pada kluster.

Instal MicroK8s di Linux

Untuk menjalankan MicroK8s pada Windows, gunakan Multipass. Multipass adalah manajer VM ringan untuk Linux, Windows, dan macOS.

  1. Unduh dan instal rilis terbaru Multipass untuk Windows dari GitHub.

  2. Di konsol perintah, jalankan perintah peluncuran Multipass untuk mengonfigurasi dan menjalankan gambar microk8s-vm. Langkah ini mungkin perlu waktu beberapa menit untuk diselesaikan, tergantung pada kecepatan koneksi internet dan desktop Anda.

    multipass launch --name microk8s-vm --memory 4G --disk 40G
    
  3. Setelah Anda menerima konfirmasi peluncuran untuk microk8s-vm, jalankan multipass shell microk8s-vm perintah untuk mengakses instans VM.

    multipass shell microk8s-vm
    

    Setelah multipass berfungsi, Anda dapat mengakses Ubuntu VM untuk menghosting kluster Anda dan menginstal MicroK8s.

  4. Instal aplikasi snap MicroK8s. Langkah ini mungkin perlu waktu beberapa menit untuk diselesaikan, tergantung pada kecepatan koneksi internet dan desktop Anda.

    sudo snap install microk8s --classic
    

    Penginstalan yang berhasil memperlihatkan pesan berikut:

    2020-03-16T12:50:59+02:00 INFO Waiting for restart...
    microk8s v1.17.3 from Canonical✓ installed
    

Anda sekarang siap untuk menginstal add-on pada kluster.

Instal MicroK8s di Linux

Untuk menjalankan MicroK8s pada Windows, gunakan Multipass. Multipass adalah manajer VM ringan untuk Linux, Windows, dan macOS.

  1. Anda memiliki dua opsi untuk menginstal Multipass di macOS. Unduh dan instal multipass rilis terbaru untuk macOS dari GitHub, atau untuk menginstal Multipass dengan brew cask install multipass perintah, gunakan Homebrew.

    brew install --cask multipass
    
  2. Di konsol perintah, jalankan perintah peluncuran multipass untuk mengonfigurasi dan menjalankan gambar microk8s-vm. Langkah ini mungkin perlu waktu beberapa menit untuk diselesaikan, tergantung pada kecepatan koneksi internet dan desktop Anda.

    multipass launch --name microk8s-vm --memory 4G --disk 40G
    
  3. Setelah Anda menerima konfirmasi peluncuran untuk microk8s-vm, jalankan multipass shell microk8s-vm perintah untuk memasukkan instans VM.

    multipass shell microk8s-vm
    

    Pada titik ini, Anda dapat mengakses VM Ubuntu untuk menghosting kluster Anda. Anda masih harus menginstal MicroK8s. Ikuti langkah-langkah ini.

  4. Instal aplikasi snap MicroK8s. Langkah ini mungkin perlu waktu beberapa menit untuk diselesaikan, tergantung pada kecepatan koneksi internet dan desktop Anda.

    sudo snap install microk8s --classic
    

    Penginstalan yang berhasil memperlihatkan pesan berikut:

    2020-03-16T12:50:59+02:00 INFO Waiting for restart...
    microk8s v1.17.3 from Canonical✓ installed
    

Anda sekarang siap untuk menginstal add-on pada kluster.

Siapkan kluster

Untuk melihat status add-on yang diinstal pada kluster Anda, jalankan perintah status di MicroK8s. Add-on ini menyediakan beberapa layanan, beberapa di antaranya Anda bahas sebelumnya. Salah satu contohnya adalah fungsionalitas DNS.

  1. Untuk memeriksa status instalasi, jalankan microk8s.status --wait-ready perintah.

    sudo microk8s.status --wait-ready
    

    Perhatikan bahwa ada beberapa add-on yang dinonaktifkan pada kluster Anda. Jangan khawatir tentang add-on yang tidak Anda kenali.

    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. Dari daftar, Anda perlu mengaktifkan add-on DNS, Dasbor, dan Registri. Berikut adalah tujuan setiap add-on:

    Add-on Kegunaan
    DNS Menyebarkan coreDNS layanan.
    Dasbor Menerapkan layanan kubernetes-dashboard dan beberapa layanan lain yang mendukung fungsionalitasnya. Ini adalah UI berbasis web tujuan umum untuk kluster Kubernetes.
    Registri Menerapkan registri pribadi dan beberapa layanan yang mendukung fungsionalitasnya. Untuk menyimpan kontainer pribadi, gunakan registri ini.

    Untuk menginstal add-on, jalankan perintah berikut.

    sudo microk8s.enable dns dashboard registry
    

Anda sekarang siap untuk mengakses kluster Anda dengan kubectl.

Jelajahi kluster Kubernetes

MicroK8s menyediakan versi kubectl yang dapat digunakan untuk berinteraksi dengan kluster Kubernetes baru. Salinan kubectl ini memungkinkan Anda memiliki penginstalan paralel instans di seluruh kubectl sistem lain tanpa memengaruhi fungsionalitasnya.

  1. Jalankan snap alias perintah ke alias microk8s.kubectl ke kubectl. Langkah ini menyederhanakan penggunaan.

    sudo snap alias microk8s.kubectl kubectl
    

    Output berikut muncul ketika perintah berhasil diselesaikan:

    Added:
      - microk8s.kubectl as kubectl
    

Tampilkan informasi node kluster

Ingat dari sebelumnya bahwa kluster Kubernetes ada di luar kendali pesawat dan node pekerja. Mari kita jelajahi kluster baru untuk melihat apa yang terinstal.

  1. Periksa node yang berjalan di kluster Anda.

    Anda tahu bahwa MicroK8s adalah instalasi kluster node tunggal, jadi Anda hanya berharap untuk melihat satu node. Namun perlu diingat bahwa node ini adalah bidang kontrol dan node pekerja di kluster. Konfirmasikan konfigurasi ini dengan menjalankan perintah kubectl get nodes. Untuk mengambil informasi tentang semua sumber daya di kluster Anda, jalankan kubectl get perintah :

    sudo kubectl get nodes
    

    Hasilnya mirip dengan contoh berikut, yang menunjukkan kepada Anda bahwa hanya ada satu simpul dalam kluster dengan nama microk8s-vm. Perhatikan bahwa node dalam keadaan siap. Status siap menunjukkan bahwa bidang kontrol mungkin menjadwalkan beban kerja pada node ini.

    NAME          STATUS   ROLES    AGE   VERSION
    microk8s-vm   Ready    <none>   35m   v1.17.3
    

    Anda bisa mendapatkan informasi lebih lanjut untuk sumber daya tertentu yang diminta. Misalnya, mari kita asumsikan bahwa Anda perlu menemukan alamat IP node. Untuk mengambil informasi tambahan dari server API, jalankan -o wide parameter:

    sudo kubectl get nodes -o wide
    

    Hasilnya mirip dengan contoh berikut. Perhatikan bahwa Anda sekarang dapat melihat alamat IP internal node, OS yang berjalan pada node, versi kernel, dan runtime kontainer.

    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. Langkah selanjutnya adalah menjelajahi layanan yang berjalan di kluster Anda. Seperti halnya node, untuk menemukan informasi tentang layanan yang berjalan pada kluster, jalankan kubectl get perintah.

    sudo kubectl get services -o wide
    

    Hasilnya mirip dengan contoh berikut, tetapi perhatikan bahwa hanya satu layanan yang tercantum. Anda menginstal add-on pada kluster sebelumnya, dan Anda juga akan melihat layanan ini.

    NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE   SELECTOR
    kubernetes   ClusterIP   10.152.183.1   <none>        443/TCP   37m   <none>
    

    Alasan untuk daftar layanan tunggal adalah bahwa Kubernetes menggunakan konsep yang disebut namespace untuk membagi kluster secara logis menjadi beberapa kluster virtual.

    Untuk mengambil semua layanan di semua namespace, berikan --all-namespaces parameter:

    sudo kubectl get services -o wide --all-namespaces
    

    Hasilnya mirip dengan contoh berikut. Perhatikan bahwa Anda memiliki tiga bidang nama di kluster Anda. Mereka adalah default, container-registry, dan kube-system bidang nama. Di sini, Anda dapat melihatregistry, kube-dns, dan kubernetes-dashboard instans yang Anda instal. Ada juga layanan pendukung yang diinstal bersama beberapa add-on.

    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
    

    Sekarang setelah Anda dapat melihat layanan yang berjalan pada kluster, Anda dapat menjadwalkan beban kerja pada node pekerja.

Menginstal server web pada kluster

Anda ingin menjadwalkan server web pada kluster untuk melayani situs web kepada pelanggan Anda. Anda dapat memilih dari beberapa opsi. Untuk contoh ini, Anda menggunakan NGINX.

Recall dari sebelumnya Anda bisa menggunakan file manifes pod untuk menggambarkan pod, set replika, dan penyebaran Anda untuk mendefinisikan beban kerja. Karena Anda belum membahas file-file ini secara rinci, Anda menjalankan kubectl untuk langsung meneruskan informasi ke server API.

Meskipun penggunaan kubectl berguna, menggunakan file manifes adalah praktik terbaik. File manifes memungkinkan Anda untuk meneruskan atau mengembalikan penyebaran dengan mudah di kluster Anda. File ini juga membantu mendokumentasikan konfigurasi kluster.

  1. Untuk membuat penyebaran NGINX, jalankan perintah kubectl create deployment. Tentukan nama penyebaran dan gambar kontainer untuk membuat satu instans dari pod.

    sudo kubectl create deployment nginx --image=nginx
    

    Hasilnya mirip dengan contoh berikut:

    deployment.apps/nginx created
    
  2. Untuk mengambil informasi tentang penyebaran Anda, jalankan kubectl get deployments:

    sudo kubectl get deployments
    

    Hasilnya mirip dengan contoh berikut. Perhatikan bahwa nama penyebaran cocok dengan nama yang Anda berikan, dan bahwa satu penyebaran dengan nama ini dalam keadaan siap dan tersedia.

    NAME    READY   UP-TO-DATE   AVAILABLE   AGE
    nginx   1/1     1            1           18s
    
  3. Penyebaran membuat sebuah pod. Untuk mengambil info tentang pod kluster Anda, jalankan kubectl get pods perintah :

    sudo kubectl get pods
    

    Hasilnya mirip dengan contoh berikut. Perhatikan bahwa nama pod adalah nilai yang dihasilkan yang diawali dengan nama penyebaran, dan pod memiliki status Berjalan.

    NAME                     READY   STATUS    RESTARTS   AGE
    nginx-86c57db685-dj6lz   1/1     Running   0          33s
    

Uji instalasi situs web

Uji instalasi NGINX dengan menyambungkan ke server web melalui alamat IP pod.

  1. Untuk menemukan alamat pod, berikan -o wide parameter :

    sudo kubectl get pods -o wide
    

    Hasilnya mirip dengan contoh berikut. Perhatikan bahwa perintah mengembalikan alamat IP node, dan nama node tempat beban kerja dijadwalkan.

    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. Untuk mengakses situs web, jalankan wget pada IP yang tercantum sebelumnya:

    wget <POD_IP>
    

    Hasilnya mirip dengan contoh berikut:

    --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]
    

Menskalakan penyebaran server web pada kluster

Misalnya Anda tiba-tiba melihat peningkatan pengguna yang mengakses situs web Anda, dan situs web mulai gagal karena beban. Anda dapat menerapkan lebih banyak instans situs di kluster Anda dan membagi beban di seluruh instans.

Untuk menskalakan jumlah replika dalam penyebaran Anda, jalankan kubectl scale perintah. Anda menentukan jumlah replika yang Anda butuhkan dan nama penyebaran.

  1. Untuk menskalakan total pod NGINX menjadi tiga, jalankan kubectl scale perintah:

    sudo kubectl scale --replicas=3 deployments/nginx
    

    Hasilnya mirip dengan contoh berikut:

    deployment.apps/nginx scaled
    

    Perintah skala memungkinkan Anda untuk menskalakan jumlah instans ke atas atau ke bawah.

  2. Untuk memeriksa jumlah pod yang sedang berjalan, jalankan kubectl get perintah, dan kembali berikan -o wide parameter:

    sudo kubectl get pods -o wide
    

    Hasilnya mirip dengan contoh berikut. Perhatikan bahwa sekarang Anda melihat tiga pod yang sedang berjalan, masing-masing dengan alamat IP yang unik.

    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:~$
    

Anda harus menerapkan beberapa konfigurasi lagi ke kluster untuk mengekspos situs web Anda secara efektif sebagai situs web publik. Contohnya termasuk menginstal load balancer dan pemetaan alamat IP node. Jenis konfigurasi ini merupakan bagian dari aspek lanjutan yang akan Anda jelajahi di masa mendatang. Dalam ringkasan, ada instruksi jika Anda memilih untuk menghapus instalan dan membersihkan VM Anda.