Przestrzenie nazw (ang. Namespaces)

W Kubernetesie przestrzenie nazw zapewniają mechanizm izolowania grup zasobów w ramach jednego klastra. Nazwy zasobów muszą być unikalne w obrębie danej przestrzeni nazw, ale nie muszą być unikalne w całym klastrze. Zakres oparty na przestrzeniach nazw dotyczy tylko obiektów (np. Deploymentów, Service'ów, itp.), a nie dla obiektów dotyczących całego klastra (np. StorageClass, Nodes, PersistentVolumes, itp.).

Kiedy używać wielu przestrzeni nazw

Przestrzenie nazw są przeznaczone do użycia w środowiskach z wieloma użytkownikami rozproszonymi w różnych zespołach lub projektach. Dla klastrów z użytkownikami w ilości od kilku do kilkunastu nie powinieneś potrzebować tworzyć ani myśleć o przestrzeniach nazw. Zacznij używać przestrzeni nazw, gdy potrzebujesz funkcji, które one oferują.

Namespace'y zapewniają zakres dla nazw. Nazwy zasobów muszą być unikalne w obrębie jednego namespace'u, ale nie muszą być unikalne w różnych namespace'ach. Namespace'y nie mogą być zagnieżdżane w sobie wzajemnie, a każdy zasób Kubernetesa może znajdować się tylko w jednym namespace'ie.

Namespacey są sposobem na podział zasobów klastra pomiędzy wielu użytkowników (przez resource quotas).

Nie ma potrzeby używania wielu przestrzeni nazw do oddzielania nieznacznie różniących się zasobów, takich jak różne wersje tego samego oprogramowania: zamiast tego wykorzystaj etykiety, aby rozróżnić zasoby w obrębie jednej przestrzeni nazw.

Początkowe przestrzenie nazw

Kubernetes rozpoczyna z czterema początkowymi przestrzeniami nazw:

default : Kubernetes zawiera tę przestrzeń nazw, aby umożliwić rozpoczęcie korzystania z nowego klastra bez konieczności wcześniejszego tworzenia przestrzeni nazw.

kube-node-lease : Ta przestrzeń nazw przechowuje obiekty Lease powiązane z każdym węzłem. Pozwalają one kubeletowi na wysyłanie sygnałów życia (ang. heartbeats), dzięki czemu warstwa sterowania może wykryć awarię węzła.

kube-public : Ta przestrzeń nazw jest możliwa do odczytu przez wszystkich klientów (w tym tych, którzy nie są uwierzytelnieni). Ta przestrzeń nazw jest głównie zarezerwowana do użytku klastra, na wypadek gdyby niektóre zasoby miały być widoczne i czytelne publicznie w całym klastrze. Publiczny aspekt tej przestrzeni nazw jest jedynie konwencją, a nie wymogiem.

kube-system : Przestrzeń nazw dla obiektów tworzonych przez system Kubernetesa.

Praca z przestrzeniami nazw

Tworzenie i usuwanie przestrzeni nazw zostało opisane w dokumentacji Przewodnika Administratora dotyczącej przestrzeni nazw.

Przeglądanie przestrzeni nazw

Możesz wyświetlić listę bieżących przestrzeni nazw w klastrze za pomocą:

kubectl get namespace
NAME              STATUS   AGE
default           Active   1d
kube-node-lease   Active   1d
kube-public       Active   1d
kube-system       Active   1d

Ustawianie przestrzeni nazw dla żądania

Aby ustawić przestrzeń nazw dla bieżącego żądania, użyj flagi --namespace.

Na przykład:

kubectl run nginx --image=nginx --namespace=<insert-namespace-name-here>
kubectl get pods --namespace=<insert-namespace-name-here>

Ustawianie preferencji przestrzeni nazw

Możesz na stałe zapisać przestrzeń nazw dla wszystkich kolejnych poleceń kubectl w tym kontekście.

kubectl config set-context --current --namespace=<insert-namespace-name-here>
# Validate it
kubectl config view --minify | grep namespace:

Przestrzenie nazw i DNS

Kiedy tworzysz Service, tworzy on odpowiadający mu rekord DNS. Ten wpis ma postać <service-name>.<namespace-name>.svc.cluster.local, co oznacza, że jeśli kontener używa tylko <service-name>, odwołuje się on do usługi lokalnej dla danego namespace'a. Jest to przydatne do używania tej samej konfiguracji w wielu namespace'ach, takich jak Development, Staging i Production. Jeśli chcesz uzyskać dostęp do zasobów między namespace'ami, musisz użyć w pełni kwalifikowanej nazwy domeny (FQDN).

W związku z tym, wszystkie nazwy przestrzeni nazw muszą być zgodne z etykietami DNS RFC 1123.

Nie wszystkie obiekty znajdują się w przestrzeni nazw.

Większość zasobów Kubernetesa (np. pody, usługi, kontrolery replikacji i inne) znajduje się w jakiś przestrzeniach nazw. Jednak zasoby przestrzeni nazw nie są same w sobie w przestrzeni nazw. Zasoby niskiego poziomu, takie jak węzły i persistentVolumes, nie znajdują się w żadnej przestrzeni nazw.

Aby zobaczyć, które zasoby Kubernetesa znajdują się w przestrzeni nazw, a które nie:

# In a namespace
kubectl api-resources --namespaced=true

# Not in a namespace
kubectl api-resources --namespaced=false

Automatyczne etykietowanie

STATUS FUNKCJONALNOŚCI: Kubernetes 1.22 [stable]

Warstwa sterowania Kubernetesa ustawia niezmienną etykietę kubernetes.io/metadata.name na wszystkich przestrzeniach nazw. Wartością etykiety jest nazwa przestrzeni nazw.

Co dalej?

Ostatnia modyfikacja June 22, 2025 at 2:40 PM PST: [pl] docs/concepts/overview/working-with-objects/namespaces.md (1be4969986)