Kubernetes 1.14: преглед на главните иновации

Kubernetes 1.14: преглед на главните иновации

Оваа вечер се одвива следното издание на Kubernetes - 1.14. Според традицијата што се разви за нашиот блог, зборуваме за клучните промени во новата верзија на овој прекрасен производ со отворен код.

Информациите што се користат за подготовка на овој материјал се земени од Табели за следење подобрувања на Кубернет, CHANGELOG-1.14 и сродни прашања, барања за повлекување, предлози за подобрување на Kubernetes (KEP).

Да почнеме со важен вовед од животниот циклус на кластерот SIG: динамични кластери за неуспех Kubernetes (или да бидам попрецизен, само-домаќини HA распоредувања) е сега може да се создаде користејќи познати (во контекст на кластери со еден јазол) команди kubeadm (init и join). Накратко, за ова:

  • сертификатите што ги користи кластерот се пренесуваат во тајни;
  • за можноста за користење на etcd кластерот во кластерот K8s (т.е. ослободување од претходно постоечката надворешна зависност) etcd-оператор;
  • Ги документира препорачаните поставки за надворешен баланс на оптоварување кој обезбедува конфигурација толерантна за грешки (во иднина се планира да се елиминира оваа зависност, но не во оваа фаза).

Kubernetes 1.14: преглед на главните иновации
Архитектура на Kubernetes HA кластер создаден со kubeadm

Детали за имплементацијата може да се најдат во предлог дизајн. Оваа функција беше навистина долгоочекувана: алфа верзијата се очекуваше назад во K8s 1.9, но се појави дури сега.

API

Тим apply и генерално управување со декларативни објекти помина на kubectl во apiserver. Самите програмери накратко ја објаснуваат својата одлука велејќи го тоа kubectl apply - фундаментален дел од работата со конфигурации во Kubernetes, сепак, „тоа е полн со грешки и тешко се поправа“, и затоа оваа функционалност треба да се врати во нормала и да се пренесе на контролната рамнина. Едноставни и јасни примери на проблеми кои постојат денес:

Kubernetes 1.14: преглед на главните иновации

Детали за имплементацијата се во KEP. Моменталната подготвеност е алфа (промоција во бета се планира за следното издание на Кубернетс).

Достапно во алфа верзија можност користејќи ја шемата OpenAPI v3 за креирање и објавување OpenAPI документација за CustomResources (CR) се користи за валидација (од страна на серверот) K8s дефинирани од корисникот ресурси (CustomResourceDefinition, CRD). Објавувањето OpenAPI за CRD им овозможува на клиентите (на пр. kubectl) изврши валидација на ваша страна (во рамките на kubectl create и kubectl apply) и издава документација според шемата (kubectl explain). Детали - во KEP.

Претходно постоечки логови сега се отвораат со знаме O_APPEND (но не O_TRUNC) за да се избегне губење на трупци во некои ситуации и за погодност за скратување на трупци со надворешни алатки за ротација.

Исто така, во контекст на Kubernetes API, може да се забележи дека во PodSandbox и PodSandboxStatus додадена поле runtime_handler за снимање информации за RuntimeClass во подлогата (прочитајте повеќе за тоа во текстот за Издание на Kubernetes 1.12, каде што оваа класа се појави како алфа верзија), и во Admission Webhooks имплементирани способност да одреди кои верзии AdmissionReview тие поддржуваат. Конечно, правилата на Admission Webhooks се сега може да се ограничи степенот на нивната употреба по именски простори и кластерски рамки.

Складирање

PersistentLocalVolumes, кој имаше бета статус од објавувањето K8s 1.10, објави стабилна (GA): оваа порта за функции повеќе не е оневозможена и ќе биде отстранета во Kubernetes 1.17.

Можност користејќи променливи на околината наречени API надолу (на пример, името на подлогата) за имињата на директориумите монтирани како subPath, беше развиен - во форма на ново поле subPathExpr, кој сега се користи за одредување на саканото име на директориумот. Функцијата првично се појави во Kubernetes 1.11, но за 1.14 остана во статус на алфа верзија.

