Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

EKS: applicazione di esempio

Kubernetes: realizziamo una applicazione di esempio con EKS analizzando le fasi di creazione e attivazione del cluster
Kubernetes: realizziamo una applicazione di esempio con EKS analizzando le fasi di creazione e attivazione del cluster
Link copiato negli appunti

Ora che, a seguito di quanto visto nella lezione precedente, abbiamo a disposizione concetti e strumenti necessari possiamo iniziare ad utilizzare EKS in maniera operativa seguendo questi passaggi:

  • creazione di un cluster. In questo caso, sceglieremo la modalità più agile ovvero Fargate, l'approccio serverless, agendo tramite eksctl;
  • attivazione di un'applicazione sul cluster che in questo caso sarà un server Web Apache.

Ricordiamo che i passi precedenti, una volta portati a termine con successo, rappresenteranno una bella esperienza iniziale su Kubernetes ma il nostro studio non sarà certo finito. Nella pratica successiva, sarà fondamentale imparare a containerizzare le nostre applicazioni Kubernetes, ad immettere le relative immagini sui registry interni di AWS e avviare container sul cluster: questo è ciò che tipicamente sarà richiesto saper fare in un ambito professionale.

Il nostro ambiente di lavoro è stato la CloudShell ma ci si senta liberi di scegliere il proprio preferito.

Creazione del cluster

Iniziamo dalla creazione del cluster con eksctl. Precisiamo subito che ai fini di una corretta gestione delle risorse Cloud e dell'ottimizzazione dei costi è fondamentale ricordare sempre di eliminare il cluster non appena non sia più necessario e lo stesso andrà fatto con qualsiasi altro genere di risorsa. Creiamo il nostro primo cluster Fargate:

$ eksctl create cluster --name my-first-cluster --fargate

L'output che seguirà mostrerà le varie fasi di creazione e al termine avremo il nostro cluster di nome my-first-cluster pronto e operativo. Ne potremo avere conferma chiedendo l'elenco dei cluster disponibili con:

$ eksctl get clusters
NAME                    REGION          EKSCTL CREATED
my-first-cluster        us-east-1       True

mentre con:

$ kubectl get nodes -o wide
NAME                                     STATUS   ROLES    AGE   VERSION               INTERNAL-IP      EXTERNAL-IP   OS-IMAGE         KERNEL-VERSION                  CONTAINER-RUNTIME
fargate-ip-192-168-121-87.ec2.internal   Ready    </none>   23m   v1.27.1-eks-2f008fe   192.168.121.87   </none>        Amazon Linux 2   5.10.192-183.736.amzn2.x86_64   containerd://1.6.6
fargate-ip-192-168-99-157.ec2.internal   Ready    </none>   23m   v1.27.1-eks-2f008fe   192.168.99.157   </none>        Amazon Linux 2   5.10.192-183.736.amzn2.x86_64   containerd://1.6.6

vedremo l'impostazione di Kubernetes.

AWS ha data center sparsi per il mondo (le roccaforti in cui conserva i server che compongono il suo Cloud) e tale infrastruttura è suddivisa in regioni. Quando operiamo, ne abbiamo una assegnata di default e questa sarà la collocazione offerta al nostro cluster. In questo caso, a noi è stata data la regione di codice us-east-1 corrispondente alla North Virginia. Questa potrà essere modificata anche in sede di comando eksctl mediante l'opzione --region semplicemente con:

$ eksctl create cluster --name my-first-cluster --region us-east-1 --fargate

con il codice di un'altra region selezionabile nell'elenco offerto dalla documentazione ufficiale.

Lancio dell'applicazione

A questo punto avvieremo la nostra applicazione, il server web Apache, usando un'immagine predefinita di DockerHub, mediante kubectl. Ricordiamo che la configurazione dichiarativa resta sempre un elemento imprescindibile nell'utilizzo di Kubernetes ma in questo caso, solo per semplicità espositiva, ricorreremo a comandi imperativi con cui avvieremo il nostro Deployment:

$ kubectl create deployment my-server-web --image=httpd
deployment.apps/my-server-web created

Abbiamo richiesto l'avvio della nostra applicazione che dopo poco tempo sarà disponibile. Queste sono le risorse generate:

$ kubectl get deploy
NAME            READY   UP-TO-DATE   AVAILABLE   AGE
my-server-web   1/1     1            1           1m26s
$ kubectl get pods
NAME                             READY   STATUS    RESTARTS   AGE
my-server-web-749b6c5896-n6tzf   1/1     Running   0          1m37s

Con piacere vediamo che tutto ciò che abbiamo imparato su Kubernetes resta assolutamente valido e una volta iniziato il dialogo con il cluster ci basterà passare istruzioni mediante kubectl.

Esponiamo ora il Deployment con un Service:

$ kubectl expose deployment my-server-web --port 80
service/my-server-web exposed

Ancora con kubectl verificheremo che il Service sia attivo con il comando:

$ kubectl get svc
NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
kubernetes      ClusterIP   10.100.0.1     </none>        443/TCP   26m
my-server-web   ClusterIP   10.100.240.1   </none>        80/TCP    6s

Questo ci mostrerà le configurazioni del Service che, come vediamo, sono relative ad un ClusterIP. Considerando che il nostro focus in questa guida è su Kubernetes, e per completare la pubblicazione direttamente su Internet dell'applicazione, servirebbe approfondire aspetti di AWS che sfuggono al nostro attuale interesse, ci limitiamo a provare il tutto con un port forwarding. Scegliamo una porta TCP che farà da endpoint locale per il server Web Apache che sta girando sul cluster (noi prenderemo ad esempio la numero 5151) ed attiviamo il collegamento:

$ kubectl port-forward service/my-server-web 5151:80 &
$ curl localhost:5151
Handling connection for 5151
<html><body><h1>It works!</h1></body></html>

Dalla prova eseguita con curl tutto appare perfettamente funzionante!

Pulizia finale e chiusura del cluster

Finita la sperimentazione non dovremo dimenticare di dismettere il cluster attivato e con esso interrompere l'utilizzo di risorse e la fatturazione collegata:

$ eksctl delete cluster --name my-first-cluster

L'output prodotto segnalerà che il cluster è stato dismesso e, richiedendo la lista dei cluster attivi come fatto in precedenza, ne avremo conferma.

Ti consigliamo anche