Todos los productos
Search
Centro de documentos

Container Service for Kubernetes:Modelos de actualización de DaemonSet

Última actualización: Sep 21, 2026

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

apps.openyurt.io/update-strategy

Habilita el modelo de actualización extendido. Valores válidos: AdvancedRollingUpdate u OTA.

apps.openyurt.io/max-unavailable

Aplica únicamente a AdvancedRollingUpdate. Define el número máximo de pods no disponibles durante la actualización continua. Acepta los mismos valores que el parámetro maxUnavailable nativo de DaemonSet. Valor predeterminado: 10%.

spec.updateStrategy.type

Debe configurarse como OnDelete. Elimine manualmente los pods antiguos para activar la creación de los nuevos.

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

GET

/pods

Devuelve información de los pods. Compruebe PodNeedUpgrade en Pod.status.conditions para identificar qué pods necesitan actualizarse.

POST

/openyurt.io/v1/namespaces/{ns}/pods/{podname}/imagepull

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.

POST

/openyurt.io/v1/namespaces/{ns}/pods/{podname}/upgrade

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

Pasos siguientes