Saxlama tutumu izlənilən efemer həcmlər: Steroidlərdə EmptyDir

Saxlama tutumu izlənilən efemer həcmlər: Steroidlərdə EmptyDir

Bəzi proqramlar da məlumatları saxlamalıdır, lakin onlar yenidən başladıqdan sonra məlumatların saxlanmayacağından olduqca rahatdırlar.

Məsələn, keşləmə xidmətləri RAM ilə məhdudlaşır, lakin eyni zamanda ümumi performansa az təsir etməklə, RAM-dan daha yavaş olan saxlama üçün nadir hallarda istifadə olunan məlumatları köçürə bilər. Digər proqramlar bilməlidir ki, fayllarda parametrlər və ya gizli açarlar kimi yalnız oxumaq üçün nəzərdə tutulmuş daxiletmələr ola bilər.

Kubernetes artıq bir neçə növə malikdir efemer həcmlər, lakin onların funksionallığı K8-lərdə tətbiq olunanlarla məhdudlaşır.

Efemer CSI həcmləri yüngül yerli həcmlərə dəstək vermək üçün Kubernetes-in CSI sürücüləri ilə genişləndirilməsinə icazə verdi. Bu şəkildə istifadə etmək mümkündür ixtiyari strukturlar: parametrlər, sirrlər, identifikasiya məlumatları, dəyişənlər və s. CSI sürücüləri bu Kubernetes funksiyasını dəstəkləmək üçün dəyişdirilməlidir, çünki adi standartlaşdırılmış sürücülərin işləməyəcəyi güman edilir - lakin bu cür həcmlərin pod üçün seçilmiş hər hansı bir node üçün istifadə oluna biləcəyi güman edilir.

Bu, əhəmiyyətli host resursları istehlak edən həcmlər və ya yalnız bəzi hostlarda mövcud olan yaddaş üçün problem ola bilər. Buna görə Kubernetes 1.19 konseptual olaraq EmptyDir həcmlərinə bənzər iki yeni alfa test həcmi xüsusiyyətini təqdim edir:

  • ümumi təyinatlı efemer həcmlər;

  • CSI yaddaş tutumunun izlənməsi.

Yeni yanaşmanın üstünlükləri:

  • saxlama yerli və ya şəbəkə vasitəsilə qoşula bilər;

  • həcmlər tətbiq tərəfindən aşıla bilməyən müəyyən bir ölçüyə malik ola bilər;

  • davamlı həcmlərin təmin edilməsini dəstəkləyən və (tutumun izlənilməsini dəstəkləmək üçün) çağırışı həyata keçirən istənilən CSI sürücüləri ilə işləyir. GetCapacity;

  • həcmlərdə sürücü və parametrlərdən asılı olaraq bəzi ilkin məlumatlar ola bilər;

  • həcmli bütün standart əməliyyatlar (snapshot yaratmaq, ölçüsünü dəyişmək və s.) dəstəklənir;

  • həcmlər modul və ya həcm spesifikasiyasını qəbul edən istənilən proqram nəzarətçisi ilə istifadə edilə bilər;

  • Kubernetes planlaşdırıcısı uyğun qovşaqları özü seçir, ona görə də planlaşdırıcı genişləndirmələrini təmin etməyə və konfiqurasiya etməyə və ya veb-qancaları dəyişdirməyə artıq ehtiyac yoxdur.

Ərizə variantları

Buna görə də, ümumi təyinatlı efemer həcmlər aşağıdakı istifadə halları üçün uyğundur:

Memcached üçün RAM-ı əvəz edən daimi yaddaş

memcached-in son buraxılışları əlavə dəstək davamlı yaddaşdan istifadə (Intel Optane və s., təqribən. tərcüməçi) adi RAM əvəzinə. Tətbiq nəzarətçisi vasitəsilə yaddaş yaddaşını yerləşdirərkən, məsələn, CSI drayverindən istifadə edərək müəyyən ölçülü həcmin PMEM-dən ayrılmasını tələb etmək üçün ümumi təyinatlı efemer həcmlərdən istifadə edə bilərsiniz. PMEM-CSI.

LVM yerli yaddaşı iş sahəsi kimi

RAM-dən böyük olan verilənlərlə işləyən tətbiqlər Kubernetes-dən adi EmptyDir həcmlərinin təmin edə bilmədiyi ölçü və ya performans göstəriciləri ilə yerli yaddaş tələb edə bilər. Məsələn, bu məqsədlə yazılmışdır TopoLVM.

Məlumat həcmləri üçün yalnız oxumaq imkanı

Cildin ayrılması aşağıdakı hallarda tam həcmin yaradılması ilə nəticələnə bilər:

Bu həcmlər yalnız oxumaq üçün rejimdə quraşdırıla bilər.

Bu necə işləyir

Ümumi Məqsədli Efemer Cildlər

