Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En el caso de las aplicaciones implementadas en varios clústeres, los administradores suelen querer enrutar el tráfico entrante a ellos a través de clústeres.
Puede seguir este documento para configurar el equilibrio de carga de nivel 4 para estas aplicaciones de varios clústeres.
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
Si no tiene una cuenta de Azure, cree una cuenta gratuita antes de comenzar.
Siga la introducción conceptual de esta característica, que proporciona una explicación de los objetos
ServiceExportyMultiClusterServicea los que se hace referencia en este documento.Debe tener un recurso de flota con un clúster de concentrador y clústeres miembro. Si no tiene este recurso, siga Inicio rápido: Creación de un recurso de flota y unión a clústeres de miembros.
Los clústeres de AKS de destino en los que se implementan las cargas de trabajo deben estar presentes en la misma red virtual o en redes virtuales emparejadas.
- Estos clústeres de destino deben agregarse como clústeres miembro al recurso Fleet.
- Estos clústeres de destino deben usar redes de Azure CNI (interfaz de redde contenedor).
Debe obtener acceso a la API de Kubernetes del clúster del centro de conectividad siguiendo los pasos descritos en Acceso a la API de Kubernetes del clúster del centro de conectividad de Fleet.
Establezca las siguientes variables de entorno y obtenga kubeconfigs para la flota y todos los clústeres miembro:
export GROUP=<resource-group> export FLEET=<fleet-name> export MEMBER_CLUSTER_1=aks-member-1 export MEMBER_CLUSTER_2=aks-member-2 az fleet get-credentials --resource-group ${GROUP} --name ${FLEET} --file fleet az aks get-credentials --resource-group ${GROUP} --name ${MEMBER_CLUSTER_1} --file aks-member-1 az aks get-credentials --resource-group ${GROUP} --name ${MEMBER_CLUSTER_2} --file aks-member-2
Use el entorno de Bash en Azure Cloud Shell. Para más información, consulte Introducción a Azure Cloud Shell.
Si prefiere ejecutar comandos de referencia de la CLI localmente, instale la CLI de Azure. Si utiliza Windows o macOS, considere la posibilidad de ejecutar la CLI de Azure en un contenedor Docker. Para más información, vea Ejecución de la CLI de Azure en un contenedor de Docker.
Si usa una instalación local, inicie sesión en la CLI de Azure mediante el comando az login. Siga los pasos que se muestran en el terminal para completar el proceso de autenticación. Para ver otras opciones de inicio de sesión, consulte Autenticación en Azure mediante la CLI de Azure.
En caso de que se le solicite, instale las extensiones de la CLI de Azure la primera vez que la use. Para obtener más información sobre las extensiones, consulte Uso y administración de extensiones con la CLI de Azure.
Ejecute az version para buscar cuál es la versión y las bibliotecas dependientes que están instaladas. Para realizar la actualización a la versión más reciente, ejecute az upgrade.
Implementación de una carga de trabajo en clústeres de miembros del recurso de flota
Nota:
Los pasos de esta guía paso a paso hacen referencia solo a una aplicación de ejemplo con fines de demostración. Puede sustituir esta carga de trabajo por cualquiera de sus propios objetos de implementación y servicio existentes.
En estos pasos se implementa la carga de trabajo de ejemplo desde el clúster Fleet en clústeres miembro mediante la propagación de la configuración de Kubernetes. Como alternativa, puede optar por implementar estas configuraciones de Kubernetes en cada clúster miembro por separado, de una en una.
Cree un espacio de nombres en el clúster de flota:
KUBECONFIG=fleet kubectl create namespace kuard-demoLa salida es similar a la del siguiente ejemplo:
namespace/kuard-demo createdAplique los objetos Deployment, Service, ServiceExport:
KUBECONFIG=fleet kubectl apply -f https://raw.githubusercontent.com/Azure/AKS/master/examples/fleet/kuard/kuard-export-service.yamlLa especificación
ServiceExportdel archivo anterior permite exportar un servicio de clústeres miembros al recurso Fleet. Una vez exportado correctamente, el servicio y todos sus puntos de conexión se sincronizarán con el clúster de flota y, a continuación, se pueden usar para configurar el equilibrio de carga de varios clústeres en estos puntos de conexión. El resultado es similar al ejemplo siguiente:deployment.apps/kuard created service/kuard created serviceexport.networking.fleet.azure.com/kuard createdCree el
ClusterResourcePlacementsiguiente en un archivo denominadocrp-2.yaml. Observe que estamos seleccionando clústeres en la regióneastus:apiVersion: placement.kubernetes-fleet.io/v1 kind: ClusterResourcePlacement metadata: name: kuard-demo spec: resourceSelectors: - group: "" version: v1 kind: Namespace name: kuard-demo policy: affinity: clusterAffinity: requiredDuringSchedulingIgnoredDuringExecution: clusterSelectorTerms: - labelSelector: matchLabels: fleet.azure.com/location: eastusAplique el objeto
ClusterResourcePlacement:KUBECONFIG=fleet kubectl apply -f crp-2.yamlSi funciona correctamente, el resultado será similar al siguiente ejemplo:
clusterresourceplacement.placement.kubernetes-fleet.io/kuard-demo createdCompruebe el estado de
ClusterResourcePlacement:KUBECONFIG=fleet kubectl get clusterresourceplacementsSi funciona correctamente, el resultado será similar al siguiente ejemplo:
NAME GEN SCHEDULED SCHEDULEDGEN APPLIED APPLIEDGEN AGE kuard-demo 1 True 1 True 1 20s
Creación de MultiClusterService para equilibrar la carga entre los puntos de conexión de servicio en varios clústeres miembro
Compruebe los clústeres miembro de la región
eastuspara ver si el servicio se exporta correctamente:KUBECONFIG=aks-member-1 kubectl get serviceexport kuard --namespace kuard-demoLa salida es similar a la del siguiente ejemplo:
NAME IS-VALID IS-CONFLICTED AGE kuard True False 25sKUBECONFIG=aks-member-2 kubectl get serviceexport kuard --namespace kuard-demoLa salida es similar a la del siguiente ejemplo:
NAME IS-VALID IS-CONFLICTED AGE kuard True False 55sDebería ver que el servicio es válido para la exportación (el campo
IS-VALIDestrue) y no tiene ningún conflicto con otras exportaciones (IS-CONFLICTesfalse).Nota:
ServiceExport puede tardar un minuto o dos en propagarse.
Cree
MultiClusterServiceen un miembro para equilibrar la carga entre los puntos de conexión de servicio de estos clústeres:KUBECONFIG=aks-member-1 kubectl apply -f https://raw.githubusercontent.com/Azure/AKS/master/examples/fleet/kuard/kuard-mcs.yamlNota:
Para exponer el servicio a través de la dirección IP interna en lugar de la pública, agregue la anotación a MultiClusterService:
apiVersion: networking.fleet.azure.com/v1alpha1 kind: MultiClusterService metadata: name: kuard namespace: kuard-demo annotations: networking.fleet.azure.com/azure-load-balancer-internal: "true" ...La salida es similar a la del siguiente ejemplo:
multiclusterservice.networking.fleet.azure.com/kuard createdCompruebe que MultiClusterService sea válido ejecutando el siguiente comando:
KUBECONFIG=aks-member-1 kubectl get multiclusterservice kuard --namespace kuard-demoLa salida debería tener un aspecto similar al ejemplo siguiente:
NAME SERVICE-IMPORT EXTERNAL-IP IS-VALID AGE kuard kuard <a.b.c.d> True 40sEl campo
IS-VALIDdebe sertrueen la salida. Consulte la dirección IP del equilibrador de carga externo (EXTERNAL-IP) en la salida. Puede tardar un tiempo antes de que la importación se procese por completo y la dirección IP esté disponible.Ejecute el siguiente comando varias veces con la dirección IP externa anterior:
curl <a.b.c.d>:8080 | grep addrsObserve que las direcciones IP de los pods que atienden la solicitud cambian y que estos pods proceden de los clústeres miembro
aks-member-1yaks-member-2de la regióneastus. Para comprobar las direcciones IP del pod, ejecute los siguientes comandos en los clústeres de la regióneastus:KUBECONFIG=aks-member-1 kubectl get pods -n kuard-demo -o wideKUBECONFIG=aks-member-2 kubectl get pods -n kuard-demo -o wide