Kubernetes-Konzepte - Amazon EKS

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 KubernetesOpen-Source-Projekt basiert. Es gibt zwar Dinge, die Sie darüber wissen müssen, wie der EKS Amazon-Service in die AWS Cloud integriert wird (insbesondere, wenn Sie zum ersten Mal einen EKS Amazon-Cluster erstellen), aber sobald er betriebsbereit ist, verwenden Sie Ihren EKS Amazon-Cluster auf die gleiche Weise wie jeden anderen Kubernetes Cluster. Um mit der Verwaltung von Kubernetes Clustern und der Bereitstellung von Workloads zu beginnen, benötigen Sie also zumindest ein grundlegendes Verständnis der Kubernetes Konzepte.

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 KubernetesCluster 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 Cluster in Aktion.

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, minikube oder kubeadm verwenden, die unter Tools installieren aufgeführt sind. Kubernetes Um den gesamten Lebenszyklus der Clustererstellung und -verwaltung zu vereinfachen und zu automatisieren, ist es viel einfacher, Tools zu verwenden, die von einem etablierten Kubernetes Anbieter wie Amazon EKS oder Amazon EKS Anywhere unterstützt werden.

In AWS Cloud können Sie EKSAmazon-Cluster mithilfe von CLI Tools wie eksctl oder deklarativeren Tools wie Terraform erstellen (siehe Amazon EKS Blueprints for Terraform). Sie können einen Cluster auch von der Management Console aus erstellen. AWS Unter EKSAmazon-Funktionen finden Sie eine Liste dessen, was Sie bei Amazon erhaltenEKS. KubernetesZu den Aufgaben, die Amazon für Sie EKS übernimmt, gehören:

Um Ihre Cluster auf Ihren eigenen Computern und Netzwerken vor Ort auszuführen, bietet Amazon Amazon EKS Anywhere an. Anstatt dass die AWS Cloud der Anbieter ist, haben Sie die Wahl, Amazon EKS Anywhere auf VMWarevSphereBare-Metal- (Tinkerbell-Anbieter) CloudStack, Snow - oder Nutanix-Plattformen mit Ihren eigenen Geräten auszuführen.

Amazon EKS Anywhere basiert auf derselben Amazon EKS Distro-Software, die auch von Amazon EKS verwendet wird. Amazon EKS Anywhere stützt sich jedoch auf verschiedene Implementierungen der KubernetesCluster API (CAPI) -Schnittstelle, um den gesamten Lebenszyklus der Maschinen in einem Amazon EKS Anywhere-Cluster (z. B. CAPVfür vSphere und CAPCfür CloudStack) zu verwalten. Da der gesamte Cluster auf Ihren Geräten läuft, übernehmen Sie zusätzlich die Verantwortung für die Verwaltung der Steuerungsebene und die Sicherung ihrer Daten (siehe etcd weiter unten in diesem Dokument).

Cluster-Komponenten

KubernetesDie Clusterkomponenten sind in zwei Hauptbereiche unterteilt: Steuerungsebene und Worker-Knoten. Komponenten der Steuerungsebene verwalten den Cluster und ermöglichen den Zugriff daraufAPIs. Worker-Knoten (manchmal auch einfach als Knoten bezeichnet) stellen die Orte dar, an denen die eigentlichen Workloads ausgeführt werden. Knotenkomponenten bestehen aus Diensten, die auf jedem Knoten ausgeführt werden, um mit der Steuerungsebene zu kommunizieren und Container auszuführen. Die Gruppe von Worker-Knoten für Ihren Cluster wird als Datenebene bezeichnet.

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 den kubelet Dienst.

  • Daten über den Cluster speichern (etcdSchlüsselwertspeicher) — Der etcd Dienst hat die entscheidende Rolle, den aktuellen Status des Clusters zu verfolgen. Wenn auf den etcd 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 des etcd Dienstes mit Lastenausgleich gleichzeitig ausgeführt und es werden regelmäßig Backups des etcd 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 Datenmodell an, 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 einstatefulset-controller,, endpoint-controller cronjob-controllernode-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) zu verfügen, die ausschließlich für die Ausführung Kubernetes von Workloads vorgesehen sind.

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 Dienste.

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, Amazon VPC CNI Plugin for Kubernetes und Grafana Monitoring Kubernetes. Zu den Add-Ons für Amazon EKS gehören Amazon Elastic Block Store CSI Driver (zum Hinzufügen von Blockspeichergeräten), Amazon Elastic File System CSI Driver (zum Hinzufügen von Dateisystemspeicher) und mehrere Speicher-Add-Ons von Drittanbietern (wie Amazon FSx für NetApp ONTAP CSI Treiber).

