Come Creare un Cluster Kubernetes con AWS EKS CLI

Se sei uno sviluppatore, probabilmente vorresti distribuire applicazioni containerizzate su Kubernetes. Ma la domanda è: come? Perché non provare AWS EKS CLI?

In questo tutorial, imparerai come configurare AWS EKS CLI per creare un cluster Kubernetes, in modo da poterti concentrare sul tuo codice anziché sulla gestione dell’infrastruttura.

Continua a leggere e inizia a creare il tuo cluster oggi stesso!

Prerequisito

Questo tutorial sarà una dimostrazione pratica. Se desideri seguirmi, assicurati di avere un PC e un account AWS. Se non hai un account AWS, è disponibile un account gratuito tier.

Creazione di un utente amministratore

Prima di creare un cluster Kubernetes, creerai un utente amministratore. Un utente amministratore ti consente di accedere alla console AWS per configurare il tuo cluster. Inizia questo tutorial creando un utente con le autorizzazioni di amministratore tramite la Console AWS.

1. Accedi alla tua Console AWS e vai alla dashboard IAM.

Fai clic su Utenti (pannello di sinistra) -> Aggiungi utenti (in alto a destra) come mostrato di seguito per iniziare ad aggiungere utenti.

Initializing User Creation

2. Successivamente, fornisci un nome utente nel campo Nome utente, qui viene utilizzato K8-Admin, seleziona l’opzione Accesso programmatico – Accesso tramite programma e clicca su Avanti: Autorizzazioni.

Stai selezionando l’opzione Accesso programmatico – Accesso tramite programma poiché è accessibile tramite programmazione. Di conseguenza, puoi utilizzare un’applicazione per comunicare direttamente con AWS su quali azioni intraprendere.

Configuring User Details

3. Clicca sull’opzione Allega direttamente le politiche esistenti, seleziona la politica AdministratorAccess e clicca su Avanti: Tag.

La politica AdministratorAccess dà all’utente (K8-Admin) pieno accesso ad AWS e altro come segue:

  • Consente all’utente di utilizzare CloudFormation
  • Creare istanze EC2 e registri CloudWatch
  • Configurare bilanciatori di carico elastici .
Setting up AdministratorAccess policies

4. Clicca su Avanti: Riepilogo per saltare l’aggiunta di tag.

Skipping the tags screen

5. Infine, verifica i dettagli dell’utente e clicca su Crea utente per finalizzare la creazione dell’utente amministratore.

Creating the admin user

Una volta completata la creazione dell’utente amministratore, riceverai un messaggio di Successo in alto nella schermata, come quello riportato di seguito. Prendi nota dell’ID chiave di accesso e della chiave di accesso segreta poiché utilizzerai queste chiavi per effettuare l’accesso successivamente.

Previewing the admin user keys

Lancio di un’istanza EC2

Ora che hai creato K8-Admin, puoi creare la tua prima istanza EC2. Utilizzerai questa istanza come nodo master, dove eseguirai i comandi per creare il cluster.

1. Vai alla dashboard di EC2, fai clic su EC2, quindi su Launch Instances nella parte più a destra della pagina. Ciò reindirizzerà il tuo browser a una pagina in cui puoi scegliere un’immagine di macchina Amazon (AMI) (passo due).

Launching an EC2 Instance

2. Successivamente, fai clic su Select accanto (a destra) all’AMAZON Linux 2 AMI (HVM) dalla lista, come mostrato di seguito.

AMAZON Linux 2 AMI (HVM) offre il kernel Linux 5.10 ottimizzato per le prestazioni ottimali dell’ultima generazione di hardware. Questa AMI ha anche molte funzionalità richieste dai cluster Kubernetes di livello di produzione.

Selecting Amazon Linux 2 AMI (HVM)

3. Mantieni il valore predefinito (t2.micro) per il tipo di istanza e fai clic su Avanti: Configura i dettagli dell’istanza per configurare l’istanza.

Previewing the instance type

4. Abilita l’opzione Auto-assegna indirizzo IP pubblico e fai clic su Avanti: Aggiungi archiviazione. Questa opzione garantisce che ciascuno dei tuoi contenitori possa accedere all’indirizzo IP pubblico del tuo nodo master Kubernetes e delle tue istanze EC2.

Configuring instance details

5. Mantenere il valore predefinito (Root) nella pagina Aggiungi Archiviazione e fare clic su Avanti: Aggiungi tag. Il volume Root è necessario per leggere e scrivere dati dall’interno dell’istanza.

Configuring the storage

6. Ignorare l’aggiunta di tag e fare clic su Avanti: Configura il Gruppo di Sicurezza.

Previewing the tags

7. Mantenere le impostazioni predefinite sul gruppo di sicurezza, come mostrato di seguito, e fare clic su Revisiona e Avvia.

Previewing the Security Group

8. Rivedere i dettagli del lancio dell’istanza e fare clic su Avvia per avviare l’istanza. Comparirà una finestra pop-up in cui potrai scegliere di selezionare una chiave key pair esistente o crearne una nuova (passaggio nove).

Launching an instance

9. Nella finestra di dialogo pop-up, configurare la chiave con i seguenti passaggi:

  • Selezionare Crea una nuova chiave nel menu a discesa.
  • Scegliere RSA come tipo di chiave Key pair type.
  • Fornire il nome preferito per la Key pair name. Ma per questo tutorial, il nome della chiave è impostato su my-nvkp.
  • Fare clic su Scarica Key Pair, quindi su Avvia istanze.
Creating a new key pair

L’istanza potrebbe impiegare uno o due minuti per essere completamente avviata. Una volta che l’istanza è in esecuzione, la vedrai elencata nel tuo dashboard EC2, come mostrato di seguito.

Previewing the newly-created instance

Configurazione dello Strumento AWS CLI

Ora che la tua istanza è in esecuzione, è il momento di configurare gli strumenti della riga di comando (CLI). Utilizzare gli strumenti CLI in combinazione con il tuo account AWS è essenziale per creare il tuo cluster Kubernetes.

1. Dal tuo cruscotto EC2, seleziona la casella per scegliere l’istanza, come mostrato di seguito. Fai clic su Connect per inizializzare la connessione all’istanza.

Connecting to the Ec2 instance.

2. Successivamente, fai clic sul pulsante Connect per connetterti all’istanza che hai selezionato in precedenza al passo uno.

Connecting to the instance

Una volta connesso alla tua istanza EC2, il tuo browser reindirizza alla terminale interattiva mostrata di seguito come la tua sessione SSH temporanea con la tua istanza EC2.

La terminale interattiva ti consente di connetterti alla riga di comando ed eseguire comandi amministrativi per la tua nuova istanza.

Previewing the interactive terminal

3. Esegui il comando aws di seguito per verificare la versione della tua CLI.

aws --version

Come puoi vedere dall’output qui sotto, stai eseguendo la versione 1.18.147 sulla tua istanza Amazon Linux 2, che è obsoleta. Devi scaricare e installare AWS CLI versione 2+ per garantire l’accesso a tutte le funzionalità di Kubernetes (passo tre).

Checking the AWS CLI version

4. Ora, esegui il comando curl di seguito per scaricare lo strumento CLI v2+ e salvarlo in un file zip chiamato awscliv2.zip.

 curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" 
Downloading the CLI tool v2+

5. Esegui i seguenti comandi per decomprimere il file scaricato e determinare dove è installata la vecchia versione di AWS CLI.

unzip awscliv2.zip
which aws

Come puoi vedere dall’output qui sotto, la vecchia versione di AWS CLI è installata in /usr/bin/aws. Devi aggiornare questo percorso con la versione aggiornata.

Updating outdated AWS CLI

6. Esegui il comando sottostante per eseguire le seguenti operazioni e – aggiorna il percorso di installazione dell’AWS CLI sulla tua istanza:

  • Installa gli strumenti aggiornati AWS CLI sulla tua istanza Amazon Linux 2 (sudo ./aws/install).
  • Imposta la directory (--install-dir /usr/bin/aws-cli) dove installare gli strumenti CLI. In questo modo puoi trasferire la AWS CLI aggiornata su altre istanze senza reinstallare gli strumenti CLI.
  • Aggiorna (--update) il tuo ambiente shell corrente con il nuovo percorso per gli strumenti AWS CLI se ce n’è uno nel tuo ambiente corrente.
sudo ./aws/install --bin-dir /usr/bin --install-dir /usr/bin/aws-cli --update
Installing the CLI tool v2

7. Esegui di nuovo il comando aws --version qui sotto per verificare che la AWS CLI aggiornata sia stata installata correttamente.

aws --version

La versione di AWS CLI installata è 2.4.7, come mostrato di seguito, che è la versione più recente di AWS CLI al momento della stesura.

Checking the AWS CLI updated version

8. Successivamente, esegui il comando aws configure per configurare la tua istanza con i nuovi strumenti AWS CLI.

aws configure

Inserisci i valori appropriati nei promemoria come indicato di seguito:

  • AWS Access Key ID [Nessuno] – Inserisci l’ID chiave di accesso che hai annotato nella sezione precedente “Creazione dell’utente amministratore”.
  • AWS Secret Access Key [Nessuno] – Inserisci la chiave di accesso segreta che hai annotato nella sezione precedente “Creazione dell’utente amministratore”.
  • Nome della regione predefinita [Nessuno] – Seleziona una regione supportata, come us-east-1.
  • Formato di output predefinito [Nessuno] – Inserisci json, poiché il formato JSON è lo standard preferito per l’uso con Kubernetes.
Configuring the AWS Environment

Configurazione dello strumento da riga di comando Amazon EKS (eksctl)

Dato che il tuo obiettivo è creare un cluster Kubernetes con AWS EKS CLI, configurerai anche lo strumento da riga di comando Amazon EKS (eksctl). Questo strumento ti permette di creare e gestire cluster Kubernetes su Amazon EKS.

1. Installa l’ultima versione dello strumento da riga di comando Kubernetes (kubectl) sulla tua istanza EC2. Questo strumento ti consente di eseguire comandi sui cluster Kubernetes.

2. Successivamente, esegui il comando curl di seguito per scaricare l’ultima versione di eksctl da GitHub nella tua directory /tmp come file .tar.gz, quindi estrai i contenuti dell’archivio nella directory /tmp.

Esegui i comandi seguenti per eseguire le seguenti operazioni:

  • Scarica l’ultima versione di eksctl da GitHub (--location) come archivio .tar.gz ("<https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$>(uname -s)_amd64.tar.gz")
  • Estrai i contenuti dell’archivio nella directory /tmp (tar xz -C /tmp), mentre il flag --silent sopprime l’output di avanzamento del comando.
  • Sposta (sudo mv) il binario eksctl (/tmp/eksctl) nel percorso in cui hai installato AWS CLI (/usr/bin)
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/bin

3. Infine, esegui il comando sottostante per confermare di aver installato con successo eksctl.

eksctl version

L’output sottostante conferma che hai installato eksctl con successo.

Checking the eksctl CLI tool version

Se sei nuovo a eksctl, puoi eseguire il comando sottostante per ottenere un elenco di tutti i comandi supportati di eksctl e il loro utilizzo.

eksctl --help
Previewing the eksctl help page

Provisionamento del tuo cluster EKS

Ora che hai configurato eksctl, puoi ora creare il tuo primo cluster EKS con i comandi di eksctl.

