Bereitstellen einer Container-Web-App in Amazon EKS

LEITFADEN „ERSTE SCHRITTE“

Modul 4: Bereitstellung mit AWS CDK

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

Einführung

In diesem Modul stellen wir eine Anwendung in Ihrem neu erstellten EKS-Cluster bereit und verwenden dabei die von CDK8s generierten Konfigurationsdateien aus dem vorherigen Modul. Diese Konfigurationsdateien werden von CDK für die Bereitstellung der Anwendung verwendet.

Lerninhalte

  • Integrieren von AWS CDK8S in AWS CDK
  • Bereitstellung mit AWS CDK
  • Betrieb des Clusters mit Kubectl

 Veranschlagte Zeit

10 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

Die Kubernetes-Konfigurationsdateien sind im YAML-Format gespeichert, daher müssen Sie die YAML-Bibliothek importieren, um sie analysieren zu können. Fügen Sie die importierte YAML-Datei unter den anderen Importen am Anfang von eks/cluster/cluster/cluster_stack hinzu. 

Dann fügen Sie zwei Codeblöcke hinzu, um die zwei YAML-Dateien in Variablen einzulesen und an den Cluster zu übergeben:

# Read the deployment config
with open("../cdk8s/dist/cdk8s-deployment.k8s.yaml", 'r') as stream:
      deployment_yaml = yaml.load(stream, Loader=yaml.FullLoader)

# Read the service config
with open("../cdk8s/dist/cdk8s-service.k8s.yaml", 'r') as stream:
      service_yaml = yaml.load(stream, Loader=yaml.FullLoader)

Diese YAML-Datei wird dann mit der Methode add_manifest an den EKS-Cluster übergeben, und zwar einmal für jede Datei:

eks_cluster.add_manifest(f"{construct_id}-app-deployment", yaml_app_deployment)

eks_cluster.add_manifest(f"{construct_id}-app-service", yaml_app_service)

Ihre Datei cluster_stack.py sollte nun wie folgt aussehen:

from aws_cdk import core as cdk
from aws_cdk import aws_iam as iam
from aws_cdk import aws_eks as eks
from aws_cdk import aws_ec2 as ec2
import yaml

class ClusterStack(cdk.Stack):

    def __init__(self, scope: cdk.Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)

        # Look up the default VPC
        vpc = ec2.Vpc.from_lookup(self, id="VPC", is_default=True)

        # Create master role for EKS Cluster
        iam_role = iam.Role(self, id=f"{construct_id}-iam",
                            role_name=f"{construct_id}-iam", assumed_by=iam.AccountRootPrincipal())

        # Creating Cluster with EKS
        eks_cluster = eks.Cluster(
            self, id=f"{construct_id}-cluster", 
            cluster_name=f"{construct_id}-cluster", 
            vpc=vpc, 
            vpc_subnets=vpc.public_subnets, 
            masters_role=iam_role, 
            default_capacity_instance=ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE2, ec2.InstanceSize.MICRO), 
            version=eks.KubernetesVersion.V1_20,
        )

# Read the deployment config
with open("../cdk8s/dist/cdk8s-deployment.k8s.yaml", 'r') as stream:
      deployment_yaml = yaml.load(stream, Loader=yaml.FullLoader)

# Read the service config
with open("../cdk8s/dist/cdk8s-service.k8s.yaml", 'r') as stream:
      service_yaml = yaml.load(stream, Loader=yaml.FullLoader)

eks_cluster.add_manifest(f"{construct_id}-app-deployment", deployment_yaml)

eks_cluster.add_manifest(f"{construct_id}-app-service", service_yaml)

Zum Bereitstellen der Anwendung müssen wir wieder in das Verzeichnis „eks/cluster“ wechseln. Wenn Sie sich derzeit im Verzeichnis „eks/cdk8s“ befinden, führen Sie den folgenden Befehl aus (andernfalls wechseln Sie in „eks/cluster“):

cd ../cluster
cdk deploy

Sobald AWS CDK den Anwendungs-Stack bereitgestellt hat, können wir die Status der Pods mit kubectl überprüfen. Stellen Sie vor der Verwendung von kubectl mit kubectl config current-context sicher, dass Sie den richtigen Kontext verwenden.

Zum Anzeigen des Status der Anwendung in den Pods können wir den Befehl kubectl get all verwenden und erhalten die folgenden Ergebnisse:

$ kubectl get all
NAME                                             READY   STATUS    RESTARTS   AGE
pod/cdk8s-deployment-c8087a1b-659fb88f56-6qj52   1/1     Running   0          3m22s
pod/cdk8s-deployment-c8087a1b-659fb88f56-s82ft   1/1     Running   0          3m22s

NAME                             TYPE           CLUSTER-IP      EXTERNAL-IP                                                                    PORT(S)        AGE
service/cdk8s-service-c844e1e1   LoadBalancer   xxx.xxx.xxx.xxx   xxxxxxxxxxxxxx.eu-west-1.elb.amazonaws.com   80:30132/TCP   3m22s
service/kubernetes               ClusterIP      xxx.xxx.xxx.xxx      <none>                                                                         443/TCP        4h17m

NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/cdk8s-deployment-c8087a1b   2/2     2            2           3m22s

NAME                                                   DESIRED   CURRENT   READY   AGE
replicaset.apps/cdk8s-deployment-c8087a1b-659fb88f56   2         2         2       3m22s

Zum Testen der Anwendung können Sie den Wert von „EXTERNAL-IP“ aus dem LoadBalancer-Wert oben kopieren und in Ihrem Browser öffnen. Er sieht wie folgt aus: xxxxxxxxxxxxxx.eu-west-1.elb.amazonaws.com

Nach dem Laden sollte diese Seite angezeigt werden:

gsg_build_eks_2

Sie haben eine Anwendung erfolgreich in einem Kubernetes-Cluster bereitgestellt, indem Sie CDK für die Bereitstellung des Clusters und die Bereitstellung der von CDK8s generierten Manifestdateien verwendet haben.

Zusammenfassung

In diesem Leitfaden haben Sie gelernt, die von CDK8s generierten Kubernetes-Konfigurationsdateien zu verwenden und sie mit CDK in Ihrem EKS-Cluster bereitzustellen. Im nächsten Modul werden Sie alle in diesem Leitfaden erstellten Ressourcen bereinigen.

Nächstes Thema: Ressourcen bereinigen

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