Bereitstellen einer Container-Web-App in Amazon EKS

LEITFADEN „ERSTE SCHRITTE“

Modul 3: Bereitstellung erstellen

In diesem Modul erstellen Sie eine Bereitstellung und starten Ihre Anwendung.

Einführung

In diesem Modul erstellen Sie mit AWS CDK8s Service- und Bereitstellungskonfigurationen für Ihre Anwendung. In AWS CDK8s werden Kubernetes-API-Objekte als Konstrukte dargestellt. Diese Konstrukte werden zur Definition von Services und Bereitstellungen verwendet. Die von CDK8s generierte Ausgabe ist eine Kubernetes-Konfigurationsdatei. Die Ausgabe dieses Moduls integrieren Sie in den AWS-CDK-Code der vorherigen Module, um Ihre Anwendung bereitzustellen.

Lerninhalte

  • Verwendung von CDK8s-Konstrukten zur Definition von Kubernetes-API-Objekten
  • Definition von Services und Bereitstellungen mit CDK8s
  • Generieren von Kubernetes-Konfigurationen mit CDK8s

 Veranschlagte Zeit

5 Minuten

 Voraussetzungen für das Modul

  • AWS-Konto mit Administratorzugriff**
  • Empfohlener Browser: aktuelle Version von Chrome oder Firefox

[**] Innerhalb der letzten 24 Stunden erstellte Konten haben möglicherweise noch keinen Zugriff auf alle für dieses Tutorial erforderlichen Services.

Implementierung

Anwendung definieren

In diesem Schritt wird main.py geändert, um die CDK8s-Anwendung zu definieren. Nach der Initialisierung sieht sie wie folgt aus:

#!/usr/bin/env python
from constructs import Construct
from cdk8s import App, Chart

class MyChart(Chart):
    def __init__(self, scope: Construct, id: str):
        super().__init__(scope, id)

        # define resources here

app = App()
MyChart(app, "cdk8s")

app.synth()

Führen Sie die folgenden 4 Schritte aus, um Ihre Anwendung bereitzustellen:

  1. Importieren Sie die k8s-Bibliothek, um die Zeichenfolgen für die YAML-Konfigurationsdatei zu generieren.
  2. Definieren Sie das Label, das auf die Pods angewendet wird, die bei der Service-Suche verwendet werden.
  3. Definieren Sie eine Bereitstellung – dadurch wird der Container im Cluster gestartet, aber nicht konfiguriert, um Datenverkehr von der Lastenverteilung zu erhalten.
  4. Definieren Sie einen Service, um die Bereitstellung bei der Lastenverteilung verfügbar zu machen.

Labels sind Schlüssel-/Wertpaare, die Kubernetes-Objekten angefügt sind. Markieren Sie die Pods als Teil der Bereitstellung, um sie auszuführen. Der ReplicationController verwendet dieselben Labels, um die Pods bei der Erstellung des Service auszuwählen, damit sie bei der Lastenverteilung verfügbar werden. Verwenden Sie dazu das Label = {"app": "cdk8s"}.

Verwenden Sie diese Label anschließend in der Bereitstellung. Eine Bereitstellung in Kubernetes ist eine explizite Deklaration für Bereitstellungseinheiten und der erwünschte Zustand. In diesem Leitfaden wird eine Musteranwendung verwendet, die bei Amazon ECR Public Gallery gehostet wird. Die URL für das Container-Image ist public.ecr.aws/s9u7u6x1/sample app 001:no-db.

Aktualisieren Sie main.py, um die Anwendung und den Service zu erstellen, indem Sie oben in der Datei unter den anderen Importen k8s aus Importen importieren hinzufügen und den folgenden Code unter „# Ressourcen hier definieren“ einfügen. Ihre Datei sieht nun wie folgt aus:

#!/usr/bin/env python
from constructs import Construct
from cdk8s import App, Chart
from imports import k8s

class MyChart(Chart):
    def __init__(self, scope: Construct, id: str):
        super().__init__(scope, f"{id}-deployment")

        # define resources here

        # Label used for tagging pods to link in the service
        label = {"app": "cdk8s"}

        # Creates the deployment to spin up pods with your container
        k8s.KubeDeployment(self, 'deployment',
            spec=k8s.DeploymentSpec(
                replicas=2,
                selector=k8s.LabelSelector(match_labels=label),
                template=k8s.PodTemplateSpec(
                metadata=k8s.ObjectMeta(labels=label),
                spec=k8s.PodSpec(containers=[
                    k8s.Container(
                    name='cdk8s',
                    image='public.ecr.aws/s9u7u6x1/sample_app_001:no-db',
                    ports=[k8s.ContainerPort(container_port=80)])]))))

        # Creates the service to expose the pods to traffic from the loadbalancer
        super().__init__(scope, f"{id}-service")
        k8s.KubeService(self, 'service',
            spec=k8s.ServiceSpec(
            type='LoadBalancer',
            ports=[k8s.ServicePort(port=80, target_port=k8s.IntOrString.from_number(80))],
            selector=label))

app = App()
MyChart(app, "cdk8s")

app.synth()

Wie Sie sehen, erfolgt bei dieser Methode zweimal ein Aufruf an super() – die YAML-Datei mit dem angegebenen Namen wird erstellt und jede danach erstellte Konfiguration wird angehängt, indem der übergeordnete Konstruktor, von dem diese Klasse erbt, aufgerufen wird. Dadurch wird eine Datei für die Service-Konfiguration und eine zweite Datei für die Bereitstellung erstellt. 

Nun können Sie cdk8s synth ausführen, um die Konfigurationsdateien zu erstellen. Die Ausgabe wird so aussehen:

cdk8s synth

dist/cdk8s-deployment.k8s.yaml
dist/cdk8s-service.k8s.yaml

Zusammenfassung

In diesem Modul haben Sie erfahren, wie Kubernetes-Konfigurationsdateien mit CDK8s generiert werden. Ihre Anwendung ist in eine Bereitstellung und einen Service aufgeteilt, jeweils mit einer eigenen Konfigurationsdatei.

Nun können Sie das CDK-Projekt aktualisieren, um auf diese Dateien zu verweisen, und kubectl verwenden, um sie für den EKS-Cluster bereitzustellen.

Nächstes Thema: Bereitstellen mit CDK

Lassen Sie uns wissen, wie wir abgeschnitten haben.

Vielen Dank für Ihr Feedback
Wir freuen uns, dass diese Seite Ihnen geholfen hat. Würden Sie uns weitere Details mitteilen, damit wir uns weiter verbessern können?
Schließen
Vielen Dank für Ihr Feedback
Es tut uns leid, dass diese Seite Ihnen nicht weiterhelfen konnte. Würden Sie uns weitere Details mitteilen, damit wir uns weiter verbessern können?
Schließen