Kubernetes 1.16 – como atualizar sem quebrar nada

Kubernetes 1.16 – como atualizar sem quebrar nada

Hoje, 18 de setembro, é lançada a próxima versão do Kubernetes - 1.16. Como sempre, muitas melhorias e novos produtos nos aguardam. Mas gostaria de chamar sua atenção para as seções de Ação Requerida do arquivo CHANGELOG-1.16.md. Estas seções publicam alterações que podem danificar seu aplicativo, ferramentas de manutenção de cluster ou exigir alterações nos arquivos de configuração.

Em geral, requerem intervenção manual...

Vamos começar imediatamente com uma mudança que provavelmente afetará todos que já trabalham com kubernetes há tempo suficiente. A API Kubernetes não oferece mais suporte a versões de API de recursos legados.

Se alguém não sabia ou esqueceu...A versão API do recurso está indicada no manifesto, no campo apiVersion: apps/v1

A saber:

Tipo de recurso
Versão antiga
O que deve ser substituído por

Todos os recursos
aplicativos/v1beta1
aplicativos/v1beta2
apps / v1

Implantações
conjunto de daemons
conjunto de réplicas
extensão/v1beta1
apps / v1

políticas de rede
extensões/v1beta1
networking.k8s.io/v1

políticas de segurança de pod
extensões/v1beta1
política/v1beta1

Gostaria também de chamar a atenção para o fato de que objetos do tipo Ingress também mudou apiVersion em networking.k8s.io/v1beta1. Significado antigo extensions/v1beta1 ainda é compatível, mas há um bom motivo para atualizar esta versão nos manifestos ao mesmo tempo.

Há muitas mudanças em vários rótulos do sistema (rótulos de nó) instalados nos nós.

Kubelet foi proibido de definir rótulos arbitrários (anteriormente eles podiam ser definidos por meio de teclas de inicialização kubelet --node-labels), eles deixaram apenas esta lista permitido:

kubernetes.io/hostname
kubernetes.io/instance-type
kubernetes.io/os
kubernetes.io/arch

beta.kubernetes.io/instance-type
beta.kubernetes.io/os
beta.kubernetes.io/arch

failure-domain.beta.kubernetes.io/zone
failure-domain.beta.kubernetes.io/region

failure-domain.kubernetes.io/zone
failure-domain.kubernetes.io/region

[*.]kubelet.kubernetes.io/*
[*.]node.kubernetes.io/*

etiquetas beta.kubernetes.io/metadata-proxy-ready, beta.kubernetes.io/metadata-proxy-ready e beta.kubernetes.io/kube-proxy-ds-ready não são mais adicionados a novos nós, e vários componentes adicionais começaram a usar rótulos ligeiramente diferentes como seletores de nós:

Componente
Rótulo antigo
Rótulo atual

proxy kube
beta.kubernetes.io/kube-proxy-ds-ready
node.kubernetes.io/kube-proxy-ds-ready

agente de máscara ip
beta.kubernetes.io/masq-agent-ds-ready
node.kubernetes.io/masq-agent-ds-ready

proxy de metadados
beta.kubernetes.io/metadata-proxy-ready
cloud.google.com/metadata-proxy-ready

kubeadm agora remove o arquivo de configuração inicial do kublet por trás dele bootstrap-kubelet.conf. Se suas ferramentas estavam acessando este arquivo, passe a usar kubelet.conf, que armazena as configurações de acesso atuais.

Cadvisor não fornece mais métricas pod_name и container_namese você os usou no Prometheus, vá para métricas pod и container respectivamente.

Removidas as chaves com o comando de linha:

Componente
Chave retraída

hiperkubo
--make-link simbólico

proxy kube
--resource-container

O agendador começou a usar a versão v1beta1 da API Event. Se você usa ferramentas de terceiros para interagir com a API de eventos, mude para a versão mais recente.

Um momento de humor. Durante a preparação da versão 1.16, foram feitas as seguintes alterações:

  • removeu a anotação scheduler.alpha.kubernetes.io/critical-pod na versão v1.16.0-alpha.1
  • retornou a anotação scheduler.alpha.kubernetes.io/critical-pod na versão v1.16.0-alpha.2
  • removeu a anotação scheduler.alpha.kubernetes.io/critical-pod na versão v1.16.0-beta.1

Utilize o campo spec.priorityClassName para indicar a importância do pod.

Fonte: habr.com

Adicionar um comentário