Criação de um repositório de dados do Postgres no Linux on Power ( ppc64le )
Instale o operador do Postgres e configure o armazenamento de dados
Antes de iniciar
Certifique-se de ter preparado seu host on-line e off-line para extrair imagens do repositório externo. Além disso, assegure-se de que o repositório Helm correto seja incluído.
Para obter mais informações, consulte “Preparação para a instalação do armazenamento de dados ”.
Postgres versões do operador e tags de imagem para implantação
As imagens a seguir são necessárias para o gráfico Helm fixado ou versões do operador.
CNPG Postgres
| Plataforma | Versões do operador | Versão do gráfico do Helm | Imagem com tag |
|---|---|---|---|
| Linux® on Power® (ppc64le) | v1.29.1 | 0.28.2 | artifact-public.instana.io/self-hosted-images/3rd-party/operator/cloudnative-pg: v1.29.1_v0.34.0 artifact-public.instana.io/self-hosted-images/3rd-party/datastore/cnpg-containers: 15_v0.39.0 |
Zalando Postgres
| Plataforma | Versões do operador | Versão do gráfico do Helm | Imagem com tag |
|---|---|---|---|
| Linux® on Power® (ppc64le) | 1.10.0 | v1.10.1 | artifact-public.instana.io/self-hosted-images/3rd-party/operator/zalando: v1.10.0_v0.1.0 artifact-public.instana.io/self-hosted-images/3rd-party/datastore/zalando: 15.7_v0.1.0 |
Instalando o Postgres online
Instale o operador ` Postgres ` em um ambiente online.
Instalando o ` Postgres ` usando o operador ` CloudNativePG `
Siga estas etapas para instalar o armazenamento de dados do Postgres.
Crie o namespace
instana-postgres.kubectl create namespace instana-postgresCrie segredos de extração de imagem para o namespace
instana-postgres.kubectl create secret docker-registry instana-registry --namespace instana-postgres \ --docker-username=_ \ --docker-password=<download_key> \ --docker-server=artifact-public.instana.ioSe você estiver instalando o Postgres em um cluster do Red Hat® OpenShift®, determine o ID do grupo do sistema de arquivos a partir do
instana-postgresnamespace. Red Hat OpenShift exige que os grupos do sistema de arquivos estejam dentro de um intervalo de valores específico para o namespace.kubectl get namespace instana-postgres -o yamlPara o comando, é exibida uma saída semelhante ao exemplo a seguir:
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 ....... name: instana-postgresA
openshift.io/sa.scc.supplemental-groupsanotação contém o intervalo de IDs permitidos. O intervalo1000750000/10000indica 10.000 valores a partir do ID1000750000, portanto, especifica o intervalo de IDs de1000750000a1000760000. Neste exemplo, o valor1000750000pode ser usado como um ID de grupo do sistema de arquivos (UID).Instale o operador ` Postgres `. Use o UID da etapa anterior como no
<UID from namespace>comando a seguir: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-postgresGere uma senha no site base64. Anote a senha. Você precisa salvar isso mais tarde no arquivo
config.yaml.openssl rand -base64 24 | tr -cd 'a-zA-Z0-9' | head -c32; echoCrie um recurso do tipo
Secretusando a senha obtida no comando anterior.kind: Secret apiVersion: v1 metadata: name: instanaadmin type: Opaque stringData: username: instanaadmin password: <user-generate-password>Crie o segredo do serviço de armazenamento em nuvem ( Postgres ).
kubectl apply -f postgres-secret.yaml -n instana-postgresCrie um arquivo ` YAML `, por exemplo
postgres.yaml, com a configuração do cluster ` Postgres `.apiVersion: postgresql.cnpg.io/v1 kind: Cluster metadata: name: postgres spec: instances: 3 imageName: artifact-public.instana.io/self-hosted-images/3rd-party/datastore/cnpg-containers:15_v0.39.0 imagePullPolicy: IfNotPresent imagePullSecrets: - name: instana-registry postgresql: parameters: shared_buffers: 32MB pg_stat_statements.track: all auto_explain.log_min_duration: '10s' pg_hba: - local all all trust - host all all 0.0.0.0/0 md5 - local replication standby trust - hostssl replication standby all md5 - hostnossl all all all reject - hostssl all all all md5 managed: roles: - name: instanaadmin login: true superuser: true createdb: true createrole: true passwordSecret: name: instanaadmin bootstrap: initdb: database: instanaadmin owner: instanaadmin secret: name: instanaadmin superuserSecret: name: instanaadmin storage: size: 1Gi # storageClass: "Optional"Conclua as etapas em Implementando e verificando o Postgres (online e offline).
Instalando o ` Postgres ` usando o operador ` Zalando `
Para implantar o operador Postgres do Zalando online, siga estas etapas:
Se você estiver usando um cluster do Red Hat OpenShift, crie Restrições de Contexto de Segurança (SCC) antes de implantar o operador Postgres.
Crie um arquivo ` YAML `, por exemplo
postgres-scc.yaml, com a definição do recurso SCC.apiVersion: security.openshift.io/v1 kind: SecurityContextConstraints metadata: name: postgres-scc runAsUser: type: MustRunAs uid: 101 seLinuxContext: type: RunAsAny fsGroup: type: RunAsAny allowHostDirVolumePlugin: false allowHostNetwork: true allowHostPorts: true allowPrivilegedContainer: false allowHostIPC: true allowHostPID: true readOnlyRootFilesystem: false users: - system:serviceaccount:instana-postgres:postgres-operator - system:serviceaccount:instana-postgres:postgres-pod - system:serviceaccount:instana-postgres:defaultCrie o recurso de SCC
kubectl apply -f postgres-scc.yaml
Instale o operador ` Postgres `.
Crie o namespace
instana-postgres.kubectl create namespace instana-postgresCrie segredos de extração de imagem para o namespace
instana-postgres. No comando a seguir, substitua o valor<download_key>por sua chave de agente.kubectl create secret docker-registry instana-registry --namespace instana-postgres \ --docker-username=_ \ --docker-password=<download_key> \ --docker-server=artifact-public.instana.ioCrie um arquivo, por exemplo
values.yaml, com a configuração Postgres.configGeneral: kubernetes_use_configmaps: true securityContext: runAsUser: 101 image: registry: artifact-public.instana.io repository: self-hosted-images/3rd-party/operator/zalando tag: v1.10.0_v0.1.0 imagePullSecrets: - name: instana-registry configKubernetes: pod_service_account_definition: | apiVersion: v1 kind: ServiceAccount metadata: name: postgres-pod imagePullSecrets: - name: instana-registry podServiceAccount: name: postgres-podInstale o operador ` Postgres `.
helm install postgres-operator instana/postgres-operator --version=v1.10.1 -f values.yaml -n instana-postgres
Crie um arquivo, por exemplo
postgres.yaml, com a definição de recursopostgresql.apiVersion: "acid.zalan.do/v1" kind: postgresql metadata: name: postgres spec: patroni: pg_hba: - local all all trust - host all all 0.0.0.0/0 trust - local replication standby trust - hostssl replication standby all trust - hostnossl all all all reject - hostssl all all all trust dockerImage: artifact-public.instana.io/self-hosted-images/3rd-party/datastore/zalando:15.7_v0.1.0 teamId: instana numberOfInstances: 3 postgresql: version: "15" parameters: # Expert section shared_buffers: "32MB" volume: size: 10Gi # Uncomment the following line to specify your own storage class, otherwise use the default. # storageClass: <REPLACE>- Conclua as etapas em Implementando e verificando o Postgres (online e offline).
Instalando o Postgres no modo offline
Instale o operador do ` Postgres ` em um ambiente offline.
Instalando o ` Postgres ` offline usando o operador `PG` do ` CloudNative `
Se você ainda não tiver extraído as imagens do Postgres do registro externo quando estiver preparado para a instalação, será possível extrai-las agora! Execute os comandos a seguir no host bastion. Em seguida, copie as imagens para o seu servidor de armazenamento de imagens ( Instana ) localizado no seu ambiente isolado.
docker pull artifact-public.instana.io/self-hosted-images/3rd-party/operator/cloudnative-pg:v1.29.1_v0.34.0
docker pull artifact-public.instana.io/self-hosted-images/3rd-party/datastore/cnpg-containers:15_v0.39.0
Siga as etapas a seguir no seu servidor do Instana.
Remarque as imagens para o seu registro de imagem interno
docker tag artifact-public.instana.io/self-hosted-images/3rd-party/operator/cloudnative-pg:v1.29.1_v0.34.0 <internal-image-registry>/operator/cloudnative-pg:v1.29.1_v0.34.0 docker tag artifact-public.instana.io/self-hosted-images/3rd-party/datastore/cnpg-containers:15_v0.39.0 <internal-image-registry>/datastore/cnpg-containers:15_v0.39.0Envie por push as imagens para seu registro de imagem interno no host bastion.
docker push <internal-image-registry>/operator/cloudnative-pg:v1.29.1_v0.34.0 docker push <internal-image-registry>/datastore/cnpg-containers:15_v0.39.0Crie o namespace
instana-postgres.kubectl create namespace instana-postgresOpcional: Crie um segredo de image pull se o seu registro de imagem interno precisar de autenticação.
kubectl create secret docker-registry <secret_name> --namespace instana-postgres \ --docker-username=<registry_username> \ --docker-password=<registry_password> \ --docker-server=<internal-image-registry>:<internal-image-registry-port> \ --docker-email=<registry_email>Se você estiver instalando o Postgres em um cluster do Red Hat® OpenShift®, determine o ID do grupo do sistema de arquivos a partir do
instana-postgresnamespace. Red Hat OpenShift exige que os grupos do sistema de arquivos estejam dentro de um intervalo de valores específico para o namespace.kubectl get namespace instana-postgres -o yamlPara o comando, é exibida uma saída semelhante ao exemplo a seguir:
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 ....... name: instana-postgresA
openshift.io/sa.scc.supplemental-groupsanotação contém o intervalo de IDs permitidos. O intervalo1000750000/10000indica 10.000 valores a partir do ID1000750000, portanto, especifica o intervalo de IDs de1000750000a1000760000. Neste exemplo, o valor1000750000pode ser usado como um ID de grupo do sistema de arquivos (UID).Instale o operador ` Postgres `. No comando a seguir, substitua o valor de <download_key> pela sua própria chave de agente. Se você criou um segredo de pull de imagem para o seu registro interno, adicione
--docker-server=<internal-image-registry>:<internal-image-registry-port>ao comando a seguir.Red Hat OpenShift agrupamento
Use o UID da etapa anterior como nos
<UID from namespace>comandos a seguir:helm install cnpg cloudnative-pg-1.28.0.tgz --set image.repository=image-registry.openshift-image-registry.svc:5000/instana-postgres/cloudnative-pg-operator --set image.tag=v1.29.1_v0.34.0 --version=0.28.2 --set containerSecurityContext.runAsUser=<UID from namespace> --set containerSecurityContext.runAsGroup=<UID from namespace> -n instana-postgresCluster Kubernetes
helm install cnpg cloudnative-pg-operator --set image.repository=<internal-image-registry>/operator/cloudnative-pg --set image.tag=v1.29.1_v0.34.0 --version=0.28.2 -n instana-postgres
Gere uma senha no site base64. Anote a senha. Você precisa salvar isso mais tarde no arquivo
config.yaml.openssl rand -base64 24 | tr -cd 'a-zA-Z0-9' | head -c32; echoCrie um recurso do tipo
Secretusando a senha obtida no comando anterior.kind: Secret apiVersion: v1 metadata: name: instanaadmin type: Opaque stringData: username: instanaadmin password: <user-generate-password>Crie o segredo do serviço de armazenamento em nuvem ( Postgres ).
kubectl apply -f postgres-secret.yaml -n instana-postgresCrie um arquivo ` YAML `, por exemplo
postgres.yaml, com a configuração do cluster ` Postgres `.apiVersion: postgresql.cnpg.io/v1 kind: Cluster metadata: name: postgres spec: instances: 3 imageName: <internal-image-registry>/datastore/cnpg-containers:15_v0.39.0 imagePullPolicy: IfNotPresent # Optional: if you created an image pull secret for your internal registry, uncomment the following lines and update the image pull secret information. # imagePullSecrets: # - name: <internal-image-registry-pull-secret> postgresql: parameters: shared_buffers: 32MB pg_stat_statements.track: all auto_explain.log_min_duration: '10s' pg_hba: - local all all trust - host all all 0.0.0.0/0 md5 - local replication standby trust - hostssl replication standby all md5 - hostnossl all all all reject - hostssl all all all md5 managed: roles: - name: instanaadmin login: true superuser: true createdb: true createrole: true passwordSecret: name: instanaadmin bootstrap: initdb: database: instanaadmin owner: instanaadmin secret: name: instanaadmin superuserSecret: name: instanaadmin storage: size: 1Gi # storageClass: "Optional"- Conclua as etapas em Implementando e verificando o Postgres (online e offline).
Instalação do ` Postgres ` no modo offline usando o operador ` Zalando `
Se você estiver usando um cluster do Red Hat OpenShift, crie Restrições de Contexto de Segurança antes de implantar o operador Postgres.
Crie um arquivo ` YAML `, por exemplo
postgres-scc.yaml, com a definição do recurso SCC.apiVersion: security.openshift.io/v1 kind: SecurityContextConstraints metadata: name: postgres-scc runAsUser: type: MustRunAs uid: 101 seLinuxContext: type: RunAsAny fsGroup: type: RunAsAny allowHostDirVolumePlugin: false allowHostNetwork: true allowHostPorts: true allowPrivilegedContainer: false allowHostIPC: true allowHostPID: true readOnlyRootFilesystem: false users: - system:serviceaccount:instana-postgres:postgres-operator - system:serviceaccount:instana-postgres:postgres-pod - system:serviceaccount:instana-postgres:defaultCrie o recurso de SCC
kubectl apply -f postgres-scc.yaml
Em seguida, continue com a instalação do operador do Postgres
Se você ainda não tiver extraído as imagens do Postgres do registro externo quando estiver preparado para a instalação, será possível extrai-las agora! Execute os comandos a seguir no host bastion. Em seguida, copie as imagens para o seu servidor de armazenamento de imagens ( Instana ) localizado no seu ambiente isolado.
docker pull artifact-public.instana.io/self-hosted-images/3rd-party/operator/zalando:v1.10.0_v0.1.0
docker pull artifact-public.instana.io/self-hosted-images/3rd-party/datastore/zalando:15.7_v0.1.0
Siga as etapas a seguir no seu servidor do Instana.
Remarque as imagens para o seu registro de imagem interno
docker tag artifact-public.instana.io/self-hosted-images/3rd-party/operator/zalando:v1.10.0_v0.1.0 <internal-image-registry>/self-hosted-images/3rd-party/operator/zalando:v1.10.0_v0.1.0 docker tag artifact-public.instana.io/self-hosted-images/3rd-party/datastore/zalando:15.7_v0.1.0 <internal-image-registry>/self-hosted-images/3rd-party/datastore/zalando:15.7_v0.1.0Envie por push as imagens para seu registro de imagem interno no host bastion.
docker push <internal-image-registry>/self-hosted-images/3rd-party/operator/zalando:v1.10.0_v0.1.0 docker push <internal-image-registry>/self-hosted-images/3rd-party/datastore/zalando:15.7_v0.1.0Crie um arquivo, por exemplo
values.yaml, com a configuração Postgres.configGeneral: kubernetes_use_configmaps: true securityContext: runAsUser: 101 image: registry: <internal-image-registry> repository: self-hosted-images/3rd-party/operator/zalando tag: v1.10.0_v0.1.0 imagePullSecrets: - name: instana-registry configKubernetes: pod_service_account_definition: | apiVersion: v1 kind: ServiceAccount metadata: name: postgres-pod imagePullSecrets: - name: instana-registry podServiceAccount: name: postgres-podCrie o namespace
instana-postgres.kubectl create namespace instana-postgresOpcional: Crie um segredo de image pull se o seu registro de imagem interno precisar de autenticação.
kubectl create secret docker-registry <secret_name> --namespace instana-postgres \ --docker-username=<registry_username> \ --docker-password=<registry_password> \ --docker-server=<internal-image-registry>:<internal-image-registry-port> \ --docker-email=<registry_email>Instale o operador ` Postgres `. Se você criou uma imagem pull secret na etapa anterior, adicione
--set imagePullSecrets[0].name="<internal-image-registry-pull-secret>"ao comando a seguir.helm install postgres-operator postgres-operator-ppc64le-1.10.0.tgz --version=1.10.0 --set configGeneral.kubernetes_use_configmaps=true --set securityContext.runAsUser=101 --namespace=instana-postgres --set image.registry=<internal-image-registry> --set image.repository=ppc64le-oss/postgres-operator-ppc64le --set image.tag=v1.10.0_v0.1.0Crie um arquivo, por exemplo
postgres.yaml, com a definição de recursopostgresql.apiVersion: "acid.zalan.do/v1" kind: postgresql metadata: name: postgres spec: patroni: pg_hba: - local all all trust - host all all 0.0.0.0/0 trust - local replication standby trust - hostssl replication standby all trust - hostnossl all all all reject - hostssl all all all trust dockerImage: <internal-image-registry>/self-hosted-images/3rd-party/datastore/zalando:15.7_v0.1.0 teamId: instana numberOfInstances: 3 postgresql: version: "15" parameters: # Expert section shared_buffers: "32MB" volume: size: 10Gi # Uncomment the line below to specify your own storage class, otherwise use the default. # storageClass: <REPLACE>Conclua as etapas em Implementando e verificando o Postgres (online e offline).
Implantação e verificação do ` Postgres ` (online e offline)
Conclua estas etapas para implementar a instância do Postgres e criar o armazenamento de dados
Crie o recurso do
postgresqlkubectl apply -f postgres.yaml --namespace=instana-postgresSe você utilizou o operador ` CNPG `, siga estas etapas:
Salve a senha que você gerou anteriormente no
config.yamlarquivo.datastoreConfigs: ... postgresConfigs: - user: instanaadmin password: <USER_GENERATED_PASSWORD> adminUser: instanaadmin adminPassword: <USER_GENERATED_PASSWORD> ...
Se você utilizou o operador ` Zalando `, siga estas etapas:
Recupere a senha gerada automaticamente do usuário Zalando. Por padrão, o comando ` Zalando ` cria o
postgresusuário com uma senha gerada aleatoriamente.kubectl get secret postgres.postgres.credentials.postgresql.acid.zalan.do -n instana-postgres --template='{{index .data.password | base64decode}}' && echoArmazene a senha recuperada no arquivo
config.yaml- Substitua o valor da variável ` < RETRIEVED_FROM_SECRET> pela senha que você obteve na etapa anterior.
- Substitua
<username in the Postgres data store>por Zalando (nome de usuário).
datastoreConfigs: ... postgresConfigs: - user: <username in the Postgres data store> password: <RETRIEVED_FROM_SECRET> adminUser: <username in the Postgres data store> adminPassword: <RETRIEVED_FROM_SECRET> ...
Verifique a implementação do operador Postgres.
kubectl get all -n instana-postgresSe o operador Postgres for implantado com êxito, o resultado do comando será o seguinte:
A saída a seguir é um exemplo do operad Zalando :
NAME READY STATUS RESTARTS AGE pod/postgres-0 1/1 Running 0 100s pod/postgres-1 1/1 Running 0 69s pod/postgres-2 1/1 Running 0 41s pod/postgres-operator-766455c58c-ntmpf 1/1 Running 0 11m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/postgres ClusterIP 192.168.1.107 <none> 5432/TCP 101s service/postgres-operator ClusterIP 192.168.1.35 <none> 8080/TCP 11m service/postgres-repl ClusterIP 192.168.1.72 <none> 5432/TCP 101s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/postgres-operator 1/1 1 1 11m NAME DESIRED CURRENT READY AGE replicaset.apps/postgres-operator-766455c58c 1 1 1 11m NAME READY AGE statefulset.apps/postgres 3/3 103s NAME IMAGE CLUSTER-LABEL SERVICE-ACCOUNT MIN-INSTANCES AGE operatorconfiguration.acid.zalan.do/postgres-operator ghcr.io/zalando/spilo-15:3.0-p1 cluster-name postgres-pod -1 11m NAME TEAM VERSION PODS VOLUME CPU-REQUEST MEMORY-REQUEST AGE STATUS postgresql.acid.zalan.do/postgres instana 15 3 10Gi 500m 2Gi 106s RunningA saída a seguir é um exemplo paraCloudNativePG operador:
NAME READY STATUS RESTARTS AGE pod/postgres-1 1/1 Running 0 100s pod/postgres-2 1/1 Running 0 69s pod/postgres-3 1/1 Running 0 41s pod/cnpg-cloudnative-pg-64bbc87958-fqnrl 1/1 Running 0 11m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT service/cnpg-webhook-service ClusterIP 172.30.66.183 <none> 443/TCP service/postgres-r ClusterIP 172.30.163.146 <none> 5432/TCP service/postgres-ro ClusterIP 172.30.226.75 <none> 5432/TCP service/postgres-rw ClusterIP 172.30.235.178 <none> 5432/TCP NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/cnpg-cloudnative-p 1/1 1 1 11m NAME DESIRED CURRENT READY AGE replicaset.apps/cnpg-cloudnative-pg-64bbc87958 1 1 1 11m
Migração de dados de Zalando para CloudNativePG
Ao usar o modo pg_basebackup bootstrap, você pode criar um novo cluster do PostgreSQL (destino) que replica exatamente o estado físico de uma instância existente do PostgreSQL (origem).
É possível iniciar o processo a partir de um cluster ativo por meio de uma conexão válida de replicação por streaming, utilizando a instância de origem PostgreSQL como servidor primário ou como servidor de espera PostgreSQL.
Para migrar os dados de um cluster do Zalando PostgreSQL, por meio do modo pg_basebackup bootstrap, para um cluster de réplicas do CloudNativePG, consulte Migrando dados do Zalando para o CloudNativePG.