Crea nodi autogestiti Bottlerocket - Amazon EKS

Contribuisci a migliorare questa pagina

Per contribuire a questa guida per l’utente, seleziona il link Edit this page on GitHub che si trova nel riquadro destro di ogni pagina.

Crea nodi autogestiti Bottlerocket

Nota

I gruppi di nodi gestiti potrebbero offrire alcuni vantaggi per il tuo caso d’uso. Per ulteriori informazioni, consulta Semplifica il ciclo di vita dei nodi con gruppi di nodi gestiti.

Questo argomento descrive l’avvio di gruppi Auto Scaling di nodi Bottlerocket che si registrano con il cluster Amazon EKS. Bottlerocket è un sistema operativo open source basato su Linux creato da AWS che può essere utilizzato per l’esecuzione di container su macchine virtuali o host bare metal. Dopo che i nodi vengono aggiunti al cluster, puoi implementare applicazioni Kubernetes per gli stessi. Per ulteriori informazioni su Bottlerocket, consultare Utilizzo di un’AMI Bottlerocket con Amazon EKS su GitHub e Supporto AMI personalizzata nella documentazione eksctl.

Per informazioni sugli aggiornamenti sul posto, consultare Operatore aggiornamenti Bottlerocket su GitHub.

Importante
  • I nodi Amazon EKS sono istanze Amazon EC2 standard e la loro fatturazione è basata sui normali prezzi dell’istanza Amazon EC2. Per ulteriori informazioni, consulta Prezzi di Amazon EC2.

  • Puoi avviare nodi Bottlerocket nei cluster estesi di Amazon EKS su AWS Outposts, ma non nei cluster locali su AWS Outposts. Per ulteriori informazioni, consulta Implementazione di Amazon EKS on-premises con AWS Outposts.

  • Puoi eseguire l’implementazione su istanze Amazon EC2 con processori x86 o Arm. Tuttavia, non puoi eseguire l’implementazione su istanze con chip Inferentia.

  • Bottlerocket è compatibile con AWS CloudFormation. Tuttavia, non esiste un modello ufficiale di CloudFormation che possa essere copiato per implementare nodi Bottlerocket per Amazon EKS.

  • Le immagini Bottlerocket non vengono fornite con un server SSH o una shell. È possibile utilizzare metodi di accesso fuori banda per consentire a SSH di abilitare il container amministratore e passare alcuni passaggi di configurazione di bootstrap con i dati utente. Per ulteriori informazioni, consulta queste sezioni di bottlerocket README.md su GitHub:

Questa procedura richiede eksctl versione 0.214.0 o successiva. Puoi verificare la versione con il comando seguente:

eksctl version

