Awọn iwọn Ephemeral pẹlu Titọpa Agbara Ibi ipamọ: EmptyDir lori Awọn sitẹriọdu

Awọn iwọn Ephemeral pẹlu Titọpa Agbara Ibi ipamọ: EmptyDir lori Awọn sitẹriọdu

Diẹ ninu awọn ohun elo tun nilo lati tọju data, ṣugbọn wọn ni itunu pupọ pẹlu otitọ pe data kii yoo wa ni fipamọ lẹhin atunbere.

Fun apẹẹrẹ, awọn iṣẹ caching ni opin nipasẹ Ramu, ṣugbọn tun le gbe data ti o ṣọwọn lo si ibi ipamọ ti o lọra ju Ramu, pẹlu ipa kekere lori iṣẹ ṣiṣe gbogbogbo. Awọn ohun elo miiran nilo lati mọ pe o le jẹ diẹ ninu awọn titẹ sii kika-nikan ninu awọn faili, gẹgẹbi awọn eto tabi awọn bọtini ikoko.

Kubernetes ti ni awọn oriṣi pupọ ephemeral awọn iwọn didun, ṣugbọn iṣẹ-ṣiṣe wọn ni opin si ohun ti a ṣe ni awọn K8s.

Ephemeral Awọn iwọn didun CSI gba Kubernetes laaye lati faagun pẹlu awọn awakọ CSI lati pese atilẹyin fun awọn iwọn agbegbe iwuwo fẹẹrẹ. Ni ọna yii o ṣee ṣe lati lo lainidii ẹya: eto, asiri, data idanimọ, oniyipada, ati be be lo. Awọn awakọ CSI gbọdọ wa ni iyipada lati ṣe atilẹyin ẹya Kubernetes yii, nitori o ti ro pe awọn awakọ idiwọn deede kii yoo ṣiṣẹ - ṣugbọn o ro pe iru awọn ipele le ṣee lo lori ipade eyikeyi ti a yan fun podu naa.

Eyi le jẹ iṣoro fun awọn iwọn didun ti o nlo awọn orisun agbalejo pataki tabi fun ibi ipamọ ti o wa lori diẹ ninu awọn agbalejo. Ti o ni idi ti Kubernetes 1.19 ṣafihan awọn ẹya iwọn idanwo alpha tuntun meji ti o jọra ni imọran si awọn iwọn didun EmptyDir:

  • idi gbogbogbo awọn iwọn ephemeral;

  • CSI ipamọ agbara ipasẹ.

Awọn anfani ti ọna tuntun:

  • ibi ipamọ le jẹ agbegbe tabi ti sopọ nipasẹ nẹtiwọki kan;

  • awọn iwọn didun le ni iwọn kan pato ti ko le kọja nipasẹ ohun elo;

  • ṣiṣẹ pẹlu awọn awakọ CSI eyikeyi ti o ṣe atilẹyin ipese awọn iwọn itẹramọṣẹ ati (lati ṣe atilẹyin ipasẹ agbara) ṣe ipe naa GetCapacity;

  • awọn ipele le ni diẹ ninu data ibẹrẹ ti o da lori awakọ ati awọn eto;

  • gbogbo awọn iṣẹ ṣiṣe boṣewa pẹlu iwọn didun kan (ṣiṣẹda aworan, iwọn, ati bẹbẹ lọ) ni atilẹyin;

  • awọn iwọn didun le ṣee lo pẹlu eyikeyi oluṣakoso ohun elo ti o gba module tabi sipesifikesonu iwọn didun;

  • Oluṣeto Kubernetes yan awọn apa ti o dara fun tirẹ, nitorinaa o ko nilo lati pese ati tunto awọn amugbooro iṣeto ati yi awọn iwo wẹẹbu pada.

Awọn ohun elo

Nitorinaa, awọn iwọn ephemeral idi gbogbogbo dara fun awọn ọran lilo atẹle:

Iranti igbagbogbo bi aropo fun Ramu fun memcached

Awọn idasilẹ tuntun ti memcached kun support lilo iranti itẹramọṣẹ (Intel Optane, ati bẹbẹ lọ, isunmọ. onitumọ) dipo ti deede Ramu. Nigbati o ba n gbe memcached nipasẹ oluṣakoso ohun elo kan, o le lo awọn iwọn ephemeral idi gbogbogbo lati beere pe iwọn didun ti iwọn ti a fun ni a pin lati ọdọ PMEM ni lilo awakọ CSI, fun apẹẹrẹ. PMEM-CSI.

Ibi ipamọ agbegbe LVM bi aaye iṣẹ kan

Awọn ohun elo ti n ṣiṣẹ pẹlu data ti o tobi ju Ramu lọ le nilo ibi ipamọ agbegbe pẹlu iwọn tabi awọn metiriki iṣẹ ti awọn iwọn didun EmptyDir deede lati Kubernetes ko le pese. Fun apẹẹrẹ, fun idi eyi a ti kọ ọ TopLVM.

Wiwọle kika-nikan fun awọn iwọn data

Pipin iwọn didun le ja si ṣiṣẹda iwọn didun ni kikun nigbati:

Awọn iwọn didun wọnyi le wa ni gbigbe ni ipo kika-nikan.

Báwo ni ise yi

Idi gbogbogbo ephemeral awọn iwọn didun

Ẹya bọtini ti awọn iwọn ephemeral idi gbogbogbo jẹ orisun iwọn didun tuntun, EphemeralVolumeSource, ti o ni gbogbo awọn aaye lati ṣẹda ibeere iwọn didun kan (ti itan-akọọlẹ ti a npe ni ibeere iwọn didun itẹramọṣẹ, PVC). Oludari titun ni kube-controller-manager n wo awọn adarọ-ese ti o ṣẹda iru orisun iwọn didun, ati lẹhinna ṣẹda PVC fun awọn adarọ-ese yẹn. Fun awakọ CSI, ibeere yii dabi awọn miiran, nitorinaa ko nilo atilẹyin pataki nibi.

Niwọn igba ti iru awọn PVC bẹ wa, wọn le ṣee lo bi eyikeyi awọn ibeere miiran lori iwọn didun. Ni pataki, wọn le ṣe itọkasi bi orisun data nigba didakọ iwọn didun tabi ṣiṣẹda aworan kan lati iwọn didun kan. Ohun PVC tun ni ipo iwọn didun lọwọlọwọ.

Awọn orukọ ti awọn PVC ti a ṣẹda laifọwọyi jẹ asọye tẹlẹ: wọn jẹ apapọ ti orukọ podu ati orukọ iwọn didun, ti a yapa nipasẹ hyphen. Awọn orukọ ti a ti sọ tẹlẹ jẹ ki o rọrun lati ṣe ajọṣepọ pẹlu PVC nitori o ko ni lati wa ti o ba mọ orukọ podu ati orukọ iwọn didun. Ilẹ isalẹ ni pe orukọ le ti wa ni lilo tẹlẹ, eyiti o rii nipasẹ Kubernetes ati bi abajade ti dina podu lati bẹrẹ.

Lati rii daju pe iwọn didun ti paarẹ pẹlu adarọ ese, oluṣakoso ṣe ibeere kan si iwọn didun labẹ eni. Nigbati adarọ ese ba ti paarẹ, ẹrọ ikojọpọ idoti boṣewa n ṣiṣẹ, eyiti o paarẹ mejeeji ibeere ati iwọn didun.

Awọn ibeere ti baamu nipasẹ awakọ ibi ipamọ nipasẹ ọna deede ti kilasi ibi ipamọ. Botilẹjẹpe awọn kilasi pẹlu isọmọ lẹsẹkẹsẹ ati pẹ (aka WaitForFirstConsumer) ni atilẹyin, fun awọn iwọn didun ephemeral o jẹ oye lati lo WaitForFirstConsumer, lẹhinna oluṣeto le ṣe akiyesi lilo oju ipade mejeeji ati wiwa ibi ipamọ nigbati o ba yan ipade kan. Ẹya tuntun kan han nibi.

Titele Agbara ipamọ

Ni igbagbogbo oluṣeto ko ni imọ ti ibiti awakọ CSI yoo ṣẹda iwọn didun naa. Ko si ọna tun fun oluṣeto lati kan si awakọ taara lati beere alaye yii. Nitorinaa, oluṣeto idibo awọn apa titi yoo fi rii ọkan lori eyiti awọn iwọn le wọle si (isopọ pẹ) tabi fi yiyan ipo silẹ patapata si awakọ (isopọ lẹsẹkẹsẹ).

Titun API CSIStorageCapacity, eyiti o wa ni ipele alpha, ngbanilaaye data pataki lati wa ni ipamọ ni etcd ki o wa fun oluṣeto. Ko dabi atilẹyin fun awọn iwọn ephemeral idi gbogbogbo, nigbati o ba mu awakọ naa ṣiṣẹ, o gbọdọ mu ipasẹ agbara ibi ipamọ ṣiṣẹ: external-provisioner yẹ ki o ṣe atẹjade alaye agbara ti a gba lati ọdọ awakọ nipasẹ deede GetCapacity.

Ti oluṣeto ba nilo lati yan apa kan fun adarọ-ese pẹlu iwọn didun ti ko ni opin ti o nlo isọdọmọ pẹ, ati pe awakọ naa mu ẹya ara ẹrọ yii ṣiṣẹ lakoko imuṣiṣẹ nipasẹ tito asia CSIDriver.storageCapacity, lẹhinna awọn apa ti ko ni agbara ipamọ to ni yoo danu laifọwọyi. Eyi n ṣiṣẹ fun ephemeral idi gbogbogbo ati awọn ipele itẹramọṣẹ, ṣugbọn kii ṣe fun awọn iwọn ephemeral CSI nitori awọn aye-aye wọn ko le ka nipasẹ Kubernetes.

Gẹgẹbi o ti ṣe deede, awọn ipele ti o sopọ mọ lẹsẹkẹsẹ ni a ṣẹda ṣaaju iṣeto awọn adarọ-ese, ati pe o yan ipo wọn nipasẹ awakọ ibi ipamọ, nitorinaa nigbati atunto external-provisioner Nipa aiyipada, awọn kilasi ibi-itọju pẹlu isọmọ lẹsẹkẹsẹ ni a fo, nitori data yii kii yoo lo lonakona.

