Berbagai artikel yang menggunakan platform Kubernetes di blog ini menggunakan aplikasi k3d yang diinstalasi di laptop. Ada berbagai layanan Kubernete AWS, Google Cloud atau Azure dari Microsoft. Pelayanan Kubernetes dari berbagai provider yang disebutkan di atas merupakan pelayanan berbayar yang cukup mahal. Dengan menggunakan k3d, platform Kubernetes yang digunakan dapat dikontrol secara mudah.
Untuk menjelaskan apa itu k3d, ada baiknya untuk mengetahui aplikasi Open Source yang disebut k3s. K3s ini adalah sebuah distribusi Kubernetes minimalis dan paket k3d adalah wrapper dari k3s yang disebutkan di atas. Konsep wrapper (atau dalam bahasa Indonesianya pembungkus ) merupakan satu aplikasi yang membungkus aplikasi lain, di sini aplikasi k3d menjadi bungkus dari aplikasi k3s. Dengan cara ini kita menggunakan perintah-perintah k3d untuk membangun kluster kubernetes yang dibangun oleh aplikasi k3s.
Keuntungan penggunaan k3d:
- Penggunaan environment (server) lokal untuk berbagai development yang dilakukan.
- Pipeline CI/CD bisa digunakan dalam pengembagan aplikasi di platform k3d
- Sarana mudah untuk belalar platform kubernetes.
Installasi dan Dependesi
K3d membutuhkan instalasi Docker Desktop yang beroperasi di tempot yang sama di tempot k3d diinstallasi, hal ini berarti Docker Desktop dan k3s diinstalasi di server MacOS.
Halaman ini memberikan instruksi bagaimana installasi Docker Desktop dilakukan.
Cara yang paling mudah untuk menginstalasi k3s adalah menggunakan Homebrew, seperti diperlihatkan di bawah ini.
~ % install k3d
Setelah perintah di atas dilakukan, untuk melihat apakah instalasi ini berhasil lakukan perintah k3d dengan argumen –help seperti yang diperlihatkan di bawah ini beserta hasil dari perintah itu.
~ % k3d version
k3d version v5.7.3
k3s version v1.30.3-k3s1 (default)
Hasil dari perintah k3d version ini memperlihatkan bahwa wrapper k3d siap untuk digunakan sebagai sebuah alat (tool) platform kubernetes. Langkah berikut yang perlu dilakuan adalah men-deploy sebuah kluster kubernetes.
Pembuatan Kluster Kubernetes
Untuk mendapatkan berbagai informasi yang diperlukan, perintah berikut dapat dilakukan:
~ % k3d --help
https://k3d.io/
k3d is a wrapper CLI that helps you to easily create k3s clusters inside docker.
Nodes of a k3d cluster are docker containers running a k3s image.
All Nodes of a k3d cluster are part of the same docker network.
Usage:
k3d [flags]
k3d [command]
Available Commands:
cluster Manage cluster(s)
completion Generate completion scripts for [bash, zsh, fish, powershell | psh]
config Work with config file(s)
help Help about any command
image Handle container images.
kubeconfig Manage kubeconfig(s)
node Manage node(s)
registry Manage registry/registries
version Show k3d and default k3s version
Flags:
-h, --help help for k3d
--timestamps Enable Log timestamps
--trace Enable super verbose output (trace logging)
--verbose Enable verbose output (debug logging)
--version Show k3d and default k3s version
Use "k3d [command] --help" for more information about a command
argumen –help ini bisa dilakun setelah perintah k3d <perintah> –help sebagai contoh di bawah ini:
~ % k3d cluster --help
Manage cluster(s)
Usage:
k3d cluster [flags]
k3d cluster [command]
Available Commands:
create Create a new cluster
delete Delete cluster(s).
edit [EXPERIMENTAL] Edit cluster(s).
list List cluster(s)
start Start existing k3d cluster(s)
stop Stop existing k3d cluster(s)
Flags:
-h, --help help for cluster
Global Flags:
--timestamps Enable Log timestamps
--trace Enable super verbose output (trace logging)
--verbose Enable verbose output (debug logging)
Use "k3d cluster [command] --help" for more information about a command.
mac@MBPsomtllhorMac ~ %
Dengan informasi di atas ini, sebuah platform kubernetes dapat diinstalasi dengan perintah di bawah ini.
~ % k3d cluster create blogkluster
INFO[0000] Prep: Network
INFO[0000] Created network 'k3d-blogkluster'
INFO[0000] Created image volume k3d-blogkluster-images
INFO[0000] Starting new tools node...
INFO[0000] Starting node 'k3d-blogkluster-tools'
INFO[0001] Creating node 'k3d-blogkluster-server-0'
INFO[0001] Creating LoadBalancer 'k3d-blogkluster-serverlb'
INFO[0001] Using the k3d-tools node to gather environment information
INFO[0001] Starting new tools node...
INFO[0001] Starting node 'k3d-blogkluster-tools'
INFO[0002] Starting cluster 'blogkluster'
INFO[0002] Starting servers...
INFO[0002] Starting node 'k3d-blogkluster-server-0'
INFO[0007] All agents already running.
INFO[0007] Starting helpers...
INFO[0007] Starting node 'k3d-blogkluster-serverlb'
INFO[0013] Injecting records for hostAliases (incl. host.k3d.internal) and for 3 network members into CoreDNS configmap...
INFO[0015] Cluster 'blogkluster' created successfully!
INFO[0015] You can now use it like this:
kubectl cluster-info
~ %
setelah kluster kubernetes terbentuk, maka dapat dilakukan perintah di bawah ini, untuk melihat node2 dan pods yang ada di kluster yang baru saja dideploy. Untuk keterangan lebih lanjut mengenai kubectl, silakan membaca artikel tentang kubectl.
~ % kubectl get node
NAME STATUS ROLES AGE VERSION
k3d-blogkluster-server-0 Ready control-plane,master 2m31s v1.30.3+k3s1
Perintah di atas memperlihatkan bahwa master dan control-plane di platform kubernetes ini berada di mesin yang sama: k3d-blogkluster-server-0
dan untuk melihat pods yang berada di kluster kubernetes ini, perintah berikut bisa diakukan:
~ % kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-576bfc4dc7-4rxk9 1/1 Running 0 4m48s
kube-system helm-install-traefik-2bzr7 0/1 Completed 1 4m48s
kube-system helm-install-traefik-crd-dsgbh 0/1 Completed 0 4m48s
kube-system local-path-provisioner-6795b5f9d8-s4pwl 1/1 Running 0 4m48s
kube-system metrics-server-557ff575fb-v57rb 1/1 Running 0 4m48s
kube-system svclb-traefik-f233b72c-g2xpx 2/2 Running 0 4m35s
kube-system traefik-5fb479b77-5jjzl 1/1 Running 0 4m35s
mac@MBPsomtllhorMac ~ %
Hasil perintah di atas memperlihatkan ada 6 pod yang running dan 2 pods dengan status completed. Status completed memperlihatkan bahwa pods terse but dijalankan untuk mengeksekusi 1 perintah yang telah berhasil dilakukan (completed)