|
Este documento ha sido traducido utilizando tecnología de traducción automática. Si bien nos esforzamos por proporcionar traducciones precisas, no ofrecemos garantías sobre la integridad, precisión o confiabilidad del contenido traducido. En caso de discrepancia, la versión original en inglés prevalecerá y constituirá el texto autorizado. |
Provisionamiento consciente de la topología
El provisionamiento consciente de la topología te permite controlar las reglas de nodeAffinity que Kubernetes escribe en un PersistentVolume (PV) en el momento de la creación. Esto es útil cuando deseas fijar volúmenes a zonas o regiones específicas para que los pods y sus datos siempre se ubiquen en el mismo dominio de fallo.
SUSE Storage admite esto a través de dos características complementarias:
-
csi-allowed-topology-keysajuste: Controla qué claves de topología (por ejemplo,topology.kubernetes.io/zone) aparecen en el PVnodeAffinity. -
strictTopologyparámetro de StorageClass: Cuando está habilitado, fija el PV a la topología del nodo exacto seleccionado por el planificador en lugar de todas las topologías coincidentes.
Requisitos previos
-
Los nodos en tu clúster deben estar etiquetados con las claves de topología que planeas usar. Kubernetes aplica automáticamente la etiqueta bien conocida
topology.kubernetes.io/zoneen la mayoría de los entornos de nube. Verifica con:kubectl get nodes --label-columns topology.kubernetes.io/zone -
Configura el ajuste de Claves de topología permitidas de CSI en SUSE Storage. Establece el valor a una lista de claves de topología separadas por comas que SUSE Storage debe pasar a Kubernetes.
-
SUSE Storage UI: Ve a Ajuste > General > Claves de topología permitidas de CSI e introduce, por ejemplo,
topology.kubernetes.io/zone. -
API de Longhorn / kubectl:
kubectl -n longhorn-system edit settings.longhorn.io csi-allowed-topology-keysEstablece el campo
valueatopology.kubernetes.io/zone.Después de cambiar este ajuste, debes reiniciar manualmente el DaemonSet de
longhorn-csi-pluginpara que el cambio tenga efecto. La topología se aplica correctamente solo después de que el pod del complemento CSI en cada nodo se haya reiniciado.
-
Cómo funciona
Cuando se crea un PVC contra un StorageClass que utiliza el controlador CSI de Longhorn, varios campos interactúan para determinar qué nodeAffinity recibe el PV resultante:
| Campo | Función |
|---|---|
|
Indica al controlador CSI qué claves de topología anunciar. Si está vacío (por defecto), no se pasa información de topología a Kubernetes, y los PVs no reciben |
|
Restringe qué valores de topología son elegibles. Por ejemplo, puedes limitar el provisionamiento a las zonas |
|
|
|
Cuando |
Ejemplos
Los ejemplos a continuación suponen un clúster con seis nodos en tres zonas:
| Nodo | Zona |
|---|---|
node2 |
a |
node3 |
b. |
node4 |
c. |
node5 |
a |
node6 |
b. |
node7 |
c. |
Afinidad básica a nivel de zona
Utiliza WaitForFirstConsumer junto con allowedTopologies y csi-allowed-topology-keys para restringir volúmenes a zonas específicas.
Configuración de Longhorn:
csi-allowed-topology-keys = topology.kubernetes.io/zone
Clase de almacenamiento:
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: longhorn-zone-ab
provisioner: driver.longhorn.io
volumeBindingMode: WaitForFirstConsumer
parameters:
numberOfReplicas: "3"
allowedTopologies:
- matchLabelExpressions:
- key: topology.kubernetes.io/zone
values:
- a
- b
Resultado: El PV nodeAffinity está configurado en zone in [a, b]. El PV solo puede ser adjuntado a nodos en las zonas a o b.
Fijación de Topología Estricta
Añade strictTopology: "true" para fijar el PV a la zona exacta del nodo programado.
Configuración de Longhorn:
csi-allowed-topology-keys = topology.kubernetes.io/zone
Clase de almacenamiento:
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: longhorn-strict-zone
provisioner: driver.longhorn.io
volumeBindingMode: WaitForFirstConsumer
parameters:
numberOfReplicas: "3"
strictTopology: "true"
allowedTopologies:
- matchLabelExpressions:
- key: topology.kubernetes.io/zone
values:
- a
- b
- c
Resultado: Aunque las tres zonas están listadas en allowedTopologies, el PV nodeAffinity está configurado solo en la zona del nodo donde se programó el pod (por ejemplo, zone in [a] si el pod se programa en node2 o node5).
Referencia de Comportamiento
En la siguiente tabla, las zonas [a, b, c] representan todas las zonas presentes en el clúster de ejemplo anterior.
| # | volumeBindingMode |
allowedTopologies |
csi-allowed-topology-keys |
strictTopology |
PV nodeAffinity |
|---|---|---|---|---|---|
1 |
De inmediato |
ninguna. |
|
false |
ninguna. |
2 |
De inmediato |
ninguna. |
|
false |
zona en [a, b, c] |
3 |
De inmediato |
zona: [a, b] |
|
false |
zona en [a, b] |
4 |
WFFC |
ninguna. |
|
false |
ninguna. |
5 |
WFFC |
ninguna. |
|
false |
zona en [a, b, c] |
6 |
WFFC |
ninguna. |
|
true |
zona en [seleccionada] |
7 |
WFFC |
zona: [a] |
|
false |
zona en [a] |
8 |
WFFC |
zona: [a, b, c] |
|
true |
zona en [seleccionada] |
En esta tabla,
zonees una forma abreviada detopology.kubernetes.io/zone, y[selected]significa la zona del nodo elegida por el planificador de Kubernetes.
Conclusiones clave:
-
Sin
csi-allowed-topology-keys, no se transmite información de topología y los PVs no recibennodeAffinitybasados en la topología (escenarios 1, 4). -
strictTopologysolo fija el PV a la topología del Pod programado cuando se utiliza conWaitForFirstConsumer. ConImmediate, el PV se crea antes de que se programe el Pod, por lo que su topología se selecciona aleatoriamente. -
allowedTopologiesreduce el conjunto de zonas elegibles;strictTopologylo reduce aún más a la única zona seleccionada.
Notas y advertencias
-
No utilices
allowedTopologiesjunto condataLocality: strict-local. El PVnodeAffinityes inmutable una vez establecido y entrará en conflicto con la fijación de volumen estricto-local de SUSE Storage. Consulta Localidad de Datos para más detalles. -
La configuración más común para los usuarios que no necesitan aprovisionamiento consciente de la topología es dejar
csi-allowed-topology-keysvacío (escenarios 1 y 4). Éste es el valor por defecto. -
Para los usuarios que desean aprovisionamiento consciente de la topología, las configuraciones recomendadas son los escenarios 7 y 8: utiliza
WaitForFirstConsumerjunto conallowedTopologiesycsi-allowed-topology-keys.