PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Използване на Kubernetes за внедряване на PostgreSQL

Въведение

Kubernetes е система за оркестриране на контейнери с отворен код за автоматизиране на внедряването, мащабирането и управлението на контейнерни приложения. Изпълнението на PostgreSQL база данни на Kubernetes е тема за обсъждане в днешно време, тъй като Kubernetes предоставя начини за предоставяне на контейнер с състояние, използвайки постоянни томове, набори за състояние и т.н.

Този блог има за цел да предостави стъпки за стартиране на PostgreSQL база данни в клъстер Kubernetes. Той не обхваща инсталирането или конфигурацията на клъстер Kubernetes, въпреки че по-рано писахме за това в този блог на MySQL Galera Cluster на Kubernetes.

Предварителни условия

  • Работен клъстер Kubernetes
  • Основно разбиране на Docker

Можете да осигурите клъстера Kubernetes на всеки доставчик на публичен облак като AWS, Azure или Google облак и др. Вижте стъпките за инсталиране и конфигуриране на Kubernetes за CentOS тук. Можете също да проверите по-ранната публикация в блога за основите на внедряването на PostgreSQL в Docker контейнера.

За да разположим PostgreSQL на Kubernetes, трябва да изпълним следните стъпки:

  • Изображение на Postgres Docker
  • Конфигурационни карти за съхранение на конфигурации на Postgres
  • Постоянен обем на съхранение
  • Внедряване на PostgreSQL
  • Услуга PostgreSQL

Изображение на PostgreSQL Docker

Използваме PostgreSQL 10.4 Docker изображение от публичния регистър. Това изображение ще осигури функционалността за предоставяне на персонализирани конфигурации/променливи на средата на PostgreSQL като потребителско име, парола, име и път на базата данни и т.н.

Конфигурационни карти за PostgreSQL конфигурации

Ще използваме конфигурационни карти за съхраняване на информация, свързана с PostgreSQL. Тук използваме базата данни, потребителя и паролата в конфигурационната карта, която ще се използва от модула PostgreSQL в шаблона за внедряване.

Файл:postgres-configmap.yaml

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

Създайте ресурс за конфигурационни карти на Postgres

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

Постоянен обем на съхранение

Както всички знаете, контейнерите на Docker са ефимерни по природа. Всички данни, генерирани от или в контейнера, ще бъдат загубени след прекратяване на екземпляра на контейнера.

За да запазим данните, ще използваме постоянни томове и ресурс за искане за постоянен обем в Kubernetes, за да съхраняваме данните в постоянни хранилища.

Тук използваме локална директория/път като постоянен ресурс за съхранение (/mnt/data)

Файл: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

Създайте внедрявания, свързани със съхранение

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

Внедряване на PostgreSQL

PostgreSQL манифест за внедряване на PostgreSQL контейнер използва PostgreSQL 10.4 изображение. Използва конфигурация на PostgreSQL като потребителско име, парола, име на база данни от configmap, която създадохме по-рано. Той също така монтира тома, създаден от постоянните томове, и твърди, че запазва данните на контейнера на PostgreSQL.

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

Създаване на внедряване на Postgres

$ kubectl create -f postgres-deployment.yaml 
deployment "postgres" created
Изтеглете Бялата книга днес Управление и автоматизация на PostgreSQL с ClusterControl Научете какво трябва да знаете, за да внедрите, наблюдавате, управлявате и мащабирате PostgreSQLD Изтеглете Бялата книга

Услуга PostgreSQL

За достъп до внедряването или контейнера трябва да изложим услугата PostgreSQL. Kubernetes предоставя различни видове услуги като ClusterIP, NodePort и LoadBalancer.

С ClusterIP имаме достъп до услугата PostgreSQL в Kubernetes. NodePort дава възможност за излагане на крайната точка на услугата на възлите на Kubernetes. За външен достъп до PostgreSQL трябва да използваме тип услуга Load Balancer, която излага услугата външно.

Файл:postgres-service.yaml

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

Създайте услуга Postgres

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

Свържете се с PostgreSQL

За да свържем PostgreSQL, трябва да получим порта Node от внедряването на услугата.

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

Трябва да използваме порт 31070, за да се свържем с PostgreSQL от машина/възел, присъстващ в клъстера kubernetes с идентификационни данни, дадени в конфигурационната карта по-рано.

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

Изтриване на внедряванията на PostgreSQL

За изтриване на PostgreSQL ресурси трябва да използваме команди по-долу.

# 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

Надяваме се, че като използвате горните стъпки, можете да предоставите самостоятелен екземпляр на PostgreSQL на Kubernetes клъстер.

Заключение

Изпълнението на PostgreSQL на Kubernetes помага да се използват ресурсите по по-добър начин, отколкото когато се използват само виртуални машини. Kubernetes също така осигурява изолация на други приложения, използващи PostgreSQL в рамките на същата виртуална машина или Kubernetes клъстер.

Тази статия предоставя общ преглед на това как можем да използваме PostgreSQL в Kubernetes за среда за разработка/POC. Можете да изследвате/настройвате PostgreSQL клъстер, като използвате набори от състояния на Kubernetes.

Необходими са StatefulSets?

В Kubernetes StatefulSets са необходими за мащабиране на приложения с състояние. PostgreSQL може лесно да се мащабира с помощта на StatefulSets с една команда.

Препратки

  • Инсталиране на Kubernetes на CentOS:https://www.techrepublic.com/article/how-to-install-a-kubernetes-cluster-oen-centos-7
  • Настройка на Kubectl:https://kubernetes.io/docs/tasks/tools/install-kubectl
  • PostgreSQL с помощта на Docker:https://severalnines.com/blog/deploying-postgresql-docker-container
  • Kubernetes:https://kubernetes.io
  • PostgreSQL клъстер, използващ statefulsets https://kubernetes.io/blog/2017/02/postgresql-clusters-kubernetes-statefulsets

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да получите PostgreSQL на VPS / Специализиран сървър

  2. Как мога да импортирам данни от ASCII (ISO/IEC 8859-1) в моята база данни Rails/PGSQL?

  3. Постепенно архивиране на PostgreSQL и възстановяване в момента

  4. Общ преглед на VACUUM обработката в PostgreSQL

  5. Нормализиране на Unicode в PostgreSQL 13