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.
Se aplica a: ✔️ Fleet Manager con clúster central
La colocación de recursos de Azure Kubernetes Fleet Manager le permite distribuir y sincronizar recursos de ámbito de clúster, incluidos los espacios de nombres y sus recursos secundarios, entre varios clústeres de la flota. Esta característica simplifica las implementaciones de varios clústeres al garantizar una configuración de recursos coherente en toda la infraestructura, lo que reduce la sobrecarga manual y le permite administrar cargas de trabajo complejas a gran escala con una única fuente de verdad. En este artículo se explica cómo usar ClusterResourcePlacement para distribuir un espacio de nombres y sus cargas de trabajo a clústeres miembro.
Para distribuir recursos individuales dentro de un espacio de nombres, consulte la documentación sobre la ubicación de recursos con ámbito de espacio de nombres.
Puede completar los pasos de este artículo mediante el portal de Azure o el CLI de Azure.
Note
Puede usar la ubicación de recursos de Fleet Manager con AKS y clústeres de Kubernetes habilitados para Azure Arc.
Antes de empezar
- Si no tiene una cuenta de Azure, cree una cuenta gratuita antes de comenzar.
- Lea la descripción general conceptual de la ubicación de recursos para comprender los conceptos y la terminología que se usan en este artículo.
- Necesita un administrador de flotas con un clúster concentrador y clústeres miembros. Si no tiene ninguno, consulte Creación de un recurso de Azure Kubernetes Fleet Manager y unión a clústeres 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 para un clúster central de Azure Kubernetes Fleet Manager.
Distribuir un espacio de nombres y sus recursos en clústeres miembros
Use el escenario sencillo de tener un Deployment y Service para desplegar en todos los clústeres de la flota. Cree un espacio de nombres en el clúster de concentrador de Fleet Manager, agregue las cargas de trabajo a este y, a continuación, use un ClusterResourcePlacement para distribuir el espacio de nombres y todo su contenido a todos los clústeres miembros mediante la directiva de ubicación PickAll.
Establezca las siguientes variables de entorno para el identificador de suscripción, el grupo de recursos y el recurso de Kubernetes Fleet:
export SUBSCRIPTION_ID=<subscription-id> export GROUP=<resource-group-name> export FLEET=<fleet-name>Establezca la suscripción de Azure predeterminada mediante el comando [
az account set][az-account-set]:az account set \ --subscription ${SUBSCRIPTION_ID}Obtenga el archivo kubeconfig del clúster del centro de flota de Kubernetes mediante el comando [
az fleet get-credentials][az-fleet-get-credentials]:az fleet get-credentials \ --resource-group ${GROUP} \ --name ${FLEET}La salida debe tener un aspecto similar a lo siguiente.
Merged "hub" as current context in /home/fleet/.kube/configNote
Si recibe un error de tipo
InvalidHubOperationcon un mensaje que indica que la flota no tiene concentrador, añada un clúster de concentrador. Para más información, consulte tipo de clúster del hub de actualización.Cree un espacio de nombres en el clúster del concentrador.
kubectl create namespace test-appGuarde el siguiente código YAML como
test-workload.yaml.apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment namespace: test-app spec: selector: matchLabels: app: nginx replicas: 2 template: metadata: labels: app: nginx spec: containers: - name: nginx image: mcr.microsoft.com/azurelinux/base/nginx:1.28@sha256:3352a36cbcab4708883a3e77b64f64159e11e1aab358c010e1c4e465dbfb4f57 ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: nginx-service namespace: test-app spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancerPrepare la carga de trabajo de prueba en el clúster hub de Fleet Manager usando
kubectl.kubectl apply -f test-workload.yamlGuarde el siguiente código YAML como
crp-distribute-workload.yaml.apiVersion: placement.kubernetes-fleet.io/v1 kind: ClusterResourcePlacement metadata: name: distribute-test-app spec: resourceSelectors: - group: "" kind: Namespace version: v1 name: test-app policy: placementType: PickAllAplique el manifiesto de ubicación al clúster central de Fleet Manager.
kubectl apply -f crp-distribute-workload.yamlNote
El despliegue de recursos comienza en cuanto se aplica el manifiesto. Se usa una estrategia implícita
RollingUpdate. Para obtener información sobre cómo tener control adicional sobre el lanzamiento, consulte definición de una estrategia de implementación para la selección de ubicación de recursos.Compruebe el progreso de la asignación del recurso.
kubectl get clusterresourceplacement distribute-test-app
La salida debería similar al siguiente ejemplo:
NAME GEN SCHEDULED SCHEDULEDGEN APPLIED APPLIEDGEN AGE
distribute-test-app 2 True 2 True 2 10s
- Ver los detalles del emplazamiento.
kubectl describe clusterresourceplacement distribute-test-app
La salida debería similar al siguiente ejemplo:
Name: distribute-test-app
Namespace:
Labels: <none>
Annotations: <none>
API Version: placement.kubernetes-fleet.io/v1
Kind: ClusterResourcePlacement
Metadata:
Creation Timestamp: 2024-04-01T18:55:31Z
Finalizers:
kubernetes-fleet.io/crp-cleanup
kubernetes-fleet.io/scheduler-cleanup
Generation: 2
Resource Version: 6949
UID: 815b1d81-61ae-4fb1-a2b1-06794be3f986
Spec:
Policy:
Placement Type: PickAll
Resource Selectors:
Group:
Kind: Namespace
Name: test-app
Version: v1
Revision History Limit: 10
Strategy:
Type: RollingUpdate
Status:
Conditions:
Last Transition Time: 2024-04-01T18:55:31Z
Message: found all the clusters needed as specified by the scheduling policy
Observed Generation: 2
Reason: SchedulingPolicyFulfilled
Status: True
Type: ClusterResourcePlacementScheduled
Last Transition Time: 2024-04-01T18:55:36Z
Message: All 3 cluster(s) are synchronized to the latest resources on the hub cluster
Observed Generation: 2
Reason: SynchronizeSucceeded
Status: True
Type: ClusterResourcePlacementSynchronized
Last Transition Time: 2024-04-01T18:55:36Z
Message: Successfully applied resources to 3 member clusters
Observed Generation: 2
Reason: ApplySucceeded
Status: True
Type: ClusterResourcePlacementApplied
Observed Resource Index: 0
Placement Statuses:
Cluster Name: membercluster1
Conditions:
Last Transition Time: 2024-04-01T18:55:31Z
Message: Successfully scheduled resources for placement in membercluster1 (affinity score: 0, topology spread score: 0): picked by scheduling policy
Observed Generation: 2
Reason: ScheduleSucceeded
Status: True
Type: ResourceScheduled
Last Transition Time: 2024-04-01T18:55:36Z
Message: Successfully Synchronized work(s) for placement
Observed Generation: 2
Reason: WorkSynchronizeSucceeded
Status: True
Type: WorkSynchronized
Last Transition Time: 2024-04-01T18:55:36Z
Message: Successfully applied resources
Observed Generation: 2
Reason: ApplySucceeded
Status: True
Type: ResourceApplied
Cluster Name: membercluster2
Conditions:
Last Transition Time: 2024-04-01T18:55:31Z
Message: Successfully scheduled resources for placement in membercluster2 (affinity score: 0, topology spread score: 0): picked by scheduling policy
Observed Generation: 2
Reason: ScheduleSucceeded
Status: True
Type: ResourceScheduled
Last Transition Time: 2024-04-01T18:55:36Z
Message: Successfully Synchronized work(s) for placement
Observed Generation: 2
Reason: WorkSynchronizeSucceeded
Status: True
Type: WorkSynchronized
Last Transition Time: 2024-04-01T18:55:36Z
Message: Successfully applied resources
Observed Generation: 2
Reason: ApplySucceeded
Status: True
Type: ResourceApplied
Cluster Name: membercluster3
Conditions:
Last Transition Time: 2024-04-01T18:55:31Z
Message: Successfully scheduled resources for placement in membercluster3 (affinity score: 0, topology spread score: 0): picked by scheduling policy
Observed Generation: 2
Reason: ScheduleSucceeded
Status: True
Type: ResourceScheduled
Last Transition Time: 2024-04-01T18:55:36Z
Message: Successfully Synchronized work(s) for placement
Observed Generation: 2
Reason: WorkSynchronizeSucceeded
Status: True
Type: WorkSynchronized
Last Transition Time: 2024-04-01T18:55:36Z
Message: Successfully applied resources
Observed Generation: 2
Reason: ApplySucceeded
Status: True
Type: ResourceApplied
Selected Resources:
Kind: Namespace
Name: my-namespace
Version: v1
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal PlacementScheduleSuccess 108s cluster-resource-placement-controller Successfully scheduled the placement
Normal PlacementSyncSuccess 103s cluster-resource-placement-controller Successfully synchronized the placement
Normal PlacementRolloutCompleted 103s cluster-resource-placement-controller Resources have been applied to the selected clusters
En el portal de Azure, vaya a Fleet Manager.
En el menú servicio, en Recursos de flota, seleccione Espacios de nombres>+ Crear.
Note
Si no ve Recursos de flota, su Fleet Manager no tiene un clúster central. Para obtener más información sobre cómo agregar una, consulte upgrade hub cluster type (Tipo de clúster del centro de actualización).
En el menú, seleccione Espacio de nombres, escriba un nombre y, a continuación, seleccione Crear.
Después de unos instantes, la página se actualiza y el espacio de nombres aparece en la lista de espacios de nombres del clúster concentrador de Fleet Manager. Ahora está listo para hospedar los recursos que quiera distribuir entre clústeres de miembros.
En la parte superior de la lista de espacios de nombres, seleccione + Crear>Aplicar un YAML y use los siguientes ejemplos.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment namespace: test-app spec: selector: matchLabels: app: nginx replicas: 2 template: metadata: labels: app: nginx spec: containers: - name: nginx image: mcr.microsoft.com/azurelinux/base/nginx:1.28@sha256:3352a36cbcab4708883a3e77b64f64159e11e1aab358c010e1c4e465dbfb4f57 ports: - containerPort: 80apiVersion: v1 kind: Service metadata: name: nginx-service namespace: test-app spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancerCopie y pegue los ejemplos y aplíquelos uno a uno como se muestra en la siguiente imagen.
El espacio de nombres y sus cargas de trabajo ya están listos para distribuirse a los clústeres miembro. La implementación y el servicio no están programados en el clúster del centro de Fleet Manager.
En el menú servicio, en Recursos de flota, seleccione Ubicación de recursos>+ Crear.
En la pestaña Información básica, configure las siguientes opciones:
En Detalles de la ubicación, introduzca un nombre para la ubicación.
En Detalles del recurso, deje Ámbito como Ámbito de clúster y escriba el Tipo de versión de grupo (GVK) y el nombre del recurso que se va a distribuir. En este ejemplo, use los valores siguientes.
group: "" kind: Namespace version: v1 name: test-appEn Selección de clúster miembro, en Tipo de selección de ubicación , elija Todos los clústeres.
En Lanzamiento, deje seleccionada la estrategia de actualización gradual .
Seleccione Siguiente para revisar el manifiesto resultante
ClusterResourcePlacement. Puede modificar el manifiesto si es necesario, validar mediante la opción Validar (ejecución seca) o seleccionar Revisar y crear para continuar con la confirmación final.Seleccione Crear para iniciar la distribución del espacio de nombres inmediatamente.
Note
El lanzamiento de recursos comienza inmediatamente cuando se aplica la colocación de recursos mediante la estrategia seleccionada
RollingUpdate. Para obtener información sobre cómo tener controles adicionales sobre el lanzamiento, consulte definición de una estrategia de implementación para la selección de ubicación de recursos.La página se actualiza y la lista Ubicaciones de recursos muestra la ubicación recién creada. Muestra el número de clústeres seleccionados y si el planificador de flotas puede cumplir la política de ubicación.
Consulte el estado de implementación del emplazamiento seleccionando el nombre del emplazamiento en la lista. Seleccione clústeres individuales para ver la implementación de recursos en ese clúster.
En los clústeres de Kubernetes seleccionados, se encuentran el espacio de nombres, el Deployment y el Service desplegados y en funcionamiento.
Eliminación de la ubicación para quitar recursos
Al eliminar la ubicación del recurso en el clúster del centro de Fleet Manager, se quitan los recursos distribuidos de los clústeres de miembros seleccionados.
kubectl delete clusterresourceplacement distribute-test-app
En el menú de servicio, en Recursos de Fleet, seleccione Ubicaciones de recursos.
En la lista de ubicaciones de recursos, seleccione la ubicación y seleccione Eliminar.
En Eliminar, compruebe que eligió la ubicación correcta. Después, seleccione Confirmar eliminación>Eliminar.
La página se actualiza y la ubicación ya no aparece en la lista. Los recursos se eliminan de los clústeres de miembros.
Contenido relacionado
Para más información sobre la selección de ubicación de recursos, consulte los siguientes recursos:
- Desplegar recursos con ámbito de nombres en varios clústeres
- Descripción de la salida del estado de ubicación de los recursos.
- Ubicación inteligente de recursos de Kubernetes entre clústeres en función de las propiedades de los clústeres miembro.
- Control de la expulsión y la interrupción para la colocación de recursos del clúster.
- Definición de una estrategia de implementación para una ubicación de recursos de clúster.
- Preguntas más frecuentes sobre la selección de ubicación de recursos del clúster.
- Documentación de KubeFleet ClusterResourcePlacement de código abierto.