Jalankan cluster Kubernetes di Docker dengan K3d

K3d adalah pembungkus open source di sekitar distribusi Rancher/SUSE K3s Kubernetes yang memungkinkan Anda untuk menjalankan level kontrol Docker. Seluruh paket berjalan di Docker, memberi Anda rangkaian kontainer lengkap yang ringan dan mudah dikonfigurasi.

Sementara K3 dirancang untuk berbagai alur kerja, K3d lebih berfokus secara khusus pada situasi pengembangan di mana Anda sudah menggunakan Docker. Dengannya, Anda dapat mengatur cluster Kubernetes di host Docker Anda saat ini tanpa menjalankan mesin virtual atau layanan sistem lainnya.

Artikel ini akan menunjukkan cara memulai dengan suite K3d sederhana. Anda harus sudah menginstal Kubectl dan Docker v20.10.5 atau yang lebih baru di sistem Anda sebelum dapat memulai. K3d bekerja di Linux, Mac (juga melalui Homebrew), dan Windows (melalui Chocolatey). Panduan ini berfokus pada penggunaan dengan Linux; k3d Instruksi instalasi CLI untuk platform lain tersedia dalam dokumentasi.

Instal K3d CLI

ini k3d CLI menyediakan perintah manajemen untuk membuat dan mengelola grup Anda. Anda dapat menemukan CLI terbaru di GitHub atau menjalankan skrip penginstal untuk mendapatkan unduhan yang tepat secara otomatis untuk sistem Anda.

$ curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash

Script menyimpan file k3d duo di dalam kamu /usr/local/bin catatan telepon. Cobalah untuk menjalankannya k3d version Perintah untuk memeriksa apakah instalasi berhasil:

$ k3d version
k3d version v5.4.6
k3s version v1.24.4-k3s1 (default)

pembuatan massal

K3d CLI menyediakan file cluster create Perintah untuk membuat dan memulai grup baru secara otomatis:

$ k3d cluster create
INFO[0000] Prep: Network                                
INFO[0000] Created network 'k3d-k3s-default'            
INFO[0000] Created image volume k3d-k3s-default-images  
INFO[0000] Starting new tools node...                   
INFO[0001] Creating node 'k3d-k3s-default-server-0'     
INFO[0001] Pulling image 'ghcr.io/k3d-io/k3d-tools:5.4.6' 
INFO[0002] Pulling image 'docker.io/rancher/k3s:v1.24.4-k3s1' 
INFO[0002] Starting Node 'k3d-k3s-default-tools'        
INFO[0008] Creating LoadBalancer 'k3d-k3s-default-serverlb' 
INFO[0009] Pulling image 'ghcr.io/k3d-io/k3d-proxy:5.4.6' 
INFO[0012] Using the k3d-tools node to gather environment information 
INFO[0012] HostIP: using network gateway 172.25.0.1 address 
INFO[0012] Starting cluster 'k3s-default'               
INFO[0012] Starting servers...                          
INFO[0012] Starting Node 'k3d-k3s-default-server-0'     
INFO[0016] All agents already running.                  
INFO[0016] Starting helpers...                          
INFO[0016] Starting Node 'k3d-k3s-default-serverlb'     
INFO[0022] Injecting records for hostAliases (incl. host.k3d.internal) and for 2 network members into CoreDNS configmap... 
INFO[0025] Cluster 'k3s-default' created successfully!  
INFO[0025] You can now use it like this:                
kubectl cluster-info

Blok tersebut bernama k3s-default Saat menjalankan perintah tanpa argumen. Tentukan nama Anda dengan memberikannya sebagai broker pertama pesanan:

$ k3d cluster create demo
...

K3d akan secara otomatis mengubah file konfigurasi Kubernetes (.kube/config) untuk menyertakan koneksi ke grup baru Anda. Jadi ini mewakili koneksi standar kubectl Perintah sekarang menargetkan lingkungan K3d Anda.

