Untersuchung grundlegender Cluster-Ressourcen
In diesem Schritt werden Sie grundlegende Kubernetes-Ressourcen wie Pods, Deployments und Services in allen Namespaces untersuchen. Mit der Option -A
(oder --all-namespaces
) können Sie sehen, wie die Ressourcen im gesamten Cluster organisiert sind. Dies ist eine ausgezeichnete Gelegenheit, das Konzept der Namespaces in Kubernetes kennen zu lernen und zu verstehen.
Namespaces: Ressourcen-Isolation
Namespaces sind logische Partitionen innerhalb eines Kubernetes-Clusters, die bei der Organisation und Verwaltung von Ressourcen helfen. Sie bieten eine Möglichkeit, verwandte Objekte zu gruppieren und Richtlinien, Zugangskontrollen und Ressourcenkontingente auf granularer Ebene anzuwenden. Durch die Aufteilung von Ressourcen in verschiedene Namespaces können Sie:
- Die Organisation verbessern: Verwandte Workloads gruppieren (z. B. nach Projekt, Team oder Umgebung wie Entwicklung, Test und Produktion).
- Sicherheit und Zugangskontrolle verbessern: Beschränken, welche Benutzer oder Service Accounts Ressourcen in einem bestimmten Namespace anzeigen oder ändern können.
- Die Ressourcenverwaltung vereinfachen: Ressourcenlimits, Netzwerkrichtlinien und andere clusterweite Konfigurationen effektiver anwenden.
Wenn Sie Ressourcen mit der Option -A
(oder --all-namespaces
) auflisten, werden Sie feststellen, dass Komponenten des Kubernetes-Systems im kube-system
-Namespace liegen, der für die Cluster-Infrastruktur reserviert ist. Benutzererstellte Anwendungen befinden sich normalerweise im default
-Namespace oder in anderen benutzerdefinierten Namespaces, die Sie definieren.
Namespaces und Ressourcen
flowchart LR
%% User interacts with the cluster via kube-apiserver
User((Developer))
User -->|kubectl get pods -A| API[kube-apiserver]
%% Control Plane Subgraph
subgraph ControlPlane[Control Plane]
API
ETCD[etcd]
SCH[kube-scheduler]
CTLM[kube-controller-manager]
end
API --> ETCD
API --> SCH
API --> CTLM
%% kube-system namespace
subgraph kube-system[Namespace: kube-system]
SysDeployment[Deployment: coredns]
SysPod1[Pod: coredns-xxx]
SysService[Service: kube-dns]
SysDeployment --> SysPod1
SysService --> SysPod1
end
%% default namespace (renamed to avoid parse issues)
subgraph defaultNs[Namespace: default]
DefDeployment[Deployment: my-app]
DefPod1[Pod: my-app-pod1]
DefPod2[Pod: my-app-pod2]
DefService[Service: my-app-service]
DefDeployment --> DefPod1
DefDeployment --> DefPod2
DefService --> DefPod1
DefService --> DefPod2
end
%% dev namespace
subgraph dev[Namespace: dev]
DevDeployment[Deployment: dev-app]
DevPod[Pod: dev-app-pod]
DevService[Service: dev-app-service]
DevDeployment --> DevPod
DevService --> DevPod
end
%% Demonstration of communication
API --> kube-system
API --> defaultNs
API --> dev
In der Grafik:
- Die Control Plane verwaltet den gesamten Cluster, kommuniziert mit den Knoten und steuert die Workloads.
- Namespaces (wie
kube-system
, default
und dev
) trennen die Ressourcen im Cluster logisch voneinander.
kube-system
enthält systemrelevante Komponenten wie CoreDNS und kube-dns.
default
wird üblicherweise für allgemeine Workloads verwendet, hier dargestellt durch ein my-app
-Deployment.
dev
könnte eine Entwicklungsumgebung repräsentieren, die von Produktions-Workloads isoliert ist.
Durch die Ansicht der Ressourcen in allen Namespaces erhalten Sie ein umfassendes Verständnis, wie diese logischen Partitionen dazu beitragen, einen organisierten und sicheren Cluster aufrechtzuerhalten.
Beispiele:
Liste aller Pods in allen Namespaces:
kubectl get pods -A
Beispielausgabe:
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-787d4945fb-j8rhx 1/1 Running 0 20m
kube-system etcd-minikube 1/1 Running 0 20m
kube-system kube-apiserver-minikube 1/1 Running 0 20m
kube-system kube-controller-manager-minikube 1/1 Running 0 20m
kube-system kube-proxy-xb9rz 1/1 Running 0 20m
kube-system kube-scheduler-minikube 1/1 Running 0 20m
kube-system storage-provisioner 1/1 Running 1 (20m ago) 20m
Hier sehen Sie alle systemrelevanten Pods, die im kube-system
-Namespace laufen. Wenn Sie andere Deployments oder Services in verschiedenen Namespaces hätten, würden sie ebenfalls in dieser Liste erscheinen, jeweils eindeutig durch ihren Namespace gekennzeichnet.
Liste aller Deployments in allen Namespaces:
kubectl get deployments -A
Beispielausgabe:
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE
kube-system coredns 1/1 1 1 20m
Das coredns
-Deployment befindet sich im kube-system
-Namespace.
Umfassende Ansicht aller Ressourcen in allen Namespaces:
kubectl get all -A
Dieser Befehl zeigt eine Übersicht über Pods, Services und Deployments in verschiedenen Namespaces an und hilft Ihnen zu verstehen, wie diese Ressourcen im gesamten Cluster verteilt sind.
Wichtige Erkenntnisse:
- Namespaces bieten logische Isolation und Organisation innerhalb eines Kubernetes-Clusters.
- Verschiedene Kubernetes-Komponenten und -Ressourcen sind in bestimmte Namespaces organisiert (z. B.
kube-system
für Kernservices, default
für allgemeine Workloads und zusätzliche Namespaces, die Sie erstellen).
- Durch die Verwendung von
-A
zur Ansicht der Ressourcen in allen Namespaces erhalten Sie Einblicke in die Struktur Ihres Clusters und wie Namespaces als Grenzen für die Ressourcenorganisation und Zugangskontrolle dienen.
Wenn Sie verstehen, wie Namespaces als logische Umgebungen funktionieren, können Sie Ihre Workloads und die zugehörigen Cluster-Ressourcen besser navigieren, isolieren und verwalten, insbesondere wenn Sie Ihre Deployments skalieren und Ihre Kubernetes-Umgebung komplexer gestalten.