Jilid Ephemeral kalawan Kapasitas Panyimpenan Tracking: EmptyDir on Stéroid

Jilid Ephemeral kalawan Kapasitas Panyimpenan Tracking: EmptyDir on Stéroid

Sababaraha aplikasi ogé kudu nyimpen data, tapi aranjeunna cukup nyaman jeung kanyataan yén data moal disimpen sanggeus balikan deui.

Contona, jasa cache diwatesan ku RAM, tapi ogé bisa mindahkeun data anu jarang dipaké pikeun neundeun anu leuwih laun ti RAM, kalawan saeutik dampak dina kinerja sakabéh. Aplikasi sejenna kudu sadar yen meureun aya sababaraha input baca-hijina dina file, kayaning setelan atawa konci rusiah.

Kubernetes geus boga sababaraha jenis volume ephemeral, Tapi pungsionalitasna dugi ka anu dilaksanakeun dina K8s.

Ephemeral volume CSI diwenangkeun Kubernetes diperpanjang jeung drivers CSI nyadiakeun rojongan pikeun volume lokal lightweight. Ku cara kieu kasebut nyaéta dimungkinkeun pikeun ngagunakeun struktur wenang: setélan, rusiah, data idéntifikasi, variabel, jeung saterusna. drivers CSI kudu dirobah pikeun ngarojong fitur Kubernetes ieu, saprak eta dianggap yén drivers standardized biasa moal jalan - tapi dianggap yén volume misalna bisa dipaké dina sagala titik dipilih pikeun pod.

Ieu tiasa janten masalah pikeun volume anu meakeun sumber daya host anu penting atanapi pikeun neundeun anu ngan aya dina sababaraha host. Éta sababna Kubernetes 1.19 ngenalkeun dua fitur volume tés alfa énggal anu sacara konseptual sami sareng jilid EmptyDir:

  • volume ephemeral tujuan umum;

  • tracking kapasitas gudang CSI.

Kaunggulan tina pendekatan anyar:

  • gudang bisa lokal atawa disambungkeun via jaringan;

  • jilid tiasa gaduh ukuran anu khusus anu henteu tiasa dileuwihan ku aplikasi;

  • tiasa dianggo sareng supir CSI mana waé anu ngadukung penyediaan volume pengkuh sareng (pikeun ngadukung pelacak kapasitas) ngalaksanakeun sauran GetCapacity;

  • jilid tiasa gaduh sababaraha data awal gumantung kana supir sareng setélan;

  • kabéh operasi baku kalawan volume (nyieun snapshot a, ngarobah ukuran, jsb) dirojong;

  • volume bisa dipaké kalawan sagala controller aplikasi nu narima modul atawa spésifikasi volume;

  • Penjadwal Kubernetes milih titik anu cocog sorangan, ku kituna teu aya deui kabutuhan pikeun nyayogikeun sareng ngonpigurasikeun ekstensi panjadwal atanapi ngarobih webhooks.

Pilihan aplikasi

Ku alatan éta, volume ephemeral tujuan umum cocog pikeun kasus pamakean di handap ieu:

memori pengkuh salaku gaganti pikeun RAM pikeun memcached

Kaluaran panganyarna tina memcached rojongan ditambahkeun ngagunakeun memori pengkuh (Intel Optane, jsb., kira-kira. penerjemah) tinimbang RAM biasa. Nalika nyebarkeun memcached ngaliwatan controller aplikasi, anjeun tiasa nganggo volume ephemeral tujuan umum pikeun nyuhunkeun volume ukuran anu dipasihkeun tina PMEM nganggo supir CSI, contona. PMEM-CSI.

LVM gudang lokal salaku workspace a

Aplikasi anu tiasa dianggo sareng data anu langkung ageung tibatan RAM tiasa ngabutuhkeun panyimpenan lokal kalayan ukuran atanapi métrik kinerja anu teu tiasa disayogikeun ku volume EmptyDir biasa ti Kubernetes. Contona, pikeun tujuan ieu ditulis TopoLVM.

Aksés maca wungkul pikeun volume data

Alokasi volume tiasa nyababkeun nyiptakeun volume pinuh nalika:

Jilid ieu tiasa dipasang dina modeu baca wungkul.

Kumaha teu karya ieu

Jilid Ephemeral Tujuan Umum

Fitur konci volume ephemeral tujuan umum nyaéta sumber volume anyar, EphemeralVolumeSource, ngandung sagala widang pikeun nyieun pamundut volume (sajarah disebut paménta volume pengkuh, PVC). Controller anyar dina kube-controller-manager Sigana di pods nu nyieun sumber volume sapertos, lajeng nyiptakeun PVC pikeun pods maranéhanana. Pikeun supir CSI, pamundut ieu sami sareng anu sanés, janten henteu peryogi dukungan khusus di dieu.

Salami PVCs misalna aya, aranjeunna bisa dipaké kawas sagala requests sejenna dina volume. Khususna, aranjeunna tiasa dirujuk salaku sumber data nalika nyalin volume atanapi nyiptakeun snapshot tina volume. Obyék PVC ogé ngandung kaayaan volume ayeuna.

Ngaran PVCs otomatis dijieun tos siapkeun: aranjeunna mangrupakeun kombinasi antara ngaran pod jeung ngaran volume, dipisahkeun ku hyphen a. Ngaran anu siap-siap ngagampangkeun pikeun berinteraksi sareng PVC sabab anjeun henteu kedah milarian upami anjeun terang nami pod sareng nami volume. The downside nyaeta nami meureun geus dipaké, nu dideteksi ku Kubernetes sarta salaku hasilna pod diblokir ti mimiti.

Pikeun mastikeun yén polumeu dihapus babarengan jeung pod nu, controller ngajadikeun pamundut ka volume handapeun boga. Nalika pod dihapus, mékanisme pengumpulan sampah standar dianggo, anu ngahapus pamundut sareng volume.

Requests anu loyog ku supir gudang ngaliwatan mékanisme normal tina kelas gudang. Sanajan kelas kalawan langsung jeung telat mengikat (aka WaitForFirstConsumer) anu dirojong, pikeun jilid ephemeral ngajadikeun rasa ngagunakeun WaitForFirstConsumer, mangka scheduler bisa mertimbangkeun duanana pamakéan titik jeung kasadiaan gudang nalika milih titik. A fitur anyar nembongan di dieu.

Nyukcruk Kamampuh Panyimpen

Ilaharna scheduler teu boga pangaweruh ngeunaan mana supir CSI bakal nyieun volume. Teu aya ogé cara pikeun penjadwal ngahubungi supir langsung pikeun nyuhunkeun inpormasi ieu. Ku alatan éta, scheduler polling titik nepi ka manggihan hiji nu volume bisa diakses (telat ngariung) atawa ninggalkeun pilihan lokasi sagemblengna ka supir (ngabeungkeut langsung).

anyar API CSIStorageCapacity, anu aya dina tahap alfa, ngamungkinkeun data anu dipikabutuh pikeun disimpen dina etcd supados sayogi pikeun penjadwal. Beda sareng dukungan pikeun volume ephemeral tujuan umum, nalika anjeun nyebarkeun supir, anjeun kedah ngaktipkeun tracking kapasitas panyimpenan: external-provisioner kedah nyebarkeun informasi kapasitas nampi ti supir via normal GetCapacity.

Upami penjadwal kedah milih titik pikeun pod kalayan volume anu teu kabeungkeut anu nganggo telat ngariung, sareng supir ngaktifkeun fitur ieu salami panyebaran ku netepkeun bandéra. CSIDriver.storageCapacity, mangka titik nu teu boga kapasitas gudang cukup bakal otomatis dipiceun. Ieu lumaku pikeun duanana volume ephemeral tujuan umum tur persistent, tapi teu keur volume ephemeral CSI sabab parameter maranéhna teu bisa dibaca ku Kubernetes.

Sakumaha biasa, jilid anu langsung dikaitkeun didamel sateuacan polong dijadwalkeun, sareng panempatanna dipilih ku supir panyimpen, janten nalika ngonpigurasikeun. external-provisioner Sacara standar, kelas panyimpen kalayan langsung ngariung dilewatan, sabab data ieu moal dianggo waé.

