Em cenários de edge computing, as atualizações nativas do DaemonSet podem bloquear quando os links entre a nuvem e a borda falham e os nós ficam com status NotReady, ou quando você precisa atualizar sob demanda em nós de borda sem uma implantação controlada pela nuvem. Configure os modelos estendidos AdvancedRollingUpdate ou OTA para resolver bloqueios de atualização e oferecer suporte a atualizações over-the-air. Use o AdvancedRollingUpdate para ignorar nós NotReady durante atualizações contínuas ou o OTA para acionar atualizações individuais por nó sob demanda.
Pré-requisitos
Um cluster ACK edge executando a versão v1.26.3-aliyun.1 ou posterior
Escolha um modelo de atualização
|
Modelo de atualização |
Quando usar |
|
AdvancedRollingUpdate |
Desconexões entre nuvem e borda podem deixar os nós com status NotReady e bloquear a atualização contínua |
|
OTA |
Você deseja controlar o momento da atualização por nó de borda e acionar atualizações sob demanda via API REST |
Configure o modelo de atualização
Ambos os modelos exigem as mesmas anotações e estratégia de atualização do DaemonSet:
apiVersion: apps/v1
kind: DaemonSet
metadata:
annotations:
# Required: enables the extended upgrade model.
# Valid values: AdvancedRollingUpdate or OTA.
apps.openyurt.io/update-strategy: AdvancedRollingUpdate
# Optional: applies to AdvancedRollingUpdate only.
# Defines the maximum number of unavailable pods during the rolling update.
# Accepts the same values as the native DaemonSet maxUnavailable. Default: 10%.
apps.openyurt.io/max-unavailable: 30%
spec:
updateStrategy:
# Required: must be set to OnDelete for either upgrade model to take effect.
type: OnDelete
Defina apps.openyurt.io/update-strategy como AdvancedRollingUpdate ou OTA e configure spec.updateStrategy.type como OnDelete.
Parâmetros
|
Parâmetro |
Descrição |
|
|
Habilita o modelo de atualização estendido. Valores válidos: |
|
|
Aplicável apenas ao |
|
|
Deve ser definido como |
Uso do AdvancedRollingUpdate
O modelo AdvancedRollingUpdate ignora nós com status NotReady e atualiza primeiro os pods em nós Ready. Quando um nó retorna ao status Ready, o sistema atualiza automaticamente seu pod do DaemonSet.
Este exemplo cria um DaemonSet chamado nginx-daemonset com a estratégia AdvancedRollingUpdate e limite de 30% de pods indisponíveis.
cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: nginx-daemonset
annotations:
apps.openyurt.io/update-strategy: AdvancedRollingUpdate
apps.openyurt.io/max-unavailable: 30%
spec:
selector:
matchLabels:
app: nginx
updateStrategy:
type: OnDelete
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.19.4
EOF
Os pods em nós NotReady são ignorados. Quando um nó passa para o status Ready , o sistema atualiza automaticamente seu pod do DaemonSet.
Uso do OTA
O modelo OTA permite controlar o momento da atualização individualmente por nó de borda. Após a atualização da imagem do DaemonSet, os pods não são atualizados automaticamente. Use as APIs REST do edge-hub em cada nó para verificar o status e acionar as atualizações.
APIs REST do OTA
Todas as chamadas de API ocorrem localmente no nó de borda (URL base: http://127.0.0.1:10267).
|
Método |
Endpoint |
Descrição |
|
|
|
Retorna informações sobre os pods. Verifique o campo |
|
|
|
Baixa previamente a imagem de um pod do DaemonSet para reduzir o tempo de início da atualização. Suportado na versão v1.32-aliyun.1 ou posterior. |
|
|
|
Aciona a atualização de um pod do DaemonSet. |
Exemplo de atualização OTA
Etapa 1: Crie um DaemonSet habilitado para OTA
cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: nginx-daemonset
annotations:
apps.openyurt.io/update-strategy: OTA
spec:
selector:
matchLabels:
app: nginx
updateStrategy:
type: OnDelete
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.19.4
EOF
Etapa 2: Atualize a imagem do DaemonSet
Atualize a imagem do DaemonSet. Os pods nos nós de borda não serão atualizados automaticamente.
kubectl set image daemonset/nginx-daemonset nginx=nginx:1.19.5
Etapa 3: Verifique se um pod precisa de atualização
Em um nó de borda, liste o status dos pods:
curl http://127.0.0.1:10267/pods
Se o pod default/nginx-daemonset-bwzss apresentar PodNeedUpgrade=true em pod.Status.Conditions, ele precisa de atualização.
Etapa 4: (Opcional) Baixe previamente a imagem
Para imagens grandes, baixe previamente a imagem para reduzir o tempo de inicialização:
curl -X POST http://127.0.0.1:10267/openyurt.io/v1/namespaces/default/pods/nginx-daemonset-bwzss/imagepull
Saída esperada:
Image pre-pull requested for pod default/nginx-daemonset-bwzss
A API de download prévio de imagem requer a versão v1.32-aliyun.1 ou posterior do cluster.
Etapa 5: Acione a atualização
curl -X POST http://127.0.0.1:10267/openyurt.io/v1/namespaces/default/pods/nginx-daemonset-bwzss/upgrade
Saída esperada:
Start updating pod default/nginx-daemonset-bwzss