Kubernetes 1.16: Yeniliklərin əsas məqamları

Kubernetes 1.16: Yeniliklərin əsas məqamları

Bu gün çərşənbə, yer tutur Kubernetes-in növbəti buraxılışı - 1.16. Bloqumuz üçün formalaşmış ənənəyə uyğun olaraq, bu, onuncu ildir ki, yeni versiyada ən əhəmiyyətli dəyişikliklərdən bəhs edirik.

Bu materialı hazırlamaq üçün istifadə olunan məlumatlar buradan götürülür Kubernetes təkmilləşdirmələri izləmə cədvəlləri, DƏYİŞİKLİK-1.16 və əlaqəli məsələlər, çəkmə sorğuları və Kubernetes Təkmilləşdirmə Təklifləri (KEP). Elə isə gedək!..

Düyünlər

Həqiqətən çox sayda diqqətəlayiq yeniliklər (alfa versiya statusunda) K8s klaster qovşaqlarının (Kubelet) tərəfində təqdim olunur.

Birincisi, sözdə «efemer qablar» (Efemer Konteynerlər), podlarda sazlama proseslərini sadələşdirmək üçün nəzərdə tutulmuşdur. Yeni mexanizm mövcud podların ad məkanında başlayan və qısa müddət ərzində fəaliyyət göstərən xüsusi konteynerləri işə salmağa imkan verir. Onların məqsədi hər hansı bir problemi həll etmək və debug etmək üçün digər podlar və konteynerlərlə qarşılıqlı əlaqə yaratmaqdır. Bu xüsusiyyət üçün yeni əmr tətbiq edilmişdir kubectl debug, mahiyyətcə oxşardır kubectl exec: yalnız bir konteynerdə bir prosesi yerinə yetirmək əvəzinə (olduğu kimi exec) qabda konteyneri işə salır. Məsələn, bu əmr yeni konteyneri poda birləşdirəcək:

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

Efemer konteynerlər (və onlardan istifadə nümunələri) haqqında təfərrüatları burada tapa bilərsiniz müvafiq KEP. Cari tətbiq (K8s 1.16-da) alfa versiyasıdır və onun beta versiyasına ötürülməsi üçün meyarlar arasında "Efemer Konteynerlər API-ni ən azı 2 [Kubernetes] buraxılışı üçün sınaqdan keçirmək" var.

NB: Öz mahiyyətinə və hətta adına görə xüsusiyyət artıq mövcud olan plagini xatırladır kubectl-debughansı haqqında onsuz da yazmışdım. Efemer konteynerlərin meydana çıxması ilə ayrıca xarici plaqinin inkişafının dayandırılacağı gözlənilir.

Daha bir yenilik - PodOverhead - təmin etmək üçün nəzərdə tutulmuşdur pods üçün qaimə məsrəflərinin hesablanması mexanizmi, istifadə olunan iş vaxtından asılı olaraq çox dəyişə bilər. Məsələn, müəlliflər bu KEP Qonaq nüvəsini, kata agentini, init sistemini və s. işləməyi tələb edən Kata Konteynerləri ilə nəticələnir. Yerüstü məsrəflər çox böyük olduqda, onu göz ardı etmək olmaz, yəni əlavə kvota, planlaşdırma və s. üçün onu nəzərə almaq üçün bir yol olmalıdır. Onu həyata keçirmək üçün PodSpec sahə əlavə edildi Overhead *ResourceList (verilənlərlə müqayisə edir RuntimeClass, biri istifadə olunarsa).

