Todos los productos
Search
Centro de documentos

Container Service for Kubernetes:Use OpenKruise to deploy cloud-native applications

Última actualización: Sep 05, 2026

OpenKruise extiende Kubernetes nativo con capacidades avanzadas de gestión de cargas de trabajo que la API nativa de Kubernetes no admite, como actualizaciones de pods en el lugar, inyección independiente de sidecars y preobtención de imágenes. Este documento explica cómo instalar OpenKruise en un clúster de ACK y desplegar aplicaciones mediante CloneSet y Advanced StatefulSet.

Requisitos previos

Antes de empezar, asegúrese de contar con:

Funcionamiento de OpenKruise

OpenKruise es un motor de automatización de aplicaciones nativas de la nube y de código abierto desarrollado por Alibaba Cloud. Es miembro del Sandbox de la Cloud Native Computing Foundation (CNCF) y se ejecuta de forma nativa dentro de los clústeres de Kubernetes como una extensión estándar.

OpenKruise consta de tres componentes:

Componente

Descripción

Kruise-manager

Plano de control central, desplegado como un Deployment en el namespace kruise-system. Ejecuta controladores y webhooks que implementan funciones como actualizaciones en el lugar y gestión de sidecars.

Kruise-daemon

Se despliega como un DaemonSet en cada nodo. Gestiona operaciones a nivel de nodo, incluida la preobtención de imágenes y el reinicio de contenedores.

Kruise-Rollout

Extensión independiente que añade un modelo completo de Rollout a Kubernetes. Admite versiones canary, despliegues blue-green y versiones de pruebas A/B coordinadas con tráfico en vivo e instancias en ejecución.

OpenKruise architecture

Controladores

OpenKruise proporciona cinco controladores de cargas de trabajo. Cada uno es un superconjunto de su equivalente nativo en Kubernetes:

Controlador

Equivalente nativo

Compatibilidad con YAML

Capacidades clave

CloneSet

Deployment

No totalmente compatible

Actualizaciones en el lugar, reducción de escala dirigida, expansión de escala en flujo, versiones por fases

Advanced StatefulSet

StatefulSet

Totalmente compatible: solo cambie apiVersion

Actualizaciones en el lugar, gestión paralela de pods, versiones por fases

Advanced DaemonSet

DaemonSet

Totalmente compatible: solo cambie apiVersion

Actualizaciones en caliente, versiones por fases, orden de versión basado en etiquetas de nodo

SidecarSet

N/A

Recurso personalizado independiente

Gestión independiente del ciclo de vida de sidecars, inyección automática, actualizaciones de sidecars en el lugar

UnitedDeployment

N/A

Recurso personalizado independiente

Gestión de subcargas de trabajo multirregión en CloneSet, StatefulSet y Advanced StatefulSet

Estrategias de actualización

Los controladores de OpenKruise admiten tres estrategias de actualización:

Estrategia

Comportamiento

Cuándo utilizarla

ReCreate

Elimina los pods antiguos y las PersistentVolumeClaims (PVC), y luego crea otros nuevos

Comportamiento predeterminado de Kubernetes; utilícela cuando no sea necesario conservar la identidad del pod

InPlaceIfPossible

Intenta primero una actualización en el lugar; recurre a la recreación si el cambio no se puede aplicar en el lugar

Recomendada para la mayoría de las cargas de trabajo de producción

InPlaceOnly

Siempre realiza actualizaciones en el lugar; rechaza cambios que requieran la recreación del pod

Utilícela cuando la IP, el nombre y el nodo del pod deban permanecer sin cambios

¿Por qué elegir actualizaciones en el lugar?

Las actualizaciones continuas estándar de Kubernetes recrean los pods, lo que implica que cambian el nombre del pod, la dirección IP y el nodo host. Una actualización en el lugar modifica directamente el pod en ejecución:

  • Sin reprogramación: el pod permanece en el mismo nodo

  • Descargas de imágenes más rápidas: la mayoría de las capas de la imagen ya están almacenadas en caché en el nodo

  • Los demás contenedores del pod no se ven afectados durante la actualización

Instalación de OpenKruise

  1. Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.

  2. En la página Clusters, haga clic en el nombre del clúster que desea gestionar. En el panel de navegación izquierdo, haga clic en Add-ons.

  3. En la página Add-ons, haga clic en la pestaña Applications. En la sección ack-kruise, haga clic en Install.

  4. En el cuadro de diálogo Install Ack-kruise, confirme la información del componente y haga clic en OK.

Despliegue de una aplicación sin estado con CloneSet

CloneSet gestiona aplicaciones sin estado y proporciona todas las capacidades de Deployment, además de políticas avanzadas como actualizaciones en el lugar y eliminación dirigida de pods.

Nota

El esquema YAML de CloneSet no es totalmente compatible con un Deployment nativo. No convierta directamente un manifiesto de Deployment existente; en su lugar, cree un nuevo recurso CloneSet.

