En los escenarios de edge computing, las actualizaciones nativas de DaemonSet se pueden bloquear si falla el enlace entre la nube y el perímetro. Esto ocurre cuando los nodos pasan al estado NotReady o cuando necesita actualizar los nodos perimetrales bajo demanda sin un despliegue controlado desde la nube. Configure los modelos extendidos AdvancedRollingUpdate u OTA para resolver estos bloqueos y admitir actualizaciones por aire (over-the-air). AdvancedRollingUpdate para omitir los nodos NotReady durante las actualizaciones continuas, o OTA para activar las actualizaciones por nodo bajo demanda.
Requisitos previos
Un clúster perimetral de ACK con la versión v1.26.3-aliyun.1 o posterior.
Elija un modelo de actualización
|
Modelo de actualización |
Cuándo utilizarlo |
|
AdvancedRollingUpdate |
Cuando las desconexiones entre la nube y el perímetro dejan los nodos en estado NotReady y bloquean la actualización continua. |
|
OTA |
Cuando desea controlar el momento de la actualización en cada nodo perimetral y activarla bajo demanda mediante una API REST. |
Configure el modelo de actualización
Ambos modelos requieren las mismas anotaciones de DaemonSet y la misma estrategia de actualización:
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
Establezca apps.openyurt.io/update-strategy como AdvancedRollingUpdate u OTA, y configure spec.updateStrategy.type como OnDelete.
Parámetros
|
Parámetro |
Descripción |
|
|
Habilita el modelo de actualización extendido. Valores válidos: |
|
|
Aplica únicamente a |
|
|
Debe configurarse como |
Uso de AdvancedRollingUpdate
El modelo AdvancedRollingUpdate omite los nodos NotReady y actualiza primero los pods de los nodos Ready. Cuando un nodo vuelve al estado Ready, su pod de DaemonSet se actualiza automáticamente.
En este ejemplo se crea el DaemonSet nginx-daemonset con AdvancedRollingUpdate y un máximo del 30 % de pods no disponibles.
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
Los pods ubicados en nodos NotReady se omiten. Cuando un nodo pasa al estado Ready , su pod de DaemonSet se actualiza automáticamente.
Uso de OTA
El modelo OTA le permite controlar el momento de la actualización en cada nodo perimetral. Después de actualizar la imagen del DaemonSet, los pods no se actualizan automáticamente. Use las API REST de edge-hub en cada nodo para comprobar el estado y activar las actualizaciones.
API REST de OTA
Todas las llamadas a la API se ejecutan de forma local en el nodo perimetral (URL base: http://127.0.0.1:10267).
|
Método |
Endpoint |
Descripción |
|
|
|
Devuelve información de los pods. Compruebe |
|
|
|
Descarga previamente la imagen de un pod de DaemonSet para reducir el tiempo de inicio de la actualización. Compatible con la versión v1.32-aliyun.1 o posterior. |
|
|
|
Activa la actualización de un pod de DaemonSet. |
Ejemplo de actualización con OTA
Paso 1: Cree un 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
Paso 2: Actualice la imagen del DaemonSet
Actualice la imagen del DaemonSet. Los pods de los nodos perimetrales no se actualizan automáticamente.
kubectl set image daemonset/nginx-daemonset nginx=nginx:1.19.5
Paso 3: Compruebe si un pod necesita actualizarse
Ejecute el siguiente comando en un nodo perimetral para listar el estado de los pods:
curl http://127.0.0.1:10267/pods
Si default/nginx-daemonset-bwzss muestra PodNeedUpgrade=true en pod.Status.Conditions, el pod requiere una actualización.
Paso 4: (Opcional) Descargue previamente la imagen
Para imágenes grandes, descargue la imagen de antemano y reduzca así el tiempo de inicio:
curl -X POST http://127.0.0.1:10267/openyurt.io/v1/namespaces/default/pods/nginx-daemonset-bwzss/imagepull
Resultado esperado:
Image pre-pull requested for pod default/nginx-daemonset-bwzss
La API de descarga previa de imágenes requiere la versión de clúster v1.32-aliyun.1 o posterior.
Paso 5: Active la actualización
curl -X POST http://127.0.0.1:10267/openyurt.io/v1/namespaces/default/pods/nginx-daemonset-bwzss/upgrade
Resultado esperado:
Start updating pod default/nginx-daemonset-bwzss