Kubernetes 1.16 — jak zaktualizować i niczego nie zepsuć

Kubernetes 1.16 — jak zaktualizować i niczego nie zepsuć

Dziś, 18 września, ukazuje się kolejna wersja Kubernetes - 1.16. Jak zawsze możemy oczekiwać wielu ulepszeń i nowości. Chciałbym jednak zwrócić uwagę na sekcje Action Required w pliku CHANGELOG-1.16.md. W tych sekcjach publikowane są zmiany, które mogą zakłócić działanie Twojej aplikacji, narzędzi do zarządzania klastrem lub wymagają wprowadzenia zmian w plikach konfiguracyjnych.

Generalnie wymagają one ręcznej interwencji…

Zacznijmy od zmiany, która najprawdopodobniej dotknie wszystkich, którzy pracują z kubernetes od dłuższego czasu. API Kubernetes przestało wspierać przestarzałe wersje API zasobów.

Jeśli ktoś nie wiedział, lub zapomniał…Wersja API zasobu jest podawana w manifeście, w polu apiVersion: apps/v1

A mianowicie:

Typ zasobu
Stara wersja
Na co trzeba wymienić

Wszystkie zasoby
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

Chcę też zwrócić uwagę, że obiekty typu Ingress zmieniły się również apiVersion na networking.k8s.io/v1beta1. Stara wartość extensions/v1beta1 wciąż jest wspierana, ale jest dobry powód, aby również zaktualizować tę wersję w manifestach.

Jest wiele zmian w różnych etykietach systemowych (Node labels), które są ustawiane na węzłach.

Kubelet zablokował możliwość ustawiania dowolnych etykiet (wcześniej można je było ustawiać za pomocą flagi uruchamiania kubelet --node-labels), pozostawiając tylko tę listę dozwolonych:

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/*

Tagi beta.kubernetes.io/metadata-proxy-ready, beta.kubernetes.io/metadata-proxy-ready oraz beta.kubernetes.io/kube-proxy-ds-ready nie są już dodawane do nowych węzłów, a różne dodatkowe komponenty zaczęły używać nieco innych etykiet jako selektora węzłów:

Komponent
Stara etykieta
Aktualna etykieta

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 teraz usuwa za sobą plik początkowej konfiguracji kubeleta bootstrap-kubelet.conf. Jeśli Twoje narzędzia odnosiły się do tego pliku, przełącz się na użycie kubelet.conf, w którym przechowywane są aktualne ustawienia dostępu.

Cadvisor nie zwraca już metryk pod_name i container_name, jeśli używałeś ich w Prometheus, przejdź na metryki pod i container odpowiednio.

Usunięto klucze argumentów linii poleceń:

Komponent
Usunięty klucz

hyperkube
—make-symlink

kube-proxy
—resource-container

Scheduler zaczął korzystać z wersji v1beta1 Event API. Jeśli używasz narzędzi innych firm do interakcji z Event API, przełącz się na aktualną wersję.

Chwila humoru. W trakcie przygotowań do wydania 1.16 wprowadzono następujące zmiany:

  • usunięto adnotację scheduler.alpha.kubernetes.io/critical-pod w wersji v1.16.0-alpha.1
  • przywrócono adnotację scheduler.alpha.kubernetes.io/critical-pod w wersji v1.16.0-alpha.2
  • usunięto adnotację scheduler.alpha.kubernetes.io/critical-pod w wersji v1.16.0-beta.1

Użyj pola spec.priorityClassName do określenia ważności poda.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster