Kubernetes 1.16: негізгі инновацияларға шолу

Kubernetes 1.16: негізгі инновацияларға шолу

Бүгін, сәрсенбі, орын алады Kubernetes келесі шығарылымы - 1.16. Блогымыз үшін қалыптасқан дәстүр бойынша, жаңа нұсқадағы ең маңызды өзгерістерді биыл оныншы рет айтып отырмыз.

Бұл материалды дайындау үшін пайдаланылған ақпарат алынды Kubernetes жақсартуларды бақылау кестелері, CHANGELOG-1.16 және қатысты мәселелер, тарту сұраулары және Kubernetes жақсарту ұсыныстары (KEP). Ендеше, кеттік!..

Түйіндер

К8с кластер түйіндерінің (Kubelet) жағында шын мәнінде көптеген көрнекті инновациялар (альфа нұсқасы күйінде) ұсынылған.

Біріншіден, деп аталатын «эфемерлі контейнерлер» (Эфемерлік контейнерлер), бағандардағы жөндеу процестерін жеңілдетуге арналған. Жаңа механизм бар подкасттардың аттар кеңістігінде басталатын және қысқа уақыт ішінде өмір сүретін арнайы контейнерлерді іске қосуға мүмкіндік береді. Олардың мақсаты - кез келген мәселелерді шешу және жөндеу үшін басқа бағандармен және контейнерлермен өзара әрекеттесу. Бұл мүмкіндік үшін жаңа пәрмен енгізілді kubectl debug, мәні бойынша ұқсас kubectl exec: тек контейнердегі процесті іске қосудың орнына (мысалы exec) ол контейнердегі контейнерді іске қосады. Мысалы, бұл пәрмен жаңа контейнерді подводқа қосады:

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

Эфемерлі контейнерлер (және оларды пайдалану мысалдары) туралы мәліметтерді мына жерден табуға болады сәйкес KEP. Ағымдағы енгізу (K8s 1.16-да) альфа-нұсқа болып табылады және оны бета-нұсқаға көшіру критерийлерінің арасында «[Kubernetes] кемінде 2 шығарылымы үшін Эфемерлі контейнерлер API-ін сынау».

NB: Өзінің мәні және тіпті атауы бойынша мүмкіндік бұрыннан бар плагинге ұқсайды kubectl-дебагол туралы біз қазірдің өзінде жазылған. Эфемерлік контейнерлердің пайда болуымен бөлек сыртқы плагиннің дамуы тоқтатылады деп күтілуде.

Тағы бір жаңалық – PodOverhead - қамтамасыз етуге арналған бұршақтарға арналған үстеме шығындарды есептеу механизмі, ол пайдаланылатын орындау уақытына байланысты айтарлықтай өзгеруі мүмкін. Мысал ретінде авторлар бұл KEP нәтижесінде қонақ ядросын, ката агентін, init жүйесін және т.б. іске қосуды қажет ететін Kata контейнерлері пайда болады. Үстеме шығындар соншалықты үлкен болғанда, оны елемеуге болмайды, яғни оны әрі қарай квоталар, жоспарлау және т.б. үшін есепке алудың жолы болуы керек. Оны жүзеге асыру үшін PodSpec өріс қосылды Overhead *ResourceList (мәліметтермен салыстырады RuntimeClass, егер біреуі пайдаланылса).

Тағы бір назар аударарлық жаңалық түйін топологиясының менеджері (Түйін топологиясының менеджері), Kubernetes-те әртүрлі құрамдас бөліктерге арналған аппараттық ресурстарды бөлуді дәл баптау тәсілін біріздендіруге арналған. Бұл бастама әртүрлі заманауи жүйелерге (телекоммуникациялар, машиналық оқыту, қаржылық қызметтер және т.б. саласынан) жоғары өнімді параллельді есептеулерге және операцияларды орындаудағы кідірістерді азайтуға деген өсу қажеттілігінен туындады, олар үшін жетілдірілген орталық процессор және аппараттық жеделдету мүмкіндіктері. Kubernetes-тегі мұндай оңтайландырулар әртүрлі құрамдас бөліктердің (CPU менеджері, Құрылғы менеджері, CNI) арқасында қол жеткізілді және енді оларға тәсілді біріктіретін және жаңа ұқсас топологияның қосылуын жеңілдететін бірыңғай ішкі интерфейс қосылады. aware - Кубелет жағындағы компоненттер. Толығырақ - в сәйкес KEP.

Kubernetes 1.16: негізгі инновацияларға шолу
Топология менеджерінің құрамдас диаграммасы

