Gruppi di nodi gestiti da EKS - Guida per l'utente di Eksctl

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Gruppi di nodi gestiti da EKS

I gruppi di nodi gestiti di Amazon EKS sono una funzionalità che automatizza il provisioning e la gestione del ciclo di vita dei nodi (istanzeEC2 ) per i cluster Amazon EKS Kubernetes. I clienti possono fornire gruppi di nodi ottimizzati per i propri cluster ed EKS manterrà i nodi aggiornati con le ultime versioni di Kubernetes e del sistema operativo host.

Un gruppo di nodi gestiti EKS è un gruppo con scalabilità automatica e EC2 istanze associate gestite da AWS per un cluster Amazon EKS. Ogni gruppo di nodi utilizza l'AMI Amazon Linux 2 ottimizzata per Amazon EKS. Amazon EKS semplifica l'applicazione di correzioni di bug e patch di sicurezza ai nodi, nonché l'aggiornamento alle versioni più recenti di Kubernetes. Ogni gruppo di nodi avvia un gruppo di scalabilità automatica per il cluster, che può estendersi su più zone di disponibilità e sottoreti AWS VPC per un'elevata disponibilità.

NOVITÀ Supporto di Launch Template per gruppi di nodi gestiti

Nota

Il termine «gruppi di nodi non gestiti» è stato usato per riferirsi ai gruppi di nodi che eksctl ha supportato sin dall'inizio (rappresentati tramite il campo). nodeGroups Il ClusterConfig file continua a utilizzare il nodeGroups campo per definire i gruppi di nodi non gestiti e i gruppi di nodi gestiti vengono definiti con il campo. managedNodeGroups

Creazione di gruppi di nodi gestiti

$ eksctl create nodegroup

Nuovi cluster

Per creare un nuovo cluster con un gruppo di nodi gestito, esegui

eksctl create cluster

Per creare più gruppi di nodi gestiti e avere un maggiore controllo sulla configurazione, è possibile utilizzare un file di configurazione.

Nota

I gruppi di nodi gestiti non hanno una parità di funzionalità completa con i gruppi di nodi non gestiti.

# cluster.yaml # A cluster with two managed nodegroups --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: managed-cluster region: us-west-2 managedNodeGroups: - name: managed-ng-1 minSize: 2 maxSize: 4 desiredCapacity: 3 volumeSize: 20 ssh: allow: true publicKeyPath: ~/.ssh/ec2_id_rsa.pub # new feature for restricting SSH access to certain AWS security group IDs sourceSecurityGroupIds: ["sg-00241fbb12c607007"] labels: {role: worker} tags: nodegroup-role: worker iam: withAddonPolicies: externalDNS: true certManager: true - name: managed-ng-2 instanceType: t2.large minSize: 2 maxSize: 3

Un altro esempio di file di configurazione per la creazione di un gruppo di nodi gestito è disponibile qui.

È possibile avere un cluster con gruppi di nodi gestiti e non gestiti. I gruppi di nodi non gestiti non vengono visualizzati nella console AWS EKS ma eksctl get nodegroup elencheranno entrambi i tipi di gruppi di nodi.

# cluster.yaml # A cluster with an unmanaged nodegroup and two managed nodegroups. --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: managed-cluster region: us-west-2 nodeGroups: - name: ng-1 minSize: 2 managedNodeGroups: - name: managed-ng-1 minSize: 2 maxSize: 4 desiredCapacity: 3 volumeSize: 20 ssh: allow: true publicKeyPath: ~/.ssh/ec2_id_rsa.pub # new feature for restricting SSH access to certain AWS security group IDs sourceSecurityGroupIds: ["sg-00241fbb12c607007"] labels: {role: worker} tags: nodegroup-role: worker iam: withAddonPolicies: externalDNS: true certManager: true - name: managed-ng-2 instanceType: t2.large privateNetworking: true minSize: 2 maxSize: 3

NUOVO Supporto per AMI personalizzate, gruppi di sicurezza instancePrefixinstanceName,ebsOptimized,volumeType,volumeName,volumeEncrypted,volumeKmsKeyID,volumeIOPS,maxPodsPerNode,preBootstrapCommands,overrideBootstrapCommand, e disableIMDSv1

# cluster.yaml # A cluster with a managed nodegroup with customization. --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: managed-cluster region: us-west-2 managedNodeGroups: - name: custom-ng ami: ami-0e124de4755b2734d securityGroups: attachIDs: ["sg-1234"] maxPodsPerNode: 80 ssh: allow: true volumeSize: 100 volumeName: /dev/xvda volumeEncrypted: true # defaults to true, which enforces the use of IMDSv2 tokens disableIMDSv1: false overrideBootstrapCommand: | #!/bin/bash /etc/eks/bootstrap.sh managed-cluster --kubelet-extra-args '--node-labels=eks.amazonaws.com/nodegroup=custom-ng,eks.amazonaws.com/nodegroup-image=ami-0e124de4755b2734d'

Se stai richiedendo un tipo di istanza disponibile solo in una zona (e la configurazione eksctl richiede la specificazione di due) assicurati di aggiungere la zona di disponibilità alla richiesta del tuo gruppo di nodi:

# cluster.yaml # A cluster with a managed nodegroup with "availabilityZones" --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: flux-cluster region: us-east-2 version: "1.23" availabilityZones: ["us-east-2b", "us-east-2c"] managedNodeGroups: - name: workers instanceType: hpc6a.48xlarge minSize: 64 maxSize: 64 labels: { "fluxoperator": "true" } availabilityZones: ["us-east-2b"] efaEnabled: true placement: groupName: eks-efa-testing

Questo può essere vero, ad esempio, per tipi come la famiglia Hpc6 che sono disponibili solo in una zona.

Cluster esistenti