Kusabab scheduler kubernetes kapaksa digawekeun ku informasi berpotensi kaluar-of-date, euweuh jaminan yén kapasitas bakal sadia dina unggal hal lamun volume dijieun, tapi Chances yén éta bakal dijieun tanpa retries nu Tapi ngaronjat.

NB Anjeun tiasa nampi inpormasi anu langkung rinci, ogé aman "latihan dina ucing nangtung", sareng upami aya kaayaan anu teu kaharti, nampi bantosan dukungan téknis anu mumpuni dina kursus intensif - Pangkalan Kubernetes bakal dilaksanakeun dina Séptémber 28-30, sarta pikeun spesialis leuwih maju Kubernetes Mega 14–16 Oktober.

kasalametan

CSISstorageCapacity

Objék CSIStorageCapacity cicing dina spasi ngaran; nalika ngagulung unggal supir CSI dina rohangan ngaran sorangan, disarankeun pikeun ngawatesan hak RBAC kana CSIStorageCapacity dina rohangan éta sabab écés ti mana asalna data. Kubernetes henteu marios ieu waé, sareng biasana supir dipasang dina rohangan ngaran anu sami, janten pamustunganana supir diperkirakeun tiasa dianggo sareng henteu nyebarkeun data anu salah (sareng ieu dimana kartu kuring gagal, kira-kira. penerjemah dumasar kana lulucon janggot)

Jilid Ephemeral Tujuan Umum

Lamun pamaké boga hak pikeun nyieun pod a (langsung atawa teu langsung), maranéhna ogé bakal bisa nyieun volume ephemeral tujuan umum sanajan maranéhna teu boga hak pikeun nyieun pamundut on volume. Ieu kusabab cék idin RBAC dilarapkeun ka controller nu nyiptakeun PVC, teu pamaké. Ieu parobahan utama pikeun nambahkeun kana akun anjeun, sateuacan ngaktipkeun fitur ieu dina klaster dimana pamaké nu teu dipercaya teu kudu boga hak pikeun nyieun jilid.

conto

Papisah carang PMEM-CSI ngandung sakabéh parobahanana diperlukeun pikeun ngajalankeun Kubernetes 1.19 klaster jero mesin virtual QEMU kalawan sagala fitur dina tahap alfa. Kode supir teu robah, ngan deployment geus robah.

Dina mesin anu cocog (Linux, pangguna normal tiasa nganggo Docker, neuteup di dieu rinci) paréntah ieu bakal naékkeun klaster sareng masang supir 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

Sanggeus sagalana jalan, kaluaran bakal ngandung parentah pikeun pamakéan:

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 -

Objék CSIStorageCapacity henteu dimaksudkeun pikeun dibaca ku manusa, janten peryogi sababaraha pamrosésan. Saringan template Golang bakal nunjukkeun kelas panyimpenan, conto ieu bakal nunjukkeun nami, topologi sareng 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

Obyék tunggal ngagaduhan eusi ieu:

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

Hayu urang cobian ngadamel aplikasi demo sareng volume ephemeral tujuan umum tunggal. eusi 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

Saatos nyiptakeun, sapertos anu dipidangkeun dina pitunjuk di luhur, urang ayeuna gaduh pod tambahan sareng 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

Pamilik PVC - handapeun:

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

Émbaran diperkirakeun diropéa pikeun 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

Upami aplikasi anu sanés peryogi langkung ti 26620Mi, penjadwal moal nganggap pmem-csi-pmem-govm-worker1 dina tiap hal.

Naon saterusna?

Duanana fitur masih dina ngembangkeun. Sababaraha aplikasi dibuka nalika nguji alfa. Panumbu usulan perbaikan ngadokumentasikeun padamelan anu kedah dilakukeun pikeun ngaléngkah ka tahap béta, ogé alternatif mana anu parantos dianggap sareng ditolak:

sumber: www.habr.com

Tambahkeun komentar