Migração de dados de Zalando para CloudNativePG em clusters Linux x86_64 Linux on IBM Z and LinuxONE e

Você pode transferir dados de Zalando para CloudNativePG usando o modo pg_basebackup bootstrap em um cluster que esteja operando no modo réplica. Para transferir os dados, você precisa criar o cluster de réplica CloudNativePG (destino) que replica o armazenamento de dados Zalando (origem).

Pré-requisitos

Para inicializar a partir de um cluster ativo, execute as seguintes etapas:

  • Certifique-se de que o destino e a origem tenham a mesma versão principal e secundária ( PostgreSQL ).
  • Configure o streaming_replica usuário com funções de replicação e login no banco de dados ZalandoPostgreSQL.

Modificando o armazenamento de dados Zalando Postgres para migração de dados

Para modificar o armazenamento de dados Zalando Postgres para migração de dados, execute as seguintes etapas:

  1. Conecte-se ao pod Zalando :

    1. Veja os detalhes do pod principal:

      kubectl get pods -o jsonpath={.items..metadata.name} -l application=spilo,spilo-role=master -n instana-postgres
      
    2. Execute comandos diretamente no pod:

      kubectl exec -it <primary_pod_name> -n instana-postgres
      
    3. Conecte-se ao banco de dados Postgres :

      psql -U postgres
      
    4. Liste as funções e crie um streaming_replica usuário com funções de replicação e login no banco de dados Zalando :

      \du
      CREATE ROLE streaming_replica WITH REPLICATION;
      ALTER ROLE streaming_replica WITH LOGIN PASSWORD '<password_retrived_from_zalando>';
      
    5. Saia do terminal interativo PostgreSQL :

      \q
      
  2. Crie dois arquivos vazios chamados custom.conf e override.conf dentro do pgdata diretório em todos os pods, localizados ao lado do postgresql.conf arquivo.

    1. Liste os pods:

      kubectl get pods -n instana-postgres
      
    2. Execute comandos diretamente no pod. Execute o seguinte comando em todos os pods:

      kubectl exec -it <pod_name> -n instana-postgres
      
      cd /var/lib/postgresql/data/pgdata
      touch -f custom.conf
      touch -f override.conf
      
  3. Saída do terminal do pod:

    exit
    

Criando um armazenamento de dados do Postgres usando o operador Postgres do CloudNativePG para migração de dados

Instalando o operador Postgres online

  1. Para implantar o operador CloudNativePG Postgres online, execute as seguintes etapas:

    1. Crie o instana-postgres-01 namespace:

      kubectl create namespace instana-postgres-01
      
    2. Determine o ID do grupo do sistema de arquivos em Red Hat OpenShift.

      Red Hat OpenShift exige que os grupos do sistema de arquivos estejam dentro de um intervalo de valores específico para o namespace. No cluster onde o operador CloudNativePG Kubernetes está implantado, execute o seguinte comando:

      kubectl get namespace instana-postgres-01 -o yaml
      

      Uma saída semelhante ao exemplo a seguir é exibida para o comando:

      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-01
      

      A openshift.io/sa.scc.supplemental-groups anotação contém o intervalo de IDs permitidos. O intervalo 1000750000/10000 indica 10.000 valores que começam com o ID 1000750000, portanto, especifica o intervalo de IDs de 1000750000 a 1000760000. Neste exemplo, o valor 1000750000 pode ser usado como um ID de grupo do sistema de arquivos.

    3. Instale o operador CloudNativePG Postgres executando os seguintes comandos Helm :

      helm repo add instana https://artifact-public.instana.io/artifactory/rel-helm-customer-virtual --username=_ --password=<AGENT_KEY>
      
      helm repo update
      
      helm 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
      
  2. Crie segredos de extração de imagem para o instana-postgres-01 namespace:

    kubectl create secret docker-registry instana-registry -n instana-postgres-01 \
    --docker-username=_ \
    --docker-password=<AGENT_KEY> \
    --docker-server=artifact-public.instana.io
    
    Observação: antes de criar o segredo, atualize o valor <AGENT_KEY> com sua própria chave de agente.
  3. Crie um arquivo, como postgres-secret.yaml, para acesso externo ao cluster:

    kind: Secret
    apiVersion: v1
    metadata:
      name: instanaadmin
    type: Opaque
    stringData:
      username: instanaadmin
      password: <user_generated_password_from_zalando>
    
  4. Aplique o postgres-secret.yaml arquivo:

    kubectl apply -f postgres-secret.yaml -n instana-postgres-01
    
  5. Crie um recurso ClusterCloudNativePG no replica modo:

    1. Crie um arquivo, como cnpg-postgres.yaml, da seguinte maneira:

      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-client
      
    2. Aplique o cnpg-postgres.yaml arquivo executando o seguinte comando:

      kubectl apply -f cnpg-postgres.yaml -n instana-postgres-01
      
  6. Conecte-se via SSH ao contêiner de depuração do primeiro pod CloudNativePG para modificar postgresql.conf.

    Após a inicialização do cluster no modo réplica, o status inicial do Pod (postgres-1-pgbasebackup) será Completed. As tentativas subsequentes de iniciar o primeiro Pod CloudNativePG (postgres-1) falharão. Este é um comportamento esperado.

    Para garantir a inicialização bem-sucedida do Cluster e o subsequente arranque do Pod, complete as seguintes etapas:

    1. Execute os seguintes comandos para descobrir o Pod inicial, conecte-se a ele via SSH e vá para o diretório que contém o pgdata volume:

      kubectl debug pod/postgres-1 --as-root -n instana-postgres-01
      
      cd /var/lib/postgresql/data/pgdata/
      
    2. Modifique os pg_hba caminhos pg_ident e dentro do postgresql.conf arquivo em cada pod:

      • Altere o pg_hba caminho de /var/lib/postgresql/15/main/pg_hba.conf para o seguinte caminho:

        /var/lib/postgresql/data/pgdata/pg_hba.conf
        
      • Altere o pg_ident caminho de /var/lib/postgresql/15/main/pg_ident.conf para o seguinte caminho:

        /var/lib/postgresql/data/pgdata/pg_ident.conf
        
    3. Adicione include 'custom.conf' e include 'override.conf' no final do arquivo:

      echo "include 'custom.conf'" >> postgresql.conf
      echo "include 'override.conf'" >> postgresql.conf
      
  7. Reinicie o pod. Após o início do pod, todos os pods são replicados a partir do primeiro pod.

  8. Use o novo cnpg-cluster.

    1. Desative o cluster de réplicas:

      1. Modifique o cnpg-postgres.yaml arquivo:

        ........
        replica:
        enabled: false
        source: zalando-postgres
        ..........
        
      2. Reaplique o cnpg-postgres.yaml arquivo:

        kubectl apply -f cnpg-postgres.yaml -n instana-postgres-01
        
    2. Conecte-se ao banco de dados:

      psql -U postgres
      
    3. Atualize a versão de classificação:

      ALTER DATABASE template1 REFRESH COLLATION VERSION;
      
  9. Atualize a configuração das especificações principais:

    1. No arquivo Instana Core, atualize a postgresConfig configuração conforme mostrado no exemplo a seguir:

      .....................
      postgresConfigs:
        - authEnabled: true
           hosts:
             - postgres-rw.instana-postgres-01
      .....................
      
    2. Reaplique o core.yaml arquivo:

      kubectl apply -f core.yaml -n instana-core