

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

# Semplifica le implementazioni di PostgreSQL su Amazon EKS utilizzando PGO
<a name="streamline-postgresql-deployments-amazon-eks-pgo"></a>

*Shalaka Dengale, Amazon Web Services*

## Riepilogo
<a name="streamline-postgresql-deployments-amazon-eks-pgo-summary"></a>

Questo modello integra Postgres Operator di Crunchy Data (PGO) con Amazon Elastic Kubernetes Service (Amazon EKS) per semplificare le implementazioni di PostgreSQL in ambienti nativi del cloud. PGO offre automazione e scalabilità per la gestione dei database PostgreSQL in Kubernetes. Combinando PGO con Amazon EKS, si forma una solida piattaforma per la distribuzione, la gestione e la scalabilità efficiente dei database PostgreSQL.

Questa integrazione offre i seguenti vantaggi chiave:
+ Distribuzione automatizzata: semplifica l'implementazione e la gestione dei cluster PostgreSQL.
+ Definizioni di risorse personalizzate (CRDs):**** utilizza le primitive Kubernetes per la gestione di PostgreSQL.
+ Alta disponibilità: supporta il failover automatico e la replica sincrona.
+ Backup e ripristini automatizzati:**** semplifica i processi di backup e ripristino.
+ Scalabilità orizzontale:**** consente il ridimensionamento dinamico dei cluster PostgreSQL.
+ Aggiornamenti di versione: facilita gli aggiornamenti continui con tempi di inattività minimi.
+ Sicurezza: applica la crittografia, i controlli di accesso e i meccanismi di autenticazione.

## Prerequisiti e limitazioni
<a name="streamline-postgresql-deployments-amazon-eks-pgo-prereqs"></a>

**Prerequisiti**
+ Un attivo Account AWS.
+ [AWS Command Line Interface (AWS CLI) versione](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) 2, installata e configurata su Linux, macOS o Windows.
+ [AWS CLI Config](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-quickstart.html), per connettere AWS le risorse dalla riga di comando.
+ [eksctl](https://github.com/eksctl-io/eksctl#installation), installato e configurato su Linux, macOS o Windows.
+ `kubectl`, installato e configurato per accedere alle risorse sul tuo cluster Amazon EKS. Per ulteriori informazioni, consulta [Configurare kubectl ed eksctl nella documentazione di Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html). 
+ Il terminale del tuo computer è configurato per accedere al cluster Amazon EKS. Per ulteriori informazioni, consulta [Configurare il computer per comunicare con il cluster](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html#eks-configure-kubectl) nella documentazione di Amazon EKS.

**Versioni del prodotto**
+ [Versioni di Kubernetes 1.21—1.24 o successive (consulta la documentazione di PGO).](https://access.crunchydata.com/documentation/postgres-operator/5.2.5/)
+ PostgreSQL versione 10 o successiva. Questo modello utilizza PostgreSQL versione 16.

**Limitazioni**
+ Alcuni Servizi AWS non sono disponibili in tutti. Regioni AWS Per la disponibilità per regione, vedi [Servizi AWS per regione](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Per endpoint specifici, consulta la pagina [Endpoint e quote del servizio](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e scegli il link relativo al servizio.

## Architecture
<a name="streamline-postgresql-deployments-amazon-eks-pgo-architecture"></a>

**Stack tecnologico Target**
+ Amazon EKS
+ Amazon Virtual Private Cloud (Amazon VPC) (Amazon VPC)
+ Amazon Elastic Compute Cloud (Amazon EC2)

**Architettura di destinazione**

![Architettura per l'utilizzo di PGO con tre zone di disponibilità e due repliche e PgBouncer operatore PGO.](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/4c164012-7527-4ebe-b6a7-c129600328d6/images/26a5572b-405b-4634-b96a-91254c3ea2c1.png)


Questo modello crea un'architettura che contiene un cluster Amazon EKS con tre nodi. Ogni nodo viene eseguito su un set di istanze EC2 nel backend. Questa configurazione di PostgreSQL segue un'architettura di replica primaria, particolarmente efficace per i casi d'uso ad alta intensità di lettura. L'architettura include i seguenti componenti:
+ Il **contenitore del database primario (pg-primary)** ospita l'istanza PostgreSQL principale in cui sono dirette tutte le operazioni di scrittura.
+ **I contenitori di replica secondari (pg-replica) ospitano** le istanze PostgreSQL che replicano i dati dal database primario e gestiscono le operazioni di lettura.
+ **PgBouncer**è un pool di connessioni leggero per database PostgreSQL incluso in PGO. Si colloca tra il client e il server PostgreSQL e funge da intermediario per le connessioni al database.
+ **PGO** automatizza l'implementazione e la gestione dei cluster PostgreSQL in questo ambiente Kubernetes.
+ **Patroni** è uno strumento open source che gestisce e automatizza le configurazioni ad alta disponibilità per PostgreSQL. È incluso in PGO. Quando usi Patroni con PGO in Kubernetes, svolge un ruolo cruciale nel garantire la resilienza e la tolleranza ai guasti di un cluster PostgreSQL. [Per ulteriori informazioni, consulta la documentazione di Patroni.](https://patroni.readthedocs.io/en/latest/)

Il flusso di lavoro include i seguenti passaggi:
+ **Implementa l'operatore PGO**. Implementa l'operatore PGO sul tuo cluster Kubernetes eseguito su Amazon EKS. Questo può essere fatto utilizzando i manifesti di Kubernetes o i grafici Helm. Questo modello utilizza i manifesti di Kubernetes.
+ **Definisci le istanze PostgreSQL**. Quando l'operatore è in esecuzione, si creano risorse personalizzate (CRs) per specificare lo stato desiderato delle istanze PostgreSQL. Ciò include configurazioni come archiviazione, replica e impostazioni di alta disponibilità.
+ **Gestione degli operatori**. Interagisci con l'operatore tramite oggetti API Kubernetes, ad esempio CRs per creare, aggiornare o eliminare istanze PostgreSQL.
+ **Monitoraggio e manutenzione.** Puoi monitorare lo stato e le prestazioni delle istanze PostgreSQL in esecuzione su Amazon EKS. Gli operatori spesso forniscono metriche e registrazioni per scopi di monitoraggio. Se necessario, è possibile eseguire attività di manutenzione di routine come aggiornamenti e patch. Per ulteriori informazioni, consulta [Monitoraggio delle prestazioni del cluster e visualizzazione dei log](https://docs.aws.amazon.com/eks/latest/userguide/eks-observe.html) nella documentazione di Amazon EKS.
+ **Scalabilità e backup**: è possibile utilizzare le funzionalità fornite dall'operatore per ridimensionare le istanze PostgreSQL e gestire i backup.

Questo modello non copre le operazioni di monitoraggio, manutenzione e backup.

**Automazione e scalabilità**
+ È possibile utilizzare CloudFormation per automatizzare la creazione dell'infrastruttura. Per ulteriori informazioni, consulta [Creare risorse Amazon EKS CloudFormation](https://docs.aws.amazon.com/eks/latest/userguide/creating-resources-with-cloudformation.html) nella documentazione di Amazon EKS.
+ Puoi utilizzare GitVersion o Jenkins build Numbers per automatizzare la distribuzione delle istanze di database.

## Tools (Strumenti)
<a name="streamline-postgresql-deployments-amazon-eks-pgo-tools"></a>

**Servizi AWS**
+ [Amazon Elastic Kubernetes Service (Amazon EKS) ti aiuta a eseguire Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) su AWS Kubernetes senza dover installare o gestire il tuo piano di controllo o i tuoi nodi Kubernetes.  
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) è uno strumento open source che ti aiuta a interagire tramite comandi nella shell della riga di comando. Servizi AWS 

**Altri strumenti**
+ [eksctl](https://eksctl.io/) è un semplice strumento da riga di comando per la creazione di cluster su Amazon EKS.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) è un'utilità da riga di comando per eseguire comandi su cluster Kubernetes.
+ [PGO](https://github.com/CrunchyData/postgres-operator) automatizza e ridimensiona la gestione dei database PostgreSQL in Kubernetes.

## Best practice
<a name="streamline-postgresql-deployments-amazon-eks-pgo-best-practices"></a>

Segui queste best practice per garantire un'implementazione fluida ed efficiente:
+ **Proteggi il tuo cluster EKS**. Implementa le migliori pratiche di sicurezza per il tuo cluster EKS, come l'utilizzo di ruoli AWS Identity and Access Management (IAM) per account di servizio (IRSA), policy di rete e gruppi di sicurezza VPC. Limita l'accesso al server API del cluster EKS e crittografa le comunicazioni tra i nodi e il server API utilizzando TLS.
+ **Garantisci la compatibilità delle versioni** tra PGO e Kubernetes in esecuzione su Amazon EKS. Alcune funzionalità di PGO potrebbero richiedere versioni specifiche di Kubernetes o introdurre limitazioni di compatibilità. Per ulteriori informazioni, consulta [Componenti e compatibilità](https://access.crunchydata.com/documentation/postgres-operator/5.2.5/references/components/) nella documentazione di PGO.
+ **Pianifica l'allocazione delle risorse** per la tua implementazione PGO, tra cui CPU, memoria e archiviazione. Considera i requisiti di risorse sia di PGO che delle istanze PostgreSQL che gestisce. Monitora l'utilizzo delle risorse e ridimensiona le risorse in base alle esigenze.
+ **Progettato per un'elevata disponibilità**. Progetta la tua implementazione PGO per un'elevata disponibilità per ridurre al minimo i tempi di inattività e garantire l'affidabilità. Implementa più repliche di PGO su più zone di disponibilità per la tolleranza agli errori.
+ **Implementa procedure di backup e ripristino** per i database PostgreSQL gestiti da PGO. Utilizza le funzionalità fornite da PGO o soluzioni di backup di terze parti compatibili con Kubernetes e Amazon EKS.
+ **Configura il monitoraggio e la registrazione per la** tua implementazione PGO per tenere traccia delle prestazioni, dello stato e degli eventi. Utilizza strumenti come Prometheus per il monitoraggio delle metriche e Grafana per la visualizzazione. Configura la registrazione per acquisire i registri PGO per la risoluzione dei problemi e il controllo.
+ **Configura correttamente la rete** per consentire le comunicazioni tra PGO, istanze PostgreSQL e altri servizi nel tuo cluster Kubernetes. Utilizza le funzionalità di rete Amazon VPC e i plug-in di rete Kubernetes come Calico o Amazon [VPC](https://github.com/aws/amazon-vpc-cni-k8s) CNI per l'applicazione delle politiche di rete e l'isolamento del traffico.
+ **Scegli le opzioni di storage appropriate** per i tuoi database PostgreSQL, considerando fattori quali prestazioni, durabilità e scalabilità. Usa volumi Amazon Elastic Block Store (Amazon EBS) AWS o servizi di storage gestito per lo storage persistente. Per ulteriori informazioni, consulta [Archivia volumi Kubernetes con Amazon EBS nella documentazione di Amazon](https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html) EKS.
+ **Utilizza strumenti Infrastructure as Code (IaC)** CloudFormation per automatizzare la distribuzione e la configurazione di PGO su Amazon EKS. Definisci i componenti dell'infrastruttura, tra cui il cluster EKS, il networking e le risorse PGO, come codice per garantire coerenza, ripetibilità e controllo delle versioni.

## Epiche
<a name="streamline-postgresql-deployments-amazon-eks-pgo-epics"></a>

### Creazione di un ruolo IAM
<a name="create-an-iam-role"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un ruolo IAM. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | Amministratore AWS | 

### Crea un cluster Amazon EKS.
<a name="create-an-eks-cluster"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un cluster Amazon EKS. | Se hai già distribuito un cluster, salta questo passaggio. Altrimenti, distribuisci un cluster Amazon EKS nel tuo ambiente attuale Account AWS utilizzando `eksctl` Terraform o. CloudFormation Questo modello viene utilizzato `eksctl` per la distribuzione in cluster.Questo modello utilizza Amazon EC2 come gruppo di nodi per Amazon EKS. Se desideri utilizzarlo AWS Fargate, consulta la `managedNodeGroups` configurazione nella documentazione di [eksctl](https://eksctl.io/usage/schema/#managedNodeGroups).[See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | Amministratore AWS, amministratore Terraform o eksctl, amministratore Kubernetes | 
| Convalida lo stato del cluster. | Esegui il comando seguente per visualizzare lo stato corrente dei nodi nel cluster:<pre>kubectl get nodes</pre><br />Se riscontri errori, consulta la [sezione sulla risoluzione dei problemi](https://docs.aws.amazon.com/eks/latest/userguide/troubleshooting.html) della documentazione di Amazon EKS. | Amministratore AWS, amministratore Terraform o eksctl, amministratore Kubernetes | 

### Crea un provider di identità OIDC
<a name="create-an-oidc-identity-provider"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Abilita il provider IAM OIDC. | Come prerequisito per il driver Amazon EBS Container Storage Interface (CSI), devi disporre di un provider IAM OpenID Connect (OIDC) esistente per il tuo cluster.<br />Abilita il provider IAM OIDC utilizzando il seguente comando:<pre>eksctl utils associate-iam-oidc-provider --region={region} --cluster={YourClusterNameHere} --approve</pre><br />Per ulteriori informazioni su questo passaggio, consulta la [documentazione di Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html). | Amministratore AWS | 
| Crea un ruolo IAM per il driver CSI di Amazon EBS. | Usa il seguente `eksctl` comando per creare il ruolo IAM per il driver CSI:<pre>eksctl create iamserviceaccount \<br />  --region {RegionName} \<br />  --name ebs-csi-controller-sa \<br />  --namespace kube-system \<br />  --cluster {YourClusterNameHere} \<br />  --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \<br />  --approve \<br />  --role-only \<br />  --role-name AmazonEKS_EBS_CSI_DriverRole</pre><br />Se utilizzi unità Amazon EBS crittografate, devi configurare ulteriormente la policy. Per istruzioni, consulta la [documentazione del driver Amazon EBS SCI](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/blob/master/docs/install.md#installation-1). | Amministratore AWS | 
| Aggiungi il driver Amazon EBS CSI. | Usa il seguente `eksctl` comando per aggiungere il driver Amazon EBS CSI:<pre>eksctl create addon \<br />  --name aws-ebs-csi-driver \<br />  --cluster <YourClusterName> service-account-role-arn arn:aws:iam::$(aws sts get-caller-identity \<br />  --query Account \<br />  --output text):role/AmazonEKS_EBS_CSI_DriverRole \<br />  --force</pre> | Amministratore AWS | 

### Installa PGO
<a name="install-pgo"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clona il repository PGO. | Clona il repository per PGO GitHub :<pre>git clone https://github.com/CrunchyData/postgres-operator-examples.git </pre> | AWS DevOps | 
| Fornisci i dettagli del ruolo per la creazione dell'account di servizio. | Per concedere al cluster Amazon EKS l'accesso alle AWS risorse richieste, specifica l'Amazon Resource Name (ARN) del ruolo OIDC che hai creato in precedenza nel `service_account.yaml` file in cui si trova. [GitHub](https://github.com/CrunchyData/postgres-operator/blob/main/config/rbac/cluster/service_account.yaml)<pre>cd postgres-operator-examples</pre><pre>---<br />metadata:<br />  annotations:<br />    eks.amazonaws.com/role-arn: arn:aws:iam::<accountId>:role/<role_name> # Update the OIDC role ARN created earlier</pre> | Amministratore AWS, amministratore Kubernetes | 
| Crea il namespace e i prerequisiti PGO. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | Amministratore Kubernetes | 
| Verifica la creazione dei pod. | Verifica che lo spazio dei nomi e la configurazione predefinita siano stati creati:<pre>kubectl get pods -n postgres-operator</pre> | Amministratore AWS, amministratore Kubernetes | 
| Verifica. PVCs | Utilizzate il seguente comando per verificare le dichiarazioni di volume persistenti (PVCs):<pre>kubectl describe pvc -n postgres-operator</pre> | Amministratore AWS, amministratore Kubernetes | 

### Crea e distribuisci un operatore
<a name="create-and-deploy-an-operator"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un operatore. | Modifica il contenuto del file che si trova in `/kustomize/postgres/postgres.yaml` modo che corrisponda a quanto segue:<pre>spec:<br />  instances:<br />    - name: pg-1<br />      replicas: 3<br />  patroni:<br />    dynamicConfiguration:<br />      postgresql:<br />      pg_hba:<br />        - "host all all 0.0.0.0/0 trust" # this line enabled logical replication with programmatic access<br />        - "host all postgres 127.0.0.1/32 md5"<br />      synchronous_mode: true<br />  users:<br />  - name: replicator<br />    databases:<br />      - testdb<br />    options: "REPLICATION"</pre><br />Questi aggiornamenti eseguono le seguenti operazioni:[See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | Amministratore AWS, DBA, amministratore Kubernetes | 
| Implementa l'operatore. | Implementa l'operatore PGO per consentire la gestione e il funzionamento semplificati dei database PostgreSQL negli ambienti Kubernetes:<pre>kubectl apply -k kustomize/postgres</pre> | Amministratore AWS, DBA, amministratore Kubernetes | 
| Verifica la distribuzione. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html)Dall'output del comando, annota la replica principale (`primary_pod_name`) e leggi replica (`read_pod_name`). Li utilizzerai nei passaggi successivi. | Amministratore AWS, DBA, amministratore Kubernetes | 

### Verifica la replica in streaming
<a name="verify-streaming-replication"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Scrive i dati sulla replica principale. | Usa i seguenti comandi per connetterti alla replica primaria di PostgreSQL e scrivere dati nel database:<pre>kubectl exec -it <primary_pod_name> bash -n postgres-operator</pre><pre>psql</pre><pre>CREATE TABLE customers (firstname text, customer_id serial, date_created timestamp);<br />\dt</pre> | Amministratore AWS, amministratore Kubernetes | 
| Verifica che la replica letta contenga gli stessi dati. | Connect alla replica di lettura PostgreSQL e verifica se la replica in streaming funziona correttamente:<pre>kubectl exec -it {read_pod_name} bash -n postgres-operator</pre><pre>psql</pre><pre>\dt</pre><br />La replica di lettura dovrebbe contenere la tabella creata nella replica primaria nel passaggio precedente. | Amministratore AWS, amministratore Kubernetes | 

## Risoluzione dei problemi
<a name="streamline-postgresql-deployments-amazon-eks-pgo-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Il pod non si avvia. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 
| Le repliche sono notevolmente inferiori rispetto al database principale. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 
| Non hai visibilità sulle prestazioni e sullo stato del cluster PostgreSQL. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 
| La replica non funziona. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 

## Risorse correlate
<a name="streamline-postgresql-deployments-amazon-eks-pgo-resources"></a>
+ [Amazon Elastic Kubernetes](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/amazon-elastic-kubernetes-service.html) Service *(white paper sulla panoramica delle opzioni di distribuzione* su AWS)
+  [CloudFormation](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/aws-cloudformation.html)(*Panoramica delle opzioni di distribuzione nel white paper di AWS*)
+ [Inizia a usare Amazon EKS — eksctl](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html) (*Amazon EKS User Guide*)
+ [Configura kubectl ed eksctl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) (Guida per l'utente di *Amazon EKS*)
+ [Creare un ruolo per la federazione OpenID Connect](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html) (*IAM User Guide*)
+ [Configurazione delle impostazioni per la AWS CLI(Guida per l'AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)*utente*)
+ [Documentazione di Crunchy Postgres per Kubernetes](https://access.crunchydata.com/documentation/postgres-operator/latest)
+ [Crunch & Learn: Crunchy](https://www.youtube-nocookie.com/embed/IIf9WZO3K50) Postgres per Kubernetes 5.0 (video)