Ten samouczek pokaże, jak uruchomić przykładową aplikację na Kubernetesie przy użyciu minikube. W tym samouczku wykorzystamy obraz kontenera, który korzysta z NGINX, aby wyświetlić z powrotem wszystkie przychodzące zapytania.
Ten tutorial zakłada, że masz już skonfigurowane narzędzie minikube. Instrukcje instalacji
znajdziesz w Kroku 1 dokumentacji minikube start.
Dodatkowo wymagane jest zainstalowanie kubectl. Szczegółowe instrukcje
instalacji dostępne są w sekcji Install tools.
minikube start
Sprawdź status klastra minikube, aby upewnić się, że wszystkie jego komponenty są uruchomione.
minikube status
Wynik z powyższego polecenia powinien pokazywać wszystkie komponenty jako działające (ang. Running) lub skonfigurowane (ang. Configured), jak pokazano w poniższym przykładzie:
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
Otwórz dashboard Kubernetesa. Można to zrobić na dwa sposoby:
Otwórz nowy terminal i uruchom:
# Uruchom nową sesję terminala i pozostaw ją aktywną.
minikube dashboard
Teraz wróć do terminala, w którym uruchomiłeś minikube start.
Polecenie dashboard uruchamia dodatek panelu i otwiera proxy w domyślnej
przeglądarce. W panelu można tworzyć różne obiekty Kubernetesa, takie jak Deployment czy Serwis.
Aby dowiedzieć się, jak uniknąć bezpośredniego uruchamiania przeglądarki z terminala i uzyskać URL do pulpitu nawigacyjnego w sieci, zapoznaj się z kartą "Kopiuj i wklej URL".
Panel jest domyślnie dostępny jedynie z wewnętrznej sieci Kubernetesa. Polecenie
dashboard tworzy tymczasowe proxy, które udostępnia panel także poza tą wewnętrzną sieć.
Aby zatrzymać proxy, wciśnij Ctrl+C i zakończ proces. Panel ciągle
działa na klastrze Kubernetesa, nawet po przerwaniu działania proxy. Aby dostać się
ponownie do panelu, trzeba stworzyć kolejne proxy poleceniem dashboard.
Jeśli nie chcesz, aby minikube automatycznie otwierał przeglądarkę internetową, uruchom podkomendę dashboard z flagą --url. minikube wyświetli adres URL, który możesz otworzyć w preferowanej przeglądarce.
Otwórz nowy terminal i uruchom:
# Uruchom nową sesję terminala i pozostaw ją aktywną.
minikube dashboard --url
Teraz możesz użyć tego URL-a i wrócić do terminala, w którym uruchomiłeś minikube start.
Pod w Kubernetesie to grupa jednego lub wielu kontenerów połączonych ze sobą na potrzeby administrowania i dostępu sieci. W tym samouczku Pod zawiera tylko jeden kontener. Deployment w Kubernetesie monitoruje stan twojego Poda i restartuje należące do niego kontenery, jeśli z jakichś powodów przestaną działać. Użycie Deploymentu to rekomendowana metoda zarządzania tworzeniem i skalowaniem Podów.
Użyj polecenia kubectl create do stworzenia Deploymentu, który będzie zarządzał
Podem. Pod uruchamia kontener wykorzystując podany obraz Dockera.
# Uruchom testowy obraz kontenera zawierający serwer WWW
kubectl create deployment hello-node --image=registry.k8s.io/e2e-test-images/agnhost:2.53 -- /agnhost netexec --http-port=8080
Sprawdź stan Deploymentu:
kubectl get deployments
Wynik powinien wyglądać podobnie do:
NAME READY UP-TO-DATE AVAILABLE AGE
hello-node 1/1 1 1 1m
(Może minąć trochę czasu, zanim pod stanie się dostępny. Jeśli widzisz "0/1", spróbuj ponownie za kilka sekund.)
Sprawdź stan Poda:
kubectl get pods
Wynik powinien wyglądać podobnie do:
NAME READY STATUS RESTARTS AGE
hello-node-5f76cf6ccf-br9b5 1/1 Running 0 1m
Obejrzyj zdarzenia na klastrze:
kubectl get events
Sprawdź konfigurację kubectl:
kubectl config view
Pobierz logi aplikacji z kontenera działającego w podzie (użyj nazwy poda zwróconej przez polecenie kubectl get pods).
hello-node-5f76cf6ccf-br9b5 w poleceniu kubectl logs nazwą poda z wyniku polecenia kubectl get pods.kubectl logs hello-node-5f76cf6ccf-br9b5
Wynik powinien wyglądać podobnie do:
I0911 09:19:26.677397 1 log.go:195] Started HTTP server on port 8080
I0911 09:19:26.677586 1 log.go:195] Started UDP server on port 8081
Domyślnie Pod jest dostępny tylko poprzez swój wewnętrzny adres IP
wewnątrz klastra Kubernetes. Aby kontener hello-node był
osiągalny spoza wirtualnej sieci Kubernetesa, musisz najpierw udostępnić
Pod jako Serwis Kubernetes.
Udostępnij Pod w Internecie przy pomocy polecenia kubectl expose:
kubectl expose deployment hello-node --type=LoadBalancer --port=8080
Opcja --type=LoadBalancer wskazuje, że
chcesz udostępnić swój Serwis na zewnątrz klastra.
Aplikacja, która jest umieszczona w obrazie kontenera, nasłuchuje jedynie na porcie TCP 8080. Jeśli użyłeś
kubectl expose do wystawienia innego portu, aplikacje klienckie mogą nie móc się podłączyć do tamtego innego portu.
Sprawdź Serwis, który właśnie utworzyłeś:
kubectl get services
Wynik powinien wyglądać podobnie do:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-node LoadBalancer 10.108.144.78 <pending> 8080:30369/TCP 21s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23m
U dostawców usług chmurowych, którzy obsługują
load balancers, zostanie przydzielony zewnętrzny adres IP
na potrzeby serwisu. W minikube, serwis typu
LoadBalancer można udostępnić poprzez polecenie minikube service.
Uruchom poniższe polecenie:
minikube service hello-node
Otworzy sie okno przeglądarki obsługującej twoją aplikację i wyświetli odpowiedź tej aplikacji.
Narzędzie minikube dysponuje zestawem wbudowanych dodatków, które mogą być włączane, wyłączane i otwierane w lokalnym środowisku Kubernetes.
Lista aktualnie obsługiwanych dodatków:
minikube addons list
Wynik powinien wyglądać podobnie do:
addon-manager: enabled
dashboard: enabled
default-storageclass: enabled
efk: disabled
freshpod: disabled
gvisor: disabled
helm-tiller: disabled
ingress: disabled
ingress-dns: disabled
logviewer: disabled
metrics-server: disabled
nvidia-driver-installer: disabled
nvidia-gpu-device-plugin: disabled
registry: disabled
registry-creds: disabled
storage-provisioner: enabled
storage-provisioner-gluster: disabled
Włącz dodatek, na przykład metrics-server:
minikube addons enable metrics-server
Wynik powinien wyglądać podobnie do:
The 'metrics-server' addon is enabled
Sprawdź Pody i Serwisy, który właśnie stworzyłeś:
kubectl get pod,svc -n kube-system
Wynik powinien wyglądać podobnie do:
NAME READY STATUS RESTARTS AGE
pod/coredns-5644d7b6d9-mh9ll 1/1 Running 0 34m
pod/coredns-5644d7b6d9-pqd2t 1/1 Running 0 34m
pod/metrics-server-67fb648c5 1/1 Running 0 26s
pod/etcd-minikube 1/1 Running 0 34m
pod/influxdb-grafana-b29w8 2/2 Running 0 26s
pod/kube-addon-manager-minikube 1/1 Running 0 34m
pod/kube-apiserver-minikube 1/1 Running 0 34m
pod/kube-controller-manager-minikube 1/1 Running 0 34m
pod/kube-proxy-rnlps 1/1 Running 0 34m
pod/kube-scheduler-minikube 1/1 Running 0 34m
pod/storage-provisioner 1/1 Running 0 34m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/metrics-server ClusterIP 10.96.241.45 <none> 80/TCP 26s
service/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 34m
service/monitoring-grafana NodePort 10.99.24.54 <none> 80:30002/TCP 26s
service/monitoring-influxdb ClusterIP 10.111.169.94 <none> 8083/TCP,8086/TCP 26s
Sprawdź wynik z metrics-server:
kubectl top pods
Wynik powinien wyglądać podobnie do:
NAME CPU(cores) MEMORY(bytes)
hello-node-ccf4b9788-4jn97 1m 6Mi
Jeśli zobaczysz następującą wiadomość, poczekaj i spróbuj ponownie:
error: Metrics API not available
Wyłącz dodatek metrics-server:
minikube addons disable metrics-server
Wynik powinien wyglądać podobnie do:
metrics-server was successfully disabled
Teraz jest czas na wyczyszczenie zasobów, które utworzyłeś w klastrze:
kubectl delete service hello-node
kubectl delete deployment hello-node
Zatrzymaj wirtualną maszynę Minikube (VM):
minikube stop
(Opcjonalnie) Skasuj Minikube VM:
# Optional
minikube delete
Jeżeli planujesz ponownie używać minikube do dalszej nauki Kubernetesa, nie musisz go usuwać.
Ta strona obejmowała podstawowe aspekty dotyczące uruchomienia klastra minikube. Teraz jesteś gotowy do wdrażania aplikacji.