O ACK possui certificação de conformidade com o Kubernetes. Este tópico resume os patches, recursos, APIs descontinuadas e alterações em feature gates do ACK nas versões 1,27 e 1,28 do Kubernetes.
Changelogs upstream: CHANGELOG-1.27, CHANGELOG-1.28.
Antes de atualizar para o Kubernetes 1.28, revise estas alterações disruptivas:
Remoção do plugin de volume in-tree CephFS: A versão 1.28 removeu o plug-in de volume CephFS in-tree. Clusters que usam esse driver deixarão de funcionar após a atualização. Migre para o driver CSI do CephFS antes de atualizar e avalie riscos de compatibilidade, estabilidade ou desempenho.
Migração CSI do Ceph RBD não é mais possível: O Kubernetes 1.28 não suporta mais a migração de volumes Ceph RBD (
kubernetes.io/rbd) para o driver CSI out-of-tree. Esse recurso será totalmente removido em uma versão futura. Conclua a migração antes da remoção.Remoção do feature gate IPv6DualStack: O Kubernetes 1,27 removeu o feature gate
IPv6DualStack. Caso tenha definido essa configuração manualmente no cluster, remova-a antes de prosseguir com a atualização.Flags de endpoint do kubelet movidas para arquivo de configuração: Não é mais possível passar as flags
--container-runtime-endpointe--image-service-endpointcomo argumentos de linha de comando do kubelet. Transfira essas configurações para o arquivo de configuração do kubelet antes de atualizar.
Versões dos componentes
Versões dos componentes principais para clusters ACK no Kubernetes 1.28.
|
Componente principal |
Versão |
|
Kubernetes |
1.28.15-aliyun.1, 1.28.9-aliyun.1 e 1.28.3-aliyun.1 |
|
etcd |
v3.5.9 |
|
CoreDNS |
v1.9.3.10-7dfca203-aliyun |
|
CRI |
containerd 1.6.20 |
|
CSI |
Atualize para a versão mais recente suportada. Changelogs: csi-plugin, csi-provisioner. |
|
CNI |
Flannel v0.15.1.22-20a397e6-aliyun |
|
CNI (Terway) |
Terway e TerwayControlplane v1.5.0 e posteriores |
|
NVIDIA Container Runtime |
v3.13.0 |
|
Ingress Controller |
v1.8.0-aliyun.1 |
Patches de segurança
|
Versão |
CVEs corrigidas |
|
1.28.15-aliyun.1 |
|
|
1.28.9-aliyun.1 |
CVE-2023-45288, CVE-2024-3177, CVE-2024-24786 |
Novidades
Kubernetes 1.28
Desligamento não gracioso de nó (GA)
Quando um nó é desligado inesperadamente — por exemplo, devido a uma falha de energia — o Kubernetes reagenda automaticamente pods de StatefulSet com o mesmo nome em outro nó, evitando interrupções no serviço. Recurso agora disponível como GA.
Atribuição retroativa de StorageClass padrão (GA)
Anteriormente, um PVC sem storageClassName permanecia indefinidamente com status Pending se não houvesse uma StorageClass padrão. Agora, o Kubernetes atribui uma StorageClass padrão criada posteriormente a PVCs não vinculados sem storageClassName. Recurso promovido a GA.
Desempenho do agendador
A lógica de nova tentativa do agendador reduz tentativas inválidas de agendamento e melhora o desempenho. Se o cluster utiliza um plugin de agendador personalizado, atualize-o para o novo framework de agendamento. Consulte Alterações no framework de agendamento.
Tratamento de falhas em Jobs
Dois novos feature gates em fase Alpha aprimoram o gerenciamento de Jobs com falha:
JobPodReplacementPolicy: Um pod substituto é criado somente quando o original atinge a faseFailed(status.phase: Failed), e não ao receber umdeletionTimestamp. Isso evita que dois pods ocupem simultaneamente o mesmo índice e consumam recursos do nó.JobBackoffLimitPerIndex: Defina.spec.backoffLimitPerIndexem um Job indexado para limitar o número de novas tentativas por índice, em vez de contabilizar todas as falhas em um único.spec.backoffLimitcompartilhado. Um índice com falhas persistentes não causa mais a falha de todo o Job.
Alerta para Jobs indexados grandes
Se um Job tiver completion acima de 100.000 e parallelism acima de 10.000 com muitas falhas de pod, o Kubernetes exibe um alerta. Nessa escala, o rastreamento do status de encerramento pode não ser confiável.
Melhorias na validação de CRD
As regras de validação de CRD agora incluem os campos reason e fieldPath. Quando uma expressão CEL falha, o servidor de API retorna o código do motivo e o caminho do campo com erro. Consulte Linguagem de Expressão de Validação de CRD.
Correspondência de Webhook com expressões CEL
As matchConditions de Webhooks agora suportam expressões CEL (até 64 por webhook). Esse recurso oferece controle granular sobre quais solicitações acionam um webhook sem a necessidade de um admission controller completo. Consulte Correspondência de solicitações: matchConditions.
ValidatingAdmissionPolicy (Beta)
A ValidatingAdmissionPolicy oferece uma alternativa declarativa e interna ao cluster para webhooks de admissão de validação. Escreva expressões CEL diretamente no objeto de política; o servidor de API as avalia em cada solicitação correspondente, eliminando a necessidade de infraestrutura de webhook. Consulte ValidatingAdmissionPolicy.
Substituição do campo de status de redimensionamento de PVC
O campo .status.resizeStatus nos PVCs foi substituído por .status.allocatedResourceStatus, um mapa que rastreia independentemente o estado de redimensionamento de cada recurso. Atualize qualquer ferramenta que leia .status.resizeStatus. Consulte PersistentVolumeClaimStatus.
Rótulos de índice de Pod para Jobs indexados e StatefulSets
Pods provenientes de Jobs indexados e StatefulSets agora incluem seu índice ordinal como rótulo, simplificando a seleção de pods por posição.
Flags de concorrência do Kube Controller Manager
Duas novas flags controlam a concorrência dos controllers:
--concurrent-cron-job-syncs: Define o número de workers de reconciliação simultâneos para CronJobs.--concurrent-job-syncs: Define o número de workers de reconciliação simultâneos para Jobs.
Consulte --concurrent-cron-job-syncs e --concurrent-job-syncs.
Otimizações no servidor de API
Redução de memória em GetList: Solicitações de lista atendidas via cache consomem menos memória. Consulte Dados de teste GetList.
Correção na limpeza de endpoints: Corrigido um bug em que o endpoint de um Serviço Kubernetes não era removido durante o desligamento gracioso caso restasse apenas uma réplica do servidor de API.
Agregação lazy do OpenAPI v2: O controller do OpenAPI v2 agora agrega informações de CRD apenas sob demanda, reduzindo a sobrecarga de CPU e memória quando nenhum cliente consulta o endpoint. Isso melhora o tempo de instalação para um grande número de CRDs, mas pode tornar a primeira solicitação mais lenta. Migre seus clientes para o OpenAPI v3.
ConsistentListFromCache (Alpha): O feature gate
ConsistentListFromCachepermite que o servidor de API atenda solicitações LIST a partir do cache de watch com garantias de consistência, reduzindo a carga no etcd.Métricas adicionais de monitoramento: Mais métricas estão disponíveis no endpoint de métricas.
Kubernetes 1.27
Correção do status de encerramento de Pods
Pods excluídos enquanto estavam em
Pendingagora recebem o statusFailed.Pods excluídos durante a execução (
Running) recebem statusSucceededouFailedcom base no código de saída do contêiner.
Essa alteração corrige um bug em que pods com política de falha podiam ficar presos em Pending. Se um pod possuir RestartPolicy=Always, ele poderá exibir status Succeeded após a exclusão. Revise seus controllers se isso for relevante para o seu cenário. Consulte Definição do status de encerramento para pods que não requerem reinicialização.
ReadWriteOncePod para PersistentVolumes (Beta)
O modo ReadWriteOncePod restringe um volume a um único pod, sendo mais restritivo que ReadWriteOnce, que permite múltiplos pods no mesmo nó. Consulte Modo de Acesso de Pod Único para PersistentVolumes promovido a Beta.
Restrições de distribuição de topologia de Pod (Beta)
Várias opções de restrição de distribuição de topologia atingiram o estágio Beta e estão habilitadas por padrão: minDomains (domínios elegíveis mínimos), nodeTaintsPolicy (contagem de nós com taints), nodeAffinityPolicy (contagem de nós excluídos por afinidade) e whenUnsatisfiable (comportamento quando as restrições não podem ser atendidas). Consulte Políticas de distribuição de topologia de pod mais granulares.
Validação de campos no lado do servidor (GA)
O servidor de API agora valida campos de recursos no lado do servidor. O kubectl utiliza automaticamente o modo Strict e ignora a validação no lado do cliente, retornando um erro caso o servidor rejeite um campo. Consulte Validação de Campos no Lado do Servidor e OpenAPI V3 promovidos a GA.
OpenAPI v3 (GA)
O OpenAPI v3, introduzido no Kubernetes 1.23, agora é GA. Consulte Validação de campos no lado do servidor e OpenAPI v3 promovidos a GA.
Tipo de métrica ContainerResource no HPA (Beta)
O HPA agora suporta o tipo de métrica ContainerResource, permitindo dimensionamento baseado no uso de recursos de contêineres individuais em vez da média do pod. Isso resolve um problema comum em que um sidecar com baixo uso reduz a média abaixo do limiar, impedindo o scale-out mesmo quando o contêiner da aplicação está com recursos limitados. Consulte Métricas de recursos de contêiner.
Aprimoramentos em StatefulSets (Beta)
Dois recursos de StatefulSet atingiram o estágio Beta:
StatefulSetStartOrdinal: Permite iniciar os ordinais dos pods em um número diferente de zero usando o campoordinals.start.StatefulSetAutoDeletePVC: Controla se os StatefulSets devem excluir PVCs criados a partir devolumeClaimTemplatequando os pods são removidos ou quando há redução de escala do StatefulSet.
Dimensionamento vertical de pod in-place (Alpha)
O recurso InPlacePodVerticalScaling (Alpha, desabilitado por padrão) permite alterar as requests e limits de CPU e memória de um contêiner em execução sem reiniciar o pod. Consulte Redimensionar recursos de CPU e memória atribuídos a contêineres.
Pulls paralelos de imagens
Defina serializeImagePulls: false na configuração do kubelet para baixar imagens em paralelo. Utilize maxParallelImagePulls (adicionado na versão 1,27) para limitar os downloads simultâneos e evitar saturação da largura de banda de rede ou E/S de disco. Consulte Downloads seriais e paralelos de imagens.
Snapshots em grupo de volumes (Alpha)
Uma API de snapshot em grupo de volumes permite criar snapshots consistentes com falhas de múltiplos PersistentVolumes simultaneamente. Consulte Introdução à API para snapshots em grupo de volumes.
Recursos e APIs descontinuados
Kubernetes 1.28
|
Recurso descontinuado |
Impacto |
Ação necessária |
|
Plugin de volume in-tree CephFS |
Código removido na versão 1.28. Cargas de trabalho que usam o driver in-tree deixarão de funcionar. |
Migre para o driver CSI do CephFS antes de atualizar. |
|
Migração CSI do Ceph RBD |
A migração de volumes Ceph RBD para o driver CSI out-of-tree não é mais possível na versão 1.28 e será totalmente removida em uma versão futura. |
Conclua a migração antes da remoção. |
|
Plugin de volume RBD ( |
Descontinuado; será removido em uma versão futura. |
Mude para o driver CSI do CephFS. |
|
Key Management Service (KMS) v1 |
Descontinuado. |
Use KMSv2. Para continuar usando KMSv1 temporariamente, defina |
|
Flags do KCM |
Descontinuadas; serão removidas em uma versão futura. |
Remova essas flags da configuração do Kube Controller Manager. |
|
Flag do kubelet |
Descontinuada; será removida em uma versão futura. |
Use |
|
Pools de nós Windows |
A criação de pools de nós Windows não é mais suportada. |
Utilize pools de nós com Alibaba Cloud Linux 3 ou ContainerOS 3.1. Consulte Criar e gerenciar um pool de nós. |
Kubernetes 1.27
|
Recurso descontinuado |
Impacto |
Ação necessária |
|
Plugin de armazenamento in-tree AWS EBS |
Substituído pelo plugin CSI out-of-tree. |
Consulte cloud-provider-aws. |
|
Campo |
Descontinuado; clientes que atualizam este campo recebem um aviso. |
Pare de atualizar |
|
Anotações seccomp Alpha ( |
Removidas na v1.27. Cargas de trabalho dependentes dessas anotações perdem silenciosamente as configurações seccomp. |
Utilize o campo |
|
Flags do KCM |
Removidas na versão 1,27. |
Remova essas flags da configuração do Kube Controller Manager. |
|
Flag do kubelet |
Removida na versão 1,27 (descontinuada desde a 1.24). |
Nenhuma ação necessária; o valor padrão |
|
Flags do kubelet |
Não podem mais ser definidas como flags de linha de comando. |
Transfira-as para o arquivo de configuração do kubelet. |
|
Admission controller |
Descontinuado; será removido em uma versão futura. |
Migre para Pod Security Admission ou um webhook de validação. |
APIs descontinuadas
A API CSIStorageCapacity storage.k8s.io/v1beta1 foi descontinuada na versão 1.24 e removida na 1,27. Utilize storage.k8s.io/v1 (disponível desde a versão 1.24). Consulte KEP de Restrições de Capacidade de Armazenamento para Agendamento de Pods.
Alterações em feature gates
Feature gates definem a maturidade de um recurso do Kubernetes:
Alpha: Desabilitado por padrão. Experimental e sujeito a alterações.
Beta: Habilitado por padrão. Estável o suficiente para a maioria dos clusters.
GA (Disponibilidade Geral): Sempre habilitado. O feature gate é removido.
Promovidos para GA
Estes feature gates atingiram o estágio GA e estão permanentemente habilitados. Os gates foram removidos.
No Kubernetes 1.28:
|
Feature gate |
Funcionalidade |
|
|
Quando |
|
|
O Kubernetes deixa de criar as cadeias iptables |
|
|
Habilita |
|
|
Diversos recursos estáveis agora sempre habilitados. Feature gates removidos. |
No Kubernetes 1.27:
|
Feature gate |
Funcionalidade |
|
|
Expansão de volume para volumes CSI, PVs em uso e PVs em geral. Todos os três estão agora sempre habilitados. |
|
|
Volumes CSI inline em especificações de pod. GA desde a versão 1.25, removido na 1,27. |
|
|
Contêineres efêmeros de depuração. GA desde a versão 1.25, feature gate removido. |
|
|
Limites rígidos no uso de |
|
|
Campo |
|
|
Campo |
|
|
Campo |
|
|
Campo |
|
|
Migração de in-tree para out-of-tree CSI atingiu GA na v1.25. O feature gate está sempre habilitado e foi removido. |
Promovidos para Beta (habilitados por padrão)
No Kubernetes 1.28:
|
Feature gate |
Funcionalidade |
|
|
Expressões CEL em |
No Kubernetes 1.27:
|
Feature gate |
Funcionalidade |
|
|
Inicia ordinais de pods de StatefulSet a partir de um número diferente de zero. |
|
|
Controla a exclusão automática de PVCs quando pods de StatefulSet são removidos. |
|
|
Modo de acesso |
Novos em Alpha (desabilitados por padrão)
No Kubernetes 1.28:
|
Feature gate |
Funcionalidade |
|
|
Roteia solicitações para o servidor de API correto quando múltiplas versões do servidor de API coexistem no cluster. Consulte Proxy de versão mista. |
|
|
Permite que o servidor de API utilize o cache de watch para atender solicitações LIST com garantias de consistência. |
No Kubernetes 1.27:
|
Feature gate |
Funcionalidade |
|
|
Consulta logs de nós com kubectl após definir |
|
|
Divide o intervalo NodePort em duas faixas. A alocação dinâmica usa a faixa superior; a inferior é reservada para atribuições estáticas, reduzindo conflitos de porta. Consulte Evitando colisões na atribuição de portas para Serviços NodePort. |
|
|
Redimensiona CPU e memória do contêiner sem reiniciar o pod. |
Removidos (configuração não mais necessária)
No Kubernetes 1.27:
O feature gate IPv6DualStack foi removido após atingir GA na v1.23. Caso tenha definido essa configuração manualmente no cluster, remova-a antes de atualizar.