GNU/Linux >> Linux Esercitazione >  >> Linux

Come creare un cluster Kubernetes con AWS CLI

Elastic Kubernetes Service (EKS) è un servizio Kubernetes gestito che è ospitato su AWS.

Il motivo principale per l'utilizzo di EKS è rimuovere l'onere della gestione di pod, nodi, ecc. L'esecuzione di Kubernetes in AWS richiede attualmente una grande quantità di competenze tecniche e spesso non rientra nella timoneria di molte organizzazioni. Con EKS, l'infrastruttura richiesta è gestita dal team "in-house" di Amazon, lasciando agli utenti un motore Kubernetes completamente gestito che può essere utilizzato tramite un'API o strumenti kubectl standard.

EKS supporterà tutte le funzionalità di Kubernetes, inclusi spazi dei nomi, impostazioni di sicurezza, quote e tolleranze delle risorse, strategie di distribuzione, scalabilità automatica e altro ancora. EKS ti consentirà di eseguire il tuo piano di controllo, ma si integra anche con AWS IAM in modo da poter mantenere il tuo controllo di accesso all'API.

EKS è stato costruito sulla base della soluzione "Kubernetes—as-a-Service" esistente di Amazon denominata Elastic Container Service for Kubernetes (EKS) è un servizio gestito da AWS che semplifica la distribuzione, la gestione e il funzionamento dei cluster Kubernetes nel cloud AWS.

Se esegui Kubernetes su AWS, sei responsabile della gestione del piano di controllo (ovvero nodi master e nodi di lavoro). Devi anche assicurarti che il server API sia altamente disponibile e tollerante ai guasti, ecc.

EKS ti ha tolto l'onere di gestire il piano di controllo, in questo modo ora puoi concentrarti sull'esecuzione dei carichi di lavoro Kubernetes. È più comunemente usato per applicazioni stateless come i microservizi poiché il piano di controllo è gestito da Amazon (EKS).

In questa guida impareremo come creare un cluster Kubernetes su AWS con EKS. Imparerai come creare un utente amministrativo per il tuo cluster Kubernetes. Imparerai anche come distribuire un'app nel cluster. Infine, testerai il tuo cluster per assicurarti che tutto funzioni correttamente.

Iniziamo!

Prerequisiti

  • Un account AWS.
  • L'articolo presuppone che tu abbia familiarità con Kubernetes e AWS. Se non lo sei, prenditi del tempo per esaminare la documentazione su entrambi prima di iniziare questa guida.

Creazione di un utente amministratore con autorizzazioni

Iniziamo con la creazione di un utente amministratore per il tuo cluster.

1. Accedi alla tua console AWS e vai a IAM. Fai clic su Utenti> Aggiungi utenti.

2. Nella schermata successiva, fornisci un nome utente come admin . Seleziona Chiave di accesso - Accesso programmatico. Fare clic su Avanti :Autorizzazioni

3. Nella schermata successiva, seleziona Allega direttamente le norme esistenti . Fai clic su Accesso amministratore . Fare clic su Avanti :Tag .

L'Accesso amministratore policy è una policy integrata con Amazon Elastic Container Service (ECS). Fornisce l'accesso completo a tutte le risorse ECS ea tutte le azioni nella console ECS. Il vantaggio principale di questa policy è che non è necessario creare o gestire un utente aggiuntivo con privilegi extra per accedere al servizio AWS EKS.

Il tuo utente amministratore può creare istanze EC2, stack CloudFormation, bucket S3, ecc. Dovresti fare molta attenzione a chi concedere questo tipo di accesso.

3. Nella schermata successiva, fai clic su Avanti :Recensione

4. Nella schermata successiva, fai clic su Crea utente .

5. Nella schermata successiva, riceverai un Successo verde messaggio. L'ID chiave di accesso e
Chiavi di accesso segrete vengono visualizzati anche in questa schermata. Avrai bisogno di queste chiavi per configurare i tuoi strumenti CLI in un secondo momento, quindi annota queste chiavi da qualche altra parte.

Creazione di un'istanza EC2

Ora che hai creato l'utente amministrativo , creiamo un'istanza EC2 da utilizzare come nodo master Kubernetes.