Niwọn igba ti oluṣeto kubernetes ti fi agbara mu lati ṣiṣẹ pẹlu alaye ti o le ni agbara, ko si iṣeduro pe agbara yoo wa ni gbogbo ọran nigbati iwọn didun ba ṣẹda, ṣugbọn awọn aye ti yoo ṣẹda laisi awọn atunwi ti pọ si.

NB O le gba alaye alaye diẹ sii, ati lailewu “iwa adaṣe lori iduro ologbo”, ati ni ọran ti ipo ti ko ni oye patapata, gba iranlọwọ atilẹyin imọ-ẹrọ ti o pe ni awọn iṣẹ ikẹkọ to lekoko - Kubernetes Mimọ yoo waye ni Oṣu Kẹsan Ọjọ 28-30, ati fun awọn alamọja ti ilọsiwaju diẹ sii Kubernetes Mega Oṣu Kẹwa 14–16.

Aabo

CSIStorage Agbara

Awọn ohun agbara CSIStorage n gbe ni awọn aaye orukọ; nigbati o ba n yi awakọ CSI kọọkan jade ni aaye orukọ tirẹ, o gba ọ niyanju lati ni ihamọ awọn ẹtọ RBAC si Agbara CSIstorage ni aaye yẹn nitori pe o han gbangba ibiti data n wa. Kubernetes ko ṣayẹwo fun eyi lonakona, ati nigbagbogbo awọn awakọ ni a fi si aaye orukọ kanna, nitorinaa a nireti awọn awakọ lati ṣiṣẹ ati pe ko ṣe atẹjade data ti ko tọ (ati pe eyi ni ibiti kaadi mi ti kuna, isunmọ. onitumọ da lori a awada irungbọn)

Idi gbogbogbo ephemeral awọn iwọn didun

Ti awọn olumulo ba ni awọn ẹtọ lati ṣẹda adarọ-ese (taara tabi ni aiṣe-taara), wọn yoo tun ni anfani lati ṣẹda awọn iwọn ephemeral idi gbogbogbo paapaa ti wọn ko ba ni awọn ẹtọ lati ṣẹda ibeere lori iwọn didun naa. Eyi jẹ nitori awọn sọwedowo igbanilaaye RBAC ni a lo si oludari ti o ṣẹda PVC, kii ṣe si olumulo. Eyi ni iyipada akọkọ lati ṣafikun si akọọlẹ rẹ, ṣaaju ṣiṣe ẹya ara ẹrọ yii lori awọn iṣupọ nibiti awọn olumulo ti ko ni igbẹkẹle ko yẹ ki o ni awọn ẹtọ lati ṣẹda awọn iwọn didun.

Apeere:

Lọtọ ẹka PMEM-CSI ni gbogbo awọn ayipada to ṣe pataki lati ṣiṣẹ iṣupọ Kubernetes 1.19 inu awọn ẹrọ foju QEMU pẹlu gbogbo awọn ẹya ni ipele alpha. Awọn koodu iwakọ ti ko yi pada, nikan ni imuṣiṣẹ ti yi pada.

Lori ẹrọ ti o yẹ (Linux, olumulo deede le lo Docker, wo nibi awọn alaye) awọn aṣẹ wọnyi yoo mu iṣupọ naa wa ki o fi awakọ PMEM-CSI sori ẹrọ:

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

Lẹhin ohun gbogbo ṣiṣẹ, abajade yoo ni awọn ilana fun lilo:

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 -

Awọn nkan agbara CSIstorage ko tumọ lati ka nipasẹ eniyan, nitorinaa diẹ ninu sisẹ nilo. Awọn asẹ awoṣe Golang yoo ṣafihan awọn kilasi ibi ipamọ, apẹẹrẹ yii yoo ṣafihan orukọ, topology ati agbara:

$ 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

Ohun kan ni akoonu wọnyi:

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

Jẹ ki a gbiyanju lati ṣẹda ohun elo demo kan pẹlu iwọn didun ephemeral idi gbogbogbo kan. Awọn akoonu faili 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

Lẹhin ṣiṣẹda, bi o ti han ninu awọn itọnisọna loke, a ni bayi ni afikun podu ati 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

Onilu PVC - labẹ:

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

O ti ṣe yẹ imudojuiwọn alaye fun 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

Ti ohun elo miiran ba nilo diẹ sii ju 26620Mi, oluṣeto naa kii yoo ṣe akiyesi pmem-csi-pmem-govm-worker1 bo se wu ko ri.

Ohun ti ni tókàn?

Awọn ẹya mejeeji tun wa ni idagbasoke. Ọpọlọpọ awọn ohun elo ti ṣii lakoko idanwo alpha. Awọn ọna asopọ imọran ilọsiwaju ṣe akosile iṣẹ ti o nilo lati ṣe lati lọ si ipele beta, bakannaa iru awọn omiiran ti a ti gbero tẹlẹ ati kọ:

orisun: www.habr.com

Fi ọrọìwòye kun