Ephemeral Volumes with Storage Capacity Tracking: EmptyDir on Steroids

Ephemeral Volumes with Storage Capacity Tracking: EmptyDir on Steroids

O nisi tusi talosaga e manaʻomia foʻi le teuina o faʻamaumauga, ae latou te matua faʻalelei i le mea moni e le mafai ona faʻasaoina faʻamaumauga pe a uma le toe amataina.

Mo se faʻataʻitaʻiga, o auaunaga faʻapipiʻi e faʻatapulaʻaina e le RAM, ae mafai foi ona faʻanofoina faʻamatalaga e seasea faʻaaogaina i le teuina e sili atu lemu nai lo le RAM, e itiiti se aʻafiaga i le faʻatinoga atoa. O isi talosaga e tatau ona nofouta e ono i ai ni mea e na'o le faitau i totonu o faila, e pei o seti poʻo ki faalilolilo.

Kubernetes ua iai ni ituaiga voluma ephemeral, ae o latou galuega e faʻatapulaʻaina i mea o loʻo faʻatinoina i le K8s.

Epemera CSI voluma fa'ataga Kubernetes e fa'alautele ma aveta'avale CSI e tu'uina atu ai le lagolago mo voluma mama mama i le lotoifale. I lenei auala e mafai ona faʻaaogaina fa'atonuga fa'avae: faʻatulagaina, mea lilo, faʻamatalaga faʻamatalaga, fesuiaiga, ma isi. E tatau ona suia ta'avale CSI e lagolago ai lenei fa'aaliga Kubernetes, talu ai e manatu o le a le aoga ta'avale fa'asalalau masani - ae fa'apea e mafai ona fa'aoga ia voluma i so'o se node ua filifilia mo le pod.

Atonu o se fa'afitauli lea mo voluma o lo'o fa'aaogaina ai punaoa fa'apitoa po'o le teuina e na'o nisi 'au e maua. O le mea lea na faʻaalia ai e Kubernetes 1.19 ni faʻataʻitaʻiga fou e lua o suʻega faʻataʻitaʻiga alafaʻatasi e foliga tutusa ma le EmptyDir volumes:

  • fa'amoemoega lautele voluma ephemeral;

  • CSI e teu ai le gafatia o le siakiina.

Tulaga lelei o le auala fou:

  • teuina e mafai ona faʻapitonuʻu pe fesoʻotaʻi e ala i se fesoʻotaiga;

  • voluma e mafai ona i ai se lapopoa maoti e le mafai ona sili atu i le talosaga;

  • galue ma soʻo se avetaʻavale CSI e lagolagoina le tuʻuina atu o voluma faifai pea ma (e lagolago le gafatia o le siakiina) faʻatino le valaau GetCapacity;

  • voluma atonu e iai ni fa'amatalaga muamua e fa'atatau i le aveta'avale ma fa'atulagaga;

  • o fa'agaioiga masani uma fa'atasi ma se voluma (faia o se ata, fa'afouina, ma isi) e lagolagoina;

  • e mafai ona fa'aoga voluma ma so'o se fa'atonuga o talosaga e talia se fa'asologa po'o se fa'amatalaga voluma;

  • O le Kubernetes scheduler e filifilia e ia lava nodes talafeagai, o lea e le toe manaʻomia ai le tuʻuina atu ma faʻapipiʻi faʻaopoopoga faʻasologa poʻo le suia o webhooks.

Talosaga talosaga

O le mea lea, o voluma ephemeral fa'amoemoe lautele e talafeagai mo tulaga fa'aoga nei:

Manatua faifaipea e fai ma sui mo le RAM mo memcached

Fa'amatalaga lata mai o memcached faaopoopo lagolago faʻaaogaina manatuaga faifai pea (Intel Optane, ma isi, tusa. faaliliu) nai lo le RAM masani. A faʻapipiʻi le memcached e ala i se faʻatonuga o talosaga, e mafai ona e faʻaogaina voluma ephemeral faʻamoemoe lautele e talosagaina ai se voluma o se lapoʻa tuʻufaʻatasia e tuʻufaʻatasia mai le PMEM e faʻaaoga ai le avetaavale CSI, mo se faʻataʻitaʻiga PMEM-CSI.

LVM fa'apitonu'u teuina o se avanoa faigaluega

O talosaga e galulue ma fa'amaumauga e lapopoa atu i le RAM e ono mana'omia le teuina i totonu o le lotoifale ma se lapo'a po'o fua fa'atinoga e le mafai ona tu'uina atu e voluma masani EmptyDir mai Kubernetes. Mo se faʻataʻitaʻiga, mo lenei faʻamoemoe na tusia ai TopoLVM.

Avanoa na'o le faitau mo le tele o fa'amaumauga

O le fa'asoaina o se voluma e mafai ona i'u ai i le fausiaina o se voluma atoa pe a:

O nei voluma e mafai ona fa'apipi'i i le na'o le faitau.

E faapefea e lenei galuega

Fuafuaga Lautele Volumes Ephemeral

O se vaega taua o voluma ephemeral faamoemoega lautele o le puna fou voluma, EphemeralVolumeSource, o lo'o i ai uma fanua e fai ai se talosaga voluma (fa'asolopito ua ta'ua o se talosaga fa'aauau, PVC). Pule fou i totonu kube-controller-manager va'ava'ai i pusa o lo'o fa'atupuina se puna tele, ona fai lea o se PVC mo na pusa. Mo le avetaavale CSI, o lenei talosaga e foliga tutusa ma isi, o lea e leai se lagolago faʻapitoa e manaʻomia iinei.

