Mpịakọta Ephemeral nwere Nleba Ike Nchekwa: EmptyDir na Steroid

Mpịakọta Ephemeral nwere Nleba Ike Nchekwa: EmptyDir na Steroid

Ụfọdụ ngwa chọkwara ịchekwa data, mana ha nwere ntụsara ahụ na eziokwu ahụ bụ na agaghị echekwa data ahụ mgbe ịmalitegharịa.

Dịka ọmụmaatụ, ọrụ caching na-ejedebe site na RAM, mana ọ nwekwara ike ibugharị data nke a na-ejikarị eme ihe na nchekwa nke dị nwayọọ karịa RAM, na-enwe mmetụta dị nta na arụmọrụ zuru ezu. Ngwa ndị ọzọ kwesịrị ịma na enwere ike ịnwe ntinye naanị ọgụgụ na faịlụ, dị ka ntọala ma ọ bụ igodo nzuzo.

Kubernetes enweelarị ụdị dị iche iche mpịakọta ọnụ, mana ọrụ ha bụ naanị ihe etinyere na K8.

Ephemeral Mpịakọta CSI kwere ka ịgbatị Kubernetes na ndị ọkwọ ụgbọ ala CSI iji nye nkwado maka mpịakọta mpaghara dị fechaa. N'ụzọ dị otú a, ọ ga-ekwe omume iji ihe owuwu aka ike: ntọala, ihe nzuzo, data njirimara, mgbanwe, na ndị ọzọ. A ga-agbanwerịrị ndị ọkwọ ụgbọ ala CSI iji kwado atụmatụ Kubernetes a, ebe ọ bụ na a na-eche na ndị ọkwọ ụgbọ ala na-ahazi oge niile agaghị arụ ọrụ - mana a na-eche na enwere ike iji mpịakọta dị otú ahụ na ọnụ ọ bụla ahọpụtara maka pọd.

Nke a nwere ike ịbụ nsogbu maka mpịakọta na-eri akụrụngwa nnabata ma ọ bụ maka nchekwa nke dị naanị na ụfọdụ ndị ọbịa. Ọ bụ ya mere Kubernetes 1.19 ji ewebata njirimara olu ule alfa ọhụrụ abụọ nke yiri mpịakọta EmptyDir:

  • ebumnobi izugbe ọnụnụ ephemeral;

  • Nyocha ikike nchekwa CSI.

Uru nke ụzọ ọhụrụ a:

  • nchekwa nwere ike ịbụ mpaghara ma ọ bụ jikọọ site na netwọk;

  • mpịakọta nwere ike ịnwe oke a kapịrị ọnụ nke ngwa a enweghị ike gafere;

  • na-arụ ọrụ na ndị ọkwọ ụgbọ ala CSI ọ bụla na-akwado ịnye akwụkwọ mpịakọta na-adịgide adịgide yana (iji kwado ike nsuso) mejuputa oku a GetCapacity;

  • mpịakọta nwere ike ịnwe ụfọdụ data mbụ dabere na ọkwọ ụgbọ ala na ntọala;

  • A na-akwado ọrụ ọkọlọtọ niile nwere olu (ịmepụta foto, mezie nha, wdg);

  • enwere ike iji mpịakọta na njikwa ngwa ọ bụla na-anabata modul ma ọ bụ nkọwapụta olu;

  • Onye nhazi oge Kubernetes na-ahọrọ ọnụ ụzọ kwesịrị ekwesị n'onwe ya, yabụ na ọ dịghịzi mkpa ịnye na ịhazi ndọtị nhazi oge ma ọ bụ gbanwee webhooks.

Nhọrọ ngwa

Ya mere, mpịakọta ephemeral ebumnuche izugbe dabara adaba maka ikpe ojiji ndị a:

Ebe nchekwa na-adịgide adịgide dị ka nnọchi RAM maka memcached

Mwepụta kacha ọhụrụ nke memcached nkwado agbakwunyere iji ebe nchekwa na-adịgide adịgide (Intel Optane, wdg., ihe ruru. onye ntụgharị okwu) kama RAM oge niile. Mgbe ị na-ebuga memcached site na onye na-ahụ maka ngwa, ị nwere ike iji mpịakọta ephemeral ebumnuche izugbe na-arịọ ka ekenye oke nke nha enyere site na PMEM site na iji onye ọkwọ ụgbọ ala CSI, dịka ọmụmaatụ. PMEM-CSI.

Nchekwa mpaghara LVM dị ka oghere ọrụ

Ngwa ndị na-arụ ọrụ na data buru ibu karịa RAM nwere ike ịchọ nchekwa mpaghara nwere nha ma ọ bụ metrik arụmọrụ nke mpịakọta EmptyDir oge niile sitere na Kubernetes enweghị ike inye. Dịka ọmụmaatụ, maka ebumnuche a ka e dere ya TopoLVM.

Nweta naanị ọgụgụ maka mpịakọta data

Ekekọrịta olu nwere ike ime ka ịmepụta olu zuru oke mgbe:

Enwere ike itinye mpịakọta ndị a na ọnọdụ naanị ọgụgụ.

Olee otú nke a na-arụ ọrụ

Mpịakọta Ephemeral Nzube Izugbe

Akụkụ bụ isi nke mkpokọta mkpokọta ebumnuche izugbe bụ isi iyi olu ọhụrụ, EphemeralVolumeSource, nwere mpaghara niile iji mepụta arịrịọ olu (nke a na-akpọ arịrịọ olu na-adịgide adịgide, PVC). Onye njikwa ọhụrụ na kube-controller-manager na-ele anya na pọd ndị na-emepụta ụda olu dị otú ahụ, wee mepụta PVC maka pọd ndị ahụ. Maka onye ọkwọ ụgbọ ala CSI, arịrịọ a yiri nke ndị ọzọ, yabụ enweghị nkwado pụrụ iche achọrọ ebe a.

Ọ bụrụhaala na PVC ndị dị otú ahụ dị, enwere ike iji ha dị ka arịrịọ ọ bụla ọzọ na olu. Karịsịa, enwere ike ịkọwa ha dị ka isi iyi data mgbe ị na-edegharị olu ma ọ bụ na-emepụta foto site na olu. Ihe PVC nwekwara ọnọdụ olu ugbu a.

A kọwapụta aha PVC ndị emepụtara na-akpaghị aka: ha bụ nchikota nke aha pọd na aha olu, nke ejiri akara kewapụrụ. Aha ndị eburu ụzọ na-eme ka ọ dịrị gị mfe ịmekọrịta na PVC n'ihi na ịkwesighi ịchọ ya ma ọ bụrụ na ị maara aha pod na aha olu. Ihe dị ala bụ na aha ahụ nwere ike na-eji ya eme ihe, nke Kubernetes chọpụtara na n'ihi ya, a na-egbochi pods ịmalite.

Iji hụ na ehichapụ olu ya na pod, onye njikwa na-arịọ arịrịọ maka olu n'okpuru onye nwe ya. Mgbe ehichapụrụ pọd ahụ, usoro nchịkọta ihe mkpofu ọkọlọtọ na-arụ ọrụ, nke na-ehichapụ ma arịrịọ na olu.

Arịrịọ dakọtara site na ọkwọ ụgbọala nchekwa site na usoro nkịtị nke klaasị nchekwa ahụ. Agbanyeghị klaasị nwere njikọ ozugbo na mbubreyo (aka WaitForFirstConsumer) na-akwado, n'ihi na ephemeral mpịakọta ọ bụ ihe ezi uche na-eji WaitForFirstConsumer, mgbe ahụ, onye nhazi oge nwere ike ịtụle ma ojiji ọnụ na nnweta nchekwa mgbe ị na-ahọrọ ọnụ. Njirimara ọhụrụ pụtara ebe a.

Ndepụta ikike nchekwa

Na-emekarị onye nhazi oge amaghị ebe onye ọkwọ ụgbọ ala CSI ga-emepụta olu. Enweghịkwa ụzọ onye nhazi oge ga-esi kpọtụrụ onye ọkwọ ụgbọ ala ozugbo ịrịọ ozi a. Ya mere, onye na-eme nhazi na-eme ntuli aka ruo mgbe ọ chọtara otu nke enwere ike ịnweta mpịakọta (njide mbubreyo) ma ọ bụ hapụ nhọrọ nke ọnọdụ kpamkpam nye onye ọkwọ ụgbọ ala (njide ozugbo).

ọhụrụ API CSIStorageCapacity, nke dị na ọkwa alfa, na-enye ohere ka echekwara data dị mkpa na wdgd ka o wee dịrị onye nhazi oge. N'adịghị ka nkwado maka mkpokọta mkpokọta ebumnuche izugbe, mgbe ị na-ebuga onye ọkwọ ụgbọ ala, ị ga-emerịrị ike nsuso ikike nchekwa: external-provisioner kwesịrị ibipụta ozi ikike natara n'aka onye ọkwọ ụgbọ ala site na nkịtị GetCapacity.

Ọ bụrụ na onye nhazi oge kwesịrị ịhọrọ ọnụ maka pọd nwere olu na-adịghị agwụ agwụ nke na-eji njide mbubreyo, onye ọkwọ ụgbọ ala nyere aka n'oge a na-ebuga ya site na ịtọ ọkọlọtọ. CSIDriver.storageCapacity, mgbe ahụ a ga-atụfu ọnụ ọnụ ndị na-enweghị ikike nchekwa zuru oke na-akpaghị aka. Nke a na-arụ ọrụ maka ebumnuche izugbe na mpịakọta na-adịgide adịgide, mana ọ bụghị maka mpịakọta ephemeral CSI n'ihi na Kubernetes enweghị ike ịgụpụta paramịkọ ha.

