Boky Ephemeral miaraka amin'ny fanaraha-maso ny fahaiza-manao: EmptyDir amin'ny Steroid

Boky Ephemeral miaraka amin'ny fanaraha-maso ny fahaiza-manao: EmptyDir amin'ny Steroid

Ny fampiharana sasany koa dia mila mitahiry angon-drakitra, saingy mahazo aina izy ireo amin'ny hoe tsy ho voatahiry ny angon-drakitra aorian'ny fanombohana.

Ohatra, ny serivisy caching dia voafetra amin'ny RAM, saingy afaka mamindra angona izay zara raha ampiasaina amin'ny fitahirizana izay miadana kokoa noho ny RAM, ary misy fiantraikany kely amin'ny fampisehoana ankapobeny. Ny fampiharana hafa dia mila mahafantatra fa mety misy fampidirana vakiana fotsiny ao amin'ny rakitra, toy ny fanovana na fanalahidy miafina.

Efa manana karazany maromaro ny Kubernetes volume ephemeral, saingy voafetra amin'ny fampiharana ao amin'ny K8 ny fampiasany.

Ephemeral Ny vidin'ny CSI namela ny Kubernetes hitarina miaraka amin'ireo mpamily CSI mba hanomezana fanohanana ireo boky maivana eo an-toerana. Amin'izany fomba izany dia azo ampiasaina rafitra tsy misy dikany: toe-javatra, tsiambaratelo, angon-drakitra famantarana, miovaova, sy ny sisa. Ny mpamily CSI dia tsy maintsy ovaina hanohanana an'io endri-javatra Kubernetes io, satria heverina fa tsy mandeha ny mpamily manara-penitra - saingy heverina fa azo ampiasaina amin'ny node voafantina ho an'ny pod.

Mety ho olana ho an'ny boky mandany loharanon-karena manan-danja izany na ho an'ny fitahirizana izay tsy misy afa-tsy amin'ny mpampiantrano sasany. Izany no mahatonga an'i Kubernetes 1.19 hampiditra endri-tsarimihetsika alfa fitsapana roa vaovao izay mitovy amin'ny boky EmptyDir:

  • tanjona ankapoben'ny boky ephemeral;

  • Fanaraha-maso ny fahafahan'ny fitahirizana CSI.

Ny tombony amin'ny fomba fiasa vaovao:

  • Ny fitehirizana dia mety ho eo an-toerana na mifandray amin'ny tambajotra;

  • ny boky dia afaka manana habe voafaritra izay tsy azo mihoatra ny fampiharana;

  • miara-miasa amin'ireo mpamily CSI izay manohana ny famatsiana boky maharitra ary (hanohanana ny fanaraha-maso ny fahaiza-manao) manatanteraka ny antso GetCapacity;

  • Ny volume dia mety manana angon-drakitra voalohany miankina amin'ny mpamily sy ny toe-javatra;

  • tohanana ny asa mahazatra rehetra misy boky (famoronana sary, fanovana habeny, sns.)

  • azo ampiasaina miaraka amin'ny fanaraha-maso fampiharana rehetra izay manaiky ny maodely na ny fepetran'ny volume;

  • Ny mpandrindra Kubernetes dia misafidy ny nodes mety ho azy manokana, noho izany dia tsy ilaina intsony ny manome sy manitsy ny fanitarana fandaharam-potoana na manova ny webhooks.

Safidy fampiharana

Noho izany, ny volume ephemeral tanjona ankapobeny dia mety amin'ireto tranga manaraka ireto:

Fahatsiarovana maharitra ho solon'ny RAM ho an'ny memcached

Famoahana farany amin'ny memcached fanampiana fanampiny mampiasa fitadidiana maharitra (Intel Optane, sns., eo ho eo MPANDIKA TENY) fa tsy RAM mahazatra. Rehefa mampiasa memcached amin'ny alΓ lan'ny fanaraha-maso fampiharana, dia azonao atao ny mampiasa volume ephemeral amin'ny tanjona ankapobeny mba hangataka ny hanomezana ny haben'ny habeny iray avy amin'ny PMEM mampiasa ny mpamily CSI, ohatra. PMEM-CSI.

LVM fitahirizana eo an-toerana ho toeram-piasana

Ny rindranasa miasa miaraka amin'ny angona lehibe kokoa noho ny RAM dia mety mitaky fitahirizana eo an-toerana miaraka amin'ny habe na metrika fampisehoana izay tsy azon'ny boky EmptyDir mahazatra avy amin'ny Kubernetes. Ohatra, ho an'io tanjona io no nanoratana azy TopoLVM.

Fahazoana vakiana fotsiny ho an'ny habetsaky ny angona

