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

Facci sapere com'è andata.