Како и со претходното издание на Kubernetes, воведени се многу значајни промени за активно развивачкиот CSI (интерфејс за складирање на контејнер):

CSI

Стана достапен (како дел од алфа верзијата) поддршка промена на големината за тома на CSI. За да го користите, ќе треба да ја овозможите повиканата порта на функции ExpandCSIVolumes, како и присуството на поддршка за оваа операција во специфичен двигател на CSI.

Друга карактеристика за CSI во алфа верзијата - можност упатете се директно (т.е. без употреба на PV/PVC) на волумените на CSI во рамките на спецификацијата на под. Ова го отстранува ограничувањето за употреба на CSI како исклучиво далечинско складирање на податоци, отворајќи им ги вратите на светот локални ефемерни волумени. За употреба (пример од документација) мора да биде овозможено CSIInlineVolume карактеристика порта.

Има напредок и во „интерните“ на Kubernetes поврзани со CSI, кои не се толку видливи за крајните корисници (администратори на системот)... Во моментов, програмерите се принудени да поддржуваат две верзии на секој додаток за складирање: една - „во стар начин“, внатре во базата на кодови K8s (во -дрво), а втората - како дел од новиот CSI (прочитајте повеќе за тоа, на пример, во тука). Ова предизвикува разбирливи непријатности кои треба да се решат додека самиот CSI се стабилизира. Не е можно едноставно да се отфрли API на внатрешни (во дрво) приклучоци поради релевантна политика на Кубернет.

Сето ова доведе до фактот дека алфа верзијата достигна процес на миграција внатрешен код за приклучок, имплементиран како во дрво, во CSI приклучоците, благодарение на што грижите на програмерите ќе се сведе на поддршка на една верзија од нивните приклучоци, а компатибилноста со старите API ќе остане и тие може да се прогласат за застарени во вообичаеното сценарио. Се очекува дека до следното издание на Kubernetes (1.15) сите приклучоци за провајдерите на облак ќе бидат мигрирани, имплементацијата ќе добие бета статус и стандардно ќе се активира во инсталациите на K8s. За детали, видете предлог дизајн. Оваа миграција резултираше и со неуспех од ограничувањата за јачина на звук дефинирани од одредени даватели на облак (AWS, Azure, GCE, Cinder).

Дополнително, поддршка за блок уреди со CSI (CSIBlockVolume) пренесен до бета верзија.

Јазли / Kubelet

Претставена алфа верзија нова крајна точка во Кубелет, наменета за повратни метрика на клучните ресурси. Општо земено, ако претходно Kubelet добиваше статистика за користење на контејнер од cAdvisor, сега овие податоци доаѓаат од околината за извршување на контејнерот преку CRI (Container Runtime Interface), но компатибилноста за работа со постари верзии на Docker е исто така зачувана. Претходно, статистиката собрани во Kubelet беше испратена преку REST API, но сега крајната точка лоцирана на /metrics/resource/v1alpha1. Долгорочна стратегија на програмери се состои е да се минимизира множеството метрики обезбедени од Kubelet. Патем, самите овие метрики сега се јавуваат не „основни метрика“, туку „метрика на ресурси“ и се опишани како „ресурси од прва класа, како што се процесорот и меморијата“.

Многу интересна нијанса: и покрај јасната предност на перформансите на крајната точка gRPC во споредба со различни случаи на користење на форматот Prometheus (видете го резултатот од еден од мерилата подолу), авторите го претпочитаа текстуалниот формат на Прометеј поради јасното водство на овој систем за следење во заедницата.

„gRPC не е компатибилен со главните мониторинг цевководи. Крајната точка ќе биде корисна само за доставување метрики до Metrics Server или за следење на компонентите што директно се интегрираат со него. Изведба на формат на текст Prometheus при користење на кеширање во Metrics Server доволно добро да го претпочитаме Прометеј пред gRPC со оглед на широкото усвојување на Прометеј во заедницата. Штом форматот OpenMetrics ќе стане постабилен, ќе можеме да им пристапиме на перформансите на gRPC со формат базиран на прото“.