$ kubectl cluster-info
Kubernetes control plane is running at https://0.0.0.0:42879
CoreDNS is running at https://0.0.0.0:42879/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
Metrics-server is running at https://0.0.0.0:42879/api/v1/namespaces/kube-system/services/https:metrics-server:https/proxy

proses docker ps Ini menunjuk untuk memulai dua wadah, satu untuk K3 dan satu untuk proxy K3d, yang mengarahkan lalu lintas ke cluster Anda:

$ docker ps
CONTAINER ID   IMAGE                              COMMAND                  CREATED         STATUS         PORTS                             NAMES
9b6b610ad312   ghcr.io/k3d-io/k3d-proxy:5.4.6     "/bin/sh -c nginx-pr..."   3 minutes ago   Up 3 minutes   80/tcp, 0.0.0.0:42879->6443/tcp   k3d-k3s-default-serverlb
842cc90b78bf   rancher/k3s:v1.24.4-k3s1           "/bin/k3s server --t..."   3 minutes ago   Up 3 minutes                                     k3d-k3s-default-server-0

menggunakan grup Anda

Gunakan perintah kubectl yang sudah dikenal untuk berinteraksi dengan grup Anda dan memublikasikan pod Anda:

$ kubectl run nginx --image nginx:latest
pod/nginx created

$ kubectl expose pod/nginx --port 80 --type NodePort
service/nginx exposed

Untuk mengakses server NGINX Anda, pertama-tama temukan alamat IP yang ditetapkan untuk node Kubernetes Anda:

$ kubectl get nodes -o wide
NAME                       STATUS   ROLES                  AGE    VERSION        INTERNAL-IP   EXTERNAL-IP   OS-IMAGE   KERNEL-VERSION      CONTAINER-RUNTIME
k3d-k3s-default-server-0   Ready    control-plane,master   102s   v1.24.4+k3s1   172.27.0.2    <none>        K3s dev    5.4.0-125-generic   containerd://1.6.6-k3s1

Alamat IP yang benar untuk digunakan adalah 172.27.0.2.

Selanjutnya, temukan NodePort Anda nginx melayani:

$ kubectl get services
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.43.0.1       <none>        443/TCP        5m49s
nginx        NodePort    10.43.235.233   <none>        80:31214/TCP   1s

Nomor port yang terbuka adalah 31214. Lakukan penyelidikan 172.17.0.2:31214 Halaman beranda default untuk NGINX akan menampilkan:

$ curl http://172.17.0.2:31214
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...

Untuk informasi lebih lanjut tentang mendeteksi layanan dan mengonfigurasi jaringan akses, lihat dokumentasi K3d.

Aktifkan bendera K3s

ini cluster create Perintah tersebut merangkum proses pembuatan set K3 standar. Anda dapat meneruskan argumen ke K3 dengan menentukan --k3s-arg media. Nilai flag harus berupa argumen yang disertakan saat K3d memanggil biner K3s.

$ k3s cluster create --k3s-arg "--disable=traefik"

Contoh ini menginstruksikan K3 untuk menonaktifkan komponen traefik bawaannya.

Akses ke layanan yang berjalan di host Anda

Beberapa beban kerja yang Anda jalankan di K3d mungkin perlu mengakses layanan yang sudah berjalan di host Docker Anda. K3d menyediakan nama host yang disebut host.k3d.internal dalam konfigurasi DNS default-nya. Ini akan memperbaiki komputer host secara otomatis. Anda dapat merujuk ke nama host pribadi ini di volume Anda untuk mengakses database yang ada, berbagi file, dan API lain yang berjalan di luar Kubernetes.

Gunakan gambar Docker lokal

Grup K3d/K3s tidak dapat mengakses gambar Docker lokal Anda. Blok dan semua komponennya berfungsi secara mendalam buruh pelabuhan. Upaya apa pun untuk menggunakan gambar pribadi yang hanya ada di host gagal dengan kesalahan.

