Creación de un servidor PostgreSQL usando herramientas nativas de Kubernetes

Nota

Como característica en versión preliminar, la tecnología que se presenta en este artículo está sujeta a los términos de uso complementarios para las versiones preliminares de Microsoft Azure.

Las actualizaciones más recientes están disponibles en las notas de la versión.

Requisitos previos

Ya debería haber creado un controlador de datos.

Para crear un servidor PostgreSQL con las herramientas de Kubernetes, debe tener instaladas dichas herramientas. En los ejemplos de este artículo se usará kubectl, pero se podrían emplear enfoques similares con otras herramientas de Kubernetes como el panel de Kubernetes, oc o helm si está familiarizado con esas herramientas y los formatos YAML y JSON de Kubernetes.

Instalación de la herramienta kubectl

Información general

Para crear un servidor postgreSQL, debe crear un secreto de Kubernetes para almacenar el inicio de sesión y la contraseña del administrador de Postgres de forma segura y un recurso personalizado de servidor PostgreSQL basado en las definiciones de recursos personalizados de postgresqls.

Creación de un archivo YAML

Puede usar el archivo YAML de plantilla como un punto de partida para crear su propio archivo YAML personalizado del servidor PostgreSQL. Descargue este archivo en el equipo local y ábralo en un editor de texto. Resulta útil usar un editor de texto como VS Code que admita el linting y el resaltado de la sintaxis en archivos YAML.

Archivo YAML de ejemplo:

apiVersion: v1
data:
  username: <your base64 encoded username>
  password: <your base64 encoded password>
kind: Secret
metadata:
  name: pg1-login-secret
type: Opaque
---
apiVersion: arcdata.microsoft.com/v1beta3
kind: postgresql
metadata:
  name: pg1
spec:
  scheduling:
    default:
      resources:
        limits:
          cpu: "4"
          memory: 4Gi
        requests:
          cpu: "1"
          memory: 2Gi
  services:
    primary:
      type: LoadBalancer # Modify service type based on your Kubernetes environment
  storage:
    data:
      volumes:
      - className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
        size: 5Gi
    logs:
      volumes:
      - className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
        size: 5Gi

Personalización del inicio de sesión y la contraseña

Un secreto de Kubernetes se almacena como una cadena codificada en Base64, una para el nombre de usuario y otra para la contraseña. Deberá codificar en Base64 el inicio de sesión y la contraseña de un administrador y colocarlos en la ubicación del marcador de posición en data.password y data.username. No incluya los símbolos < y > que se proporcionan en la plantilla.

Puede usar una herramienta en línea para codificar en Base64 el nombre de usuario y la contraseña que desee, o bien puede usar las herramientas integradas de la CLI, en función de la plataforma.

PowerShell

[Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes('<your string to encode here>'))

#Example
#[Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes('example'))

Linux/macOS

echo -n '<your string to encode here>' | base64

#Example
# echo -n 'example' | base64

Personalización del nombre

La plantilla tiene un valor de pg1 para el atributo de nombre. Puede cambiar este valor, pero deben ser caracteres que sigan los estándares de nomenclatura de DNS. Si cambia el nombre, cambie también el nombre del secreto para que coincida. Por ejemplo, si cambia el nombre del servidor PostgreSQL a pg2, debe cambiar el nombre del secreto de pg1-login-secret a pg2-login-secret.

Personalización de los requisitos de recursos

Puede cambiar los requisitos de los recursos (solicitudes y límites de RAM y núcleo), según sea necesario.

Nota

Puede obtener más información sobre la gobernanza de recursos de Kubernetes.

Requisitos para las solicitudes y los límites de recursos:

  • El valor de límite de núcleos es necesario para la facturación.
  • El resto de límites y solicitudes de recursos son opcionales.
  • La solicitud y el límite de núcleos deben ser un valor entero positivo, si se especifican.
  • Se requiere un mínimo de un núcleo para la solicitud de núcleos, si se especifica.
  • El formato del valor de memoria sigue la notación de Kubernetes.

Personalización del tipo de servicio

Si lo desea, el tipo de servicio se puede cambiar a NodePort. Se asignará un número de puerto aleatorio.

Personalización del almacenamiento

Puede personalizar las clases de almacenamiento para que el almacenamiento coincida con su entorno. Si no está seguro de qué clases de almacenamiento están disponibles, ejecute el comando kubectl get storageclass para verlas. La plantilla tiene el valor predeterminado de default. Este valor significa que existe una clase de almacenamiento denominada default, no que exista una clase de almacenamiento que sea la predeterminada. También tiene la opción de cambiar el tamaño del almacenamiento. Puede obtener más información sobre la configuración de almacenamiento.

Se está eliminando el servidor PostgreSQL

Ahora que ha personalizado el archivo YAML del servidor PostgreSQL, puede crear el servidor PostgreSQL mediante la ejecución del siguiente comando:

kubectl create -n <your target namespace> -f <path to your yaml file>

#Example
#kubectl create -n arc -f C:\arc-data-services\postgres.yaml

Supervisión del estado de creación

La creación del servidor PostgreSQL tardará unos minutos en completarse. Puede supervisar el progreso en otra ventana de terminal con los siguientes comandos:

Nota

En los siguientes comandos de ejemplo se da por hecho que ha creado un servidor PostgreSQL denominado pg1 y un espacio de nombres de Kubernetes con el nombre arc. Si ha usado un nombre diferente para el espacio de nombres o el servidor PostgreSQL, puede reemplazar arc y pg1 por los nombres que quiera.

kubectl get postgresqls/pg1 --namespace arc
kubectl get pods --namespace arc

También puede comprobar el estado de creación de cualquier pod determinado ejecutando un comando kubectl describe. El comando describe es especialmente útil para solucionar problemas. Por ejemplo:

kubectl describe pod/<pod name> --namespace arc

#Example:
#kubectl describe pod/pg1-0 --namespace arc

Solución de problemas de creación

Si tiene problemas con la creación, consulte la guía de solución de problemas.