Ny fizarana boky iray dia mety hahatonga ny famoronana boky feno rehefa:

Ireo boky ireo dia azo apetraka amin'ny fomba vakiana fotsiny.

Inona no manao izany asa

Boky Ephemeral tanjona ankapobeny

Ny endri-javatra manan-danja amin'ny volume ephemeral tanjona ankapobeny dia ny loharano vaovao, EphemeralVolumeSource, ahitana ny sehatra rehetra hamoronana fangatahana volume (antsoina hoe fangatahana volume maharitra, PVC). Controller vaovao in kube-controller-manager jereo ny pods izay mamorona loharanon-karena toy izany, ary avy eo dia mamorona PVC ho an'ireo pods ireo. Ho an'ny mpamily CSI dia mitovy amin'ny an'ny hafa io fangatahana io, ka tsy mila fanohanana manokana eto.

Raha mbola misy ny PVC toy izany, dia azo ampiasaina toy ny fangatahana hafa amin'ny volume izy ireo. Indrindra indrindra, azo lazaina ho loharanom-baovao izy ireo rehefa mandika boky na mamorona sary avy amin'ny boky iray. Ny zavatra PVC dia misy ihany koa ny toetry ny volume ankehitriny.

Ny anaran'ny PVC noforonina ho azy dia efa voafaritra mialoha: izy ireo dia fitambaran'ny anaran'ny pod sy ny anaran'ny volume, misaraka amin'ny tsipika. Ny anarana efa voafaritra dia manamora ny fifandraisana amin'ny PVC satria tsy mila mitady azy ianao raha fantatrao ny anaran'ny pod sy ny anaran'ny volume. Ny lafy ratsiny dia mety efa ampiasaina ilay anarana, izay hitan'ny Kubernetes ary vokatr'izany dia voasakana tsy hanomboka ny pod.

Mba hahazoana antoka fa voafafa ny feo miaraka amin'ny pod, ny controller dia manao fangatahana amin'ny volume eo ambanin'ny tompony. Rehefa voafafa ny pod dia miasa ny rafitra fanangonam-pako mahazatra, izay mamafa ny fangatahana sy ny volume.

Ny fangatahana dia ampifandraisin'ny mpamily fitahirizana amin'ny alΓ lan'ny mekanika mahazatra amin'ny kilasy fitahirizana. Na dia kilasy misy fatorana avy hatrany sy tara (aka WaitForFirstConsumer) dia tohanana, ho an'ny boky ephemeral dia misy dikany ny fampiasana azy WaitForFirstConsumer, dia afaka mandinika ny fampiasana node sy ny fisian'ny fitehirizana ny mpandrindra rehefa mifidy node. Misy endri-javatra vaovao miseho eto.

Fanaraha-maso ny fahafahan'ny fitahirizana

Amin'ny ankapobeny dia tsy manana fahalalana momba ny toerana hamoronan'ny mpamily CSI ny volume ny mpandrindra. Tsy misy ihany koa ny fomba hifandraisana mivantana amin'ny mpamily mba hangataka izany vaovao izany. Noho izany, ny fandatsaham-bato dia mivondrona mandra-pahitany ny boky azo idirana (famatotra tara) na hamela ny safidin'ny toerana ho an'ny mpamily (famatotra avy hatrany).

vaovao API CSIStorageCapacity, izay ao amin'ny dingana alpha, dia mamela ny angona ilaina ho voatahiry ao amin'ny etcd mba ho azon'ny mpandrindra. Tsy toy ny fanohanana ny volume ephemeral tanjona ankapobeny, rehefa mametraka ny mpamily ianao, dia tsy maintsy mamela ny fanaraha-maso ny fitahirizana: external-provisioner tokony hamoaka ny fampahalalana momba ny fahafaha-manao azo avy amin'ny mpamily amin'ny alΓ lan'ny normal GetCapacity.

Raha mila mifidy node iray ho an'ny pod misy votoaty tsy voafehy izay mampiasa fatorana tara ny mpandrindra, ary nampidirin'ny mpamily io endri-javatra io nandritra ny fametrahana azy tamin'ny fametrahana ny saina. CSIDriver.storageCapacity, avy eo ireo nodes izay tsy manana fahafaha-mitahiry ampy dia hatsipy ho azy. Izany dia miasa ho an'ny tanjona ankapobeny ephemeral sy maharitra, fa tsy ho an'ny CSI ephemeral volume satria tsy azon'ny Kubernetes vakiana ny mason'izy ireo.

Toy ny mahazatra, ny boky mifandray avy hatrany dia noforonina alohan'ny hanomanana ny pods, ary ny fametrahana azy dia nofidin'ny mpamily fitahirizana, ka rehefa manamboatra external-provisioner Amin'ny alΓ lan'ny default, ny kilasy fitahirizana misy fatorana eo no ho eo dia adino, satria tsy hampiasaina io angona io.

