

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à.

# Configura la scalabilità automatica basata sugli eventi in Amazon EKS utilizzando Amazon EKS Pod Identity e KEDA
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda"></a>

*Dipen Desai, Abhay Diwan, Kamal Joshi e Mahendra Revanasiddappa, Amazon Web Services*

## Riepilogo
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-summary"></a>

Le piattaforme di orchestrazione, come [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) EKS), hanno semplificato la gestione del ciclo di vita delle applicazioni basate su container. Questo aiuta le organizzazioni a concentrarsi sulla creazione, la protezione, il funzionamento e la manutenzione di applicazioni basate su contenitori. Man mano che le implementazioni basate sugli eventi diventano più comuni, le organizzazioni scalano sempre più spesso le implementazioni di Kubernetes in base a varie fonti di eventi. Questo metodo, combinato con la scalabilità automatica, può portare a significativi risparmi sui costi fornendo risorse di elaborazione su richiesta e una scalabilità efficiente adattata alla logica dell'applicazione.

[KEDA](https://keda.sh/) è un autoscaler basato su eventi basato su Kubernetes. KEDA ti aiuta a scalare qualsiasi contenitore in Kubernetes in base al numero di eventi che devono essere elaborati. È leggero e si integra con qualsiasi cluster Kubernetes. [Funziona anche con componenti Kubernetes standard, come Horizontal Pod Autoscaling (HPA).](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/) Offre anche KEDA [TriggerAuthentication](https://keda.sh/docs/2.14/concepts/authentication/#re-use-credentials-and-delegate-auth-with-triggerauthentication), una funzionalità che consente di delegare l'autenticazione. Consente di descrivere i parametri di autenticazione separati dai contenitori ScaledObject e dai contenitori di distribuzione.

AWS fornisce ruoli AWS Identity and Access Management (IAM) che supportano diverse opzioni di implementazione di Kubernetes, tra cui Amazon EKS, Amazon EKS Anywhere Servizio Red Hat OpenShift su AWS (ROSA) e cluster Kubernetes autogestiti su Amazon Elastic Compute Cloud (Amazon). EC2 Questi ruoli utilizzano costrutti IAM, come i provider di identità OpenID Connect (OIDC) e le policy di fiducia IAM, per operare in ambienti diversi senza affidarsi direttamente ai servizi Amazon EKS o. APIs Per ulteriori informazioni, consulta [i ruoli IAM per gli account di servizio](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) nella documentazione di Amazon EKS.

[Amazon EKS Pod Identity](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html) semplifica il processo con cui gli account di servizio Kubernetes assumono ruoli IAM senza richiedere provider OIDC. Offre la possibilità di gestire le credenziali per le tue applicazioni. Invece di creare e distribuire AWS le tue credenziali ai contenitori o utilizzare il ruolo dell' EC2 istanza Amazon, associ un ruolo IAM a un account di servizio Kubernetes e configuri i tuoi Pods per utilizzare l'account di servizio. Questo ti aiuta a utilizzare un ruolo IAM su più cluster e semplifica la gestione delle policy abilitando il riutilizzo delle politiche di autorizzazione tra i ruoli IAM.

Implementando KEDA con Amazon EKS Pod Identity, le aziende possono ottenere una scalabilità automatica efficiente basata sugli eventi e una gestione semplificata delle credenziali. Le applicazioni si scalano in base alla domanda, il che ottimizza l'utilizzo delle risorse e riduce i costi.

Questo modello ti aiuta a integrare Amazon EKS Pod Identity con KEDA. Mostra come utilizzare l'account del `keda-operator` servizio e delegare l'autenticazione con. `TriggerAuthentication` Descrive inoltre come impostare una relazione di trust tra un ruolo IAM per l'operatore KEDA e un ruolo IAM per l'applicazione. Questa relazione di fiducia consente a KEDA di monitorare i messaggi nelle code degli eventi e di regolare il ridimensionamento per gli oggetti Kubernetes di destinazione.

## Prerequisiti e limitazioni
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-prereqs"></a>

**Prerequisiti**
+ AWS Command Line Interface [(AWS CLI) versione 2.13.17 o successiva, installata](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ [Python versione 3.11.5 o successiva, installata](https://www.python.org/downloads/)
+ AWS SDK per Python (Boto3) [versione 1.34.135 o successiva, installata](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)
+ [Helm versione 3.12.3 o successiva, installata](https://helm.sh/docs/intro/install/)
+ [kubectl versione 1.25.1 o successiva, installata](https://kubernetes.io/docs/tasks/tools/)
+ [Docker Engine versione 26.1.1 o successiva, installata](https://docs.docker.com/engine/install/)
+ [Creazione di un cluster Amazon EKS versione 1.24 o successiva](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)
+ [Prerequisiti per la creazione dell'agente Amazon EKS Pod Identity, soddisfatti](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html#pod-id-agent-add-on-create)

**Limitazioni**
+ È necessario stabilire una relazione di fiducia tra il `keda-operator` ruolo e il `keda-identity` ruolo. Le istruzioni sono fornite nella sezione [Epics](#event-driven-auto-scaling-with-eks-pod-identity-and-keda-epics) di questo modello.

## Architecture
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-architecture"></a>

In questo modello, crei le seguenti AWS risorse:
+ Repository **Amazon Elastic Container Registry (Amazon ECR)**: in questo modello, questo repository viene denominato. `keda-pod-identity-registry` Questo repository privato viene utilizzato per archiviare le immagini Docker dell'applicazione di esempio.
+ Coda **Amazon Simple Queue Service (Amazon SQS)**: in questo modello, questa coda viene denominata. `event-messages-queue` La coda funge da buffer dei messaggi che raccoglie e archivia i messaggi in arrivo. KEDA monitora le metriche della coda, come il numero di messaggi o la lunghezza della coda, e ridimensiona automaticamente l'applicazione in base a queste metriche.
+ **Ruolo IAM per l'applicazione**: in questo modello, questo ruolo viene denominato. `keda-identity` Il `keda-operator` ruolo assume questo ruolo. Questo ruolo consente l'accesso alla coda di Amazon SQS.
+ **Ruolo IAM per l'operatore KEDA**: in questo modello, questo ruolo è denominato. `keda-operator` L'operatore KEDA utilizza questo ruolo per effettuare le chiamate AWS API richieste. Questo ruolo dispone delle autorizzazioni necessarie per assumerlo`keda-identity`. A causa della relazione di fiducia tra i ruoli `keda-operator` e i `keda-identity` ruoli, il `keda-operator` ruolo dispone delle autorizzazioni Amazon SQS.

Tramite le risorse personalizzate `TriggerAuthentication` e `ScaledObject` Kubernetes, l'operatore utilizza il `keda-identity` ruolo per connettersi a una coda Amazon SQS. In base alla dimensione della coda, KEDA ridimensiona automaticamente la distribuzione dell'applicazione. Aggiunge 1 pod ogni 5 messaggi non letti nella coda. Nella configurazione predefinita, se non ci sono messaggi non letti nella coda di Amazon SQS, l'applicazione viene ridimensionata fino a 0 pod. L'operatore KEDA monitora la coda a intervalli specificati dall'utente.

 

L'immagine seguente mostra come utilizzi Amazon EKS Pod Identity per fornire al `keda-operator` ruolo un accesso sicuro alla coda Amazon SQS.

![\[Utilizzo di KEDA e Amazon EKS Pod Identity per scalare automaticamente un'applicazione basata su Kubernetes.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/56f7506d-e8d3-43e5-bec6-42267fedd0ae/images/05bdbd09-9eb8-4c0b-8c0d-efe38aecb683.png)


Il diagramma mostra il flusso di lavoro seguente:

1. Installa l'agente Amazon EKS Pod Identity nel cluster Amazon EKS.

1. Implementa l'operatore KEDA nello spazio dei nomi KEDA nel cluster Amazon EKS.

1. Crei i ruoli `keda-operator` e `keda-identity` IAM nella destinazione. Account AWS

1. Stabilisci una relazione di fiducia tra i ruoli IAM.

1. L'applicazione viene distribuita nel `security` namespace.

1. L'operatore KEDA esegue il polling dei messaggi in una coda Amazon SQS.

1. KEDA avvia l'HPA, che ridimensiona automaticamente l'applicazione in base alla dimensione della coda.

## Tools (Strumenti)
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-tools"></a>

**Servizi AWS**
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) è un servizio di registro di immagini di container gestito sicuro, scalabile e affidabile.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) ti aiuta a eseguire AWS Kubernetes senza dover installare o gestire il tuo piano di controllo o i tuoi nodi Kubernetes.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue AWS risorse controllando chi è autenticato e autorizzato a utilizzarle.
+ [Amazon Simple Queue Service (Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html)) fornisce una coda ospitata sicura, durevole e disponibile che ti aiuta a integrare e disaccoppiare sistemi e componenti software distribuiti.

**Altri strumenti**
+ [KEDA](https://keda.sh/) è un autoscaler basato su eventi basato su Kubernetes.

**Deposito di codice**

Il codice per questo pattern è disponibile nella [scalabilità GitHub automatica basata sugli eventi utilizzando EKS Pod Identity e](https://github.com/aws-samples/event-driven-autoscaling-using-podidentity-and-keda/tree/main) il repository KEDA.

## Best practice
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-best-practices"></a>

Consigliamo di seguire queste best practices:
+ [Best practice di Amazon EKS](https://docs.aws.amazon.com/eks/latest/best-practices/introduction.html)
+ [Best practice per la sicurezza in IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)
+ [Best practice di Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-best-practices.html)

## Epiche
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-epics"></a>

### Crea risorse AWS
<a name="create-aws-resources"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea il ruolo IAM per l'operatore KEDA. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | Amministratore AWS | 
| Crea il ruolo IAM per l'applicazione di esempio. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | Amministratore AWS | 
| Creare una coda Amazon SQS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | Informazioni generali su AWS | 
| Crea un repository Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | Informazioni generali su AWS | 

### Configura il cluster Amazon EKS
<a name="set-up-the-eks-cluster"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Implementa l'agente Amazon EKS Pod Identity. | Per il cluster Amazon EKS di destinazione, configura l'agente Amazon EKS Pod Identity. Segui le istruzioni in [Configurare Amazon EKS Pod Identity Agent](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html#pod-id-agent-add-on-create) nella documentazione di Amazon EKS. | AWS DevOps | 
| Implementa KEDA. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingegnere | 
| Assegna il ruolo IAM all'account del servizio Kubernetes. | Segui le istruzioni in [Assegnare un ruolo IAM a un account di servizio Kubernetes nella](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-association.html) documentazione di Amazon EKS. Utilizzare i seguenti valori:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | AWS DevOps | 
| Crea uno spazio dei nomi . | Immetti il seguente comando per creare uno spazio `security` dei nomi nel cluster Amazon EKS di destinazione:<pre>kubectl create ns security</pre> | DevOps ingegnere | 

### Distribuzione di un'applicazione di esempio
<a name="deploy-the-sample-application"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clonare i file dell'applicazione. | Inserisci il seguente comando per clonare l'[auto scaling basato sugli eventi utilizzando EKS Pod Identity e](https://github.com/aws-samples/event-driven-autoscaling-using-podidentity-and-keda/tree/main) il repository KEDA da: GitHub<pre>git clone https://github.com/aws-samples/event-driven-autoscaling-using-podidentity-and-keda.git</pre> | DevOps ingegnere | 
| Creazione dell'immagine Docker. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingegnere | 
| Invia l'immagine Docker ad Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html)Puoi trovare i comandi push accedendo alla pagina del repository Amazon ECR e scegliendo **Visualizza** comandi push. | DevOps ingegnere | 
| Implementare un’applicazione di esempio. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingegnere | 
| Assegna il ruolo IAM all'account del servizio applicativo. | Effettua una delle seguenti operazioni per associare il ruolo `keda-identity` IAM all'account di servizio per l'applicazione di esempio:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingegnere | 
| Implementa `ScaledObject` e. `TriggerAuthentication` | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingegnere | 

### Prova il ridimensionamento automatico
<a name="test-auto-scaling"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Invia messaggi alla coda di Amazon SQS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingegnere | 
| Monitora i pod delle applicazioni. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingegnere | 

## risoluzione dei problemi
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| L'operatore KEDA non è in grado di scalare l'applicazione. | Immettete il seguente comando per controllare i log del ruolo `keda-operator` IAM:<pre>kubectl logs -n keda -l app=keda-operator -c keda-operator</pre> Se è presente un codice di `HTTP 403` risposta, l'applicazione e lo scaler KEDA non dispongono di autorizzazioni sufficienti per accedere alla coda di Amazon SQS. Completa questa procedura:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html)Se si `Assume-Role` verifica un errore, un [ruolo IAM del nodo Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html) non è in grado di assumere il ruolo IAM per cui è stato definito`TriggerAuthentication`. Completa questa procedura:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | 

## Risorse correlate
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-resources"></a>
+ [Configurare Amazon EKS Pod Identity Agent](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html) (documentazione Amazon EKS)
+ [Implementazione di KEDA (documentazione](https://keda.sh/docs/2.14/deploy/) KEDA)
+ [ScaledObject specifiche (documentazione KEDA](https://keda.sh/docs/2.16/reference/scaledobject-spec/))
+ [Autenticazione con TriggerAuthentication](https://keda.sh/docs/2.14/concepts/authentication/) (documentazione KEDA)