1. Digita EC2 nella casella di ricerca. Fare clic sul collegamento EC2. Fai clic su Avvia istanza .

2. Seleziona Amazon Linux 2 AMI (HVM) per la tua istanza EC2. Utilizzeremo questa AMI Amazon Linux per semplificare l'installazione di Kubernetes e altri strumenti necessari in un secondo momento, come:kubectl!, docker, ecc.

3. Nella schermata successiva, fai clic su Avanti :Configura istanza Dettagli .

3. Nella schermata successiva, abilita Assegna automaticamente IP pubblico opzione. Poiché il server si trova all'interno di una sottorete privata, non sarà accessibile dall'esterno. Puoi fornire ai tuoi server indirizzi IP pubblici associando un indirizzo IP elastico all'istanza. In questo modo, il tuo EC2 ed ELK sono accessibili. Fai clic su Avanti :Archiviazione .

3. Nella schermata successiva, fai clic su Avanti:Aggiungi tag> Avanti:configura il gruppo di sicurezza .

4. Nella schermata successiva, fai clic su Rivedi e avviaAvvia .

5. Apparirà una finestra di dialogo per la coppia di chiavi. Premi Crea una nuova coppia di chiavi . Assegnagli un nome, quindi scarica e archivia il file .pem in un luogo sicuro. Fai clic su Avvia istanza .

Configurazione degli strumenti della riga di comando

Ora che hai creato un'istanza EC2, devi installarne il client. In termini AWS, un client è uno strumento a riga di comando che consente di gestire gli oggetti cloud. In questa sezione imparerai come configurare gli strumenti Command Line Interface (CLI).

1. Passa alla dashboard EC2. Dovresti vedere la tua nuova istanza EC2 in esecuzione. In caso contrario, l'istanza potrebbe eseguire il primo avvio, attendere 5 minuti e riprovare. Una volta che l'istanza è in esecuzione, fai clic su Connetti .

2. Nella schermata successiva, fai clic su Connetti .

Verrai indirizzato a una sessione SSH interattiva sul tuo browser. SSH ti consente di connetterti e operare in modo sicuro su un server remoto. La sessione SSH interattiva ci consentirà di installare gli strumenti della riga di comando per EKS e Kubernetes direttamente sulla tua istanza EC2.

Dopo aver effettuato l'accesso alla sessione SSH, la prima cosa che dovrai fare è controllare la tua versione di aws-cli. Questo per assicurarti di utilizzare la versione più recente di AWS CLI. L'AWS CLI viene utilizzata per configurare, gestire e lavorare con il tuo cluster.

Se la tua versione non è aggiornata, potresti riscontrare alcuni problemi ed errori durante il processo di creazione del cluster. Se la tua versione è inferiore alla 2.0, dovrai aggiornarla.

3. Esegui il comando seguente per verificare la versione della CLI.

aws --version

Come puoi vedere nell'output di seguito, stiamo eseguendo la versione 1.18.147 di aws-cli , che è molto antiquato. Aggiorniamo la CLI all'ultima versione disponibile, che è v2+ al momento della stesura di questo.

4. Esegui il comando seguente per scaricare l'ultima versione disponibile di AWS CLI nell'istanza EC2. curl scaricherà il tuo file dall'URL specificato, -o gli darà il nome che preferisci e "awscli-exe-linux-x86_64.zip" è il file da scaricare

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"

5. Al termine del download, esegui il comando seguente per estrarre il contenuto del file scaricato nella directory corrente.

unzip awscliv2.zip

6. Quindi, esegui il comando which aws per impostare il collegamento per l'ultima versione di AWS CLI. Questo comando ti farà sapere dove può essere trovato nel PERCORSO del tuo ambiente, in modo che tu possa eseguirlo da qualsiasi directory.

which aws

Come puoi vedere nell'output di seguito, l'AWS CLI obsoleta si trova in /usr/bin/aws .

7. Ora devi configurare il tuo aws-cli eseguendo un comando di aggiornamento con alcuni parametri. Il primo parametro ./aws/install ci aiuterà a installare AWS CLI nella directory corrente. Il secondo parametro --bin-dir indica dove si troverà nel PATH dell'ambiente l'AWS CLI e il terzo parametro --install-dir è un percorso relativo a bin-dir. Questo comando assicurerà che tutti i tuoi percorsi siano aggiornati.

sudo ./aws/install --bin-dir /usr/bin --install-dir /usr/bin/aws-cli --update

8. Esegui nuovamente il comando aws --version per assicurarti di utilizzare la versione più recente.

aws --version

Dovresti vedere la versione dell'AWS CLI attualmente installata. Come puoi vedere nell'output di seguito, ora stiamo utilizzando la v2.4.7 di AWS CLI. Questa è l'ultima versione e non ti darà problemi durante la configurazione dei passaggi successivi.

9. Ora che il tuo ambiente è configurato correttamente, è il momento di configurare con quale account AWS desideri comunicare tramite l'AWS CLI. Esegui il comando seguente per elencare le variabili di ambiente dell'account attualmente configurate con l'alias che desideri utilizzare insieme ad esse.

aws configure

Questo ti mostrerà tutte le variabili di ambiente del tuo account AWS che sono attualmente configurate. Dovresti vedere qualcosa del genere nell'output di seguito. È necessario impostare alcuni parametri di configurazione affinché l'AWS CLI comunichi con gli account necessari. Esegui il comando seguente, che ti guiderà attraverso una procedura guidata di configurazione per configurare il tuo account AWS.

  • ID chiave di accesso AWS [Nessuno]:inserisci la chiave di accesso AWS che hai annotato in precedenza.
  • Chiave di accesso segreta AWS [Nessuna]:inserisci la chiave di accesso segreta AWS che hai annotato in precedenza.
  • Devi anche specificare il nome della regione predefinita in cui sarà il tuo cluster EKS. Dovresti scegliere una regione AWS in cui sarà il cluster EKS desiderato e che è più vicino a te. In questo tutorial, abbiamo scelto us-east-1 per la sua posizione geografica vicino a noi e la facilità d'uso per i passaggi successivi del tutorial.
  • Formato di output predefinito [Nessuno]:inserisci json come formato di output predefinito perché sarà molto utile per noi visualizzare i file di configurazione in un secondo momento.

Ora che hai configurato i tuoi strumenti AWS CLI. È ora di configurare lo strumento dell'interfaccia della riga di comando di Kubernetes denominato kubectl nel tuo ambiente in modo da poter interagire con il tuo cluster EKS.

Kubectl è l'interfaccia della riga di comando per Kubernetes. Con Kubectl puoi gestire le applicazioni in esecuzione su cluster Kubernetes. Kubectl non è installato per impostazione predefinita sui sistemi Linux e MacOS. Puoi installare Kubectl su altri sistemi seguendo le istruzioni sul sito Web di Kubernetes.

10. Esegui il comando seguente per scaricare il binario kubectl. Un binario è un file di computer con estensione ".bin", eseguibile solo su determinati tipi di computer. È un modo semplice per diversi tipi di computer di condividere file. Usiamo kubectl binary perché il kubectl binary è indipendente dalla piattaforma. Funzionerà su qualsiasi sistema in grado di eseguire un sistema operativo simile a Unix, inclusi Linux e Mac OS.

curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.16.8/2020-04-16/bin/linux/amd64/kubectl

11. Esegui il comando chmod di seguito per rendere eseguibile il binario kubectl. Il comando chmod è un comando Unix e Linux utilizzato per modificare i permessi di accesso a file o directory. Il comando Linux chmod utilizza il sistema numerico ottale per specificare i permessi per ciascun utente. Kubectl ora può essere utilizzato sul tuo computer locale.

chmod +x ./kubectl

12. Eseguire il comando seguente per creare una directory kubectl nella cartella $HOME/bin e copiarvi il file binario kubectl. Il comando mkdir -p $HOME/bin crea una sottodirectory bin all'interno della tua home directory. Il comando mkdir viene utilizzato per creare nuove directory o cartelle. L'opzione -p dice al comando mkdir di creare automaticamente tutte le directory principali necessarie per la nuova directory. $HOME/bin è una variabile di ambiente che memorizza il percorso della directory home. Ogni utente Linux ha la directory $HOME/bin nel proprio file system. Il costrutto &&è chiamato operatore AND logico. Viene utilizzato per raggruppare i comandi in modo che più di un comando possa essere eseguito contemporaneamente. Il costrutto &&non è necessario per il funzionamento di questo comando, ma è disponibile come best practice.

