Kubernetes 1.20: что-то сломали, что-то починили

Недавно выкатили новый Kubernetes 1.20. Тема немного скандальная: K8s перестаёт работать с Docker и заменяет его на кастомную среду CRI. А что вообще хорошего и плохого в новой обнове? Давайте разбираться.

Dockershim

Сразу нужно понимать, что от него не откажутся прямо сейчас. Полноценные изменения займут время, которое могли бы тратить на багфиксы, но что имеем, то имеем.

Баг exec probe

Раньше багали таймауты exec probe. Внутри описания контейнера есть манифест подов, а в нём — раздел со сведениями, как узнать живо ли приложение и может ли обработать входящий запрос. 

До 1.20 там был баг в задающем таймаут отклика на запрос или выполнение процесса поле timeoutSeconds: exec probe не учитывал этот параметр, поэтому работал до завершения. Баг пофиксили, но бока остались.

Если timeoutSeconds: не указан в манифесте, то по дефолту таймаут — 1 секунда, поэтому потенциально положительные пробы будут отрицательными, если не уложатся в секунду.

А если вы пользуетесь Docker, процесс может работать дальше даже после таймаута. При readinessProbe этих процессов может стать очень много. 

Что ещё?

API Priority and Fairness

В альфа тесте была опция APF. Если пользовались ею в мульти-мастер кластере 1.19, то её нужно отключить. APF перевели в бету в 1.20, но не завезли совместимость с альфой. С обновление будет автоматически включена.

master-метки убрали

kubeadm по дефолту ставил на узлы с запущенными компонентами control-plane метки node-role.kubernetes.io/master и taint node-role.kubernetes.io/master:NoSchedule. Их перевели в статус устаревших и уберут. Заменят на node-role.kubernetes.io/control-plane и taint node-role.kubernetes.io/control-plane:NoSchedule.

serviceSubnet и podSubnet

Проверки этих параметров в kubeadm усилили.

Ограничения сети для сервисов

Размер сети IPv4 ограничили до /12 или меньше, для IPv6 — /108 или меньше.

Сети для подов

Сети для узлов должны быть меньше, чем сети для подов, которые теперь проверяются на совместимость с параметром --node-cidr-mask-size.

Без пароля через API — ни-ни

Теперь на сервер не получится зайти без пароля через API. Нельзя просто взять и восстановить доступ к кластеру, если через мастер добавить в ключи запуска API сервера --insecure-port 8080.

IPv4/IPv6 dual stack

Переписали реализацию сервисов. Один сервис теперь может иметь как IPv4, так и IPv6 адрес (при включении «IPv6DualStack» feature gate). Но это привело к несовместимым изменениям в API. Изменился манифест Kind: Service — вместо одного поля ipFamily теперь будет целых три: ipFamilyPolicy, ipFamilies, clusterIPs. Пишут, что большинству пользователей ничего не надо будет делать, сервисы останутся только IPv4, пока не включен соответствующий feature gate. TODO: Посмотреть, что там с Headless Service, которым в манифесте указываем clusterIP: None.

Остальное

Команда для работы с сертификатам (проверки, генерации или продления kubeadm alpha certs переименована в kubeadm certs. Старый вариант вызова еще работает, но в следующих релизах его уберут.

Анонсировали фичу GracefulNodeShutdown — при ее включении kubelet будет самостоятельно завершать все запущенные поды, при выключении узла. Соблюдая все обычные gracefulShutdown таймауты и вызывая preStop хуки.

Команда kubectl debug повышена до беты, и в ее описании появилось много различных возможностей. Запуск дополнительных эфемерных дебаг контейнеров в поде, создание копий пода и замена команды запуска. Единственная тонкость — новое название команды конфликтует с плагином debug, и теперь вместо плагина будет выполнятся встроенная команда. Если вы хотите продолжать пользоваться плагином, то его придется переименовать.

В процессе починки CVE-2020-8559 немножко усилили безопасность, что может привести к поломке работы бэкендов расширения API, таких как metrics-server или prometheus adapter.

Выпущен новый CronJob controller v2. Видимо, чинить баги старого контроллера больше не могут, и решили выпустить новый, с новыми багами. Пока в стадии альфа, так что включать его надо с помощью специального feature gate.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *