Migrazione dei dati da Zalando a CloudNativePG su cluster Linux x86_64 e Linux on IBM Z and LinuxONE
È possibile trasferire i dati da Zalando a CloudNativePG utilizzando la modalità pg_basebackup bootstrap all'interno di un cluster che opera in modalità replica. Per trasferire i dati, è necessario creare il cluster di replica di CloudNativePG (destinazione) che replica l'archivio dati di Zalando (origine).
Prerequisiti
Per eseguire il bootstrap da un cluster attivo, completare la seguente procedura:
- Assicurarsi che la destinazione e l'origine abbiano la stessa versione principale di PostgreSQL .
- Configurare
streaming_replical'utente con i ruoli di replica e di accesso nel database PostgreSQL di Zalando.
Modifica dell'archivio dati Zalando Postgres per la migrazione dei dati
Per modificare l'archivio dati Zalando Postgres ai fini della migrazione dei dati, procedere come segue:
Connettiti al pod Zalando :
Visualizza i dettagli del pod primario:
kubectl get pods -o jsonpath={.items..metadata.name} -l application=spilo,spilo-role=master -n instana-postgresEseguire i comandi direttamente nel pod:
kubectl exec -it <primary_pod_name> -n instana-postgresConnettersi al database Postgres:
psql -U postgresElencare i ruoli e creare un
streaming_replicautente con i ruoli di replica e di accesso nel database Zalando :\du CREATE ROLE streaming_replica WITH REPLICATION; ALTER ROLE streaming_replica WITH LOGIN PASSWORD '<password_retrived_from_zalando>';Uscire dal terminale interattivo di PostgreSQL:
\q
Creare due file vuoti denominati
custom.confeoverride.confnella directorypgdatasu tutti i pod, che si trovano accanto al filepostgresql.conf.Elencare i baccelli:
kubectl get pods -n instana-postgresEseguire comandi direttamente sul pod. Eseguire il seguente comando su tutti i pod:
kubectl exec -it <pod_name> -n instana-postgrescd /var/lib/postgresql/data/pgdata touch -f custom.conf touch -f override.conf
Uscire dal terminale della capsula:
exit
Creazione di un archivio dati Postgres utilizzando l'operatore CloudNativePG Postgres per la migrazione dei dati
Installazione online di Operator per l' Postgres
Per distribuire l'Operatore CloudNativePG Postgres online, completare i seguenti passaggi:
Creare lo spazio dei nomi
instana-postgres-01:kubectl create namespace instana-postgres-01Determinare l'ID del gruppo di file system su Red Hat OpenShift.
Red Hat OpenShift richiede che i gruppi di file system siano compresi in un intervallo di valori specifici per il namespace. Sul cluster in cui è distribuito l'Operatore CloudNativePG Kubernetes, eseguire il seguente comando:
kubectl get namespace instana-postgres-01 -o yamlPer il comando viene visualizzato un output simile al seguente:
apiVersion: v1 kind: Namespace metadata: annotations: ....... openshift.io/sa.scc.uid-range: 1000750000/10000 creationTimestamp: "2024-01-14T07:04:59Z" labels: kubernetes.io/metadata.name: instana-postgres-01 ....... name: instana-postgres-01L'annotazione
openshift.io/sa.scc.supplemental-groupscontiene l'intervallo di ID consentiti. L'intervallo1000750000/10000indica 10.000 valori che iniziano con ID1000750000, quindi specifica l'intervallo di ID da1000750000a1000760000. In questo esempio, il valore1000750000potrebbe essere utilizzato come ID gruppo del file system.Installare l'Operatore CloudNativePG Postgres eseguendo i seguenti comandi Helm:
helm repo add instana https://artifact-public.instana.io/artifactory/rel-helm-customer-virtual --username=_ --password=<AGENT_KEY>helm repo updatehelm install cnpg instana/cloudnative-pg --set image.repository=artifact-public.instana.io/self-hosted-images/3rd-party/operator/cloudnative-pg --set image.tag=v1.29.1_v0.34.0 --version=0.28.2 --set imagePullSecrets[0].name=instana-registry --set containerSecurityContext.runAsUser=<UID from namespace> --set containerSecurityContext.runAsGroup=<UID from namespace> -n instana-postgres-01
Crea i segreti di pull dell'immagine per lo spazio dei nomi
instana-postgres-01:kubectl create secret docker-registry instana-registry -n instana-postgres-01 \ --docker-username=_ \ --docker-password=<AGENT_KEY> \ --docker-server=artifact-public.instana.ioNota: prima di creare il segreto, aggiornare il valore < AGENT_KEY> con la chiave dell'agent.Creare un file, come
postgres-secret.yaml, per l'accesso al cluster esterno:kind: Secret apiVersion: v1 metadata: name: instanaadmin type: Opaque stringData: username: instanaadmin password: <user_generated_password_from_zalando>Applicare il file '
postgres-secret.yaml:kubectl apply -f postgres-secret.yaml -n instana-postgres-01Creare una risorsa CloudNativePG
Clusterin modalitàreplica:Creare un file, come ad esempio
cnpg-postgres.yaml, come segue:apiVersion: postgresql.cnpg.io/v1 kind: Cluster metadata: name: postgres spec: instances: 3 imageName: artifact-public.instana.io/self-hosted-images/3rd-party/cnpg-containers:15_v0.39.0 imagePullPolicy: IfNotPresent imagePullSecrets: - name: instana-registry enableSuperuserAccess: true replicationSlots: highAvailability: enabled: true managed: roles: - name: instanaadmin login: true superuser: true createdb: true createrole: true replication: true passwordSecret: name: instanaadmin postgresql: pg_hba: - local all all trust - host replication postgres all trust - host replication streaming_replica 0.0.0.0/0 trust - host all all 0.0.0.0/0 trust - local replication standby trust - hostssl replication standby all md5 - hostnossl all all all reject - hostssl all all all md5 bootstrap: pg_basebackup: source: zalando-postgres replica: enabled: true source: zalando-postgres externalClusters: - name: zalando-postgres connectionParameters: host: postgres.instana-postgres.svc user: postgres password: name: instanaadmin key: password superuserSecret: name: instanaadmin storage: size: 20Gi storageClass: nfs-clientApplicare il file
cnpg-postgres.yamlimmettendo il seguente comando:kubectl apply -f cnpg-postgres.yaml -n instana-postgres-01
SSH nel contenitore di debug del primo pod CloudNativePG per modificare
postgresql.conf.Dopo l'inizializzazione del raggruppamento in modalità replica, lo stato del pod iniziale (
postgres-1-pgbasebackup) saràCompleted. I tentativi successivi di avviare il primo CloudNativePG Pod (postgres-1) falliranno. Questo è un comportamento previsto.Per garantire una corretta inizializzazione di
Clustere un successivo avvio del pod, completare la seguente procedura:Immetti i seguenti comandi per individuare il Pod iniziale, SSH in esso e vai alla directory che contiene il volume
pgdata:kubectl debug pod/postgres-1 --as-root -n instana-postgres-01cd /var/lib/postgresql/data/pgdata/Modificare i percorsi
pg_hbaepg_identall'interno del filepostgresql.confin ciascun pod:Modificare il
pg_hbapercorso da/var/lib/postgresql/15/main/pg_hba.confal seguente:/var/lib/postgresql/data/pgdata/pg_hba.confModificare il
pg_identpercorso da/var/lib/postgresql/15/main/pg_ident.confal seguente:/var/lib/postgresql/data/pgdata/pg_ident.conf
Aggiungere
include 'custom.conf'einclude 'override.conf'alla fine del file:echo "include 'custom.conf'" >> postgresql.conf echo "include 'override.conf'" >> postgresql.conf
Riavviare il pod. Dopo l'avvio del baccello, tutti i baccelli si replicano a partire dal primo.
Utilizzare il nuovo cnpg-cluster.
Disabilita il cluster di replica:
Modificare il file
cnpg-postgres.yaml:........ replica: enabled: false source: zalando-postgres ..........Riapplicare il file
cnpg-postgres.yaml:kubectl apply -f cnpg-postgres.yaml -n instana-postgres-01
Connettersi al database:
psql -U postgresAggiornare la versione di ordinamento:
ALTER DATABASE template1 REFRESH COLLATION VERSION;
Aggiornare la configurazione della specifica core:
Nel file ` Instana ` di Core, aggiorna la
postgresConfigconfigurazione come illustrato nell'esempio seguente:..................... postgresConfigs: - authEnabled: true hosts: - postgres-rw.instana-postgres-01 .....................Riapplicare il file
core.yaml:kubectl apply -f core.yaml -n instana-core