Kubernetes 1.16 — как обновиться и ничего не сломать

uuua3-nqrao9wpxzikf0qv5c5_q.png

Сегодня, 18 сентября, выходит очередная версия Kubernetes — 1.16. Как всегда нас ждет много улучшений и новинок. Но я хотел бы обратить ваше внимание на разделы Action Required файла CHANGELOG-1.16.md. В этих разделах публикуются изменения, которые могут сломать работу вашего приложения, инструментов по обслуживанию кластера или требуют внесения изменений в файлы конфигурации.

В общем, требуют ручного вмешательства…
Начнем сразу с изменения, которое, скорее всего, затронет всех, кто достаточно долго работает с kubernetes. Kubernetes API перестал поддерживать устаревшие версии API ресурсов.

Если кто не знал, или забыл…

Версия API ресурса указывается в манифесте, в поле apiVersion: apps/v1


А именно:
Также хочу обратить внимание, что у объектов типа Ingress также сменился apiVersion на networking.k8s.io/v1beta1. Старое значение extensions/v1beta1 еще поддерживается, но есть хороший повод заодно обновить и эту версию в манифестах.

Достаточно много изменений в различных системных метках (Node labels), которые устанавливаются на узлы.

Kubelet запретили устанавливать произвольные метки (раньше их можно было задавать через ключи запуска kubelet --node-labels), оставили только вот этот список разрешенных:

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/*


Метки beta.kubernetes.io/metadata-proxy-ready, beta.kubernetes.io/metadata-proxy-ready and beta.kubernetes.io/kube-proxy-ds-ready больше не добавляются на новые узлы, и различные дополнительные компоненты стали использовать немного другие метки в качестве node selector:
kubeadm теперь удаляет за собой файл начальной конфигурации кублета bootstrap-kubelet.conf. Если ваши инструменты обращались к этому файлу, то переключитесь на использование kubelet.conf, в котором хранятся актуальные настройки доступа.

Cadvisor больше не отдает метрики pod_name и container_name, если вы использовали их в Prometheus, переходите на метрики pod и container соответственно.

Убрали ключи командой строки:

Шедулер стал использовать версию v1beta1 Event API. Если вы используете сторонние инструменты для взаимодействия с Event API, переключитесь на актуальную версию.

Минутка юмора. В процессе подготовки релиза 1.16 были сделаны следующие изменения:

  • убрали аннотацию scheduler.alpha.kubernetes.io/critical-pod в версии v1.16.0-alpha.1
  • вернули аннотацию scheduler.alpha.kubernetes.io/critical-pod в версии v1.16.0-alpha.2
  • убрали аннотацию scheduler.alpha.kubernetes.io/critical-pod в версии v1.16.0-beta.1


Используйте поле spec.priorityClassName для указания важности пода.

© Habrahabr.ru