Ubicación inteligente de recursos de Kubernetes entre clústeres mediante Azure Kubernetes Fleet Manager (versión preliminar)
A menudo, los desarrolladores de aplicaciones necesitan implementar recursos de Kubernetes en varios clústeres. Los operadores de flota suelen necesitar elegir los mejores clústeres para colocar las cargas de trabajo en función de la heurística, como el costo de proceso en los clústeres o los recursos disponibles, como la memoria y la CPU. Es tedioso crear, actualizar y realizar un seguimiento de estos recursos de Kubernetes en varios clústeres manualmente. En este artículo se explica cómo Azure Kubernetes Fleet Manager (Kubernetes Fleet) le permite abordar estos escenarios mediante la característica inteligente de selección de ubicación de recursos de Kubernetes.
Información general
Kubernetes Fleet proporciona funcionalidad de selección de ubicación de recursos que puede tomar decisiones de programación basadas en las siguientes propiedades:
- Recuento de nodos
- Costo del proceso en clústeres de miembros de destino
- Disponibilidad de recursos (CPU/memoria) en clústeres de miembros de destino
Importante
Las características en vista previa de Azure Kubernetes Fleet Manager están disponibles en autoservicio y de manera opcional. Las versiones preliminares se proporcionan "tal cual" y "como están disponibles", y están excluidas de los Acuerdos de nivel de servicio y la garantía limitada. Las versiones preliminares de Azure Kubernetes Fleet Manager reciben cobertura parcial del soporte al cliente en la medida de lo posible. Por lo tanto, estas características no están diseñadas para su uso en producción.
Requisitos previos
- Lea la introducción conceptual de propagación de recursos para comprender los conceptos y la terminología que se usan en este inicio rápido.
- Una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita.
- Necesita un recurso de Fleet con un clúster de centro y clústeres de miembros. Si no tiene uno, vea Creación de un recurso de Azure Kubernetes Fleet Manager y unión a clústeres de miembros mediante la CLI de Azure.
- Necesita acceso a la API de Kubernetes del clúster de centros. Si no tiene acceso, consulte Acceso a la API de Kubernetes del recurso de Fleet con Azure Kubernetes Fleet Manager.
Filtrado de clústeres en el momento de la programación en función de las propiedades del clúster miembro
El tipo de afinidad requiredDuringSchedulingIgnoredDuringExecution permite filtrar los clústeres miembros elegibles para su colocación mediante selectores de propiedades. Un selector de propiedades es una matriz de condiciones de expresión en las propiedades del clúster.
En cada condición que especifique:
Nombre: nombre de la propiedad, que debe tener el formato siguiente:
resources.kubernetes-fleet.io/<CAPACITY-TYPE>-<RESOURCE-NAME>
<CAPACITY-TYPE>
es uno detotal
,allocatable
oavailable
, en función de la capacidad (información de uso) con la que desea comprobar y<RESOURCE-NAME>
es el nombre del recurso (CPU/memoria).Por ejemplo, si desea seleccionar clústeres en función de la capacidad de CPU disponible de un clúster, el nombre usado en el selector de propiedades debe ser
resources.kubernetes-fleet.io/available-cpu
. Para la capacidad de memoria asignable, puede usarresources.kubernetes-fleet.io/allocatable-memory
.Lista de valores, que son valores posibles de la propiedad.
Operador que se usa para expresar la condición entre la restricción o el valor deseado y el valor observado en el clúster. Actualmente se admiten los operadores siguientes:
Gt
(mayor que): el valor observado de un clúster de la propiedad especificada debe ser mayor que el valor de la condición antes de que se pueda seleccionar para la colocación de recursos.Ge
(mayor o igual que): el valor observado de un clúster de la propiedad dada debe ser mayor o igual que el valor de la condición antes de que se pueda seleccionar para la colocación de recursos.Lt
(menor que): el valor observado de un clúster de la propiedad especificada debe ser menor que el valor de la condición antes de que se pueda seleccionar para la colocación de recursos.Le
(menor o igual que): el valor observado de un clúster de la propiedad especificada debe ser menor o igual que el valor de la condición antes de que se pueda seleccionar para la selección de ubicación de recursos.Eq
(igual a): el valor observado de un clúster de la propiedad especificada debe ser igual al valor de la condición antes de que se pueda seleccionar para la colocación de recursos.Ne
(no es igual a): el valor observado de un clúster de la propiedad especificada no debe ser igual al valor de la condición antes de que se pueda seleccionar para la selección de ubicación de recursos.
Si usa el operador
Gt
,Ge
,Lt
,Le
,Eq
oNe
, la lista de valores de la condición debe tener exactamente un valor.
Fleet evalúa cada clúster en función de las propiedades especificadas en la condición. Si no se cumplen las condiciones enumeradas en requiredDuringSchedulingIgnoredDuringExecution
se excluye este clúster miembro de la selección de ubicación de los recursos.
Nota:
Si un clúster miembro no posee la propiedad expresada en la condición, se producirá un error automáticamente en la condición.
Directiva de selección de ubicación de ejemplo para seleccionar solo clústeres con más o igual que cinco nodos para la selección de ubicación de recursos:
apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
name: crp
spec:
resourceSelectors:
- ...
policy:
placementType: PickAll
affinity:
clusterAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
clusterSelectorTerms:
- propertySelector:
matchExpressions:
- name: "kubernetes.azure.com/node-count"
operator: Ge
values:
- "5"
Puede utilizar tanto los selectores de etiquetas como los de propiedades bajo el término de afinidad requiredDuringSchedulingIgnoredDuringExecution
para filtrar los clústeres de miembros elegibles en función de estas dos restricciones.
apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
name: crp
spec:
resourceSelectors:
- ...
policy:
placementType: PickAll
affinity:
clusterAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
clusterSelectorTerms:
- labelSelector:
matchLabels:
region: east
propertySelector:
matchExpressions:
- name: "kubernetes.azure.com/node-count"
operator: Ge
values:
- "5"
En este ejemplo, Kubernetes Fleet solo tiene en cuenta un clúster para la selección de ubicación de recursos si tiene la etiqueta region=east
y un recuento de nodos mayor o igual que cinco.
Clasificación de clústeres de orden en el momento de la programación en función de las propiedades del clúster miembro
Cuando se usa preferredDuringSchedulingIgnoredDuringExecution
, un clasificador de propiedades clasifica todos los clústeres de la flota en función de sus valores en el orden ascendente o descendente. Los pesos se calculan en función del valor de peso especificado en preferredDuringSchedulingIgnoredDuringExecution
.
Un clasificador de propiedades consta de:
- Nombre: nombre de la propiedad con más información sobre el formato de la propiedad que se trata en la sección anterior.
- Criterio de ordenación: el criterio de ordenación puede ser
Ascending
oDescending
. Cuando se utiliza el ordenAscending
, Kubernetes Fleet prefiere los clústeres miembros con valores observados más bajos. Cuando se usa el ordenDescending
, se prefieren los clústeres de miembros con un valor observado mayor.
Para el criterio de ordenación Descending
, el peso proporcional se calcula con la fórmula :
((Observed Value - Minimum observed value) / (Maximum observed value - Minimum observed value)) * Weight
Por ejemplo, supongamos que quiere clasificar los clústeres en función de la propiedad de la capacidad de CPU disponible en orden descendente y que tiene una flota de tres clústeres con la siguiente CPU disponible:
Clúster | Capacidad de CPU disponible |
---|---|
bravelion |
100 |
smartfish |
20 |
jumpingcat |
10 |
En este caso, el clasificador calcula los pesos siguientes:
Clúster | Capacidad de CPU disponible | Peso |
---|---|---|
bravelion |
100 | (100 - 10) / (100 - 10) = 100 % del peso |
smartfish |
20 | (20 - 10) / (100 - 10) = 11,11 % del peso |
jumpingcat |
10 | (10 - 10) / (100 - 10) = 0 % del peso |
Para el criterio de ordenación Ascending
, el peso proporcional se calcula con la fórmula:
(1 - ((Observed Value - Minimum observed value) / (Maximum observed value - Minimum observed value))) * Weight
Por ejemplo, supongamos que quiere clasificar los clústeres en función de su costo por CPU y núcleo en orden ascendente y que tiene una flota de tres clústeres con los siguientes costos principales de CPU:
Clúster | Costo de núcleo por CPU |
---|---|
bravelion |
1 |
smartfish |
0,2 |
jumpingcat |
0,1 |
En este caso, el clasificador calcula los pesos siguientes:
Clúster | Costo de núcleo por CPU | Peso |
---|---|---|
bravelion |
1 | 1 - ((1 - 0,1) / (1 - 0,1)) = 0 % del peso |
smartfish |
0,2 | 1 - ((0,2 - 0,1) / (1 - 0,1)) = 88,89 % del peso |
jumpingcat |
0,1 | 1 - (0,1 - 0,1) / (1 - 0,1) = 100 % del peso |
En el ejemplo siguiente se muestra un clasificador de propiedades mediante el orden de Descending
:
apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
name: crp
spec:
resourceSelectors:
- ...
policy:
placementType: PickN
numberOfClusters: 10
affinity:
clusterAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 20
preference:
metricSorter:
name: kubernetes.azure.com/node-count
sortOrder: Descending
En este ejemplo, Fleet preferirá los clústeres con mayores recuentos de nodos. El clúster con el número de nodos más alto recibiría un peso de 20 y el clúster con el valor más bajo recibiría 0. Otros clústeres reciben pesos proporcionales calculados mediante la fórmula de cálculo de peso.
Puede utilizar tanto el selector de etiquetas como el clasificador de propiedades bajo la afinidad preferredDuringSchedulingIgnoredDuringExecution
. Un clúster miembro que produce un error en el selector de etiquetas no recibirá ningún peso. Los clústeres miembro que satisfacen el selector de etiquetas reciben pesos proporcionales según se especifica en el clasificador de propiedades.
apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
name: crp
spec:
resourceSelectors:
- ...
policy:
placementType: PickN
numberOfClusters: 10
affinity:
clusterAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 20
preference:
labelSelector:
matchLabels:
env: prod
metricSorter:
name: resources.kubernetes-fleet.io/total-cpu
sortOrder: Descending
En este ejemplo, un clúster solo recibiría un peso adicional si tiene la etiqueta env=prod
. Si satisface esa restricción basada en etiquetas, el clúster tiene un peso proporcional en función de la cantidad total de CPU en ese clúster miembro.
Limpieza de recursos
Si ya no desea usar los objetos ClusterResourcePlacement
creados en este artículo, puede eliminarlos mediante el comando kubectl delete
. Por ejemplo:
kubectl delete clusterresourceplacement <name-of-the-crp-resource>
Pasos siguientes
Para más información sobre la propagación de recursos, consulte los siguientes recursos:
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente las Cuestiones de GitHub como mecanismo de retroalimentación para el contenido y lo sustituiremos por un nuevo sistema de retroalimentación. Para más información, consulta:Enviar y ver comentarios de