Il comando cp ./kubectl $HOME/bin/kubectl copia il file binario kubectl locale nella directory kubectl e rinomina il file in kubectl. Infine, il comando export fa quello che dice:esporta una variabile d'ambiente nella memoria della shell in modo che possa essere utilizzata da qualsiasi programma eseguito da questa shell. Nel nostro caso, dobbiamo dire a kubectl dove si trova la nostra directory kubectl in modo che possa trovare il binario kubectl.

mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$PATH:$HOME/bin

13. Eseguire il comando kubectl version di seguito per verificare che kubectl sia installato correttamente. Il comando kubectl version --short --client restituisce una versione ridotta della versione kubectl in una risposta dell'API REST Kubernetes ben formattata e leggibile. L'opzione --client consente a kubectl di stampare la versione formattata della risposta dell'API REST di Kubernetes, che è coerente tra le versioni.

L'opzione --short dice a kubectl di fornire le informazioni di base in una forma compatta con una cifra decimale per i float e un formato dell'ora abbreviato che è lo stesso di --format. Dovresti vedere un output come quello qui sotto. Questo output ci dice che abbiamo installato correttamente kubectl e che sta utilizzando la versione corretta.

L'ultima cosa che devi fare in questa sezione è configurare lo strumento eksctl cli per utilizzare il tuo cluster Amazon EKS. Lo strumento eksctl cli è un'interfaccia a riga di comando in grado di gestire i cluster Amazon EKS. Può generare credenziali del cluster, aggiornare le specifiche del cluster, creare o eliminare nodi di lavoro ed eseguire molte altre attività.

14. Esegui i seguenti comandi per installare lo strumento eksctl cli e verificarne la versione.

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
eksctl version

Fornitura di un cluster EKS

Ora che disponi di EC2 e degli strumenti AWS CLI, puoi effettuare il provisioning del tuo primo cluster EKS.

1. Esegui il comando eksctl create cluster di seguito per eseguire il provisioning di un cluster denominato dev nella regione us-east-1 con un master e tre nodi core.

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

