Come posso risolvere i problemi relativi alla creazione di un profilo AWS Fargate?

Ultimo aggiornamento: 04-11-2021

Ho domande sulla creazione di un profilo AWS Fargate. In alternativa, sto riscontrando problemi nella creazione di un profilo AWS Fargate. In che modo posso risolvere il problema?

Breve descrizione

Un profilo Fargate è un meccanismo per specificare quali pod devono essere pianificati sui nodi Fargate in un cluster Amazon Elastic Kubernetes Service (Amazon EKS).

Un profilo Fargate ha dei selettori che sono abbinati a tutti i file YAML delle specifiche del pod in ingresso. Se la corrispondenza ha esito positivo e vengono soddisfatte le considerazioni di AWS Fargate, il pod viene pianificato sui nodi Fargate utilizzando le sottoreti e il ruolo AWS Identity and Access Management (IAM) specificato nel profilo Fargate.

Alcune delle regole di posizionamento dei pod sono le seguenti:

  • Se hai configurato sia lo spazio dei nomi che le etichette di corrispondenza per i selettori di pod:
    Il flusso di lavoro di Fargate considera il pod abbinato a un profilo Fargate solo se entrambe le condizioni (spazio dei nomi ed etichette) corrispondono alle specifiche del contenitore.
  • Se sono stati specificati più selettori pod all'interno di un singolo profilo Fargate:
    Quando un pod corrisponde a uno di questi selettori, viene pianificato dallo scheduler di Fargate su un nodo Fargate utilizzando i dati del profilo Fargate corrispondente.
  • Se la specifica di un pod corrisponde a più profili Fargate:
    Il pod è pianificato in base a un profilo Fargate casuale, a meno che la seguente annotazione non sia specificata nella specifica del pod: eks.amazonaws.com/fargate-profile:<fp_name>.

Tieni conto dei seguenti limiti nella creazione di un profilo Fargate:

  • Puoi creare fino a dieci profili Fargate per cluster.
  • Puoi avere fino a cinque selettori per profilo Fargate.
  • Puoi avere fino a cinque coppie di etichette per selettore.

Risoluzione

Di seguito sono riportati gli scenari e i problemi comuni riscontrati durante la creazione di un profilo Fargate:

Come posso creare un profilo Fargate per programmare i pod sui nodi Fargate?

Puoi utilizzare la console Amazon EKS, AWS Command Line Interface (AWS CLI), SDK o API (CloudFormation/EKSCTL e così via) per creare un profilo Fargate.

Come posso creare un profilo Fargate utilizzando AWS CloudFormation?

Puoi utilizzare il tipo di risorsa AWS::EKS::FargateProfile CloudFormation per creare un profilo Fargate.

Tuttavia, se non stai creando gruppi di nodi Amazon Elastic Compute Cloud (Amazon EC2) insieme ai nodi Fargate, i componenti aggiuntivi di coredns hanno la seguente annotazione per impostazione predefinita:

eks.amazonaws.com/compute-type : ec2

Per modificare le annotazioni di coredns, devi applicare una patch alla distribuzione esternamente. Puoi farlo dal terminale in cui gestisci il tuo cluster EKS. In alternativa, puoi utilizzare una risorsa personalizzata CloudFormation per automatizzare questo processo in base al tuo caso d'uso.

Nota: è consigliabile utilizzare eksctl per creare/aggiornare i cluster EKS perché semplifica l'amministrazione delle risorse del cluster.

Qual è il ruolo di esecuzione del pod che deve essere incluso nel profilo Fargate?

Il ruolo di esecuzione del pod è un ruolo IAM utilizzato dal nodo Fargate per effettuare chiamate API AWS. Queste includono chiamate effettuate per recuperare immagini Amazon Elastic Container Registry (Amazon ECR) come VPC CNI, CoreDNS e così via. La politica gestita da AmazonEKSFargatePodExecutionRolePolicy deve essere associata a questo ruolo.

Kubelet sul nodo Fargate utilizza questo ruolo IAM per comunicare con il server API. Questo ruolo deve essere incluso nella aws-auth configmap affinché kubelet possa autenticarsi con il server API. Quando crei un profilo Fargate, il flusso di lavoro di Fargate aggiunge automaticamente questo ruolo ad aws-auth configmap del cluster.

