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-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. |

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 |
Actualizaciones en el lugar, gestión paralela de pods, versiones por fases |
|
Advanced DaemonSet |
DaemonSet |
Totalmente compatible: solo cambie |
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 |
|
|
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 |
|
|
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 |
|
|
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
Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.
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.
En la página Add-ons, haga clic en la pestaña Applications. En la sección ack-kruise, haga clic en Install.
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.
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
-
Cree un archivo llamado
cloneset.yamlcon 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-placeParámetros clave:
Parámetro
Descripción
typeEstrategia de actualización:
ReCreate,InPlaceIfPossibleoInPlaceOnly. Consulte Estrategias de actualización.maxUnavailableNúmero o porcentaje máximo de pods que pueden estar no disponibles durante una actualización.
gracePeriodSecondsSegundos que espera el controlador después de marcar un pod como NotReady antes de realizar la actualización en el lugar.
-
Aplique el manifiesto a su clúster:
kubectl create -f cloneset.yamlSalida esperada:
cloneset.apps.kruise.io/demo-clone created
Verificación del CloneSet
-
Compruebe el estado de los pods:
kubectl get podSalida 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 -
Compruebe el estado del CloneSet:
kubectl get cloneSalida esperada:
NAME DESIRED UPDATED UPDATED_READY READY TOTAL AGE demo-clone 5 5 5 5 5 46sCampos de la salida:
Campo
Campo de estado de Kubernetes
Descripción
DESIRED
spec.replicasNúmero deseado de pods
UPDATED
status.updatedReplicasPods actualizados a la última versión
UPDATED_READY
status.updatedReadyReplicasPods listos entre aquellos que tienen la última versión
READY
status.readyReplicasTotal de pods listos en todas las versiones
TOTAL
status.replicasTotal 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
-
Cree un archivo llamado
statefulset.yamlcon 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-placeParámetros clave:
Parámetro
Descripción
podUpdatePolicyEstrategia de actualización:
ReCreate,InPlaceIfPossibleoInPlaceOnly. Consulte Estrategias de actualización.maxUnavailableNúmero o porcentaje máximo de pods que pueden estar no disponibles durante una actualización.
gracePeriodSecondsSegundos que espera el controlador después de marcar un pod como NotReady antes de realizar la actualización en el lugar.
-
Aplique el manifiesto a su clúster:
kubectl create -f statefulset.yamlSalida esperada:
statefulset.apps.kruise.io/demo-asts created
Verificación del Advanced StatefulSet
-
Compruebe el estado de los pods:
kubectl get podSalida 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 -
Compruebe el estado del Advanced StatefulSet:
kubectl get astsSalida esperada:
NAME DESIRED CURRENT UPDATED READY AGE demo-asts 3 3 3 3 3h30mCampos de la salida:
Campo
Campo de estado de Kubernetes
Descripción
DESIRED
spec.replicasNúmero deseado de pods
UPDATED
status.updatedReplicasPods con la última versión
READY
status.readyReplicasTotal de pods listos
TOTAL
status.replicasTotal de pods gestionados por este Advanced StatefulSet