01: Imperatywne zarządzanie podami
Imperatywne zarządzanie podami w Kubernetes: podstawowe operacje
30 min
Wymagania wstępne
Przed rozpoczęciem warsztatów upewnij się, że masz zainstalowane następujące narzędzia:
1. kubectl
Narzędzie wiersza poleceń do zarządzania klastrami Kubernetes
- Po co: kubectl jest głównym interfejsem do komunikacji z klastrem Kubernetes. Umożliwia tworzenie, modyfikowanie i usuwanie zasobów, sprawdzanie statusu aplikacji oraz debugowanie problemów.
- Instrukcja instalacji: https://kubernetes.io/docs/tasks/tools/
2. Visual Studio Code
Edytor kodu z obsługą rozszerzeń
- Po co: VS Code zapewnia wygodne środowisko do edycji plików YAML, podglądu konfiguracji Kubernetes oraz zdalnej pracy z kontenerami. Posiada wsparcie dla autouzupełniania, walidacji składni i formatowania.
- Pobierz z: https://code.visualstudio.com/
3. Rozszerzenia VS Code
Zainstaluj następujące rozszerzenia:
Visual Studio Code Remote Development Extension Pack
- Po co: Umożliwia pracę z kontenerami Docker, zdalnymi serwerami SSH oraz WSL bezpośrednio z VS Code. Pozwala edytować pliki wewnątrz kontenerów i debugować aplikacje działające w Kubernetes.
- Link: https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack
YAML
- Po co: Dodaje wsparcie dla plików YAML - formatu używanego do definiowania zasobów Kubernetes. Zapewnia podświetlanie składni, walidację, autouzupełnianie oraz wykrywanie błędów w strukturze YAML.
- Link: https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml
Kubernetes
- Po co: Integruje VS Code z Kubernetes, umożliwiając przeglądanie klastrów, podgląd zasobów, edycję manifestów oraz wykonywanie poleceń kubectl bezpośrednio z edytora. Ułatwia pracę z wieloma klastrami i przestrzeniami nazw.
- Link: https://marketplace.visualstudio.com/items?itemName=ms-kubernetes-tools.vscode-kubernetes-tools
Cel zadania
Celem zadania jest zrozumienie podstawowych operacji imperatywnych w Kubernetes przy użyciu kubectl na przykładzie poda z nginx.
Teoria
Polecenia imperatywne w Kubernetes
- Imperatywne: Bezpośrednie wykonywanie poleceń
- Szybkie: Idealne do testów i debugowania
- Proste: Nie wymagają pisania YAML
- Tymczasowe: Najlepsze do operacji jednorazowych
Podstawowe operacje na obiektach Kubernetes
Każdy obiekt w Kubernetes może być zarządzany za pomocą następujących operacji:
- get: Pobieranie informacji o obiektach
kubectl get [typ_obiektu] # Lista obiektów kubectl get [typ_obiektu] -o wide # Rozszerzona lista kubectl get [typ_obiektu] -o yaml # Pełna definicja w YAML - describe: Szczegółowy opis obiektu
kubectl describe [typ_obiektu] [nazwa] - delete: Usuwanie obiektów
kubectl delete [typ_obiektu] [nazwa]
Przykłady typów obiektów: pods, deployments, services, configmaps, secrets, nodes
Jak kubectl komunikuje się z klastrem
graph LR
K["kubectl<br/>(Twój terminal)"] -->|"REST API"| API["API Server"]
API -->|"zapisz stan"| ETCD["etcd"]
API -->|"znajdź Node"| SCHED["Scheduler"]
SCHED -->|"przydziel"| NODE["Worker Node"]
NODE -->|"uruchom"| POD["Pod<br/>(nginx)"]
style K fill:#e1f5fe
style POD fill:#e8f5e9
Przebieg ćwiczenia
- Najpierw utworzysz pod nginx i sprawdzisz jego status
- Wykonasz kilka poleceń wewnątrz kontenera
- Przekierujesz porty i sprawdzisz dostęp do aplikacji
- Nauczysz się kopiować pliki między systemem lokalnym a podem
- Przeanalizujesz logi aplikacji
Środowisko
Konfiguracja połączenia z klastrem
Przed rozpoczęciem warsztatów musisz pobrać plik konfiguracyjny i ustawić zmienną środowiskową KUBECONFIG:
- Pobierz plik config.yaml
# Plik config.yaml otrzymasz od prowadzącego warsztaty # Zapisz go w dogodnym miejscu, np. w katalogu domowym - Ustaw zmienną środowiskową KUBECONFIG
export KUBECONFIG=/ścieżka/do/config.yamlPo co jest zmienna KUBECONFIG?
- Jest to zmienna środowiskowa używana przez kubectl do określenia lokalizacji pliku konfiguracyjnego
- Plik config.yaml zawiera informacje o klastrze Kubernetes: adres serwera API, certyfikaty, dane uwierzytelniające
- Bez prawidłowej konfiguracji kubectl nie będzie mógł połączyć się z klastrem
- Domyślnie kubectl szuka konfiguracji w ~/.kube/config, ale KUBECONFIG pozwala wskazać inną lokalizację
- Sprawdź połączenie z klastrem
kubectl cluster-infoPowinno wyświetlić informacje o klastrze. Jeśli widzisz błąd, sprawdź czy poprawnie ustawiłeś KUBECONFIG
Przed rozpoczęciem upewnij się, że:
- Masz działający klaster Kubernetes (sprawdź przez
kubectl cluster-info)- Masz zainstalowane narzędzie
kubectl- Masz dostęp do internetu (do pobrania obrazu nginx)
- Poprawnie ustawiłeś zmienną KUBECONFIG
Zadanie 1: Tworzenie i inspekcja poda
1.1. Utwórz pod nginx
kubectl run nginx-pod-XX --image=nginx:latest --port=80 --restart=Never
To polecenie utworzy pod o nazwie
nginx-pod-XXużywając obrazu nginx i skonfiguruje port 80. ZamieńXXna numer podany przez prowadzącego
1.2. Sprawdź wszystkie pody
kubectl get pods
Zobacz listę wszystkich podów w domyślnej przestrzeni nazw
1.3. Sprawdź status konkretnego poda
kubectl get pod nginx-pod-XX
Powinieneś zobaczyć status
Running. Jeśli widzisz inny status, poczekaj kilka sekund i spróbuj ponownie
1.4. Wyświetl szczegółowe informacje o wszystkich podach
kubectl get pods -o wide
Zobacz rozszerzone informacje o podach, w tym IP i node na którym są uruchomione
1.5. Wyświetl pełną definicję poda
kubectl get pod nginx-pod-XX -o yaml
Zobacz pełną definicję poda w formacie YAML
1.6. Zobacz szczegółowe informacje
kubectl describe pod nginx-pod-XX
Przeanalizuj szczegółowe informacje o podzie: IP, status, eventy i inne parametry
1.7. Usuń pod
kubectl delete pod nginx-pod-XX
Usuwa pod z klastra. Pod zostanie zatrzymany i usunięty
Zadanie 2: Wykonywanie poleceń w podzie (exec)
2.1. Sprawdź wersję nginx
kubectl exec nginx-pod-XX -- nginx -v
Zobaczysz zainstalowaną wersję nginx w kontenerze
2.2. Uruchom interaktywną powłokę
kubectl exec -it nginx-pod-XX -- bash
Jesteś teraz wewnątrz kontenera. Możesz wpisać
exitaby wyjść
2.3. Sprawdź zawartość katalogu WWW
kubectl exec nginx-pod-XX -- ls /usr/share/nginx/html
Zobacz domyślne pliki serwera WWW
Zadanie 3: Port-forward i dostęp do aplikacji
3.1. Uruchom przekierowanie portów
kubectl port-forward nginx-pod-XX 8080:80
WAŻNE: To polecenie zablokuje terminal. Zostaw je działające i otwórz nowy terminal dla kolejnych poleceń
3.2. Sprawdź połączenie
curl http://localhost:8080
Powinieneś zobaczyć domyślną stronę powitalną nginx
Zadanie 4: Kopiowanie plików (cp)
4.1. Utwórz testowy plik
echo "Hello from Kubernetes!" > index.html
Tworzy lokalny plik testowy
4.2. Skopiuj plik do poda
kubectl cp index.html nginx-pod-XX:/usr/share/nginx/html/
Kopiuje plik do katalogu WWW w kontenerze
4.3. Zweryfikuj zawartość
kubectl exec nginx-pod-XX -- cat /usr/share/nginx/html/index.html
Sprawdź czy plik został poprawnie skopiowany
4.4. Pobierz konfigurację
kubectl cp nginx-pod-XX:/etc/nginx/nginx.conf ./nginx.conf
Pobiera plik konfiguracyjny nginx na lokalny system
Zadanie 5: Sprawdzanie logów
5.1. Zobacz podstawowe logi
kubectl logs nginx-pod-XX
Wyświetla wszystkie logi poda
5.2. Śledź logi na żywo
kubectl logs -f nginx-pod-XX
Pokazuje logi w czasie rzeczywistym. Użyj Ctrl+C aby zakończyć
5.3. Zobacz ostatnie wpisy
kubectl logs --tail=100 nginx-pod-XX
Wyświetla ostatnie 100 linii logów
5.4. Logi z ostatnich 5 minut
kubectl logs --since=5m nginx-pod-XX
Pokazuje tylko najnowsze logi
5.5. Zapisz logi do pliku
kubectl logs nginx-pod-XX > nginx.log
Zapisuje wszystkie logi do pliku lokalnego
Najczęstsze problemy
| Problem | Rozwiązanie |
|---|---|
| Pod nie startuje | Sprawdź kubectl describe pod nginx-pod-XX |
| Nie można się połączyć przez port-forward | Sprawdź czy port nie jest już zajęty |
| Problemy z kopiowaniem plików | Upewnij się, że masz odpowiednie uprawnienia |
| Brak logów | Sprawdź czy aplikacja coś loguje do stdout |
Dobre praktyki
- Używaj flag
--helpkubectl exec --help kubectl cp --help kubectl port-forward --help - Zawsze weryfikuj nazwę poda
kubectl get pods kubectl get pods -o wide # więcej informacji - Używaj autouzupełniania
- Włącz autouzupełnianie w bash/zsh
- Oszczędza czas i zmniejsza ryzyko błędów
- Monitoruj zasoby
kubectl top pod nginx-pod-XX # wymaga metrics-server
Podsumowanie
- Każdy obiekt w Kubernetes można: get, describe, delete
- Polecenia imperatywne są świetne do szybkich operacji
kubectl execpozwala na interakcję z konteneremkubectl cpumożliwia transfer plikówkubectl logsjest niezbędny do debugowaniakubectl port-forwardumożliwia lokalny dostęp do usług- Przełączniki
-o widei-o yamldostarczają dodatkowych informacji - Polecenie
getz różnymi przełącznikami to podstawowe narzędzie do inspekcji obiektów
Przydatne skróty i wskazówki
- Twórz aliasy dla często używanych poleceń:
alias k=kubectl alias kgp='kubectl get pods' alias kdp='kubectl describe pod' - Używaj jsonpath do szybkiego dostępu do informacji:
# Pokaż IP poda kubectl get pod nginx-pod-XX -o jsonpath='{.status.podIP}' # Pokaż użyty obraz kubectl get pod nginx-pod-XX -o jsonpath='{.spec.containers[0].image}' - Eksportuj definicję poda do YAML dla późniejszego użycia:
kubectl get pod nginx-pod-XX -o yaml > nginx-pod-XX.yaml
Konfiguracja autocomplete dla kubectl
Aby włączyć autouzupełnianie dla kubectl w bash, wykonaj poniższe polecenia:
# Instalacja autouzupełniania
source <(kubectl completion bash)
# Dodanie do ~/.bashrc aby było dostępne po ponownym uruchomieniu
echo "source <(kubectl completion bash)" >> ~/.bashrc
# Utworzenie aliasu k z działającym autouzupełnianiem
echo 'alias k=kubectl' >> ~/.bashrc
echo 'complete -o default -F __start_kubectl k' >> ~/.bashrc
# Przeładowanie konfiguracji
source ~/.bashrc
Po wykonaniu tych poleceń będziesz mógł używać autouzupełniania dla kubectl oraz aliasu k. Naciśnij TAB aby zobaczyć dostępne opcje.