Volume Ephemeral karo Nelusuri Kapasitas Storage: EmptyDir ing Steroid

Volume Ephemeral karo Nelusuri Kapasitas Storage: EmptyDir ing Steroid

Sawetara aplikasi uga kudu nyimpen data, nanging padha cukup nyaman karo kasunyatan sing data ora bakal disimpen sawise miwiti maneh.

Contone, layanan caching diwatesi dening RAM, nanging uga bisa mindhah data sing arang digunakake kanggo panyimpenan sing luwih alon tinimbang RAM, karo sethitik impact ing kinerja sakabèhé. Aplikasi liyane kudu ngerti yen bisa uga ana sawetara input mung diwaca ing file, kayata setelan utawa kunci rahasia.

Kubernetes wis duwe sawetara jinis volume ephemeral, nanging fungsi sing diwatesi kanggo apa dileksanakake ing K8s.

Ephemeral volume CSI ngidini Kubernetes ditambah karo driver CSI kanggo nyedhiyakake dhukungan kanggo volume lokal sing entheng. Kanthi cara iki bisa digunakake struktur sembarang: setelan, rahasia, data identifikasi, variabel, lan liya-liyane. Pembalap CSI kudu diowahi kanggo ndhukung fitur Kubernetes iki, amarga dianggep pembalap standar biasa ora bisa digunakake - nanging dianggep volume kasebut bisa digunakake ing sembarang simpul sing dipilih kanggo pod.

Iki bisa uga dadi masalah kanggo volume sing nggunakake sumber daya host sing signifikan utawa kanggo panyimpenan sing mung kasedhiya ing sawetara host. Pramila Kubernetes 1.19 ngenalake rong fitur volume tes alpha anyar sing konseptual padha karo volume EmptyDir:

  • volume ephemeral tujuan umum;

  • Nelusuri kapasitas panyimpenan CSI.

Kauntungan saka pendekatan anyar:

  • panyimpenan bisa lokal utawa disambungake liwat jaringan;

  • volume bisa duwe ukuran tartamtu sing ora bisa ngluwihi aplikasi;

  • bisa digunakake karo driver CSI sing ndhukung provisioning volume terus-terusan lan (kanggo ndhukung pelacakan kapasitas) ngleksanakake telpon GetCapacity;

  • volume bisa uga duwe sawetara data awal gumantung ing driver lan setelan;

  • kabeh operasi standar kanthi volume (nggawe snapshot, ngowahi ukuran, etc.) didhukung;

  • volume bisa digunakake karo sembarang controller aplikasi sing nampa modul utawa specification volume;

  • Penjadwal Kubernetes milih simpul sing cocog dhewe, dadi ora perlu maneh nyedhiyakake lan ngatur ekstensi panjadwal utawa ngowahi webhooks.

Opsi aplikasi

Mulane, volume ephemeral tujuan umum cocok kanggo kasus panggunaan ing ngisor iki:

memori ngengkel minangka panggantos kanggo RAM kanggo memcached

Rilis paling anyar saka memcached ditambahake dhukungan nggunakake memori sing terus-terusan (Intel Optane, lsp., kira-kira. penerjemah) tinimbang RAM biasa. Nalika nyebarake memcached liwat pengontrol aplikasi, sampeyan bisa nggunakake volume ephemeral tujuan umum kanggo njaluk volume saka ukuran tartamtu diparengake saka PMEM nggunakake driver CSI, contone. PMEM-CSI.

Panyimpenan lokal LVM minangka ruang kerja

Aplikasi sing bisa nganggo data sing luwih gedhe tinimbang RAM bisa uga mbutuhake panyimpenan lokal kanthi ukuran utawa metrik kinerja sing ora bisa diwenehake dening volume EmptyDir biasa saka Kubernetes. Contone, kanggo maksud iki ditulis TopoLVM.

Akses mung diwaca kanggo volume data

Alokasi volume bisa nyebabake nggawe volume lengkap nalika:

Volume kasebut bisa dipasang ing mode mung diwaca.

Carane ora karya iki

Volume Ephemeral Tujuan Umum

Fitur utama volume ephemeral tujuan umum yaiku sumber volume anyar, EphemeralVolumeSource, ngemot kabeh kolom kanggo nggawe panjalukan volume (sacara historis diarani panyuwunan volume terus-terusan, PVC). Pengontrol anyar ing kube-controller-manager katon ing pods sing nggawe sumber volume kuwi, lan banjur nggawe PVC kanggo pods sing. Kanggo pembalap CSI, panjalukan iki katon padha karo liyane, mula ora ana dhukungan khusus sing dibutuhake ing kene.

Anggere PVCs kuwi ana, padha bisa digunakake kaya panjalukan liyane ing volume. Utamane, bisa dirujuk minangka sumber data nalika nyalin volume utawa nggawe snapshot saka volume. Objek PVC uga ngemot kahanan volume saiki.

Jeneng-jeneng saka PVC sing digawe kanthi otomatis wis ditemtokake: iku kombinasi saka jeneng pod lan jeneng volume, dipisahake dening hyphen. Jeneng sing wis ditemtokake luwih gampang kanggo sesambungan karo PVC amarga sampeyan ora kudu nggoleki yen sampeyan ngerti jeneng pod lan jeneng volume. Kelemahane yaiku jeneng kasebut bisa uga wis digunakake, sing dideteksi dening Kubernetes lan minangka asil pod diblokir wiwit diwiwiti.

Kanggo mesthekake yen volume dibusak bebarengan karo pod, controller nggawe panjalukan kanggo volume ing pemilik. Nalika polong dibusak, mekanisme pengumpulan sampah standar bisa digunakake, sing mbusak panjalukan lan volume.

Panyuwunan dicocogake dening driver panyimpenan liwat mekanisme normal saka kelas panyimpenan. Senajan kelas karo langsung lan pungkasan naleni (aka WaitForFirstConsumer) sing didhukung, kanggo volume ephemeral iku ndadekake pangertèn kanggo nggunakake WaitForFirstConsumer, banjur panjadwal bisa nimbang panggunaan simpul lan kasedhiyan panyimpenan nalika milih simpul. Fitur anyar katon ing kene.

Nelusuri Kapasitas Panyimpenan

Biasane panjadwal ora ngerti ngendi driver CSI bakal nggawe volume. Uga ora ana cara kanggo panjadwal langsung hubungi driver kanggo njaluk informasi iki. Mulane, panjadwal polling node nganti nemokake volume sing bisa diakses (late binding) utawa ninggalake pilihan lokasi kanggo driver (langsung binding).

anyar API CSIStorageCapacity, sing ana ing tahap alpha, ngidini data sing dibutuhake disimpen ing etcd supaya kasedhiya kanggo panjadwal. Ora kaya dhukungan kanggo volume ephemeral tujuan umum, nalika sampeyan masang driver, sampeyan kudu ngaktifake pelacakan kapasitas panyimpenan: external-provisioner ngirim nerbitaké informasi kapasitas ditampa saka driver liwat normal GetCapacity.

Yen panjadwal kudu milih simpul kanggo polong kanthi volume ora kaiket sing nggunakake ikatan telat, lan pembalap ngaktifake fitur iki sajrone panyebaran kanthi nyetel gendera CSIDriver.storageCapacity, banjur simpul sing ora nduweni kapasitas panyimpenan sing cukup bakal dibuwang kanthi otomatis. Iki bisa digunakake kanggo volume ephemeral lan terus-terusan, nanging ora kanggo volume ephemeral CSI amarga parameter kasebut ora bisa diwaca dening Kubernetes.

Kaya biasane, volume sing disambung langsung digawe sadurunge polong dijadwalake, lan panggonane dipilih dening driver panyimpenan, dadi nalika ngatur external-provisioner Kanthi gawan, kelas panyimpenan kanthi ikatan langsung dilewati, amarga data iki ora bakal digunakake.

Wiwit panjadwal kubernetes dipeksa kanggo bisa karo informasi potensial out-of-tanggal, ana ora njamin sing kapasitas bakal kasedhiya ing saben cilik nalika volume digawe, nanging kemungkinan sing bakal digawe tanpa nyoba maneh, Nanging, tambah.

NB Sampeyan bisa entuk informasi sing luwih rinci, uga kanthi aman "latihan ing cats stand", lan yen ana kahanan sing ora bisa dingerteni, entuk pitulung dhukungan teknis sing berkualitas ing kursus intensif - Pangkalan Kubernetes bakal dianakaké ing 28-30 September, lan kanggo spesialis luwih maju Kubernetes Mega 14–16 Oktober.

Keamanan

CSISstorageCapacity

Obyek CSIStorageCapacity manggon ing namespaces; nalika muter saben driver CSI ing namespace dhewe, disaranake kanggo matesi hak RBAC kanggo CSIStorageCapacity ing papan kasebut amarga wis jelas saka ngendi data kasebut. Kubernetes ora mriksa iki, lan biasane pembalap dilebokake ing ruang jeneng sing padha, saengga pungkasane driver bakal bisa digunakake lan ora nerbitake data sing salah (lan ing kene kertuku gagal, kira-kira. penerjemah adhedhasar guyon janggut)

Volume Ephemeral Tujuan Umum

Yen pangguna duwe hak nggawe pod (langsung utawa ora langsung), dheweke uga bakal bisa nggawe volume ephemeral tujuan umum sanajan ora duwe hak kanggo nggawe panjaluk ing volume kasebut. Iki amarga mriksa ijin RBAC ditrapake kanggo controller sing nggawe PVC, ora kanggo pangguna. Iki minangka owah-owahan utama kanggo nambah menyang akun sampeyan, sadurunge ngaktifake fitur iki ing kluster sing pangguna sing ora dipercaya kudu ora duwe hak nggawe volume.

Conto:

kapisah cabang PMEM-CSI ngemot kabeh owah-owahan sing perlu kanggo mbukak Kubernetes 1.19 cluster nang mesin virtual QEMU karo kabeh fitur ing tataran alpha. Kode driver ora diganti, mung panyebaran sing diganti.

Ing mesin sing cocog (Linux, pangguna normal bisa nggunakake docker, katon kene rincian) printah iki bakal mbukak kluster lan nginstal driver PMEM-CSI:

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

Sawise kabeh bisa digunakake, output bakal ngemot instruksi kanggo nggunakake:

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 -

Objek CSIStorageCapacity ora dimaksudake kanggo diwaca dening manungsa, mula mbutuhake sawetara pangolahan. Filter template Golang bakal nuduhake kelas panyimpenan, conto iki bakal nuduhake jeneng, topologi lan kapasitas:

$ 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

Sawijining obyek nduweni isi ing ngisor iki:

$ 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>

Ayo coba nggawe aplikasi demo kanthi volume ephemeral tujuan umum. Isi file 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

Sawise nggawe, kaya sing ditampilake ing pandhuan ing ndhuwur, saiki kita duwe pod tambahan lan PVC:

$ 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

Pemilik PVC - miturut:

$ 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
...

Informasi dianyari samesthine kanggo 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

Yen aplikasi liyane mbutuhake luwih saka 26620Mi, panjadwal ora bakal dianggep pmem-csi-pmem-govm-worker1 ing kabeh keadaan.

Apa sabanjuré?

Loro-lorone fitur isih ing pembangunan. Sawetara aplikasi dibukak sajrone tes alpha. Link proposal perbaikan nyathet karya sing kudu ditindakake kanggo pindhah menyang tahap beta, uga alternatif sing wis dianggep lan ditolak:

Source: www.habr.com

Add a comment