Esegui il comando eksctl sottostante per creare il tuo primo cluster e eseguire le seguenti operazioni:

  • Crea un cluster Kubernetes a 3 nodi chiamato dev con un tipo di nodo come t3.micro e una regione come us-east-1.
  • Definisci almeno un nodo (--nodes-min 1) e un massimo di quattro nodi (--nodes-max 4) per questo gruppo di nodi gestito da EKS. Il gruppo di nodi è chiamato standard-workers.
  • Crea un gruppo di nodi con il nome standard-workers e seleziona un tipo di macchina per il gruppo di nodi standard-workers.
eksctl create cluster --name dev --version 1.21 --region us-east-1 --nodegroup-name standard-workers --node-type t3.micro --nodes 3 --nodes-min 1 --nodes-max 4 --managed
Provisioning your EKS Cluster

2. Vai alla tua dashboard di CloudFormation per vedere le azioni eseguite dal comando. Il comando eksctl create cluster utilizza CloudFormation per fornire l’infrastruttura nel tuo account AWS.

Come puoi vedere di seguito, viene creato uno stack CloudFormation chiamato eksctl-dev-cluster. Questo processo potrebbe richiedere 15 minuti o più per completarsi.

Previewing the eksctl-dev-cluster stack.

3. Ora, vai alla tua dashboard EKS e vedrai un cluster chiamato dev predisposto. Clicca sul collegamento ipertestuale dev per accedere alla dashboard del cluster EKS di dev.

Navigating to the dev EKS Cluster dashboard.

In basso, puoi vedere i dettagli del cluster EKS di dev, come il Nome del nodo, il Tipo di istanza, il Gruppo di nodi e lo Stato.

Previewing the dev EKS Cluster dashboard.

4. Passa alla tua dashboard EC2 e vedrai che quattro nodi sono in esecuzione, di cui tre con il ruolo t3.micro nel tuo account AWS (tre nodi worker e un nodo master).

Previewing the EC2 dashboard.

5. Infine, esegui il comando seguente per aggiornare la tua configurazione kubectl (update-kubeconfig) con il punto di accesso del tuo cluster, il certificato e le credenziali.

aws eks update-kubeconfig --name dev --region us-east-1
Updating kubectl config

Implementazione di un’applicazione sul cluster EKS

Hai creato il tuo cluster EKS e confermato che funziona perfettamente. Ma in questo momento, il cluster EKS è solo seduto in un angolo. Per questa demo, farai uso del cluster EKS implementando un’applicazione NGINX.

1. Esegui il comando yum di seguito per installare git accettando automaticamente tutte le richieste (-y) durante l’installazione.

sudo yum install -y git
Installing Git

2. Successivamente, esegui il comando git clone di seguito per clonare i file di configurazione dal repository GitHub nella tua directory corrente. Utilizzerai questi file per creare un’implementazione di NGINX sui tuoi pod e creare un bilanciatore di carico (ELB).

git clone https://github.com/Adam-the-Automator/aws-eks-cli.git
Cloning the configuration files

3. Esegui i seguenti comandi per spostarti nella directory ata-elk e creare (kubectl apply) un servizio per NGINX (./nginx-svc.yaml).

# Cambia directory in ata-elk
cd ata-elk
# Applica la configurazione in ./nginx-svc.yaml a un pod
kubectl apply -f ./nginx-svc.yaml
Creating a service for NGINX

4. Successivamente, esegui il comando kubectl get service per controllare lo stato del tuo servizio NGINX.

kubectl get service

Come vedi qui sotto, il tipo di servizio è un bilanciatore di carico e Kubernetes ha creato un servizio (nginx-svc), che è la tua implementazione di NGINX. Puoi anche vedere il nome host DNS esterno del bilanciatore di carico creato da EKS sotto la colonna EXTERNAL IP.

Annota il nome host DNS esterno del bilanciatore di carico in quanto ne avrai bisogno in seguito per testare il bilanciatore di carico.

Checking the status of your NGINX

5. Esegui il comando kubectl di seguito per distribuire i pod NGINX.

