Ephemeral Volumes with Storage Capacity Tracking: EmptyDir ntawm Steroids

Ephemeral Volumes with Storage Capacity Tracking: EmptyDir ntawm Steroids

Qee daim ntawv thov kuj yuav tsum khaws cov ntaub ntawv, tab sis lawv zoo siab heev nrog qhov tseeb tias cov ntaub ntawv yuav tsis raug cawm tom qab rov pib dua.

Piv txwv li, cov kev pabcuam caching raug txwv los ntawm RAM, tab sis tseem tuaj yeem txav cov ntaub ntawv uas tsis tshua siv los khaws cia uas qeeb dua li RAM, nrog rau kev cuam tshuam me ntsis ntawm kev ua haujlwm tag nrho. Lwm daim ntawv thov yuav tsum paub tias tej zaum yuav muaj qee qhov kev nyeem ntawv nkaus xwb hauv cov ntaub ntawv, xws li kev teeb tsa lossis cov yuam sij zais cia.

Kubernetes twb muaj ntau hom ephemeral ntim, tab sis lawv cov kev ua haujlwm tsuas yog siv rau hauv K8s.

Ephemeral CSI Volume tso cai rau Kubernetes txuas ntxiv nrog CSI tsav tsheb los muab kev txhawb nqa rau cov khoom hnyav hauv zos. Ua li no nws yog siv tau arbitrary qauv: kev teeb tsa, zais cia, cov ntaub ntawv qhia tus kheej, hloov pauv, thiab lwm yam. CSI tsav tsheb yuav tsum tau hloov kho los txhawb qhov Kubernetes feature, txij li nws tau xav tias cov qauv tsav tsheb tsis tu ncua yuav tsis ua haujlwm - tab sis nws tau xav tias cov ntim zoo li no tuaj yeem siv rau ntawm ib qho ntawm cov xaiv rau lub pod.

Qhov no tej zaum yuav yog ib qho teeb meem rau cov ntim uas siv cov peev txheej tseem ceeb lossis rau kev khaws cia uas tsuas muaj nyob rau qee lub tswv tsev. Tias yog vim li cas Kubernetes 1.19 qhia txog ob qhov tshiab alpha xeem ntim cov yam ntxwv uas zoo ib yam li EmptyDir ntim:

  • lub hom phiaj ephemeral ntim;

  • CSI cia muaj peev xwm taug qab.

Qhov zoo ntawm txoj kev tshiab:

  • cia tuaj yeem nyob hauv zos lossis txuas nrog lub network;

  • ntim tuaj yeem muaj qhov loj me uas tsis tuaj yeem dhau los ntawm daim ntawv thov;

  • ua haujlwm nrog txhua tus neeg tsav tsheb CSI uas txhawb nqa kev ntim khoom tsis tu ncua thiab (los txhawb kev muaj peev xwm taug qab) siv qhov kev hu GetCapacity;

  • ntim yuav muaj qee cov ntaub ntawv thawj zaug nyob ntawm tus tsav tsheb thiab kev teeb tsa;

  • tag nrho cov txheej txheem ua haujlwm nrog lub ntim (tsim snapshot, resizing, thiab lwm yam) tau txais kev txhawb nqa;

  • ntim tuaj yeem siv nrog txhua daim ntawv thov kev tswj hwm uas lees txais lub module lossis ntim specification;

  • Lub Kubernetes lub sijhawm teem sijhawm xaiv cov nodes uas tsim nyog ntawm nws tus kheej, yog li tsis tas yuav muab thiab teeb tsa lub sijhawm ncua sijhawm lossis hloov kho webhooks.

Daim ntawv thov kev xaiv

Yog li, lub hom phiaj dav dav ephemeral ntim yog tsim rau cov kev siv hauv qab no:

Lub cim xeeb tsis tu ncua raws li kev hloov pauv rau RAM rau memcached

Tshaj tawm tshiab ntawm memcached ntxiv kev txhawb nqa siv lub cim xeeb tsis tu ncua (Intel Optane, thiab lwm yam, kwv yees. tus txhais lus) hloov tsis tu ncua RAM. Thaum xa tawm memcached los ntawm kev tswj hwm daim ntawv thov, koj tuaj yeem siv cov khoom siv dav dav rau kev thov kom muaj qhov ntim ntawm qhov muab faib los ntawm PMEM siv tus tsav tsheb CSI, piv txwv li. PMEM-CSI.

LVM hauv zos cia ua chaw ua haujlwm

Cov ntawv thov uas ua haujlwm nrog cov ntaub ntawv loj dua RAM yuav xav tau kev cia hauv zos nrog qhov loj me lossis kev ntsuas kev ua haujlwm uas tsis tu ncua EmptyDir ntim los ntawm Kubernetes tsis tuaj yeem muab. Piv txwv li, rau lub hom phiaj no nws tau sau TopoLVM.

Nyeem nkaus xwb rau cov ntaub ntawv ntim

Kev faib tawm ntawm ib lub ntim tuaj yeem ua rau tsim lub ntim puv thaum:

Cov ntim no tuaj yeem txuas rau hauv hom nyeem nkaus xwb.

Yuav ua li cas li no ua hauj lwm

General Purpose Ephemeral Volumes

Ib qho tseem ceeb ntawm lub hom phiaj ephemeral ntim yog qhov ntim tshiab, EphemeralVolumeSource, muaj tag nrho cov teb los tsim ib daim ntawv thov ntim (keeb kwm hu ua ib qho kev thov ntim tsis tu ncua, PVC). Tshiab controller nyob rau hauv kube-controller-manager saib cov pods uas tsim cov khoom ntim zoo li no, thiab tom qab ntawd tsim PVC rau cov pods. Rau tus tsav tsheb CSI, qhov kev thov no zoo ib yam li lwm tus, yog li tsis muaj kev txhawb nqa tshwj xeeb ntawm no.

Ntev npaum li cov PVCs muaj nyob, lawv tuaj yeem siv tau zoo li lwm yam kev thov ntawm lub ntim. Tshwj xeeb, lawv tuaj yeem raug xa mus raws li cov ntaub ntawv qhov chaw thaum luam ib lub ntim lossis tsim ib qho snapshot los ntawm ntim. Cov khoom siv PVC kuj muaj lub xeev tam sim no ntawm lub ntim.

Cov npe ntawm cov PVC tsim tau raug txhais ua ntej: lawv yog kev sib xyaw ntawm lub npe pod thiab lub npe ntim, sib cais los ntawm hyphen. Cov npe ua ntej ua kom yooj yim rau kev cuam tshuam nrog PVC vim tias koj tsis tas yuav nrhiav nws yog tias koj paub lub npe ntawm lub plhaub thiab lub npe ntim. Qhov tsis zoo yog tias lub npe yuav twb tau siv lawm, uas tau kuaj pom los ntawm Kubernetes thiab vim li ntawd cov pods raug thaiv los ntawm kev pib.

Txhawm rau kom ntseeg tau tias lub ntim raug tshem tawm nrog rau lub plhaub taum pauv, tus maub los ua ib qho kev thov rau lub ntim hauv qab tus tswv. Thaum lub plhaub taum pauv, cov txheej txheem kev khaws khib nyiab ua haujlwm, uas tshem tawm ob qho kev thov thiab ntim.

Kev thov raug muab sib dhos los ntawm tus tsav tsheb cia los ntawm cov txheej txheem ib txwm muaj ntawm chav kawm cia. Txawm tias cov chav kawm nrog tam sim ntawd thiab lig khi (aka WaitForFirstConsumer) tau txais kev txhawb nqa, rau ephemeral ntim nws ua rau kev nkag siab siv WaitForFirstConsumer, ces tus teem sij hawm tuaj yeem xav txog ob qho kev siv node thiab kev cia khoom muaj nyob thaum xaiv ib qho. Ib tug tshiab feature tshwm ntawm no.

Cia Muaj Peev Xwm Tracking

Feem ntau tus neeg teem sijhawm tsis paub txog qhov twg tus tsav tsheb CSI yuav tsim lub ntim. Kuj tsis muaj txoj hauv kev rau tus teem sijhawm hu rau tus tsav tsheb ncaj qha los thov cov ntaub ntawv no. Yog li ntawd, tus teem caij xaiv tsa cov nodes kom txog rau thaum nws pom ib qho ntawm cov ntim tuaj yeem nkag mus tau (kawg khi) lossis tawm qhov kev xaiv ntawm qhov chaw tag nrho rau tus tsav tsheb (tam sim ntawd khi).

Tshiab API CSIStorageCapacity, uas yog nyob rau hauv alpha theem, tso cai rau cov ntaub ntawv tsim nyog yuav tsum tau muab cia rau hauv etcd kom nws muaj nyob rau lub teem caij. Tsis zoo li kev txhawb nqa rau lub hom phiaj dav dav dav dav, thaum koj xa tus tsav tsheb, koj yuav tsum ua kom muaj peev xwm taug qab: external-provisioner yuav tsum tshaj tawm cov ntaub ntawv muaj peev xwm tau txais los ntawm tus neeg tsav tsheb ntawm ib txwm muaj GetCapacity.

Yog tias tus neeg teem sijhawm yuav tsum xaiv ib lub pob rau lub plhaub nrog lub ntim tsis sib xws uas siv cov hlua khi, thiab tus neeg tsav tsheb tau qhib qhov no thaum lub sijhawm xa tawm los ntawm kev teeb tsa tus chij. CSIDriver.storageCapacity, ces cov nodes uas tsis muaj peev xwm cia txaus yuav raug muab pov tseg. Qhov no ua haujlwm rau ob qho tib si lub hom phiaj ephemeral thiab tas li ntim, tab sis tsis yog rau CSI ephemeral ntim vim tias lawv tsis tuaj yeem nyeem los ntawm Kubernetes.

