Implementare un'applicazione Web basata sui container su Amazon EKS
GUIDA ALLE OPERAZIONI DI BASE
Modulo 4: Implementazione con AWS CDK
In questo modulo creerai un'implementazione tramite l'uso di CDK e l'avvio della tua applicazione
Introduzione
In questo modulo implementeremo un'applicazione nel cluster EKS da te appena creato utilizzando i file di configurazione generati da CDK8s nel modulo precedente. Questi file config verranno utilizzati da CDK per implementare l'applicazione.
Cosa imparerai
- Integrare AWS CDK8S in AWS CDK
- Implementazione con AWS CDK
- Gestire il cluster con Kubectl
Tempo richiesto per il completamento
10 minuti
Prerequisiti del modulo
- Account AWS con accesso da amministratore**
- Browser consigliato: l'ultima versione di Chrome o Firefox
[**]Gli account creati nelle ultime 24 ore potrebbero non avere ancora accesso a tutti servizi richiesti per questo tutorial.
Implementazione
Definizione dell'applicazione
I file config di Kubernetes sono archiviati in formato Yaml, quindi è necessario importare la libreria yaml per poterli analizzare. Aggiungi import yaml sotto le altre importazioni nella parte superiore di eks/cluster/cluster/cluster_stack.
Aggiungerai quindi 2 blocchi di codice per leggere i 2 file Yaml in variabili da passare al cluster:
# 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)
Passerai poi questo Yaml al cluster EKS tramite il metodo add_manifest, una volta per ciascun file:
eks_cluster.add_manifest(f"{construct_id}-app-deployment", yaml_app_deployment)
eks_cluster.add_manifest(f"{construct_id}-app-service", yaml_app_service)
Il tuo file cluster_stack.py dovrebbe ora avere questo aspetto:
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)
Per implementare l'applicazione è necessario tornare alla directory eks/cluster. Se sei attualmente nella directory eks/cdk8s, esegui quanto segue (altrimenti spostati su eks/cluster):
cd ../cluster
cdk deploy
Una volta che AWS CDK ha implementato la pila dell'applicazione, possiamo controllare lo stato dei pod con kubectl. Prima di usare kubectl, assicurati di stare usando il giusto contesto eseguendo kubectl config current-context.
Per vedere lo stato dell'applicazione nei pod, possiamo usare il comando kubectl get all e verranno visualizzati i seguenti risultati:
$ 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
Per testare l'applicazione, puoi copiare l'EXTERNAL-IP dal valore del LoadBalancer sopra e aprirlo nel tuo browser - viene visualizzato come xxxxxxxxxxxxxx.eu-west-1.elb.amazonaws.com.
Una volta terminato il caricamento, la pagina dovrebbe avere questo aspetto:

Hai implementato con successo un'applicazione in un cluster Kubernetes utilizzando CDK per effettuare il provisioning del cluster e implementare i file manifesto generati da CDK8s.
Conclusione
In questa guida hai imparato come utilizzare i file config di Kubernetes generati da CDK8s e implementarli nel tuo cluster EKS utilizzando CDK. Nel modulo successivo eliminerai tutte le risorse create in questa guida.
A seguire: Eliminare le risorse