sql >> Databáze >  >> RDS >> PostgreSQL

Použití Kubernetes k nasazení PostgreSQL

Úvod

Kubernetes je open source systém pro orchestraci kontejnerů pro automatizaci nasazení, škálování a správu kontejnerových aplikací. Provozování databáze PostgreSQL na Kubernetes je v dnešní době diskutovaným tématem, protože Kubernetes poskytuje způsoby, jak zajistit stavový kontejner pomocí trvalých svazků, stavových sad atd.

Účelem tohoto blogu je poskytnout kroky ke spuštění databáze PostgreSQL na clusteru Kubernetes. Nezahrnuje instalaci ani konfiguraci clusteru Kubernetes, i když jsme o tom dříve psali v tomto blogu na MySQL Galera Cluster na Kubernetes.

Předpoklady

  • Fungující cluster Kubernetes
  • Základní porozumění Dockeru

Cluster Kubernetes můžete zřídit na jakémkoli veřejném poskytovateli cloudu, jako je AWS, Azure nebo Google cloud atd. Postup instalace a konfigurace clusteru Kubernetes pro CentOS najdete zde. Základní informace o nasazení PostgreSQL na kontejneru Docker naleznete v dřívějším příspěvku na blogu.

Chcete-li nasadit PostgreSQL na Kubernetes, musíme postupovat podle následujících kroků:

  • Obrázek Postgres Docker
  • Konfigurační mapy pro ukládání konfigurací Postgres
  • Trvalý objem úložiště
  • Nasazení PostgreSQL
  • Služba PostgreSQL

Obrázek PostgreSQL Docker

Používáme PostgreSQL 10.4 Obrázek dockeru z veřejného registru. Tento obrázek poskytne funkcionalitu poskytování vlastních konfigurací/proměnných prostředí PostgreSQL, jako je uživatelské jméno, heslo, název databáze a cesta atd.

Konfigurační mapy pro konfigurace PostgreSQL

Pro ukládání informací souvisejících s PostgreSQL budeme používat konfigurační mapy. Zde používáme databázi, uživatele a heslo v konfigurační mapě, kterou použije PostgreSQL pod v šabloně nasazení.

Soubor:postgres-configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: postgres-config
  labels:
    app: postgres
data:
  POSTGRES_DB: postgresdb
  POSTGRES_USER: postgresadmin
  POSTGRES_PASSWORD: admin123

Vytvořte zdroj konfiguračních map Postgres

$ kubectl create -f postgres-configmap.yaml 
configmap "postgres-config" created

Trvalý objem úložiště

Jak všichni víte, kontejnery Docker jsou svou povahou pomíjivé. Všechna data generovaná kontejnerem nebo v něm budou po ukončení instance kontejneru ztracena.

Abychom data uložili, budeme k ukládání dat na perzistentních úložištích používat trvalé svazky a zdroj trvalých nároků na svazky v rámci Kubernetes.

Zde používáme místní adresář/cestu jako prostředek trvalého úložiště (/mnt/data)

Soubor:postgres-storage.yaml

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

Vytvořte nasazení související s úložištěm

$ kubectl create -f postgres-storage.yaml 
persistentvolume "postgres-pv-volume" created
persistentvolumeclaim "postgres-pv-claim" created

Nasazení PostgreSQL

PostgreSQL manifest pro nasazení kontejneru PostgreSQL používá obraz PostgreSQL 10.4. Používá konfiguraci PostgreSQL, jako je uživatelské jméno, heslo, název databáze z konfigurační mapy, kterou jsme vytvořili dříve. Také připojí svazek vytvořený z trvalých svazků a tvrdí, že data kontejneru PostgreSQL zůstanou zachována.

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: postgres
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
        - name: postgres
          image: postgres:10.4
          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

Vytvořte nasazení Postgres

$ kubectl create -f postgres-deployment.yaml 
deployment "postgres" created
Stáhněte si Whitepaper Today Správa a automatizace PostgreSQL s ClusterControlZjistěte, co potřebujete vědět k nasazení, monitorování, správě a škálování PostgreSQLStáhněte si Whitepaper

Služba PostgreSQL

Pro přístup k nasazení nebo kontejneru musíme odhalit službu PostgreSQL. Kubernetes poskytuje různé typy služeb, jako je ClusterIP, NodePort a LoadBalancer.

S ClusterIP můžeme přistupovat ke službě PostgreSQL v rámci Kubernetes. NodePort poskytuje možnost odhalit koncový bod služby na uzlech Kubernetes. Pro externí přístup k PostgreSQL musíme použít typ služby Load Balancer, který službu zpřístupní externě.

Soubor:postgres-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: postgres
  labels:
    app: postgres
spec:
  type: NodePort
  ports:
   - port: 5432
  selector:
   app: postgres

Vytvořit službu Postgres

$ kubectl create -f postgres-service.yaml 
service "postgres" created

Připojte se k PostgreSQL

Pro připojení PostgreSQL potřebujeme získat port Node z nasazení služby.

$ kubectl get svc postgres
NAME       TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
postgres   NodePort   10.107.71.253   <none>        5432:31070/TCP   5m

Potřebujeme použít port 31070 pro připojení k PostgreSQL ze stroje/uzlu přítomného v clusteru kubernetes s přihlašovacími údaji uvedenými v konfigurační mapě dříve.

$ psql -h localhost -U postgresadmin1 --password -p 31070 postgresdb
Password for user postgresadmin1: 
psql (10.4)
Type "help" for help.
 
postgresdb=#

Odstranit nasazení PostgreSQL

Pro smazání zdrojů PostgreSQL musíme použít níže uvedené příkazy.

# kubectl delete service postgres 
# kubectl delete deployment postgres
# kubectl delete configmap postgres-config
# kubectl delete persistentvolumeclaim postgres-pv-claim
# kubectl delete persistentvolume postgres-pv-volume

Doufejme, že pomocí výše uvedených kroků budete schopni zřídit samostatnou instanci PostgreSQL v clusteru Kubernetes.

Závěr

Spuštění PostgreSQL na Kubernetes pomáhá využívat zdroje lépe než při pouhém používání virtuálních strojů. Kubernetes také poskytuje izolaci dalších aplikací pomocí PostgreSQL v rámci stejného virtuálního počítače nebo clusteru Kubernetes.

Tento článek poskytuje přehled o tom, jak můžeme použít PostgreSQL na Kubernetes pro vývojové/POC prostředí. Cluster PostgreSQL můžete prozkoumat/nastavit pomocí stavových sad Kubernetes.

Vyžadují StatefulSets?

V Kubernetes jsou ke škálování stavových aplikací vyžadovány StatefulSets. PostgreSQL lze snadno škálovat pomocí StatefulSets pomocí jediného příkazu.

Odkazy

  • Instalace Kubernetes na CentOS:https://www.techrepublic.com/article/how-to-install-a-kubernetes-cluster-oen-centos-7
  • Nastavení Kubectl:https://kubernetes.io/docs/tasks/tools/install-kubectl
  • PostgreSQL pomocí Dockeru:https://severalnines.com/blog/deploying-postgresql-docker-container
  • Kubernetes:https://kubernetes.io
  • Cluster PostgreSQL pomocí stavových sad https://kubernetes.io/blog/2017/02/postgresql-clusters-kubernetes-statefulsets

  1. Proč spuštění tohoto dotazu s EXECUTE IMMEDIATE způsobí jeho selhání?

  2. Oracle Managed ODP.NET nemůže najít tnsnames.ora

  3. Jak napsat REST API?

  4. Zřetězení hodnot sloupců do seznamu odděleného čárkami