Raws li ib txwm muaj, tam sim ntawd txuas cov ntim tau tsim ua ntej cov pods tau teem sijhawm, thiab lawv qhov kev tso kawm yog xaiv los ntawm tus tsav tsheb cia, yog li thaum teeb tsa external-provisioner Los ntawm lub neej ntawd, cov chav kawm cia nrog tam sim ntawd khi yog hla, vim tias cov ntaub ntawv no yuav tsis raug siv lawm.

Txij li thaum lub sijhawm kubernetes raug yuam kom ua haujlwm nrog cov ntaub ntawv tsis tu ncua, tsis muaj kev lees paub tias lub peev xwm yuav muaj nyob rau hauv txhua rooj plaub thaum lub ntim tau tsim, tab sis txoj hauv kev uas nws yuav raug tsim yam tsis muaj kev rov ua dua yog tseem nce ntxiv.

NB Koj tuaj yeem tau txais cov ntaub ntawv ntxaws ntxaws ntxiv, nrog rau kev nyab xeeb "kev xyaum ntawm cov miv sawv", thiab yog tias muaj qhov xwm txheej tsis txaus ntseeg, tau txais kev pabcuam tsim nyog ntawm cov kev kawm hnyav - Kubernetes Base yuav muaj nyob rau lub Cuaj Hlis 28-30, thiab rau cov kws tshaj lij tshaj lij Kubernetes Mega Kaum Hli 14–16.

Kev ruaj ntseg

CSIStorageCapacity

CSIStorageCapacity cov khoom nyob hauv namespaces; thaum dov tawm txhua tus tsav CSI hauv nws tus kheej lub npe, nws raug nquahu kom txwv RBAC txoj cai rau CSIStorageCapacity hauv qhov chaw vim nws pom tseeb qhov twg cov ntaub ntawv tuaj ntawm. Kubernetes tsis kuaj rau qhov no lawm, thiab feem ntau cov tsav tsheb tau muab tso rau hauv tib lub npe, yog li thaum kawg cov tsav tsheb yuav tsum ua haujlwm thiab tsis tshaj tawm cov ntaub ntawv tsis raug (thiab qhov no yog qhov kuv daim npav ua tsis tiav, kwv yees. tus neeg txhais lus raws li kev tso dag tso dag)

General Purpose Ephemeral Volumes

Yog tias cov neeg siv muaj cai los tsim cov pod (ncaj qha lossis tsis ncaj), lawv kuj tseem tuaj yeem tsim cov hom phiaj dav dav txawm tias lawv tsis muaj cai los tsim cov lus thov ntawm lub ntim. Qhov no yog vim RBAC kev tso cai kuaj xyuas yog siv rau cov maub los uas tsim cov PVC, tsis yog rau cov neeg siv. Qhov no yog qhov hloov pauv tseem ceeb ntxiv rau koj tus account, ua ntej ua kom muaj qhov tshwj xeeb no ntawm pawg uas tsis ntseeg cov neeg siv yuav tsum tsis muaj cai los tsim cov ntim.

Piv Txwv:

cais ceg PMEM-CSI muaj tag nrho cov kev hloov pauv tsim nyog los khiav Kubernetes 1.19 pawg hauv QEMU virtual tshuab nrog tag nrho cov yam ntxwv hauv theem alpha. Tus tsav tsheb code tsis tau hloov pauv, tsuas yog kev xa tawm tau hloov pauv.

Ntawm lub tshuab tsim nyog (Linux, tus neeg siv ib txwm siv tau docker, saib S, SΡ“S, cov ntsiab lus) cov lus txib no yuav coj cov pawg thiab nruab PMEM-CSI tsav tsheb:

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

Tom qab txhua yam ua haujlwm, cov zis yuav muaj cov lus qhia rau kev siv:

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 khoom tsis yog txhais tau tias yuav tsum tau nyeem los ntawm tib neeg, yog li yuav tsum muaj qee qhov kev ua haujlwm. Golang template filters yuav qhia cov chav kawm cia, qhov piv txwv no yuav qhia lub npe, topology thiab peev xwm:

$ 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

Ib yam khoom muaj cov ntsiab lus hauv qab no:

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

Wb sim los tsim ib daim ntawv thov demo nrog ib lub hom phiaj dav dav ephemeral ntim. Cov ntaub ntawv txheem 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

Tom qab tsim, raws li qhia nyob rau hauv cov lus qhia saum toj no, peb tam sim no muaj ib tug ntxiv pod thiab 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

PVC tus tswv - hauv qab:

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

Cia siab tias hloov tshiab cov ntaub ntawv rau 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

Yog tias lwm daim ntawv thov xav tau ntau dua 26620Mi, tus teem sijhawm yuav tsis suav nrog pmem-csi-pmem-govm-worker1 nyob rau hauv txhua rooj plaub.

Yuav ua li cas yog tom ntej no?

Ob qho tib si tseem nyob hauv kev txhim kho. Ob peb daim ntawv thov raug qhib thaum kuaj alpha. Cov kev txhim kho cov lus pom zoo txuas sau cov haujlwm uas yuav tsum tau ua kom txav mus rau theem beta, nrog rau cov kev xaiv uas twb tau txiav txim siab thiab tsis lees paub:

Tau qhov twg los: www.hab.com

Ntxiv ib saib