Ümumi təyinatlı efemer cildlərin əsas xüsusiyyəti yeni həcm mənbəyidir, EphemeralVolumeSource, həcm sorğusu yaratmaq üçün bütün sahələri ehtiva edir (tarixən davamlı həcm sorğusu, PVC adlanır). Yeni kontroller kube-controller-manager belə bir həcm mənbəyi yaradan podlara baxır və sonra həmin podlar üçün PVC yaradır. CSI sürücüsü üçün bu sorğu digərləri ilə eyni görünür, ona görə də burada xüsusi dəstəyə ehtiyac yoxdur.

Belə PVC-lər mövcud olduğu müddətcə, həcmdəki hər hansı digər sorğu kimi istifadə edilə bilər. Xüsusilə, bir həcmi kopyalayarkən və ya həcmdən snapshot yaratarkən onlara məlumat mənbəyi kimi istinad edilə bilər. PVC obyekti həmçinin həcmin cari vəziyyətini ehtiva edir.

Avtomatik yaradılmış PVC-lərin adları əvvəlcədən müəyyən edilmişdir: onlar pod adı və tire ilə ayrılmış həcm adının birləşməsidir. Əvvəlcədən təyin edilmiş adlar PVC ilə qarşılıqlı əlaqəni asanlaşdırır, çünki podun adını və həcminin adını bilirsinizsə, onu axtarmaq lazım deyil. İşin mənfi tərəfi odur ki, Kubernetes tərəfindən aşkar edilən ad artıq istifadə oluna bilər və nəticədə podun işə salınması bloklanır.

Səsin pod ilə birlikdə silinməsini təmin etmək üçün nəzarətçi sahibinin altındakı həcmə sorğu göndərir. Pod silindikdə standart zibil toplama mexanizmi işləyir ki, bu da həm sorğunu, həm də həcmi silir.

Sorğular yaddaş sinfinin normal mexanizmi vasitəsilə yaddaş sürücüsü tərəfindən uyğunlaşdırılır. Dərhal və gec bağlanan siniflər olsa da (aka WaitForFirstConsumer) dəstəklənir, efemer həcmlər üçün istifadə etmək məna kəsb edir WaitForFirstConsumer, onda planlaşdırıcı qovşağı seçərkən həm node istifadəsini, həm də yaddaşın mövcudluğunu nəzərə ala bilər. Burada yeni xüsusiyyət görünür.

Saxlama Tutumunun İzlənməsi

Tipik olaraq planlaşdırıcının CSI sürücüsünün həcmi harada yaradacağı barədə heç bir məlumatı yoxdur. Planlayıcının bu məlumatı tələb etmək üçün birbaşa sürücü ilə əlaqə saxlaması da yoxdur. Buna görə də, planlaşdırıcı həcmlərə daxil olmaq mümkün olan birini tapana qədər (gec bağlanma) və ya yer seçimini tamamilə sürücünün öhdəsinə buraxana qədər (dərhal bağlama) qovşaqları sorğulayır.

Yeni API CSIStorageCapacityalfa mərhələsində olan , lazımi məlumatların planlaşdırıcı üçün əlçatan olması üçün etcd-də saxlanmasına imkan verir. Ümumi təyinatlı efemer həcmlər üçün dəstəkdən fərqli olaraq, sürücünü yerləşdirdiyiniz zaman yaddaş tutumunun izlənilməsini aktivləşdirməlisiniz: external-provisioner normal vasitəsilə sürücüdən alınan tutum məlumatını dərc etməlidir GetCapacity.

Planlaşdırıcı gec bağlamadan istifadə edən bağlanmamış həcmli pod üçün qovşaq seçməlidirsə və sürücü bayraq təyin etməklə yerləşdirmə zamanı bu funksiyanı aktiv edibsə CSIDriver.storageCapacity, onda kifayət qədər yaddaş tutumu olmayan qovşaqlar avtomatik olaraq atılacaq. Bu, həm ümumi təyinatlı efemer, həm də davamlı həcmlər üçün işləyir, lakin CSI efemer həcmləri üçün deyil, çünki onların parametrləri Kubernetes tərəfindən oxunmur.

Həmişə olduğu kimi, podlar planlaşdırılmadan əvvəl dərhal əlaqəli həcmlər yaradılır və onların yerləşdirilməsi yaddaş sürücüsü tərəfindən seçilir, beləliklə konfiqurasiya edərkən external-provisioner Varsayılan olaraq, dərhal bağlanan yaddaş sinifləri atlanır, çünki bu məlumatlar hər halda istifadə edilməyəcək.

Kubernetes planlaşdırıcısı potensial olaraq köhnəlmiş məlumatlarla işləmək məcburiyyətində qaldığından, həcmin yaradıldığı hər bir halda tutumun mövcud olacağına zəmanət yoxdur, lakin onun təkrar cəhdlər olmadan yaradılma şansları buna baxmayaraq artır.

NB Daha ətraflı məlumat əldə edə, həmçinin təhlükəsiz şəkildə "pişik stendində məşq edə bilərsiniz" və tamamilə anlaşılmaz bir vəziyyət olduqda, intensiv kurslarda ixtisaslı texniki dəstək ala bilərsiniz - Kubernetes bazası 28-30 sentyabr tarixlərində və daha yüksək səviyyəli mütəxəssislər üçün keçiriləcək Kubernetes Mega 14-16 oktyabr.

təhlükəsizlik

CSIStorageCapacity

CSIStorageCapacity obyektləri ad boşluqlarında yerləşir; hər bir CSI sürücüsünü öz ad məkanında yayarkən, məlumatların haradan gəldiyi aydın olduğu üçün həmin məkanda CSIStorageCapacity üçün RBAC hüquqlarını məhdudlaşdırmaq tövsiyə olunur. Kubernetes hər halda bunu yoxlamır və adətən sürücülər eyni ad sahəsinə yerləşdirilir, buna görə də nəticədə sürücülərin işləməsi və yanlış məlumatları dərc etməməsi gözlənilir (və bu, mənim kartım uğursuz olduğu yerdir, təqribən. saqqallı zarafata əsaslanan tərcüməçi)

Ümumi Məqsədli Efemer Cildlər

İstifadəçilərin pod yaratmaq hüququ varsa (birbaşa və ya dolayısı ilə), onlar həmçinin həcmdə sorğu yaratmaq hüquqları olmasa belə ümumi təyinatlı efemer cildlər yarada biləcəklər. Bunun səbəbi, RBAC icazə yoxlamalarının istifadəçiyə deyil, PVC-ni yaradan nəzarətçiyə tətbiq edilməsidir. Bu əlavə ediləcək əsas dəyişiklikdir hesabınıza, etibarsız istifadəçilərin cildlər yaratmaq hüquqlarının olmaması lazım olan klasterlərdə bu funksiyanı aktiv etməzdən əvvəl.

Misal

Ayrı ağac PMEM-CSI, alfa mərhələsindəki bütün xüsusiyyətləri olan QEMU virtual maşınlarında Kubernetes 1.19 klasterini işə salmaq üçün bütün lazımi dəyişiklikləri ehtiva edir. Sürücü kodu dəyişməyib, yalnız yerləşdirmə dəyişib.

Uyğun bir maşında (Linux, normal istifadəçi istifadə edə bilər yükvuran, bax burada təfərrüatlar) bu əmrlər klasteri açacaq və PMEM-CSI sürücüsünü quraşdıracaq:

git clone --branch=kubernetes-1-19-blog-post https://github.com/intel/pmem-csi.git
cd pmem-csi
export TEST_KUBERNETES_VERSION=1.19 TEST_FEATURE_GATES=CSIStorageCapacity=true,GenericEphemeralVolume=true TEST_PMEM_REGISTRY=intel
make start && echo && test/setup-deployment.sh

Hər şey işlədikdən sonra çıxışda istifadə üçün təlimatlar olacaq:

The test cluster is ready. Log in with [...]/pmem-csi/_work/pmem-govm/ssh.0, run
kubectl once logged in.  Alternatively, use kubectl directly with the
following env variable:
   KUBECONFIG=[...]/pmem-csi/_work/pmem-govm/kube.config

secret/pmem-csi-registry-secrets created
secret/pmem-csi-node-secrets created
serviceaccount/pmem-csi-controller created
...
To try out the pmem-csi driver ephemeral volumes:
   cat deploy/kubernetes-1.19/pmem-app-ephemeral.yaml |
   [...]/pmem-csi/_work/pmem-govm/ssh.0 kubectl create -f -

CSIStorageCapacity obyektləri insanlar tərəfindən oxunmaq üçün nəzərdə tutulmayıb, ona görə də bəzi emal tələb olunur. Golang şablon filtrləri saxlama siniflərini göstərəcək, bu nümunə ad, topologiya və tutumu göstərəcək:

$ kubectl get 
        -o go-template='{{range .items}}{{if eq .storageClassName "pmem-csi-sc-late-binding"}}{{.metadata.name}} {{.nodeTopology.matchLabels}} {{.capacity}}
{{end}}{{end}}' 
        csistoragecapacities
csisc-2js6n map[pmem-csi.intel.com/node:pmem-csi-pmem-govm-worker2] 30716Mi
csisc-sqdnt map[pmem-csi.intel.com/node:pmem-csi-pmem-govm-worker1] 30716Mi
csisc-ws4bv map[pmem-csi.intel.com/node:pmem-csi-pmem-govm-worker3] 30716Mi

Tək bir obyekt aşağıdakı məzmuna malikdir:

