Para obtener más información sobre la programación, consulta Scheduling, Preemption and Eviction en la documentación de Kubernetes.
En esta página, se muestra cómo especificar las tolerancias y las configuraciones de programación de afinidad de nodos para las instancias principales y de grupos de lectura en tu manifiesto de Kubernetes.
Para obtener información sobre cómo definir taints en los nodos, consulta Taints y Tolerancias en la documentación de Kubernetes.
Especifica las tolerancias
Para programar tus Pods de AlloyDB Omni en nodos libres de otros Pods de aplicaciones o hacer coincidir un taint específico definido en esos nodos, aplica una o más tolerancias a los nodos de la siguiente manera:
- Modifica el manifiesto del clúster del operador de Kubernetes de AlloyDB Omni para incluir una sección
tolerationsen la secciónschedulingConfigde cualquiera de las siguientes secciones:primarySpecpara instancias principalesspecpara instancias de grupos de lectura
tolerations: - key: "TAINT_KEY" operator: "OPERATOR_VALUE" value: "VALUE" effect: "TAINT_EFFECT"Reemplaza lo siguiente:
TAINT_KEY: El nombre único existente de la clave de taint, como el nombre de host de un nodo o cualquier otro valor inferido de forma local al que se aplica la tolerancia. La clave de taint ya está definida en un nodo. Un campo vacío y elOPERATOR_VALUEestablecido enexistsindican que la tolerancia debe coincidir con todos los valores y todas las claves.OPERATOR_VALUE: Representa la relación de una clave con un conjunto de valores. Establece el parámetro en una de las siguientes opciones:exists: Kubernetes hace coincidir cualquier valor si se define el taint, independientemente de su valor.equal: Kubernetes no programa un Pod en un nodo si los valores son diferentes. El operador requiere el valortruede taint.
VALUE: El valor de taint con el que coincide la tolerancia. Si el operador es Exists, el valor está vacío; de lo contrario, es una cadena normal. Por ejemplo,true.TAINT_EFFECT: Indica el efecto de taint con el que se debe coincidir. Un campo vacío indica que se deben hacer coincidir todos los efectos de taint. Establece el parámetro en una de las siguientes opciones:NoSchedule: Kubernetes no programa Pods nuevos en el nodo con taint.PreferNoSchedule: Kubernetes evita colocar Pods nuevos en el nodo con taint, a menos que sea necesario.NoExecute: Kubernetes expulsa los Pods existentes que no toleran el taint.
- Vuelve a aplicar el manifiesto.
Define la afinidad de nodos
El programador de Kubernetes usa la afinidad de nodos como un conjunto de reglas para determinar dónde colocar un Pod. La afinidad de nodos es una versión más flexible y expresiva de los selectores de nodos.
Para especificar qué nodos se deben programar para ejecutar tu base de datos, sigue estos pasos:
- Modifica el manifiesto del clúster de base de datos para incluir la sección
nodeaffinitydespués de la seccióntolerationsen la secciónschedulingConfigdeprimarySpecpara instancias principales ospecpara instancias de grupos de lectura:nodeaffinity: NODE_AFFINITY_TYPE: - weight: WAIT_VALUE preference: matchExpressions: - key: LABEL_KEY operator: OPERATOR_VALUE values: - LABEL_KEY_VALUEReemplaza lo siguiente:
-
NODE_AFFINITY_TYPE: Establece el parámetro en una de las siguientes opciones:requiredDuringSchedulingIgnoredDuringExecution: Kubernetes programa el Pod exactamente según las reglas definidas.preferredDuringSchedulingIgnoredDuringExecution: El programador de Kubernetes intenta encontrar un nodo que cumpla con la regla definida para la programación. Sin embargo, si no existe tal nodo, Kubernetes programa en un nodo diferente del clúster.
WAIT_VALUE: Indica el peso de preferencia para los nodos especificados. Los valores más altos indican una preferencia más fuerte. Los valores válidos van de1a100.LABEL_KEY: La etiqueta del nodo para la clave que sirve como indicador de ubicación y facilita la distribución uniforme de Pods en el clúster. Por ejemplo,disktype=ssd.OPERATOR_VALUE: Representa la relación de una clave con un conjunto de valores. Establece el parámetro en una de las siguientes opciones:-
In: El array de valores no debe estar vacío. -
NotIn: El array de valores no debe estar vacío. -
Exists: El array de valores debe estar vacío. -
DoesNotExist: El array de valores debe estar vacío. -
Gt: El array de valores debe tener un solo elemento, que se interpreta como un número entero. -
Lt: El array de valores debe tener un solo elemento, que se interpreta como un número entero.
-
LABEL_KEY_VALUE: El valor de tu clave de etiqueta. Establece el parámetro en un array de valores de cadena de la siguiente manera:- Si el operador es
InoNotIn, el array de valores no debe estar vacío. - Si el operador es
ExistsoDoesNotExist, el array de valores debe estar vacío. - Si el operador es
GtoLt, el array de valores debe tener un solo elemento, que se interpreta como un número entero.
- Si el operador es
-
- Vuelve a aplicar el manifiesto.
Ejemplo
En el siguiente ejemplo, se ilustra la programación de Pods en instancias principales y de grupos de lectura del operador de Kubernetes de AlloyDB Omni. Esta configuración de programación ayuda a garantizar que la instancia principal del clúster de base de datos se programe en los nodos adecuados y, al mismo tiempo, permite cierta flexibilidad en la selección de nodos. Esta flexibilidad puede ser útil para equilibrar la carga, optimizar el uso de recursos o cumplir con roles y características de nodos específicos.
schedulingconfig:
tolerations:
- key: "node-role.kubernetes.io/control-plane"
operator: "Exists"
effect: "NoSchedule"
nodeaffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: another-node-label-key
operator: In
values:
- another-node-label-value
La tolerancia de ejemplo permite que el Pod se programe en nodos marcados como nodos del plano de control debido a los siguientes detalles:
- La clave de taint
node-role.kubernetes.io/control-planeindica que el nodo tiene un nodo del plano de control. - El operador
Existssignifica que la tolerancia coincide con cualquier taint con la clave de taint especificada, independientemente del valor. - El efecto
NoSchedulesignifica que los Pods no se programarán en el nodo del plano de control, a menos que tengan una tolerancia coincidente.
El tipo de afinidad de nodos preferredDuringSchedulingIgnoredDuringExecution especifica que las reglas definidas para la afinidad de nodos son preferidas, pero no obligatorias durante la programación. Si los nodos preferidos no están disponibles, es posible que el Pod se programe en otros nodos. El valor de peso 1 indica una preferencia débil. Los criterios de selección de nodos se definen en la sección preference. La sección matchExpressions contiene un array de expresiones que se usan para hacer coincidir nodos. La clave another-node-label-key representa la clave de la etiqueta de nodo que se debe hacer coincidir. El operador In significa que el nodo debe tener la clave con uno de los valores especificados. La clave another-node-label-key debe tener el valor another-node-label-value.
La regla de afinidad de nodos de ejemplo indica una preferencia por programar el Pod en nodos que tienen la etiqueta another-node-label-key con el valor another-node-label-value. La preferencia es débil, por lo que no es un requisito estricto.
En el ejemplo, se combinan los siguientes elementos:
- Tolerancias que permiten que el Pod se programe en nodos del plano de control tolerando el taint
NoSchedule. - Una afinidad de nodos que prefiere nodos con una etiqueta específica, pero no la requiere de forma estricta; por lo tanto, ofrece flexibilidad en la programación.