Bereitstellen einer Container-Web-App in Amazon EKS

LEITFADEN „ERSTE SCHRITTE“

Modul 1: Erstellen eines EKS-Clusters

In diesem Modul erfahren Sie, wie ein Amazon-EKS-Cluster erstellt wird

Einführung

Bevor wir die containerisierte Anwendung bereitstellen, müssen wir einen Kubernetes-Cluster erstellen. Dazu verwenden wir Amazon EKS. In diesem Leitfaden besteht der Amazon-EKS-Cluster aus einer Steuerebene und der Verwendung von Amazon EC2 als Worker-Knoten. Zum Erstellen des Kubernetes-Clusters verwenden wir AWS CDK. AWS CDK bietet Flexibilität, um die Bereitstellung eines Kubernetes-Clusters auf vorhersehbare und wiederholbare Weise zu ermöglichen.

Lerninhalte

  • Entwickeln einer AWS-CDK-Anwendung zur Erstellung eines Amazon-EKS-Clusters mit Amazon EC2 als Worker-Knoten
  • Testen und Durchführen eines Standardvorgangs für Kubernetes-Cluster

 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

Sobald Sie die IAM-Rolle und den EKS-Cluster definiert haben, ist der nächste Schritt die Bereitstellung des CDK-Stacks. Zuvor müssen Sie CDK konfigurieren und festlegen, welche Konto-ID und Region verwendet werden sollen. Dazu ändern Sie eks/cluster/app.py und heben Sie die Auskommentierung in Zeile 24 auf:

Entwickeln einer AWS-CDK-Anwendung

In diesem Schritt bereiten Sie Ihre Arbeitsordner vor. Sie erstellen zwei verschiedene Ordner innerhalb des Stammordners eks. Der erste Ordner, k8s-cluster, ist für die Erstellung von Clustern vorgesehen und enthält den CDK-Code für die Erstellung. Der zweite Ordner, cdk8s, enthält den Code zur Erstellung und Bereitstellung Ihrer Anwendung im Cluster mit cdk8s. Legen Sie die Verzeichnisse an, und erstellen Sie Ihr CDK-Projekt mit Python, indem Sie den folgenden Befehl ausführen:

mkdir eks
cd eks
mkdir cluster cdk8s
cd cluster

cdk init app --language=python

Damit wird das CDK-App-Gerüst mit einigen nützlichen Befehlsausgaben erstellt:

cdk init app --language=python
Applying project template app for python

# Welcome to your CDK Python project!

This is a blank project for Python development with CDK.

The `cdk.json` file tells the CDK Toolkit how to execute your app.

...

To add additional dependencies, for example other CDK libraries, just add
them to your `setup.py` file and rerun the `pip install -r requirements.txt`
command.

## Useful commands

 * `cdk ls`          list all stacks in the app
 * `cdk synth`       emits the synthesized CloudFormation template
 * `cdk deploy`      deploy this stack to your default AWS account/region
 * `cdk diff`        compare deployed stack with current state
 * `cdk docs`        open CDK documentation

Enjoy!

Please run 'python3 -m venv .venv'!
Executing Creating virtualenv...

Führen Sie danach unbedingt python3 -m venv .venv aus.

Es gibt zwei Hauptressourcen, die Sie in diesem Modul erstellen müssen: den Amazon-EKS-Cluster und die AWS-IAM-Rolle. Durch das Erstellen einer IAM-Rolle und das Anfügen an den Cluster werden die systems:masters-Berechtigungen gewährt. Dazu müssen wir die Bibliotheken aws_cdk.aws-iam und aws_cdk.aws-eks in unsere CDK-Anwendung einfügen. Die Bibliotheken aws_cdk.aws-ec2 und pyyaml sind für den Bereitstellungsschritt erforderlich. Stellen Sie sicher, dass Sie die Bibliotheken verwenden, die zu Ihrer Version von CDK passen. Um die Version von CDK zu überprüfen, führen Sie cdk --version aus:

cdk --version

1.121.0 (build 026cb8f)

Öffnen Sie die Datei „eks/cluster/requirements.txt“ mit der angezeigten Versionsnummer und fügen Sie die folgenden Zeilen an:

aws_cdk.core==1.121.0
aws_cdk.aws-iam==1.121.0
aws_cdk.aws-eks==1.121.0
aws_cdk.aws_ec2==1.121.0
pyyaml

Führen Sie pip3 install -r requirements.txt aus, um diese Bibliotheken zu installieren.

Die bewährte Methode für das Entwickeln eines Kubernetes-Clusters mit EKS ist das Erstellen einer neuen VPC, und Sie können in der Dokumentation mehr darüber lesen. Für diesen Leitfaden verwenden Sie die Standard-VPC, die mit jedem neuen Konto bereitgestellt wird, um die Bereitstellung zu vereinfachen. Zum Erstellen Ihres EKS-Clusters öffnen Sie eks/cluster/cluster_stack.py und fügen Sie die folgenden Zeilen hinzu:

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


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,
        )

