Implementare un'applicazione Web basata sui container su Amazon EKS

GUIDA ALLE OPERAZIONI DI BASE

Modulo 1: Creare un cluster EKS

In questo modulo, apprenderai come creare un cluster Amazon EKS

Introduzione

Prima che noi implementiamo l'applicazione containerizzata, è necessario creare un cluster Kubernetes. Utilizzeremo Amazon EKS per creare il cluster. In questa guida, il cluster Amazon EKS consiste in un piano di controllo (control-plane) e nell'utilizzo di Amazon EC2 come nodi (worker). Per creare il cluster Kubernetes utilizzeremo AWS CDK. AWS CDK offre flessibilità per abilitare il provisioning di un cluster Kubernetes in modo prevedibile e ripetibile.

Cosa imparerai

  • Creare un'applicazione AWS CDK per creare un cluster Amazon EKS con Amazon EC2 come nodi (worker)
  • Testare ed eseguire operazioni di base nel cluster Kubernetes

 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

Una volta definito il ruolo IAM e il cluster EKS, il passaggio successivo è quello di implementare la pila CDK. Prima di procedere, è necessario configurare CDK per sapere quale ID account e quale Regione utilizzare, cambiando eks/cluster/app.py e decommentando la riga 24:

Creare un'applicazione AWS CDK

In questo passaggio preparerai le cartelle di lavoro. Creerai due diverse cartelle all'interno della cartella root eks. La prima cartella, k8s-cluster, è per la creazione del cluster e ospiterà il tuo codice CDK per crearlo. La seconda cartella, cdk8s, conterrà il codice per creare e implementare la tua applicazione nel cluster tramite cdk8s. Crea le directory e crea il tuo progetto CDK con Python eseguendo:

mkdir eks
cd eks
mkdir cluster cdk8s
cd cluster

cdk init app --language=python

Questo creerà lo scheletro dell'app CDK, con alcuni utili output di comando:

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...

In seguito assicurati di eseguire python3 -m venv .venv.

È necessario creare 2 risorse principali in questo modulo: il cluster Amazon EKS e il ruolo AWS IAM. Creare un ruolo IAM e collegarlo al cluster garantirà i privilegi di systems:masters. Per fare ciò è necessario aggiungere le librerie aws_cdk.aws-iam e aws_cdk.aws-eks nell'applicazione CDK. aws_cdk.aws-ec2 e pyyaml sono librerie necessarie per la fase di implementazione. Devi assicurarti di usare le librerie che corrispondono alla tua versione di CDK. Per controllare la versione, esegui cdk --version:

cdk --version

1.121.0 (build 026cb8f)

Usando il numero della versione mostrato, apri eks/cluster/requirements.txt e aggiungi le seguenti righe:

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

Per installare queste librerie, esegui pip3 install -r requirements.txt.

La creazione di un nuovo VPC è la best practice per costruire un cluster Kubernetes utilizzando EKS. Trovi ulteriori informazioni in merito nella documentazione. Per questa guida, userai il VPC predefinito fornito con ogni nuovo account per semplificare l'implementazione. Per creare il tuo cluster EKS, apri eks/cluster/cluster_stack.py e aggiungi le righe seguenti:

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

Una volta definito il ruolo IAM e il cluster EKS, il passaggio successivo è quello di implementare la pila CDK. Prima di procedere, è necessario configurare CDK per sapere quale ID account e quale Regione utilizzare, cambiando eks/cluster/app.py e decommentando la riga 24:

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

Quest'ultimo userà l'Account ID e la Regione configurata nell'AWS CLI. Prima che tu possa usare CDK, deve essere eseguito il processo di bootstrap: ciò creerà l'infrastruttura richiesta a CDK per gestire l'infrastruttura nel tuo account. Per eseguire il processo bootstrap di CDK, esegui cdk bootstrap. Dovresti visualizzare un output simile al seguente:

cdk bootstrap

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

Una volta che il processo di bootstrap è completo, eseguirai cdk deploy per implementare il cluster. 

cdk deploy

Dovresti visualizzare un output simile al seguente:

gsg_build_eks_1

CDK ti chiederà conferma prima di creare l'infrastruttura, poiché è la creazione dell'infrastruttura che cambia la configurazione della sicurezza - nel tuo caso creando ruoli IAM e gruppi di sicurezza. Premi y e quindi enter per implementare. CDK ora imposterà tutta l'infrastruttura che hai definito e ci vorranno alcuni minuti per completarla. 

Se tutto è andato a buon fine, alla fine dell'esecuzione otterrai i seguenti risultati:

✅  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

Visualizzerai 3 avvisi simili al seguente:

[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

Questa guida usa Kubernetes 1.20 e la sottorete dell'assegnazione di tag veniva usata solo prima della 1.19, quindi puoi tranquillamente ignorare questi avvisi. Il tuo cluster è ora pronto. Per far funzionare il tuo cluster, devi aggiornare la configurazione di Kubernetes (kubeconfig) perché punti a questo in modo che il comando kubectl funzioni. Copia ConfigCommand dall'output del tuo terminale ed eseguilo. Dovrebbe avere un aspetto simile a questo:

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

Per confermare che tutto sia configurato correttamente, esegui kubectl get all per confermare. Dovresti visualizzare quanto segue:

kubectl get all

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

Conclusione

In questo modulo abbiamo trattato la creazione di un cluster Amazon EKS utilizzando la CLI. Nel prossimo modulo installeremo e impareremo a usare CDK8s.

A seguire: Installare CDK8s

Facci sapere com'è andata.

Grazie per il tuo feedback
Siamo contenti che questa pagina ti sia stata d’aiuto. Vuoi condividere ulteriori dettagli per aiutarci a continuare a migliorare?
Chiudi
Grazie per il tuo feedback
Ci dispiace che questa pagina non ti sia stata d'aiuto. Vuoi condividere ulteriori dettagli per aiutarci a continuare a migliorare?
Chiudi