03: Pod z YAML — deklaratywne podejście
Poznajemy Pody w Kubernetes
15 min
Cel zadania
Zrozumienie czym jest Pod w Kubernetes poprzez poznanie jego struktury i samodzielne stworzenie działającego Poda.
Teoria: Anatomia Poda
Czym jest Pod?
- Najmniejsza jednostka w Kubernetes
- Grupa jednego lub więcej kontenerów
- Kontenery w Podzie:
- Dzielą tę samą przestrzeń sieciową (ten sam IP)
- Uruchamiają się na tym samym węźle
- Mogą komunikować się przez localhost
Przykładowy manifest Pod
Poniżej znajduje się przykład z wyjaśnieniem każdej sekcji:
apiVersion: v1 # Wersja API Kubernetes której używamy dla Poda
kind: Pod # Typ zasobu który tworzymy
metadata: # Sekcja z metadanymi
name: przyklad-pod # Nazwa Poda - musi być unikalna w namespace
labels: # Etykiety - pomagają organizować i wyszukiwać Pody
app: frontend # Przykładowa etykieta określająca aplikację
env: dev # Przykładowa etykieta określająca środowisko
spec: # Specyfikacja Poda - najważniejsza część!
containers: # Lista kontenerów w Podzie
- name: nginx # Nazwa kontenera
image: nginx:1.14.2 # Obraz kontenera z wersją
ports: # Lista portów do ekspozycji
- containerPort: 80 # Port na którym aplikacja nasłuchuje w kontenerze
Co oznaczają poszczególne pola?
- Sekcja główna:
apiVersion: Określa wersję API Kubernetes dla danego typu zasobukind: Określa typ zasobu (Pod, Deployment, Service, itd.)
- metadata:
name: Unikalna nazwa Poda w namespacelabels: Etykiety służące do organizacji i wyszukiwania
- spec:
containers: Lista kontenerów w Podziename: Nazwa kontenera (używana w logach i komendach)image: Obraz kontenera z rejestruports: Porty które kontener udostępniacontainerPort: Port na którym aplikacja nasłuchuje
Anatomia Poda — diagram
graph TB
subgraph POD["Pod: przyklad-pod"]
subgraph CONT["Kontener: nginx"]
IMG["Image: nginx:1.14.2"]
PORT["Port: 80"]
end
NET["Shared Network<br/>(wspólne IP)"]
LABELS["Labels:<br/>app: frontend<br/>env: dev"]
end
CONT ---|"nasłuchuje na"| PORT
POD ---|"identyfikowany przez"| LABELS
style POD fill:#f0f4ff,stroke:#4a6fa5
style CONT fill:#e8f5e9
Zadanie praktyczne: Stwórz Pod z aplikacją kuard
Wymagania
Stwórz manifest Pod dla aplikacji kuard, który spełnia następujące wymagania:
- Użyj obrazu
gcr.io/kuar-demo/kuard-amd64:1 - Aplikacja działa na porcie 8080
- Nazwa poda musi zawierać Twój numer (-XX)
- Pod musi mieć etykiety:
app: kuardteam: teamXX(gdzie XX to Twój numer)
Kroki do wykonania
- Stwórz nowy plik
kuard-pod-XX.yamli napisz w nim manifest- Użyj struktury poznanej w części teoretycznej
- Dostosuj pola do wymagań zadania
- Wdróż swojego Poda:
kubectl apply -f kuard-pod-XX.yaml - Sprawdź czy Pod działa:
kubectl get pods - Przekieruj port do aplikacji:
kubectl port-forward [nazwa-twojego-poda] 8080:8080 - Otwórz w przeglądarce:
http://localhost:8080
Przydatne komendy
# Sprawdzenie statusu Poda
kubectl get pod [nazwa-poda]
# Szczegółowe informacje o Podzie
kubectl describe pod [nazwa-poda]
# Sprawdzenie logów
kubectl logs [nazwa-poda]
# Dodanie nowej etykiety
kubectl label pod [nazwa-poda] [klucz]=[wartość]
Pytania kontrolne
- Jakie informacje znajdują się w sekcji metadata?
- Do czego służą etykiety w Kubernetes?
- Jak sprawdzić logi Poda?
- Co się stanie jeśli spróbujesz stworzyć dwa Pody o tej samej nazwie?
- Jak dodać nową etykietę do już działającego Poda?
Tips
- Zawsze weryfikuj nazwę Poda przed wykonaniem komend
- Używaj opisowych etykiet
- Sprawdzaj logi w przypadku problemów
- Pamiętaj o unikalności nazw w ramach namespace