Dị ka ọ dị na mbụ, a na-emepụta mpịakọta njikọ ozugbo tupu ahazi pods, onye ọkwọ ụgbọ ala na-ahọrọ ebe ha ga-edebe ya, yabụ mgbe ị na-ahazi ya. external-provisioner Site na ndabara, a na-amafe klaasị nchekwa nwere njide ozugbo, ebe ọ bụ na agaghị eji data a agbanyeghị.

Ebe ọ bụ na a na-amanye onye nhazi kubernetes ka ọ rụọ ọrụ na ozi nwere ike ịpụ, ọ nweghị nkwa na ikike ga-adị n'ọnọdụ ọ bụla mgbe a na-emepụta olu, mana ohere ọ ga-emepụta na-enweghị mbigharị na-abawanye.

NB Ị nwere ike nweta ozi zuru ezu karị, yana n'enweghị nsogbu "omume na nwamba guzoro", ma ọ bụrụ na ọnọdụ enweghị nghọta zuru oke, nweta enyemaka nkwado teknụzụ ruru eru na nkuzi kpụ ọkụ n'ọnụ - Kubernetes Base a ga-eme ya na Septemba 28-30, yana maka ndị ọkachamara dị elu karịa Kubernetes Mega Ọktoba 14–16.

Nche

Ike nchekwa CSIS

Ihe CSIStorageIke bi na oghere aha; mgbe ị na-atụgharị onye ọkwọ ụgbọ ala CSI ọ bụla n'aha nke ya, a na-atụ aro ka amachibido ikike RBAC na CSIStorageCapacity na oghere ahụ ebe ọ bụ na o doro anya na ebe data si abịa. Kubernetes anaghị enyocha nke a na agbanyeghị, a na-etinyekarị ndị ọkwọ ụgbọ ala n'otu aha aha, yabụ n'ikpeazụ a na-atụ anya na ndị ọkwọ ụgbọ ala ga-arụ ọrụ ma ghara ibipụta data ezighi ezi (na nke a bụ ebe kaadị m dara, ihe ruru. onye ntụgharị dabere na njakịrị afụ ọnụ)

Mpịakọta Ephemeral Nzube Izugbe

Ọ bụrụ na ndị ọrụ nwere ikike ịmepụta pọd (n'ụzọ ziri ezi ma ọ bụ na-apụtaghị ìhè), ha ga-enwekwa ike ịmepụta mkpokọta ephemeral ebumnuche izugbe ọbụlagodi na ha enweghị ikike ịmepụta arịrịọ na olu. Nke a bụ n'ihi na a na-etinye nlele ikike RBAC na njikwa na-emepụta PVC, ọ bụghị maka onye ọrụ. Nke a bụ isi mgbanwe ịgbakwunye na akaụntụ gị, tupu ị nweta njirimara a na ụyọkọ ebe ndị ọrụ enweghị ntụkwasị obi ekwesịghị inwe ikike ịmepụta mpịakọta.

Ihe nlele:

Kewapụ iche alaka PMEM-CSI nwere mgbanwe niile dị mkpa iji mee ụyọkọ Kubernetes 1.19 n'ime igwe mebere QEMU nwere njirimara niile dị na ọkwa alfa. Koodu ọkwọ ụgbọ ala agbanwebeghị, naanị nbunye gbanwere.

Na igwe dabara adaba (Linux, onye ọrụ nkịtị nwere ike iji Docker, lee ebe a nkọwa) iwu ndị a ga-ebulite ụyọkọ ahụ wee wụnye ọkwọ ụgbọala 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

Mgbe ihe niile na-arụ ọrụ, mmepụta ga-enwe ntụziaka maka ojiji:

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 -

Ihe CSIStorageIke ebughị n'obi ka mmadụ gụọ ya, yabụ achọrọ nhazi ụfọdụ. Ihe nzacha nke Golang ga-egosi klaasị nchekwa, ihe atụ a ga-egosi aha, topology na ikike:

$ 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

Otu ihe nwere ọdịnaya ndị a:

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

Ka anyị nwaa imepụta ngwa ngosi nwere otu ebumnuche izugbe n'okwu ọnụ. Faịlụ ọdịnaya 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

Mgbe ịmepụtara, dị ka egosiri na ntuziaka ndị dị n'elu, anyị nwere ugbu a ọzọ pod na 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

Onye nwe PVC - n'okpuru:

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

Ozi a tụrụ anya emelitere maka 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

Ọ bụrụ na ngwa ọzọ chọrọ karịa 26620Mi, onye nhazi ahụ agaghị echebara ya echiche pmem-csi-pmem-govm-worker1 otu ọ dịla.

Kedu ihe ọzọ?

Atụmatụ abụọ a ka na-emepe emepe. Emeghere ọtụtụ ngwa n'oge ule alfa. Njikọ atụmatụ nkwalite ahụ na-edekọ ọrụ a ga-eme iji gaa na ọkwa beta, yana nke ọzọ echebaralarị ma jụ:

isi: www.habr.com

Tinye a comment