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

в 15:57, , рубрики: 1.16, devops, kubeadm, kubernetes, update, Блог компании Southbridge

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

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

В общем, требуют ручного вмешательства…

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

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

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

А именно:

Тип ресурса Старая версия На что надо заменить
Все ресурсы apps/v1beta1
apps/v1beta2
apps/v1
deployments
daemonset
replicaset
extension/v1beta1 apps/v1
networkpolicies extensions/v1beta1 networking.k8s.io/v1
podsecuritypolicies extensions/v1beta1 policy/v1beta1

Также хочу обратить внимание, что у объектов типа 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:

Компонент Старая метка Актуальная метка
kube-proxy beta.kubernetes.io/kube-proxy-ds-ready node.kubernetes.io/kube-proxy-ds-ready
ip-mask-agent beta.kubernetes.io/masq-agent-ds-ready node.kubernetes.io/masq-agent-ds-ready
metadata-proxy beta.kubernetes.io/metadata-proxy-ready cloud.google.com/metadata-proxy-ready

kubeadm теперь удаляет за собой файл начальной конфигурации кублета bootstrap-kubelet.conf. Если ваши инструменты обращались к этому файлу, то переключитесь на использование kubelet.conf, в котором хранятся актуальные настройки доступа.

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

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

Компонент Убранный ключ
hyperkube --make-symlink
kube-proxy --resource-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 для указания важности пода.

Автор: LuckySB

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js