Келесі мүмкіндік - контейнерлерді жұмыс істеп тұрған кезде тексеру (іске қосу зонд). Өздеріңіз білетіндей, іске қосылуы ұзақ уақытқа созылатын контейнерлер үшін жаңартылған мәртебе алу қиын: олар іс жүзінде жұмыс істей бастағанға дейін «өлтіріледі», немесе олар ұзақ уақыт тығырыққа тіреледі. Жаңа тексеру (шақырылған мүмкіндік қақпасы арқылы қосылған StartupProbeEnabled) бас тартады, дәлірек айтсақ, кейінге қалдырады - подключ жұмысы аяқталғанға дейін кез келген басқа тексерулердің әсерін. Осы себепті бұл функция бастапқыда аталды pod-startup liveness-probe holdoff. Басталуы ұзақ уақытты алатын подкасттар үшін салыстырмалы түрде қысқа уақыт аралықтарында күйді сұрауға болады.

Бұған қоса, RuntimeClass үшін жақсарту бірден бета күйінде қолжетімді болып, «біртексіз кластерлерді» қолдауды қосады. C RuntimeClass жоспарлау Енді әрбір түйін үшін әрбір RuntimeClass үшін қолдау қажет емес: подкасттар үшін кластер топологиясы туралы ойланбастан RuntimeClass таңдауға болады. Бұрын бұған қол жеткізу үшін - түйіндер барлық қажетті қолдауы бар түйіндерде аяқталуы үшін - NodeSelector және рұқсаттарға сәйкес ережелерді тағайындау қажет болды. IN КЭП Ол пайдалану мысалдары және, әрине, іске асыру туралы мәліметтер туралы айтады.

Желі

Kubernetes 1.16-да алғаш рет (альфа нұсқасында) пайда болған екі маңызды желілік мүмкіндіктер:

  • қолдау қос желілік стек - IPv4/IPv6 - және оған сәйкес «түсіну» тармақтар, түйіндер, қызметтер деңгейінде. Ол подкасттардан сыртқы қызметтерге дейінгі IPv4-тен IPv4-ке және IPv6-дан IPv6-ға өзара әрекеттесу мүмкіндігін, анықтамалық іске асыруды (CNI Bridge, PTP CNI және Host-Local IPAM плагиндерінде), сондай-ақ жұмыс істейтін 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#

  • Endpoint үшін жаңа API - EndpointSlice API. Ол басқару жазықтығындағы әртүрлі құрамдастарға әсер ететін қолданыстағы Endpoint API өнімділігі/масштабтау мәселелерін шешеді (аписервер, т.б., соңғы нүктелер-контроллер, kube-прокси). Жаңа API Discovery API тобына қосылады және мыңдаған түйіндерден тұратын кластердегі әрбір қызметте он мыңдаған соңғы нүктелерге қызмет көрсете алады. Бұл әрекетті орындау үшін әрбір Қызмет N нысанға салыстырылады EndpointSlice, олардың әрқайсысында әдепкі бойынша 100 соңғы нүктеден аспайды (мән конфигурацияланады). EndpointSlice API сонымен қатар оның болашақта дамуы үшін мүмкіндіктер береді: әр подкаст үшін бірнеше IP мекенжайларын қолдау, соңғы нүктелер үшін жаңа күйлер (тек қана емес) Ready и NotReady), соңғы нүктелер үшін динамикалық ішкі орнату.

Соңғы шығарылымда ұсынылған нұсқа бета нұсқасына жетті қорытындылаушыатты service.kubernetes.io/load-balancer-cleanup және әр қызметке түрімен қоса тіркеледі LoadBalancer. Мұндай қызметті жою кезінде ол барлық тиісті баланстық ресурстарды «тазалау» аяқталғанша ресурстың нақты жойылуын болдырмайды.

API машиналары

Нағыз «тұрақтандыру кезеңі» Kubernetes API сервері және онымен өзара әрекеттесу аймағында. Бұл негізінен арқасында болды арнайы енгізуді қажет етпейтіндерді тұрақты мәртебеге ауыстыру CustomResource Definitions (CRD), Kubernetes 1.7 алыс күндерінен бері бета мәртебесіне ие болды (және бұл 2017 жылдың маусымы!). Дәл осындай тұрақтандыру тиісті сипаттамаларға келді:

  • «қосалқы ресурстар» бар /status и /scale CustomResources үшін;
  • түрлендіру сыртқы webhook негізіндегі CRD нұсқалары;
  • жақында ұсынылды (K8s 1.15 ішінде) әдепкі мәндер (әдепкі) және автоматты өрісті жою (кесу) CustomResources үшін;
  • мүмкіндік OpenAPI v3 схемасын сервер жағында CRD ресурстарын тексеру үшін пайдаланылатын OpenAPI құжаттамасын жасау және жариялау үшін пайдалану.

Kubernetes әкімшілеріне бұрыннан таныс болған тағы бір механизм: қабылдау веб-хук - сондай-ақ ұзақ уақыт бойы бета күйінде қалды (K8s 1.9 бастап) және қазір тұрақты деп жарияланды.

Тағы екі мүмкіндік бета нұсқасына шықты: сервер жағы қолданылады и бетбелгілерді қарау.

Ал альфа нұсқасындағы бірден-бір маңызды жаңалық болды сәтсіздік от SelfLink — көрсетілген нысанды білдіретін және бөлігі болып табылатын арнайы URI ObjectMeta и ListMeta (яғни Кубернетестегі кез келген нысанның бөлігі). Неліктен олар одан бас тартады? Мотивация қарапайым түрде дыбыстар бұл өрістің әлі де бар болуы үшін нақты (басқа) себептердің жоқтығы ретінде. Неғұрлым формальды себептер - өнімділікті оңтайландыру (қажет емес өрісті жою арқылы) және мұндай өрісті ерекше жолмен өңдеуге мәжбүр болатын жалпы аписервердің жұмысын жеңілдету (бұл объектінің алдына қойылған жалғыз өріс. серияланады). Нағыз ескіру (бета ішінде) SelfLink Kubernetes нұсқасы 1.20, ал соңғысы - 1.21.

деректерді сақтау

Сақтау саласындағы негізгі жұмыс, бұрынғы шығарылымдардағыдай, ауданда байқалады CSI қолдауы. Мұндағы негізгі өзгерістер:

  • бірінші рет (альфа нұсқасында) пайда болды Windows жұмысшы түйіндері үшін CSI плагинін қолдау: жадпен жұмыс істеудің ағымдағы тәсілі сонымен қатар Powershell негізіндегі Microsoft корпорациясының Kubernetes ядросындағы ағаш ішіндегі плагиндерді және FlexVolume плагиндерін ауыстырады;

    Kubernetes 1.16: негізгі инновацияларға шолу
    Windows жүйесіне арналған Kubernetes жүйесінде CSI плагиндерін енгізу схемасы

  • мүмкіндік CSI көлемдерінің өлшемін өзгерту, K8s 1.12 нұсқасына қайта енгізілген, бета нұсқасына дейін өсті;
  • Ұқсас «ілгерілету» (альфадан бетаға дейін) жергілікті эфемерлі томдарды жасау үшін CSI пайдалану мүмкіндігі арқылы қол жеткізілді (CSI кірістірілген көлемді қолдау).

Kubernetes-тің алдыңғы нұсқасында енгізілген көлемді клондау функциясы (қолданыстағы ПВХ ретінде пайдалану DataSource жаңа ПВХ жасау үшін) енді бета мәртебесін алды.

Жоспарлаушы

Жоспарлаудағы екі маңызды өзгеріс (екеуі де альфада):

  • EvenPodsSpreading - мүмкіндік жүктерді «әділ бөлу» үшін логикалық қолданбалы бірліктердің орнына подкасттарды пайдаланыңыз (мысалы, Deployment және ReplicaSet) және осы үлестірімді реттеу (қатты талап немесе жұмсақ жағдай, яғни басымдық ретінде). Мүмкіндік қазіргі уақытта опциялармен шектелген жоспарланған подкасттардың бар тарату мүмкіндіктерін кеңейтеді PodAffinity и PodAntiAffinity, әкімшілерге осы мәселеде жақсырақ бақылау береді, бұл жоғары қолжетімділікті және оңтайландырылған ресурстарды тұтынуды білдіреді. Толығырақ - в КЭП.
  • Пайдаланыңыз BestFit саясаты в RequestedToCapacityRatio басымдылық функциясы мүмкіндік береді pod жоспарлау кезінде қолданыңыз қоқыс жәшігін орау Негізгі ресурстарға (процессор, жад) және кеңейтілген ресурстарға (GPU сияқты) арналған («контейнерлерге орау»). Қосымша мәліметтер алу үшін қараңыз КЭП.

    Kubernetes 1.16: негізгі инновацияларға шолу
    Бөлшектерді жоспарлау: ең қолайлы саясатты қолданбас бұрын (тікелей әдепкі жоспарлаушы арқылы) және оны пайдаланумен (жоспарлаушы кеңейткіш арқылы)

Сонымен қатар, ұсынылған негізгі Kubernetes дамыту ағашынан (ағаштан тыс) тыс жоспарлаушы үшін жеке плагиндер жасау мүмкіндігі.

Басқа өзгерістер

Сондай-ақ Kubernetes 1.16 шығарылымында оны атап өтуге болады үшін бастама әкелу қол жетімді көрсеткіштер толық тәртіпте, дәлірек айтқанда, сәйкес ресми ережелер K8s аспаптарына. Олар негізінен сәйкес келеді Прометей құжаттары. Сәйкессіздіктер әртүрлі себептермен туындады (мысалы, кейбір көрсеткіштер ағымдағы нұсқаулар пайда болғанға дейін жасалған) және әзірлеушілер «Прометей экожүйесінің қалған бөлігіне сәйкес» бәрін бір стандартқа келтіру уақыты келді деп шешті. Бұл бастаманың ағымдағы іске асырылуы альфа күйінде, ол Kubernetes-тің келесі нұсқаларында бета (1.17) және тұрақты (1.18) нұсқаларында біртіндеп көтерілетін болады.

