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:

  1. 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
    
  2. describe: Szczegółowy opis obiektu
    kubectl describe [typ_obiektu] [nazwa]
    
  3. 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

  1. Najpierw utworzysz pod nginx i sprawdzisz jego status
  2. Wykonasz kilka poleceń wewnątrz kontenera
  3. Przekierujesz porty i sprawdzisz dostęp do aplikacji
  4. Nauczysz się kopiować pliki między systemem lokalnym a podem
  5. Przeanalizujesz logi aplikacji

Środowisko

Konfiguracja połączenia z klastrem

Przed rozpoczęciem warsztatów musisz pobrać plik konfiguracyjny i ustawić zmienną środowiskową KUBECONFIG:

  1. Pobierz plik config.yaml
    # Plik config.yaml otrzymasz od prowadzącego warsztaty
    # Zapisz go w dogodnym miejscu, np. w katalogu domowym
    
  2. Ustaw zmienną środowiskową KUBECONFIG
    export KUBECONFIG=/ścieżka/do/config.yaml
    

    Po 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ę
  3. Sprawdź połączenie z klastrem
    kubectl cluster-info
    

    Powinno 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-XX używając obrazu nginx i skonfiguruje port 80. Zamień XX na 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ć exit aby 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

  1. Używaj flag --help
    kubectl exec --help
    kubectl cp --help
    kubectl port-forward --help
    
  2. Zawsze weryfikuj nazwę poda
    kubectl get pods
    kubectl get pods -o wide  # więcej informacji
    
  3. Używaj autouzupełniania
    • Włącz autouzupełnianie w bash/zsh
    • Oszczędza czas i zmniejsza ryzyko błędów
  4. 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 exec pozwala na interakcję z kontenerem
  • kubectl cp umożliwia transfer plików
  • kubectl logs jest niezbędny do debugowania
  • kubectl port-forward umożliwia lokalny dostęp do usług
  • Przełączniki -o wide i -o yaml dostarczają dodatkowych informacji
  • Polecenie get z różnymi przełącznikami to podstawowe narzędzie do inspekcji obiektów

Przydatne skróty i wskazówki

  1. Twórz aliasy dla często używanych poleceń:
    alias k=kubectl
    alias kgp='kubectl get pods'
    alias kdp='kubectl describe pod'
    
  2. 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}'
    
  3. 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.

results matching ""

    No results matching ""