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.