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