Stellen Sie Kubernetes-Ressourcen und -Pakete mithilfe von Amazon EKS und einem Helm-Chart-Repository in Amazon S3 bereit - AWS Prescriptive Guidance

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.

Stellen Sie Kubernetes-Ressourcen und -Pakete mithilfe von Amazon EKS und einem Helm-Chart-Repository in Amazon S3 bereit

Erstellt von Sagar Panigrahi (AWS)

Umgebung: PoC oder Pilot

Technologien: Container und Mikroservices; DevOps

AWS-Dienste: Amazon EKS

Übersicht

Dieses Muster hilft Ihnen, Kubernetes-Anwendungen unabhängig von ihrer Komplexität effizient zu verwalten. Das Muster integriert Helm in Ihre bestehenden CI/CD-Pipelines (Continuous Integration and Continuous Delivery), um Anwendungen in einem Kubernetes-Cluster bereitzustellen. Helm ist ein Kubernetes-Paketmanager, der Sie bei der Verwaltung von Kubernetes-Anwendungen unterstützt. Helm-Diagramme helfen bei der Definition, Installation und Aktualisierung komplexer Kubernetes-Anwendungen. Diagramme können versioniert und in Helm-Repositorys gespeichert werden, wodurch die mittlere Wiederherstellungszeit (MTTR) bei Ausfällen verbessert wird. 

Dieses Muster verwendet Amazon Elastic Kubernetes Service (Amazon EKS) für den Kubernetes-Cluster. Es verwendet Amazon Simple Storage Service (Amazon S3) als Helm-Diagramm-Repository, sodass die Diagramme zentral verwaltet und von Entwicklern im gesamten Unternehmen abgerufen werden können.

Voraussetzungen und Einschränkungen

Voraussetzungen

  • Ein aktives Amazon Web Services (AWS) -Konto mit einer Virtual Private Cloud (VPC)

  • Ein Amazon EKS-Cluster 

  • Worker-Knoten, die innerhalb des Amazon EKS-Clusters eingerichtet sind und bereit sind, Workloads aufzunehmen

  • Kubectl für die Konfiguration der Amazon EKS kubeconfig-Datei für den Zielcluster auf dem Client-Computer

  • Zugriff auf AWS Identity and Access Management (IAM) zur Erstellung des S3-Buckets

  • IAM-Zugriff (programmatischer oder Rollenzugriff) auf Amazon S3 vom Client-Computer

  • Quellcodeverwaltung und eine CI/CD-Pipeline

Einschränkungen

  • Derzeit wird das Aktualisieren, Löschen oder Verwalten von benutzerdefinierten Ressourcendefinitionen (CRDs) nicht unterstützt.

  • Wenn Sie eine Ressource verwenden, die auf eine CRD verweist, muss die CRD separat installiert werden (außerhalb des Diagramms).

Produktversionen

  • Helm v3.6.3

Architektur

Zieltechnologie-Stack

  • Amazon EKS

  • Amazon VPC

  • Amazon S3

  • Verwaltung des Quellcodes

  • Helm

  • Kubectl

Zielarchitektur

Client Helm und Kubectl stellen ein Helm-Chart-Repo in Amazon S3 für Amazon EKS-Cluster bereit.

Automatisierung und Skalierung

  • AWS CloudFormation kann verwendet werden, um die Erstellung der Infrastruktur zu automatisieren. Weitere Informationen finden Sie unter Erstellen von Amazon EKS-Ressourcen mit AWS CloudFormation in der Amazon EKS-Dokumentation.

  • Helm soll in Ihr vorhandenes CI/CD-Automatisierungstool integriert werden, um die Paketierung und Versionierung von Helm-Diagrammen zu automatisieren (außerhalb des Geltungsbereichs dieses Musters).

  • GitVersion oder Jenkins-Build-Nummern können verwendet werden, um die Versionierung von Diagrammen zu automatisieren.

Tools

Tools

  • Amazon EKS — Amazon Elastic Kubernetes Service (Amazon EKS) ist ein verwalteter Service für die Ausführung von Kubernetes auf AWS, ohne dass Sie Ihre eigene Kubernetes-Steuerebene einrichten oder verwalten müssen. Kubernetes ist ein Open-Source-System zur Automatisierung der Bereitstellung, Skalierung und Verwaltung von Anwendungen in Containern.

  • Helm — Helm ist ein Paketmanager für Kubernetes, der Sie bei der Installation und Verwaltung von Anwendungen auf Ihrem Kubernetes-Cluster unterstützt.

  • Amazon S3 — Amazon Simple Storage Service (Amazon S3) ist Speicher für das Internet. Mit Amazon S3 können Sie jederzeit beliebige Mengen von Daten von überall aus im Internet speichern und aufrufen.

  • Kubectl — Kubectl ist ein Befehlszeilenprogramm zum Ausführen von Befehlen für Kubernetes-Cluster.

