Úvod
PostgreSQL je spolehlivý a robustní relační databázový systém obsahující transakce vyhovující ACID. Je navržen tak, aby zvládal pracovní zátěže všech velikostí, takže se dobře hodí pro osobní použití a rozsáhlá nasazení, jako jsou datové sklady, servery velkých dat nebo webové služby.
Nasazení PostgreSQL na Kubernetes vytvoří škálovatelnou a přenosnou instanci PostgreSQL, která využívá dobré stránky RDBMS i orchestrační platformy.
Tento článek vám ukáže dva způsoby nasazení PostgreSQL na Kubernetes – pomocí Helm grafu nebo ručního vytvoření konfigurace.

Předpoklady
- Cluster Kubernetes s nainstalovaným kubectl
- Nainstalován Helm 3
- Administrativní práva ve vašem systému
Nasazení PostgreSQL pomocí Helm
Helm vám poskytuje rychlý a snadný způsob nasazení instance PostgreSQL na váš cluster.
Krok 1:Přidejte úložiště Helm
1. Vyhledejte v Artifact Hub graf PostgreSQL Helm, který chcete použít. Přidejte úložiště grafu do místní instalace Helm zadáním:
helm repo add [repository-name] [repository-address]
Tento článek používá graf Bitnami Helm pro instalaci PostgreSQL.

2. Po přidání úložiště aktualizujte své místní úložiště.
helm repo update
Systém potvrdí úspěšnou aktualizaci.

Krok 2:Vytvořte a použijte trvalý svazek úložiště
Data ve vaší databázi Postgres musí zůstat zachována po restartování modulu.
1. Chcete-li toho dosáhnout, vytvořte prostředek PersistentVolume v souboru YAML pomocí textového editoru, jako je nano.
nano postgres-pv.yaml
Obsah souboru definuje:
- Samotný zdroj.
- Třída úložiště.
- Množství přiděleného úložiště.
- Režimy přístupu.
- Cesta připojení na hostitelském systému.
Tento příklad používá následující konfiguraci:
apiVersion: v1
kind: PersistentVolume
metadata:
name: postgresql-pv
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
2. Uložte soubor a ukončete. Poté použijte konfiguraci pomocí kubectl
:
kubectl apply -f postgres-pv.yaml
Systém potvrdí vytvoření trvalého svazku.

Krok 3:Vytvořte a použijte trvalý nárok na svazek
1. Vytvořte Persistent Volume Claim (PVC), abyste požádali o úložiště přidělené v předchozím kroku.
nano postgres-pvc.yaml
V příkladu je použita následující konfigurace:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgresql-pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
2. Uložte soubor a ukončete. Použijte konfiguraci pomocí kubectl
:
kubectl apply -f postgres-pvc.yaml
Systém potvrzuje úspěšné vytvoření PVC.

3. Použijte kubectl get
pro kontrolu, zda je PVC úspěšně připojeno k FV:
kubectl get pvc
Sloupec stavu ukazuje, že nárok je Vázaný .

Krok 4:Instalace Helm Chart
Nainstalujte tabulku kormidla pomocí helm install
příkaz. Přidat --set
flags příkazu pro připojení instalace k PVC, které jste vytvořili, a povolení oprávnění k svazku:
helm install [release-name] [repo-name] --set persistence.existingClaim=[pvc-name] --set volumePermissions.enabled=true
Systém zobrazí zprávu o úspěšné instalaci.

Krok 5:Připojte se ke klientovi PostgreSQL
1. Exportujte POSTGRES_PASSWORD
proměnná prostředí, abyste se mohli přihlásit do instance PostgreSQL:
export POSTGRES_PASSWORD=$(kubectl get secret --namespace default psql-test-postgresql -o jsonpath="{.data.postgresql-password}" | base64 --decode)
2. Otevřete další okno terminálu a zadejte následující příkaz pro předání portu Postgres:
kubectl port-forward --namespace default svc/psql-test-postgresql 5432:5432
Systém začne zpracovávat připojení k portu.

3. Minimalizujte okno pro předávání portů a vraťte se k předchozímu. Zadejte příkaz pro připojení k psql, klientovi PostgreSQL:
PGPASSWORD="$POSTGRES_PASSWORD" psql --host 127.0.0.1 -U postgres -d postgres -p 5432
psql
zobrazí se příkazový řádek a PostgreSQL je připraven přijímat váš vstup.