Kubernetes 1.14: преглед на главните иновации
Еден од компаративните тестови за перформанси за користење на формати gRPC и Prometheus во новата крајна точка на Kubelet за метрика. Повеќе графикони и други детали може да се најдат во KEP.

Меѓу другите промени:

  • Кубелет сега (еднаш) обидувајќи се да запре контејнери во непозната состојба пред да се рестартираат и бришат операциите.
  • Кога го користите PodPresets сега до почетниот сад додаде истите информации како и за обичен контејнер.
  • Кубелет почна да користи usageNanoCores од давателот на статистика CRI и за јазли и контејнери на Windows додадена мрежна статистика.
  • Информациите за оперативниот систем и архитектурата сега се запишуваат во етикети kubernetes.io/os и kubernetes.io/arch Објекти на јазол (префрлени од бета во GA).
  • Способност да се наведе одредена група на корисници на системот за контејнери во pod (RunAsGroup, се појави во K8s 1.11) напредни пред бета (стандардно овозможено).
  • du и најдете користени во cAdvisor, заменет имплементација на Go.

CLI

Во cli-runtime и kubectl додаде -k знаменце за интеграција со приспособете (патем, неговиот развој сега се врши во посебно складиште), т.е. за обработка на дополнителни YAML-датотеки од специјални директориуми за прилагодување (за детали за нивното користење, видете KEP):

Kubernetes 1.14: преглед на главните иновации
Пример за едноставна употреба на датотеки приспособување (посложена примена на kustomize е можна во рамките на преклопувања)

Покрај тоа:

  • Додадено нов тим kubectl create cronjob, чие име зборува само за себе.
  • В kubectl logs сега можеш комбинираат знамиња -f (--follow за стриминг дневници) и -l (--selector за барање етикета).
  • кубектел предавал копирајте датотеки избрани со вајлд-карта.
  • На тимот kubectl wait додаде знаме --all да ги изберете сите ресурси во именскиот простор на наведениот тип на ресурс.

Други

Следниве способности добија стабилен (GA) статус:

  • ReadinessGate, што се користи во спецификацијата на подлогата за да се дефинираат дополнителни услови земени во предвид при подготвеноста на подлогата;
  • Поддршка за големи страници (повикана порта за функции HugePages);
  • CustomPodDNS;
  • PriorityClass API Pod Priority & Preemption.

Други промени воведени во Kubernetes 1.14:

  • Стандардна политика на RBAC веќе не дозволува пристап до API discovery и access-review корисници без автентикација (неавтентицирано).
  • Официјална поддршка за CoreDNS обезбедени Само Linux, така што кога користите kubeadm за да го распоредите (CoreDNS) во кластер, јазлите мора да работат само на Linux (nodeSelectors се користат за ова ограничување).
  • Стандардната конфигурација на CoreDNS е сега користи напред приклучок наместо полномошник. Исто така, во CoreDNS додадена ReadinessProbe, што спречува балансирање на оптоварување на соодветни (неподготвени за сервис) мешунки.
  • Во кубеадм, на фази init или upload-certs, стана возможно вчитајте ги сертификатите потребни за поврзување на новата контролна рамнина со тајната kubeadm-certs (користете го знамето --experimental-upload-certs).
  • Се појави алфа верзија за инсталации на Windows поддршка gMSA (Group Managed Service Account) - специјални сметки во Active Directory што може да се користат и од контејнери.
  • За Г.Ц.Е. активирана mTLS шифрирање помеѓу etcd и kube-apiserver.
  • Ажурирања во користен/зависен софтвер: Go 1.12.1, CSI 1.1, CoreDNS 1.3.1, Docker 18.09 поддршка во kubeadm, а минималната поддржана верзија на Docker API сега е 1.26.

PS

Прочитајте и на нашиот блог:

Извор: www.habr.com

Додадете коментар