Los node pools de nube híbrida permiten registrar nodos de su centro de datos (IDC) en un clúster de ACK. Esto facilita la gestión unificada y la programación coordinada entre los recursos locales y los de la nube. Este tema describe cómo programar aplicaciones en un node pool de nube híbrida para cumplir con requisitos de ubicación de recursos, normativas de localización de datos o hardware específico.
Funcionamiento
Al crear un node pool de nube híbrida, ACK agrega automáticamente un taint y una etiqueta a cada nodo del pool:
Taint:
nodepool-type=hybridcloud:NoSchedule— impide que los componentes del sistema y las cargas de trabajo generales se asignen a los nodos de nube híbrida de forma predeterminada.Etiqueta:
alibabacloud.com/nodepool-type: hybridcloud— identifica el tipo de nodo para que las políticas de programación puedan seleccionarlo.
Una toleration elimina la restricción de programación y hace que un pod sea elegible para los nodos de nube híbrida, aunque no garantiza su asignación en ellos. Para garantizar la ubicación, combine la toleration con una regla de nodeSelector o nodeAffinity.
Elegir un enfoque
|
Enfoque |
Cuándo utilizarlo |
Configuración clave |
|
Permitir (Solución 1) |
Para ampliar la capacidad total sin restricciones estrictas de ubicación. Los pods aún pueden asignarse en otros node pools. |
Solo |
|
Dirigir a un node pool específico (Solución 2a) |
Cuando se requiere hardware específico, topología de red o residencia de datos para un solo pool. |
|
|
Dirigir a cualquier node pool de nube híbrida (Solución 2b) |
Para cargas de trabajo que deben ejecutarse en las instalaciones, pero en cualquier node pool del IDC. |
|
|
Basado en prioridad entre pools (Solución 3) |
Para preferir un node pool de nube híbrida de menor costo en la expansión; libera primero los nodos ECS de la nube durante la reducción. |
ResourcePolicy + |
Solución 1: Permitir la programación en nodos de nube híbrida
Cuándo utilizarla: Su clúster necesita mayor capacidad total y su carga de trabajo no tiene restricciones estrictas de ubicación. Con esta configuración, el programador considera el node pool de nube híbrida como un candidato válido, pero los pods aún pueden ejecutarse en otros node pools activos.
Configuración principal: Agregue una entrada de tolerations en spec.template.spec:
spec:
template:
spec:
# Allow this pod to run on hybrid cloud nodes.
tolerations:
- key: "nodepool-type"
operator: "Equal"
value: "hybridcloud"
effect: "NoSchedule"
Solución 2: Forzar la programación en nodos de nube híbrida
Estas dos sub-soluciones garantizan que los pods se asignen en nodos de nube híbrida. Elija una según la precisión con la que necesite dirigirlos a un node pool.
Dirigir a un node pool específico
Cuándo utilizarla: Su carga de trabajo requiere un node pool de nube híbrida en particular; por ejemplo, uno con hardware específico, una topología de red dedicada o requisitos estrictos de residencia de datos. Utilice nodeSelector para fijar los pods a un solo node pool mediante su ID.
Configuración principal: Agregue tanto tolerations como nodeSelector en spec.template.spec:
spec:
template:
spec:
# Core configuration 1: Lift the hybrid cloud scheduling restriction.
tolerations:
- key: "nodepool-type"
operator: "Equal"
value: "hybridcloud"
effect: "NoSchedule"
# Core configuration 2: Pin to a specific node pool by ID.
nodeSelector:
alibabacloud.com/nodepool-id: npxxxxxxxxxxxx
Obtenga el ID del node pool desde la página Node Management > Node Pools de su clúster.
Dirigir a cualquier node pool de nube híbrida
Cuándo utilizarla: Su carga de trabajo debe ejecutarse en las instalaciones, pero puede hacerlo en cualquier node pool de nube híbrida. nodeAffinity selecciona todos los nodos con la etiqueta hybridcloud, por lo que los pods se distribuyen entre todos los node pools del IDC en lugar de fijarse a uno solo.
Configuración principal: Agregue tanto tolerations como affinity en spec.template.spec:
spec:
template:
spec:
# Core configuration 1: Lift the hybrid cloud scheduling restriction.
tolerations:
- key: "nodepool-type"
operator: "Equal"
value: "hybridcloud"
effect: "NoSchedule"
# Core configuration 2: Require a hybrid cloud node by label.
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: alibabacloud.com/nodepool-type
operator: In
values:
- hybridcloud
Solución 3: Programación basada en prioridades con ResourcePolicy
Cuándo utilizarla: Cuando tiene varios node pools y desea una expansión ordenada y una reducción en orden inverso. Por ejemplo, utilice un node pool de nube híbrida de menor costo como pool principal y un node pool de ECS en la nube como desbordamiento:
Expansión: Los pods se programan primero en el node pool de nube híbrida. Si los recursos son insuficientes, se desbordan al pool de ECS.
Reducción: Los pods del pool de ECS se detienen primero, lo que preserva la estabilidad de los recursos en el node pool de nube híbrida.
Esta solución requiere dos recursos: un ResourcePolicy y una carga de trabajo que lo referencie.
Configuración de ResourcePolicy: Defina el orden de prioridad de programación en la lista units y asocie la política con los pods objetivo mediante un selector.
apiVersion: scheduling.alibabacloud.com/v1alpha1
kind: ResourcePolicy
metadata:
name: nginx-priority-policy
spec:
# Match pods with this label.
selector:
app: nginx-priority
# The scheduler tries pools in order. First match wins.
units:
# Priority 1: hybrid cloud node pool (lower cost, preferred)
- resource: ecs
nodeSelector:
alibabacloud.com/nodepool-id: np-pool-a-xxxxxxxxxx
# Priority 2: ECS node pool (overflow)
- resource: ecs
nodeSelector:
alibabacloud.com/nodepool-id: np-pool-b-xxxxxxxxxx
Obtenga los ID de los node pools desde la página Node Management > Node Pools de su clúster.
Configuración de la carga de trabajo: Agregue la etiqueta correspondiente y la toleration de nube híbrida a la plantilla del pod.
spec:
template:
metadata:
# This label connects the pod to the ResourcePolicy above.
labels:
app: nginx-priority
spec:
# Allow scheduling to the hybrid cloud node pool.
tolerations:
- key: "nodepool-type"
operator: "Equal"
value: "hybridcloud"
effect: "NoSchedule"
-
ResourcePolicy:
-
Deployment:
Aplicar en producción
No elimine el taint predeterminado
nodepool-type=hybridcloud:NoScheduledel node pool de nube híbrida. Este taint evita que los componentes del sistema se programen accidentalmente en nodos de nube híbrida.No elimine ni modifique la etiqueta predeterminada
alibabacloud.com/nodepool-type: hybridclouden los nodos de nube híbrida. Modificar o eliminar esta etiqueta puede afectar el funcionamiento normal del node pool.