Latihan - Jelajahi fungsionalitas kluster Kubernetes
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:
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.
Unduh dan instal rilis terbaru Multipass untuk Windows dari GitHub.
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
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.
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.
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
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
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.
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.
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
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.
Jalankan
snap alias
perintah ke aliasmicrok8s.kubectl
kekubectl
. 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.
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, jalankankubectl 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
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
, dankube-system
bidang nama. Di sini, Anda dapat melihatregistry
,kube-dns
, dankubernetes-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.
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
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
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.
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>
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.
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.
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.