kubectl apply -f ./nginx-deployment.yaml
Deploying the NGINX pods

6. Esegui i seguenti comandi kubectl get per verificare lo stato del tuo NGINX deployment e del tuo NGINX pod.

kubectl get deployment
kubectl get pod

Come puoi vedere nell’output sottostante, ci sono tre pod del tuo deployment e tutti sono in esecuzione.

Checking the status of the NGINX deployment and pods

7. Successivamente, esegui il comando kubectl get node per verificare lo stato dei tuoi nodi worker.

kubectl get node
Check the status of your worker nodes

8. Ora, esegui il comando curl di seguito per testare il tuo bilanciamento del carico. Sostituisci <LOAD_BALANCER_DNS_HOSTNAME> con il nome DNS che hai annotato in precedenza (passo cinque).

curl "<LOAD_BALANCER_DNS_HOSTNAME>"

Vedrai la pagina di benvenuto NGINX dal servizio NGINX creato da EKS, come mostrato di seguito. L’output conferma che il tuo bilanciamento del carico funziona correttamente e che puoi accedere ai tuoi pod NGINX.

Checking your load balancer

9. Infine, per un controllo doppio, copia e incolla il nome DNS del bilanciamento del carico in una nuova scheda del browser.

Vedrai anche una pagina di benvenuto da NGINX, il che indica che la tua applicazione funziona.

Checking your load balancer with a browser

Test del controllo di Kubernetes altamente disponibile

Ora che hai un cluster in esecuzione, testerai se il piano di controllo di Kubernetes è altamente disponibile. L’uptime della tua applicazione dipende da questa funzionalità. Se il piano di controllo non funziona, le tue applicazioni saranno inattive e non potranno servire gli utenti.

Con la funzione di controllo di Kubernetes altamente disponibile, aumenti la disponibilità della tua applicazione. Testerai questa funzionalità fermare i nodi worker EKS e vedere se Kubernetes ne avvia di nuovi per sostituire quelli falliti.

1. Nel tuo dashboard EC2, arresta tutte le istanze dei nodi worker EKS, come mostrato di seguito.

Stopping all of your EKS worker node instances

2. Successivamente, esegui il seguente comando per verificare lo stato del nodo worker.

kubectl get node

Otterrai una combinazione di stati, come In sospeso, In esecuzione e In terminazione. Perché? Perché mentre cerchi di fermare tutti i nodi worker, Kubernetes rileva il fallimento e porta rapidamente su un altro nodo.

Checking the status of the worker node

3. Ora esegui il comando kubectl get pod per testare la funzionalità di controllo altamente disponibile di Kubernetes.

kubectl get pod

Puoi vedere nell’output che ci sono tre nuovi pod (identificati per età) nello stato In esecuzione. Questi nuovi pod indicano che la funzionalità di controllo altamente disponibile di Kubernetes sta funzionando come previsto.

Checking the status of the pods

4. Esegui infine il comando kubectl get service di seguito per elencare tutti i servizi disponibili.

Puoi vedere qui sotto che Kubernetes ha creato un nuovo servizio e il nome DNS del bilanciatore di carico è diverso ora. kubectl get service

kubectl get service
Kubernetes has created a new service

5. Infine, copia e incolla il nome DNS del bilanciatore di carico nel tuo browser. Otterrai la pagina di benvenuto da NGINX come hai fatto nell’ultimo passaggio della sezione “Deploying an Application on EKS Cluster”.

Conclusione

Attraverso questo tutorial, hai imparato come creare un cluster EKS, distribuire un servizio NGINX dal tuo contenitore e testare la funzionalità del piano di controllo altamente disponibile.

A questo punto, dovresti avere una buona comprensione di come creare cluster EKS nel tuo ambiente AWS.

Qual è il tuo prossimo passo? Forse imparare come implementare un’app NodeJS utilizzando Docker e K8s su AWS?

Source:
https://adamtheautomator.com/aws-eks-cli/