Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:manage ack edge applications using yurtappset

Última atualização: Jun 27, 2026

O YurtAppSet permite implantar e gerenciar aplicações em vários pools de nós de um cluster ACK Edge a partir de uma única configuração. Ele monitora alterações nos rótulos dos pools de nós e mantém as cargas de trabalho sincronizadas automaticamente. Assim, é possível atualizar uma versão ou dimensionar uma aplicação em todo o cluster sem precisar ajustar cada pool de nós individualmente.

Pré-requisitos

Antes de começar, verifique se você possui:

  • Um cluster ACK Edge

  • kubectl configurado para se conectar ao cluster

  • Permissões para criar e gerenciar recursos personalizados no cluster

Escolha sua abordagem

Versão do cluster

Recurso recomendado

1,26 ou posterior

YurtAppSet (apps.openyurt.io/v1beta1)

Anterior à 1,26

UnitedDeployment (apps.kruise.io/v1alpha1)

Contexto

Na computação de borda, a mesma aplicação geralmente executa em nós distribuídos por várias regiões. A abordagem tradicional — atribuir rótulos aos nós de cada região e criar um Deployment separado por região — torna-se inviável conforme o número de regiões aumenta:

Traditional multi-region deployment

  • Atualizações trabalhosas: Cada mudança de versão exige a atualização manual de todos os Deployments.

  • Gerenciamento complexo: Com o aumento das regiões, rastrear e manter Deployments separados se torna propenso a erros.

  • Configuração redundante: Os Deployments entre regiões compartilham especificações quase idênticas, o que torna as alterações cumbersome.

O YurtAppSet resolve esses problemas com três mecanismos principais:

Mecanismo

Finalidade

workloadTemplate

Define um único modelo de carga de trabalho aplicado a todos os pools de nós de destino

nodepoolSelector

Seleciona os pools de nós de destino por rótulo; detecta automaticamente pools de nós recém-criados ou removidos

workloadTweaks

Substitui campos específicos (réplicas, imagem do contêiner, patches arbitrários) para pools de nós individuais sem criar cargas de trabalho separadas

YurtAppSet architecture

YurtAppSet (versão do cluster 1,26 ou posterior)

Crie uma instância do YurtAppSet

O YAML a seguir cria um YurtAppSet que implanta uma carga de trabalho nginx em dois pools de nós. O pool de nós np1xxxxxx usa 2 réplicas de nginx:1.19.1; o pool de nós np2xxxxxx substitui os padrões por 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

Referência de campos YAML

Campos de especificação

Campo

Descrição

Obrigatório

spec.pools

Lista de nomes dos pools de nós para implantação. Se tanto pools quanto nodepoolSelector estiverem definidos, a união será utilizada.

Não

spec.nodepoolSelector

Seleciona pools de nós correspondendo aos seus rótulos (metadata.labels no recurso NodePool). Inclui automaticamente novos pools de nós correspondentes e exclui os removidos.

Não

spec.workload.workloadTemplate

Modelo de carga de trabalho a ser implantado. Suporta deploymentTemplate e statefulSetTemplate.

Sim

spec.workload.workloadTweaks

Substituições por pool de nós aplicadas sobre o workloadTemplate.

Não

Prefira nodepoolSelector em vez de pools para a maioria das implantações. A seleção baseada em rótulos lida automaticamente com pools de nós adicionados ou removidos, sem exigir alterações na configuração do YurtAppSet. Para modificar os rótulos do NodePool, edite o YAML do NodePool correspondente na página Custom Resources no console do cluster.

Campos de workloadTweaks

Campo

Descrição

Obrigatório

workloadTweaks[*].pools

Pools de nós (por nome) aos quais esta substituição se aplica.

Não

workloadTweaks[*].nodepoolSelector

Pools de nós (por rótulo) aos quais esta substituição se aplica.

Não

workloadTweaks[*].tweaks.replicas

Substitui a contagem de réplicas para os pools de nós selecionados.

Não

workloadTweaks[*].tweaks.containerImages

Substitui a imagem do contêiner para os pools de nós selecionados.

Não

workloadTweaks[*].tweaks.patches

Aplica patches de campos arbitrários ao workloadTemplate para os pools de nós selecionados.

Não

tweaks.patches[*].path

Caminho JSON do campo a ser modificado dentro do workloadTemplate.

Não

tweaks.patches[*].operation

Operação de patch: add, remove ou replace.

Não

tweaks.patches[*].value

Valor a ser definido. Aplica-se apenas às operações add e replace.

Não

Campos de status

Campo

Descrição

status.conditions

Status atual do YurtAppSet, incluindo o status de seleção do pool de nós e o status da carga de trabalho.

status.readyWorkloads

Número de cargas de trabalho gerenciadas onde todas as réplicas estão prontas.

status.updatedWorkloads

Número de cargas de trabalho gerenciadas onde todas as réplicas foram atualizadas para a versão mais recente.

status.totalWorkloads

Número total de cargas de trabalho gerenciadas por este YurtAppSet.

UnitedDeployment (versão do cluster anterior à 1,26)

Crie uma instância do 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

Referência de campos YAML

Campo

Descrição

spec.workloadTemplate

Modelo de carga de trabalho a ser implantado. Suporta deploymentTemplate e statefulSetTemplate.

spec.topology.subsets

Lista de pools de nós para implantação.

spec.topology.subsets[*].name

Nome do pool de nós.

spec.topology.subsets[*].nodeSelectorTerm

Configuração de afinidade de nó. Use alibabacloud.com/nodepool-id como chave e o ID do pool de nós como valor. Para encontrar o ID do pool de nós, acesse a página Node Pools e verifique a coluna Name.

spec.topology.subsets[*].tolerations

Configuração de tolerância para o pool de nós.

spec.topology.subsets[*].replicas

Número de réplicas de Pod no pool de nós.

Gerencie aplicações de borda

Quando um YurtAppSet está em execução, todas as operações de ciclo de vida funcionam modificando sua especificação. O controlador do YurtAppSet propaga as alterações para a carga de trabalho de cada pool de nós automaticamente.

Atualize a versão da aplicação

Atualize spec.workload.workloadTemplate com a nova imagem do contêiner ou outras alterações no modelo. O controlador aplica o modelo atualizado a todas as cargas de trabalho gerenciadas, acionando uma atualização contínua em cada pool de nós.

Execute uma atualização gradual em uma região específica

Atualize spec.workload.workloadTweaks[*].containerImages para o pool de nós de destino. Apenas os Pods nesse pool de nós recebem a nova imagem; os outros pools de nós permanecem inalterados.

Dimensione uma aplicação em uma região específica

Atualize spec.workload.workloadTweaks[*].tweaks.replicas para o pool de nós de destino. Isso substitui a contagem de réplicas definida em workloadTemplate apenas para esse pool de nós.

Implante em uma nova região

Crie um novo pool de nós com um rótulo que corresponda a spec.nodepoolSelector. O YurtAppSet detecta o novo recurso NodePool e cria automaticamente uma carga de trabalho para ele. Em seguida, adicione nós dessa região ao pool de nós.

Nenhuma alteração na configuração do YurtAppSet é necessária ao usar nodepoolSelector.

Retire uma aplicação de serviço em uma região

Exclua o pool de nós da região de destino. O YurtAppSet detecta a exclusão e remove automaticamente a carga de trabalho associada a esse pool de nós.