Ada dua cara untuk memperbaikinya: pindahkan gambar Anda ke registri atau gunakan fitur impor gambar K3d untuk menyalin gambar lokal ke koleksi Anda. Metode pertama umumnya lebih disukai karena memusatkan penyimpanan gambar dan memungkinkan Anda mengakses gambar dari lingkungan apa pun. Namun, jika Anda dengan cepat menguji perubahan lokal, Anda mungkin ingin mengimpor gambar yang baru saja Anda buat secara langsung:

$ k3d image import demo-image:latest

Perintah ini akan demo-image:latest Tersedia dalam koleksi Anda.

K3d juga dapat membuat kumpulan data gambar dan membuatnya tersedia untuk Anda. Yang terbaik adalah membuat rekaman dengan grup Anda, karena K3d kemudian dapat mengonfigurasi akses ke grup secara otomatis:

$ k3d cluster create --registry-create demo-registry

Ini memulai blok baru dengan rekaman bernama demo-registry. Pendaftaran dilakukan di wadah Docker-nya sendiri. Anda dapat mengetahui nomor port yang Anda lihat saat masuk dengan menjalankannya docker ps -f name=<cluster-name>-registrydi mana <cluster-name> Itu adalah nama grup Anda. Mendorong gambar ke dalam register ini membuatnya tersedia untuk pod di koleksi Anda.

$ docker tag demo-image:latest k3d-demo-registry.localhost:12345/demo-image:latest
$ docker push k3d-demo-registry.localhost:12345/demo-image:latest

Anda juga dapat membuat rekaman jika diperlukan, tetapi Anda harus mengonfigurasi ulang grup secara manual untuk memberikan detail kontak.

Hentikan uangmu

Kit K3d Anda akan terus berjalan sampai Anda menutupnya sendiri. ini cluster stop Itu berhenti menjalankan wadah Docker sambil menyimpan data koleksi Anda:

$ k3d cluster stop k3s-default

Di masa mendatang, mulai ulang cluster Anda dengan file cluster start Memerintah:

$ k3d cluster start k3s-default

Hapus grup Anda

Anda dapat menghapus grup kapan saja dengan menjalankan file cluster delete perintah dan tentukan namanya. Ini akan menghapus semua jejak grup dan menghapus wadah dan volume Docker yang telah diinstal. Menghapus semua grup Anda akan mengembalikan host Anda ke keadaan bersih hanya dengan K3d CLI yang diinstal.

$ k3d cluster delete k3s-default
INFO[0000] Deleting cluster 'k3s-default'               
INFO[0001] Deleting cluster network 'k3d-k3s-default'   
INFO[0001] Deleting 2 attached volumes...               
INFO[0001] Removing cluster details from default kubeconfig... 
INFO[0001] Removing standalone kubeconfig file (if there is one)... 
INFO[0001] Successfully deleted cluster k3s-default!

Proses penghapusan secara otomatis menghapus referensi ke grup dari file kubeconfig Anda.

Ringkasan

Dengan K3d, Anda dapat menjalankan cluster Kubernetes dalam container. Menyediakan lingkungan K3 yang lengkap di mana pun Docker tersedia. K3d mendukung banyak node, memiliki dukungan pengambilan gambar bawaan, dan dapat digunakan untuk membuat grup yang sangat tersedia dengan berbagai tingkat kontrol.

Pengembang yang sudah menggunakan Docker dapat menggunakan K3d untuk menambahkan Kubernetes dengan cepat ke lingkungan kerja mereka. K3d ringan, mudah dikelola dan tidak menambahkan layanan sistem tambahan ke perangkat Anda. Ini menjadikannya pilihan yang bagus untuk penggunaan lokal, tetapi ketergantungannya pada Docker berarti bahwa itu mungkin tidak cocok untuk host produksi di mana Anda tidak ingin menambahkan ketergantungan lain. Distribusi Kubernetes lainnya seperti Minikube, Microk8s, dan K3 reguler semuanya merupakan alternatif yang layak.

Baca Juga!

Gameplay, posisi pemain, dan lainnya

Pada Jumat pagi, para pemain berkumpul di sekitar mesin Street Fighter 6 untuk menonton influencer …