Эtoй ночью držený další vydání Kubernetes - 1.14. Podle tradice, která se pro náš blog rozvinula, mluvíme o klíčových změnách v nové verzi tohoto úžasného produktu s otevřeným zdrojovým kódem.
Začněme důležitým úvodem ze životního cyklu clusteru SIG: dynamické clustery převzetí služeb při selhání Kubernetes (nebo přesněji řečeno nasazení HA s vlastním hostitelem) je nyní můžete vytvořit pomocí známých (v kontextu jednouzlových clusterů) příkazů kubeadm (init и join). Zkrátka k tomu:
certifikáty používané clusterem jsou převedeny do tajných klíčů;
pro možnost použití clusteru etcd uvnitř clusteru K8s (tj. zbavení se dříve existující externí závislosti) operátor etcd;
Dokumentuje doporučená nastavení pro externí nástroj pro vyrovnávání zatížení, který poskytuje konfiguraci odolnou vůči chybám (v budoucnu se plánuje odstranění této závislosti, ale ne v této fázi).
Architektura clusteru Kubernetes HA vytvořeného pomocí kubeadm
Podrobnosti o implementaci najdete v návrh. Tato funkce byla skutečně dlouho očekávaná: alfa verze byla očekávána již v K8s 1.9, ale objevila se až nyní.
API
Tým apply a obecně deklarativní správa objektůprošel z kubectl v apiserveru. Sami vývojáři své rozhodnutí stručně vysvětlují slovy kubectl apply - základní součást práce s konfiguracemi v Kubernetes, nicméně „je plná chyb a těžko se opravuje“, a proto je potřeba tuto funkcionalitu vrátit do normálu a přenést do řídicí roviny. Jednoduché a jasné příklady problémů, které dnes existují:
Podrobnosti o implementaci jsou v KEP. Aktuální připravenost je alfa (povýšení na beta je plánováno pro příští vydání Kubernetes).
K dispozici v alfa verzi příležitost pomocí schématu OpenAPI v3 vytváření a publikování dokumentace OpenAPI pro CustomResources (CR) používané k ověření (na straně serveru) uživatelem definovaných zdrojů K8 (CustomResourceDefinition, CRD). Publikování OpenAPI pro CRD umožňuje klientům (např. kubectl) provést ověření na vaší straně (v rámci kubectl create и kubectl apply) a vystavit dokumentaci podle schématu (kubectl explain). Podrobnosti - v KEP.
Již existující protokoly se nyní otevírají s vlajkou O_APPEND (ne O_TRUNC), aby se předešlo ztrátě protokolů v některých situacích a aby bylo možné protokoly zkrátit pomocí externích nástrojů pro rotaci.
Také v kontextu Kubernetes API lze poznamenat, že v PodSandbox и PodSandboxStatuspřidal pole runtime_handler zaznamenávat informace o RuntimeClass v podu (více o tom čtěte v textu o Vydání Kubernetes 1.12, kde se tato třída objevila jako alfa verze) a v Admission Webhooky implementováno schopnost určit, které verze AdmissionReview podporují. Konečně, pravidla Admission Webhooks jsou nyní lze omezit rozsah jejich využití jmennými prostory a klastrovými frameworky.
Úložný prostor
PersistentLocalVolumes, který měl od vydání status beta K8s 1.10, oznámeno stabilní (GA): tato brána funkcí již není deaktivována a bude odstraněna v Kubernetes 1.17.
Příležitost pomocí proměnných prostředí tzv Downward API (například název pod) pro názvy adresářů připojených jako subPath, byl vyvinut - v podobě nového oboru subPathExpr, který se nyní používá k určení požadovaného názvu adresáře. Tato funkce se původně objevila v Kubernetes 1.11, ale pro 1.14 zůstala ve stavu alfa verze.
Stejně jako u předchozí verze Kubernetes je zavedeno mnoho významných změn pro aktivně se vyvíjející rozhraní CSI (Container Storage Interface):
CSI
Byl k dispozici (jako součást alfa verze) podporazměna velikosti pro svazky CSI. Chcete-li jej použít, budete muset povolit tzv. bránu funkcí ExpandCSIVolumesa také dostupnost podpory pro tuto operaci v konkrétním ovladači CSI.
Další funkce pro CSI v alfa verzi - příležitost odkazují přímo (tj. bez použití PV/PVC) na objemy CSI v rámci specifikace pod. Tento odstraňuje omezení používání CSI jako výlučně vzdáleného úložiště dat, který jim otevírá dveře do světa místní efemérní objemy. K použití (příklad z dokumentace) musí být povoleno CSIInlineVolume funkce brána.
Došlo také k pokroku v „vnitřnostech“ Kubernetes souvisejících s CSI, které nejsou tak viditelné pro koncové uživatele (správce systému) ... V současné době jsou vývojáři nuceni podporovat dvě verze každého pluginu úložiště: jednu - „v starý způsob“, uvnitř kódové základny K8s (ve -stromu) a druhý - jako součást nového CSI (více o tom čtěte např zde). To způsobuje pochopitelné nepříjemnosti, které je třeba řešit, protože CSI se sama stabilizuje. Není možné jednoduše zavrhnout API interních (in-tree) pluginů z důvodu příslušné zásady Kubernetes.
To vše vedlo k tomu, že alfa verze dosáhla proces migrace interní kód pluginu, implementované jako in-tree, v CSI pluginech, díky čemuž se starosti vývojářů zredukují na podporu jedné verze jejich pluginů a zůstane zachována kompatibilita se starými API a mohou být v běžném scénáři prohlášeny za zastaralé. Očekává se, že do příštího vydání Kubernetes (1.15) budou migrovány všechny pluginy poskytovatelů cloudu, implementace obdrží stav beta a bude standardně aktivována v instalacích K8s. Podrobnosti viz návrh. Tato migrace také vyústila v selhání z objemových limitů definovaných konkrétními poskytovateli cloudu (AWS, Azure, GCE, Cinder).
Navíc podpora pro bloková zařízení s CSI (CSIBlockVolume) přestoupil do beta verze.
Uzly/Kubelet
Představena alfa verze nový koncový bod v Kubelet, určený pro návratnost klíčových zdrojů. Obecně řečeno, pokud dříve Kubelet přijímal statistiky o využití kontejnerů od cAdvisoru, nyní tato data pocházejí z prostředí kontejnerového běhu přes CRI (Container Runtime Interface), ale je zachována i kompatibilita pro práci se staršími verzemi Dockeru. Dříve byly statistiky shromážděné v Kubelet odesílány přes REST API, ale nyní se nachází koncový bod na adrese /metrics/resource/v1alpha1. Dlouhodobá strategie vývojářů Skládá se je minimalizovat sadu metrik poskytovaných Kubeletem. Mimochodem, tyto metriky samotné teď volají nikoli „základní metriky“, ale „metriky zdrojů“ a jsou popsány jako „prvotřídní zdroje, jako je procesor a paměť“.
Velmi zajímavá nuance: i přes jasnou výkonnostní výhodu koncového bodu gRPC ve srovnání s různými případy použití formátu Prometheus (viz výsledek jednoho z benchmarků níže), autoři dali přednost textovému formátu Prometheus z důvodu jasného vedení tohoto monitorovacího systému v komunitě.
„gRPC není kompatibilní s hlavními monitorovacími kanály. Koncový bod bude užitečný pouze pro doručování metrik na Metrics Server nebo monitorování komponent, které se s ním přímo integrují. Výkon textového formátu Prometheus při použití ukládání do mezipaměti na serveru Metrics Server dostatečně dobrý abychom dali přednost Prometheus před gRPC vzhledem k širokému přijetí Promethea v komunitě. Jakmile se formát OpenMetrics stane stabilnějším, budeme se moci přiblížit výkonu gRPC pomocí formátu založeného na protokolech."
Jeden ze srovnávacích testů výkonu používání formátů gRPC a Prometheus v novém koncovém bodu Kubelet pro metriky. Další grafy a další podrobnosti najdete v KEP.
Mezi další změny:
Kubelet nyní (jednou) snaží zastavit kontejnery v neznámém stavu před operacemi restartování a odstranění.
Při použití PodPresets nyní k inicializačnímu kontejneru přidal stejné informace jako u běžného kontejneru.
kubelet začal používatusageNanoCores od poskytovatele statistik CRI a pro uzly a kontejnery v systému Windows přidal statistiky sítě.
Informace o operačním systému a architektuře jsou nyní zaznamenány ve štítcích kubernetes.io/os и kubernetes.io/arch Objekty uzlů (přenesené z beta do GA).
Možnost zadat konkrétní skupinu uživatelů systému pro kontejnery v pod (RunAsGroup, objevil se v K8s 1.11) pokročilý před beta verzí (ve výchozím nastavení povoleno).
du a find použité v cAdvisor, nahrazeno on Go implementace.
CLI
V cli-runtime a kubectl přidal -k příznak pro integraci s přizpůsobit (jeho vývoj mimochodem nyní probíhá v samostatném úložišti), tzn. zpracovávat další soubory YAML ze speciálních adresářů kustomizace (podrobnosti o jejich použití viz KEP):
Příklad jednoduchého použití souboru přizpůsobení (složitější aplikace kustomize je možná v rámci překryvy)
Navíc:
Přidal nový tým kubectl create cronjob, jehož jméno mluví samo za sebe.
В kubectl logs teď můžeš kombajn vlajky -f (--follow pro protokoly streamování) a -l (--selector pro dotaz na štítek).
kubectl učil kopírovat soubory vybrané pomocí zástupného znaku.
Do týmu kubectl waitpřidal vlajka --all vyberte všechny prostředky v oboru názvů zadaného typu prostředku.
Ostatní
Následující funkce získaly stabilní stav (GA):
ReadinessGate, používané ve specifikaci podu k definování dalších podmínek, které se berou v úvahu při připravenosti podu;
Podpora velkých stránek (brána funkcí tzv HugePages);
Výchozí zásada RBAC již neumožňuje přístup k rozhraní API discovery и access-review uživatelé bez autentizace (neověřeno).
Oficiální podpora CoreDNS pokud Pouze Linux, takže při nasazení kubeadm (CoreDNS) do clusteru musí uzly běžet pouze na Linuxu (k tomuto omezení se používají nodeSelectors).
Výchozí konfigurace CoreDNS je nyní použitídopředný plugin místo proxy. Také v CoreDNS přidal ReadinessProbe, která zabraňuje vyrovnávání zátěže na vhodných (nepřipravených k provozu) pod.
V kubeadm, na fázích init nebo upload-certs, stalo možným načtěte certifikáty potřebné k připojení nové řídicí roviny k tajnému klíči kubeadm-certs (použijte příznak --experimental-upload-certs).
Pro instalace Windows se objevila alfa verze podpora gMSA (Group Managed Service Account) – speciální účty v Active Directory, které mohou využívat i kontejnery.
Pro G.C.E. aktivováno mTLS šifrování mezi etcd a kube-apiserver.
Aktualizace v používaném/závislém softwaru: Go 1.12.1, CSI 1.1, CoreDNS 1.3.1, podpora Docker 18.09 v kubeadm a minimální podporovaná verze rozhraní Docker API je nyní 1.26.