Todos os produtos
Search
Central de documentação

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

Última atualização: Jun 27, 2026

O OpenKruise estende o Kubernetes nativo com recursos avançados de gerenciamento de workloads que a API padrão do Kubernetes não suporta, incluindo atualizações de pods in-place, injeção independente de sidecars e pré-busca de imagens. Este documento explica como instalar o OpenKruise em um cluster ACK e implantar aplicações usando CloneSet e Advanced StatefulSet.

Pré-requisitos

Antes de começar, verifique se você possui:

Como o OpenKruise funciona

O OpenKruise é um mecanismo de automação de aplicações nativas da nuvem e open-source da Alibaba Cloud. Ele integra o Sandbox da Cloud Native Computing Foundation (CNCF) e executa nativamente dentro de clusters Kubernetes como uma extensão padrão.

O OpenKruise é composto por três componentes:

Componente

Descrição

Kruise-manager

Plano de controle central, implantado como um Deployment no namespace kruise-system. Executa controllers e webhooks que implementam recursos como atualizações in-place e gerenciamento de sidecars.

Kruise-daemon

Implantado como um DaemonSet em cada nó. Responsável por operações no nível do nó, incluindo pré-busca de imagens e reinicialização de containers.

Kruise-Rollout

Extensão independente que adiciona um modelo completo de Rollout ao Kubernetes. Oferece suporte a canary releases, blue-green deployments e lançamentos de testes A/B coordenados com tráfego ativo e instâncias em execução.

OpenKruise architecture

Controllers

O OpenKruise fornece cinco controllers de workload. Cada um é um superconjunto de seu equivalente nativo no Kubernetes:

Controller

Equivalente nativo

Compatibilidade YAML

Principais recursos

CloneSet

Deployment

Não totalmente compatível

Atualizações in-place, scale-in direcionado, scale-out em fluxo, lançamentos faseados

Advanced StatefulSet

StatefulSet

Totalmente compatível — altere apenas o apiVersion

Atualizações in-place, gerenciamento paralelo de pods, lançamentos faseados

Advanced DaemonSet

DaemonSet

Totalmente compatível — altere apenas o apiVersion

Hot upgrades, lançamentos faseados, ordenação de lançamento baseada em rótulos de nó

SidecarSet

N/A

Recurso personalizado independente

Gerenciamento independente do ciclo de vida de sidecars, injeção automática, atualizações in-place de sidecars

UnitedDeployment

N/A

Recurso personalizado independente

Gerenciamento de sub-workloads multirregião em CloneSet, StatefulSet e Advanced StatefulSet

Estratégias de atualização

Os controllers do OpenKruise suportam três estratégias de atualização:

Estratégia

Comportamento

Quando usar

ReCreate

Exclui pods e PersistentVolumeClaims (PVCs) antigos e cria novos

Comportamento padrão do Kubernetes; utilize quando a identidade do pod não precisar ser preservada

InPlaceIfPossible

Tenta primeiro uma atualização in-place; reverte para recriação se a alteração não puder ser aplicada in-place

Recomendado para a maioria dos workloads de produção

InPlaceOnly

Realiza sempre atualizações in-place; rejeita alterações que exigiriam a recriação do pod

Indicado quando o IP, nome e nó do pod devem permanecer inalterados

Por que escolher atualizações in-place?

As rolling updates padrão do Kubernetes recriam pods, o que altera o nome do pod, o endereço IP e o nó host. Já a atualização in-place modifica diretamente o pod em execução:

  • Sem reagendamento — o pod permanece no mesmo nó

  • Pulls de imagem mais rápidos — a maioria das camadas da imagem já está em cache no nó

  • Outros containers no pod não são afetados durante a atualização

Instale o OpenKruise

  1. Faça login no console ACK. No painel de navegação à esquerda, clique em Clusters.

  2. Na página Clusters, clique no nome do cluster que deseja gerenciar. No painel de navegação à esquerda, clique em Add-ons.

  3. Na página Add-ons, selecione a aba Applications. Na seção ack-kruise, clique em Install.

  4. Na caixa de diálogo Install Ack-kruise, confirme as informações do componente e clique em OK.

Implante uma aplicação stateless com CloneSet

O CloneSet gerencia aplicações stateless e oferece todos os recursos do Deployment, além de políticas avançadas como atualizações in-place e exclusão direcionada de pods.

Nota

O esquema YAML do CloneSet não é totalmente compatível com um Deployment nativo. Não converta diretamente um manifesto de Deployment existente — crie um novo recurso CloneSet.

Crie um CloneSet

  1. Crie um arquivo chamado cloneset.yaml com o seguinte conteúdo:

    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 principais:

    Parâmetro

    Descrição

    type

    Estratégia de atualização: ReCreate, InPlaceIfPossible ou InPlaceOnly. Consulte Estratégias de atualização.

    maxUnavailable

    Número máximo ou porcentagem de pods que podem ficar indisponíveis durante uma atualização.

    gracePeriodSeconds

    Segundos que o controller aguarda após marcar um pod como NotReady antes de realizar a atualização in-place.

  2. Aplique o manifesto no seu cluster:

    kubectl create -f cloneset.yaml

    Saída esperada:

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

Verifique o CloneSet

  1. Verifique o status dos pods:

    kubectl get pod

    Saída 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. Verifique o status do CloneSet:

    kubectl get clone

    Saída esperada:

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

    Campos da saída:

    Campo

    Campo de status do Kubernetes

    Descrição

    DESIRED

    spec.replicas

    Número desejado de pods

    UPDATED

    status.updatedReplicas

    Pods atualizados para a versão mais recente

    UPDATED_READY

    status.updatedReadyReplicas

    Pods prontos entre aqueles na versão mais recente

    READY

    status.readyReplicas

    Total de pods prontos em todas as versões

    TOTAL

    status.replicas

    Total de pods gerenciados por este CloneSet

Implante uma aplicação stateful com Advanced StatefulSet

O Advanced StatefulSet substitui diretamente o StatefulSet nativo. Seu esquema YAML é totalmente compatível — a única alteração necessária é o apiVersion.

Migre de um StatefulSet nativo

Para usar o Advanced StatefulSet com um manifesto de StatefulSet existente, altere uma linha:

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

O restante do manifesto permanece inalterado.

Crie um Advanced StatefulSet

  1. Crie um arquivo chamado statefulset.yaml com o seguinte conteúdo:

    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 principais:

    Parâmetro

    Descrição

    podUpdatePolicy

    Estratégia de atualização: ReCreate, InPlaceIfPossible ou InPlaceOnly. Consulte Estratégias de atualização.

    maxUnavailable

    Número máximo ou porcentagem de pods que podem ficar indisponíveis durante uma atualização.

    gracePeriodSeconds

    Segundos que o controller aguarda após marcar um pod como NotReady antes de realizar a atualização in-place.

  2. Aplique o manifesto no seu cluster:

    kubectl create -f statefulset.yaml

    Saída esperada:

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

Verifique o Advanced StatefulSet

  1. Verifique o status dos pods:

    kubectl get pod

    Saída 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. Verifique o status do Advanced StatefulSet:

    kubectl get asts

    Saída esperada:

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

    Campos da saída:

    Campo

    Campo de status do Kubernetes

    Descrição

    DESIRED

    spec.replicas

    Número desejado de pods

    UPDATED

    status.updatedReplicas

    Pods na versão mais recente

    READY

    status.readyReplicas

    Total de pods prontos

    TOTAL

    status.replicas

    Total de pods gerenciados por este Advanced StatefulSet