Kubernetes 1.16: шарҳи навовариҳои асосӣ

Kubernetes 1.16: шарҳи навовариҳои асосӣ

Имрӯз, чоршанбе, баргузор мегардад Нашри навбатии Kubernetes - 1.16. Тибқи анъанае, ки барои блоги мо таҳия шудааст, ин даҳумин солгарди мост, ки мо дар бораи тағироти назаррас дар версияи нав сухан меронем.

Маълумоте, ки барои тайёр кардани ин мавод истифода мешавад, аз он гирифта шудааст Ҷадвалҳои пайгирии такмилдиҳии Kubernetes, CHANGELOG-1.16 ва масъалаҳои марбут, дархостҳо ва пешниҳодҳои такмилдиҳии Kubernetes (KEP). Пас, биёед!..

Гиреҳҳо

Дар паҳлӯи гиреҳҳои кластери K8s (Kubelet) шумораи воқеан зиёди навовариҳои назаррас (дар ҳолати версияи алфа) пешниҳод карда мешаванд.

Аввалан, ба ном «контейнерҳои эфемерӣ» (контейнерҳои эфемерӣ), ки барои содда кардани равандҳои ислоҳи хатогиҳо дар pods пешбинӣ шудааст. Механизми нав ба шумо имкон медиҳад, ки контейнерҳои махсусро ба кор андозед, ки дар фазои номи қубурҳои мавҷуда оғоз карда, дар муддати кӯтоҳ зиндагӣ мекунанд. Мақсади онҳо ин муошират бо дигар паҳлӯҳо ва контейнерҳо барои ҳалли ҳама гуна мушкилот ва хатогиҳо мебошад. Барои ин хусусият фармони нав амалӣ карда шуд kubectl debug, аз чихати мохият ба он монанд аст kubectl exec: танҳо ба ҷои иҷро кардани раванд дар контейнер (ба монанди дар exec) он контейнерро дар як падлу ба кор меандозад. Масалан, ин фармон як контейнери навро ба pod пайваст мекунад:

kubectl debug -c debug-shell --image=debian target-pod -- bash

Тафсилот дар бораи контейнерҳои эфемерӣ (ва мисолҳои истифодаи онҳо) мумкин аст дар KEP мувофиқ. Татбиқи ҷорӣ (дар K8s 1.16) версияи алфа мебошад ва дар байни меъёрҳои интиқоли он ба версияи бета ин "озмоиши Ephemeral Containers API барои ҳадди аққал 2 нашри [Kubernetes] мебошад."

NB: Дар моҳият ва ҳатто номи худ, хусусият ба плагини аллакай мавҷудбуда шабоҳат дорад kubectl-debugки дар бораи он мо аллакай навиштааст. Интизор меравад, ки бо пайдоиши контейнерҳои эфемерӣ, таҳияи як плагини алоҳидаи беруна қатъ мегардад.

Навоварии дигар - PodOverhead - барои таъмин кардан пешбинӣ шудааст механизми ҳисоб кардани хароҷоти изофӣ барои pods, ки вобаста ба вақти истифодашаванда метавонад хеле фарқ кунад. Ба мисоли муаллифон ин KEP Дар натиҷа контейнерҳои Kata, ки кор кардани ядрои меҳмон, агенти ката, системаи init ва ғайраро талаб мекунанд. Вақте ки хароҷоти изофӣ ин қадар калон мешавад, онро нодида гирифтан мумкин нест, яъне маънои онро дорад, ки роҳи ба назар гирифтани он барои квотаҳои минбаъда, банақшагирӣ ва ғайра вуҷуд дорад. Барои ба амал баровардани он дар PodSpec майдон илова карда шуд Overhead *ResourceList (бо маълумоти дар RuntimeClass, агар яке истифода шавад).

Боз як навоварии назаррас ин аст мудири топологияи гиреҳ (Менеҷери топологияи гиреҳ), ки барои ягона кардани равиш ба танзими дақиқи тақсимоти захираҳои сахтафзор барои ҷузъҳои гуногун дар Kubernetes пешбинӣ шудааст. Ин ташаббус бо эҳтиёҷоти афзояндаи системаҳои гуногуни муосир (аз соҳаи телекоммуникатсия, омӯзиши мошинсозӣ, хидматрасонии молиявӣ ва ғайра) ба ҳисоббарории параллелӣ ва кам кардани таъхирҳо дар иҷрои амалиётҳо, ки барои онҳо CPU ва компютерҳои пешрафтаро истифода мебаранд, ба вуҷуд омадааст. имкониятҳои суръатбахшии сахтафзор. Чунин оптимизатсияҳо дар Кубернетес то ба ҳол ба шарофати ҷузъҳои ҷудогона (менеҷери CPU, мудири дастгоҳ, CNI) ба даст оварда шудаанд ва ҳоло ба онҳо интерфейси ягонаи дохилӣ илова карда мешавад, ки равишро муттаҳид мекунад ва пайвасти нави шабеҳ - ба истилоҳ топологияро осон мекунад. огоҳ - ҷузъҳои дар тарафи Kubelet. Тафсилот - дар KEP мувофиқ.

Kubernetes 1.16: шарҳи навовариҳои асосӣ
Диаграммаи ҷузъҳои Менеҷери топология

Хусусияти навбатӣ - тафтиш кардани контейнерҳо ҳангоми кор кардан (санҷиши оғозёбӣ). Тавре ки шумо медонед, барои контейнерҳое, ки ба кор андохтани онҳо муддати тӯлонӣ лозим аст, ба даст овардани мақоми муосир душвор аст: онҳо ё пеш аз он ки воқеан ба кор шурӯъ кунанд, "кушта мешаванд" ё муддати тӯлонӣ дар бунбаст мемонанд. Санҷиши нав (тавассути дарвозаи хусусият фаъол карда шудааст StartupProbeEnabled) бекор мекунад - ё дурусттараш, ба таъхир меандозад - таъсири ҳама гуна санҷишҳои дигарро то лаҳзаи ба итмом расидани кор. Аз ин сабаб, хусусият дар аввал номида шуд pod-startup liveness-probe holdoff. Барои порчаҳое, ки барои оғоз кардан вақти тӯлонӣ лозиманд, шумо метавонед дар фосилаҳои нисбатан кӯтоҳи вақт назарсанҷӣ кунед.

Илова бар ин, такмилдиҳии RuntimeClass фавран дар ҳолати бета дастрас аст ва дастгирии "кластерҳои гетерогениро" илова мекунад. C Банақшагирии RuntimeClass Ҳоло барои ҳар як гиреҳ дастгирии ҳар як RuntimeClass лозим нест: барои pods шумо метавонед RuntimeClass-ро бидуни андеша дар бораи топологияи кластер интихоб кунед. Пештар, барои ноил шудан ба ин - то ки поддонҳо дар гиреҳҳо бо дастгирии ҳама чизе, ки ба онҳо лозиманд, хотима ёбанд - ба NodeSelector ва таҳаммулпазирӣ қоидаҳои мувофиқ таъин кардан лозим буд. ДАР КИП Он дар бораи мисолҳои истифода ва, албатта, тафсилоти татбиқ сухан меравад.

Шабака

Ду хусусияти муҳими шабакавӣ, ки бори аввал (дар версияи алфа) дар Kubernetes 1.16 пайдо шуданд, инҳоянд:

  • таъмин стек шабакаи дугона - IPv4/IPv6 - ва "фаҳмиши" мувофиқи он дар сатҳи поддонҳо, гиреҳҳо, хидматҳо. Он дорои ҳамоҳангсозии IPv4-to-IPv4 ва IPv6-to-IPv6 байни подкҳо, аз подкҳо то хидматҳои беруна, татбиқи истинодҳо (дар дохили Bridge CNI, PTP CNI ва плагинҳои IPAM Host-Local), инчунин баръакс бо кластерҳои Kubernetes коркунанда мувофиқ аст. Танҳо IPv4 ё IPv6. Тафсилоти татбиқ дар КИП.

    Намунаи намоиши суроғаҳои IP-и ду намуд (IPv4 ва IPv6) дар рӯйхати подкҳо:

    kube-master# kubectl get pods -o wide
    NAME               READY     STATUS    RESTARTS   AGE       IP                          NODE
    nginx-controller   1/1       Running   0          20m       fd00:db8:1::2,192.168.1.3   kube-minion-1
    kube-master#

  • API-и нав барои Endpoint - API EndpointSlice. Он масъалаҳои иҷроиш/миқёспазирии мавҷудаи Endpoint API-ро, ки ба ҷузъҳои гуногуни ҳавопаймои идоракунӣ таъсир мерасонанд (apiserver, etcd, endpoints-controller, kube-proxy) ҳал мекунад. API-и нав ба гурӯҳи Discovery API илова карда мешавад ва метавонад ба даҳҳо ҳазор нуқтаи ниҳоии пуштибонӣ дар ҳар як хидмат дар кластере, ки аз ҳазорҳо гиреҳҳо иборат аст, хидмат расонад. Барои ин, ҳар як Хидмат ба N объект харита карда мешавад EndpointSlice, ки ҳар яки онҳо ба таври пешфарз на бештар аз 100 нуқтаи ниҳоӣ доранд (арзиш танзимшаванда аст). EndpointSlice API инчунин барои рушди ояндаи он имконият фароҳам меорад: дастгирии суроғаҳои IP-и сершумор барои ҳар як подк, ҳолати нав барои нуқтаҳои ниҳоӣ (на танҳо Ready и NotReady), зербанди динамикӣ барои нуқтаҳои ниҳоӣ.

