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.
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:
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.
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:
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.
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'ldiWindows 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;
Windows uchun Kubernetes-da CSI plaginlarini amalga oshirish sxemasi
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.
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), imkoniyatRunAsUserName 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 ishlanganAPI 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'lditashqi 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:
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.