Em cenários de edge computing, as atualizações nativas do DaemonSet podem sofrer bloqueios quando os links cloud-edge falham e os nós se tornam NotReady, ou quando você precisa de atualizações sob demanda em nós de edge sem implantação guiada pela cloud. Configure os modelos estendidos AdvancedRollingUpdate ou OTA para resolver o bloqueio de atualização e suportar atualizações over-the-air. AdvancedRollingUpdate para ignorar nós NotReady durante atualizações contínuas, ou OTA para acionar atualizações por nó sob demanda.
Pré-requisitos
Um cluster de edge ACK 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 a cloud e a edge podem deixar os nós NotReady, bloqueando a atualização contínua |
|
OTA |
Você deseja controlar o momento da atualização de cada nó de edge e acionar as atualizações sob demanda via API REST |
Configure o modelo de atualização
Ambos os modelos exigem as mesmas anotações e a mesma 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 spec.updateStrategy.type como OnDelete.
Parâmetros
|
Parâmetro |
Descrição |
|
|
Habilita o modelo de atualização estendido. Valores válidos: |
|
|
Aplica-se apenas ao |
|
|
Defina como |
Use o AdvancedRollingUpdate
O AdvancedRollingUpdate ignora nós NotReady e atualiza primeiro os pods em nós Ready. Quando um nó fica Ready novamente, o pod do DaemonSet é atualizado automaticamente.
Este exemplo cria um DaemonSet nginx-daemonset com AdvancedRollingUpdate e um máximo 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ó fica Ready , seu pod do DaemonSet é atualizado automaticamente.
Use o OTA
O OTA permite controlar o momento da atualização de cada nó de edge. 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
Faça todas as chamadas de API localmente no nó de edge (URL base: http://127.0.0.1:10267).
|
Método |
Endpoint |
Descrição |
|
|
|
Retorna informações dos pods. Verifique |
|
|
|
Faz o pre-pull da imagem para um pod do DaemonSet, reduzindo o tempo de inicialização da atualização. Suportado na versão v1.32-aliyun.1 ou posterior. |
|
|
|
Aciona a atualização para um pod do DaemonSet. |
Exemplo de atualização OTA
Passo 1: Crie um DaemonSet com OTA habilitado
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
Passo 2: atualize a imagem do DaemonSet
atualize a imagem do DaemonSet. Os pods nos nós de edge não são atualizados automaticamente.
kubectl set image daemonset/nginx-daemonset nginx=nginx:1.19.5
Passo 3: Verifique se um pod precisa de atualização
Em um nó de edge, liste o status dos pods:
curl http://127.0.0.1:10267/pods
Se default/nginx-daemonset-bwzss exibir PodNeedUpgrade=true em pod.Status.Conditions, o pod precisa de atualização.
Passo 4: (Opcional) Faça o pre-pull da imagem
Para imagens grandes, faça o pre-pull da 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 pre-pull de imagem requer a versão v1.32-aliyun.1 ou posterior do cluster.
Passo 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