Оне, ки дар версияи охирин пешниҳод шудааст, ба версияи бета расидааст ниҳоӣкунанданомгузорӣ шудааст service.kubernetes.io/load-balancer-cleanup ва ба ҳар як хидмат бо навъи замима карда мешавад LoadBalancer. Ҳангоми нест кардани чунин хадамот, он ҳазфи воқеии захираро то анҷоми «тозакунии» тамоми захираҳои дахлдори мувозинат пешгирӣ мекунад.

API Machinery

Марҳилаи воқеии субот дар соҳаи сервери API Kubernetes ва ҳамкорӣ бо он аст. Ин асосан ба шарофати рӯй дод ба статуей муътадил гузарондани онхое, ки ба чорй намудани махсус эхтиёч надоранд Таърифҳои CustomResources (CRD), ки аз рӯзҳои дури Kubernetes 1.7 мақоми бета доранд (ва ин моҳи июни соли 2017 аст!). Ҳамин мӯътадилшавӣ ба хусусиятҳои алоқаманд омад:

  • "сарчашмаҳо" бо /status и /scale барои CustomResources;
  • табдил версияҳо барои CRD, ки дар асоси webhook беруна;
  • ба наздикй пешниход карда шуд (дар K8s 1.15) арзишҳои пешфарз (пешфарз) ва ба таври автоматӣ бартараф кардани майдонҳо (буридани) барои CustomResources;
  • имконият бо истифода аз схемаи OpenAPI v3 барои эҷод ва нашри ҳуҷҷатҳои OpenAPI, ки барои тасдиқи захираҳои CRD дар тарафи сервер истифода мешавад.

Механизми дигаре, ки барои маъмурони Kubernetes кайҳо боз шинос шудааст: вебхук қабул - инчунин дар ҳолати бета муддати тӯлонӣ боқӣ монд (аз K8s 1.9) ва ҳоло устувор эълон карда шудааст.

Ду хусусияти дигар ба бета расидаанд: тарафи сервер татбиқ карда мешавад и хатчӯбҳоро тамошо кунед.

Ва ягона навоварии назаррас дар версияи алфа буд рад аз он SelfLink — URI махсусе, ки объекти муайяншударо ифода мекунад ва қисми он мебошад ObjectMeta и ListMeta (яъне як қисми ҳама гуна объект дар Кубернетес). Чаро онҳо онро тарк мекунанд? Ҳавасмандкунӣ бо роҳи оддӣ садо медиҳад ҳамчун мавҷуд набудани сабабҳои воқеӣ (аз ҳад зиёд) барои мавҷудияти ин соҳа. Сабабҳои бештар расмӣ ин оптимизатсияи корҳо (бо хориҷ кардани майдони нолозим) ва содда кардани кори generic-apiserver мебошанд, ки маҷбуранд чунин майдонро ба таври махсус идора кунанд (ин ягона майдонест, ки дар назди объект гузошта шудааст) серия шудааст). Кӯҳнашавии ҳақиқӣ (дар доираи бета) SelfLink бо версияи Kubernetes 1.20 рӯй медиҳад ва ниҳоӣ - 1.21.

Нигоҳдории маълумот

