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.
Bereitstellen und Debuggen von Amazon EKS-Clustern
Erstellt von Svenja Raether (AWS) und Mathew George (AWS)
Umgebung: PoC oder Pilot | Technologien: Container und Mikroservices; Infrastruktur; Modernisierung; Serverlos; CloudNative | Arbeitslast: Alle anderen Workloads |
AWS-Dienste: Amazon EKS; AWS Fargate |
Übersicht
Container werden zu einem unverzichtbaren Bestandteil der Entwicklung cloudnativer Anwendungen. Kubernetes bietet eine effiziente Möglichkeit, Container zu verwalten und zu orchestrieren. Amazon Elastic Kubernetes Service (Amazon EKS)
Für Entwickler und Administratoren ist es wichtig, die Debugging-Optionen für die Ausführung containerisierter Workloads zu kennen. Dieses Muster führt Sie durch die Bereitstellung und das Debuggen von Containern auf Amazon EKS mit AWS Fargate
Voraussetzungen und Einschränkungen
Voraussetzungen
Ein aktives AWS-Konto
Die Rolle AWS Identity and Access Management (IAM) ist mit ausreichenden Berechtigungen konfiguriert, um Amazon EKS, IAM-Rollen und serviceverknüpfte Rollen zu erstellen und mit diesen zu interagieren
Auf dem lokalen Computer installierte AWS-Befehlszeilenschnittstelle (AWS CLI)
Einschränkungen
Dieses Muster bietet Entwicklern nützliche Debugging-Methoden für Entwicklungsumgebungen. Es enthält keine bewährten Methoden für Produktionsumgebungen.
Wenn Sie Windows ausführen, verwenden Sie Ihre betriebssystemspezifischen Befehle zum Einstellen der Umgebungsvariablen.
Verwendete Produktversionen
kubectl-Version innerhalb eines geringfügigen Versionsunterschieds der von Ihnen verwendeten Amazon EKS-Steuerebene
Architektur
Technologie-Stack
Application Load Balancer
Amazon EKS
AWS Fargate
Zielarchitektur
Alle im Diagramm gezeigten Ressourcen werden mithilfe von kubectl
Befehlen eksctl
und Befehlen bereitgestellt, die von einem lokalen Computer aus ausgegeben werden. Private Cluster müssen von einer Instance aus ausgeführt werden, die sich innerhalb der privaten VPC befindet.
Die Zielarchitektur besteht aus einem EKS-Cluster, der den Fargate-Starttyp verwendet. Dadurch wird bedarfsgerecht dimensionierte Rechenkapazität bereitgestellt, ohne dass Servertypen angegeben werden müssen. Der EKS-Cluster verfügt über eine Steuerungsebene, die zur Verwaltung der Clusterknoten und Workloads verwendet wird. Die Pods werden in privaten VPC-Subnetzen bereitgestellt, die sich über mehrere Availability Zones erstrecken. Auf die Amazon ECR Public Gallery wird verwiesen, um ein NGINX-Webserver-Image abzurufen und für die Pods des Clusters bereitzustellen.
Das Diagramm zeigt, wie Sie mithilfe von kubectl
Befehlen auf die Amazon EKS-Steuerebene zugreifen und wie Sie mithilfe des Application Load Balancer auf die Anwendung zugreifen.
.
![Vierstufiger Prozess mit Amazon EKS-Steuerebene und Fargate-Profil mit Knoten in separaten VPCs.](images/pattern-img/36d63548-9657-4260-8c09-d7eb45fcaafb/images/13025262-6801-4c91-88c5-f863aa5508f7.png)
Ein lokaler Computer außerhalb der AWS-Cloud sendet Befehle an die Kubernetes-Steuerebene innerhalb einer von Amazon EKS verwalteten VPC.
Amazon EKS plant Pods auf der Grundlage der Selektoren im Fargate-Profil.
Der lokale Computer öffnet die Application Load Balancer Balancer-URL im Browser.
Der Application Load Balancer verteilt den Datenverkehr zwischen den Kubernetes-Pods in Fargate-Clusterknoten, die in privaten Subnetzen bereitgestellt werden, die sich über mehrere Availability Zones erstrecken.
Tools
AWS-Services
Amazon Elastic Container Registry (Amazon ECR) ist ein verwalteter Container-Image-Registry-Service, der sicher, skalierbar und zuverlässig ist.
Amazon Elastic Kubernetes Service (Amazon EKS) hilft Ihnen, Kubernetes auf AWS auszuführen, ohne Ihre eigene Kubernetes-Steuerebene oder Knoten installieren oder verwalten zu müssen. Dieses Muster verwendet auch das Befehlszeilentool eksctl, um mit Kubernetes-Clustern auf Amazon EKS zu arbeiten.
Mit AWS Fargate können Sie Container ausführen, ohne Server oder Amazon Elastic Compute Cloud (Amazon EC2) -Instances verwalten zu müssen. Es wird in Verbindung mit Amazon Elastic Container Service (Amazon ECS) verwendet.
Elastic Load Balancing (ELB) verteilt eingehenden Anwendungs- oder Netzwerkverkehr auf mehrere Ziele. Sie können beispielsweise den Datenverkehr auf Amazon Elastic Compute Cloud (Amazon EC2) -Instances, Container und IP-Adressen in einer oder mehreren Availability Zones verteilen. Dieses Muster verwendet die AWS Load Balancer Controller-Kontrollkomponente, um den Application Load Balancer zu erstellen, wenn ein Kubernetes-Ingress
bereitgestellt wird. Der Application Load Balancer verteilt den eingehenden Datenverkehr auf mehrere Ziele.
Andere Tools
Helm
ist ein Open-Source-Paketmanager für Kubernetes. In diesem Muster wird Helm verwendet, um den AWS Load Balancer Controller zu installieren. Kubernetes
ist ein Open-Source-System zur Automatisierung der Bereitstellung, Skalierung und Verwaltung von containerisierten Anwendungen. NGINX
ist ein leistungsstarker Web- und Reverse-Proxyserver.
Epen
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Erstellen Sie die Dateien. | Erstellen Sie mithilfe des Codes im Abschnitt Zusätzliche Informationen die folgenden Dateien:
| App-Entwickler, AWS-Administrator, AWS DevOps |
Legen Sie Umgebungsvariablen fest. | Hinweis: Wenn ein Befehl aufgrund früherer unerledigter Aufgaben fehlschlägt, warten Sie einige Sekunden und führen Sie den Befehl dann erneut aus. Dieses Muster verwendet die AWS-Region und den Clusternamen, die in der Datei definiert sind
| App-Entwickler, AWS DevOps, AWS-Systemadministrator |
Erstellen Sie einen EKS-Cluster. | Führen Sie den folgenden Befehl aus, um einen EKS-Cluster zu erstellen, der die Spezifikationen aus der
Die Datei enthält die Das Fargate-Standardprofil ist mit zwei Selektoren ( | App-Entwickler, AWS DevOps, AWS-Administrator |
Überprüfen Sie den erstellten Cluster. | Führen Sie den folgenden Befehl aus, um den erstellten Cluster zu überprüfen.
Die Ausgabe sollte wie folgt aussehen.
Überprüfen Sie das erstellte Fargate-Profil mit dem
Dieser Befehl zeigt Informationen zu den Ressourcen an. Sie können die Informationen verwenden, um den erstellten Cluster zu überprüfen. Die Ausgabe sollte wie folgt aussehen.
| App-Entwickler, AWS DevOps, AWS-Systemadministrator |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Stellen Sie den NGINX-Webserver bereit. | Führen Sie den folgenden Befehl aus, um die NGINX-Webserver-Bereitstellung auf dem Cluster anzuwenden.
Die Ausgabe sollte wie folgt aussehen.
Die Bereitstellung umfasst drei Repliken des NGINX-Images aus der Amazon ECR Public Gallery. Das Image wird im Standard-Namespace bereitgestellt und auf Port 80 der laufenden Pods verfügbar gemacht. | App-Entwickler, AWS DevOps, AWS-Systemadministrator |
Überprüfen Sie die Bereitstellung und die Pods. | (Optional) Überprüfen Sie die Bereitstellung. Sie können den Status Ihrer Bereitstellung mit dem folgenden Befehl überprüfen.
Die Ausgabe sollte wie folgt aussehen.
Ein Pod ist ein bereitstellbares Objekt in Kubernetes, das einen oder mehrere Container enthält. Führen Sie den folgenden Befehl aus, um alle Pods aufzulisten.
Die Ausgabe sollte wie folgt aussehen.
| App-Entwickler, AWS DevOps, AWS-Administrator |
Skalieren Sie die Bereitstellung. | Verwenden Sie den folgenden Befehl, um die Bereitstellung von den drei angegebenen Replikaten
Die Ausgabe sollte wie folgt aussehen.
| App-Entwickler, AWS DevOps, AWS-Systemadministrator |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Legen Sie Umgebungsvariablen fest. | Beschreiben Sie den CloudFormation Stack des Clusters, um Informationen über seine VPC abzurufen.
Die Ausgabe sollte wie folgt aussehen.
Kopieren Sie die VPC-ID und exportieren Sie sie als Umgebungsvariable.
| App-Entwickler, AWS DevOps, AWS-Systemadministrator |
Konfigurieren Sie IAM für das Cluster-Servicekonto. | Verwenden Sie das
| App-Entwickler, AWS DevOps, AWS-Systemadministrator |
Laden Sie die IAM-Richtlinie herunter und erstellen Sie sie. | Laden Sie die IAM-Richtlinie für den AWS Load Balancer Controller herunter, mit der dieser in Ihrem Namen AWS-APIs aufrufen kann.
Erstellen Sie die Richtlinie in Ihrem AWS-Konto mithilfe der AWS-CLI.
Die Ausgabe sollte folgendermaßen aussehen.
Speichern Sie den Amazon-Ressourcennamen (ARN) der Richtlinie unter
| App-Entwickler, AWS DevOps, AWS-Systemadministrator |
Erstellen Sie ein IAM-Servicekonto. | Erstellen Sie ein
Überprüfen Sie die Erstellung.
Die Ausgabe sollte wie folgt aussehen.
| App-Entwickler, AWS DevOps, AWS-Systemadministrator |
Installieren Sie den AWS Load Balancer Controller. | Aktualisieren Sie das Helm-Repository.
Fügen Sie das Amazon EKS-Chart-Repository zum Helm-Repo hinzu.
Wenden Sie die benutzerdefinierten Kubernetes-Ressourcendefinitionen (CRDs) an, die vom AWS Load Balancer Controller eks-chart
Die Ausgabe sollte wie folgt aussehen.
Installieren Sie das Helm-Diagramm mithilfe der Umgebungsvariablen, die Sie zuvor festgelegt haben.
Die Ausgabe sollte wie folgt aussehen.
| App-Entwickler, AWS DevOps, AWS-Systemadministrator |
Erstellen Sie einen NGINX-Service. | Erstellen Sie einen Dienst, um die NGINX-Pods mithilfe der Datei verfügbar zu machen.
Die Ausgabe sollte wie folgt aussehen.
| App-Entwickler, AWS DevOps, AWS-Systemadministrator |
Erstellen Sie die Kubernetes-Ingress-Ressource. | Erstellen Sie einen Dienst, um den Kubernetes-NGINX-Ingress mithilfe der Datei verfügbar zu machen.
Die Ausgabe sollte wie folgt aussehen.
| App-Entwickler, AWS DevOps, AWS-Systemadministrator |
Rufen Sie die Load Balancer-URL ab. | Verwenden Sie den folgenden Befehl, um die Eingangsinformationen abzurufen.
Die Ausgabe sollte wie folgt aussehen.
Kopieren Sie das | App-Entwickler, AWS DevOps, AWS-Systemadministrator |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Wählen Sie einen Pod aus. | Listet alle Pods auf und kopiert den Namen des gewünschten Pods.
Die Ausgabe sollte wie folgt aussehen.
Dieser Befehl listet die vorhandenen Pods und zusätzliche Informationen auf. Wenn Sie an einem bestimmten Pod interessiert sind, geben Sie den Namen des Pods, an dem Sie interessiert sind, für die
| App-Entwickler, AWS DevOps, AWS-Systemadministrator |
Greifen Sie auf die Protokolle zu. | Rufen Sie die Protokolle von dem Pod ab, den Sie debuggen möchten.
| App-Entwickler, AWS-Systemadministrator, AWS DevOps |
Leiten Sie den NGINX-Port weiter. | Verwenden Sie Port-Forwarding, um den Port des Pods für den Zugriff auf den NGINX-Webserver einem Port auf Ihrem lokalen Computer zuzuordnen.
Öffnen Sie in Ihrem Browser die folgende URL.
Der | App-Entwickler, AWS DevOps, AWS-Systemadministrator |
Befehle innerhalb des Pods ausführen. | Verwenden Sie den folgenden Befehl, um sich die aktuelle
Sie können den | App-Entwickler, AWS DevOps, AWS-Systemadministrator |
Dateien in einen Pod kopieren. | Entfernen Sie die
Laden Sie die benutzerdefinierte lokale Datei
Sie können den | App-Entwickler, AWS DevOps, AWS-Systemadministrator |
Verwenden Sie Port-Forwarding, um die Änderung anzuzeigen. | Verwenden Sie die Portweiterleitung, um die Änderungen zu überprüfen, die Sie an diesem Pod vorgenommen haben.
Öffnen Sie die folgende URL in Ihrem Browser.
Die an der | App-Entwickler, AWS DevOps, AWS-Systemadministrator |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Löschen Sie den Load Balancer. | Löschen Sie den Ingress.
Die Ausgabe sollte wie folgt aussehen.
Löschen Sie den Service:
Die Ausgabe sollte wie folgt aussehen.
Löschen Sie den Load Balancer-Controller.
Die Ausgabe sollte wie folgt aussehen.
Löschen Sie das Dienstkonto.
| App-Entwickler, AWS DevOps, AWS-Systemadministrator |
Löschen Sie die Bereitstellung. | Verwenden Sie den folgenden Befehl, um die Bereitstellungsressourcen zu löschen.
Die Ausgabe sollte wie folgt aussehen.
| App-Entwickler, AWS DevOps, AWS-Systemadministrator |
Löschen Sie den Cluster. | Löschen Sie den EKS-Cluster mithilfe des folgenden Befehls, wobei der Clustername
Mit diesem Befehl wird der gesamte Cluster einschließlich aller zugehörigen Ressourcen gelöscht. | App-Entwickler, AWS DevOps, AWS-Systemadministrator |
Löschen Sie die IAM-Richtlinie. | Löschen Sie die zuvor erstellte Richtlinie mithilfe der AWS-CLI.
| App-Entwickler, AWS-Administrator, AWS DevOps |
Fehlerbehebung
Problem | Lösung |
---|---|
Sie erhalten bei der Clustererstellung eine Fehlermeldung
| Erstellen Sie den Cluster erneut und verwenden Sie dabei die in der Fehlermeldung empfohlenen Availability Zones. Geben Sie in der letzten Zeile Ihrer |
Zugehörige Ressourcen
Running Pods debuggen
(Kubernetes-Dokumentation)
Zusätzliche Informationen
clusterconfig-fargate.yaml
apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-fargate region: us-east-1 fargateProfiles: - name: fp-default selectors: - namespace: default - namespace: kube-system
nginx-bereitstellung.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: "nginx-deployment" namespace: "default" spec: replicas: 3 selector: matchLabels: app: "nginx" template: metadata: labels: app: "nginx" spec: containers: - name: nginx image: public.ecr.aws/nginx/nginx:latest ports: - containerPort: 80
nginx-service.yaml
apiVersion: v1 kind: Service metadata: annotations: alb.ingress.kubernetes.io/target-type: ip name: "nginx-service" namespace: "default" spec: ports: - port: 80 targetPort: 80 protocol: TCP type: NodePort selector: app: "nginx"
nginx-ingress.yaml
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: namespace: "default" name: "nginx-ingress" annotations: kubernetes.io/ingress.class: alb alb.ingress.kubernetes.io/scheme: internet-facing spec: rules: - http: paths: - path: / pathType: Prefix backend: service: name: "nginx-service" port: number: 80
index.html
<!DOCTYPE html> <html> <body> <h1>Welcome to your customized nginx!</h1> <p>You modified the file on this running pod</p> </body> </html>