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

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-проксі
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

Дадаць каментар