it-wiki:kubernetes:postgresql_mit_zalando_bereitstellen
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
it-wiki:kubernetes:postgresql_mit_zalando_bereitstellen [2024/03/19 10:17] – [Bereitstellungsarchitektur] marko | it-wiki:kubernetes:postgresql_mit_zalando_bereitstellen [2024/04/25 05:31] (aktuell) – marko | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== PostgreSQL mit Zalando in Kubernetes bereitstellen ====== | + | ====== PostgreSQL mit Zalando |
In dieser Anleitung erfahren Sie, wie Sie mit dem [[https:// | In dieser Anleitung erfahren Sie, wie Sie mit dem [[https:// | ||
Zeile 34: | Zeile 34: | ||
- Erstellen Sie einen Namespace für den Zalando-Operator und den Postgres-Cluster: | - Erstellen Sie einen Namespace für den Zalando-Operator und den Postgres-Cluster: | ||
kubectl create ns zalando</ | kubectl create ns zalando</ | ||
+ | - Stellen Sie den Zalando-Operator mit dem Helm-Befehlszeilentool bereit: <code bash> | ||
+ | --set configKubernetes.enable_pod_antiaffinity=true \ | ||
+ | --set configKubernetes.pod_antiaffinity_preferred_during_scheduling=true \ | ||
+ | --set configKubernetes.pod_antiaffinity_topology_key=" | ||
+ | --set configKubernetes.spilo_fsgroup=" | ||
+ | - Prüfen Sie den Bereitstellungsstatus des Zalando-Operators mit Helm: <code bash> | ||
+ | postgres-operator | ||
+ | |||
+ | ===== Postgres bereitstellen ===== | ||
+ | Die grundlegende Konfiguration für die Postgres-Clusterinstanz umfasst die folgenden Komponenten: | ||
+ | * Drei Postgres-Replikate: | ||
+ | * CPU-Ressourcenzuweisung: | ||
+ | * Toleranzen, nodeAffinities und topologySpreadConstraints, | ||
+ | |||
+ | Diese Konfiguration stellt die minimale Einrichtung dar, die zum Erstellen eines produktionsfertigen Postgres-Clusters erforderlich ist. | ||
+ | |||
+ | Das folgende Manifest beschreibt einen Postgres-Cluster: | ||
+ | [[https:// | ||
+ | <code yaml> | ||
+ | apiVersion: " | ||
+ | kind: postgresql | ||
+ | metadata: | ||
+ | name: my-cluster | ||
+ | spec: | ||
+ | dockerImage: | ||
+ | teamId: " | ||
+ | numberOfInstances: | ||
+ | users: | ||
+ | mydatabaseowner: | ||
+ | - superuser | ||
+ | - createdb | ||
+ | myuser: [] | ||
+ | databases: | ||
+ | mydatabase: mydatabaseowner | ||
+ | postgresql: | ||
+ | version: " | ||
+ | parameters: | ||
+ | shared_buffers: | ||
+ | max_connections: | ||
+ | log_statement: | ||
+ | password_encryption: | ||
+ | volume: | ||
+ | size: 5Gi | ||
+ | storageClass: | ||
+ | enableShmVolume: | ||
+ | podAnnotations: | ||
+ | cluster-autoscaler.kubernetes.io/ | ||
+ | tolerations: | ||
+ | - key: " | ||
+ | operator: " | ||
+ | value: " | ||
+ | effect: NoSchedule | ||
+ | nodeAffinity: | ||
+ | preferredDuringSchedulingIgnoredDuringExecution: | ||
+ | - weight: 1 | ||
+ | preference: | ||
+ | matchExpressions: | ||
+ | - key: " | ||
+ | operator: In | ||
+ | values: | ||
+ | - " | ||
+ | resources: | ||
+ | requests: | ||
+ | cpu: " | ||
+ | memory: 4Gi | ||
+ | limits: | ||
+ | cpu: " | ||
+ | memory: 4Gi | ||
+ | sidecars: | ||
+ | - name: exporter | ||
+ | image: quay.io/ | ||
+ | args: | ||
+ | - --collector.stat_statements | ||
+ | ports: | ||
+ | - name: exporter | ||
+ | containerPort: | ||
+ | protocol: TCP | ||
+ | resources: | ||
+ | limits: | ||
+ | cpu: 500m | ||
+ | memory: 256M | ||
+ | requests: | ||
+ | cpu: 100m | ||
+ | memory: 256M | ||
+ | env: | ||
+ | - name: " | ||
+ | value: " | ||
+ | - name: " | ||
+ | value: " | ||
+ | - name: " | ||
+ | value: " | ||
+ | </ | ||
+ | |||
+ | Dieses Manifest hat die folgenden Felder: | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | Weitere Informationen finden Sie in der Postgres-Dokumentation unter [[https:// | ||
+ | |||
+ | ===== Einfachen Postgres-Cluster erstellen ===== | ||
+ | - Erstellen Sie mithilfe der grundlegenden Konfiguration einen neuen Postgres-Cluster: | ||
+ | - Warten Sie, bis Kubernetes die erforderlichen Arbeitslasten gestartet hat: <code bash> | ||
+ | - Prüfen Sie, ob Kubernetes die Postgres-Arbeitslasten erstellt hat: <code bash> | ||
+ | pod/ | ||
+ | pod/ | ||
+ | pod/ | ||
+ | pod/ | ||
+ | |||
+ | NAME TYPE CLUSTER-IP | ||
+ | service/ | ||
+ | service/ | ||
+ | service/ | ||
+ | service/ | ||
+ | |||
+ | NAME READY AGE | ||
+ | statefulset.apps/ | ||
+ | |||
+ | NAME READY | ||
+ | deployment.apps/ | ||
+ | |||
+ | NAME MIN AVAILABLE | ||
+ | poddisruptionbudget.policy/ | ||
+ | |||
+ | NAME TYPE DATA AGE | ||
+ | secret/ | ||
+ | secret/ | ||
+ | secret/ | ||
+ | secret/ | ||
+ | secret/ | ||
+ | |||
+ | Der Operator erstellt die folgenden Ressourcen: | ||
+ | * Ein Postgres-StatefulSet, | ||
+ | * Einen '' | ||
+ | * Den '' | ||
+ | * Den '' | ||
+ | * Den monitorlosen Dienst '' | ||
+ | * Secrets mit Nutzeranmeldedaten für den Zugriff auf die Datenbank und die Replikation zwischen Postgres-Knoten | ||
+ | |||
+ | ===== Bei Postgres authentifizieren ===== | ||
+ | Sie können Postgres-Nutzer erstellen und ihnen Datenbankberechtigungen zuweisen. Das folgende Manifest beschreibt beispielsweise eine benutzerdefinierte Ressource, die Nutzer und Rollen zuweist: | ||
+ | <code yaml> | ||
+ | apiVersion: " | ||
+ | kind: postgresql | ||
+ | metadata: | ||
+ | name: my-cluster | ||
+ | spec: | ||
+ | ... | ||
+ | users: | ||
+ | mydatabaseowner: | ||
+ | - superuser | ||
+ | - createdb | ||
+ | myuser: [] | ||
+ | databases: | ||
+ | mydatabase: mydatabaseowner | ||
+ | </ | ||
+ | |||
+ | In diesem Manifest: | ||
+ | * Der '' | ||
+ | * Dem Nutzer '' | ||
+ | |||
+ | ===== Passwörter speichern ===== | ||
+ | Verwenden Sie die [[https:// | ||
+ | <code yaml> | ||
+ | apiVersion: " | ||
+ | kind: postgresql | ||
+ | metadata: | ||
+ | name: my-cluster | ||
+ | spec: | ||
+ | ... | ||
+ | postgresql: | ||
+ | parameters: | ||
+ | password_encryption: | ||
+ | </ | ||
+ | |||
+ | ===== Nutzeranmeldedaten rotieren ===== | ||
+ | Sie können [[https:// | ||
+ | <code yaml> | ||
+ | apiVersion: " | ||
+ | kind: postgresql | ||
+ | metadata: | ||
+ | name: my-cluster | ||
+ | spec: | ||
+ | ... | ||
+ | usersWithSecretRotation: | ||
+ | - myuser | ||
+ | - myanotheruser | ||
+ | - ... | ||
+ | </ | ||
+ | |||
+ | ===== Authentifizierungsbeispiel: | ||
+ | In diesem Abschnitt erfahren Sie, wie Sie einen Postgres-Beispielclient bereitstellen und mit dem Passwort aus einem Kubernetes-Secret eine Verbindung zur Datenbank herstellen. | ||
+ | - Führen Sie den Client-Pod aus, um mit Ihrem Postgres-Cluster zu interagieren: | ||
+ | - Stellen Sie eine Verbindung zum Pod her, wenn er bereit ist: <code bash> | ||
+ | kubectl exec -it postgres-client -n postgres -- / | ||
+ | - Stellen Sie eine Verbindung zu Postgres her und versuchen Sie, eine neue Tabelle mit den myuser-Anmeldedaten zu erstellen: <code bash> | ||
+ | -h my-cluster \ | ||
+ | -U $CLIENTUSERNAME \ | ||
+ | -d mydatabase \ | ||
+ | -c " | ||
+ | LINE 1: CREATE TABLE test (id serial PRIMARY KEY, randomdata VARCHAR...</ | ||
+ | - Erstellen Sie eine Tabelle mit '' | ||
+ | -h my-cluster \ | ||
+ | -U $OWNERUSERNAME \ | ||
+ | -d mydatabase \ | ||
+ | -c " | ||
+ | GRANT | ||
+ | GRANT </ | ||
+ | - Fügen Sie zufällige Daten mit den Anmeldedaten myuser in die Tabelle ein: <code bash>for i in {1..10}; do | ||
+ | DATA=$(tr -dc A-Za-z0-9 </ | ||
+ | PGPASSWORD=$CLIENTPASSWORD psql \ | ||
+ | -h my-cluster \ | ||
+ | -U $CLIENTUSERNAME \ | ||
+ | -d mydatabase \ | ||
+ | -c " | ||
+ | done</ | ||
+ | INSERT 0 1 | ||
+ | INSERT 0 1 | ||
+ | INSERT 0 1 | ||
+ | INSERT 0 1 | ||
+ | INSERT 0 1 | ||
+ | INSERT 0 1 | ||
+ | INSERT 0 1 | ||
+ | INSERT 0 1 | ||
+ | INSERT 0 1</ | ||
+ | - Rufen Sie die eingefügten Werte ab: <code bash> | ||
+ | -h my-cluster \ | ||
+ | -U $CLIENTUSERNAME \ | ||
+ | -d mydatabase \ | ||
+ | -c " | ||
+ | ----+--------------- | ||
+ | 1 | jup9HYsAjwtW4 | ||
+ | 2 | 9rLAyBlcpLgNT | ||
+ | 3 | wcXSqxb5Yz75g | ||
+ | 4 | KoDRSrx3muD6T | ||
+ | 5 | b9atC7RPai7En | ||
+ | 6 | 20d7kC8E6Vt1V | ||
+ | 7 | GmgNxaWbkevGq | ||
+ | 8 | BkTwFWH6hWC7r | ||
+ | 9 | nkLXHclkaqkqy | ||
+ | 10 | HEebZ9Lp71Nm3 | ||
+ | (10 rows)</ | ||
+ | - Beenden Sie die Pod-Shell: <code bash> |
it-wiki/kubernetes/postgresql_mit_zalando_bereitstellen.1710843440.txt.gz · Zuletzt geändert: von marko