YurtAppSet le permite desplegar y gestionar aplicaciones en varios node pools dentro de un clúster ACK Edge a partir de una sola configuración. Este recurso supervisa los cambios en las etiquetas de los node pools y mantiene sincronizadas las cargas de trabajo automáticamente. De este modo, puede actualizar una versión o escalar una aplicación en todo el clúster sin modificar cada node pool de forma individual.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Un clúster ACK Edge.
kubectl configurado para conectarse al clúster.
Permisos para crear y gestionar recursos personalizados en el clúster.
Elija su enfoque
|
Versión del clúster |
Recurso recomendado |
|
1.26 o posterior |
YurtAppSet ( |
|
Anterior a la 1.26 |
UnitedDeployment ( |
Contexto
En la computación perimetral, la misma aplicación suele ejecutarse en nodos distribuidos en varias regiones. El método tradicional consiste en asignar etiquetas a los nodos de cada región y crear un Deployment independiente por región. Sin embargo, esta práctica se vuelve difícil de administrar cuando aumenta la cantidad de regiones:
Actualizaciones tediosas: cada cambio de versión exige actualizar manualmente todos los Deployments.
Gestión compleja: a medida que se multiplican las regiones, dar seguimiento y mantener Deployments separados propicia errores.
Configuración redundante: los Deployments de distintas regiones comparten especificaciones casi idénticas, lo que dificulta aplicar modificaciones.
YurtAppSet resuelve estos problemas mediante tres mecanismos principales:
|
Mecanismo |
Propósito |
|
|
Define una única plantilla de carga de trabajo que se aplica a todos los node pools de destino. |
|
|
Selecciona los node pools de destino por etiqueta e incluye o excluye automáticamente los node pools recién creados o eliminados. |
|
|
Sobrescribe campos específicos (réplicas, imagen de contenedor, parches arbitrarios) para node pools individuales sin necesidad de crear cargas de trabajo independientes. |
YurtAppSet (versión del clúster 1.26 o posterior)
Cree una instancia de YurtAppSet
A continuación se muestra un archivo YAML que crea un YurtAppSet para desplegar una carga de trabajo nginx en dos node pools. El node pool np1xxxxxx utiliza 2 réplicas de nginx:1.19.1, mientras que el node pool np2xxxxxx sobrescribe los valores predeterminados con 3 réplicas de nginx:1.20.1.
apiVersion: apps.openyurt.io/v1beta1
kind: YurtAppSet
metadata:
name: example
namespace: default
spec:
revisionHistoryLimit: 5
pools:
- np1xxxxxx
- np2xxxxxx
nodepoolSelector:
matchLabels:
yurtappset.openyurt.io/type: "nginx"
workload:
workloadTemplate:
deploymentTemplate:
metadata:
labels:
app: example
spec:
replicas: 2
selector:
matchLabels:
app: example
template:
metadata:
labels:
app: example
spec:
containers:
- image: nginx:1.19.1
imagePullPolicy: Always
name: nginx
workloadTweaks:
- pools:
- np2xxxxxx
tweaks:
replicas: 3
containerImages:
- name: nginx
targetImage: nginx:1.20.1
patches:
- path: /metadata/labels/test
operation: add
value: test
Referencia de campos YAML
Campos de especificación
|
Campo |
Descripción |
Obligatorio |
|
|
Lista de nombres de los node pools donde se realizará el despliegue. Si se definen tanto |
No |
|
|
Selecciona los node pools cuyas etiquetas coinciden ( |
No |
|
|
Plantilla de la carga de trabajo que se va a desplegar. Admite |
Sí |
|
|
Valores de reemplazo por node pool que se aplican sobre |
No |
Para la mayoría de los despliegues, se recomienda usarnodepoolSelectoren lugar depools. La selección basada en etiquetas gestiona automáticamente los node pools agregados o eliminados, sin necesidad de modificar la configuración de YurtAppSet. Para cambiar las etiquetas de un NodePool, edite el YAML correspondiente en la página Custom Resources de la consola del clúster.
Campos de workloadTweaks
|
Campo |
Descripción |
Obligatorio |
|
|
Node pools (por nombre) a los que se aplica esta modificación. |
No |
|
|
Node pools (por etiqueta) a los que se aplica esta modificación. |
No |
|
|
Sobrescribe la cantidad de réplicas en los node pools seleccionados. |
No |
|
|
Sobrescribe la imagen de contenedor en los node pools seleccionados. |
No |
|
|
Aplica parches arbitrarios a los campos de |
No |
|
|
Ruta JSON del campo que se va a modificar dentro de |
No |
|
|
Operación del parche: |
No |
|
|
Valor que se va a establecer. Solo aplica a las operaciones |
No |
Campos de estado
|
Campo |
Descripción |
|
|
Estado actual de YurtAppSet, incluido el estado de selección de los node pools y el estado de las cargas de trabajo. |
|
|
Cantidad de cargas de trabajo gestionadas cuyas réplicas están listas. |
|
|
Cantidad de cargas de trabajo gestionadas cuyas réplicas se actualizaron a la versión más reciente. |
|
|
Total de cargas de trabajo que gestiona este YurtAppSet. |
UnitedDeployment (versión del clúster anterior a la 1.26)
Cree una instancia de UnitedDeployment
apiVersion: apps.kruise.io/v1alpha1
kind: UnitedDeployment
metadata:
name: example
namespace: default
spec:
revisionHistoryLimit: 5
selector:
matchLabels:
app: example
template:
deploymentTemplate:
metadata:
creationTimestamp: null
labels:
app: example
spec:
selector:
matchLabels:
app: example
template:
metadata:
creationTimestamp: null
labels:
app: example
spec:
containers:
- image: nginx:1.19.3
imagePullPolicy: Always
name: nginx
dnsPolicy: ClusterFirst
restartPolicy: Always
topology:
subsets:
- name: cloud
nodeSelectorTerm:
matchExpressions:
- key: alibabacloud.com/nodepool-id
operator: In
values:
- np4b9781c40f0e46c581b2cf2b6160****
replicas: 2
- name: edge
nodeSelectorTerm:
matchExpressions:
- key: alibabacloud.com/nodepool-id
operator: In
values:
- np47832359db2e4843aa13e8b76f83****
replicas: 2
tolerations:
- effect: NoSchedule
key: apps.openyurt.io/taints
operator: Exists
Referencia de campos YAML
|
Campo |
Descripción |
|
|
Plantilla de la carga de trabajo que se va a desplegar. Admite |
|
|
Lista de los node pools donde se realizará el despliegue. |
|
|
Nombre del node pool. |
|
|
Configuración de afinidad de nodos. Utilice |
|
|
Configuración de tolerancias del node pool. |
|
|
Cantidad de réplicas de Pod en el node pool. |
Gestione las aplicaciones perimetrales
Una vez que YurtAppSet está en ejecución, todas las operaciones del ciclo de vida se realizan al modificar su especificación. El controlador de YurtAppSet propaga los cambios automáticamente a la carga de trabajo de cada node pool.
Actualice la versión de la aplicación
Actualice spec.workload.workloadTemplate con la nueva imagen de contenedor u otros cambios en la plantilla. El controlador aplica la plantilla actualizada a todas las cargas de trabajo gestionadas y activa una actualización gradual en cada node pool.
Ejecute una actualización gradual en una región específica
Actualice spec.workload.workloadTweaks[*].containerImages para el node pool de destino. Solo los Pods de ese node pool reciben la nueva imagen; los demás no se ven afectados.
Escale una aplicación en una región específica
Actualice spec.workload.workloadTweaks[*].tweaks.replicas para el node pool de destino. Esta acción sobrescribe la cantidad de réplicas definida en workloadTemplate únicamente para ese node pool.
Despliegue en una nueva región
Cree un nuevo node pool con una etiqueta que coincida con spec.nodepoolSelector. YurtAppSet detecta el nuevo recurso NodePool y crea automáticamente una carga de trabajo para él. Después, agregue los nodos de esa región al node pool.
Si utiliza nodepoolSelector, no es necesario modificar la configuración de YurtAppSet.
Desactive una aplicación en una región
Elimine el node pool de la región de destino. YurtAppSet detecta la eliminación y quita automáticamente la carga de trabajo asociada a ese node pool.