Kubernetes 1.17: visão geral das principais inovações
Ontem, 9 de dezembro, aconteceu próxima versão do Kubernetes - 1.17. Seguindo a tradição que se desenvolveu em nosso blog, falamos sobre as mudanças mais significativas na nova versão.
A comunidade Kubernetes espera por esse recurso há muito tempo - Roteamento de serviço com reconhecimento de topologia. Se KEP tem origem em outubro de 2018, e o oficial aprimoramento — 2 anos atrás, os problemas habituais (como ele) - e mais alguns anos mais velho...
A ideia geral é fornecer a capacidade de implementar roteamento “local” para serviços residentes no Kubernetes. “Localidade” neste caso significa “o mesmo nível topológico” (nível de topologia), que pode ser:
nó idêntico para serviços,
o mesmo rack de servidor,
a mesma região
o mesmo provedor de nuvem,
...
Exemplos de uso deste recurso:
economia de tráfego em instalações em nuvem com múltiplas zonas de disponibilidade (multi-AZ) - consulte. ilustração fresca usando o exemplo de tráfego da mesma região, mas AZs diferentes na AWS;
menor latência de desempenho/melhor rendimento;
um serviço fragmentado que possui informações locais sobre o nó em cada fragmento;
colocação do fluentd (ou análogos) no mesmo nó das aplicações cujos logs são coletados;
Para obter detalhes sobre como o recurso funciona e como você já pode usá-lo, leia Este artigo de um dos autores.
Suporte a pilha dupla IPv4/IPv6
Progresso significativo fixo em outro recurso de rede: suporte simultâneo para duas pilhas IP, que foi introduzido pela primeira vez em K8s 1.16. Em particular, a nova versão trouxe as seguintes alterações:
em kube-proxy implementado possibilidade de operação simultânea nos dois modos (IPv4 e IPv6);
в Pod.Status.PodIPsapareceu suporte para API descendente (ao mesmo tempo que em /etc/hosts agora eles exigem que o host adicione um endereço IPv6);
suporte de pilha dupla TIPO (Kubernetes IN Docker) e kubeadm;
Declarado estável suporte de topologia para armazenamento baseado em CSI, introduzido pela primeira vez em K8s 1.12.
Iniciativa para migração de plugins de volume para CSI - Migração CSI - alcançou a versão beta. Este recurso é fundamental para traduzir plug-ins de armazenamento existentes (na árvore) para uma interface moderna (CSI, fora da árvore) invisível para os usuários finais do Kubernetes. Os administradores de cluster só precisarão habilitar a migração CSI, após a qual os recursos e cargas de trabalho com estado existentes continuarão a “simplesmente funcionar”... mas usando os drivers CSI mais recentes em vez dos desatualizados incluídos no núcleo do Kubernetes.
No momento, a migração para drivers AWS EBS está pronta em versão beta (kubernetes.io/aws-ebs) e GCE PD (kubernetes.io/gce-pd). As previsões para outras instalações de armazenamento são as seguintes:
Conversamos sobre como o suporte de armazenamento “tradicional” em K8s chegou ao CSI em Este artigo. E a transição da migração do CSI para o status beta é dedicada a publicação separada no blog do projeto.
Além disso, outra funcionalidade significativa no contexto do CSI, que se origina (implementação alfa) no K1.17s 8, atingiu o status beta (ou seja, habilitado por padrão) na versão Kubernetes 1.12 - criando instantâneos e recuperação deles. Entre as alterações feitas no Kubernetes Volume Snapshot no caminho para a versão beta:
dividindo o sidecar do snapshot externo CSI em dois controladores,
adicionado segredo para exclusão (segredo de exclusão) como uma anotação para o conteúdo de um instantâneo de volume,
novo finalizador (finalizador) para evitar que o objeto da API de instantâneo seja excluído se houver conexões restantes.
No momento da versão 1.17, o recurso é compatível com três drivers CSI: driver CSI de disco persistente GCE, driver CSI Portworx e driver CSI NetApp Trident. Mais detalhes sobre sua implementação e uso podem ser encontrados em esta publicação no blog.
Etiquetas do provedor de nuvem
Etiquetas que automaticamente atribuído a nós e volumes criados dependendo do provedor de nuvem usado, estão disponíveis no Kubernetes como uma versão beta há muito tempo - desde o lançamento do K8s 1.2 (abril de 2016!). Dado o seu uso generalizado durante tanto tempo, os desenvolvedores decidiu, que é hora de declarar o recurso estável (GA).
Portanto, todos eles foram renomeados de acordo (por topologia):
... mas ainda estão disponíveis com seus nomes antigos (para compatibilidade com versões anteriores). No entanto, recomenda-se que todos os administradores mudem para os rótulos atuais. Documentação Relacionada K8s foi atualizado.
Motivação para implementação deste recurso (de acordo com KEP) é:
Embora o Kubernetes possa ser implantado manualmente, o padrão de fato (se não de jure) para esta operação é usar o kubeadm. Ferramentas populares de gerenciamento de sistemas, como o Terraform, contam com o kubeadm para implantação do Kubernetes. As melhorias planejadas para a API Cluster incluem um pacote combinável para inicialização do Kubernetes com kubeadm e cloud-init.
Sem uma saída estruturada, mesmo as alterações mais inócuas à primeira vista podem quebrar o Terraform, a API Cluster e outros softwares que usam os resultados do kubeadm.
Nossos planos imediatos incluem suporte (na forma de saída estruturada) para os seguintes comandos kubeadm:
alpha certs
config images list
init
token create
token list
upgrade plan
version
Ilustração de uma resposta JSON a um comando kubeadm init -o json:
Em geral, o lançamento do Kubernetes 1.17 ocorreu sob o lema “Estabilidade" Isso foi facilitado pelo fato de que muitos recursos nele (seu número total é 14) recebeu o status de GA. Entre eles:
Assistir aos favoritos - um novo tipo de evento que possui um rótulo informando que todos os objetos estão até uma determinada versão (resourceVersion) já foram processados pelo watch;
"proteção do finalizador" (Proteção do finalizador) para balanceadores de carga (verificando os recursos de serviço correspondentes antes de excluir os recursos do LoadBalancer);
otimização kube-apiserver no desempenho ao trabalhar com vários relógios monitorando conjuntos idênticos de objetos - conseguido evitando a serialização repetida dos mesmos objetos para cada observador.
Outras mudanças
A lista completa de inovações no Kubernetes 1.17, é claro, não se limita às listadas acima. Aqui estão alguns outros (e para uma lista mais completa, consulte CHANGELOG):
mudança semelhante aconteceu API EndpointSlice (também do K8s 1.16), porém por enquanto esta solução para melhorar o desempenho/escalabilidade da API Endpoint não está habilitada por padrão;