Creación de un CloneSet

  1. Cree un archivo llamado cloneset.yaml con el siguiente contenido:

    apiVersion: apps.kruise.io/v1alpha1
    kind: CloneSet
    metadata:
      name: demo-clone
    spec:
      replicas: 5
      selector:
        matchLabels:
          app: guestbook
      template: # Pod template structure is identical to a Deployment
        metadata:
          labels:
            app: guestbook
        spec:
          containers:
          - name: guestbook
            image: openkruise-registry.cn-shanghai.cr.aliyuncs.com/openkruise/demo:1.10.2
            env:
            - name: test
              value: foo
      updateStrategy:
        type: InPlaceIfPossible     # Use in-place upgrade if possible; fall back to recreate
        maxUnavailable: 20%         # Allow up to 20% of pods to be unavailable during an upgrade
        inPlaceUpdateStrategy:
          gracePeriodSeconds: 3     # Seconds to wait after marking the pod NotReady before upgrading in-place

    Parámetros clave:

    Parámetro

    Descripción

    type

    Estrategia de actualización: ReCreate, InPlaceIfPossible o InPlaceOnly. Consulte Estrategias de actualización.

    maxUnavailable

    Número o porcentaje máximo de pods que pueden estar no disponibles durante una actualización.

    gracePeriodSeconds

    Segundos que espera el controlador después de marcar un pod como NotReady antes de realizar la actualización en el lugar.

  2. Aplique el manifiesto a su clúster:

    kubectl create -f cloneset.yaml

    Salida esperada:

    cloneset.apps.kruise.io/demo-clone created

Verificación del CloneSet

  1. Compruebe el estado de los pods:

    kubectl get pod

    Salida esperada:

    NAME               READY   STATUS    RESTARTS   AGE
    demo-clone-5b9kl   1/1     Running   0          3s
    demo-clone-6xjdg   1/1     Running   0          3s
    demo-clone-bvmdj   1/1     Running   0          3s
    demo-clone-dm22s   1/1     Running   0          3s
    demo-clone-rbpg9   1/1     Running   0          3s
  2. Compruebe el estado del CloneSet:

    kubectl get clone

    Salida esperada:

    NAME         DESIRED   UPDATED   UPDATED_READY   READY   TOTAL   AGE
    demo-clone   5         5         5               5       5       46s

    Campos de la salida:

    Campo

    Campo de estado de Kubernetes

    Descripción

    DESIRED

    spec.replicas

    Número deseado de pods

    UPDATED

    status.updatedReplicas

    Pods actualizados a la última versión

    UPDATED_READY

    status.updatedReadyReplicas

    Pods listos entre aquellos que tienen la última versión

    READY

    status.readyReplicas

    Total de pods listos en todas las versiones

    TOTAL

    status.replicas

    Total de pods gestionados por este CloneSet

Despliegue de una aplicación con estado con Advanced StatefulSet

Advanced StatefulSet es un reemplazo directo del StatefulSet nativo. Su esquema YAML es totalmente compatible; el único cambio obligatorio es apiVersion.

Migración desde un StatefulSet nativo

Para usar Advanced StatefulSet con un manifiesto de StatefulSet existente, cambie una sola línea:

- apiVersion: apps/v1
+ apiVersion: apps.kruise.io/v1alpha1
  kind: StatefulSet

El resto del manifiesto permanece sin cambios.

Creación de un Advanced StatefulSet

  1. Cree un archivo llamado statefulset.yaml con el siguiente contenido:

    apiVersion: apps.kruise.io/v1alpha1
    kind: StatefulSet
    metadata:
      name: demo-asts
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: guestbook-sts
      podManagementPolicy: Parallel
      template: # Pod template structure is identical to a native StatefulSet
        metadata:
          labels:
            app: guestbook-sts
        spec:
          containers:
          - name: guestbook
            image: openkruise-registry.cn-shanghai.cr.aliyuncs.com/openkruise/demo:1.10.2
            env:
            - name: test
              value: foo
          readinessGates:
          - conditionType: InPlaceUpdateReady
      updateStrategy:
        type: RollingUpdate
        rollingUpdate:
          podUpdatePolicy: InPlaceIfPossible   # Use in-place upgrade if possible; fall back to recreate
          maxUnavailable: 20%                  # Allow up to 20% of pods to be unavailable during an upgrade
          inPlaceUpdateStrategy:
            gracePeriodSeconds: 3              # Seconds to wait after marking the pod NotReady before upgrading in-place

    Parámetros clave:

    Parámetro

    Descripción

    podUpdatePolicy

    Estrategia de actualización: ReCreate, InPlaceIfPossible o InPlaceOnly. Consulte Estrategias de actualización.

    maxUnavailable

    Número o porcentaje máximo de pods que pueden estar no disponibles durante una actualización.

    gracePeriodSeconds

    Segundos que espera el controlador después de marcar un pod como NotReady antes de realizar la actualización en el lugar.

  2. Aplique el manifiesto a su clúster:

    kubectl create -f statefulset.yaml

    Salida esperada:

    statefulset.apps.kruise.io/demo-asts created

Verificación del Advanced StatefulSet

  1. Compruebe el estado de los pods:

    kubectl get pod

    Salida esperada:

    NAME          READY   STATUS    RESTARTS   AGE
    demo-asts-0   1/1     Running   0          3h29m
    demo-asts-1   1/1     Running   0          3h29m
    demo-asts-2   1/1     Running   0          3h29m
  2. Compruebe el estado del Advanced StatefulSet:

    kubectl get asts

    Salida esperada:

    NAME        DESIRED   CURRENT   UPDATED   READY   AGE
    demo-asts   3         3         3         3       3h30m

    Campos de la salida:

    Campo

    Campo de estado de Kubernetes

    Descripción

    DESIRED

    spec.replicas

    Número deseado de pods

    UPDATED

    status.updatedReplicas

    Pods con la última versión

    READY

    status.readyReplicas

    Total de pods listos

    TOTAL

    status.replicas

    Total de pods gestionados por este Advanced StatefulSet