>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
Go

Lokalny Kubernetes w minutę bez ciężkich maszyn wirtualnych

Testowanie manifestów Kubernetes lub operatorów na zdalnym klastrze chmurowym jest kosztowne i czasochłonne. Czekanie na buildy, wysyłanie do rejestru i wdrożenie w środowisku dev szybko się nudzi. Wcześniej do lokalnych testów powszechnie używano Minikube lub K3s. Ale gdy potrzebujesz szybkich testów integracyjnych w CI lub uruchomić klaster na laptopie w kilka sekund, maszyny wirtualne i dodatkowe warstwy abstrakcji tylko przeszkadzają.

Inżynierowie z Kubernetes SIGs napotkali ten problem w 2018 roku, gdy musieli przetestować samego Kubernetes. Napisali wtedy kind (Kubernetes IN Docker).

kind logo

Narzędzie okazało się na tyle udane, że zwykli programiści zaczęli aktywnie używać go do codziennej pracy i uruchamiania potoków CI/CD.

Jak działa kind

Idea jest prosta. Zamiast uruchamiać pełne maszyny wirtualne dla każdego węzła klastra, kind tworzy zwykłe kontenery Docker. Wewnątrz takiego kontenera działa systemd, runtime kontenerów i komponenty Kubernetes.

Wdrożenie komponentów obsługuje kubeadm, więc środowisko jest jak najbardziej zbliżone do prawdziwego klastra produkcyjnego.

kind create cluster

Projekt jest napisany w Go i działa wszędzie tam, gdzie działa runtime kontenerów. Oprócz Docker obsługiwany jest Podman i nerdctl, a można go uruchomić na Linux, macOS i Windows.

Instalacja i uruchomienie pierwszego klastra

Jeśli masz już Go i Docker na swoim systemie, uruchomienie podstawowego klastra zajmuje dosłownie jedną linię:

go install sigs.k8s.io/[email protected] && kind create cluster

Jeśli nie chcesz instalować Go, binarki można łatwo pobrać przez standardowe menedżery pakietów.

Na macOS:

brew install kind

Na Linux:

curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.32.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind

Po tym polecenie kind create cluster utworzy klaster jednowęzłowy. Narzędzie automatycznie skonfiguruje twój kubectl, przełączając kontekst na nowy klaster.

Sprawdźmy, czy działa:

kubectl get nodes

Gdy nie potrzebujesz już klastra, usuń go poleceniem kind delete cluster.

Klastry wielowęzłowe i zaawansowana konfiguracja

Klaster jednowęzłowy wystarcza do prostych testów, ale prawdziwe problemy w Kubernetes często ujawniają się przy pracy z wieloma węzłami, taints i affinity. kind może tworzyć klastry dowolnej złożoności za pomocą deklaratywnej konfiguracji.

Utwórz plik kind-config.yaml:

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
role: control-plane
role: control-plane
role: control-plane
role: worker
role: worker

Uruchom tworzenie klastra z plikiem konfiguracyjnym:

kind create cluster --config kind-config.yaml

W rezultacie otrzymasz klaster wysokiej dostępności z trzema węzłami control-plane i dwoma węzłami worker na swojej maszynie. A wszystko to uruchamia się w zwykłych kontenerach bez dodatkowego obciążenia CPU.

Szybkie ładowanie lokalnych obrazów

Jedną z najwygodniejszych funkcji dla programistów jest przekazywanie lokalnych obrazów Docker bezpośrednio do klastra bez prywatnych rejestrów.

Zwykle łańcuch wygląda tak: zbuduj obraz, wyślij do Docker Hub lub lokalnego Nexus, pobierz do klastra. kind skraca ten krok. Budujesz obraz lokalnie i natychmiast ładujesz go do węzłów:

docker build -t my-app:v1 .
kind load docker-image my-app:v1

Po tym możesz bezpiecznie określić image: my-app:v1 i imagePullPolicy: Never w manifeście aplikacji. Klaster natychmiast zobaczy obraz.

Do czego przydaje się w praktyce

Projekt ma już ponad 15 000 gwiazdek na GitHub i stał się de facto standardem do testowania infrastruktury Kubernetes. Oto główne scenariusze, w których oszczędza czas:

  1. Testy integracyjne w CI. Uruchomienie kind w GitHub Actions lub runnerze GitLab CI zajmuje sekundy. Możesz łatwo uruchomić świeży klaster, uruchomić testy dla wykresu Helm lub operatora i usunąć go tuż po zakończeniu potoku.
  2. Lokalny rozwój kontrolerów i operatorów. Gdy piszesz własny CRD lub operator w Go/Python, potrzebujesz szybkiego feedbacku. kind uruchamia się natychmiast i łatwo resetuje do czystego stanu.
  3. Nauka i eksperymenty. Chcesz przetestować zachowanie kontrolera Ingress, wtyczki CNI lub zobaczyć, jak aplikacja zachowuje się, gdy jeden z węzłów przestanie działać? Przygotowanie takiego placu zabaw na lokalnym laptopie zajmuje kilka minut.

Na co warto zwrócić uwagę

Przed uruchomieniem miej na uwadze kilka niuansów. kind został przede wszystkim stworzony do testowania, więc nie próbuj używać go w produkcji.

Pamiętaj, że praca z lokalnymi portami wymaga jawnego przekierowania portów w konfiguracji klastra (extraPortMappings). Jeśli musisz połączyć się z usługą wewnątrz kind z maszyny hosta, będziesz musiał wcześniej określić wymagane porty w pliku konfiguracyjnym.

Poza tym kind to świetna alternatywa dla masywnych maszyn wirtualnych. Jest szybki, przewidywalny i przyjazny dla zasobów.

Powiązane projekty