Code

Der Beispielcode ist angehängt.

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Installieren Sie den Helm-Client.

Verwenden Sie den folgenden Befehl, um den Helm-Client herunterzuladen und auf Ihrem lokalen System zu installieren. 

sudo curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
DevOps Ingenieur

Validieren Sie die Helm-Installation.

Um zu überprüfen, ob Helm mit dem Kubernetes-API-Server innerhalb des Amazon EKS-Clusters kommunizieren kann, führen Sie folgenden Befehl aus. helm version

DevOps Ingenieur
AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie ein Helm-Diagramm für NGINX.

Führen Sie den Befehl aus, um ein Helmdiagramm mit dem Namen my-nginx auf dem Client-Computer zu erstellen. helm create my-nginx

DevOps Ingenieur

Überprüfen Sie die Struktur des Diagramms.

Um die Struktur des Diagramms zu überprüfen, führen Sie den Befehl tree austree my-nginx/.

DevOps Ingenieur

Deaktivieren Sie die Erstellung eines Dienstkontos im Diagramm.

Stellen Sie unter dem serviceAccount Abschnitt den create Schlüssel auf einfalse. values.yaml Dies ist deaktiviert, da für dieses Muster kein Dienstkonto erstellt werden muss.

DevOps Ingenieur

Überprüfe (linte) das geänderte Diagramm auf syntaktische Fehler.

Führen Sie den folgenden Befehl aus, um das Diagramm vor der Installation im Zielcluster auf syntaktische Fehler zu überprüfen. helm lint my-nginx/

DevOps Ingenieur

Installieren Sie das Diagramm, um Kubernetes-Ressourcen bereitzustellen.

Verwenden Sie den folgenden Befehl, um die Helm-Chart-Installation auszuführen. 

helm install --name my-nginx-release --debug my-nginx/ --namespace helm-space

Das optionale debug Flag gibt alle Debug-Meldungen während der Installation aus. Das namespace Flag gibt den Namespace an, in dem der Ressourcenteil dieses Diagramms erstellt wird.

DevOps Ingenieur

Überprüfen Sie die Ressourcen im Amazon EKS-Cluster.

Verwenden Sie den folgenden Befehl, um die Ressourcen zu überprüfen, die als Teil des Helm-Diagramms im helm-space Namespace erstellt wurden. 

kubectl get all -n helm-space
DevOps Ingenieur
AufgabeBeschreibungErforderliche Fähigkeiten

Ändern und aktualisieren Sie die Version.

Um das Diagramm zu ändernvalues.yaml, ändern Sie den replicaCount Wert in2. Aktualisieren Sie dann die bereits installierte Version, indem Sie den folgenden Befehl ausführen.

helm upgrade my-nginx-release my-nginx/ --namespace helm-space
DevOps Ingenieur

Sehen Sie sich die Geschichte der Helm-Version an.

Führen Sie den folgenden Befehl aus, um alle Versionen für eine bestimmte Version aufzulisten, die mit Helm installiert wurden. 

helm history my-nginx-release
DevOps Ingenieur

Überprüfen Sie die Details für eine bestimmte Version.

Bevor Sie zu einer funktionierenden Version wechseln oder ein Rollback durchführen und für eine zusätzliche Überprüfungsebene vor der Installation einer Revision, sollten Sie mit dem folgenden Befehl überprüfen, welche Werte an die einzelnen Versionen übergeben wurden.

helm get --revision=2 my-nginx-release
DevOps Ingenieur

Gehen Sie zurück zu einer früheren Version.

Verwenden Sie den folgenden Befehl, um zu einer früheren Version zurückzukehren. 

helm rollback my-nginx-release 1

In diesem Beispiel wird auf Version 1 zurückgesetzt.

DevOps Ingenieur
AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie einen S3-Bucket für Helm-Charts.

Erstellen Sie einen eindeutigen S3-Bucket. Erstellen Sie im Bucket einen Ordner mit dem Namencharts. Das Beispiel in diesem Muster verwendet s3://my-helm-charts/charts als Zieldiagramm-Repository.

Cloud-Administrator

Installieren Sie das Helm-Plugin für Amazon S3.

Verwenden Sie den folgenden Befehl, um das Helm-S3-Plugin auf Ihrem Client-Computer zu installieren. 

