Kubernetes 1.16 - як оновитися і нічого не зламати

Kubernetes 1.16 - як оновитися і нічого не зламати

Сьогодні, 18 вересня, виходить чергова версія Kubernetes – 1.16. Як завжди на нас чекає багато покращень та новинок. Але я хотів би звернути вашу увагу на розділи Action Required файлу CHANGELOG-1.16.md. У цих розділах публікуються зміни, які можуть зламати роботу вашої програми, інструментів обслуговування кластера або вимагають внесення змін до файлів конфігурації.

Загалом вимагають ручного втручання.

Почнемо відразу зі зміни, яка, швидше за все, торкнеться всіх, хто досить довго працює з kubernetes. Kubernetes API перестав підтримувати застарілі версії ресурсів API.

Якщо хтось не знав, чи забув…Версія API ресурсу вказується у маніфесті, у полі apiVersion: apps/v1

А саме:

Тип ресурсу
Стара версія
На що треба замінити

Усі ресурси
apps/v1beta1
apps/v1beta2
apps/v1

розгортання
daemonset
replicaset
extension/v1beta1
apps/v1

networkpolicies
extensions/v1beta1
networking.k8s.io/v1

підsecuritypolicies
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-проксі
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-проксі
-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 для вказівки важливості пода.

Джерело: habr.com

Додати коментар або відгук