Erstellen eines „ Postgres “-Datenspeichers auf Linux on IBM Z and LinuxONE
Installieren Sie den Operator Postgres und richten Sie den Datenspeicher ein.
Vorbereitende Schritte
Stellen Sie sicher, dass Sie Ihren Online-und Offline-Host vorbereitet haben, um Images aus dem externen Repository zu extrahieren. Stellen Sie außerdem sicher, dass das richtige Helm -Repository hinzugefügt wurde.
Weitere Informationen finden Sie unter „Vorbereitung der Installation des Datenspeichers “.
Postgres Betreiber-Versionen und Image-Tags für die Bereitstellung
Die folgenden Images sind für die fixierten Helm -Diagramm-oder Operatorversionen erforderlich.
| Plattform | Operatorversionen | Version des Helm-Diagramms | Image mit Tag |
|---|---|---|---|
| Linux® on IBM Z® and LinuxONE | 1.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 |
Postgres online installieren mithilfe des Befehls „ CloudNativePG “
Führen Sie die folgenden Schritte aus, um den „ Postgres “-Operator in einer Online-Umgebung zu installieren.
Erstellen Sie den Namensbereich
instana-postgres.kubectl create namespace instana-postgresErstellen Sie geheime Schlüssel für Image-Pull-Operationen für den Namensbereich
instana-postgres.kubectl create secret docker-registry instana-registry --namespace instana-postgres \ --docker-username=_ \ --docker-password=<download_key> \ --docker-server=artifact-public.instana.ioWenn Sie „ Postgres “ auf einem „ Red Hat® OpenShift® “-Cluster installieren, ermitteln Sie die Dateisystem-Gruppen-ID anhand des
instana-postgresNamespace. Red Hat OpenShift erfordert, dass sich Dateisystemgruppen innerhalb eines für den Namensraum spezifischen Wertebereichs befinden.kubectl get namespace instana-postgres -o yamlFür den Befehl wird eine Ausgabe angezeigt, die dem folgenden Beispiel ähnelt:
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-postgresDie
openshift.io/sa.scc.supplemental-groupsAnmerkung enthält den Bereich der zulässigen IDs. Der Bereich1000750000/10000umfasst 10.000 Werte, beginnend mit der ID1000750000, d. h. er gibt den Bereich der IDs von1000750000bis1000760000an. In diesem Beispiel könnte der1000750000Wert als Dateisystem-Gruppen-ID (UID) verwendet werden.Erstellen Sie die Toleranz und
custom_values.yamldie Affinität und legen Sie diese fest. Überspringe diesen Schritt, wenn die Datei bereits erstellt wurde.tolerations: - key: node.instana.io/monitor operator: Equal effect: NoSchedule value: "true" affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: node-role.kubernetes.io/monitor operator: In values: - "true"Installieren Sie Postgres Operator. Verwenden Sie die UID aus dem vorherigen Schritt als im
<UID from namespace>folgenden Befehl: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 -f custom_values.yamlErstellen Sie ein Passwort unter base64. Notieren Sie sich das Passwort. Das musst du später in der
config.yamlDatei speichern.openssl rand -base64 24 | tr -cd 'a-zA-Z0-9' | head -c32; echoErstellen Sie eine Ressource vom Typ
Secretunter Verwendung des Passworts, das Sie im vorherigen Befehl erhalten haben.kind: Secret apiVersion: v1 metadata: name: instanaadmin type: Opaque stringData: username: instanaadmin password: <user-generate-password>Erstellen Sie den geheimen Schlüssel „ Postgres “.
kubectl apply -f postgres-secret.yaml -n instana-postgresErstellen Sie eine Datei namens „ YAML “, beispielsweise mit der Clusterkonfiguration
postgres.yaml„ Postgres “.apiVersion: postgresql.cnpg.io/v1 kind: Cluster metadata: name: postgres spec: instances: 3 affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: node-role.kubernetes.io/monitor operator: In values: - "true" tolerations: - key: node.instana.io/monitor operator: Equal value: "true" effect: NoSchedule 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"Stellen Sie den Cluster „ Postgres “ bereit.
kubectl apply -f postgres.yaml -n instana-postgresFühren Sie die Schritte unter Postgres (online und offline)aus.
Offline-Installation von „ Postgres “ mithilfe des PG-Operators „ CloudNative “
Installieren Sie Postgres Operator in einer Offlineumgebung.
Wenn Sie die Postgres -Images noch nicht aus der externen Registry extrahiert haben, als Sie für die Installation vorbereitethaben, können Sie sie jetzt extrahieren. Führen Sie die folgenden Befehle auf Ihrem Bastionshost aus: Kopieren Sie die Bilder anschließend auf Ihren „ Instana “-Host, der sich in Ihrer isolierten Umgebung befindet.
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
Führen Sie die folgenden Schritte auf Ihrem „ Instana “-Host aus.
Versehen Sie die Images erneut mit Ihrer internen Image-Registry.
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.0Übertragen Sie die Images mit Push-Operation in Ihre interne Image-Registry auf Ihrem Bastionshost.
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.0Erstellen Sie den Namensbereich
instana-postgres.kubectl create namespace instana-postgresOptional: Erstellen Sie ein Bildabrufgeheimnis, wenn Ihre interne Bildregistrierung eine Authentifizierung erfordert.
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>Wenn Sie „ Postgres “ auf einem „ Red Hat® OpenShift® “-Cluster installieren, ermitteln Sie die Dateisystem-Gruppen-ID anhand des
instana-postgresNamespace. Red Hat OpenShift erfordert, dass sich Dateisystemgruppen innerhalb eines für den Namensraum spezifischen Wertebereichs befinden.kubectl get namespace instana-postgres -o yamlFür den Befehl wird eine Ausgabe angezeigt, die dem folgenden Beispiel ähnelt:
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-postgresDie
openshift.io/sa.scc.supplemental-groupsAnmerkung enthält den Bereich der zulässigen IDs. Der Bereich1000750000/10000umfasst 10.000 Werte, beginnend mit der ID1000750000, d. h. er gibt den Bereich der IDs von1000750000bis1000760000an. In diesem Beispiel könnte der1000750000Wert als Dateisystem-Gruppen-ID (UID) verwendet werden.Erstellen Sie die Toleranz und
custom_values.yamldie Affinität und legen Sie diese fest. Überspringe diesen Schritt, wenn die Datei bereits erstellt wurde.tolerations: - key: node.instana.io/monitor operator: Equal effect: NoSchedule value: "true" affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: node-role.kubernetes.io/monitor operator: In values: - "true"Installieren Sie Postgres Operator. Ersetzen Sie im folgenden Befehl den Wert <download_key> durch Ihren eigenen Agentenschlüssel. Wenn Sie ein Image-Pull-Secret für Ihr internes Registry erstellt haben, fügen Sie
--docker-server=<internal-image-registry>:<internal-image-registry-port>zum folgenden Befehl hinzu.Red Hat OpenShift Cluster
Verwenden Sie die UID aus dem vorherigen Schritt in
<UID from namespace>den folgenden Befehlen: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-postgres -f custom_values.yamlKubernetes-Cluster
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
Erstellen Sie ein Passwort unter base64. Notieren Sie sich das Passwort. Das musst du später in der
config.yamlDatei speichern.openssl rand -base64 24 | tr -cd 'a-zA-Z0-9' | head -c32; echoErstellen Sie eine Ressource vom Typ
Secretunter Verwendung des Passworts, das Sie im vorherigen Befehl erhalten haben.kind: Secret apiVersion: v1 metadata: name: instanaadmin type: Opaque stringData: username: instanaadmin password: <user-generate-password>Erstellen Sie den geheimen Schlüssel „ Postgres “.
kubectl apply -f postgres-secret.yaml -n instana-postgresErstellen Sie eine Datei namens „ YAML “, beispielsweise mit der Clusterkonfiguration
postgres.yaml„ 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
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: node-role.kubernetes.io/monitor
operator: In
values:
- "true"
tolerations:
- key: node.instana.io/monitor
operator: Equal
value: "true"
effect: NoSchedule
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"
- Stellen Sie den Cluster „ Postgres “ bereit.
kubectl apply -f postgres.yaml -n instana-postgres - Führen Sie die Schritte unter Postgres (online und offline)aus.
Bereitstellung und Überprüfung von „ Postgres “ (online und offline)
Führen Sie die folgenden Schritte aus, um die Postgres -Instanz zu implementieren und den Datenspeicher zu erstellen.
Speichern Sie das zuvor generierte Passwort in der
config.yamlDatei.datastoreConfigs: ... postgresConfigs: - user: instanaadmin password: <USER_GENERATED_PASSWORD> adminUser: instanaadmin adminPassword: <USER_GENERATED_PASSWORD> ...Erstellen Sie die Ressource
postgresql.kubectl apply -f postgres.yaml --namespace=instana-postgresÜberprüfen Sie die Postgres -Operatorbereitstellung.
kubectl get all -n instana-postgresWenn der Postgres -Operator erfolgreich implementiert wurde, lautet das Ergebnis des Befehls wie folgt:
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 11mStellen Sie sicher, dass die Pods auf den gewünschten Knoten eingeplant sind.
kubectl get pods -n instana-postgres -o wideDas folgende Beispiel zeigt eine Beispielausgabe.
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES cnpg-cloudnative-pg-7cdf76c49c-kztxr 1/1 Running 0 22d 10.254.20.122 worker0.instana-load-testing.cp.fyre.ibm.com <none> <none> postgres-1 1/1 Running 0 22d 10.254.20.124 worker0.instana-load-testing.cp.fyre.ibm.com <none> <none> postgres-3 1/1 Running 0 22d 10.254.16.93 worker1.instana-load-testing.cp.fyre.ibm.com <none> <none> postgres-4 1/1 Running 0 22d 10.254.24.65 worker3.instana-load-testing.cp.fyre.ibm.com <none> <none>
Daten von Zalando auf CloudNativePG migrieren
Im pg_basebackup Bootstrap-Modus können Sie einen neuen „ PostgreSQL “-Cluster (Ziel) erstellen, der den genauen physischen Zustand einer bestehenden „ PostgreSQL “-Instanz (Quelle) repliziert.
Sie können über eine gültige Streaming-Replikationsverbindung von einem aktiven Cluster aus starten und dabei die Quellinstanz von PostgreSQL entweder als primären oder als Standby-Server von PostgreSQL verwenden.
Informationen zur Migration von Daten aus einem Cluster unter Zalando PostgreSQL über den pg_basebackup Bootstrap-Modus in einen Replikationscluster unter CloudNativePG finden Sie unter „Migration von Daten von Zalando zu CloudNativePG “.