Se i tuoi nodi Fargate vengono visualizzati come “Not Ready” (Non pronti), assicurati che il ruolo di esecuzione del pod sia incluso in aws-auth.

Di seguito è riportato uno snippet di esempio di aws-auth mapRoles dopo la creazione di un profilo Fargate con un ruolo di esecuzione pod:

mapRoles: |   
    - groups:
      - system:bootstrappers
      - system:nodes
      - system:node-proxier
      rolearn: <Pod_execution_role_ARN>
      username: system:node:{{SessionName}}

Se aws-auth configmap viene modificato dopo la creazione del profilo Fargate, potresti ricevere il seguente avviso durante la pianificazione dei pod sui nodi Fargate:

Pod provisioning timed out (will retry) for pod: <pod_nginx>

Sto pianificando la migrazione di carichi di lavoro in EKS Fargate. Come faccio a creare sottoreti e gruppi di sicurezza per l'utilizzo?

EKS Fargate supporta attualmente solo sottoreti private. Ciò significa che non esiste un instradamento predefinito verso il gateway Internet all'interno delle tabelle di routing collegate alle sottoreti specificate nel tuo profilo Fargate. Pertanto, puoi avere un gateway NAT o endpoint VPC configurati per le sottoreti che si intende utilizzare per il profilo di Fargate.

Il gruppo di sicurezza del cluster è collegato per impostazione predefinita ai nodi Fargate. Non è necessario effettuare il provisioning di un gruppo di sicurezza specifico per questo scopo. Inoltre, se si utilizzano endpoint VPC per le sottoreti, assicurati che il cluster abbia attivato l'accesso agli endpoint privati.

Assicurati che il gruppo di sicurezza collegato agli endpoint VPC abbia una regola in entrata che consente il traffico della porta HTTPS 443 dal CIDR VPC del cluster.

Sto creando profili Fargate utilizzando un provisioner basato su API come Terraform o AWS CloudFormation. Perché i miei profili Fargate stanno entrando nello stato CREATE_FAILED.

È possibile creare o eliminare un solo profilo Fargate alla volta. Quindi, se stai eliminando un profilo Fargate, non è possibile creare o eliminare contemporaneamente nessun altro profilo Fargate.

Durante l'utilizzo di un provisioner basato su API, come CloudFormation, assicurati che la creazione di un profilo Fargate inizi dopo che tutti gli altri profili Fargate sono stati creati correttamente. Puoi creare una gerarchia simile a una catena tra i profili Fargate utilizzando l'attributo DependsOn in modo che la creazione e l'eliminazione siano sequenziali. Se le richieste non sono sequenziali, potresti ricevere un errore simile al seguente:

Cannot create Fargate Profile <fp_name1> because cluster <cluster_name> currently has Fargate profile <fp_name2> in status CREATING

Posso specificare le risorse (CPU, memoria) di cui eseguire il provisioning per i nodi Fargate all'interno del profilo Fargate?

Non puoi specificare direttamente la quantità di risorse da fornire all'interno del profilo Fargate. È consigliabile specificare le richieste di risorse all'interno del file YAML delle specifiche del pod Fargate. Ciò consente al flusso di lavoro di Fargate di assegnare almeno quella quantità di risorse per il pod.

La quantità di vCPU o di memoria che vedi dopo aver eseguito il comandokubectl describe node <node_name> potrebbe non essere la stessa della quantità di CPU o di memoria richiesta per il pod. La quantità di memoria e di CPU di cui dispone il nodo dipende dalla capacità disponibile nel pool di allocazione delle risorse di Fargate. L’addebito avviene in base all'importo richiesto all'interno delle specifiche del pod. Non ti viene addebitata la quantità di risorse visibili con kubectl.

La CPU e la memoria vengono sempre fornite e fatturate da AWS Fargate come combinazioni discrete. L'importo fatturabile include l'utilizzo da parte di componenti diversi dal pod in esecuzione sul nodo, come kubelet, kube-proxy e così via. Ad esempio, se richiedi una vCPU e otto GB di memoria per il tuo pod, ti verrà addebitata la successiva combinazione più alta di due vCPU e nove GB di memoria. Questo tiene conto delle risorse utilizzate da kubelet e da altri componenti Kubernetes sul nodo. Per ulteriori informazioni, consulta CPU e memoria Pod.


Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?