Digər diqqətəlayiq yenilikdir node topologiya meneceri (Node Topologiya Meneceri), Kubernetes-də müxtəlif komponentlər üçün aparat resurslarının ayrılmasını dəqiq tənzimləmək üçün yanaşmanı birləşdirmək üçün hazırlanmışdır. Bu təşəbbüs müxtəlif müasir sistemlərə (telekommunikasiya, maşın öyrənməsi, maliyyə xidmətləri və s. sahəsində) yüksək məhsuldar paralel hesablamalar və əməliyyatların icrasında gecikmələri minimuma endirmək üçün artan tələbatdan irəli gəlir, bunun üçün onlar qabaqcıl CPU və hardware sürətləndirilməsi imkanları. Kubernetes-də bu cür optimallaşdırmalar indiyədək fərqli komponentlər (CPU meneceri, Cihaz meneceri, CNI) sayəsində əldə edilib və indi onlara yanaşmanı birləşdirən və yeni oxşar - sözdə topologiyanın əlaqəsini asanlaşdıran vahid daxili interfeys əlavə olunacaq. xəbərdar - Kubelet tərəfindəki komponentlər. Təfərrüatlar - daxil müvafiq KEP.

Kubernetes 1.16: Yeniliklərin əsas məqamları
Topologiya Meneceri Komponent Diaqramı

Növbəti xüsusiyyət - işləyərkən konteynerlərin yoxlanılması (başlanğıc zondu). Bildiyiniz kimi, işə salınması çox vaxt aparan konteynerlər üçün aktual status əldə etmək çətindir: onlar ya faktiki olaraq fəaliyyətə başlamazdan əvvəl “öldürülür”, ya da uzun müddət dalana dirənir. Yeni çek (adlı xüsusiyyət qapısı vasitəsilə aktivləşdirilib StartupProbeEnabled) pod işləməyi başa vurana qədər hər hansı digər yoxlamaların təsirini ləğv edir - daha doğrusu, təxirə salır. Bu səbəbdən xüsusiyyət əvvəlcə adlandırıldı pod-startup liveness-probe holdoff. Başlamaq üçün çox vaxt aparan podlar üçün nisbətən qısa zaman intervalları ilə vəziyyəti sorğulaya bilərsiniz.

Bundan əlavə, RuntimeClass üçün təkmilləşdirmə "heterojen klasterlər" üçün dəstək əlavə edərək, beta statusunda dərhal mövcuddur. C RuntimeClass Planlaşdırma İndi hər bir node üçün hər RuntimeClass dəstəyinə ehtiyac yoxdur: podlar üçün siz klaster topologiyası haqqında düşünmədən RuntimeClass seçə bilərsiniz. Əvvəllər buna nail olmaq üçün - podların ehtiyac duyduqları hər şeyi dəstəkləyən qovşaqlarda sona çatması üçün - NodeSelector və dözümlərə uyğun qaydalar təyin etmək lazım idi. IN KEP İstifadə nümunələri və əlbəttə ki, həyata keçirmə təfərrüatları haqqında danışır.

Şəbəkə

Kubernetes 1.16-da ilk dəfə (alfa versiyasında) ortaya çıxan iki əhəmiyyətli şəbəkə xüsusiyyətləri bunlardır:

  • Dəstək ikili şəbəkə yığını - IPv4/IPv6 - və podlar, qovşaqlar, xidmətlər səviyyəsində müvafiq "anlama". Buraya podlardan tutmuş xarici xidmətlərə qədər IPv4-dən IPv4 və IPv6-dan IPv6-ya qədər qarşılıqlı fəaliyyət, istinad tətbiqləri (Bridge CNI, PTP CNI və Host-Local IPAM plaginləri daxilində), həmçinin işləyən Kubernetes klasterləri ilə tərs uyğunluq daxildir. Yalnız IPv4 və ya IPv6. İcra təfərrüatları var KEP.

    Qovşaqlar siyahısında iki növ (IPv4 və IPv6) IP ünvanlarının göstərilməsi nümunəsi:

    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 üçün yeni API - EndpointSlice API. O, idarəetmə müstəvisindəki müxtəlif komponentlərə (apiserver, və s., endpoints-controller, kube-proxy) təsir edən mövcud Endpoint API-nin performans/miqyaslılıq məsələlərini həll edir. Yeni API Discovery API qrupuna əlavə olunacaq və minlərlə qovşaqdan ibarət klasterdə hər bir xidmətdə on minlərlə arxa son nöqtələrə xidmət göstərə biləcək. Bunun üçün hər bir Xidmət N obyektlə əlaqələndirilir EndpointSlice, hər biri standart olaraq 100-dən çox olmayan son nöqtəyə malikdir (dəyər konfiqurasiya edilə bilər). EndpointSlice API həmçinin onun gələcək inkişafı üçün imkanlar təqdim edəcək: hər bir pod üçün çoxsaylı IP ünvanlarına dəstək, son nöqtələr üçün yeni vəziyyətlər (təkcə yox) Ready и NotReady), son nöqtələr üçün dinamik alt təyinat.

