Escalado y reducción vertical de un servidor de Azure Database for PostgreSQL mediante la CLI (az o kubectl)
En algunas ocasiones, es posible que necesite cambiar las características o la definición de un servidor. Por ejemplo:
- Escalar o reducir verticalmente el número de núcleos virtuales que usa el servidor
- Escalar o reducir verticalmente la memoria que usa el servidor
En esta guía se explica cómo escalar los núcleos virtuales y la memoria.
El escalado o la reducción vertical de la configuración de la memoria o los núcleos virtuales del servidor significa que puede establecer un valor mínimo o máximo para cada una de las opciones de configuración de memoria y de núcleos virtuales. Si quiere configurar el servidor para que use un número específico de núcleos virtuales o una cantidad determinada de memoria, los mínimos deben establecerse en los mismos valores que los máximos. Antes de aumentar el valor establecido de núcleos virtuales y memoria, debe asegurarse de que
- tiene suficientes recursos disponibles en la infraestructura física que hospeda la implementación y
- de que las cargas de trabajo colocadas en el mismo sistema no compiten por los mismos núcleos virtuales o memoria.
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.
Visualización de la definición actual del servidor
Para mostrar la definición actual del servidor y ver cuál es la configuración de los núcleos virtuales y de la memoria en este momento, ejecute cualquiera de los siguientes comandos:
Con la CLI de Azure (az)
az postgres server-arc show -n <server name> --k8s-namespace <namespace> --use-k8s
CLI con kubectl
kubectl describe postgresql/<server name> -n <namespace name>
Devuelve la configuración del grupo de servidores. Si ha creado el servidor con la configuración predeterminada, debería ver una definición como la siguiente:
Spec:
Dev: false
Scheduling:
Default:
Resources:
Requests:
Memory: 256Mi
...
Interpretación de la definición del servidor
En la definición de un servidor, la sección que contiene la configuración de los núcleos virtuales mínimos o máximos por nodo y de la memoria mínima o máxima por nodo es la sección "scheduling" (programación). En esta sección, los valores máximos se conservan en una subsección denominada "limits" (límites), y los mínimos, en una subsección denominada "requests" (solicitudes).
Si establece un valor mínimo distinto del máximo, esta configuración garantizará que al servidor se le asignen los recursos solicitados que necesita. No superará los límites establecidos.
Los recursos (los núcleos virtuales y la memoria) que usará realmente el servidor dependerán de los valores máximos configurados, y de las cargas de trabajo y los recursos disponibles en el clúster. Si no se limitan los valores con un máximo, el servidor puede llegar a usar todos los recursos que el clúster de Kubernetes asigna a los nodos de Kubernetes en los que está programado el servidor.
En una configuración predeterminada, solo la memoria mínima se establece en 256 MiB, ya que es la cantidad mínima de memoria que se recomienda que ejecute un servidor PostgreSQL.
Nota:
La configuración de un valor mínimo no significa que el servidor usará ese mínimo. Significa que, si el servidor lo necesita, seguro que se le asignará al menos este mínimo. Por ejemplo, imaginemos que hemos establecido --minCpu 2
. Eso no significa que el servidor usará al menos dos núcleos virtuales en todo momento, sino que puede empezar a usar menos de dos núcleos virtuales si no necesita más, y garantiza que se le asignarán al menos dos núcleos virtuales si los necesita más adelante. Esto implica que el clúster de Kubernetes asigna los recursos a otras cargas de trabajo de forma que pueda asignar esos dos núcleos virtuales al servidor si es necesario. Además, escalar y reducir verticalmente no es una operación en línea, ya que requiere el reinicio de los pods de Kubernetes.
Nota:
Antes de modificar la configuración del sistema, asegúrese de familiarizarse con el modelo de recursos de Kubernetes aquí.
Escalado y reducción verticales del servidor
El escalado vertical hace referencia al aumento de los valores de los núcleos virtuales o la configuración de memoria del servidor. La reducción vertical hace referencia a la disminución de los valores de los núcleos virtuales o la configuración de memoria del servidor.
Tenga en cuenta la configuración especificada para el clúster de Kubernetes a la hora de establecer los valores mínimos y máximos. Asegúrese de que no está estableciendo valores que el clúster de Kubernetes no puede satisfacer. Esto podría provocar errores o un comportamiento impredecible, como la falta de disponibilidad de la instancia de base de datos. Por ejemplo, si el estado del servidor permanece como actualizando durante mucho tiempo después de cambiar la configuración, esto puede indicar que ha establecido los parámetros siguientes en valores que el clúster de Kubernetes no puede satisfacer. En ese caso, revierta el cambio o consulte la sección de solución de problemas.
¿Qué configuración debe establecer?
- Para establecer el mínimo de núcleos virtuales, establezca
--cores-request
. - Para establecer el máximo de núcleos virtuales, establezca
--cores-limit
. - Para establecer el mínimo de memoria, establezca
--memory-request
. - Para establecer el máximo de memoria, establezca
--memory-limit
.
Precaución
Con Kubernetes, la configuración de un límite sin configurar los valores de solicitud correspondientes obliga a que el valor de la solicitud sea el mismo valor que el límite. Esto podría provocar la falta de disponibilidad del servidor, ya que es posible que los pods no se vuelvan a programar si no hay un nodo de Kubernetes disponible con recursos suficientes. Por lo tanto, para evitar esta situación, en los ejemplos siguientes se muestra cómo establecer los valores de solicitud y de límite.
La sintaxis general es:
az postgres server-arc edit -n <server name> --memory-limit/memory-request/cores-request/cores-limit <val> --k8s-namespace <namespace> --use-k8s
El valor que se indica para la configuración de memoria es un número seguido de una unidad de volumen. Por ejemplo, para indicar 1 Gb, debe indicar 1024Mi o 1Gi. Para indicar un número de núcleos, basta con pasar un número sin unidad.
Ejemplos de uso de la CLI de Azure
Configure el servidor para que no supere los 2 núcleos:
az postgres server-arc edit -n postgres01 --cores-request 1, --cores-limit 2 --k8s-namespace arc --use-k8s
Nota:
Para obtener más información sobre estos parámetros, ejecute az postgres server-arc update --help
.
Ejemplo de uso de herramientas nativas de Kubernetes, como kubectl
Ejecute el comando:
kubectl edit postgresql/<server name> -n <namespace name>
Esto le llevará al editor vi
, donde podrá navegar y cambiar la configuración. Use lo siguiente para asignar el valor deseado al nombre del campo en la especificación:
Precaución
A continuación, se proporciona un ejemplo para ilustrar cómo podría editar la configuración. Antes de actualizar la configuración, asegúrese de establecer los parámetros en los valores que el clúster de Kubernetes pueda respetar.
Por ejemplo, si quiere establecer la siguiente configuración para los roles de coordinador y de trabajo en los valores siguientes:
- Mínimo de núcleos virtuales =
2
- Máximo de núcleos virtuales =
4
- Mínimo de memoria =
512Mb
- Máximo de memoria =
1Gb
Establecería la definición del grupo de servidores para que coincida con la configuración siguiente:
...
spec:
dev: false
scheduling:
default:
resources:
requests:
cpu: "2"
memory: 256Mi
limits:
cpu: "4"
memory: 1Gi
...
Si no está familiarizado con el editor vi
, puede ver una descripción de los comandos que puede necesitar aquí:
- Modo de edición:
i
- Desplazamiento: flechas
- Detener la edición:
esc
- Salir sin guardar:
:qa!
- Salir después de guardar:
:qw!
Restablecimiento de los valores predeterminados
Para restablecer los valores predeterminados de los parámetros de núcleo, límites de memoria y solicitudes, edítelos y pase una cadena vacía en lugar de un valor real. Por ejemplo, si quiere restablecer el parámetro de límite de núcleos, ejecute los siguientes comandos:
az postgres server-arc edit -n postgres01 --cores-request '' --k8s-namespace arc --use-k8s
az postgres server-arc edit -n postgres01 --cores-limit '' --k8s-namespace arc --use-k8s
or
az postgres server-arc edit -n postgres01 --cores-request '' --cores-limit '' --k8s-namespace arc --use-k8s