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:

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