Son buraxılışda təqdim olunan beta versiyasına çatdı yekunlaşdırıcıadlı service.kubernetes.io/load-balancer-cleanup və növü ilə hər bir xidmətə əlavə olunur LoadBalancer. Belə bir xidmətin silinməsi zamanı bütün müvafiq balanslaşdırıcı resursların “təmizlənməsi” tamamlanana qədər resursun faktiki silinməsinin qarşısını alır.

API Maşınları

Əsl "sabitləşmə mərhələsi" Kubernetes API serveri və onunla qarşılıqlı əlaqə sahəsindədir. Bu, böyük ölçüdə sayəsində baş verdi xüsusi təqdimata ehtiyacı olmayanların stabil statusa keçirilməsi Xüsusi Resurs Tərifləri (CRD), Kubernetes 1.7-nin uzaq günlərindən bəri beta statusuna malik olan (və bu, 2017-ci ilin iyunudur!). Eyni sabitləşmə əlaqəli xüsusiyyətlərə gəldi:

  • "alt mənbələr" ilə /status и /scale CustomResources üçün;
  • çevrilmə xarici webhook əsasında CRD üçün versiyalar;
  • bu yaxınlarda təqdim edildi (K8s 1.15-də) standart dəyərlər (defolt) və sahənin avtomatik çıxarılması (budama) CustomResources üçün;
  • imkan server tərəfində CRD resurslarını yoxlamaq üçün istifadə edilən OpenAPI sənədlərini yaratmaq və dərc etmək üçün OpenAPI v3 sxemindən istifadə etməklə.

Kubernetes administratorlarına çoxdan tanış olan başqa bir mexanizm: qəbul webhook - həm də uzun müddət beta statusunda qaldı (K8s 1.9-dan bəri) və indi stabil elan edilib.

Digər iki xüsusiyyət beta versiyasına çatdı: server tərəfi tətbiq olunur и əlfəcinlərə baxın.

Və alfa versiyada yeganə əhəmiyyətli yenilik idi imtina etibarən SelfLink — müəyyən edilmiş obyekti təmsil edən və onun bir hissəsi olan xüsusi URI ObjectMeta и ListMeta (yəni Kubernetesdəki hər hansı obyektin bir hissəsi). Niyə ondan imtina edirlər? Sadə bir şəkildə motivasiya səslər bu sahənin hələ də mövcud olması üçün real (əzici) səbəblərin olmaması kimi. Daha rəsmi səbəblər performansı optimallaşdırmaq (lazımsız sahəni silməklə) və belə bir sahəni xüsusi bir şəkildə idarə etməyə məcbur olan ümumi-apiserverin işini sadələşdirməkdir (bu, obyektin qarşısında qoyulan yeganə sahədir. seriallaşdırılır). Əsl köhnəlmə (beta daxilində) SelfLink Kubernetes versiyası 1.20, final isə 1.21 ilə baş verəcək.

Məlumat saxlama

Saxlama sahəsində əsas işlər əvvəlki buraxılışlarda olduğu kimi, ərazidə müşahidə olunur CSI dəstəyi. Burada əsas dəyişikliklər bunlar idi:

  • ilk dəfə (alfa versiyada) ortaya çıxdı Windows işçi qovşaqları üçün CSI plagin dəstəyi: yaddaşla işləməyin hazırkı üsulu həmçinin Kubernetes nüvəsindəki ağacdaxili plaginləri və Powershell əsasında Microsoft-dan FlexVolume plaginlərini əvəz edəcək;

    Kubernetes 1.16: Yeniliklərin əsas məqamları
    Windows üçün Kubernetes-də CSI plaginlərinin tətbiqi sxemi

  • imkan CSI həcmlərinin ölçülərinin dəyişdirilməsi, K8s 1.12-də yenidən təqdim edildi, beta versiyasına çevrildi;
  • Bənzər bir "təşviqat" (alfadan betaya) yerli efemer həcmlər yaratmaq üçün CSI-dən istifadə etmək imkanı ilə əldə edildi (CSI Inline Həcmi Dəstəyi).