$ kubectl describe csistoragecapacities/csisc-6cw8j
Name:         csisc-sqdnt
Namespace:    default
Labels:       <none>
Annotations:  <none>
API Version:  storage.k8s.io/v1alpha1
Capacity:     30716Mi
Kind:         CSIStorageCapacity
Metadata:
  Creation Timestamp:  2020-08-11T15:41:03Z
  Generate Name:       csisc-
  Managed Fields:
    ...
  Owner References:
    API Version:     apps/v1
    Controller:      true
    Kind:            StatefulSet
    Name:            pmem-csi-controller
    UID:             590237f9-1eb4-4208-b37b-5f7eab4597d1
  Resource Version:  2994
  Self Link:         /apis/storage.k8s.io/v1alpha1/namespaces/default/csistoragecapacities/csisc-sqdnt
  UID:               da36215b-3b9d-404a-a4c7-3f1c3502ab13
Node Topology:
  Match Labels:
    pmem-csi.intel.com/node:  pmem-csi-pmem-govm-worker1
Storage Class Name:           pmem-csi-sc-late-binding
Events:                       <none>

Tək ümumi təyinatlı efemer həcmli demo proqram yaratmağa çalışaq. Fayl məzmunu pmem-app-ephemeral.yaml:

# This example Pod definition demonstrates
# how to use generic ephemeral inline volumes
# with a PMEM-CSI storage class.
kind: Pod
apiVersion: v1
metadata:
  name: my-csi-app-inline-volume
spec:
  containers:
    - name: my-frontend
      image: intel/pmem-csi-driver-test:v0.7.14
      command: [ "sleep", "100000" ]
      volumeMounts:
      - mountPath: "/data"
        name: my-csi-volume
  volumes:
  - name: my-csi-volume
    ephemeral:
      volumeClaimTemplate:
        spec:
          accessModes:
          - ReadWriteOnce
          resources:
            requests:
              storage: 4Gi
          storageClassName: pmem-csi-sc-late-binding

Yaratdıqdan sonra, yuxarıdakı təlimatlarda göstərildiyi kimi, indi əlavə bir pod və PVC var:

$ kubectl get pods/my-csi-app-inline-volume -o wide
NAME                       READY   STATUS    RESTARTS   AGE     IP          NODE                         NOMINATED NODE   READINESS GATES
my-csi-app-inline-volume   1/1     Running   0          6m58s   10.36.0.2   pmem-csi-pmem-govm-worker1   <none>           <none>
$ kubectl get pvc/my-csi-app-inline-volume-my-csi-volume
NAME                                     STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS               AGE
my-csi-app-inline-volume-my-csi-volume   Bound    pvc-c11eb7ab-a4fa-46fe-b515-b366be908823   4Gi        RWO            pmem-csi-sc-late-binding   9m21s

PVC sahibi - altında:

$ kubectl get -o yaml pvc/my-csi-app-inline-volume-my-csi-volume
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  annotations:
    pv.kubernetes.io/bind-completed: "yes"
    pv.kubernetes.io/bound-by-controller: "yes"
    volume.beta.kubernetes.io/storage-provisioner: pmem-csi.intel.com
    volume.kubernetes.io/selected-node: pmem-csi-pmem-govm-worker1
  creationTimestamp: "2020-08-11T15:44:57Z"
  finalizers:
  - kubernetes.io/pvc-protection
  managedFields:
    ...
  name: my-csi-app-inline-volume-my-csi-volume
  namespace: default
  ownerReferences:
  - apiVersion: v1
    blockOwnerDeletion: true
    controller: true
    kind: Pod
    name: my-csi-app-inline-volume
    uid: 75c925bf-ca8e-441a-ac67-f190b7a2265f
...

üçün gözlənilən yenilənmiş məlumat pmem-csi-pmem-govm-worker1:

csisc-2js6n map[pmem-csi.intel.com/node:pmem-csi-pmem-govm-worker2] 30716Mi
csisc-sqdnt map[pmem-csi.intel.com/node:pmem-csi-pmem-govm-worker1] 26620Mi
csisc-ws4bv map[pmem-csi.intel.com/node:pmem-csi-pmem-govm-worker3] 30716Mi

Başqa bir proqrama 26620Mi-dən çox ehtiyac varsa, planlaşdırıcı nəzərə almayacaq pmem-csi-pmem-govm-worker1 hər halda.

Növbəti nədir?

Hər iki xüsusiyyət hələ də inkişaf mərhələsindədir. Alfa testi zamanı bir neçə proqram açıldı. Təkmilləşdirmə təklifi əlaqələri beta mərhələsinə keçmək üçün görülməli olan işləri, həmçinin hansı alternativlərin artıq nəzərdən keçirildiyini və rədd edildiyini sənədləşdirir:

Mənbə: www.habr.com

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