helm plugin install https://github.com/hypnoglow/helm-s3.git --version 0.10.0

Hinweis: Helm V3-Unterstützung ist mit der Plugin-Version 0.9.0 und höher verfügbar.

DevOps Ingenieur

Initialisieren Sie das Amazon S3 Helm-Repository.

Verwenden Sie den folgenden Befehl, um den Zielordner als Helm-Repository zu initialisieren. 

helm S3 init s3://my-helm-charts/charts

Der Befehl erstellt eine index.yaml Datei im Ziel, um alle Diagramminformationen zu verfolgen, die an diesem Speicherort gespeichert sind.

DevOps Ingenieur

Fügen Sie das Amazon S3 S3-Repository zu Helm hinzu.

Verwenden Sie den folgenden Befehl, um das Repository auf dem Client-Computer hinzuzufügen.

helm repo add my-helm-charts s3://my-helm-charts/charts

Dieser Befehl fügt dem Ziel-Repository auf dem Helm-Client-Computer einen Alias hinzu.

DevOps Ingenieur

Überprüfen Sie die Repository-Liste.

Führen helm repo list Sie den Befehl aus, um die Liste der Repositorys auf dem Helm-Client-Computer anzuzeigen.

DevOps Ingenieur
AufgabeBeschreibungErforderliche Fähigkeiten

Verpacken Sie die Karte.

Führen Sie den Befehl aus, um das von Ihnen erstellte my-nginx Diagramm zu verpackenhelm package ./my-nginx/. Der Befehl packt den gesamten Inhalt des my-nginx Diagrammordners in eine Archivdatei, die anhand der Versionsnummer benannt wird, die in der Chart.yaml Datei angegeben ist.

DevOps Ingenieur

Speichern Sie das Paket im Amazon S3 Helm-Repository.

Um das Paket in das Helm-Repository in Amazon S3 hochzuladen, führen Sie den folgenden Befehl aus und verwenden Sie dabei den richtigen Namen der .tgz Datei.

helm s3 push ./my-nginx-0.1.0.tgz my-helm-charts
DevOps Ingenieur

Suchen Sie nach der Helm-Karte.

Führen Sie den folgenden Befehl aus, um zu überprüfen, ob das Diagramm sowohl lokal als auch im Helm-Repository in Amazon S3 angezeigt wird.

helm search repo my-nginx
DevOps Ingenieur
AufgabeBeschreibungErforderliche Fähigkeiten

Ändern und verpacken Sie das Diagramm.

Stellen Sie in values.yaml den replicaCount Wert auf ein1. Verpacken Sie dann das Diagrammhelm package ./my-nginx/, indem Sie es ausführen und diesmal die Version in Chart.yaml ändern0.1.1

Die Versionierung wird idealerweise durch Automatisierung mithilfe von Tools wie GitVersion Jenkins-Build-Nummern in einer CI/CD-Pipeline aktualisiert. Die Automatisierung der Versionsnummer ist für dieses Muster nicht vorgesehen.

DevOps Ingenieur

Pushen Sie die neue Version in das Helm-Repository in Amazon S3.

Führen Sie den folgenden Befehl aus, um das neue Paket mit Version 0.1.1 in das my-helm-charts Helm-Repository in Amazon S3 zu übertragen.

helm s3 push ./my-nginx-0.1.1.tgz my-helm-charts
DevOps Ingenieur
AufgabeBeschreibungErforderliche Fähigkeiten

Suchen Sie nach allen Versionen des my-nginx-Diagramms.

Um alle verfügbaren Versionen eines Diagramms anzuzeigen, führen Sie den folgenden Befehl mit der Markierung aus. --versions

helm search repo my-nginx --versions

Ohne die Markierung zeigt Helm standardmäßig die zuletzt hochgeladene Version eines Diagramms an.

DevOps Ingenieur

Installieren Sie ein Diagramm aus dem Amazon S3 Helm-Repository.

Die Suchergebnisse der vorherigen Aufgabe zeigen die verschiedenen Versionen des my-nginx Diagramms. Verwenden Sie den folgenden Befehl, um die neue Version (0.1.1) aus dem Amazon S3 Helm-Repository zu installieren.

helm upgrade my-nginx-release my-helm-charts/my-nginx --version 0.1.1 --namespace helm-space
DevOps Ingenieur

Zugehörige Ressourcen

Anlagen

Um auf zusätzliche Inhalte zuzugreifen, die mit diesem Dokument verknüpft sind, entpacken Sie die folgende Datei: attachment.zip