Il comando eksctl create cluster crea un cluster EKS nella regione us-east-1 utilizzando i valori predefiniti consigliati da Amazon per questa configurazione specifica e passa tutti gli argomenti tra virgolette ( " ) o come variabili ( ${ } ) di conseguenza.

Il parametro name viene utilizzato per definire il nome di questo cluster EKS ed è solo un'etichetta semplice per comodità. version è la versione che desideri venga utilizzata dal cluster, per questo esempio ci atterremo a Kubernetes v1.21.2 ma sentiti libero di esplorare anche altre opzioni.

nomegruppo-nodo è il nome di un gruppo di nodi che questo cluster deve utilizzare per gestire i nodi di lavoro. In questo esempio, manterrai le cose semplici e utilizzerai solo lavoratori standard, il che significa che i tuoi nodi di lavoro avranno una vCPU e 3 GB di memoria per impostazione predefinita.

nodes è il numero totale di nodi di lavoro principali che desideri nel tuo cluster. In questo esempio sono richiesti tre nodi. nodes-min e nodes-max controllano il numero minimo e massimo di nodi consentiti nel tuo cluster. In questo esempio, verrà creato almeno uno ma non più di quattro nodi di lavoro.

2. Puoi accedere alla tua console CloudFormation per monitorare l'avanzamento del provisioning.

Come mostrato di seguito, puoi vedere che il tuo stack di sviluppo è in fase di creazione.

3. Fare clic sul collegamento ipertestuale dello stack di sviluppo> Evento. Verrà visualizzato un elenco di eventi relativi al processo di creazione. Attendi il completamento del processo di provisioning (questo può richiedere fino a 15 minuti a seconda delle circostanze specifiche) e controlla lo stato dello stack nella console di CloudFormation.

4. Dopo aver atteso il completamento del provisioning dello stack, accedi alla console CloudFormation, vedrai lo stato dello stack di sviluppo di CREATE_COMPLETE.

Ora vai alla tua console EC2. Vedrai un nodo master e tre nodi principali nel dashboard EC2. Questo output conferma che hai impostato correttamente il cluster EKS.

5. Esegui il comando eksctl di seguito per ottenere i dettagli del cluster di sviluppo, come l'ID cluster e la regione.

eksctl get cluster

6. Eseguire il comando aws eks update di seguito per ottenere le credenziali del nodo di lavoro remoto. Questo comando deve essere eseguito su qualsiasi computer che desideri connettere al cluster. Scarica le credenziali per il tuo kubectl per accedere a EKS Kubernetes Cluster da remoto, senza utilizzare le chiavi di accesso di AWS Access.

aws eks update-kubeconfig --name dev --region us-east-1

Distribuzione dell'applicazione nel cluster EKS

Ora che hai eseguito il provisioning del tuo cluster EKS. Distribuiamo la tua prima applicazione nel tuo cluster EKS. In questa sezione imparerai come distribuire un server web nginx insieme a un sistema di bilanciamento del carico come applicazione di esempio.

1. Esegui il comando seguente per installare git sul tuo sistema. Avrai bisogno di git per clonare il codice del server web nginx da GitHub.

sudo yum install -y git 

2. Esegui il comando git clone di seguito per clonare il codice del server web nginx da github alla directory corrente.

git clone https://github.com/ata-aws-iam/htf-elk.git

3. Esegui il comando cd htf-elk per cambiare la directory di lavoro nella directory dei file di configurazione di nginx.

cd htf-elk

4. Eseguire il comando ls per elencare i file nella directory corrente.

ls

Vedrai i seguenti file presenti nella tua directory nginx.

5. Esegui il comando cat di seguito per aprire il file nginx-deployment.yaml e vedrai i seguenti contenuti presenti in quel file.

cat nginx-deployment.yaml

  • apiVersion:apps/v1 è l'API Kubernetes principale
  • kind:la distribuzione è il tipo di risorsa che verrà creata per questo file. In una distribuzione, viene creato un pod per contenitore.
  • metadati:specifica i valori dei metadati da utilizzare durante la creazione di un oggetto
  • name:nginx-deployment è il nome o l'etichetta per questa distribuzione. Se non ha valore, il nome della distribuzione viene preso dal nome della directory.
  • etichette:fornisce etichette per l'applicazione. In questo caso, verrà utilizzato per l'instradamento del servizio tramite Elastic Load Balancing (ELB)
  • env:dev descrive una variabile di ambiente definita da un valore stringa. Ecco come puoi fornire dati di configurazione dinamici al tuo container.
  • spec:è dove definisci quante repliche creare. Puoi specificare le proprietà su cui desideri basare ciascuna replica.
  • replica:3 creerà tre replicanti di questo pod sul tuo cluster. Questi verranno distribuiti sui nodi di lavoro disponibili che corrispondono al selettore di etichette .
  • containerPort:80 mapperà una porta dal container a una porta sull'host. In questo caso, mapperà la porta 80 sul container alla porta 30000 della tua macchina locale.

6. Esegui il comando cat di seguito per aprire il file di servizio nginx-svc.yaml. Vedrai i seguenti contenuti presenti in quel file.

cat nginx-svc.yaml

7. Esegui il comando kubectl apply di seguito per creare il servizio nginx nel tuo cluster Kubernetes. Il cluster EKS impiegherà alcuni minuti per eseguire il provisioning di ELB per questo servizio.

kubectl apply -f ./nginx-svc.yaml

8. Esegui il servizio kubectl get di seguito per ottenere i dettagli sul servizio nginx che hai appena creato.

kubectl get service

Otterrai il seguente output. ClusterIP è l'IP interno di kubernetes assegnato a questo servizio. Il nome ELB LoadBalancer è un identificatore univoco per questo servizio. Creerà automaticamente un ELB su AWS e fornirà un endpoint pubblico per questo servizio che può essere raggiunto da servizi a tua scelta come browser Web (nome di dominio) o client API. È accessibile tramite un indirizzo IP a tua scelta.

Load Balancer ELB con nome a6f8c3cf0fe3a468d8828db6059ef05e-953361268.us-east-1.elb.amazonaws.com ha la porta 32406, che sarà mappata alla porta del container 80. Annotare il nome host DNS dell'ELB del load balancer dall'output; ti servirà per accedere al servizio in seguito.

9. Esegui il comando kubectl apply riportato di seguito per applicare la distribuzione per il tuo cluster.

kubectl apply -f ./nginx-deployment.yaml

10. Esegui la distribuzione kubectl get per ottenere i dettagli sulla distribuzione nginx appena creata.

kubectl get deployment

11. Esegui il comando seguente per accedere alla tua applicazione nginx tramite il sistema di bilanciamento del carico. Vedrai la pagina di benvenuto di nginx nel tuo terminale/console, che conferma che la tua applicazione nginx funziona come previsto. Sostituisci con il nome host DNS del sistema di bilanciamento del carico che hai annotato sopra.

curl "<LOAD_BALANCER_DNS_HOSTNAME>"

12. Puoi anche accedere alla tua applicazione nginx tramite il browser copiando e incollando il nome host DNS del sistema di bilanciamento del carico nel browser.

Verifica della funzionalità Highly Available(HA) per il tuo cluster

Ora che hai creato correttamente il tuo cluster, puoi testare la funzionalità HA per assicurarti che funzioni come previsto.

Kubernetes supporta implementazioni multi-nodo con l'uso di controller speciali che lavorano in tandem per creare e gestire pod o servizi replicati. Alcuni di questi controller sono Deployments, ReplicationController, Job e DaemonSet.

Un controller di distribuzione viene utilizzato per controllare la replica sul pod o sul livello di servizio. Quando il tuo pod ha esaurito le risorse, eliminerà tutti i pod di quel controller di replica (tranne quello in esecuzione sul nodo master) e creerà nuove repliche di questo pod. Questo ti aiuterà a ottenere tempi di attività molto elevati per tutte le tue applicazioni.

1. Accedi alla dashboard EC2 e interrompi tutti e tre i nodi di lavoro.

2. Esegui il comando seguente per controllare lo stato dei tuoi pod. Otterrai diversi stati:Terminazione , In esecuzione e In attesa per tutti i tuoi baccelli. Perché una volta arrestati tutti i nodi di lavoro, EKS cercherà di riavviare tutti i nodi di lavoro e i pod. Puoi anche vedere alcuni nuovi nodi, che puoi identificare in base alla sua età (50 anni ).

kubectl get pod

Ci vuole del tempo per avviare la nuova istanza EC2 e i pod. Una volta che tutti i nodi di lavoro sono stati avviati, vedrai tutte le nuove istanze EC2 tornare a In esecuzione stato.

3. Esegui nuovamente il servizio kubectl get. Puoi vedere che ESK creerà un nuovo servizio nginx e un nuovo nome DNS per il tuo sistema di bilanciamento del carico.

kubectl get service 

Copia e incolla il nuovo DNS nel tuo browser. Riceverai di nuovo il benvenuto dalla pagina di Nginx. Questo output conferma che il tuo HA funziona come previsto.

Conclusione

In questo articolo, hai appreso come configurare il tuo cluster EKS. Hai anche verificato che la funzionalità ad alta disponibilità funziona arrestando tutti i tuoi nodi di lavoro e controllando lo stato dei tuoi pod. Ora dovresti essere in grado di creare e gestire cluster EKS usando kubectl.


Linux
  1. Come distribuire il tuo primo pod su un cluster Kubernetes

  2. Come creare un database in MySQL con MySQL Workbench

  3. Imposta il cluster Kubernetes con Rancher

  4. Come creare una Vm da zero con Virsh?

  5. Come installare awscli

Come creare un Application Load Balancer su AWS

Come creare una coda SQS su AWS

Come creare una tabella DynamoDB in AWS

Come distribuire il cluster Kubernetes su AWS con Amazon EKS

Come creare documenti con gli script Bash

Come creare un e-commerce con Magento