O ACK participa do Programa de Conformidade Certificado do Kubernetes. Este documento aborda as alterações implementadas no ACK para oferecer suporte ao Kubernetes 1.24.
Antes de atualizar para o Kubernetes 1.24, revise as alterações disruptivas listadas abaixo. Várias exigem ações prévias à atualização.
Remoção do Dockershim: O Docker não é mais suportado como runtime de contêiner. Use o containerd para novos nós. As imagens Docker continuam funcionando normalmente.
Conflito de portas NodePort: O kube-proxy não reserva mais portas NodePort. Se algum Service do tipo NodePort no cluster usar uma porta dentro do intervalo
net.ipv4.ip_local_port_rangede um nó, as conexões TCP poderão falhar intermitentemente após a atualização, causando falhas na verificação de integridade e exceções de serviço. Verifique se nenhuma porta NodePort se sobrepõe ao parâmetro de kernelnet.ipv4.ip_local_port_rangeem cada nó antes de prosseguir com a atualização. Consulte o PR da comunidade Kubernetes.NGINX Ingress Controller: As versões 0.44.0 e anteriores do Ingress Controller usam a API Ingress v1beta1, descontinuada e incompatível com o Kubernetes 1.24. Atualize o NGINX Ingress Controller para a versão 1.2.0 ou superior antes de migrar o cluster da versão 1.22 para a 1.24.
Tokens de conta de serviço: O feature gate
LegacyServiceAccountTokenNoAutoGenerationagora está ativado por padrão. A API Secret não gera mais automaticamente Secrets para tokens de contas de serviço. Use a API TokenRequest para gerar tokens. Todos os tokens emitidos pela API TokenRequest expiram por padrão. Para criar um token sem expiração, consulte service-account-token-secrets.Rótulos de nós do plano de controle (clusters dedicados ACK): O kubeadm não adiciona mais o rótulo
node-role.kubernetes.io/masteraos nós do plano de controle; apenas o rótulonode-role.kubernetes.io/control-planeé aplicado. Os taintsnode-role.kubernetes.io/master:NoScheduleenode-role.kubernetes.io/control-plane:NoSchedulesão configurados. O taintnode-role.kubernetes.io/master:NoScheduleserá removido no Kubernetes 1.25.
Versões dos componentes
|
Componente |
Versão |
Alterações |
|
Kubernetes |
1.24.6-aliyun.1 |
Consulte as alterações disruptivas acima e os Detalhes da versão. |
|
etcd |
3.5.4 |
Nenhuma |
|
CoreDNS |
1.9.3.6-32932850-aliyun |
Consulte a seção CoreDNS. |
|
Container Runtime Interface (CRI) |
containerd 1.5.13 |
Nenhuma |
|
Container Storage Interface (CSI) |
1.26 |
Nenhuma |
|
Container Network Interface (CNI) — Flannel |
v0.15.1.13-941db231-aliyun |
Consulte a seção Flannel. |
|
Terway |
Deve ser posterior à 1.1.0 |
— |
|
NVIDIA Container Runtime |
3.7.0 |
Nenhuma |
|
Ingress Controller |
1.2.0-aliyun.1 |
Consulte a seção Ingress Controller. |
CoreDNS
A atualização para o CoreDNS 1.9.3.6-32932850-aliyun não afeta as cargas de trabalho em execução. As mudanças incluem:
Otimização das configurações de afinidade para agendamento do CoreDNS, permitindo sua execução em clusters com nós de dimensionamento automático.
Desativação do cache de resultados de resolução DNS do tipo ServError.
Alteração da anti-afinidade de pods baseada em nomes de host de
preferredpararequired, impondo regras de anti-afinidade nos domínios topológicos dos nós especificados.Suporte a parâmetros personalizados.
Análise de logs ativada por padrão.
Flannel
Adição de um contêiner de inicialização para instalar o plugin Flannel.
Definição do diretório
/var/runcomo local padrão para cache de endereços IP, evitando vazamentos de IP durante reinicializações de nós.Suporte a instâncias ARM64.
Correção das vulnerabilidades CVE-2022-28391 e CVE-2022-37434.
Ingress Controller
O Ingress Controller nas versões 0.44.0 e anteriores usa a API Ingress v1beta1, mantida no Kubernetes 1.22, mas indisponível no Kubernetes 1.24. Atualize o NGINX Ingress Controller para a versão 1.2.0 ou superior antes de atualizar o cluster da versão 1.22 para a 1.24.
Essa atualização pode interromper temporariamente as cargas de trabalho e causar problemas de compatibilidade nas configurações existentes. Avalie o impacto antes de iniciar a atualização.
Detalhes da versão
Alterações disruptivas
Remoção do Dockershim
O Dockershim foi removido no Kubernetes 1.24. O Docker deixou de ser suportado como runtime de contêiner. As imagens Docker continuam funcionando, pois apenas o runtime mudou. Use o containerd para novos nós. Consulte o FAQ sobre a Remoção do Dockershim e a issue relacionada no GitHub.
Aumento de memória do kube-apiserver (coleta de lixo do Go 1.18)
O Kubernetes 1.24 é compilado com Go 1.18, o que altera o algoritmo de coleta de lixo. Como resultado, a latência de resposta da API no percentil 99 diminuiu 10 vezes, mas o uso de memória do kube-apiserver aumentou cerca de 25%. Para reduzir o consumo de memória aos níveis anteriores, defina a variável de ambiente GOGC como 63.
Desativação da geração automática de tokens de conta de serviço
O feature gate LegacyServiceAccountTokenNoAutoGeneration está ativado por padrão. A API Secret não gera mais automaticamente Secrets para tokens de contas de serviço. Use a API TokenRequest para essa finalidade. Todos os tokens emitidos pela API TokenRequest expiram por padrão. Para criar um token permanente, consulte service-account-token-secrets.
Alteração em rótulos de nós do plano de controle (clusters dedicados ACK)
O kubeadm não aplica mais o rótulo node-role.kubernetes.io/master aos nós do plano de controle. Apenas o rótulo node-role.kubernetes.io/control-plane é adicionado. Os taints node-role.kubernetes.io/master:NoSchedule e node-role.kubernetes.io/control-plane:NoSchedule são aplicados aos novos nós do plano de controle. O taint node-role.kubernetes.io/master:NoSchedule será removido no Kubernetes 1.25.
Conflito entre porta NodePort e parâmetro de kernel
O kube-proxy não reserva mais portas para Services do tipo NodePort. Se um Service NodePort usar uma porta dentro do intervalo definido pelo parâmetro de kernel net.ipv4.ip_local_port_range em um nó, as conexões TCP poderão falhar intermitentemente. Isso pode provocar falhas nas verificações de integridade e exceções no serviço. Antes de atualizar, confirme que nenhuma porta NodePort no cluster entra em conflito com o valor de net.ipv4.ip_local_port_range em qualquer nó. Veja o PR da comunidade Kubernetes.
Correção de segurança: CVE-2022-3172
Novos recursos
Agendamento baseado em capacidade de armazenamento
O recurso CSIStorageCapacity atingiu o estágio GA. A API expõe a capacidade de armazenamento disponível para agendar pods apenas em nós com espaço suficiente, evitando falhas decorrentes de erros na criação ou montagem de volumes. Consulte Restrições de Capacidade de Armazenamento para Agendamento de Pods.
Sondas gRPC (preview público)
As sondas gRPC estão disponíveis em preview público. O feature gate GRPCContainerProbe vem ativado por padrão. Saiba mais em Configurar sondas.
Melhorias no plugin CSI
O plugin CSI agora suporta finalizers de proteção contra exclusão para volumes persistentes (PV) in-tree e a migração de plugins de armazenamento in-tree para drivers CSI out-of-tree. Leia o Documento de Design de Migração de Plugin de Armazenamento In-tree para CSI.
Suporte a fuso horário em CronJobs
Os CronJobs aceitam agora um parâmetro opcional timeZone. Ative o feature gate CronJobTimeZone para executar CronJobs em um fuso horário específico. Esse recurso entrará em preview público no Kubernetes 1.25.
Suporte a Windows no kube-proxy
Duas novas opções permitem executar o kube-proxy no Windows:
--forward-healthcheck-vip: Encaminha requisições de verificação de integridade destinadas ao endereço IP virtual (VIP) de um Service para o Service de verificação de integridade do kube-proxy.--root-hnsendpoint-name: Especifica o nome do endpoint do Host Networking Service (HNS) para o namespace de rede raiz.
OpenAPI V3
A versão V3 do OpenAPI está habilitada por padrão.
Desativação da verificação de certificados SHA-1
Certificados assinados com o algoritmo de hash SHA-1 não podem mais ser verificados por padrão. Essa mudança decorre da compilação do Kubernetes 1.24 com Go 1.18.
Cadeia iptables para detecção de modo
O kubelet cria uma cadeia chamada KUBE-IPTABLES-HINT na tabela mangle. Componentes conteinerizados que precisam modificar regras de iptables no namespace de rede do host podem usar essa cadeia para detectar de forma confiável se o sistema usa iptables-legacy ou iptables-nft.
Métricas novas e atualizadas
|
Métrica |
Descrição |
|
|
Monitora falhas de webhook. |
|
|
Monitora Services sem endpoints internos (kube-proxy). |
|
|
Monitora o status de integridade dos volumes (kubelet). |
|
|
Substitui a métrica descontinuada |
Recursos que atingiram GA no Kubernetes 1.23 (mantidos na 1.24)
Logs estruturados (preview público desde a 1.23): Componentes como kube-scheduler e kubelet agora registram logs em formato estruturado chave=valor. Por exemplo,
verb="GET" URI="/healthz" latency="57.126µs" resp=200em vez deGET /healthz: (57.126µs) 200. Expressões regulares não são mais necessárias para analisar esses logs. Imprima logs em texto estruturado ou formato JSON. Por padrão, os logs em formato JSON são gravados emstderr. Veja Introdução aos Logs Estruturados.StatefulSet
.spec.minReadySeconds: Suportado por padrão (preview público desde a 1.23). Consulte Segundos Mínimos de Prontidão para StatefulSets.Campo
StorageCapacitydo CSI editável: O campoCSIDriver.Spec.StorageCapacityagora pode ser modificado.JobReadyPods: A quantidade de pods no estado
Readyaparece no campo de status do Job.Validação de CRD com CEL: O feature gate
CustomResourceValidationExpressionsusa a Common Expression Language (CEL) por meio da extensãox-kubernetes-validationspara validar CustomResourceDefinitions (CRDs).Binários de cliente Windows ARM64: Binários do lado do cliente podem ser compilados para Windows em arquitetura ARM64 (suporte a partir do Go 1.17).
Estado
Processingda workqueue no client-go: Ao encerrar uma workqueue no estadoProcessing, o processo aguarda a conclusão de todas as tarefas em andamento.Métrica
admission_webhook_request_total: Inclui nome do webhook, tipo de admissão, operação, código de status HTTP, status de rejeição e namespace do recurso como rótulos.Métricas do servidor de API atingem GA:
controller_admission_duration_seconds,step_admission_duration_seconds,webhook_admission_duration_seconds,apiserver_current_inflight_requests,apiserver_response_sizes. Uma nova métrica monitora requisições LIST ao servidor de API do Kubernetes.Métricas do agendador atingem GA:
pending_pods,preemption_attempts_total,preemption_victims,schedule_attempts_total,scheduling_attempt_duration_seconds(anteriormentee2e_scheduling_duration_seconds),pod_scheduling_duration_seconds,pod_scheduling_attempts,framework_extension_point_duration_seconds,plugin_execution_duration_seconds,queue_incoming_pods_total.Verificações de integridade do kube-controller-manager: Todos os controladores agora estão incluídos.
Aplicação de
pod.Spec.OS: Se o campo OS estiver definido em um pod, mas não corresponder ao rótulo de SO do nó, o kubelet rejeitará o pod.
Melhorias no kubectl (1.23–1.24)
O comando
kubectl logsexibe o log do primeiro contêiner por padrão.O comando
kubectl describe ingressmostra agora as IngressClasses.O comando
kubectl versionapresenta a versão embutida do Kustomize.O comando
kubectl getoferece preenchimento automático via tabulação para nomes de recursos (por exemplo,kubectl get pod pod1 <TAB>).Os shells fish e PowerShell agora têm suporte para conclusão de código e sugestões.
Recursos descontinuados e removidos
Removidos no Kubernetes 1.24
|
Item |
Substituto |
|
Opção de inicialização |
Removida junto com o Dockershim. |
|
Parâmetros |
Removidos. |
|
Parâmetros |
Removidos. |
|
Versões de auditoria |
Apenas |
|
API |
Use a versão |
|
Anotação de Service |
Use |
|
Limpeza dinâmica de logs |
Recurso removido. Consulte Sanitização dinâmica de logs e KEP-1753. |
|
Feature gate |
Removido. |
|
Feature gates |
Removidos. |
|
Versão de API |
Removida. |
Descontinuados no Kubernetes 1.24
|
Item |
Substituto ou observação |
|
|
Descontinuado; não suporta pilha dupla IPv4/IPv6. |
|
|
Descontinuado; será removido na próxima versão. |
|
Feature gates |
Descontinuados. |
|
API v1beta1 de |
A versão v1 é utilizada; a v1beta1 será removida no Kubernetes 1.27. |
Descontinuados no Kubernetes 1.23
|
Item |
Substituto ou observação |
||
|
FlexVolume |
Use drivers CSI out-of-tree. Consulte o FAQ de Plugins de Volume do Kubernetes para Fornecedores de Armazenamento. |
||
|
Flags específicas de linha de comando do klog |
O Kubernetes simplificará progressivamente os logs dos componentes. Veja Logs do Sistema. |
||
|
Flag |
Use |
||
|
Parâmetro |
Use o kube-log-runner. Consulte kube-log-runner. |
||
|
Métrica |
Descontinuada. |
||
|
Métrica |
Substituída por |
||
|
Comando |
Especifique `--dry-run=(server |
client |
none)`. |
|
Versão de API |
HorizontalPodAutoscaler (HPA) v2 atingiu GA; use |
Alterações de API
Kubernetes 1.24
|
Versão de API removida |
Substituto |
|
|
|
|
|
|
|
|
|
|
|
Removida. |
Kubernetes 1.23
|
Versão de API removida |
Substituto |
|
|
|
|
|
|
Outras alterações de API no Kubernetes 1.23
HorizontalPodAutoscaler v2 atingiu GA. A versão de API
autoscaling/v2beta2foi descontinuada.O campo
Service.spec.ipFamilyPolicyé obrigatório ao criar ou atualizar Services com pilha dupla IPv4/IPv6. Defina-o comoPreferDualStackouRequireDualStack.Componentes configurados via LogFormatRegistry devem ser atualizados para usar a API logr v1.0.0. Logs JSON são exportados no formato go-logr/zapr.
Feature gates
Os feature gates passam por três estágios: Alpha (desativado por padrão), Beta (ativado por padrão) e GA (sempre ativado, não pode ser desativado). Para detalhes completos, consulte Feature Gates.
Atingindo GA no Kubernetes 1.24
|
Feature gate |
Observações |
|
|
GA. |
|
|
GA; não pode ser desativado. |
|
|
GA; será removido no Kubernetes 1.26. Permite suspender e retomar Jobs. |
|
|
GA. Define |
|
|
GA; será removido no Kubernetes 1.26. Habilita regras de afinidade de pods entre namespaces. |
|
|
GA. Permite especificar a validade do certificado através do campo opcional |
Preview público no Kubernetes 1.24 (ativado por padrão)
|
Feature gate |
Observações |
|
|
Rastreia o número de pods Ready criados por um Job, registrado no campo |
|
|
Valida recursos no lado do servidor (em vez do cliente) ao executar |
Preview público no Kubernetes 1.24
|
Feature gate |
Observações |
|
|
Permite recursos personalizados como fontes de dados para PersistentVolumeClaim (PVC). |
Ativado por padrão no Kubernetes 1.24
|
Feature gate |
Observações |
|
|
Desativa a geração automática de Secrets para tokens de contas de serviço. |
Descontinuado no Kubernetes 1.24
|
Feature gate |
Observações |
|
|
Descontinuado. |
|
|
Descontinuado. |
Removido no Kubernetes 1.24
|
Feature gate |
Observações |
|
|
Descontinuado no Kubernetes 1.22; removido na 1.24. |
|
|
Atingiram GA no Kubernetes 1.22; removidos na 1.24. |
Atingindo GA no Kubernetes 1.23
|
Feature gate |
Observações |
|
|
Usa controladores TTL para limpar objetos de recursos finalizados. |
|
|
Configura permissões de volume e políticas de alteração de propriedade. A métrica |
|
|
GA; o feature gate |
|
|
GA; sempre ativado. |
|
|
GA. Permite que IngressClasses referenciem parâmetros com escopo de namespace. Adiciona os campos |
|
|
GA no Kubernetes 1.11; será removido no Kubernetes 1.25. Retarda a exclusão de PVs ou PVCs enquanto estiverem em uso. |
|
|
O interruptor do feature gate foi removido; o recurso está sempre ativado. Atingiu GA no Kubernetes 1.17. |
Preview público no Kubernetes 1.23
|
Feature gate |
Observações |
|
|
Permite a exclusão automática de PVCs criados por pods de StatefulSet. |
|
|
Preview público; ativado por padrão. Substitui o controlador de admissão PodSecurityPolicy, que foi descontinuado. |
|
|
Habilita o endpoint |
|
|
Habilita contêineres Windows HostProcess por padrão. |
|
|
Ativado por padrão. Suporta todas as capacidades padrão de volumes: drivers de armazenamento de terceiros, snapshots de volume e rastreamento de capacidade de armazenamento. Consulte Volumes Efêmeros. |
GA entre Kubernetes 1.23–1.24 (não podem ser desativados)
ConfigurableFSGroupPolicy, ControllerManagerLeaderMigration, CSIMigrationAzureDisk, CSIMigrationOpenStack, CSIStorageCapacity, CSIVolumeFSGroupPolicy, CSRDuration, CronJobControllerV2, DefaultPodTopologySpread, EfficientWatchResumption, ExpandCSIVolumes, ExpandInUsePersistentVolumes, ExpandPersistentVolumes, GenericEphemeralVolume, IPv6DualStack, IndexedJob, IngressClassNamespacedParams, NonPreemptingPriority, PodAffinityNamespaceSelector, PodOverhead, PreferNominatedNode, RemoveSelfLink, ServiceLBNodePortControl, ServiceLoadBalancerClass, SuspendJob, DynamicKubeletConfig, TTLAfterFinished.