O ACK segue rigorosamente os termos do Certified Kubernetes Conformance Program. Este tópico descreve as alterações implementadas no ACK para oferecer suporte ao Kubernetes 1.26.
Versões dos componentes
|
Componente principal |
Versão |
Observações |
|
Kubernetes |
1.26.15-aliyun.1 e 1.26.3-aliyun.1 |
Consulte as Observações sobre atualização antes de atualizar. |
|
etcd |
v3.5.4 |
— |
|
CoreDNS |
1.9.3.10-7dfca203-aliyun |
— |
|
CRI |
containerd 1.6.20 |
Apenas Kubernetes 1.24.0 e posteriores. |
|
CSI |
Para obter as versões mais recentes do csi-plugin e do csi-provisioner, consulte as notas de versão em csi-plugin e csi-provisioner. |
— |
|
CNI |
Flannel v0.15.1.22-20a397e6-aliyun |
— |
|
CNI |
Terway & TerwayControlplane v1.5.0+ |
— |
|
NVIDIA Container Runtime |
v3.13.0 |
Exclusivo do Kubernetes 1.26. Outras versões utilizam a v3.7.0. |
|
Ingress Controller |
v1.6.4-aliyun.1 |
— |
Observações sobre atualização
Resumo das alterações disruptivas
Antes de atualizar para o Kubernetes 1.26, revise este resumo das alterações disruptivas:
Remoção do CRI v1alpha2 — O Kubernetes 1.26 exige o CRI v1. O containerd 1.5 e versões anteriores não têm suporte; atualize o containerd para a versão 1.6.0 ou posterior antes de atualizar seu cluster.
Remoção do PodSecurityPolicy (PSP) — O PSP foi descontinuado no Kubernetes 1.21 e removido no Kubernetes 1.25. Migre para o Pod Security Admission ou para um webhook de admissão de terceiros antes de atualizar.
APIs Beta descontinuadas — Várias APIs beta foram removidas nas versões 1.25 e 1.26 do Kubernetes. Verifique se seus controladores e aplicações utilizam alguma das APIs descontinuadas listadas em APIs descontinuadas e migre para as versões estáveis.
kube-proxy userspace mode removed — A opção
--mode userspaceagora retorna um erro. Utilize iptables ou IPVS no Linux, ou kernelspace no Windows.Código de credenciais in-tree removido — O código de autenticação de identidade aninhada do Azure e Google Cloud foi removido do client-go e do kubectl em versões do Kubernetes posteriores à 1.26. Substitua-o por plug-ins de autenticação.
Feature gate DynamicKubeletConfig removida — Atualize diretamente o arquivo de configuração do kubelet e reinicie o serviço.
Correções de CVE na versão 1.26.15-aliyun.1 — As vulnerabilidades CVE-2023-45288, CVE-2024-3177 e CVE-2024-24786 foram corrigidas.
Requisito de CRI
O Kubernetes 1.26 requer o CRI v1 e não oferece mais suporte ao CRI v1alpha2. O containerd 1.5 e versões anteriores são incompatíveis. Antes de atualizar para o Kubernetes 1.26, atualize o containerd para a versão 1.6.0 ou posterior.
Migração de PSP
O PodSecurityPolicy (PSP) foi descontinuado no Kubernetes 1.21 e removido a partir do Kubernetes 1.25. Para mais contexto, consulte PodSecurityPolicy: The Historical Context.
Caso seus clusters utilizem PSP atualmente, escolha um dos seguintes caminhos de migração antes de atualizar:
Governança de políticas do ACK — Utilize o recurso de gerenciamento de políticas integrado ao ACK, que fornece políticas otimizadas para Kubernetes e fáceis de configurar. Consulte Ative o recurso de governança de políticas.
Pod Security Admission nativo — Migre para o controlador de admissão de segurança de pods nativo do Kubernetes. Consulte Pod Security Admission e Migrate from PodSecurityPolicy to the Built-In PodSecurity Admission Controller.
Webhook de admissão de terceiros — Implante e configure um plug-in de admissão de terceiros.
Porta somente leitura do kubelet
Por padrão, a porta somente leitura 10255 não fica mais aberta em clusters ACK que executam o Kubernetes 1.26 ou posterior. A porta de autenticação 10250 é utilizada em seu lugar. Para mais detalhes, consulte [\[Alterações do product\] Abertura da porta de autenticação em vez da porta somente leitura para o kubelet em clusters ACK com versões do Kubernetes anteriores à 1.26](https://www.alibabacloud.com/help/en/document_detail/2367983.html).
Novos recursos
Kubernetes 1.25
Contêineres efêmeros (GA) — Execute contêineres efêmeros dentro de um pod para depurar pods que falharam ou estão inacessíveis sem precisar de uma ferramenta de depuração. Consulte Ephemeral Containers.
cgroup v2 (Estável) — Uma versão aprimorada do cgroup v1 com melhor isolamento de recursos. Consulte About cgroup v2.
Melhorias no suporte ao Windows — Testes unitários de CI, testes de conformidade e um novo repositório para prontidão operacional do Windows.
Redirecionamento de registro de imagens — Solicitações para k8s.gcr.io são redirecionadas para registry.k8s.io. Consulte k8s.gcr.io Redirect to registry.k8s.io.
Campo EndPort do NetworkPolicy (GA) — Especifique um intervalo de portas nas políticas de rede usando o campo
endPort. Se o seu plug-in de rede não suportarendPort, a política se aplicará apenas à porta única especificada no campoport. Consulte Network Policies.Isolamento de capacidade de armazenamento efêmero local (GA) — Os pods podem ter limites rígidos no consumo de armazenamento efêmero local (como volumes emptyDir). Pods que excedem o limite são despejados. Consulte Local Ephemeral Storage Capacity Isolation.
Volumes CSI inline efêmeros (Estável) — Volumes CSI originados de PersistentVolumes (PVs) e PersistentVolumeClaims (PVCs) não podem ser especificados diretamente na especificação do pod ao usar volumes CSI efêmeros. Consulte Ephemeral Inline CSI volumes.
API KMS v2 alpha1 — Melhora o desempenho e a observabilidade da rotação de chaves. Substitui AES-CBC por AES-GCM e usa uma Data Encryption Key (DEK) para criptografar Secrets do Kubernetes em repouso. Dados criptografados podem ser descriptografados tanto com AES-GCM quanto com AES-CBC. Consulte Using a KMS provider for data encryption.
Container Object Storage Interface (COSI) (Alfa) — Padroniza o provisionamento e o consumo de armazenamento de objetos. Consulte COSI.
Condição PodHasNetwork (Alfa) — Quando
PodHasNetworkno campostatusde um pod étrue, o sandbox de runtime do pod foi inicializado e sua rede está configurada. Use essa condição para medir a latência de inicialização do pod (excluindo o tempo de pull da imagem e a inicialização da aplicação). Ative a feature gatePodHasNetworkConditionno kubelet para utilizar este recurso. Consulte How is this different from the existing Initialized condition?.StatefulSet minReadySeconds (Estável) — O campo
minReadySecondspermite que cada pod aguarde um período especificado antes que o próximo pod em uma atualização contínua prossiga, desacelerando intencionalmente a implantação. Consulte Minimum ready seconds.DaemonSet maxSurge (Estável) —
maxSurgeespecifica o número de pods extras que podem ser criados em um nó durante uma atualização contínua do DaemonSet, reduzindo o tempo de inatividade.maxSurgeehostPortnão podem ser usados juntos, pois dois pods ativos não podem compartilhar a mesma porta em um nó. Consulte Perform a Rolling Update on a DaemonSet.Suporte a namespace de usuário para pods (Alfa) — Mapeie um usuário root dentro de um pod para um ID diferente de zero fora do pod. O usuário aparece como root sob a perspectiva do contêiner, mas como um usuário sem privilégios sob a perspectiva do host. Ative a feature gate
UserNamespacesStatelessPodsSupporte garanta que seu runtime de contêiner suporte esse recurso. Consulte Kubernetes 1.25: alpha support for running Pods with user namespaces.RetroactiveDefaultStorageClass — Quando ativado, uma StorageClass padrão pode ser alocada automaticamente a um PVC criado sem uma. Anteriormente, a StorageClass permanecia como
nile exigia a exclusão e recriação do PVC. Esta feature gate atinge o estágio Beta e é habilitada por padrão no Kubernetes 1.26.JobPodFailurePolicy (Alfa) — Configure um Job para lidar com interrupções de pods com base em códigos de saída e status do pod, evitando retentativas desnecessárias e ignorando despejos. Defina o campo
podFailurePolicyem um Job para usar este recurso. Ele atinge o estágio Beta no Kubernetes 1.26. Consulte Handling retriable and non-retriable pod failures with Pod failure policy.Melhorias no PodTopologySpread — Correção do problema em que os pods não eram distribuídos uniformemente durante atualizações contínuas. O suporte ao campo
minDomainsatinge o estágio Beta.Otimização do kube-proxy para grandes clusters — Em um cluster com 1.000 endpoints, regras não utilizadas do iptables são retidas temporariamente (até um ciclo máximo de sincronização do iptables) em vez de serem excluídas imediatamente. Em clusters menores, as regras não utilizadas são excluídas imediatamente.
Kubernetes 1.26
API de alocação dinâmica de recursos (Alfa) — Solicite e compartilhe recursos entre pods ou entre contêineres dentro de um pod, com suporte a parâmetros personalizados de inicialização de recursos. Ative a feature gate
DynamicResourceAllocatione o grupo de APIresource.k8s.io/v1alpha1, e então instale um driver de recurso para os recursos que deseja gerenciar. Consulte Alpha API For Dynamic Resource Allocation.Desligamento não gracioso de nó (Beta) — Quando um nó é desligado de forma não graciosa, os pods nesse nó ficam presos no estado
Terminatinge os VolumeAttachments não podem ser excluídos, impedindo que os pods do StatefulSet sejam reagendados em outro lugar. Para acionar o desligamento não gracioso do nó, adicione manualmente a taintout-of-serviceao nó. Isso força a exclusão do pod e o desanexamento do volume para os pods encerrados. Remova a taint manualmente após a recuperação do nó. Consulte Non-graceful node shutdown.Delegação de fsGroup ao driver CSI — Ao montar um volume em um pod, o driver CSI pode aplicar
fsGrouppara alterar permissões de arquivos e diretórios em vez do kubelet. Isso é transparente para os usuários. Para desenvolvedores de drivers CSI, consulte CSI Driver fsGroup Support.Gates de agendamento de pods — Marque um pod recém-criado como não pronto para agendamento configurando
spec.schedulingGates. O agendador ignora o pod até que um controlador externo remova o gate. Isso evita que um grande número de pods pendentes não agendáveis degrade o desempenho do agendador. Consulte Pod Scheduling Readiness.CPU Manager (GA) — Aloca CPUs exclusivas para contêineres como parte do kubelet. Três políticas de gerenciamento de CPU são suportadas. Consulte Control CPU Management Policies on the Node.
Fontes de dados de armazenamento entre namespaces (Alfa) — Especifique uma source de dados de um namespace diferente para um PVC. Consulte Kubernetes v1.26: Alpha support for cross-namespace storage data sources.
Política de despejo de pods não saudáveis do PodDisruptionBudget (Alfa) — Defina
.spec.unhealthyPodEvictionPolicy=AlwaysAllowpara forçar um PodDisruptionBudget (PDB) a sempre permitir o despejo de pods não saudáveis. Ative a feature gatePDBUnhealthyPodEvictionPolicypara usar este recurso. Consulte Unhealthy Pod Eviction Policy.Handlers HTTP GET consistentes para hooks de ciclo de vida —
httpGetpara hooks de ciclo de vida de contêinerespreStopepostStartagora respeita os camposschemeeheaders, correspondendo ao comportamento das sondas. HTTPS é suportado com a mesma configuração das sondas. Se HTTPS for especificado acidentalmente, uma mensagem de erro será retornada e o sistema voltará para HTTP sem problemas de compatibilidade. Desative esse comportamento definindo--feature-gates=ConsistentHTTPGetHandlers=falseno kubelet.Empréstimo de assentos da API Priority and Fairness (APF) — Dois campos foram adicionados a
.spec.limited:lendablePercent(a porcentagem de assentos que outros níveis de prioridade podem emprestar do nível atual) eborrowingLimitPercent(o máximo de assentos que este nível pode emprestar de outros níveis).Concorrência configurável do controlador HPA — Defina
--concurrent-horizontal-pod-autoscaler-syncsno kube-controller-manager para controlar o número de workers usados pelo controlador Horizontal Pod Autoscaler (HPA).Validação de seletor de rótulos do HPA — Quando vários HPAs têm como alvo o mesmo conjunto de pods ou Deployment, os HPAs param de entrar em vigor e um evento
AmbiguousSelectoré gerado.Múltiplas StorageClasses padrão — Quando várias StorageClasses são anotadas com
storageclass.kubernetes.io/is-default-class, o Kubernetes seleciona a criada mais recentemente em vez de gerar um erro.
Recursos descontinuados
Argumentos de linha de comando
kube-controller-manager
|
Argumento |
Alteração |
Substituto |
|
|
Removido no Kubernetes 1.25 |
— |
|
|
Removido no Kubernetes 1.25 |
— |
|
|
Removido no Kubernetes 1.25 |
— |
|
|
Descontinuado no Kubernetes 1.25 |
|
|
|
Descontinuado no Kubernetes 1.25; removido no Kubernetes 1.27 |
|
|
|
Removido no Kubernetes 1.27 |
— |
kubeadm
No Kubernetes 1.25,
UnversionedKubeletConfigMapatinge o estágio GA. Por padrão,kube-system/kubelet-configsubstituikube-system/kubelet-config-x.yy.No Kubernetes 1.25, o kubeadm não adiciona mais o rótulo
node-role.kubernetes.io/master:NoScheduleaos nós do plano de controle. O rótulo é removido quando você executakubeadm upgrade apply.No Kubernetes 1.25, as anotações seccomp
seccomp.security.alpha.kubernetes.io/podecontainer.seccomp.security.alpha.kubernetes.ionão são mais suportadas. UseSeccompProfileem seu lugar. Consulte Restrict a Container's Syscalls with seccomp.
Outros argumentos removidos no Kubernetes 1.26
Várias flags klog relacionadas a logs foram removidas (anteriormente descontinuadas).
A flag
--master-service-namespaceno servidor de API foi descontinuada (não utilizada).Os seguintes subcomandos de
kubectl runforam descontinuados e serão removidos em uma versão futura:--cascade,--filename,--force,--grace-period,--kustomize,--recursive,--timeoute--wait.
Flags descontinuadas no Kubernetes 1.26
A flag
--prune-whitelistfoi descontinuada e substituída por--prune-allowlistpara alinhar-se à Inclusive Naming Initiative. A flag descontinuada será removida em versões futuras.
Drivers de armazenamento
No Kubernetes 1.25, os plug-ins de armazenamento in-tree foram removidos conforme a migração central de CSI atingiu o estágio GA. Consulte CSI migration.
No Kubernetes 1.25, os plug-ins de armazenamento in-tree GlusterFS e Portworx foram descontinuados. Os plug-ins in-tree Flocker, Quobyte e StorageOS foram removidos. O driver de armazenamento in-tree do vSphere não suporta mais versões do vSphere anteriores à 7.0u2.
No Kubernetes 1.26, o driver de armazenamento in-tree GlusterFS foi descontinuado, e a integração de armazenamento in-tree descontinuada do OpenStack (volumes Cinder) foi removida.
Outras remoções
Modo userspace do kube-proxy — O modo userspace foi removido no Kubernetes 1.26. Use iptables ou IPVS no Linux, ou kernelspace no Windows.
--mode userspaceagora retorna um erro. O kube-proxy winkernel do Windows não suporta mais as APIs Windows HNS v1.Código de credenciais in-tree — O código de autenticação de identidade aninhada do Azure e Google Cloud foi removido do client-go e do kubectl em versões do Kubernetes posteriores à 1.26. Substitua-o por plug-ins de autenticação.
Feature gate DynamicKubeletConfig — Removida do kubelet no Kubernetes 1.24 e removida do servidor de API no Kubernetes 1.26. Atualize diretamente o arquivo de configuração do kubelet e reinicie o serviço. Consulte remove DynamicKubeletConfig feature gate from the code.
Limpeza de cadeias do iptables — No Kubernetes 1.25 e posterior, o kubelet usa a feature gate
IPTablesCleanuppara parar de criar as cadeiasKUBE-MARK-DROP,KUBE-MARK-MASQeKUBE-POSTROUTINGna tabela NAT. Essas cadeias são internas ao Kubernetes e não devem ser usadas como uma API pública. Consulte Kubernetes's IPTables Chains Are Not API e Cleaning up IPTables Chain Ownership.
APIs descontinuadas
O Kubernetes 1.25 e 1.26 removem várias APIs beta previamente descontinuadas. Para a lista completa, consulte o Guia de migração de APIs descontinuadas.
Alterações na versão da API
|
Recurso |
Versão da API removida |
Use em vez disso |
Disponível desde |
|
CronJob |
|
|
Kubernetes 1.21 |
|
EndpointSlice |
|
|
Kubernetes 1.21 |
|
Event |
|
|
Kubernetes 1.19 |
|
PodDisruptionBudget |
|
|
Kubernetes 1.21 |
|
PodSecurityPolicy |
|
Removido; migre para Pod Security Admission |
— |
|
RuntimeClass |
|
|
Kubernetes 1.20 |
|
HorizontalPodAutoscaler |
|
|
Kubernetes 1.23 |
|
HorizontalPodAutoscaler |
|
|
Kubernetes 1.23 |
|
FlowSchema, PriorityLevelConfiguration |
|
|
Kubernetes 1.23 / 1.26 |
Alterações no nível de campo
EndpointSlice (discovery.k8s.io/v1)
|
Campo descontinuado |
Substituto |
|
|
|
|
|
|
|
|
|
Após a atualização, verifique se há o erro failed to list *v1beta1.EndpointSlice nos logs do pod CoreDNS. Se presente, reinicie ou atualize o componente CoreDNS. Consulte Why does CoreDNS use deprecated APIs?.
Event (events.k8s.io/v1)
|
Campo descontinuado |
Substituto |
Observações |
|
|
|
Renomeado para |
|
|
|
Renomeado para |
|
|
|
Renomeado para |
|
|
|
Renomeado para |
|
|
|
Renomeado para |
Requisitos adicionais para eventos events.k8s.io/v1:
typesó pode ser definido comoNormalouWarning.action,reason,reportingControllerereportingInstancesão campos obrigatórios.
PodDisruptionBudget (policy/v1)
O comportamento de spec.selector difere entre as versões da API:
|
Versão da API |
spec.selector: {} (vazio) |
spec.selector não definido |
|
|
Seleciona todos os pods no namespace |
Nenhum pod selecionado |
|
|
Nenhum pod selecionado |
Nenhum pod selecionado |
Feature gates
As feature gates possuem três fases de ciclo de vida:
Alfa — Desativada por padrão. Ative manualmente com
--feature-gates=<FeatureGate>=true.Beta — Ativada por padrão. Desative manualmente com
--feature-gates=<FeatureGate>=false.GA — Ativada por padrão. Não pode ser desativada. A flag da feature gate é removida em uma versão posterior.
Para a lista completa, consulte Feature Gates.
Atingindo GA no Kubernetes 1.25
|
Feature gate |
Descrição |
|
|
Suporta o campo |
|
|
Suporta o campo |
|
|
Suporta o campo |
|
|
Suporta o campo |
|
|
Suporta volumes CSI inline efêmeros. |
|
|
Suporta contêineres efêmeros. |
|
|
Habilita a migração CSI para plug-ins de armazenamento in-tree. |
Atingindo Beta no Kubernetes 1.25
|
Feature gate |
Descrição |
|
|
Habilita SeccompDefault. Consulte Restrict a Container's Syscalls with seccomp. |
|
|
Habilita validação Common Expression Language (CEL) para CustomResourceDefinitions (CRDs). Ativada por padrão. Consulte Validation rules. |
|
|
Habilita validação de campos desconhecidos no lado do servidor de API. Ativada por padrão. Consulte Field validation. |
|
|
Habilita migração CSI para Portworx. |
|
|
Valor padrão alterado para |
Adicionadas em Alfa no Kubernetes 1.25
|
Feature gate |
Descrição |
|
|
Habilita a Kubelet Checkpoint API. |
|
|
Permite que o kubelet adicione a condição |
|
|
Habilita namespaces de usuário para pods stateless. |
|
|
Permite que Jobs lidem com falhas de pods com base em códigos de saída e status do pod. Atinge Beta no Kubernetes 1.26. |
|
|
Permite que o NodeIPAM suporte múltiplos ClusterCIDRs. Defina |
|
|
Permite passar dados de autenticação de identidade armazenados em Secrets para o driver CSI ao adicionar nós. |
Atingindo GA no Kubernetes 1.26
|
Feature gate |
Descrição |
|
|
Rastreia o progresso do Job monitorando os pods em vez de contar os pods restantes. Consulte Job tracking with finalizers. |
|
|
Habilita o campo |
|
|
Permite diferentes protocolos no mesmo Service LoadBalancer. |
|
|
Suporta os campos de condição |
|
|
Permite que o driver CSI aplique |
|
|
Permite que a política de alocação ClusterIP do Service subdivida o intervalo ClusterIP. |
|
|
Aloca CPUs exclusivas para contêineres. Consulte Control CPU Management Policies on the Node. |
|
|
Habilita suporte a Device Plugins. |
|
|
Suporta contêineres Windows HostProcess. |
|
|
Desativa a geração automática de tokens ServiceAccount baseados em Secrets. |
Atingindo Beta no Kubernetes 1.26
|
Feature gate |
Descrição |
|
|
Cria um lease para cada servidor de API ativo no kube-system. |
|
|
Após adicionar a taint |
|
|
Permite mais caminhos de busca DNS e uma lista de caminhos de busca DNS mais longa. Requer suporte do runtime de contêiner. |
|
|
Permite que o kube-proxy lide com endpoints em encerramento quando |
|
|
Adiciona a condição |
|
|
Atinge Beta. Consulte Handling retriable and non-retriable pod failures with Pod failure policy. |
|
|
Aloca automaticamente uma StorageClass padrão para PVCs existentes que não possuem nenhuma. Ativada por padrão. |
Adicionadas em Alfa no Kubernetes 1.26
|
Feature gate |
Descrição |
|
|
Configura a política de despejo de pods não saudáveis para um PodDisruptionBudget. |
|
|
Habilita a API de alocação dinâmica de recursos para gerenciar recursos com parâmetros personalizados. |
|
|
Configura ordinais iniciais do StatefulSet. |
|
|
Usa expressões CEL para implementar controladores de admissão extensíveis. |
|
|
Habilita o endpoint |
|
|
Adiciona o rótulo |
Melhorias de segurança do ACK
O ACK restringiu as permissões de acesso nos seguintes arquivos de configuração do Kubernetes para clusters que executam o Kubernetes 1.26 e posterior.
|
Caminho do arquivo |
Permissão |
|
|
600 |
|
|
600 |
|
|
600 |
|
|
600 |
|
|
600 |
|
|
600 |
|
|
600 |
|
|
600 |
|
|
600 |
|
|
600 |
|
|
600 |
|
|
600 |
|
|
600 |
|
|
600 |
|
|
600 |
|
|
600 |
|
|
600 |