Per istruzioni su come installare o aggiornare eksctl, consulta Installazione nella documentazione eksctl. NOTA: questa procedura funziona solo per i cluster creati con eksctl.

  1. Copia i seguenti contenuti sul dispositivo. Sostituisci my-cluster con il nome del tuo cluster. Il nome può contenere solo caratteri alfanumerici (con distinzione tra lettere maiuscole e minuscole) e trattini. Deve iniziare con un carattere alfanumerico e non può avere una lunghezza superiore a 100 caratteri. Il nome deve essere univoco all’interno della Regione AWS e dell’account AWS in cui stai creando il cluster. Sostituisci ng-bottlerocket con un nome per il gruppo di nodi. Il nome del gruppo di nodi non può contenere più di 63 caratteri. Deve iniziare con una lettera o un numero, ma può anche includere trattini e caratteri di sottolineatura. Per eseguire l’implementazione su istanze Arm, sostituisci m5.large con un tipo di istanza Arm. Sostituisci my-ec2-keypair-name con il nome di una coppia di chiavi SSH Amazon EC2 che puoi utilizzare per connetterti utilizzando SSH nei nodi dopo l’avvio. Se non hai già una coppia di chiavi Amazon EC2, puoi crearla nella Console di gestione AWS. Per ulteriori informazioni, consulta la sezione relativa alle coppie di chiavi Amazon EC2 nella Guida per l’utente di Amazon EC2. Sostituisci tutti i valori esemplificativi rimanenti con i valori in tuo possesso. Dopo aver effettuato le sostituzioni, esegui il comando modificato per creare il file bottlerocket.yaml.

    Se specifichi un tipo di istanza Amazon EC2 Arm, esamina le considerazioni in Amazon EKS optimized Arm Amazon Linux AMIs prima dell’implementazione. Per istruzioni su come implementare utilizzando un’AMI personalizzata, consultare Creare una build Bottlerocket su GitHub e Supporto AMI personalizzata nella documentazione eksctl. Per implementare un gruppo di nodi gestito, implementare un’AMI personalizzata utilizzando un modello di avvio. Per ulteriori informazioni, consulta Personalizzazione dei nodi gestiti con modelli di avvio.

    Importante

    Per implementare un gruppo di nodi sulle sottoreti AWS Outposts, AWS Wavelength o AWS Local Zone, non passare le sottoreti AWS Outposts, AWS Wavelength o AWS Local Zone al momento della creazione del cluster. È necessario specificare le sottoreti nell’esempio seguente. Per ulteriori informazioni, vedere Creare un gruppo di nodi da un file di configurazione e lo Schema del file config nella documentazione su eksctl. Sostituisci region-code con la Regione AWS in cui si trova il cluster.

    cat >bottlerocket.yaml <<EOF --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-cluster region: region-code version: '1.33' iam: withOIDC: true nodeGroups: - name: ng-bottlerocket instanceType: m5.large desiredCapacity: 3 amiFamily: Bottlerocket ami: auto-ssm iam: attachPolicyARNs: - arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy - arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly - arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy ssh: allow: true publicKeyName: my-ec2-keypair-name EOF
  2. Implementare i nodi mediante il comando seguente.

    eksctl create nodegroup --config-file=bottlerocket.yaml

    Di seguito viene riportato un output di esempio:

    Durante la creazione dei nodi vengono generate diverse righe. Una delle ultime righe di output è simile alla seguente riga di esempio.

    [✔] created 1 nodegroup(s) in cluster "my-cluster"
  3. (Facoltativo) Creare un volume persistente Kubernetes su un nodo Bottlerocket usando il plug-in CSI di Amazon EBS. Il driver Amazon EBS di default si basa su strumenti di file system che non sono inclusi in Bottlerocket. Per ulteriori informazioni sulla creazione di una classe di archiviazione utilizzando il driver, consultare Utilizzare il volume di archiviazione Kubernetes con Amazon EBS.

  4. (Facoltativo) Per impostazione predefinita kube-proxy imposta il parametro kernel nf_conntrack_max su un valore predefinito che può differire da quello che Bottlerocket imposta originariamente all’avvio. Per mantenere l’impostazione di default di Bottlerocket, modifica la configurazione kube-proxy con il comando seguente.

    kubectl edit -n kube-system daemonset kube-proxy

    Aggiungi --conntrack-max-per-core e --conntrack-min agli argomenti kube-proxy nell’esempio seguente. Un’impostazione di 0 non implica alcun cambiamento.

    containers: - command: - kube-proxy - --v=2 - --config=/var/lib/kube-proxy-config/config - --conntrack-max-per-core=0 - --conntrack-min=0
  5. (Facoltativo) implementare un’applicazione di esempio per testare i nodi Bottlerocket.

  6. Consigliamo di bloccare l’accesso dei pod a IMDS se si verificano le seguenti condizioni:

    • Prevedi di assegnare ruoli IAM a tutti gli account del servizio Kubernetes in modo che i pod dispongano solo delle autorizzazioni minime necessarie.

    • Nessun pod nel cluster richiede l’accesso al servizio di metadati di istanza (IMDS) di Amazon EC2 per altri motivi, come un recupero della Regione AWS attuale.

    Per ulteriori informazioni, consulta Limita l’accesso al profilo dell’istanza assegnato al nodo (worker).