Корҳои асосӣ дар соҳаи нигоҳдорӣ, ба монанди нашрҳои қаблӣ, дар ин минтақа мушоҳида карда мешаванд Дастгирии CSI. Тағироти асосӣ дар ин ҷо инҳо буданд:

  • бори аввал (дар версияи алфа) пайдо шуд Дастгирии плагини CSI барои гиреҳҳои коргари Windows: тарзи кунунии кор бо нигаҳдорӣ инчунин плагинҳои дохили дарахтро дар ядрои Kubernetes ва плагинҳои FlexVolume аз Microsoft дар асоси Powershell иваз мекунад;

    Kubernetes 1.16: шарҳи навовариҳои асосӣ
    Нақшаи татбиқи плагинҳои CSI дар Kubernetes барои Windows

  • имконият тағир додани андозаи ҳаҷми CSI, ки дар K8s 1.12 муаррифӣ шудааст, ба версияи бета табдил ёфтааст;
  • Ба ин монанд "пешбурд" (аз алфа ба бета) тавассути қобилияти истифодаи CSI барои эҷоди ҳаҷмҳои эфемерии маҳаллӣ (Дастгирии ҳаҷми CSI Inline).

Дар версияи қаблии Kubernetes муаррифӣ карда шудааст функсияи клонкунии ҳаҷм (бо истифода аз PVC мавҷуда ҳамчун DataSource барои сохтани PVC нав) низ ҳоло мақоми бета гирифтааст.

Барномасоз

Ду тағироти назаррас дар банақшагирӣ (ҳарду дар алфа):

  • EvenPodsSpreading - имконият ба ҷои воҳидҳои мантиқии барнома барои "тақсимоти одилона"-и борҳо подкҳоро истифода баред (ба монанди Deployment ва ReplicaSet) ва танзими ин тақсимот (ҳамчун талаботи сахт ё ҳамчун ҳолати нарм, яъне афзалият). Хусусият имкониятҳои мавҷудаи тақсимоти подкҳои банақшагирифтаро васеъ мекунад, ки айни замон бо имконоти маҳдуд маҳдуд аст PodAffinity и PodAntiAffinity, ба маъмурон додани назорати дақиқ дар ин масъала, ки маънои дастрасии баландтар ва истеъмоли оптимизатсияи захираҳоро дорад. Тафсилот - дар КИП.
  • Истифода кунед Сиёсати BestFit в Функсияи афзалиятноки RequestedToCapacityRatio хангоми баплангирии под, ки имкон медихад истифода бурдан бастабандии бин («Бастабандӣ дар контейнерҳо») ҳам барои захираҳои асосӣ (протсессор, хотира) ва ҳам барои захираҳои васеъ (ба монанди GPU). Барои тафсилоти бештар нигаред КИП.

    Kubernetes 1.16: шарҳи навовариҳои асосӣ
    Панелҳои банақшагирӣ: пеш аз истифодаи сиёсати беҳтарин (бевосита тавассути нақшаи пешфарз) ва бо истифодаи он (тавассути васеъкунандаи нақша)

Илова бар ин, муаррифӣ қобилияти сохтани плагинҳои банақшагирии шахсии худ берун аз дарахти асосии рушди Kubernetes (берун аз дарахт).

Тағироти дигар

Инчунин дар версияи Kubernetes 1.16 онро метавон қайд кард ташаббус барои овардан метрикҳои дастрас бо тартиби пурра, аниктараш, мувофики он муқаррароти расмӣ ба асбобҳои K8s. Онҳо асосан ба мувофиқ такя мекунанд Ҳуҷҷатҳои Prometheus. Бо сабабҳои гуногун номувофиқӣ ба вуҷуд омадаанд (масалан, баъзе ченакҳо пеш аз пайдо шудани дастурҳои ҷорӣ сохта шуда буданд) ва таҳиягарон қарор доданд, ки вақти он расидааст, ки ҳама чизро ба як стандарти ягона "мутобиқи боқимондаи экосистемаи Prometheus" оварем. Татбиқи кунунии ин ташаббус дар ҳолати алфа қарор дорад, ки тадриҷан дар версияҳои минбаъдаи Kubernetes ба бета (1.17) ва устувор (1.18) пешбарӣ карда мешавад.

