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 ( |
|
Anterior à 1,26 |
UnitedDeployment ( |
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:
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 |
|
|
Define um único modelo de carga de trabalho aplicado a todos os pools de nós de destino |
|
|
Seleciona os pools de nós de destino por rótulo; detecta automaticamente pools de nós recém-criados ou removidos |
|
|
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 (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 |
|
|
Lista de nomes dos pools de nós para implantação. Se tanto |
Não |
|
|
Seleciona pools de nós correspondendo aos seus rótulos ( |
Não |
|
|
Modelo de carga de trabalho a ser implantado. Suporta |
Sim |
|
|
Substituições por pool de nós aplicadas sobre o |
Não |
PrefiranodepoolSelectorem vez depoolspara 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 |
|
|
Pools de nós (por nome) aos quais esta substituição se aplica. |
Não |
|
|
Pools de nós (por rótulo) aos quais esta substituição se aplica. |
Não |
|
|
Substitui a contagem de réplicas para os pools de nós selecionados. |
Não |
|
|
Substitui a imagem do contêiner para os pools de nós selecionados. |
Não |
|
|
Aplica patches de campos arbitrários ao |
Não |
|
|
Caminho JSON do campo a ser modificado dentro do |
Não |
|
|
Operação de patch: |
Não |
|
|
Valor a ser definido. Aplica-se apenas às operações |
Não |
Campos de status
|
Campo |
Descrição |
|
|
Status atual do YurtAppSet, incluindo o status de seleção do pool de nós e o status da carga de trabalho. |
|
|
Número de cargas de trabalho gerenciadas onde todas as réplicas estão prontas. |
|
|
Número de cargas de trabalho gerenciadas onde todas as réplicas foram atualizadas para a versão mais recente. |
|
|
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 |
|
|
Modelo de carga de trabalho a ser implantado. Suporta |
|
|
Lista de pools de nós para implantação. |
|
|
Nome do pool de nós. |
|
|
Configuração de afinidade de nó. Use |
|
|
Configuração de tolerância para o pool de nós. |
|
|
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.