Afai lava e iai ia PVC, e mafai ona faʻaaogaina e pei o isi talosaga ile voluma. Aemaise lava, e mafai ona faʻasinoina o se faʻamatalaga faʻamatalaga pe a kopiina se voluma poʻo le fatuina o se ata mai se voluma. O le mea PVC o loʻo i ai foi le tulaga o loʻo i ai nei o le voluma.

O igoa o PVC e otometi ona fatuina ua muaʻi faʻamalamalamaina: o se tuʻufaʻatasiga o le igoa pod ma le igoa voluma, e vavaeeseina e se vase. O igoa ua uma ona fa'avasegaina e faigofie ai ona fegalegaleai ma le PVC aua e te le tau su'eina pe a e iloa le igoa pod ma le voluma igoa. O le pito i lalo o le igoa atonu o loʻo faʻaaogaina, lea e iloa e Kubernetes ma o se taunuuga ua poloka le pod mai le amataina.

Ina ia mautinoa ua tape le leo faatasi ma le pod, e faia e le pule se talosaga i le leo i lalo o lē e ona. A tape le pod, e galue le faiga masani o le aoina o lapisi, lea e tape uma ai le talosaga ma le leo.

O talosaga e fa'afetaui e le aveta'avale teuina e ala i le faiga masani o le vasega teuina. E ui lava o vasega e vave ma tuai ona fusifusia (aka WaitForFirstConsumer) e lagolagoina, mo voluma ephemeral e talafeagai le faʻaaogaina WaitForFirstConsumer, ona mafai lea e le tagata faʻatulagaina ona mafaufau i le faʻaogaina o le node ma le avanoa e teu ai pe a filifilia se node. O lo'o fa'aalia mai se vaega fou iinei.

Su'esu'eina Avanoa Teuina

E masani lava e leai se malamalama o le tagata faʻatulagaina poʻo fea o le a fatuina ai e le avetaavale CSI le leo. E leai foi se auala e faʻafesoʻotaʻi saʻo ai e le tagata faʻatulagaina le avetaʻavale e talosagaina lenei faʻamatalaga. O le mea lea, o le fa'asologa o taimi e palota ai se'ia maua se tasi e mafai ona maua ai voluma (tuai fa'amauina) pe tu'u le filifiliga o le nofoaga i le aveta'avale (fa'atoa fusifusia).

Fou API CSIStorageCapacity, lea o loʻo i totonu o le alpha stage, faʻatagaina faʻamaumauga talafeagai e teuina i etcd ina ia avanoa i le faʻatulagaina. E le pei o le lagolago mo voluma ephemeral faamoemoega lautele, pe a e faʻaogaina le avetaʻavale, e tatau ona e faʻatagaina le siakiina o le gafatia e teu ai: external-provisioner e tatau ona fa'asalalau fa'amatalaga agava'a na maua mai le aveta'avale e ala ile masani GetCapacity.

Afai e manaʻomia e le tagata faʻatulagaina le filifilia o se node mo se pod e leai se voluma e faʻaaogaina le tuai ona fusifusia, ma na mafai e le avetaʻavale lenei mea i le taimi o le faʻapipiʻiina e ala i le setiina o le fuʻa. CSIDriver.storageCapacity, ona otometi lava ona lafoa'i pona e le lava le gafatia e teu ai. E aoga lenei mea mo le faʻamoemoe lautele ephemeral volumes ma faifai pea, ae le mo le CSI ephemeral volumes ona e le mafai ona faitau e Kubernetes o latou faʻamau.

E pei ona masani ai, e vave ona faʻapipiʻiina voluma aʻo leʻi faʻatulagaina pods, ma o latou tuʻuina e filifilia e le avetaʻavale teuina, o lea pe a faʻapipiʻi. external-provisioner Ona o le faaletonu, o vasega teu oloa ma le fusia vave e misia, talu ai o nei faʻamatalaga o le a le faʻaaogaina.

Talu ai ona o le kubernetes scheduler ua faʻamalosia e galue ma faʻamatalaga e le o toe aoga, e leai se faʻamautinoaga o le a maua le gafatia i tulaga uma pe a faia le voluma, ae o le avanoa o le a faia e aunoa ma le toe faia e faʻateleina.

NB E mafai ona e mauaina nisi faʻamatalaga auiliili, faʻapea foʻi ma le saogalemu "faʻataʻitaʻi i luga o le pusi tu", ma i le tulaga o se tulaga e matua le malamalama atoatoa, maua fesoasoani lagolago faʻapitoa i aʻoaʻoga mamafa - Kubernetes Base o le a faia ia Setema 28-30, ma mo isi tagata tomai faapitoa Kubernetes Mega Oketopa 14–16.

Puipuiga

CSIStorageCapacity

O mea faitino CSIStorageCapacity o lo'o i totonu o igoa avanoa; pe a ta'avale ta'avale CSI ta'itasi i lona lava igoa, e fautuaina le fa'atapula'aina o aia tatau a le RBAC i le CSIStorageCapacity i lena avanoa talu ai e manino le mea e sau ai fa'amaumauga. E le siakiina e Kubernetes lenei mea, ma e masani lava ona tuʻu avetaʻavale i le igoa e tasi, o le mea mulimuli e tatau ona galulue avetaʻavale ae le faʻasalalau faʻamatalaga sese (ma o le mea lea na le manuia ai laʻu kata, tusa. faaliliu upu e faavae i luga o se tala ula)

Fuafuaga Lautele Volumes Ephemeral

Afai ei ai i tagata fa'aoga aia tatau e fai ai se pod (tu'usa'o pe le tuusao), o le a mafai foi ona latou faia ni voluma ephemeral faamoemoega lautele tusa lava pe leai ni a latou aia e fai ai se talosaga i luga o le voluma. E mafua ona o siaki fa'atagaga a le RBAC o lo'o fa'aogaina i le pule e fa'atupu le PVC, ae le o le tagata fa'aoga. O le suiga autu lea e faaopoopo i lau teugatupe, a'o le'i fa'agaoioi le vaega lea i fuifui lea e le tatau ona i ai ni aia tatau a tagata e le fa'atuatuaina e fatu ai voluma.

Faataitaiga:

Vaevae lala O le PMEM-CSI o loʻo i ai suiga uma e manaʻomia e faʻatautaia ai le Kubernetes 1.19 faʻapipiʻi i totonu o masini komepiuta QEMU faʻatasi ai ma foliga uma i le alpha stage. E leʻi suia le code avetaʻavale, naʻo le faʻapipiʻiina ua suia.

I luga o se masini talafeagai (Linux, e mafai e se tagata masani ona faʻaogaina Docker, vaai iinei faʻamatalaga) o nei tulafono o le a aumaia ai le fuifui ma faʻapipiʻi le avetaʻavale 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

A maeʻa mea uma, o le gaosiga o le a iai faʻatonuga mo le faʻaaogaina:

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 -

O meafaitino CSIStorageCapacity e le'o tatau ona faitau e tagata, o lea e mana'omia ai nisi gaioiga. Golang template filters o le a faʻaalia vasega teuina, o lenei faʻataʻitaʻiga o le a faʻaalia ai le igoa, topology ma le gafatia:

$ 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

O se mea e tasi e iai mea nei:

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

Sei o tatou taumafai e fai se talosaga fa'ata'ita'iga ma se fa'amoemoe lautele e tasi le voluma ephemeral. Fa'amau faila 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

A maeʻa ona faia, e pei ona faʻaalia i faʻatonuga o loʻo i luga, o loʻo i ai nei a matou pusa faaopoopo ma 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

Pule PVC - lalo:

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

Fa'amoemoe fa'afouina fa'amatalaga mo 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

Afai e manaʻomia e se isi talosaga le sili atu nai lo le 26620Mi, o le a le amanaia e le tagata faʻatulagaina pmem-csi-pmem-govm-worker1 i soo se tulaga.

o sosoo ai le a?

O foliga uma e lua o loʻo faʻaauau pea ona atinaʻe. E tele talosaga na tatalaina i le taimi o su'ega alpha. O le talosaga mo le faʻaleleia o fesoʻotaʻiga o loʻo faʻamauina ai galuega e manaʻomia ona fai e agai i le beta stage, faʻapea foʻi ma isi mea ua uma ona iloiloina ma teena:

puna: www.habr.com

Faaopoopo i ai se faamatalaga