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

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 |
Atualizações in-place, gerenciamento paralelo de pods, lançamentos faseados |
|
Advanced DaemonSet |
DaemonSet |
Totalmente compatível — altere apenas o |
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 |
|
|
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 |
|
|
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 |
|
|
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
Faça login no console ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do cluster que deseja gerenciar. No painel de navegação à esquerda, clique em Add-ons.
Na página Add-ons, selecione a aba Applications. Na seção ack-kruise, clique em Install.
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.
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
-
Crie um arquivo chamado
cloneset.yamlcom 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-placeParâmetros principais:
Parâmetro
Descrição
typeEstratégia de atualização:
ReCreate,InPlaceIfPossibleouInPlaceOnly. Consulte Estratégias de atualização.maxUnavailableNúmero máximo ou porcentagem de pods que podem ficar indisponíveis durante uma atualização.
gracePeriodSecondsSegundos que o controller aguarda após marcar um pod como NotReady antes de realizar a atualização in-place.
-
Aplique o manifesto no seu cluster:
kubectl create -f cloneset.yamlSaída esperada:
cloneset.apps.kruise.io/demo-clone created
Verifique o CloneSet
-
Verifique o status dos pods:
kubectl get podSaí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 -
Verifique o status do CloneSet:
kubectl get cloneSaída esperada:
NAME DESIRED UPDATED UPDATED_READY READY TOTAL AGE demo-clone 5 5 5 5 5 46sCampos da saída:
Campo
Campo de status do Kubernetes
Descrição
DESIRED
spec.replicasNúmero desejado de pods
UPDATED
status.updatedReplicasPods atualizados para a versão mais recente
UPDATED_READY
status.updatedReadyReplicasPods prontos entre aqueles na versão mais recente
READY
status.readyReplicasTotal de pods prontos em todas as versões
TOTAL
status.replicasTotal 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
-
Crie um arquivo chamado
statefulset.yamlcom 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-placeParâmetros principais:
Parâmetro
Descrição
podUpdatePolicyEstratégia de atualização:
ReCreate,InPlaceIfPossibleouInPlaceOnly. Consulte Estratégias de atualização.maxUnavailableNúmero máximo ou porcentagem de pods que podem ficar indisponíveis durante uma atualização.
gracePeriodSecondsSegundos que o controller aguarda após marcar um pod como NotReady antes de realizar a atualização in-place.
-
Aplique o manifesto no seu cluster:
kubectl create -f statefulset.yamlSaída esperada:
statefulset.apps.kruise.io/demo-asts created
Verifique o Advanced StatefulSet
-
Verifique o status dos pods:
kubectl get podSaí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 -
Verifique o status do Advanced StatefulSet:
kubectl get astsSaída esperada:
NAME DESIRED CURRENT UPDATED READY AGE demo-asts 3 3 3 3 3h30mCampos da saída:
Campo
Campo de status do Kubernetes
Descrição
DESIRED
spec.replicasNúmero desejado de pods
UPDATED
status.updatedReplicasPods na versão mais recente
READY
status.readyReplicasTotal de pods prontos
TOTAL
status.replicasTotal de pods gerenciados por este Advanced StatefulSet