Eine vollständigere Liste der verfügbaren EKS Amazon-Add-Ons finden Sie unterEKSAmazon-Add-Ons.

Workloads

Kubernetesdefiniert einen Workload als „eine Anwendung, auf der“ ausgeführt wirdKubernetes. Diese Anwendung kann aus einer Reihe von Microservices bestehen, die als Container in Pods ausgeführt werden, oder sie kann als Batch-Job oder als eine andere Art von Anwendung ausgeführt werden. Die Aufgabe von Kubernetes besteht darin, sicherzustellen, dass die Anfragen, die Sie für die Einrichtung oder Bereitstellung dieser Objekte stellen, ausgeführt werden. Als jemand, der Anwendungen bereitstellt, sollten Sie wissen, wie Container erstellt werden, wie Pods definiert werden und welche Methoden Sie für deren Bereitstellung verwenden können.

Container

Das grundlegendste Element eines Anwendungs-Workloads, in dem Sie bereitstellen und verwalten, Kubernetes ist ein Pod. Ein Pod stellt eine Möglichkeit dar, die Komponenten einer Anwendung zu speichern und Spezifikationen zu definieren, die die Eigenschaften des Pods beschreiben. Vergleichen Sie das mit etwas wie einem RPM oder Deb-Paket, das Software für ein Linux-System zusammenpackt, aber selbst nicht als Einheit läuft.

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 verpackt sein, der Protokollierung, Überwachung oder andere Dienste bereitstellen kann, die eng mit dem Webserver-Container verknüpft sind. In diesem Fall stellt die Tatsache, dass sie sich im selben Pod befinden, sicher, dass für jede laufende Instanz des Pods beide Container immer auf demselben Knoten ausgeführt werden. Ebenso teilen sich alle Container in einem Pod dieselbe Umgebung, wobei die Container in einem Pod so ausgeführt werden, als ob sie sich auf demselben isolierten Host befinden würden. Dies hat zur Folge, dass sich die Container eine einzige IP-Adresse teilen, die den Zugriff auf den Pod ermöglicht, und dass die Container miteinander kommunizieren können, als würden sie auf ihrem eigenen lokalen Host laufen.

Die Pod-Spezifikationen (PodSpec) definieren den gewünschten Status des Pods. Sie können einen einzelnen Pod oder mehrere Pods bereitstellen, indem Sie Workload-Ressourcen zur Verwaltung von Pod-Vorlagen verwenden. Zu den Workload-Ressourcen gehören Bereitstellungen (zur Verwaltung mehrerer Pod-Repliken), StatefulSets(zur Bereitstellung von Pods, die einzigartig sein müssen, z. B. Datenbank-Pods) und DaemonSets(bei denen ein Pod kontinuierlich auf jedem Knoten ausgeführt werden muss). Dazu später mehr.

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 jedoch Container-Laufzeiten, Images und Distributionsmethoden für die Branche definiert. Hinzu kommt die Tatsache, dass Container auf der Grundlage vieler vorhandener Linux-Funktionen erstellt wurden. Andere bezeichnen Container oft als OCI Container, Linux-Container oder einfach Container.

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 und yarn installieren oder yum Pakete dnf 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 (ADDoder COPY Dateien aus dem lokalen System) zu erstellen, Befehle zu identifizieren, die ausgeführt werden sollen, wenn der Container ausgeführt wird (CMDoderENTRYPOINT), 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 Lokal USER 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, podmanund nerdctl. Weitere Informationen zum Erstellen von Containern finden Sie unter Bessere Container-Images erstellen oder Build with Docker.

Speichern von Containern

Sobald Sie Ihr Container-Image erstellt haben, können Sie es in einer Container-Distributionsregistrierung auf Ihrer Workstation oder in einer öffentlichen Container-Registry speichern. Wenn Sie eine private Container-Registry auf Ihrer Workstation betreiben, können Sie Container-Images lokal speichern, sodass sie Ihnen jederzeit zur Verfügung stehen.

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, das Red Hat Quay Registry und das DockerHub 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 nach beliebten Container-Bildern suchen, und speziell nach Docker Hub-Bildern können Sie in der Amazon ECR Docker Gallery suchen.

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 PodSpecSeite). Dazu zählen:

  • 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 NFSSCSI, 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 StorageClassesfü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 GitOpsist dies jedoch eine beliebte Methode, um die Speicherung und Aktualisierung von Workload- und Kubernetes Infrastrukturressourcen zu automatisieren.

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, DaemonSetum 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 CronJobObjekt 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 crontabLinux-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 Um mit der Nutzung von Amazon zu beginnenEKS, wählen Sie aus den folgenden Optionen: