Kubernetes 1.14: visão geral das principais inovações

Kubernetes 1.14: visão geral das principais inovações

Esta noite terá mais um lançamento do Kubernetes — 1.14. De acordo com a tradição do nosso blog, falamos sobre as principais mudanças na nova versão deste maravilhoso produto Open Source.

As informações usadas para preparar este material foram retiradas de tabela de rastreamento de melhorias do Kubernetes, CHANGELOG-1.14 e dos respectivos issues, pull requests, Propostas de Melhoria do Kubernetes (KEP).

Comecemos com uma introdução importante do SIG cluster-lifecycle: clusters dinâmicos e tolerantes a falhas O Kubernetes (ou, mais precisamente, implantações HA autogeridas) agora podem ser criados com os comandos habituais (no contexto de clusters de um único nó) kubeadm (init e join). Em resumo, para isso:

  • os certificados usados pelo cluster são transferidos para os segredos;
  • para permitir o uso do etcd dentro do cluster K8s (ou seja, eliminando a dependência externa existente), foi utilizado etcd-operator;
  • as configurações recomendadas para o balanceador de carga externo que fornece uma configuração tolerante a falhas são documentadas (futuramente está prevista a possibilidade de eliminar também essa dependência, mas não neste estágio).

Kubernetes 1.14: visão geral das principais inovações
Arquitetura do cluster HA do Kubernetes, criado com kubeadm

Para mais detalhes sobre a implementação, você pode consultar proposta de design. Este recurso foi realmente esperado: a versão alfa era esperada desde o K8s 1.9, mas surgiu apenas agora.

API

Time apply e, de modo geral, gerenciamento declarativo de objetos foram extraídos do kubectl para o apiserver. Os próprios desenvolvedores explicam sua decisão dizendo que kubectl apply é uma parte fundamental do trabalho com as configurações no Kubernetes, no entanto, "está cheia de bugs e é difícil de corrigir", razão pela qual essa funcionalidade precisa ser aprimorada e transferida para o controle de planeamento. Exemplos simples e ilustrativos dos problemas existentes hoje:

Kubernetes 1.14: visão geral das principais inovações

Mais detalhes sobre a implementação estão em KEP. A prontidão atual é a versão alfa (o avanço para beta está planejado para o próximo lançamento do Kubernetes).

A versão alfa agora disponibiliza a possibilidade de usar o esquema OpenAPI v3 para criação e publicação da documentação OpenAPI para CustomResources (CR), usados para validação (no lado do servidor) de recursos K8s definidos pelo usuário (CustomResourceDefinition, CRD). A publicação do OpenAPI para CRD permite que os clientes (por exemplo, kubectl) realizem validação em seu lado (no âmbito de kubectl create e kubectl apply) e gerar documentação com o esquema (kubectl explain). Detalhes — em KEP.

Os logs existentes anteriormente agora são abertos com a flag O_APPEND (e não O_TRUNC) para evitar a perda de logs em certas situações e facilitar o truncamento dos logs por utilitários externos para rotação.

No contexto da API do Kubernetes, também se pode observar que PodSandbox e PodSandboxStatus adicionado campo runtime_handler para levar em conta informações sobre RuntimeClass no pod (mais detalhes podem ser encontrados no texto sobre o lançamento do Kubernetes 1.12, onde essa classe surgiu como versão alfa), e nos Admission Webhooks são implementadas a possibilidade de definir quais versões AdmissionReview eles suportam. Finalmente, nas regras dos Admission Webhooks agora é possível limitar o escopo de sua aplicação a namespaces e limites de cluster.

Armazenamentos

Volumes Locais Persistentes, que tinham status de versão beta desde o lançamento K8s 1.10, foram declarados estáveis (GA): esse recurso não será mais desativado e será removido no Kubernetes 1.17.

Possibilidade o uso de variáveis de ambiente do chamado Downward API (por exemplo, o nome do pod) para nomes de diretórios montados como subPath, foi aprimorado — na forma de um novo campo subPathExpr, que agora determina o nome do diretório necessário. Inicialmente, esse recurso apareceu no Kubernetes 1.11, mas permaneceu na versão alfa para 1.14.

Como na versão anterior do Kubernetes, muitas mudanças significativas foram apresentadas para o em desenvolvimento ativo CSI (Interface de Armazenamento de Contêiner):

CSI

Agora está disponível (no âmbito da versão alfa) suporte para redimensionamento de volumes CSI.Para usá-lo, será necessário ativar o recurso conhecido como ExpandCSIVolumes, bem como o suporte a essa operação no driver CSI específico.

Mais uma funcionalidade para o CSI na versão alfa — a possibilidade referenciar diretamente (ou seja, sem usar PV/PVC) volumes CSI dentro da especificação dos pods. Isso remove a limitação de usar o CSI exclusivamente como armazenamento de dados remotos, abrindo para eles as portas para o mundo dos volumes efêmeros locais.Para uso (exemplo da documentação) é necessário ativar o recurso de volume inline CSI .

Houve progresso também nas 'entranhas' do Kubernetes relacionadas ao CSI, que não são tão visíveis para os usuários finais (administradores de sistema)… Neste momento, os desenvolvedores são obrigados a manter duas versões de cada plugin de armazenamento: uma — 'do jeito antigo', dentro do código do K8s (in-tree), e a outra — no novo CSI (para mais detalhes, consulte, por exemplo, o aqui). Isso causa inconvenientes compreensíveis que precisam ser resolvidos à medida que o CSI se estabiliza. Simplesmente declarar APIs internas (in-tree) obsoletas (deprecated) não é viável devido à política correspondente do Kubernetes..

Tudo isso levou ao fato de que as versões alfa alcançaram o processo de migração do código interno dos plugins, implementados como in-tree, para plugins CSI, reduzindo assim a carga dos desenvolvedores para manter uma única versão de seus plugins, enquanto a compatibilidade com APIs anteriores será mantida, permitindo que sejam declaradas obsoletas de acordo com o cenário padrão. Espera-se que até o próximo lançamento do Kubernetes (1.15) a migração de todos os plugins de provedores de nuvem seja concluída, e a implementação receba status de versão beta e seja ativada em instalações K8s por padrão. Mais detalhes podem ser encontrados em proposta de design. Uma consequência dessa migração também foi a rejeição das restrições para volumes definidos por provedores de nuvem específicos (AWS, Azure, GCE, Cinder).

Além disso, o suporte a dispositivos de bloco com CSI (CSIBlockVolume) foi trazido

à versão beta.

Nós/Kubelet Foi apresentada a versão alfa de um novo endpoint no Kubelet, destinado afornecer métricas sobre os principais recursos. /metrics/resource/v1alpha1. De um modo geral, enquanto antes o Kubelet recebia estatísticas de uso de contêineres do cAdvisor, agora esses dados são provenientes do ambiente de execução de contêiner através do CRI (Container Runtime Interface), mantendo, no entanto, a compatibilidade com versões antigas do Docker. Anteriormente, as estatísticas coletadas no Kubelet eram fornecidas através da API REST, e agora isso é feito por meio de um endpoint localizado em . A estratégia de longo prazo dos desenvolvedores é minimizar o conjunto de métricas fornecidas pelo Kubelet. Aliás, essas métricas agora são chamadas de 'resource metrics', em vez de 'core metrics', e descrevem como 'recursos de primeira classe, como CPU e memória'.

Uma nuance bastante interessante: apesar da clara vantagem de desempenho do endpoint gRPC em comparação com vários casos de uso do formato Prometheus o resultado de um dos benchmarks está abaixo), os autores preferiram o formato de texto do Prometheus devido à clara liderança deste sistema de monitoramento na comunidade.

«gRPC não é compatível com os principais pipelines de monitoramento. O Endpoint será útil apenas para fornecer métricas ao Metrics Server ou componentes de monitoramento que se integram diretamente a ele. Ao usar o cache no Metrics Server, o desempenho do formato de texto Prometheus é bastante bom para nós, preferirmos Prometheus em vez de gRPC, dada a ampla aceitação do Prometheus na comunidade. Quando o formato OpenMetrics se tornar mais estável, poderemos nos aproximar do desempenho do gRPC usando o formato baseado em proto».

Kubernetes 1.14: visão geral das principais inovações
Um dos testes comparativos de desempenho entre os formatos gRPC e Prometheus no novo endpoint do Kubelet para métricas. Mais gráficos e outros detalhes podem ser encontrados em KEP.

Entre outras mudanças:

CLI

foi adicionado o sinalizador -k para integração com kustomize (a propósito, seu desenvolvimento agora é feito em um repositório separado), ou seja, para processar arquivos YAML adicionais de diretórios especiais de kustomization (detalhes sobre seu uso podem ser encontrados em Exemplo de uso simples do arquivo KEP):

Kubernetes 1.14: visão geral das principais inovações
kustomization (também é possível uma aplicação mais complexa do kustomize dentro de overlays Além disso:)

nova comando

O status estável (GA) foi obtido para os seguintes recursos:

ReadinessGate

Outras mudanças apresentadas no Kubernetes 1.14:

  • A política RBAC padrão não concede mais acesso à API discovery e access-review para usuários sem autenticação (unauthenticated).
  • O suporte oficial ao CoreDNS é fornecido apenas para Linux, portanto, ao usar kubeadm para a implantação (do CoreDNS) no cluster, os nós devem operar somente no Linux (para essa limitação são utilizados os nodeSelectors).
  • A configuração padrão do CoreDNS agora usa o plugin forward em vez de proxy. Além disso, no CoreDNS foi adicionada readinessProbe, impedindo a distribuição de carga para os respectivos pods (não prontos para serviço).
  • No kubeadm, nas fases init ou upload-certs, agora é possível fazer upload de certificados necessários para conectar o novo control-plane ao segredo kubeadm-certs (o flag utilizado é --experimental-upload-certs).
  • Para instalações no Windows, uma versão alfa do suporte gMSA (Group Managed Service Account) — contas de serviço especiais no Active Directory que podem ser usadas por contêineres.
  • Para GCE ativaram criptografia mTLS entre etcd e kube-apiserver.
  • Atualizações no software utilizado/dependente: Go 1.12.1, CSI 1.1, CoreDNS 1.3.1, suporte ao Docker 18.09 no kubeadm, e a versão mínima do API do Docker suportada tornou-se 1.26.

P.S.

Confira também em nosso blog:

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster