Kubernetes 1.16: Yangiliklarning diqqatga sazovor joylari

Kubernetes 1.16: Yangiliklarning diqqatga sazovor joylari

Bugun, chorshanba, amalga oshiriladi Kubernetesning keyingi versiyasi - 1.16. Blogimiz uchun ishlab chiqilgan an'anaga ko'ra, bu o'ninchi yildirki, biz yangi versiyadagi eng muhim o'zgarishlar haqida gapiramiz.

Ushbu materialni tayyorlash uchun foydalanilgan ma'lumotlardan olingan Kubernetes yaxshilanishlarini kuzatish jadvallari, CHANGELOG-1.16 va tegishli masalalar, tortish so'rovlari va Kubernetes Enhancement Proposals (KEP). Xo'sh, ketaylik!..

Tugunlar

Haqiqatan ham ko'plab muhim yangiliklar (alfa versiyasi holatida) K8s klaster tugunlari (Kubelet) tomonida taqdim etilgan.

Birinchidan, deb ataladigan narsa «vaqtinchalik konteynerlar» (Efemer konteynerlar), podlarda disk raskadrovka jarayonlarini soddalashtirish uchun mo'ljallangan. Yangi mexanizm mavjud podslarning nomlar maydonida boshlanadigan va qisqa vaqt davomida ishlaydigan maxsus konteynerlarni ishga tushirishga imkon beradi. Ularning maqsadi har qanday muammolarni hal qilish va disk raskadrovka qilish uchun boshqa podlar va konteynerlar bilan o'zaro aloqada bo'lishdir. Ushbu xususiyat uchun yangi buyruq amalga oshirildi kubectl debug, mohiyatan oʻxshash kubectl exec: faqat konteynerdagi jarayonni ishga tushirish o'rniga (masalan exec) u idishdagi konteynerni ishga tushiradi. Masalan, ushbu buyruq yangi konteynerni podkasga ulaydi:

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

Efemer konteynerlar (va ulardan foydalanish misollari) haqida batafsil ma'lumotni quyidagi sahifada topishingiz mumkin tegishli KEP. Joriy dastur (K8s 1.16 da) alfa versiyasi bo'lib, uni beta-versiyaga o'tkazish mezonlari orasida "Efemer konteynerlar API-ni kamida 2 ta [Kubernetes] nashri uchun sinovdan o'tkazish" mavjud.

NB: O'z mohiyati va hatto nomiga ko'ra, xususiyat allaqachon mavjud plaginga o'xshaydi kubectl-debugbu haqda biz allaqachon yozilgan. Efemer konteynerlarning paydo bo'lishi bilan alohida tashqi plaginni ishlab chiqish to'xtatilishi kutilmoqda.

Yana bir yangilik - PodOverhead - ta'minlash uchun mo'ljallangan podalar uchun qo'shimcha xarajatlarni hisoblash mexanizmi, bu foydalanilgan ish vaqtiga qarab katta farq qilishi mumkin. Misol tariqasida mualliflar bu KEP natijada mehmon yadrosi, kata agenti, init tizimi va boshqalarni ishga tushirishni talab qiluvchi Kata konteynerlari paydo bo'ladi. Agar qo'shimcha xarajatlar juda katta bo'lsa, uni e'tiborsiz qoldirib bo'lmaydi, ya'ni keyingi kvotalar, rejalashtirish va hokazolar uchun uni hisobga olishning bir usuli bo'lishi kerak. Uni amalga oshirish uchun PodSpec maydon qo'shildi Overhead *ResourceList (ichidagi ma'lumotlar bilan taqqoslanadi RuntimeClass, agar ulardan biri ishlatilsa).

Yana bir e'tiborga loyiq yangilik tugun topologiyasi menejeri (tugun topologiyasi menejeri), Kubernetes-dagi turli komponentlar uchun apparat resurslarini taqsimlashni nozik sozlash yondashuvini birlashtirish uchun mo'ljallangan. Ushbu tashabbus yuqori samarali parallel hisoblash va operatsiyalarni bajarishdagi kechikishlarni minimallashtirish uchun turli xil zamonaviy tizimlarga (telekommunikatsiya, mashinasozlik, moliyaviy xizmatlar va boshqalar) ehtiyojning ortib borishi bilan izohlanadi, buning uchun ular ilg'or protsessor va protsessorlardan foydalanadilar. apparat tezlashtirish imkoniyatlari. Kubernetes-dagi bunday optimallashtirishga hozirgacha bir-biridan farq qiluvchi komponentlar (CPU menejeri, Qurilma menejeri, CNI) tufayli erishildi va endi ularga yondashuvni birlashtiruvchi va yangi o'xshash - topologiya deb ataladigan ulanishni soddalashtiradigan yagona ichki interfeys qo'shiladi. xabardor - Kubelet tomonidagi komponentlar. Tafsilotlar - ichida tegishli KEP.

Kubernetes 1.16: Yangiliklarning diqqatga sazovor joylari
Topologiya menejeri komponentlar diagrammasi

Keyingi xususiyat - konteynerlarni ishlayotgan vaqtda tekshirish (ishga tushirish probi). Ma'lumki, ishga tushirish uchun uzoq vaqt talab qilinadigan konteynerlar uchun dolzarb maqomga ega bo'lish qiyin: ular amalda ishlay boshlashdan oldin yo "o'ldiriladi" yoki ular uzoq vaqt davomida boshi berk ko'chaga tushib qoladi. Yangi chek (qo'ng'iroq qilingan xususiyat eshigi orqali yoqilgan StartupProbeEnabled) boshqa tekshiruvlarning ta'sirini pod ishlay boshlagan paytgacha bekor qiladi, to'g'rirog'i, kechiktiradi. Shu sababli, xususiyat dastlab chaqirilgan pod-startup liveness-probe holdoff. Boshlash uchun uzoq vaqt talab qilinadigan podalar uchun siz nisbatan qisqa vaqt oralig'ida holatni so'rashingiz mumkin.

Bundan tashqari, RuntimeClass uchun takomillashtirish darhol beta holatida mavjud bo'lib, "heterojen klasterlarni" qo'llab-quvvatlaydi. C RuntimeClass rejalashtirish Endi har bir tugun uchun har bir RuntimeClass uchun qo'llab-quvvatlash kerak emas: pods uchun siz klaster topologiyasi haqida o'ylamasdan RuntimeClass ni tanlashingiz mumkin. Ilgari, bunga erishish uchun - podlar o'zlariga kerak bo'lgan hamma narsani qo'llab-quvvatlaydigan tugunlarda tugashi uchun - NodeSelector va tolerantlarga tegishli qoidalarni belgilash kerak edi. IN KO'RING U foydalanish misollari va, albatta, amalga oshirish tafsilotlari haqida gapiradi.

Tarmoq

Kubernetes 1.16 da birinchi marta (alfa versiyasida) paydo bo'lgan ikkita muhim tarmoq xususiyatlari:

  • qo'llab-quvvatlash ikki tarmoqli stek - IPv4/IPv6 - va podkastlar, tugunlar, xizmatlar darajasida unga mos keladigan "tushunish". U podslar oʻrtasida IPv4-to-IPv4 va IPv6-to-IPv6 oʻrtasida oʻzaro ishlash imkoniyatini oʻz ichiga oladi, podlardan tashqi xizmatlarga, mos yozuvlar ilovalari (Bridge CNI, PTP CNI va Host-Local IPAM plaginlari ichida), shuningdek ishlayotgan Kubernetes klasterlari bilan teskari mos keladi. Faqat IPv4 yoki IPv6. Amalga oshirish tafsilotlari ichida KO'RING.

    Podlar ro'yxatida ikkita turdagi (IPv4 va IPv6) IP manzillarini ko'rsatishga misol:

    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 uchun yangi API - EndpointSlice API. U boshqaruv tekisligidagi turli komponentlarga (apiserver, va hokazo, endpoints-controller, kube-proksi) ta'sir qiluvchi mavjud Endpoint API ning ishlash/miqyoslash muammolarini hal qiladi. Yangi API Discovery API guruhiga qo'shiladi va minglab tugunlardan iborat klasterdagi har bir xizmatda o'n minglab so'nggi nuqtalarga xizmat ko'rsatishi mumkin. Buning uchun har bir Xizmat N ta ob'ektga o'rnatiladi EndpointSlice, ularning har biri sukut bo'yicha 100 dan ortiq so'nggi nuqtaga ega (qiymatni sozlash mumkin). EndpointSlice API, shuningdek, uning kelajakdagi rivojlanishi uchun imkoniyatlarni taqdim etadi: har bir pod uchun bir nechta IP-manzillarni qo'llab-quvvatlash, so'nggi nuqtalar uchun yangi holatlar (nafaqat). Ready и NotReady), so'nggi nuqtalar uchun dinamik to'plam.

Oxirgi versiyada taqdim etilgani beta versiyasiga yetdi yakunlovchideb nomlangan service.kubernetes.io/load-balancer-cleanup va har bir xizmat turiga biriktirilgan LoadBalancer. Bunday xizmatni o'chirish vaqtida u barcha tegishli balanslash resurslarini "tozalash" tugaguniga qadar resursni haqiqiy o'chirishni oldini oladi.

API mashinalari

Haqiqiy "barqarorlashtirish bosqichi" Kubernetes API serveri va u bilan o'zaro aloqada. Bu, asosan, tufayli sodir bo'ldi maxsus tanishtirishga muhtoj bo'lmaganlarni barqaror holatga o'tkazish Custom Resource Definitions (CRD), Kubernetes 1.7 ning uzoq kunlaridan beri beta holatiga ega bo'lgan (va bu 2017 yil iyun!). Xuddi shu barqarorlik tegishli xususiyatlarga ham keldi:

  • "pastki manbalar" bilan /status и /scale CustomResources uchun;
  • o'zgarish tashqi webhook asosidagi CRD versiyalari;
  • yaqinda taqdim etilgan (K8s 1.15 da) standart qiymatlar (standart) va avtomatik maydonni olib tashlash (kesish) CustomResources uchun;
  • imkoniyat OpenAPI v3 sxemasidan foydalanib, server tomonida CRD resurslarini tekshirish uchun foydalaniladigan OpenAPI hujjatlarini yaratish va nashr etish.

Kubernetes ma'murlariga uzoq vaqtdan beri tanish bo'lgan yana bir mexanizm: kirish veb-huk - shuningdek, uzoq vaqt davomida beta holatida qoldi (K8s 1.9 dan beri) va hozir barqaror deb e'lon qilindi.

Yana ikkita xususiyat beta versiyasiga chiqdi: server tomoni qo'llaniladi и xatcho'plarni tomosha qiling.

Va alfa versiyasidagi yagona muhim yangilik edi rad etish от SelfLink — belgilangan ob'ektni ifodalovchi va uning bir qismi bo'lgan maxsus URI ObjectMeta и ListMeta (ya'ni Kubernetesdagi har qanday ob'ektning bir qismi). Nega ular undan voz kechishmoqda? Oddiy usulda motivatsiya tovushlar bu sohaning hali ham mavjud bo'lishi uchun haqiqiy (asosiy) sabablarning yo'qligi. Ko'proq rasmiy sabablar ishlashni optimallashtirish (keraksiz maydonni olib tashlash orqali) va bunday maydonni maxsus usulda boshqarishga majbur bo'lgan umumiy apiserverning ishini soddalashtirishdir (bu ob'ekt oldida o'rnatiladigan yagona maydon. seriyalanadi). Haqiqiy eskirish (beta ichida) SelfLink Kubernetes versiyasi 1.20 va yakuniy - 1.21 tomonidan amalga oshiriladi.

Ma'lumotlarni saqlash

Saqlash sohasidagi asosiy ishlar, avvalgi nashrlarda bo'lgani kabi, hududda ham kuzatilmoqda CSI qo'llab-quvvatlash. Bu erda asosiy o'zgarishlar quyidagilar edi:

  • birinchi marta (alfa versiyasida) paydo bo'ldi Windows ishchi tugunlari uchun CSI plaginini qo'llab-quvvatlash: saqlash bilan ishlashning joriy usuli, shuningdek, Powershell-ga asoslangan Microsoft-dan Kubernetes yadrosidagi daraxt ichidagi plaginlarni va FlexVolume plaginlarini almashtiradi;

    Kubernetes 1.16: Yangiliklarning diqqatga sazovor joylari
    Windows uchun Kubernetes-da CSI plaginlarini amalga oshirish sxemasi

  • imkoniyat CSI hajmlarining o'lchamlarini o'zgartirish, K8s 1.12 da taqdim etilgan, beta versiyasiga o'sdi;
  • Shunga o'xshash "tashviqot" (alfadan betagacha) mahalliy efemer hajmlarni yaratish uchun CSI dan foydalanish qobiliyati bilan erishildi (CSI Inline ovoz balandligini qo'llab-quvvatlash).

Kubernetesning oldingi versiyasida taqdim etilgan hajmni klonlash funktsiyasi (mavjud PVX sifatida foydalanish DataSource yangi PVX yaratish uchun) ham endi beta holatini oldi.

Rejalashtiruvchi

Rejalashtirishda ikkita sezilarli o'zgarishlar (ikkalasi ham alfada):

  • EvenPodsSpreading - imkoniyat yuklarni "adolatli taqsimlash" uchun mantiqiy dastur birliklari o'rniga podlardan foydalaning (Deployment va ReplicaSet kabi) va ushbu taqsimotni sozlash (qattiq talab yoki yumshoq holat, ya'ni ustuvorlik sifatida). Bu xususiyat hozirda variantlar bilan cheklangan rejalashtirilgan podslarning mavjud tarqatish imkoniyatlarini kengaytiradi PodAffinity и PodAntiAffinity, bu masalada ma'murlarga yanada nozik nazorat qilish imkonini beradi, bu esa yaxshi yuqori mavjudligi va optimallashtirilgan resurslar sarfini anglatadi. Tafsilotlar - ichida KO'RING.
  • foydalanish BestFit siyosati в RequestedToCapacityRatio Priority Function imkon beradi pod rejalashtirish paytida foydalanish axlat qutisiga qadoqlash Asosiy resurslar (protsessor, xotira) va kengaytirilgan manbalar (masalan, GPU) uchun (“konteynerlarga qadoqlash”). Batafsil ma'lumot uchun qarang KO'RING.

    Kubernetes 1.16: Yangiliklarning diqqatga sazovor joylari
    Rejalashtirish podkastlari: eng yaxshi moslash siyosatini ishlatishdan oldin (to'g'ridan-to'g'ri standart rejalashtiruvchi orqali) va undan foydalanish bilan (planlovchi kengaytirgich orqali)

Bundan tashqari, taqdim etiladi asosiy Kubernetes rivojlanish daraxtidan (daraxtdan tashqari) tashqarida o'z rejalashtiruvchi plaginlaringizni yaratish qobiliyati.

Boshqa o'zgarishlar

Shuningdek, Kubernetes 1.16 versiyasida buni ta'kidlash mumkin uchun tashabbus olib kelish to'liq tartibda mavjud ko'rsatkichlar, yoki aniqrog'i, mos ravishda rasmiy qoidalar K8s asboblariga. Ular asosan mos keladiganlarga tayanadilar Prometey hujjatlari. Turli sabablarga ko'ra nomuvofiqliklar paydo bo'ldi (masalan, ba'zi ko'rsatkichlar joriy ko'rsatmalar paydo bo'lishidan oldin yaratilgan) va ishlab chiquvchilar hamma narsani "Prometey ekotizimining qolgan qismiga muvofiq" yagona standartga etkazish vaqti keldi, deb qaror qilishdi. Ushbu tashabbusning joriy tatbiq etilishi alfa holatida bo'lib, u Kubernetesning keyingi versiyalarida beta (1.17) va barqaror (1.18) ga bosqichma-bosqich targ'ib qilinadi.

Bundan tashqari, quyidagi o'zgarishlarni qayd etish mumkin:

  • Windows rivojlanishini qo'llab-quvvatlash с ko'rinish Ushbu OT uchun Kubeadm yordam dasturlari (alfa versiyasi), imkoniyat RunAsUserName Windows konteynerlari uchun (alfa versiyasi), uluchsheniem Guruh tomonidan boshqariladigan xizmat hisobi (gMSA) beta versiyasigacha qo'llab-quvvatlanadi, qo'llab-quvvatlash vSphere hajmlari uchun o'rnatish/ulash.
  • Qayta ishlangan API javoblarida ma'lumotlarni siqish mexanizmi. Ilgari ushbu maqsadlar uchun HTTP filtri ishlatilgan, bu esa uni sukut bo'yicha yoqishga to'sqinlik qiladigan bir qator cheklovlarni o'rnatgan. "Shaffof so'rovni siqish" endi ishlaydi: mijozlar yuboradi Accept-Encoding: gzip sarlavhada, agar uning hajmi 128 KB dan oshsa, ular GZIP siqilgan javobni oladi. Go mijozlari avtomatik ravishda siqishni qo'llab-quvvatlaydi (kerakli sarlavhani yuboradi), shuning uchun ular trafikning qisqarishini darhol sezadilar. (Boshqa tillar uchun biroz oʻzgartirishlar talab qilinishi mumkin.)
  • Mumkin bo'ldi tashqi ko'rsatkichlar asosida HPA-ni noldan/nolgacha o'lchash. Agar siz ob'ektlar/tashqi ko'rsatkichlar asosida masshtablashtirsangiz, u holda ish yuklari bo'sh turganda resurslarni tejash uchun avtomatik ravishda 0 replikagacha o'lchashingiz mumkin. Bu xususiyat, ayniqsa, ishchilar GPU resurslarini so'ragan holatlar uchun foydali bo'lishi kerak va har xil turdagi bo'sh ishlaydiganlar soni mavjud GPUlar sonidan oshib ketadi.
  • Yangi mijoz - k8s.io/client-go/metadata.Client - ob'ektlarga "umumlashtirilgan" kirish uchun. U metama'lumotlarni osongina olish uchun mo'ljallangan (ya'ni kichik bo'lim metadata) klaster resurslaridan va ular bilan axlat yig'ish va kvota operatsiyalarini bajarish.
  • Kubernetes-ni yarating endi mumkin eski ("o'rnatilgan" daraxtda) bulutli provayderlarsiz (alfa versiyasi).
  • kubeadm yordam dasturiga qo'shilgan eksperimental (alfa versiyasi) operatsiyalar davomida moslashtirilgan yamoqlarni qo'llash qobiliyati init, join и upgrade. Bayroqdan qanday foydalanish haqida ko'proq bilib oling --experimental-kustomize, ichiga qarang KO'RING.
  • Apiserver uchun yangi so'nggi nuqta - readyz, - uning tayyorligi haqidagi ma'lumotlarni eksport qilish imkonini beradi. API serverida ham endi bayroq bor --maximum-startup-sequence-duration, uning qayta ishga tushirilishini tartibga solish imkonini beradi.
  • ikki Azure uchun xususiyatlar barqaror deb e'lon qilindi: qo'llab-quvvatlash mavjudligi zonalari (Mavjudlik zonalari) va o'zaro resurslar guruhi (RG). Bundan tashqari, Azure quyidagilarni qo'shdi:
  • AWS hozirda mavjud qo'llab-quvvatlash Windows va EBS uchun optimallashtirilgan EC2 API qo'ng'iroqlari DescribeInstances.
  • Kubeadm endi mustaqil migratsiya qiladi CoreDNS versiyasini yangilashda CoreDNS konfiguratsiyasi.
  • Ikkilik va boshqalar tegishli Docker tasvirida qildim dunyoda bajariladigan, bu tasvirni ildiz huquqlariga muhtoj bo'lmasdan ishga tushirishga imkon beradi. Shuningdek, va hokazo migratsiya tasviri to'xtatildi etcd2 versiyasini qo'llab-quvvatlash.
  • В Cluster Autoscaler 1.16.0 asosiy tasvir sifatida distroless dan foydalanishga o'tdi, ishlash yaxshilandi, yangi bulut provayderlari qo'shildi (DigitalOcean, Magnum, Packet).
  • Ishlatilgan/qaram dasturiy ta'minotdagi yangilanishlar: Go 1.12.9, etcd 3.3.15, CoreDNS 1.6.2.

PS

Shuningdek, bizning blogimizda o'qing:

Manba: www.habr.com

a Izoh qo'shish