Kubernetes-in əvvəlki versiyasında təqdim edilmişdir həcm klonlama funksiyası (mövcud PVC kimi istifadə olunur DataSource yeni PVC yaratmaq üçün) də indi beta statusu alıb.

Planlayıcı

Planlaşdırmada iki nəzərəçarpacaq dəyişiklik (hər ikisi alfada):

  • EvenPodsSpreading - fürsət yüklərin “ədalətli paylanması” üçün məntiqi tətbiq vahidləri əvəzinə podlardan istifadə edin (Deployment və ReplicaSet kimi) və bu paylanmanı tənzimləmək (çətin tələb və ya yumşaq şərt, yəni prioritet kimi). Xüsusiyyət planlaşdırılmış podların mövcud paylama imkanlarını genişləndirəcək, hazırda seçimlərlə məhdudlaşır PodAffinity и PodAntiAffinity, idarəçilərə bu məsələdə daha incə nəzarət imkanı verir ki, bu da daha yüksək əlçatanlıq və optimallaşdırılmış resurs istehlakı deməkdir. Təfərrüatlar - daxil KEP.
  • Istifadə BestFit Siyasəti в RequestedToCapacityRatio Prioritet Funksiyası imkan verəcək pod planlaşdırma zamanı müraciət edin zibil qablaşdırması həm əsas resurslar (prosessor, yaddaş), həm də genişləndirilmiş resurslar (GPU kimi) üçün (“qablara qablaşdırma”). Ətraflı məlumat üçün bax KEP.

    Kubernetes 1.16: Yeniliklərin əsas məqamları
    Planlaşdırma podları: ən uyğun siyasətdən istifadə etməzdən əvvəl (birbaşa defolt planlaşdırıcı vasitəsilə) və onun istifadəsi ilə (planlaşdırma genişləndiricisi vasitəsilə)

Bundan əlavə, ilə təmsil olunur əsas Kubernetes inkişaf ağacından (ağacdan kənar) kənarda öz planlaşdırıcı plaginlərinizi yaratmaq imkanı.

Digər dəyişikliklər

Kubernetes 1.16 buraxılışında da qeyd etmək olar üçün təşəbbüs gətirilməsi mövcud göstəricilər tam qaydada, daha dəqiq desək, uyğun olaraq rəsmi qaydalar K8s cihazlarına. Onlar əsasən müvafiq olanlara etibar edirlər Prometey sənədləri. Uyğunsuzluqlar müxtəlif səbəblərdən yarandı (məsələn, bəzi ölçülər sadəcə hazırkı təlimatlar görünməzdən əvvəl yaradıldı) və tərtibatçılar qərara gəldilər ki, "Prometheus ekosisteminin qalan hissəsinə uyğun olaraq" hər şeyi vahid bir standarta gətirməyin vaxtı gəldi. Bu təşəbbüsün cari tətbiqi alfa statusundadır, o, Kubernetes-in sonrakı versiyalarında tədricən beta (1.17) və stabil (1.18) versiyalarına yüksəldiləcək.

