O ACK segue rigorosamente a conformidade da comunidade Kubernetes. Este tópico descreve as alterações na versão 1.22 do ACK Kubernetes, incluindo mudanças principais, APIs beta removidas e requisitos de atualização.
Antes de atualizar
O Kubernetes 1.22 remove permanentemente várias APIs beta. Conclua estas verificações antes de atualizar: controladores ou aplicações que chamarem APIs removidas falharão.
Ações obrigatórias:
Migração de API (bloqueante): O Kubernetes 1.22 remove todas as APIs
v1beta1listadas em APIs beta removidas. Migre os recursos afetados para a versão estávelv1antes de atualizar. Objetos existentes não sofrem impacto, mas controladores ou ferramentas que chamarem APIs removidas falharão.Migração de runtime Docker: A remoção do Dockershim está prevista para o Kubernetes 1.24. Antes de atualizar para a versão 1.24, migre os nós de Docker para containerd usando o recurso de atualização de node pool. Em clusters dedicados, os nós mestres migram automaticamente. Como todos os containers são recriados, faça backup dos containers personalizados que exigem persistência de dados. Para nós Windows, continue usando o Docker EE devido às limitações do containerd nesse sistema operacional.
Sobreposição de faixa NodePort (1.22.10+): A partir do Kubernetes 1.22.10, o kube-proxy deixa de escutar nas portas de service NodePort. Se a faixa NodePort (
ServiceNodePortRangeno servidor de API) se sobrepor ànet.ipv4.ip_local_port_rangedo kernel em qualquer nó, ocorrerão falhas intermitentes de conexão TCP. Isso causa falhas em health checks e interrupções de service. Verifique se não há sobreposição antes de atualizar para a versão 1.22.10 ou posterior. Consulte How do I configure the NodePort range? e o PR da comunidade Kubernetes.Expiração de token de service account: Os tokens de service account têm validade padrão de um ano. Clientes nas versões client-go v11.0.0+ ou v0.15.0+ recarregam automaticamente os tokens rotacionados. Clientes mais antigos não fazem esse recarregamento automático e falham na autenticação após a expiração. Atualize o client-go se for afetado. Consulte [\[Product Change\] Resolve ServiceAccount token expiration issues in Kubernetes 1.22+](t2459022.xdita#).
Atualização do ingress controller: A atualização do ingress controller para a versão 1.1.0-aliyun.1 pode causar breves interrupções de service e problemas de compatibilidade de configuração. Verifique as configurações durante a atualização do componente, antes de atualizar o cluster.
CVE-2022-3172: Esta versão pode ser afetada pela CVE-2022-3172. Revise o impacto e as mitigações antes de atualizar.
Agendamento de pods em virtual nodes: A partir do Kubernetes 1.22, o agendamento de pods em virtual nodes vem ativado por padrão. Taints de virtual node, afinidade de nó no nível do pod, afinidade de pod ou restrições de distribuição de topologia afetam o agendamento. Para preservar o comportamento anterior à atualização, desative a opção Enable virtual node scheduling no kube-scheduler. Consulte Custom parameters of kube-scheduler.
Migração de PodSecurityPolicy (PSP): A remoção da PSP está prevista para o Kubernetes 1.25. O admission controller de segurança de pod vem ativado por padrão no ACK. Inicie a migração para fora da PSP agora. Consulte Pod Security Admission e a postagem do blog sobre a descontinuação da PodSecurityPolicy.
Versões dos componentes
|
Componente |
Versão |
Notas de versão |
|
Kubernetes |
1.22.15-aliyun.1 |
Consulte Antes de atualizar e Principais alterações no Kubernetes 1.22 |
|
etcd |
3.5.1 |
Nenhuma |
|
CoreDNS |
v1.9.3.6-32932850-aliyun |
Atualização sem interrupção. Novidades: suporte a watch de EndpointSlice; consultas DNS via IPv6 |
|
CRI — Docker CE |
19.03.15 |
Nenhuma |
|
CRI — Docker EE |
Varia conforme a versão do Windows |
Nenhuma |
|
CRI — containerd |
1.4.8 |
Nenhuma |
|
CSI |
v1.26 |
Nenhuma |
|
CNI — Flannel |
0.15.1.4-e02c8f12-aliyun |
Atualização sem interrupção. Novidades: compatibilidade com APIVersion do Kubernetes 1.22 para Authorization e recursos similares; exposição de service HostPort; modo hairpin |
|
CNI — Terway |
— |
Nenhuma |
|
NVIDIA Container Runtime |
3.7.0 |
Nenhuma |
|
Ingress controller |
1.1.0-aliyun.1 |
Pode causar breves interrupções de service e problemas de compatibilidade de configuração. Verifique as configurações antes de atualizar o cluster. |
Principais alterações no Kubernetes 1.22
APIs beta removidas
Todas as versões de API v1beta1 listadas abaixo foram removidas permanentemente. Chamadas para essas APIs falham imediatamente após a atualização.
|
Recurso |
API removida |
Migrar para |
|
MutatingWebhookConfiguration, ValidatingWebhookConfiguration |
|
|
|
CustomResourceDefinition (CRD) |
|
|
|
APIService |
|
|
|
TokenReview |
|
|
|
SubjectAccessReview |
|
|
|
CertificateSigningRequest |
|
|
|
Lease |
|
|
|
Ingress, IngressClass |
|
|
|
ClusterRole, ClusterRoleBinding, Role, RoleBinding |
|
|
|
CSIDriver, CSINode, StorageClass, VolumeAttachment |
|
|
|
PriorityClass |
|
|
Descontinuações
-
O Dockershim foi descontinuado e sua remoção está prevista para o Kubernetes 1.24. Consulte EP-2221 e cri-containerd. Antes de atualizar para o Kubernetes 1.24, faça a transição dos nós baseados em Docker para um runtime não-Docker:
Planeje a capacidade (tipos e quantidade de instâncias) para os nós com runtime não-Docker com base na contagem de pods.
Escale horizontalmente os novos nós fora dos horários de pico.
Faça o drain dos nós baseados em Docker um por um. Após cada drain, verifique se os pods da aplicação se recuperaram antes de prosseguir.
Remova os nós baseados em Docker após concluir o drain de todos eles.
Alteração no comportamento do kube-proxy para NodePort (1.22.10+): A partir do Kubernetes 1.22.10, o kube-proxy deixa de escutar nas portas de service NodePort. Se a faixa NodePort (
ServiceNodePortRange) se sobrepor ànet.ipv4.ip_local_port_rangedo kernel em qualquer nó, ocorrerão falhas intermitentes de conexão TCP. Verifique se não há sobreposição antes de atualizar. Consulte How do I configure the NodePort range? e o PR da comunidade Kubernetes.
Feature gates habilitados por padrão
Os seguintes feature gates vêm habilitados por padrão no Kubernetes 1.22.
Workloads e agendamento
ImmutableEphemeralVolumes: Permite marcar ConfigMaps e Secrets como imutáveis para reduzir a carga no servidor de API. Consulte Secrets e ConfigMaps.
DaemonSetUpdateSurge: Durante uma rolling update de DaemonSet, defina
.spec.strategy.rollingUpdate.maxSurgepara controlar quantos pods podem exceder a contagem desejada. Consulte Perform a rolling update on a DaemonSet.IndexedJob: Defina
.spec.completionModecomoIndexedem um Job para atribuir a cada pod uma anotação de índice de conclusão (batch.kubernetes.io/job-completion-index) e uma variável de ambiente (JOB_COMPLETION_INDEX). Consulte Introducing Indexed Jobs.SuspendJob: Suspenda e retome um Job para controlar seu ciclo de vida. Consulte Introducing suspended Jobs.
PodDeletionCost: Influencie a ordem de terminação de pods durante o scale-down definindo um custo de exclusão. Pods com menor utilização recebem menor custo e são encerrados primeiro. Consulte ReplicaSet.
PodAffinityNamespaceSelector: Políticas de afinidade de pod suportam seleção de rótulos entre namespaces, permitindo agendamento cross-namespace mais flexível. Consulte KEP-2249.
PreferNominatedNode: O kube-scheduler prioriza os nós nomeados e avalia outros apenas quando todos os nós nomeados forem inadequados. Consulte KEP-1923.
LogarithmicScaleDown: A terminação de pods é randomizada durante o scale-down para mitigar problemas de restrição de distribuição de topologia. Consulte KEP-2185.
ProbeTerminationGracePeriod: Configure um
terminationGracePeriodSecondsno nível da probe em liveness probes para reduzir o tempo de espera antes de reiniciar um pod com falha. Consulte Configure liveness, readiness and startup probes.
Nó e runtime
GracefulNodeShutdown (apenas Linux): O kubelet recebe notificações de shutdown pendentes e encerra os pods gracefulmente dentro do período configurado. Consulte Graceful node shutdown.
MemoryManager (apenas Linux): Fornece gerenciamento de memória ciente de Non-Uniform Memory Access (NUMA) para aplicações com requisitos específicos de memória. O ACK não configura reservas de memória para este recurso. Consulte Runtime memory maps e Control CPU management policies on the node.
SizeMemoryBackedVolumes (apenas Linux): Defina o tamanho de volumes emptyDir baseados em memória usando
emptyDir.sizeLimitpara melhorar a transparência do agendamento de pods. Consulte KEP-1967.Suporte a CSI para containers Windows (estável): Em sistemas operacionais sem suporte a containers privilegiados, como Windows Server 2019 e Windows Server Core 2004, os containers Windows gerenciam o armazenamento do host por meio de um proxy CSI. Requer um plugin CSI compatível. Consulte csi-proxy.
Rede
Dual-stack IPv4/IPv6 (IPv6DualStack): Configure blocos CIDR IPv4 e IPv6 durante a criação do cluster e instale um plugin CNI com suporte a dual-stack. Consulte IPv4/IPv6 dual-stack.
NetworkPolicyEndPort: Defina uma faixa de portas em uma NetworkPolicy. Consulte Network Policies.
ServiceInternalTrafficPolicy: Roteie o tráfego interno do Service para endpoints prontos no nó local (
Local) ou em todo o cluster (Cluster). Consulte Service internal traffic policy.ServiceLoadBalancerClass: Use uma implementação personalizada de balanceador de carga. Consulte Specifying the class of load balancer implementation.
ServiceLBNodePortControl: Desative a alocação de NodePort para Services LoadBalancer definindo
.spec.allocateLoadBalancerNodePortscomofalsequando o tráfego for roteado diretamente para os pods. Consulte Disabling load balancer NodePort allocation.
Armazenamento
CSIStorageCapacity: O kube-scheduler considera a capacidade de armazenamento do nó ao agendar pods que exigem tamanhos específicos de volume. Consulte Storage Capacity.
Autenticação e API
EfficientWatchResumption: Caches baseados em watch são restaurados com mais eficiência após reinicializações do servidor de API, melhorando o desempenho de clusters em grande escala. Consulte KEP-1904.
Server-Side Apply (GA): Rastreie a origem, o horário e a operação das alterações nos campos de um recurso. Consulte Server-Side Apply.
BoundServiceAccountTokenVolume (GA): As service accounts montadas em pods usando volumes não projetados têm validade padrão de um ano. O kubelet rotaciona esses tokens automaticamente. Clientes nas versões client-go v11.0.0+ ou v0.15.0+ recarregam automaticamente os tokens do disco. Consulte a documentação do recurso.
CSRDuration: Ao enviar uma CertificateSigningRequest (CSR) com
.spec.expirationSeconds, a validade do certificado corresponderá ao menor valor entre a duração solicitada e o parâmetro--cluster-signing-durationdo controller manager. O padrão no ACK é 10 anos. Consulte Signers.
Novos recursos
Monitoramento de integridade de persistent volume (PV): Workloads podem detectar a integridade do PV, evitando leituras ou gravações em volumes defeituosos. Habilitado por padrão no ACK. Requer suporte do plugin CSI. Consulte Volume Health Monitoring.
Quality of Service (QoS) de memória baseada em cgroup v2: Diferente da CPU, a memória não pode sofrer throttling quando os recursos estão restritos. A comunidade do kernel Linux otimizou o cgroup v2 para throttling de memória. Habilitado por padrão no ACK em nós Linux com kernel suportado. Consulte memcg QoS feature of the cgroup v1 interface e 2570-memory-qos.
Containers Windows HostProcess: Execute containers privilegiados em nós Windows. Habilitado por padrão no ACK. Requer suporte do sistema operacional. Consulte What's new for Windows containers on Windows Server 2022 e Create a Windows HostProcess pod.
Memória swap do nó (desabilitado por padrão): Workloads podem usar a memória swap do nó, o que é útil para aplicações otimizadas para swap ou para melhorar a estabilidade do nó sob pressão de memória. Apenas Linux. Desabilitado por padrão no ACK. Consulte Swap memory management e KEP-2400.
Perfil seccomp padrão (desabilitado por padrão): Configure um perfil seccomp padrão para todos os workloads. Aplica
RuntimeDefaultquando habilitado. Desabilitado por padrão no ACK porque alguns workloads exigem menos restrições de syscall. Apenas Linux. Consulte Enable the use of RuntimeDefault as the default seccomp profile for all workloads.
Substituições de recursos
PodSecurityPolicy (PSP) substituída pelo admission controller de segurança de pod: A PSP foi descontinuada e sua remoção está prevista para o Kubernetes 1.25. O admission controller de segurança de pod vem habilitado por padrão no ACK. Migre os recursos da PSP no Kubernetes 1.22. Consulte Pod Security Admission e a postagem do blog sobre a descontinuação da PodSecurityPolicy.
ServiceTopology substituído por Topology Aware Hints: O campo ServiceTopology (
topologyKeysem um Service) foi descontinuado e substituído por Topology Aware Hints. Desabilitado por padrão no ACK. Se estiver habilitado, ative o Topology Aware Hints no Kubernetes 1.22 e migre. Consulte Topology Aware Hints.
Melhorias do ACK para Kubernetes 1.22
Observabilidade
Métricas adicionais de requisições de acesso ao servidor de API.
Clusters ACK Pro, ACK Serverless Pro e ACK Edge Pro agora expõem métricas essenciais dos componentes do plano de controle.
Estabilidade
As seguintes melhorias aplicam-se a todos os tipos de cluster:
Proteção da camada de armazenamento para reduzir o impacto no etcd durante cold starts.
Throttling de tráfego do servidor de API por origem, tipo ou rota da requisição para reduzir o impacto durante cold starts.
Otimizações de desempenho
kubelet: Durante uma atualização in-place, o kubelet minimiza as reinicializações de containers. Consulte kubelet's calculation of whether a container has changed can cause cluster-wide outages.
kube-proxy: Compatível com Alibaba Cloud Linux (Alinux) 2 (kernel-4.19.91-23) e posteriores. Quando o modo IPVS estiver habilitado, não defina
conn_reuse_modecomo0. Consulte [\[ipvs\] set conn_reuse_mode=1 on Linux kernel versions >=v5.9](https://github.com/kubernetes/kubernetes/issues/93297).ACK Serverless: Pods ECI não são evacuados proativamente quando um virtual node não está pronto, reduzindo o impacto nos negócios.
ACK Pro e ACK Edge Pro: O scheduler aprimorado suporta gang scheduling, consciência de topologia de CPU e consciência de topologia de GPU. Consulte Overview of ACK Pro clusters.
Correções de bugs
kube-controller-manager: Corrigido um vazamento de EndpointSlice em cenários específicos. Consulte Fixing how EndpointSlice Mirroring handles Service selector transitions.