eksctl create nodegroup --managed

Suggerimento: se utilizzi un ClusterConfig file per descrivere l'intero cluster, descrivi il nuovo gruppo di nodi gestiti nel managedNodeGroups campo ed esegui:

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

Aggiornamento dei gruppi di nodi gestiti

Puoi aggiornare un nodegroup all'ultima versione di release AMI ottimizzata per EKS per il tipo di AMI che stai utilizzando in qualsiasi momento.

Se il tuo nodegroup è la stessa versione di Kubernetes del cluster, puoi eseguire l'aggiornamento all'ultima versione dell'AMI per quella versione di Kubernetes del tipo di AMI che stai utilizzando. Se il tuo nodegroup è la versione di Kubernetes precedente alla versione Kubernetes del cluster, puoi aggiornare il nodegroup all'ultima versione dell'AMI che corrisponde alla versione Kubernetes del nodegroup o eseguire l'aggiornamento all'ultima versione dell'AMI che corrisponde alla versione Kubernetes del cluster. Non puoi ripristinare un nodegroup a una versione precedente di Kubernetes.

Per aggiornare un nodegroup gestito all'ultima versione dell'AMI release:

eksctl upgrade nodegroup --name=managed-ng-1 --cluster=managed-cluster

Il nodegroup può essere aggiornato all'ultima versione AMI per una versione di Kubernetes specificata utilizzando:

eksctl upgrade nodegroup --name=managed-ng-1 --cluster=managed-cluster --kubernetes-version=<kubernetes-version>

Per eseguire l'aggiornamento a una versione di rilascio AMI specifica anziché alla versione più recente, passa--release-version:

eksctl upgrade nodegroup --name=managed-ng-1 --cluster=managed-cluster --release-version=1.19.6-20210310
Nota

Se i nodi gestiti vengono distribuiti utilizzando l'AMI personalizzata AMIs, è necessario seguire il seguente flusso di lavoro per distribuire una nuova versione dell'AMI personalizzata.

  • la distribuzione iniziale del nodegroup deve essere eseguita utilizzando un modello di avvio. ad es.

    managedNodeGroups: - name: launch-template-ng launchTemplate: id: lt-1234 version: "2" #optional (uses the default version of the launch template if unspecified)
  • crea una nuova versione dell'AMI personalizzata (utilizzando la console AWS EKS).

  • crea una nuova versione del modello di lancio con il nuovo ID AMI (utilizzando la console AWS EKS).

  • aggiorna i nodi alla nuova versione del modello di lancio. ad es.

    eksctl upgrade nodegroup --name nodegroup-name --cluster cluster-name --launch-template-version new-template-version

Gestione degli aggiornamenti paralleli per i nodi

È possibile aggiornare più nodi gestiti contemporaneamente. Per configurare gli aggiornamenti paralleli, definisci il nodegroup durante la creazione updateConfig del nodegroup. Un esempio updateConfig può essere trovato qui.

Per evitare interruzioni dei carichi di lavoro dovute all'aggiornamento di più nodi contemporaneamente, puoi limitare il numero di nodi che possono diventare non disponibili durante un aggiornamento specificandolo nel campo di un. maxUnavailable updateConfig In alternativa, usamaxUnavailablePercentage, che definisce il numero massimo di nodi non disponibili come percentuale del numero totale di nodi.

Nota che maxUnavailable non può essere superiore amaxSize. Inoltre, maxUnavailable maxUnavailablePercentage non può essere utilizzato contemporaneamente.

Questa funzionalità è disponibile solo per i nodi gestiti.

Aggiornamento dei gruppi di nodi gestiti

eksctlconsente di aggiornare la UpdateConfigsezione di un gruppo di nodi gestito. Questa sezione definisce due campi. MaxUnavailableeMaxUnavailablePercentage. I tuoi gruppi di nodi non vengono modificati durante l'aggiornamento, quindi non dovrebbero essere previsti tempi di inattività.

Il comando update nodegroup deve essere usato con un file di configurazione usando il flag. --config-file Il nodegroup deve contenere una sezione. nodeGroup.updateConfig Ulteriori informazioni possono essere trovate qui.

Problemi di Nodegroup Health

EKS Managed Nodegroups controlla automaticamente la configurazione del gruppo di nodi e dei nodi per rilevare eventuali problemi di salute e li segnala tramite l'API e la console EKS. Per visualizzare i problemi di salute di un nodegroup:

eksctl utils nodegroup-health --name=managed-ng-1 --cluster=managed-cluster

Gestione delle etichette

EKS Managed Nodegroups supporta l'aggiunta di etichette applicate ai nodi Kubernetes nel nodegroup. Questo viene specificato tramite il labels campo in eksctl durante la creazione di cluster o gruppi di nodi.

Per impostare nuove etichette o aggiornare le etichette esistenti su un gruppo di nodi:

eksctl set labels --cluster managed-cluster --nodegroup managed-ng-1 --labels kubernetes.io/managed-by=eks,kubernetes.io/role=worker

Per annullare l'impostazione o rimuovere le etichette da un gruppo di nodi:

eksctl unset labels --cluster managed-cluster --nodegroup managed-ng-1 --labels kubernetes.io/managed-by,kubernetes.io/role

Per visualizzare tutte le etichette impostate su un gruppo di nodi:

eksctl get labels --cluster managed-cluster --nodegroup managed-ng-1

Ridimensionamento dei gruppi di nodi gestiti

eksctl scale nodegroupsupporta anche i gruppi di nodi gestiti. La sintassi per scalare un gruppo di nodi gestito o non gestito è la stessa.

eksctl scale nodegroup --name=managed-ng-1 --cluster=managed-cluster --nodes=4 --nodes-min=3 --nodes-max=5

Ulteriori informazioni