Hilf mit, diese Seite zu verbessern
Möchten Sie zu diesem Benutzerhandbuch beitragen? Scrollen Sie zum Ende dieser Seite und wählen Sie Diese Seite bearbeiten am aus GitHub. Ihre Beiträge werden dazu beitragen, unser Benutzerhandbuch für alle zu verbessern.
Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Kubernetes-Konzepte
Amazon Elastic Kubernetes Service (AmazonEKS) ist ein AWS verwalteter Service, der auf dem Kubernetes
Auf dieser Seite sind die Kubernetes Konzepte in drei Abschnitte unterteilt: Warum Kubernetes?Cluster, und. Workloads Der erste Abschnitt beschreibt den Wert der Ausführung eines Kubernetes Dienstes, insbesondere als verwalteter Service wie AmazonEKS. Im Abschnitt Workloads wird beschrieben, wie Kubernetes Anwendungen erstellt, gespeichert, ausgeführt und verwaltet werden. Im Abschnitt Cluster werden die verschiedenen Komponenten beschrieben, aus denen Kubernetes Cluster bestehen, und Ihre Aufgaben für die Erstellung und Verwaltung von Kubernetes Clustern.
Wenn Sie diesen Inhalt durchgehen, führen Sie Links zu weiteren Beschreibungen der Kubernetes Konzepte in Amazon EKS und in der Kubernetes Dokumentation, falls Sie sich eingehend mit einem der hier behandelten Themen befassen möchten. Einzelheiten darüber, wie Amazon die Kubernetes Steuerungsebene und die Rechenfunktionen EKS implementiert, finden Sie unterEKSAmazon-Architektur.
Warum Kubernetes?
Kuberneteswurde entwickelt, um die Verfügbarkeit und Skalierbarkeit bei der Ausführung geschäftskritischer containerisierter Anwendungen in Produktionsqualität zu verbessern. Anstatt nur Kubernetes auf einem einzigen Computer zu laufen (obwohl das möglich ist), werden diese Ziele Kubernetes dadurch erreicht, dass Sie Anwendungen auf mehreren Computern ausführen können, die je nach Bedarf erweitert oder verkleinert werden können. Kubernetesumfasst Funktionen, die Ihnen Folgendes erleichtern:
-
Stellen Sie Anwendungen auf mehreren Computern bereit (mithilfe von Containern, die in Pods bereitgestellt werden)
-
Überwachen Sie den Zustand der Container und starten Sie ausgefallene Container neu
-
Skalieren Sie Container je nach Auslastung nach oben oder unten
-
Aktualisieren Sie Container mit neuen Versionen
-
Ordnen Sie Ressourcen zwischen Containern zu
-
Gleichen Sie den Verkehr zwischen den Maschinen aus
Durch die Kubernetes Automatisierung dieser Art komplexer Aufgaben kann sich ein Anwendungsentwickler auf den Aufbau und die Verbesserung seiner Anwendungs-Workloads konzentrieren, anstatt sich Gedanken über die Infrastruktur machen zu müssen. Der Entwickler erstellt in der Regel als Dateien formatierte YAML Konfigurationsdateien, die den gewünschten Status der Anwendung beschreiben. Dies kann beinhalten, welche Container ausgeführt werden sollen, Ressourcenlimits, Anzahl der Pod-Replikate, CPU /Memory-Zuweisung, Affinitätsregeln und mehr.
Attribute von Kubernetes
Um seine Ziele zu erreichen, Kubernetes hat die folgenden Eigenschaften:
-
Containerized — Kubernetes ist ein Tool zur Container-Orchestrierung. Um es verwenden zu könnenKubernetes, müssen Sie zuerst Ihre Anwendungen containerisiert haben. Je nach Art der Anwendung kann es sich dabei um eine Reihe von Microservices, als Batch-Jobs oder in anderen Formen handeln. Anschließend können Ihre Anwendungen von einem Kubernetes Workflow profitieren, der ein riesiges Ökosystem von Tools umfasst, in dem Container als Images in einer Container-Registry gespeichert, in einem Kubernetes
Cluster bereitgestellt und auf einem verfügbaren Knoten ausgeführt werden können. Sie können einzelne Container auf Ihrem lokalen Computer mit Docker oder einer anderen Container-Runtime erstellen und testen, bevor Sie sie in Ihrem Kubernetes Cluster bereitstellen. -
Skalierbar — Wenn die Nachfrage nach Ihren Anwendungen die Kapazität der laufenden Instanzen dieser Anwendungen übersteigt, Kubernetes ist eine Skalierung möglich. KubernetesKann bei Bedarf feststellen, ob Anwendungen mehr CPU oder mehr Speicher benötigen, und reagiert darauf, indem entweder die verfügbare Kapazität automatisch erweitert oder mehr der vorhandenen Kapazität genutzt wird. Die Skalierung kann auf Pod-Ebene erfolgen, wenn genügend Rechenleistung zur Verfügung steht, um einfach mehr Instanzen der Anwendung auszuführen (horizontales Pod-Autoscaling
), oder auf Knotenebene, wenn mehr Knoten eingerichtet werden müssen, um die erhöhte Kapazität zu bewältigen (Cluster Autoscaler oder Karpenter). Da keine Kapazität mehr benötigt wird, können diese Dienste nicht benötigte Pods löschen und nicht benötigte Knoten herunterfahren. -
Verfügbar — Wenn eine Anwendung oder ein Knoten fehlerhaft oder nicht verfügbar ist, Kubernetes können laufende Workloads auf einen anderen verfügbaren Knoten verschoben werden. Sie können das Problem erzwingen, indem Sie einfach eine laufende Instanz eines Workloads oder Knotens löschen, auf dem Ihre Workloads ausgeführt werden. Die Quintessenz dabei ist, dass Workloads an anderen Standorten geladen werden können, wenn sie nicht mehr dort ausgeführt werden können, wo sie sich befinden.
-
Deklarativ — Kubernetes verwendet aktiven Abgleich, um ständig zu überprüfen, ob der Status, den Sie für Ihren Cluster deklarieren, dem tatsächlichen Status entspricht. Indem Sie KubernetesObjekte
auf einen Cluster anwenden, in der Regel mithilfe von YAML -formatierten Konfigurationsdateien, können Sie beispielsweise verlangen, dass die Workloads, die Sie auf Ihrem Cluster ausführen möchten, gestartet werden. Sie können die Konfigurationen später ändern, um beispielsweise eine neuere Version eines Containers zu verwenden oder mehr Speicher zuzuweisen. Kuberneteswird alles Notwendige tun, um den gewünschten Status herzustellen. Dies kann das Hoch- oder Herunterfahren von Knoten, das Stoppen und Neustarten von Workloads oder das Abrufen aktualisierter Container beinhalten. -
Zusammensetzbar — Da eine Anwendung in der Regel aus mehreren Komponenten besteht, möchten Sie in der Lage sein, einen Satz dieser Komponenten (häufig dargestellt durch mehrere Container) gemeinsam zu verwalten. DockerCompose bietet zwar eine Möglichkeit, dies direkt mit zu tunDocker, aber der Befehl Kubernetes Kompose
kann Ihnen dabei helfen. Kubernetes Ein Beispiel dafür finden Sie unter Translate einer Docker Compose-Datei in Kubernetes Ressourcen . -
Erweiterbar — Im Gegensatz zu proprietärer Software ist das Kubernetes Open-Source-Projekt so konzipiert, dass es Ihnen offen steht und auf Kubernetes jede Art und Weise erweitert werden kann, wie Sie möchten, um Ihren Bedürfnissen gerecht zu werden. APIsund Konfigurationsdateien können direkt geändert werden. Drittanbieter werden ermutigt, ihre eigenen Controller
zu schreiben, um sowohl die Infrastruktur als auch die Funktionen für Endbenutzer Kubernetes zu erweitern. Mit Webhooks können Sie Clusterregeln einrichten, um Richtlinien durchzusetzen und sich an sich ändernde Bedingungen anzupassen. Weitere Ideen zur Erweiterung von Kubernetes Clustern finden Sie unter Erweitern Kubernetes . -
Portierbar — Viele Unternehmen haben ihre Abläufe auf standardisiert, Kubernetes weil sie damit alle ihre Anwendungsanforderungen auf die gleiche Weise verwalten können. Entwickler können dieselben Pipelines verwenden, um containerisierte Anwendungen zu erstellen und zu speichern. Diese Anwendungen können dann in Kubernetes Clustern bereitgestellt werden, die vor Ort, in Clouds, auf point-of-sales Terminals in Restaurants oder auf IOT Geräten, die über die Remote-Standorte des Unternehmens verteilt sind, ausgeführt werden. Aufgrund seines Open-Source-Charakters können Benutzer diese speziellen Kubernetes Distributionen zusammen mit den Tools, die zu ihrer Verwaltung benötigt werden, entwickeln.
Verwalten von Kubernetes
KubernetesDer Quellcode ist frei verfügbar, sodass Sie ihn mit Ihren eigenen Geräten Kubernetes selbst installieren und verwalten können. Die Selbstverwaltung Kubernetes erfordert jedoch umfangreiche betriebliche Fachkenntnisse und erfordert Zeit und Mühe bei der Wartung. Aus diesen Gründen entscheiden sich die meisten Benutzer, die Produktionsworkloads bereitstellen, für einen Cloud-Anbieter (wie AmazonEKS) oder einen lokalen Anbieter (wie Amazon EKS Anywhere) mit eigener getesteter Kubernetes Distribution und Support durch Experten. Kubernetes Auf diese Weise können Sie einen Großteil der undifferenzierten Schwerarbeit entlasten, die für die Wartung Ihrer Cluster erforderlich sind, darunter:
-
Hardware — Wenn Sie keine Hardware zur Verfügung haben, die Kubernetes Ihren Anforderungen entspricht, EKS kann Ihnen ein Cloud-Anbieter wie AWS Amazon Vorabkosten sparen. Mit Amazon bedeutet diesEKS, dass Sie die besten Cloud-Ressourcen nutzen können, die angeboten werden AWS, darunter Computer-Instances (Amazon Elastic Compute Cloud), Ihre eigene private Umgebung (AmazonVPC), zentrales Identitäts- und Berechtigungsmanagement (IAM) und Speicher (AmazonEBS). AWS verwaltet die Computer, Netzwerke, Rechenzentren und alle anderen physischen Komponenten, die für den Betrieb erforderlich sindKubernetes. Ebenso müssen Sie Ihr Rechenzentrum nicht so planen, dass es die maximale Kapazität an den Tagen mit der höchsten Nachfrage bewältigen kann. Bei Amazon EKS Anywhere oder anderen lokalen Kubernetes Clustern sind Sie für die Verwaltung der in Ihren Kubernetes Bereitstellungen verwendeten Infrastruktur verantwortlich. Sie können sich aber trotzdem darauf verlassen, dass wir Ihnen helfen, auf dem AWS neuesten Kubernetes Stand zu bleiben.
-
Verwaltung der Kontrollebene — Amazon EKS verwaltet die Sicherheit und Verfügbarkeit der AWS gehosteten Kubernetes Steuerungsebene, die für die Planung von Containern, die Verwaltung der Verfügbarkeit von Anwendungen und andere wichtige Aufgaben verantwortlich ist, sodass Sie sich auf Ihre Anwendungs-Workloads konzentrieren können. Sollte Ihr Cluster ausfallen, AWS sollten Sie über die Mittel verfügen, Ihren Cluster wieder in den Betriebszustand zu versetzen. Für Amazon EKS Anywhere würden Sie die Kontrollebene selbst verwalten.
-
Getestete Upgrades — Wenn Sie Ihre Cluster aktualisieren, können Sie sich darauf verlassen, dass Amazon EKS oder Amazon EKS Anywhere getestete Versionen ihrer Kubernetes Distributionen bereitstellen.
-
Add-Ons — Es gibt Hunderte von Projekten, die zur Erweiterung und Nutzung konzipiert wurden und Kubernetes die Sie zur Infrastruktur Ihres Clusters hinzufügen oder zur Unterstützung der Ausführung Ihrer Workloads verwenden können. Anstatt diese Add-Ons selbst zu erstellen und zu verwalten, AWS bietet Amazon EKS Add-Ons, die Sie mit Ihren Clustern verwenden können. Amazon EKS Anywhere bietet kuratierte Pakete
, die Builds vieler beliebter Open-Source-Projekte enthalten. Sie müssen die Software also nicht selbst erstellen oder wichtige Sicherheitspatches, Bugfixes oder Upgrades verwalten. Wenn die Standardeinstellungen Ihren Anforderungen entsprechen, ist es ebenfalls typisch, dass nur eine sehr geringe Konfiguration dieser Add-Ons erforderlich ist. Einzelheiten zur Erweiterung Ihres Clusters mit Add-Ons finden Sie unter Cluster erweitern.
Kubernetesin Aktion
Das folgende Diagramm zeigt die wichtigsten Aktivitäten, die Sie als Kubernetes Administrator oder Anwendungsentwickler ausführen würden, um einen Kubernetes Cluster zu erstellen und zu verwenden. Dabei wird veranschaulicht, wie Kubernetes Komponenten miteinander interagieren, wobei die AWS Cloud als Beispiel für den zugrunde liegenden Cloud-Anbieter verwendet wird.
Ein Kubernetes Administrator erstellt den Kubernetes Cluster mit einem Tool, das für den Anbietertyp spezifisch ist, auf dem der Cluster aufgebaut werden soll. In diesem Beispiel wird die AWS Cloud als Anbieter verwendet, der den Managed Kubernetes Service namens Amazon anbietetEKS. Der verwaltete Service weist automatisch die Ressourcen zu, die für die Erstellung des Clusters benötigt werden, einschließlich der Erstellung von zwei neuen Virtual Private Clouds (AmazonVPCs) für den Cluster, der Einrichtung von Netzwerken, der Zuordnung von Kubernetes Berechtigungen zu diesen zur Verwaltung von Ressourcen in der Cloud, der Sicherstellung, dass die Dienste der Kontrollebene über Standorte zum Ausführen von Workloads verfügen, und der Zuweisung von null oder mehr EC2 Amazon-Instances als Kubernetes Knoten für die Ausführung von Workloads. AWS verwaltet einen Amazon VPC selbst für die Kontrollebene, während der andere Amazon die Kundenknoten VPC enthält, auf denen Workloads ausgeführt werden.
Viele der zukünftigen Aufgaben des Kubernetes Administrators werden mithilfe von Kubernetes Tools wie kubectl
erledigt. Dieses Tool sendet Anfragen für Dienste direkt an die Steuerungsebene des Clusters. Die Art und Weise, wie Abfragen und Änderungen am Cluster vorgenommen werden, ist dann der Art und Weise, wie Sie sie in jedem Kubernetes Cluster durchführen würden, sehr ähnlich.
Ein Anwendungsentwickler, der Workloads für diesen Cluster bereitstellen möchte, kann mehrere Aufgaben ausführen. Der Entwickler muss die Anwendung in ein oder mehrere Container-Images integrieren und diese Images dann in eine Container-Registry übertragen, auf die der Kubernetes Cluster zugreifen kann. AWS bietet zu diesem Zweck das Amazon Elastic Container Registry (AmazonECR) an.
Um die Anwendung auszuführen, kann der Entwickler Konfigurationsdateien im YAML -Format erstellen, die dem Cluster mitteilen, wie die Anwendung ausgeführt werden soll, einschließlich der Container, die aus der Registrierung abgerufen werden sollen, und wie diese Container in Pods verpackt werden sollen. Die Steuerungsebene (Scheduler) ordnet die Container einem oder mehreren Knoten zu, und die Container-Laufzeit auf jedem Knoten ruft die benötigten Container ab und führt sie aus. Der Entwickler kann auch einen Application Load Balancer einrichten, der den Datenverkehr auf die verfügbaren Container verteilt, die auf jedem Knoten ausgeführt werden, und die Anwendung so verfügbar macht, dass sie in einem öffentlichen Netzwerk für die Außenwelt verfügbar ist. Wenn das alles erledigt ist, kann sich jemand, der die Anwendung verwenden möchte, mit dem Anwendungsendpunkt verbinden, um darauf zuzugreifen.
Im folgenden Abschnitt werden die einzelnen Funktionen aus der Sicht von Kubernetes Clustern und Workloads detailliert beschrieben.
Cluster
Wenn Ihre Aufgabe darin besteht, Kubernetes Cluster zu starten und zu verwalten, sollten Sie wissen, wie Kubernetes Cluster erstellt, erweitert, verwaltet und gelöscht werden. Sie sollten auch wissen, aus welchen Komponenten ein Cluster besteht und was Sie tun müssen, um diese Komponenten zu verwalten.
Tools für die Verwaltung von Clustern berücksichtigen die Überschneidung zwischen den Kubernetes Diensten und dem zugrunde liegenden Hardwareanbieter. Aus diesem Grund erfolgt die Automatisierung dieser Aufgaben in der Regel durch den Kubernetes Anbieter (wie Amazon EKS oder Amazon EKS Anywhere) mithilfe von anbieterspezifischen Tools. Um beispielsweise einen EKS Amazon-Cluster zu starten, können Sie ihn verwendeneksctl create cluster
, während Sie ihn für Amazon EKS Anywhere verwenden könneneksctl anywhere create cluster
. Beachten Sie, dass diese Befehle zwar einen Kubernetes Cluster erstellen, aber spezifisch für den Anbieter sind und nicht Teil des Kubernetes Projekts selbst sind.
Tools zur Clustererstellung und -verwaltung
Das Kubernetes Projekt bietet Tools für die manuelle Erstellung eines Kubernetes Clusters. Wenn Sie also Kubernetes auf einem einzelnen Computer installieren oder die Steuerungsebene auf einem Computer ausführen und Knoten manuell hinzufügen möchten, können Sie CLI Tools wie kind
In AWS Cloud können Sie EKSAmazon-Cluster mithilfe von CLI Tools wie eksctl
-
Verwaltete Kontrollebene — AWS stellt sicher, dass der EKS Amazon-Cluster verfügbar und skalierbar ist, da er die Kontrollebene für Sie verwaltet und in allen AWS Availability Zones verfügbar macht.
-
Knotenverwaltung — Anstatt Knoten manuell hinzuzufügen, können Sie Amazon mithilfe von Managed Node Groups oder Karpenter Knoten nach Bedarf automatisch EKS erstellen lassen. Verwaltete Knotengruppen verfügen über Integrationen mit Kubernetes Cluster Autoscaling.
Mithilfe von Tools zur Knotenverwaltung können Sie Kosteneinsparungen wie Spot-Instances und Knotenkonsolidierung sowie Verfügbarkeit nutzen. Mithilfe von Planungsfunktionen können Sie festlegen, wie Workloads bereitgestellt und Knoten ausgewählt werden. -
Clusternetzwerke — Richten Sie mithilfe
eksctl
von CloudFormation Vorlagen die Vernetzung zwischen Komponenten der Steuerungsebene und der Datenebene (Knoten) im Kubernetes Cluster ein. Außerdem werden Endpunkte eingerichtet, über die interne und externe Kommunikation stattfinden kann. Einzelheiten finden Sie unter Entmystifying Cluster Networking for Amazon EKS Worker Nodes. Die Kommunikation zwischen Pods in Amazon EKS erfolgt über Amazon EKS Pod Identities, wodurch Pods AWS Cloud-Methoden zur Verwaltung von Anmeldeinformationen und Berechtigungen nutzen können. -
Add-Ons — Amazon EKS erspart Ihnen das Erstellen und Hinzufügen von Softwarekomponenten, die üblicherweise zur Unterstützung von Kubernetes Clustern verwendet werden. Wenn Sie beispielsweise einen EKS Amazon-Cluster von der AWS Management-Konsole aus erstellen, werden automatisch der Amazon EKS Kube-Proxy, das VPCCNIAmazon-Plug-In für Kubernetes und die DNSCore-Add-Ons hinzugefügt. Weitere Informationen zu diesen EKSAdd-Ons, einschließlich einer Liste der verfügbaren Add-Ons, finden Sie unter Amazon-Add-Ons.
Um Ihre Cluster auf Ihren eigenen Computern und Netzwerken vor Ort auszuführen, bietet Amazon Amazon EKS Anywhere
Amazon EKS Anywhere basiert auf derselben Amazon EKS Distro-Software
Cluster-Komponenten
KubernetesDie Clusterkomponenten sind in zwei Hauptbereiche unterteilt: Steuerungsebene und Worker-Knoten. Komponenten der Steuerungsebene
Steuerebene
Die Steuerungsebene besteht aus einer Reihe von Diensten, die den Cluster verwalten. Diese Dienste können alle auf einem einzigen Computer ausgeführt werden oder auf mehrere Computer verteilt sein. Intern werden diese als Control Plane Instances (CPIs) bezeichnet. Wie CPIs sie ausgeführt werden, hängt von der Größe des Clusters und den Anforderungen an die Hochverfügbarkeit ab. Wenn die Nachfrage im Cluster steigt, kann ein Service auf der Steuerungsebene skaliert werden, um mehr Instanzen dieses Dienstes bereitzustellen, wobei die Anforderungen zwischen den Instanzen verteilt werden.
Zu den Aufgaben, die Komponenten der Kubernetes Steuerungsebene ausführen, gehören:
-
Kommunikation mit Clusterkomponenten (APIServer) — Der API Server (kube-apiserver
) macht sie verfügbar, Kubernetes API sodass Anfragen an den Cluster sowohl innerhalb als auch außerhalb des Clusters gestellt werden können. Mit anderen Worten, Anfragen zum Hinzufügen oder Ändern von Objekten eines Clusters (Pods, Dienste, Knoten usw.) können von externen Befehlen stammen, z. B. von kubectl
Anfragen zum Ausführen eines Pods. Ebenso können Anfragen vom API Server an Komponenten innerhalb des Clusters gestellt werden, z. B. eine Abfrage des Status eines Pods an denkubelet
Dienst. -
Daten über den Cluster speichern (
etcd
Schlüsselwertspeicher) — Deretcd
Dienst hat die entscheidende Rolle, den aktuellen Status des Clusters zu verfolgen. Wenn auf denetcd
Dienst nicht mehr zugegriffen werden könnte, könnten Sie den Status des Clusters nicht aktualisieren oder abfragen, obwohl die Workloads noch eine Weile laufen würden. Aus diesem Grund werden in kritischen Clustern in der Regel mehrere Instanzen desetcd
Dienstes mit Lastenausgleich gleichzeitig ausgeführt und es werden regelmäßig Backups desetcd
Key-Value-Speichers erstellt, falls Daten verloren gehen oder beschädigt werden. Denken Sie daran, dass bei Amazon EKS dies alles standardmäßig automatisch für Sie erledigt wird. Amazon EKS Anywhere bietet Anweisungen für die Sicherung und Wiederherstellung von etcd. Sehen Sie sich das etcd
Datenmodellan, um zu erfahren, wie Daten etcd
verwaltet werden. -
Pods für Knoten planen (Scheduler) — Anfragen zum Starten oder Stoppen eines Pods Kubernetes werden an den KubernetesScheduler (kube-scheduler
) weitergeleitet. Da ein Cluster mehrere Knoten haben kann, die den Pod ausführen können, ist es Sache des Schedulers, auszuwählen, auf welchem Knoten (oder auf welchen Knoten, im Fall von Replikaten) der Pod ausgeführt werden soll. Wenn nicht genügend Kapazität verfügbar ist, um den angeforderten Pod auf einem vorhandenen Knoten auszuführen, schlägt die Anfrage fehl, sofern Sie keine anderen Vorkehrungen getroffen haben. Diese Bestimmungen könnten die Aktivierung von Diensten wie Managed Node Groups oder Karpenter beinhalten, die automatisch neue Knoten starten können, um die Workloads zu bewältigen. -
Komponenten im gewünschten Zustand belassen (Controller Manager) — Der Kubernetes Controller Manager wird als Daemon-Prozess (kube-controller-manager
) ausgeführt, um den Status des Clusters zu überwachen und Änderungen am Cluster vorzunehmen, um die erwarteten Zustände wiederherzustellen. Insbesondere gibt es mehrere Controller, die verschiedene Kubernetes Objekte überwachen, darunter ein statefulset-controller
,,endpoint-controller
cronjob-controller
node-controller
, und andere. -
Cloud-Ressourcen verwalten (Cloud Controller Manager) — Interaktionen zwischen Kubernetes und dem Cloud-Anbieter, der Anfragen für die zugrunde liegenden Rechenzentrumsressourcen ausführt, werden vom Cloud Controller Manager
(cloud-controller-manager ) abgewickelt. Controller, die vom Cloud Controller Manager verwaltet werden, können einen Route-Controller (für die Einrichtung von Cloud-Netzwerkrouten), einen Service-Controller (für die Nutzung von Cloud-Load-Balancing-Diensten) und einen Node-Lifecycle-Controller (um die Knoten während ihres gesamten Lebenszyklus mit Kubernetes synchron zu halten) umfassen.
Worker-Knoten (Datenebene)
Bei einem Kubernetes Cluster mit einem Knoten laufen die Workloads auf derselben Maschine wie die Steuerungsebene. Eine normalere Konfiguration besteht jedoch darin, über ein oder mehrere separate Computersysteme (Knoten
Wenn Sie einen Kubernetes Cluster zum ersten Mal erstellen, können Sie mit einigen Tools zur Clustererstellung eine bestimmte Anzahl von Knoten konfigurieren, die dem Cluster hinzugefügt werden sollen (entweder indem Sie vorhandene Computersysteme identifizieren oder den Anbieter neue erstellen lassen). Bevor Workloads zu diesen Systemen hinzugefügt werden, werden jedem Knoten Dienste hinzugefügt, um die folgenden Funktionen zu implementieren:
-
Jeden Knoten verwalten (
kubelet
) — Der API Server kommuniziert mit dem Kubelet-Dienst, der auf jedem Knoten ausgeführt wird, um sicherzustellen, dass der Knoten ordnungsgemäß registriert ist und die vom Scheduler angeforderten Pods ausgeführt werden. Das Kubelet kann die Pod-Manifeste lesen und Speichervolumes oder andere Funktionen einrichten, die von den Pods auf dem lokalen System benötigt werden. Es kann auch den Zustand der lokal laufenden Container überprüfen. -
Container auf einem Knoten ausführen (Container-Laufzeit) — Die Container-Runtime
auf jedem Knoten verwaltet die Container, die für jeden dem Knoten zugewiesenen Pod angefordert werden. Das bedeutet, dass sie Container-Images aus der entsprechenden Registry abrufen, den Container ausführen, stoppen und auf Anfragen zum Container antworten kann. Die Standard-Container-Laufzeit ist containerd . Ab Version Kubernetes 1.24 wurde die spezielle Integration von Docker ( dockershim
), die als Container-Laufzeit verwendet werden konnte, gestrichen. Kubernetes Sie können zwar weiterhin Container auf Ihrem lokalen System testen und ausführen, aber um sie zu verwendenDocker, müssten Kubernetes Sie jetzt die DockerEngine auf jedem Knoten installieren, mit Kubernetes dem Sie sie verwenden möchten. Docker -
Netzwerkverwaltung zwischen Containern (Kube-Proxy) — Um die Kommunikation zwischen Pods mithilfe von Diensten unterstützen zu können, war eine Möglichkeit Kubernetes erforderlich, Pod-Netzwerke einzurichten, um IP-Adressen und Ports zu verfolgen, die diesen Pods zugeordnet sind. Der Kube-Proxy-Service
wird auf jedem Knoten ausgeführt, um die Kommunikation zwischen den Pods zu ermöglichen.
Erweitern Sie Cluster
Es gibt einige Dienste, die Sie Kubernetes zur Unterstützung des Clusters hinzufügen können, die jedoch nicht auf der Steuerungsebene ausgeführt werden. Diese Dienste werden häufig direkt auf Knoten im Kube-System-Namespace oder in einem eigenen Namespace ausgeführt (wie dies häufig bei Drittanbietern der Fall ist). Ein gängiges Beispiel ist der DNS Core-Dienst, der DNS Dienste für den Cluster bereitstellt. Informationen darüber, wie Sie feststellen können, welche Clusterdienste im Kube-System auf Ihrem Cluster ausgeführt werden, finden Sie unter Entdecken integrierter
Es gibt verschiedene Arten von Add-Ons, die Sie Ihren Clustern hinzufügen können. Damit Ihre Cluster funktionsfähig bleiben, können Sie Observability-Funktionen hinzufügen, mit denen Sie beispielsweise Logging, Auditing und Metriken durchführen können. Mit diesen Informationen können Sie auftretende Probleme beheben, häufig über dieselben Observability-Schnittstellen. Beispiele für diese Arten von Diensten sind Amazon GuardDuty CloudWatch, AWS Distro for OpenTelemetry
Eine vollständigere Liste der verfügbaren EKS Amazon-Add-Ons finden Sie unterEKSAmazon-Add-Ons.
Workloads
Kubernetesdefiniert einen Workload
Container
Das grundlegendste Element eines Anwendungs-Workloads, in dem Sie bereitstellen und verwalten, Kubernetes ist ein Pod
Da der Pod die kleinste bereitstellbare Einheit ist, enthält er in der Regel einen einzelnen Container. In Fällen, in denen die Container eng miteinander verbunden sind, können sich jedoch mehrere Container in einem Pod befinden. Beispielsweise kann ein Webserver-Container in einem Pod mit einem Container vom Typ Sidecar
Die Pod-Spezifikationen (PodSpec
DaemonSets
Während ein Pod die kleinste Einheit ist, die Sie einsetzen, ist ein Container die kleinste Einheit, die Sie erstellen und verwalten.
Container bauen
Der Pod ist eigentlich nur eine Struktur rund um einen oder mehrere Container, wobei jeder Container selbst das Dateisystem, die ausführbaren Dateien, Konfigurationsdateien, Bibliotheken und andere Komponenten enthält, um die Anwendung tatsächlich auszuführen. Da ein Unternehmen namens Docker Inc. zuerst Container populär gemacht hat, bezeichnen manche Leute Container als Container. Docker Seitdem hat die Open Container Initiative
Wenn Sie einen Container erstellen, beginnen Sie normalerweise mit einer Docker Datei (die wörtlich so genannt wird). In diesem Dockerfile identifizieren Sie:
-
Ein Basis-Image — Ein Basis-Container-Image ist ein Container, der in der Regel entweder aus einer Minimalversion des Dateisystems eines Betriebssystems (wie Red Hat Enterprise Linux
oder Ubuntu ) oder aus einem Minimalsystem erstellt wird, das erweitert wurde, um Software für die Ausführung bestimmter Arten von Anwendungen (wie nodejs - oder Python-Apps ) bereitzustellen. -
Anwendungssoftware — Sie können Ihre Anwendungssoftware auf die gleiche Weise zu Ihrem Container hinzufügen, wie Sie sie einem Linux-System hinzufügen würden. In Ihrem Dockerfile können Sie beispielsweise eine Java-Anwendung ausführen
npm
undyarn
installieren oderyum
Paketednf
installierenRPM. Mit anderen Worten, mit einem RUN Befehl in einem Dockerfile können Sie jeden Befehl ausführen, der im Dateisystem Ihres Basis-Images verfügbar ist, um Software zu installieren oder Software innerhalb des resultierenden Container-Images zu konfigurieren. -
Anweisungen — Die Dockerfile-Referenz
beschreibt die Anweisungen, die Sie einer Dockerfile hinzufügen können, wenn Sie sie konfigurieren. Dazu gehören Anweisungen, die verwendet werden, um den Inhalt des Containers selbst ( ADD
oderCOPY
Dateien aus dem lokalen System) zu erstellen, Befehle zu identifizieren, die ausgeführt werden sollen, wenn der Container ausgeführt wird (CMD
oderENTRYPOINT
), und den Container mit dem System zu verbinden, auf dem er ausgeführt werden soll (indem der Container identifiziert wird, unter dem er ausgeführt werden soll, ein LokalUSER
zum Mounten oder die Ports,VOLUME
zu denen er ausgeführt werden soll).EXPOSE
Während der docker
Befehl und der Dienst traditionell zum Erstellen von Containern (docker build
) verwendet wurden, gehören auch andere Tools, die zum Erstellen von Container-Images verfügbar sind, podman
nerdctl
Speichern von Containern
Sobald Sie Ihr Container-Image erstellt haben, können Sie es in einer Container-Distributionsregistrierung
Um Container-Images öffentlicher zu speichern, können Sie sie in eine öffentliche Container-Registry übertragen. Öffentliche Container-Register bieten einen zentralen Ort für die Speicherung und Verteilung von Container-Images. Beispiele für öffentliche Container-Registrierungen sind das Amazon Elastic Container Registry
Wenn Sie containerisierte Workloads auf Amazon Elastic Kubernetes Service (AmazonEKS) ausführen, empfehlen wir, Kopien von Docker offiziellen Images abzurufen, die in Amazon Elastic Container Registry gespeichert sind. AWS Amazon ECR speichert diese Bilder seit 2021. Sie können in der Amazon ECR Public Gallery
Container ausführen
Da Container in einem Standardformat erstellt werden, kann ein Container auf jedem Computer ausgeführt werden, auf dem eine Container-Laufzeit ausgeführt werden kann (z. B.Docker) und dessen Inhalt der Architektur des lokalen Computers entspricht (z. B. x86_64
oderarm
). Um einen Container zu testen oder ihn einfach auf Ihrem lokalen Desktop auszuführen, können Sie podman run
Befehle docker run
oder verwenden, um einen Container auf dem Localhost zu starten. Für Kubernetes jeden Worker-Knoten ist jedoch eine Container-Runtime bereitgestellt, und es liegt an Ihnen, Kubernetes anzufordern, dass ein Knoten einen Container ausführt.
Sobald einem Container die Ausführung auf einem Knoten zugewiesen wurde, prüft der Knoten, ob die angeforderte Version des Container-Images bereits auf dem Knoten vorhanden ist. Ist dies nicht der Fall, Kubernetes wird die Container-Laufzeit angewiesen, diesen Container aus der entsprechenden Container-Registry abzurufen und diesen Container dann lokal auszuführen. Denken Sie daran, dass sich ein Container-Image auf das Softwarepaket bezieht, das zwischen Ihrem Laptop, der Container-Registry und den Kubernetes Knoten hin und her bewegt wird. Ein Container bezieht sich auf eine laufende Instanz dieses Images.
Pods
Sobald Ihre Container bereit sind, umfasst die Arbeit mit Pods das Konfigurieren, Bereitstellen und Zugänglichmachen der Pods.
Konfiguration von Pods
Wenn Sie einen Pod definieren, weisen Sie ihm eine Reihe von Attributen zu. Diese Attribute müssen mindestens den Pod-Namen und das Container-Image enthalten, damit sie ausgeführt werden können. Es gibt jedoch noch viele andere Dinge, die Sie mit Ihren Pod-Definitionen konfigurieren möchten (Einzelheiten darüber, was in einen Pod aufgenommen werden kann, finden Sie auf der PodSpec
-
Speicher — Wenn ein laufender Container gestoppt und gelöscht wird, verschwindet der Datenspeicher in diesem Container, sofern Sie keinen permanenten Speicher einrichten. Kubernetesunterstützt viele verschiedene Speichertypen und abstrahiert sie unter dem Dach von Volumes
. Zu den Speichertypen gehören CephFS NFS SCSI, i und andere. Sie können sogar ein lokales Blockgerät vom lokalen Computer aus verwenden. Wenn einer dieser Speichertypen in Ihrem Cluster verfügbar ist, können Sie das Speichervolume an einem ausgewählten Bereitstellungspunkt im Dateisystem Ihres Containers mounten. Ein persistentes Volume ist ein Volume, das auch nach dem Löschen des Pods weiterhin existiert, während ein flüchtiges Volume gelöscht wird, wenn der Pod gelöscht wird. Falls Ihr Clusteradministrator etwas anderes StorageClasses
für Ihren Cluster erstellt hat, haben Sie möglicherweise die Möglichkeit, die Attribute des von Ihnen verwendeten Speichers auszuwählen, z. B. ob das Volume gelöscht oder nach der Verwendung zurückgewonnen wird, ob es erweitert wird, wenn mehr Speicherplatz benötigt wird, und sogar, ob es bestimmte Leistungsanforderungen erfüllt. -
Secrets — Indem Sie Secrets
in Pod-Spezifikationen für Container verfügbar machen, können Sie die Berechtigungen bereitstellen, die diese Container für den Zugriff auf Dateisysteme, Datenbanken oder andere geschützte Ressourcen benötigen. Schlüssel, Passwörter und Token gehören zu den Elementen, die als Geheimnisse gespeichert werden können. Durch die Verwendung von Geheimnissen müssen Sie diese Informationen nicht in Container-Images speichern, sondern müssen die Geheimnisse nur laufenden Containern zur Verfügung stellen. Ähnlich wie Secrets sind ConfigMaps
. A enthält in der ConfigMap
Regel weniger wichtige Informationen, wie z. B. Schlüssel-Wert-Paare für die Konfiguration eines Dienstes. -
Containerressourcen — Objekte für die weitere Konfiguration von Containern können die Form einer Ressourcenkonfiguration annehmen. Für jeden Container können Sie die Speichermenge und CPU die Menge des Speichers, den er verwenden kann, anfordern und die Gesamtmenge der Ressourcen, die der Container verwenden kann, einschränken. Beispiele finden Sie unter Ressourcenverwaltung für Pods und Container
. -
Störungen — Pods können unfreiwillig (ein Knoten fällt aus) oder freiwillig (ein Upgrade ist gewünscht) unterbrochen werden. Durch die Konfiguration eines Budgets für Pod-Unterbrechungen
können Sie kontrollieren, wie verfügbar Ihre Anwendung bei Störungen bleibt. Beispiele finden Sie unter Festlegung eines Unterbrechungsbudgets für Ihre Anwendung. -
Namespaces — Kubernetes bietet verschiedene Möglichkeiten, Kubernetes Komponenten und Workloads voneinander zu isolieren. Das Ausführen aller Pods für eine bestimmte Anwendung im selben Namespace
ist eine gängige Methode, um diese Pods gemeinsam zu sichern und zu verwalten. Sie können Ihre eigenen Namespaces erstellen, die Sie verwenden möchten, oder sich dafür entscheiden, keinen Namespace anzugeben (was Kubernetes dazu führt, dass der Namespace verwendet wird). default
KubernetesKomponenten der Steuerungsebene werden normalerweise im Namespace ausgeführt.kube-system
Die gerade beschriebene Konfiguration wird in der Regel in einer YAML Datei zusammengefasst, die auf den Kubernetes Cluster angewendet wird. Für persönliche Kubernetes Cluster können Sie diese YAML Dateien einfach auf Ihrem lokalen System speichern. Bei kritischeren Clustern und Workloads GitOps
Die Objekte, die zum Sammeln und Bereitstellen von Pod-Informationen verwendet werden, werden durch eine der folgenden Bereitstellungsmethoden definiert.
Bereitstellen von Pods
Die Methode, die Sie für die Bereitstellung von Pods wählen würden, hängt von der Art der Anwendung ab, die Sie mit diesen Pods ausführen möchten. Hier sind einige Ihrer Optionen:
-
Zustandslose Anwendungen — Eine statuslose Anwendung speichert die Sitzungsdaten eines Clients nicht, sodass in einer anderen Sitzung nicht auf das zurückgegriffen werden muss, was mit einer vorherigen Sitzung passiert ist. Dadurch ist es einfacher, Pods einfach durch neue zu ersetzen, wenn sie defekt sind, oder sie zu verschieben, ohne den Status zu speichern. Wenn Sie eine statuslose Anwendung (z. B. einen Webserver) ausführen, können Sie Pods
und mithilfe eines Deployments bereitstellen. ReplicaSets A ReplicaSet definiert, wie viele Instanzen eines Pods gleichzeitig ausgeführt werden sollen. Obwohl Sie einen ReplicaSet direkt ausführen können, ist es üblich, Replikate direkt in einem Deployment auszuführen, um zu definieren, wie viele Replikate eines Pods gleichzeitig ausgeführt werden sollen. -
Stateful-Anwendungen — Bei einer statusbehafteten Anwendung sind die Identität des Pods und die Reihenfolge, in der Pods gestartet werden, wichtig. Diese Anwendungen benötigen dauerhaften Speicher, der stabil ist und konsistent bereitgestellt und skaliert werden muss. Um eine statusbehaftete Anwendung bereitzustellenKubernetes, können Sie verwenden. StatefulSets
Ein Beispiel für eine Anwendung, die normalerweise als ausgeführt wird, StatefulSet ist eine Datenbank. In einer StatefulSet könnten Sie Replikate, den Pod und seine Container, zu mountende Speichervolumes und Speicherorte im Container, an denen Daten gespeichert werden, definieren. Ein Beispiel für eine Datenbank, die als bereitgestellt wird, finden Sie unter Ausführen einer replizierten Stateful-Anwendung . ReplicaSet -
Anwendungen pro Knoten — Manchmal möchten Sie eine Anwendung auf jedem Knoten in Ihrem Cluster ausführen. Kubernetes In Ihrem Rechenzentrum kann es beispielsweise erforderlich sein, dass auf jedem Computer eine Überwachungsanwendung oder ein bestimmter RAS-Dienst ausgeführt wird. Denn Sie können a verwendenKubernetes,
DaemonSet
um sicherzustellen, dass die ausgewählte Anwendung auf jedem Knoten in Ihrem Cluster ausgeführt wird. -
Anwendungen werden bis zum Abschluss ausgeführt — Es gibt einige Anwendungen, die Sie ausführen möchten, um eine bestimmte Aufgabe abzuschließen. Dazu könnte eine Software gehören, die monatliche Statusberichte erstellt oder alte Daten bereinigt. Ein Job-Objekt
kann verwendet werden, um eine Anwendung so einzurichten, dass sie gestartet und ausgeführt wird und dann beendet wird, wenn die Aufgabe erledigt ist. Mit einem CronJob Objekt können Sie eine Anwendung so einrichten, dass sie zu einer bestimmten Stunde, Minute, an einem bestimmten Tag des Monats, Monats oder Wochentags ausgeführt wird. Dabei wird eine durch das crontab
Linux-Format definierte Struktur verwendet.
Anwendungen vom Netzwerk aus zugänglich machen
Da Anwendungen oft als eine Reihe von Microservices bereitgestellt wurden, die an verschiedene Orte verlagert wurden, Kubernetes musste für diese Microservices eine Möglichkeit geschaffen werden, einander zu finden. Damit andere auf eine Anwendung außerhalb des Kubernetes Clusters zugreifen konnten, Kubernetes musste außerdem eine Möglichkeit gefunden werden, diese Anwendung über externe Adressen und Ports zugänglich zu machen. Diese netzwerkbezogenen Funktionen werden mit Service- bzw. Ingress-Objekten ausgeführt:
-
Dienste — Da sich ein Pod zu verschiedenen Knoten und Adressen bewegen kann, könnte es für einen anderen Pod, der mit dem ersten Pod kommunizieren musste, schwierig sein, seinen Standort zu finden. Um dieses Problem zu lösen, Kubernetes können Sie eine Anwendung als Dienst
darstellen. Mit einem Dienst können Sie einen Pod oder eine Gruppe von Pods mit einem bestimmten Namen identifizieren und dann angeben, welcher Port den Dienst dieser Anwendung vom Pod aus verfügbar macht und welche Ports eine andere Anwendung verwenden könnte, um diesen Dienst zu kontaktieren. Ein anderer Pod innerhalb eines Clusters kann einen Service einfach anhand des Namens anfordern und leitet Kubernetes diese Anfrage an den richtigen Port für eine Pod-Instanz weiter, auf der dieser Dienst ausgeführt wird. -
Ingress — Durch Ingress
können Anwendungen, die durch Kubernetes Dienste repräsentiert werden, für Clients verfügbar gemacht werden, die sich außerhalb des Clusters befinden. Zu den grundlegenden Funktionen von Ingress gehören ein Load Balancer (von Ingress verwaltet), der Ingress-Controller und Regeln für die Weiterleitung von Anfragen vom Controller an den Service. Es gibt mehrere Ingress-Controller , aus denen Sie wählen können. Kubernetes
Nächste Schritte
Wenn Sie die grundlegenden Kubernetes Konzepte und ihren Zusammenhang mit Amazon EKS verstehen, können Sie sich sowohl in der Amazon-Dokumentation als auch in der EKS Dokumentation zurechtfinden, um die Informationen zu finden, die Sie für die Verwaltung von EKS Amazon-Clustern und die Bereitstellung von Workloads in diesen Clustern benötigen. Kubernetes