Bundan əlavə, aşağıdakı dəyişiklikləri qeyd etmək olar:

  • Windows dəstəyi inkişafı с ortaya çıxması Bu ƏS üçün Kubeadm utilitləri (alfa versiyası), fürsət RunAsUserName Windows konteynerləri üçün (alfa versiyası), təkmilləşdirilməsi Qrup İdarə olunan Xidmət Hesabı (gMSA) beta versiyasına qədər dəstəkləyir, dəstək vSphere həcmləri üçün quraşdırın/qoşun.
  • Təkrar emal edilmiş API cavablarında məlumatların sıxılma mexanizmi. Əvvəllər bu məqsədlər üçün HTTP filtrindən istifadə edilirdi ki, bu da onun default olaraq aktivləşdirilməsinə mane olan bir sıra məhdudiyyətlər tətbiq edirdi. "Şəffaf sorğu sıxılması" indi işləyir: müştərilər göndərir Accept-Encoding: gzip başlıqda, ölçüsü 128 KB-dan çox olarsa, GZIP ilə sıxılmış cavab alırlar. Go müştəriləri avtomatik olaraq sıxılmanı dəstəkləyir (lazımi başlığı göndərir), ona görə də dərhal trafikin azaldığını görəcəklər. (Başqa dillər üçün cüzi dəyişikliklər tələb oluna bilər.)
  • Mümkün oldu xarici ölçülərə əsasən HPA-nı sıfırdan/sıfıra qədər miqyaslaşdırmaq. Obyektlərə/xarici ölçülərə əsaslanaraq miqyaslandırırsınızsa, iş yükləri boş olduqda resurslara qənaət etmək üçün avtomatik olaraq 0 replikaya qədər miqyaslaya bilərsiniz. Bu xüsusiyyət xüsusilə işçilərin GPU resurslarını tələb etdiyi və müxtəlif növ boş işçilərin sayının mövcud GPU-ların sayından çox olduğu hallar üçün faydalı olmalıdır.
  • Yeni müştəri - k8s.io/client-go/metadata.Client — obyektlərə “ümumiləşdirilmiş” giriş üçün. O, asanlıqla metadata əldə etmək üçün nəzərdə tutulmuşdur (yəni alt bölmə metadata) klaster resurslarından və onlarla zibil toplama və kvota əməliyyatlarını yerinə yetirmək.
  • Kubernetes qurun indi edə bilərsən köhnə (daxili" ağacdaxili) bulud provayderləri olmadan (alfa versiyası).
  • kubeadm yardım proqramına əlavə etdi əməliyyatlar zamanı yamaqları fərdiləşdirmək üçün eksperimental (alfa versiyası) imkanı init, join и upgrade. Bayraqdan necə istifadə etmək barədə ətraflı məlumat əldə edin --experimental-kustomize, bax KEP.
  • Apiserver üçün yeni son nöqtə - readyz, - onun hazır olması haqqında məlumatı ixrac etməyə imkan verir. API serverinin də indi bayrağı var --maximum-startup-sequence-duration, onun yenidən başlamalarını tənzimləməyə imkan verir.
  • İki Azure üçün xüsusiyyətlər sabit elan edildi: dəstək mövcudluq zonaları (Mövcudluq zonaları) və cross-resurs qrupu (RG). Bundan əlavə, Azure əlavə etdi:
    • autentifikasiya dəstəyi AAD və ADFS;
    • izahat service.beta.kubernetes.io/azure-pip-name yük balanslaşdırıcısının ictimai IP-ni təyin etmək;
    • imkan настройки LoadBalancerName и LoadBalancerResourceGroup.
  • AWS indi var dəstək Windows-da EBS üçün və optimallaşdırılmışdır EC2 API zəngləri DescribeInstances.
  • Kubeadm indi müstəqildir köç edir CoreDNS versiyasını təkmilləşdirərkən CoreDNS konfiqurasiyası.
  • Binaries və s müvafiq Docker təsvirində etdik dünya icra edilə bilən, bu görüntünü kök hüquqlarına ehtiyac olmadan işə salmağa imkan verir. Həmçinin, etcd miqrasiya şəkli ləğv edildi etcd2 versiyasını dəstəkləyir.
  • В Cluster Autoscaler 1.16.0 əsas təsvir kimi distroless istifadəsinə keçdi, təkmilləşdirilmiş performans, yeni bulud provayderləri (DigitalOcean, Magnum, Packet) əlavə etdi.
  • İstifadə olunmuş/asılı proqram təminatında yeniləmələr: Go 1.12.9, etcd 3.3.15, CoreDNS 1.6.2.

PS

Bloqumuzda da oxuyun:

Mənbə: www.habr.com

Добавить комментарий