02: Namespace'y

Zarządzanie przestrzeniami nazw (Namespaces) w Kubernetes

10 min

Cel zadania

Celem zadania jest zrozumienie koncepcji przestrzeni nazw w Kubernetes oraz nauka podstawowych operacji związanych z ich tworzeniem i zarządzaniem.

Teoria

Przestrzenie nazw w Kubernetes

  • Namespace: Wirtualny klaster wewnątrz klastra Kubernetes
  • Izolacja: Oddzielenie zasobów i obiektów między różnymi projektami/zespołami
  • Organizacja: Grupowanie powiązanych obiektów i zasobów
  • Kontrola dostępu: Zarządzanie uprawnieniami na poziomie przestrzeni nazw

Domyślne przestrzenie nazw

  1. default: Domyślna przestrzeń dla obiektów bez określonego namespace
  2. kube-system: Systemowe komponenty Kubernetes
  3. kube-public: Zasoby publicznie dostępne
  4. kube-node-lease: Informacje o dostępności węzłów

Dlaczego Namespace?

  • Izolacja multi-tenant — różne zespoły/projekty na tym samym klastrze, bez ryzyka konfliktów nazw
  • Bezpieczeństwo — RBAC pozwala ograniczyć dostęp do konkretnych Namespace’ów
  • Limity zasobów — ResourceQuota pozwala ograniczyć CPU/Memory per Namespace
  • Organizacja — łatwiej zarządzać zasobami gdy są pogrupowane logicznie
graph TB
    CLUSTER["Klaster Kubernetes"]

    subgraph NS1["Namespace: dev"]
        P1["Pod: frontend"]
        P2["Pod: backend"]
        S1["Service: api"]
    end

    subgraph NS2["Namespace: staging"]
        P3["Pod: frontend"]
        P4["Pod: backend"]
        S2["Service: api"]
    end

    subgraph NS3["Namespace: prod"]
        P5["Pod: frontend"]
        P6["Pod: backend"]
        S3["Service: api"]
    end

    CLUSTER --- NS1
    CLUSTER --- NS2
    CLUSTER --- NS3

    style NS1 fill:#e3f2fd
    style NS2 fill:#fff3e0
    style NS3 fill:#e8f5e9

Każdy Namespace to osobny “wirtualny klaster” — te same nazwy obiektów mogą istnieć w różnych Namespace’ach bez konfliktu.

Przebieg ćwiczenia

  1. Utworzysz nową przestrzeń nazw
  2. Nauczysz się przełączać między przestrzeniami
  3. Utworzysz obiekty w różnych przestrzeniach
  4. Poznasz sposoby wyświetlania i filtrowania obiektów
  5. Nauczysz się usuwać przestrzenie nazw

Środowisko

Przed rozpoczęciem upewnij się, że:

  • Masz działający klaster Kubernetes
  • Masz zainstalowane narzędzie kubectl
  • Masz odpowiednie uprawnienia do tworzenia namespaces

Zadanie 1: Podstawowe operacje na przestrzeniach nazw

1.1. Wyświetl istniejące przestrzenie nazw

kubectl get namespaces

Zobacz listę wszystkich przestrzeni nazw w klastrze

1.2. Utwórz nową przestrzeń nazw

kubectl create namespace dev-XX

Tworzy nową przestrzeń nazw o nazwie dev-XX. Zamień XX na numer podany przez prowadzącego

1.3. Sprawdź szczegóły przestrzeni nazw

kubectl describe namespace dev-XX

Zobacz szczegółowe informacje o utworzonej przestrzeni nazw

1.4. Wyświetl przestrzeń nazw w formacie YAML

kubectl get namespace dev-XX -o yaml

Zobacz pełną definicję przestrzeni nazw w formacie YAML

Zadanie 2: Praca z obiektami w przestrzeniach nazw

2.1. Utwórz pod w określonej przestrzeni nazw

kubectl run nginx-pod-XX --image=nginx:latest --namespace=dev-XX

Tworzy pod nginx w przestrzeni nazw dev-XX

2.2. Wyświetl pody w przestrzeni nazw

kubectl get pods --namespace=dev-XX

Lista podów w określonej przestrzeni nazw

2.3. Wyświetl pody ze wszystkich przestrzeni nazw

kubectl get pods --all-namespaces

Zobacz pody ze wszystkich przestrzeni nazw

2.4. Utwórz przestrzeń nazw z pliku YAML

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Namespace
metadata:
  name: test-XX
EOF

Tworzy przestrzeń nazw używając definicji YAML

Zadanie 3: Przełączanie kontekstu przestrzeni nazw

3.1. Ustaw domyślną przestrzeń nazw

kubectl config set-context --current --namespace=dev-XX

Ustawia dev-XX jako domyślną przestrzeń nazw dla bieżącego kontekstu

3.2. Sprawdź bieżący kontekst

kubectl config view --minify | grep namespace:

Pokazuje aktualnie ustawioną przestrzeń nazw

3.3. Wyświetl obiekty bez podawania namespace

kubectl get pods

Teraz pokazuje pody z domyślnej przestrzeni nazw (dev-XX)

Zadanie 4: Czyszczenie zasobów

4.1. Usuń pojedynczy pod z przestrzeni nazw

kubectl delete pod nginx-pod-XX --namespace=dev-XX

Usuwa określony pod z przestrzeni nazw

4.2. Usuń przestrzeń nazw

kubectl delete namespace dev-XX

Usuwa przestrzeń nazw i wszystkie obiekty w niej zawarte

4.3. Usuń wszystkie zasoby z przestrzeni nazw

kubectl delete all --all --namespace=test-XX

Usuwa wszystkie zasoby z przestrzeni nazw, ale zachowuje samą przestrzeń

4.4. Ustaw przestrzeń nazw test-XX jako domyślną

kubectl config set-context --current --namespace=test-XX

Najczęstsze problemy

Problem Rozwiązanie
Brak uprawnień do tworzenia namespace Sprawdź uprawnienia RBAC
Namespace nie może zostać usunięty Sprawdź czy wszystkie zasoby zostały usunięte
Obiekty niewidoczne Upewnij się, że używasz właściwej przestrzeni nazw
Konflikt nazw Użyj unikalnych nazw z odpowiednim suffiksem -XX

Dobre praktyki

  1. Używaj opisowych nazw przestrzeni
    • dev-XX dla rozwoju
    • prod-XX dla produkcji
    • test-XX dla testów
  2. Stosuj etykiety (labels)
    kubectl label namespace dev-XX environment=development team=teamXX
    
  3. Regularnie sprawdzaj zasoby
    kubectl get all --namespace=dev-XX
    
  4. Dokumentuj przestrzenie nazw
    kubectl annotate namespace dev-XX description="Przestrzeń developerska dla zespołu XX"
    

Podsumowanie

  • Przestrzenie nazw zapewniają izolację zasobów
  • Każdy obiekt musi należeć do jakiejś przestrzeni nazw
  • Nazwy obiektów muszą być unikalne w ramach przestrzeni nazw
  • Usunięcie przestrzeni nazw usuwa wszystkie obiekty w niej zawarte
  • Używaj suffiksu -XX dla unikalności nazw

Przydatne skróty i wskazówki

  1. Krótsze polecenia z aliasami:
    alias kn='kubectl get namespaces'
    alias kgpn='kubectl get pods --namespace'
    
  2. Szybkie przełączanie kontekstu:
    kubens dev-XX  # wymaga narzędzia kubens
    
  3. Sprawdzanie zasobów w przestrzeni nazw:
    kubectl api-resources --namespaced=true
    kubectl api-resources --namespaced=false
    

results matching ""

    No results matching ""