Sobald Sie die IAM-Rolle und den EKS-Cluster definiert haben, ist der nächste Schritt die Bereitstellung des CDK-Stacks. Zuvor müssen Sie CDK konfigurieren und festlegen, welche Konto-ID und Region verwendet werden sollen. Dazu ändern Sie eks/cluster/app.py und heben Sie die Auskommentierung in Zeile 24 auf:

env=core.Environment(account=os.getenv('CDK_DEFAULT_ACCOUNT'), region=os.getenv('CDK_DEFAULT_REGION')),

Dabei werden die in der AWS CLI konfigurierte Konto-ID und Region verwendet. Bevor Sie CDK nutzen können, muss ein Bootstrap dafür ausgeführt werden. Dadurch wird die erforderliche Infrastruktur für CDK erstellt, um die Infrastruktur in Ihrem Konto zu verwalten. Um CDK zu bootstrappen, führen Sie cdk bootstrap aus. Sie sollten eine ähnliche Ausgabe wie diese sehen:

cdk bootstrap

#output
⏳  Bootstrapping environment aws://0123456789012/<region>...
✅  Environment aws://0123456789012/<region> bootstrapped

Nachdem das Bootstrapping abgeschlossen ist, führen Sie cdk deploy aus, um den Cluster bereitzustellen. 

cdk deploy

Sie sollten eine ähnliche Ausgabe wie die folgende sehen:

gsg_build_eks_1

CDK fordert Sie vor dem Erstellen der Infrastruktur auf, da eine Infrastruktur erstellt wird, die die Sicherheitskonfiguration ändert – in Ihrem Fall durch Erstellen von IAM-Rollen und Sicherheitsgruppen. Drücken Sie zum Bereitstellen y und dann die Eingabetaste. CDK richtet nun die gesamte von Ihnen definierte Infrastruktur ein. Der Vorgang dauert einige Minuten. 

Wenn alles erfolgreich verlaufen ist, erhalten Sie am Ende der Ausführung folgende Ergebnisse:

✅  ClusterStack

Outputs:
ClusterStack.ClusterStackclusterConfigCommand1CAA6E63 = aws eks update-kubeconfig --name ClusterStack-cluster --region eu-west-1 --role-arn arn:aws:iam::0123456789012:role/ClusterStack-iam
ClusterStack.ClusterStackclusterGetTokenCommand010D10BE = aws eks get-token --cluster-name ClusterStack-cluster --region eu-west-1 --role-arn arn:aws:iam::0123456789012:role/ClusterStack-iam
ClusterStack.ClusterStackoutclusterName = ClusterStack-cluster
ClusterStack.ClusterStackouteksSgId = sg-08b0517c72f0e2696
ClusterStack.ClusterStackoutkubectlRoleArn = arn:aws:iam::0123456789012:role/ClusterStack-ClusterStackclusterCreationRole9D9F21-29ZO9XWJLC4Q
ClusterStack.ClusterStackoutoidcArn = arn:aws:iam::0123456789012:oidc-provider/oidc.eks.eu-west-1.amazonaws.com/id/168AAF8C86B3F46909C6014D942FD39C
ClusterStack.ClusterStackoutvpcAz = ['eu-west-1a', 'eu-west-1b', 'eu-west-1c']
ClusterStack.ClusterStackoutvpcId = vpc-b8e25ec1

Stack ARN:
arn:aws:cloudformation:eu-west-1:0123456789012:stack/ClusterStack/91f4c430-1225-11ec-bb6c-027a967aed43

Drei ähnliche Warnungen wie die folgenden werden ausgegeben:

[Warning at /ClusterStack/ClusterStack-cluster] Could not auto-tag public subnet subnet-3a618f43 with "kubernetes.io/role/elb=1", please remember to do this manually

In diesem Leitfaden Kubernetes 1.20 verwendet, und Subnetzmarkierungen wurden nur vor 1.19 verwendet, sodass Sie diese Warnungen getrost ignorieren können. Ihr Cluster ist nun bereit. Für den Betrieb Ihres Clusters müssen Sie die Kubernetes-Konfiguration (kubeconfig) so aktualisieren, dass sie auf ihn verweist, damit der kubectl-Befehl funktioniert. Kopieren Sie den ConfigCommand-Befehl aus Ihrer Terminalausgabe und führen Sie ihn aus. Er sollte etwa wie folgt aussehen:

aws eks update-kubeconfig --name ClusterStack-cluster --region eu-west-1 --role-arn arn:aws:iam::0123456789012:role/ClusterStack-iam
Added ew context arn:aws:eks:eu-west-1:0123456789012:cluster/ClusterStack-cluster to /home/ubuntu/.kube/config

Zur Überprüfung, ob alles korrekt konfiguriert ist, führen Sie kubectl get all aus. Daraufhin sollten Sie Folgendes sehen:

kubectl get all

NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   xxx.xxx.xxx.xxx   <none>        443/TCP   15m

Zusammenfassung

In diesem Modul haben wir die Erstellung eines Amazon-EKS-Clusters mithilfe der CLI behandelt. Im nächsten Modul werden wir CDK8s installieren und kennenlernen.

Nächstes Thema: CDK8s installieren

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