Koa satria voatery miasa miaraka amin'ny vaovao mety lany daty ny mpandrindra ny kubernetes, dia tsy misy antoka fa hisy ny fahafaha-manao amin'ny toe-javatra rehetra rehefa noforonina ny boky, saingy mitombo ny vintana hamoronana azy tsy misy andrana.

NB Afaka mahazo fampahalalana amin'ny antsipiriany bebe kokoa ianao, ary koa ny "fanazaran-tena amin'ny saka", ary raha misy toe-javatra tsy takatry ny saina, mahazo fanampiana ara-teknika mahafeno fepetra amin'ny fampianarana mafonja - Kubernetes Base hatao ny 28-30 septambra, ary ho an’ireo manampahaizana manokana Kubernetes Mega 14–16 Oktobra.

fiarovana

CSIStorageCapacity

Ny zavatra CSIStorageCapacity dia mipetraka amin'ny namespaces; rehefa mandroaka ny mpamily CSI tsirairay amin'ny toerana misy azy manokana, dia asaina mametra ny zon'ny RBAC amin'ny CSIStorageCapacity ao amin'io habaka io satria miharihary ny fiavian'ny angona. Tsy manara-maso izany na izany aza i Kubernetes, ary matetika ny mpamily dia apetraka amin'ny anaran'ny anarana mitovy, ka amin'ny farany dia andrasana hiasa ny mpamily fa tsy hamoaka data diso (ary teo no tsy nahomby ny karatro, eo ho eo mpandika teny mifototra amin'ny vazivazy be volombava)

Boky Ephemeral tanjona ankapobeny

Raha manan-jo hamorona pod (mivantana na ankolaka) ny mpampiasa, dia ho afaka mamorona volume ephemeral tanjona ankapobeny ihany koa izy ireo na dia tsy manana zo hamorona fangatahana amin'ny volume aza. Izany dia satria ny fanamarinana fahazoan-dΓ lana RBAC dia ampiharina amin'ny mpanara-maso izay mamorona PVC, fa tsy amin'ny mpampiasa. Io no fiovana lehibe tokony ampiana amin'ny kaontinao, alohan'ny hamelana ity endri-javatra ity amin'ny cluster izay tsy tokony hanana zo hamorona boky ny mpampiasa tsy mahatoky.

ohatra

Misaraka sampana Ny PMEM-CSI dia ahitana ny fanovana rehetra ilaina amin'ny fampandehanana cluster Kubernetes 1.19 ao anatin'ny milina virtoaly QEMU miaraka amin'ny endri-javatra rehetra ao amin'ny sehatra alpha. Tsy niova ny kaody mpamily fa ny deployment ihany no niova.

Amin'ny milina mety (Linux, mpampiasa mahazatra dia afaka mampiasa Docker, jereo eto antsipiriany) ireto baiko ireto dia hampiakatra ny cluster ary hametraka ny mpamily 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

Rehefa mandeha ny zava-drehetra dia hisy toromarika hampiasaina ny vokatra:

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 -

Ny zavatra CSIStorageCapacity dia tsy natao hovakian'ny olombelona, ​​noho izany dia ilaina ny fanodinana. Ny sivana template Golang dia hampiseho ny kilasy fitehirizana, ity ohatra ity dia hampiseho ny anarana, ny topolojia ary ny fahaiza-manao:

$ 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

Ny zavatra tokana dia manana ireto atiny manaraka ireto:

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

Andeha isika hanandrana hamorona fampiharana demo miaraka amin'ny volume ephemeral tanjona ankapobeny. Ny votoatin'ny rakitra 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

Aorian'ny famoronana, araka ny aseho amin'ny torolΓ lana etsy ambony, dia manana pod sy PVC fanampiny isika:

$ 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

Tompon'ny PVC - eo ambanin'ny:

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

Fanavaozana andrasana ho an'ny 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

Raha toa ka mila mihoatra ny 26620Mi ny fampiharana hafa, dia tsy hiraharaha ny fandaharam-potoana pmem-csi-pmem-govm-worker1 na izany na tsy izany.

Inona ny manaraka?

Ireo endri-javatra roa ireo dia mbola eo amin'ny fampandrosoana. Fampiharana maromaro no nosokafana nandritra ny fitsapana alpha. Ny rohin'ny tolo-kevitra fanatsarana dia mirakitra ny asa tokony hatao mba hirosoana amin'ny dingana beta, ary koa ireo safidy efa nodinihina sy nolavina:

Source: www.habr.com

Add a comment