PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Usando o Kubernetes para implantar o PostgreSQL

Introdução


Kubernetes é um sistema de orquestração de contêineres de código aberto para automatizar a implantação, dimensionamento e gerenciamento de aplicativos em contêineres. A execução de um banco de dados PostgreSQL no Kubernetes é um tópico de discussão hoje em dia, pois o Kubernetes fornece maneiras de provisionar contêineres com estado usando volumes persistentes, conjuntos de estado, etc.

Este blog pretende fornecer etapas para executar o banco de dados PostgreSQL no cluster Kubernetes. Ele não cobre a instalação ou configuração do cluster Kubernetes, embora tenhamos escrito anteriormente sobre isso neste blog no MySQL Galera Cluster on Kubernetes.

Pré-requisitos

  • Cluster Kubernetes em funcionamento
  • Compreensão básica do Docker

Você pode provisionar o cluster Kubernetes em qualquer provedor de nuvem pública, como AWS, Azure ou Google cloud, etc. Consulte as etapas de instalação e configuração do cluster Kubernetes para CentOS aqui. Você também pode verificar a postagem anterior do blog para obter informações básicas sobre a implantação do PostgreSQL no contêiner do Docker.

Para implantar o PostgreSQL no Kubernetes, precisamos seguir os passos abaixo:
  • Imagem do Docker Postgres
  • Config Maps para armazenar configurações do Postgres
  • Volume de armazenamento persistente
  • Implantação do PostgreSQL
  • Serviço PostgreSQL

Imagem do Docker PostgreSQL


Estamos usando o PostgreSQL 10.4 Imagem do Docker do registro público. Esta imagem fornecerá a funcionalidade de fornecer configurações personalizadas/variáveis ​​de ambiente do PostgreSQL como nome de usuário, senha, nome e caminho do banco de dados, etc.

Mapas de configuração para configurações do PostgreSQL


Usaremos mapas de configuração para armazenar informações relacionadas ao PostgreSQL. Aqui, estamos usando o banco de dados, usuário e senha no mapa de configuração que será usado pelo pod PostgreSQL no modelo de implantação.

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

Criar recurso de mapas de configuração do Postgres
$ kubectl create -f postgres-configmap.yaml 
configmap "postgres-config" created

Volume de armazenamento persistente


Como todos sabem, os contêineres do Docker são efêmeros por natureza. Todos os dados gerados por ou no contêiner serão perdidos após o término da instância do contêiner.

Para salvar os dados, usaremos volumes persistentes e recurso de reivindicação de volume persistente no Kubernetes para armazenar os dados em armazenamentos persistentes.

Aqui, estamos usando o diretório/caminho local como recurso de armazenamento persistente (/mnt/data)

Arquivo: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

Criar implantações relacionadas ao armazenamento
$ kubectl create -f postgres-storage.yaml 
persistentvolume "postgres-pv-volume" created
persistentvolumeclaim "postgres-pv-claim" created

Implantação do PostgreSQL


O manifesto PostgreSQL para implantação do contêiner PostgreSQL usa a imagem PostgreSQL 10.4. Ele está usando a configuração do PostgreSQL como nome de usuário, senha, nome do banco de dados do configmap que criamos anteriormente. Ele também monta o volume criado a partir dos volumes persistentes e declarações para fazer com que os dados do contêiner PostgreSQL persistam.
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

Criar implantação do Postgres
$ kubectl create -f postgres-deployment.yaml 
deployment "postgres" created
Baixe o whitepaper hoje PostgreSQL Management &Automation with ClusterControlSaiba o que você precisa saber para implantar, monitorar, gerenciar e dimensionar o PostgreSQLBaixe o whitepaper

Serviço PostgreSQL


Para acessar a implantação ou contêiner, precisamos expor o serviço PostgreSQL. Kubernetes fornece diferentes tipos de serviços como ClusterIP, NodePort e LoadBalancer.

Com o ClusterIP podemos acessar o serviço PostgreSQL dentro do Kubernetes. O NodePort oferece a capacidade de expor o endpoint de serviço nos nós do Kubernetes. Para acessar o PostgreSQL externamente, precisamos usar um tipo de serviço Load Balancer que expõe o serviço externamente.

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

Criar serviço Postgres
$ kubectl create -f postgres-service.yaml 
service "postgres" created

Conectar ao PostgreSQL


Para conectar o PostgreSQL, precisamos obter a porta Node da implantação do serviço.
$ kubectl get svc postgres
NAME       TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
postgres   NodePort   10.107.71.253   <none>        5432:31070/TCP   5m

Precisamos usar a porta 31070 para conectar ao PostgreSQL da máquina/nó presente no cluster kubernetes com as credenciais fornecidas no configmap anterior.
$ psql -h localhost -U postgresadmin1 --password -p 31070 postgresdb
Password for user postgresadmin1: 
psql (10.4)
Type "help" for help.
 
postgresdb=#

Excluir implantações do PostgreSQL


Para exclusão de recursos do PostgreSQL, precisamos usar os comandos abaixo.
# 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

Espero que, usando as etapas acima, você possa provisionar uma instância autônoma do PostgreSQL em um cluster do Kubernetes.

Conclusão


A execução do PostgreSQL no Kubernetes ajuda a utilizar os recursos de uma maneira melhor do que apenas usando máquinas virtuais. O Kubernetes também fornece isolamento de outros aplicativos usando PostgreSQL dentro da mesma máquina virtual ou cluster Kubernetes.

Este artigo fornece uma visão geral sobre como podemos usar o PostgreSQL no Kubernetes para ambiente de desenvolvimento/POC. Você pode explorar/configurar o cluster PostgreSQL usando statefulsets do Kubernetes.

StatefulSets necessários?


No Kubernetes, StatefulSets são necessários para dimensionar aplicativos com estado. O PostgreSQL pode ser facilmente dimensionado usando StatefulSets com um único comando.

Referências

  • Instalação do Kubernetes no CentOS:https://www.techrepublic.com/article/how-to-install-a-kubernetes-cluster-oen-centos-7
  • Configuração do Kubectl:https://kubernetes.io/docs/tasks/tools/install-kubectl
  • PostgreSQL usando o Docker:https://severalnines.com/blog/deploying-postgresql-docker-container
  • Kubernetes:https://kubernetes.io
  • Cluster PostgreSQL usando statefulsets https://kubernetes.io/blog/2017/02/postgresql-clusters-kubernetes-statefulsets