Introduzione
PostgreSQL è un sistema di database relazionale affidabile e robusto con transazioni conformi agli ACID. È progettato per gestire carichi di lavoro di tutte le dimensioni, rendendolo adatto per l'uso personale e distribuzioni su larga scala come data warehouse, server di big data o servizi Web.
La distribuzione di PostgreSQL su Kubernetes crea un'istanza PostgreSQL scalabile e portatile, sfruttando i lati positivi sia dell'RDBMS che della piattaforma di orchestrazione.
Questo articolo ti mostrerà due metodi per distribuire PostgreSQL su Kubernetes:utilizzando un grafico Helm o creando manualmente la tua configurazione.
Prerequisiti
- Un cluster Kubernetes con kubectl installato
- Timone 3 installato
- Privilegi amministrativi sul tuo sistema
Distribuisci PostgreSQL usando Helm
Helm ti offre un modo semplice e veloce per distribuire un'istanza PostgreSQL sul tuo cluster.
Passaggio 1:aggiungi il repository di Helm
1. Cerca in Artifact Hub un grafico Helm PostgreSQL che desideri utilizzare. Aggiungi il repository del grafico all'installazione locale di Helm digitando:
helm repo add [repository-name] [repository-address]
Questo articolo utilizza il grafico Bitnami Helm per l'installazione di PostgreSQL.
2. Dopo aver aggiunto il repository, aggiorna i tuoi repository locali.
helm repo update
Il sistema conferma l'avvenuto aggiornamento.
Passaggio 2:crea e applica un volume di archiviazione persistente
I dati nel tuo database Postgres devono persistere durante i riavvii del pod.
1. Per ottenere ciò, crea una risorsa PersistentVolume in un file YAML, utilizzando un editor di testo come nano.
nano postgres-pv.yaml
Il contenuto del file definisce:
- La risorsa stessa.
- La classe di archiviazione.
- La quantità di spazio di archiviazione allocato.
- Le modalità di accesso.
- Il percorso di montaggio sul sistema host.
Questo esempio utilizza la configurazione seguente:
apiVersion: v1
kind: PersistentVolume
metadata:
name: postgresql-pv
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
2. Salvare il file ed uscire. Quindi applica la configurazione con kubectl
:
kubectl apply -f postgres-pv.yaml
Il sistema conferma la creazione del volume persistente.
Fase 3:crea e applica la richiesta di volume persistente
1. Crea un Persistent Volume Claim (PVC) per richiedere lo spazio di archiviazione allocato nel passaggio precedente.
nano postgres-pvc.yaml
L'esempio utilizza la configurazione seguente:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgresql-pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
2. Salvare il file ed uscire. Applica la configurazione con kubectl
:
kubectl apply -f postgres-pvc.yaml
Il sistema conferma la corretta creazione della PVC.
3. Usa kubectl get
per verificare se la PVC è collegata correttamente al fotovoltaico:
kubectl get pvc
La colonna dello stato mostra che il reclamo è Bound .
Fase 4:installa il grafico del timone
Installa la tabella timone con helm install
comando. Aggiungi --set
flag al comando per collegare l'installazione alla PVC che hai creato e abilitare i permessi del volume:
helm install [release-name] [repo-name] --set persistence.existingClaim=[pvc-name] --set volumePermissions.enabled=true
Il sistema visualizza un rapporto al termine dell'installazione.
Fase 5:connettiti al client PostgreSQL
1. Esporta il POSTGRES_PASSWORD
variabile di ambiente per poter accedere all'istanza PostgreSQL:
export POSTGRES_PASSWORD=$(kubectl get secret --namespace default psql-test-postgresql -o jsonpath="{.data.postgresql-password}" | base64 --decode)
2. Apri un'altra finestra del terminale e digita il seguente comando per inoltrare la porta Postgres:
kubectl port-forward --namespace default svc/psql-test-postgresql 5432:5432
Il sistema inizia a gestire la connessione alla porta.
3. Ridurre a icona la finestra di port forwarding e tornare a quella precedente. Digita il comando per connetterti a psql, un client PostgreSQL:
PGPASSWORD="$POSTGRES_PASSWORD" psql --host 127.0.0.1 -U postgres -d postgres -p 5432
Il psql
viene visualizzato il prompt dei comandi e PostgreSQL è pronto a ricevere il tuo input.
Distribuisci PostgreSQL creando la configurazione da zero
La configurazione manuale di Postgres su Kubernetes ti consente di ottimizzare la configurazione della distribuzione.
Fase 1:crea e applica ConfigMap
La risorsa ConfigMap contiene i dati utilizzati durante il processo di distribuzione.
1. Crea un file YAML ConfigMap in un editor di testo.
nano postgres-configmap.yaml
2. La parte più importante del file è la sezione dei dati, dove fornisci un nome per il database , il nome utente e la password per accedere all'istanza PostgreSQL.
L'esempio utilizza i seguenti parametri nel file ConfigMap.
apiVersion: v1
kind: ConfigMap
metadata:
name: postgres-config
labels:
app: postgres
data:
POSTGRES_DB: postgresdb
POSTGRES_USER: admin
POSTGRES_PASSWORD: test123
3. Salvare il file ed uscire. Quindi applica la risorsa con kubectl
:
kubectl apply -f postgres-configmap.yaml
Il sistema conferma la corretta creazione del file di configurazione.
Fase 2:crea e applica il volume di archiviazione persistente e la richiesta di volume persistente
1. Crea un file YAML per la configurazione dell'archiviazione.
nano postgres-storage.yaml
2. Il metodo di distribuzione del grafico Helm utilizzava due file separati per il volume persistente e la richiesta di volume persistente, ma puoi anche inserire entrambe le configurazioni in un unico file, come nell'esempio seguente.
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. Salvare il file ed uscire. Applica le risorse con kubectl
:
kubectl apply -f postgres-storage.yaml
Il sistema conferma la riuscita creazione sia del fotovoltaico che del PVC.
4. Verificare che la PVC sia collegata al PV con il seguente comando:
kubectl get pvc
Lo stato della PVC è Bound e la PVC è pronta per essere utilizzata nella distribuzione di PostgreSQL.
Passaggio 3:crea e applica la distribuzione PostgreSQL
1. Crea un file YAML di distribuzione.
nano postgres-deployment.yaml
2. Il file di distribuzione contiene la configurazione della distribuzione di PostgreSQL e fornisce le specifiche per i contenitori ei volumi:
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. Salvare il file ed uscire. Applica la distribuzione con kubectl
:
kubectl apply -f postgres-deployment.yaml
Il sistema conferma la corretta creazione della distribuzione.
Fase 4:crea e applica il servizio PostgreSQL
1. Infine, crea il file YAML per configurare il servizio PostgreSQL.
nano postgres-service.yaml
2. Specificare il tipo di servizio e le porte. L'esempio utilizza la configurazione seguente:
apiVersion: v1
kind: Service
metadata:
name: postgres
labels:
app: postgres
spec:
type: NodePort
ports:
- port: 5432
selector:
app: postgres
3. Salvare il file ed uscire. Applica la configurazione con kubectl
:
kubectl apply -f postgres-service.yaml
Il sistema conferma la corretta creazione del servizio.
4. Utilizzare il comando seguente per elencare tutte le risorse sul sistema.
kubectl get all
Il pod e la distribuzione mostrano 1/1 stato pronto. Il numero desiderato di set di repliche riflette ciò che è configurato nel file YAML di distribuzione.
Fase 5:connettiti a PostgreSQL
1. Quando tutte le risorse sono pronte, usa kubectl exec
per accedere all'istanza PostgreSQL.
kubectl exec -it [pod-name] -- psql -h localhost -U admin --password -p [port] postgresdb
2. Il sistema richiede la password. Digita la password definita nel passaggio 1 e premi Invio . Il psql
viene visualizzato il prompt dei comandi.
Il database è ora pronto per ricevere l'input dell'utente.