Nasaďte PostgreSQL vytvořením konfigurace od nuly
Ruční konfigurace Postgresu na Kubernetes vám umožňuje doladit konfiguraci nasazení.
Krok 1:Vytvořte a použijte ConfigMap
Prostředek ConfigMap obsahuje data, která se používají během procesu nasazení.
1. Vytvořte soubor ConfigMap YAML v textovém editoru.
nano postgres-configmap.yaml
2. Nejdůležitější částí souboru je datová část, kde uvedete název databáze , uživatelské jméno a heslo pro přihlášení do instance PostgreSQL.
V příkladu jsou použity následující parametry v souboru ConfigMap.
apiVersion: v1
kind: ConfigMap
metadata:
name: postgres-config
labels:
app: postgres
data:
POSTGRES_DB: postgresdb
POSTGRES_USER: admin
POSTGRES_PASSWORD: test123
3. Uložte soubor a ukončete. Poté použijte zdroj pomocí kubectl
:
kubectl apply -f postgres-configmap.yaml
Systém potvrdí úspěšné vytvoření konfiguračního souboru.

Krok 2:Vytvořte a použijte trvalý svazek úložiště a nárok na trvalý svazek
1. Vytvořte soubor YAML pro konfiguraci úložiště.
nano postgres-storage.yaml
2. Metoda nasazení grafu Helm používala dva samostatné soubory pro Persistent Volume a Persistent Volume Claim, ale můžete také umístit obě konfigurace do jednoho souboru, jako v příkladu níže.
kind: PersistentVolume
apiVersion: v1
metadata:
name: postgres-pv-volume
labels:
type: local
app: postgres
spec:
storageClassName: manual
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
hostPath:
path: "/mnt/data"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: postgres-pv-claim
labels:
app: postgres
spec:
storageClassName: manual
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
3. Uložte soubor a ukončete. Použijte prostředky pomocí kubectl
:
kubectl apply -f postgres-storage.yaml
Systém potvrzuje úspěšnou tvorbu PV i PVC.

4. Zkontrolujte, zda je PVC připojeno k PV pomocí následujícího příkazu:
kubectl get pvc
Stav PVC je Bound a PVC je připraveno k použití v nasazení PostgreSQL.

Krok 3:Vytvořte a použijte nasazení PostgreSQL
1. Vytvořte soubor YAML pro nasazení.
nano postgres-deployment.yaml
2. Soubor nasazení obsahuje konfiguraci nasazení PostgreSQL a poskytuje specifikace pro kontejnery a svazky:
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
spec:
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:10.1
imagePullPolicy: "IfNotPresent"
ports:
- containerPort: 5432
envFrom:
- configMapRef:
name: postgres-config
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: postgredb
volumes:
- name: postgredb
persistentVolumeClaim:
claimName: postgres-pv-claim
3. Uložte soubor a ukončete. Použijte nasazení pomocí kubectl
:
kubectl apply -f postgres-deployment.yaml
Systém potvrdí úspěšné vytvoření rozmístění.

Krok 4:Vytvoření a použití služby PostgreSQL
1. Nakonec vytvořte soubor YAML pro konfiguraci služby PostgreSQL.
nano postgres-service.yaml
2. Zadejte typ služby a porty. V příkladu je použita následující konfigurace:
apiVersion: v1
kind: Service
metadata:
name: postgres
labels:
app: postgres
spec:
type: NodePort
ports:
- port: 5432
selector:
app: postgres
3. Uložte soubor a ukončete. Použijte konfiguraci pomocí kubectl
:
kubectl apply -f postgres-service.yaml
Systém potvrdí úspěšné vytvoření služby.

4. Pomocí následujícího příkazu vypište všechny prostředky v systému.
kubectl get all
Pod a rozmístění ukazují 1/1 připravený stav. Požadovaný počet sad replik odráží to, co je nakonfigurováno v souboru YAML nasazení.

Krok 5:Připojte se k PostgreSQL
1. Když jsou všechny prostředky připraveny, použijte kubectl exec
pro přihlášení do instance PostgreSQL.
kubectl exec -it [pod-name] -- psql -h localhost -U admin --password -p [port] postgresdb
2. Systém požádá o heslo. Zadejte heslo definované v kroku 1 a stiskněte Enter . psql
zobrazí se příkazový řádek.

Databáze je nyní připravena přijímat uživatelský vstup.