Илова бар ин, тағйироти зеринро метавон қайд кард:

  • Дастгирии рушди Windows с намуди зоҳирӣ Utilities Kubeadm барои ин ОС (версияи алфа), имконият RunAsUserName барои контейнерҳои Windows (версияи алфа), беҳтаршавӣ Ҳисоби хидматрасонии гурӯҳи идорашаванда (gMSA) то версияи бета дастгирӣ мекунад, дастгирӣ барои ҳаҷмҳои vSphere васл/ замима кунед.
  • Аз нав коркардшуда механизми фишурдани маълумот дар посухҳои API. Пештар, барои ин мақсадҳо филтри HTTP истифода мешуд, ки як қатор маҳдудиятҳоро ҷорӣ мекард, ки ба таври нобаёнӣ фаъол шудани онро пешгирӣ мекард. "Фишоркунии дархости шаффоф" ҳоло кор мекунад: фиристодани муштариён Accept-Encoding: gzip дар сарлавҳа, онҳо ҷавоби фишурдашудаи GZIP мегиранд, агар андозаи он аз 128 КБ зиёд бошад. Мизоҷони Go ба таври худкор фишурдасозиро дастгирӣ мекунанд (фиристодаи сарлавҳаи зарурӣ), аз ин рӯ онҳо дарҳол коҳиши трафикро пай хоҳанд бурд. (Шояд барои забонҳои дигар тағйироти ночиз лозим шавад.)
  • Мумкин шуд миқёси HPA аз / ба сифр pods дар асоси ченакҳои беруна. Агар шумо дар асоси объектҳо/метрикаҳои беруна миқёс кунед, пас вақте ки сарбории корӣ бекор аст, шумо метавонед ба таври худкор ба 0 нусхабардорӣ миқёс кунед, то захираҳоро сарфа кунед. Ин хусусият бояд махсусан барои ҳолатҳое муфид бошад, ки коргарон захираҳои GPU-ро талаб мекунанд ва шумораи намудҳои гуногуни коргарони бекор аз шумораи GPU-ҳои мавҷуда зиёд аст.
  • Муштарии нав - k8s.io/client-go/metadata.Client — барои дастрасии «умумй» ба объектхо. Он барои ба осонӣ дарёфт кардани метамаълумот (яъне зерфасли metadata) аз захираҳои кластерӣ ва ҷамъоварии ахлот ва амалиёти квота бо онҳо анҷом диҳед.
  • Кубернетесро созед акнун шумо метавонед бе провайдерҳои абрии меросӣ ("дар-дарахт" сохташуда) (версияи алфа).
  • Ба утилитаи kubeadm илова намуд қобилияти таҷрибавӣ (версияи алфа) барои татбиқи часбҳои фармоишӣ дар давоми амалиёт init, join и upgrade. Дар бораи чӣ гуна истифода бурдани парчам бештар маълумот гиред --experimental-kustomize, бубинед КИП.
  • Нуқтаи нав барои apiserver - readyz, - ба шумо имкон медиҳад, ки маълумотро дар бораи омодагии он содир кунед. Сервери API низ ҳоло парчам дорад --maximum-startup-sequence-duration, ба шумо имкон медиҳад, ки дубора оғоз кардани онро танзим кунед.
  • Дуюм хусусиятҳо барои Azure устувор эълон кард: дастгирй минтақаҳои дастрас (Минтақаҳои дастрас) ва гурӯҳи захираҳои байнисоҳавӣ (РГ). Илова бар ин, Azure илова кардааст:
  • AWS ҳоло дорад дастгирӣ барои EBS дар Windows ва оптимизатсияшуда Зангҳои API EC2 DescribeInstances.
  • Кубеадм холо мустакил аст мухочират мекунад Конфигуратсияи CoreDNS ҳангоми навсозии версияи CoreDNS.
  • Бинарӣ ва ғайра дар тасвири мувофиқи Docker кардаанд world-executable, ки ба шумо имкон медиҳад, ки ин тасвирро бидуни ниёз ба ҳуқуқи реша иҷро кунед. Инчунин, тасвири муҳоҷират ва ғайра истод Дастгирии версияи etcd2.
  • В Cluster Autoscaler 1.16.0 ба истифодаи distroless ҳамчун тасвири асосӣ гузашт, иҷрои беҳтар, провайдерҳои нави абрӣ (DigitalOcean, Magnum, Packet) илова карда шуд.
  • Навсозиҳо дар нармафзори истифодашуда/вобаста: Go 1.12.9, etcd 3.3.15, CoreDNS 1.6.2.

PS

Инчунин дар блоги мо хонед:

Манбаъ: will.com

Илова Эзоҳ