Сонымен қатар, келесі өзгерістерді атап өтуге болады:

  • Windows әзірлеуді қолдау с пайда болуы Осы ОЖ үшін Kubeadm утилиталары (альфа нұсқасы), мүмкіндік RunAsUserName Windows контейнерлері үшін (альфа нұсқасы), жақсарту Топтық басқарылатын қызмет тіркелгісі (gMSA) бета нұсқасына дейін қолдау көрсетеді, қолдау көрсету vSphere көлемдеріне орнату/тіркеу.
  • Қайта өңделген API жауаптарындағы деректерді қысу механизмі. Бұрын бұл мақсаттар үшін HTTP сүзгісі қолданылған, ол әдепкі бойынша оның қосылуына кедергі келтіретін бірқатар шектеулер енгізді. «Мөлдір сұрауды қысу» енді жұмыс істейді: клиенттер жіберу Accept-Encoding: gzip тақырыбында, егер оның өлшемі 128 Кбайттан асса, олар GZIP арқылы қысылған жауапты алады. Go клиенттері қысуды автоматты түрде қолдайды (қажетті тақырыпты жіберу), сондықтан олар трафиктің азайғанын бірден байқайды. (Басқа тілдер үшін шамалы өзгертулер қажет болуы мүмкін.)
  • Мүмкін болды сыртқы көрсеткіштерге негізделген HPA-ны/нөлге дейінгі аралықтарды масштабтау. Нысандарға/сыртқы көрсеткіштерге негізделген масштабтасаңыз, жұмыс жүктемелері бос тұрғанда ресурстарды сақтау үшін автоматты түрде 0 көшірмеге дейін масштабтауға болады. Бұл мүмкіндік әсіресе жұмысшылар GPU ресурстарын сұрайтын және жұмыс істемейтін жұмысшылардың әртүрлі түрлерінің саны қолжетімді GPU санынан асатын жағдайларда пайдалы болуы керек.
  • Жаңа клиент - k8s.io/client-go/metadata.Client — объектілерге «жалпыланған» қол жеткізу үшін. Ол метадеректерді оңай алуға арналған (яғни metadata) кластерлік ресурстардан және олармен қоқыс жинау және квота операцияларын орындау.
  • Kubernetes құрастырыңыз енді сіз аласыз бұрынғы («кіріктірілген» ағаш ішіндегі) бұлт провайдерлері жоқ (альфа нұсқасы).
  • kubeadm утилитасына қосылды эксперименттік (альфа нұсқасы) операциялар кезінде теңшеу патчтарын қолдану мүмкіндігі init, join и upgrade. Жалауды пайдалану туралы көбірек біліңіз --experimental-kustomize, қараңыз КЭП.
  • Аписерверге арналған жаңа соңғы нүкте - readyz, - оның дайындығы туралы ақпаратты экспорттауға мүмкіндік береді. API серверінде енді жалауша бар --maximum-startup-sequence-duration, оның қайта іске қосылуын реттеуге мүмкіндік береді.
  • Екі Azure мүмкіндіктері тұрақты деп жарияланды: қолдау қолжетімділік аймақтары (Қолжетімділік аймақтары) және аралық ресурстар тобы (RG). Сонымен қатар, Azure қосты:
  • AWS қазір бар Қолдау Windows жүйесіндегі EBS үшін және оңтайландырылған EC2 API қоңыраулары DescribeInstances.
  • Kubeadm енді тәуелсіз қоныс аударады CoreDNS нұсқасын жаңарту кезінде CoreDNS конфигурациясы.
  • Екілік және т.б. сәйкес Docker кескінінде жасадық бұл кескінді түбірлік құқықтарды қажет етпей іске қосуға мүмкіндік беретін әлемдік орындалатын. Сондай-ақ, т.б. тасымалдау кескіні тоқтатылды etcd2 нұсқасын қолдау.
  • В Cluster Autoscaler 1.16.0 негізгі кескін ретінде дистролесті пайдалануға ауысты, өнімділігі жақсарды, жаңа бұлттық провайдерлер қосылды (DigitalOcean, Magnum, Packet).
  • Қолданылған/тәуелді бағдарламалық құралдағы жаңартулар: Go 1.12.9, т.б. 3.3.15, CoreDNS 1.6.2.

PS

Біздің блогта да оқыңыз:

Ақпарат көзі: www.habr.com

пікір қалдыру