Nā Volume Ephemeral me ka nānā ʻana i ka hiki ke mālama: EmptyDir ma nā Steroids

Nā Volume Ephemeral me ka nānā ʻana i ka hiki ke mālama: EmptyDir ma nā Steroids

Pono kekahi mau noi e mālama i ka ʻikepili, akā ʻoluʻolu lākou me ka ʻoiaʻiʻo ʻaʻole e mālama ʻia ka ʻikepili ma hope o ka hoʻomaka hou ʻana.

No ka laʻana, ua kaupalena ʻia nā lawelawe caching e RAM, akā hiki ke hoʻoneʻe i ka ʻikepili i hoʻohana ʻole ʻia i ka mālama ʻana i ʻoi aku ka lohi ma mua o ka RAM, me ka liʻiliʻi o ka hopena i ka hana holoʻokoʻa. Pono nā noi ʻē aʻe e hoʻomaopopo aia paha kekahi mau helu heluhelu-wale i nā faila, e like me nā hoʻonohonoho a i ʻole nā ​​kī huna.

Loaʻa i nā Kubernetes kekahi mau ʻano ephemeral volumes, akā ua kaupalena ʻia kā lākou hana i ka mea i hoʻokō ʻia ma nā K8.

Ephemeral Nā puke CSI ʻae ʻia nā Kubernetes e hoʻonui ʻia me nā mea hoʻokele CSI e hāʻawi i ke kākoʻo no nā puke kūloko māmā. Ma kēia ala hiki ke hoʻohana nā hale kūʻokoʻa: nā hoʻonohonoho, nā mea huna, ka ʻikepili ʻike, nā ʻano like ʻole, a pēlā aku. Pono e hoʻololi ʻia nā mea hoʻokele CSI no ke kākoʻo ʻana i kēia hiʻohiʻona Kubernetes, no ka mea, ua manaʻo ʻia ʻaʻole e hana nā mea hoʻokele maʻamau - akā manaʻo ʻia hiki ke hoʻohana ʻia ia mau puke ma kekahi node i koho ʻia no ka pod.

He pilikia paha kēia no nā puke e hoʻopau ana i nā kumu waiwai hoʻokipa nui a i ʻole no ka mālama ʻana i loaʻa wale ma kekahi mau pūʻali. ʻO ia ke kumu i hoʻolauna ai ʻo Kubernetes 1.19 i ʻelua mau hiʻohiʻona hoʻāʻo alpha hou e like me ka manaʻo like me nā puke EmptyDir:

  • nā puke ephemeral maʻamau;

  • Ka nānā ʻana i ka hiki ke mālama ʻia CSI.

Nā pōmaikaʻi o ke ala hou:

  • hiki ke hoʻopaʻa ʻia i ka ʻāina a i ʻole pili ʻia ma o kahi pūnaewele;

  • Hiki i nā puke ke loaʻa ka nui i ʻike ʻole ʻia e ka noi;

  • hana pū me nā mea hoʻokele CSI e kākoʻo ana i ka hoʻolako ʻana i nā leo hoʻomau a (no ke kākoʻo ʻana i ka hiki ke nānā) hoʻokō i ke kelepona. GetCapacity;

  • Loaʻa paha i nā volumes kekahi mau ʻikepili mua e pili ana i ka mea hoʻokele a me nā hoʻonohonoho;

  • kākoʻo ʻia nā hana maʻamau a pau me ka leo (hana i kahi kiʻi paʻi kiʻi, hoʻololi ʻana, etc.)

  • Hiki ke hoʻohana ʻia nā puke me kekahi mea hoʻoponopono noi e ʻae i kahi module a i ʻole kikoʻī leo;

  • Koho ka mea hoʻonohonoho Kubernetes i nā node kūpono iā ia iho, no laila ʻaʻohe pono e hoʻolako a hoʻonohonoho i nā hoʻonui hoʻonohonoho a hoʻololi paha i nā webhooks.

Nā koho uila

No laila, kūpono nā puke ephemeral kumu nui no nā hihia hoʻohana aʻe:

ʻO ka hoʻomanaʻo hoʻomau ma ke ʻano he pani no ka RAM no memcached

Nā hoʻopuka hou loa o memcached kākoʻo hou aku me ka hoʻohana ʻana i ka hoʻomanaʻo mau (Intel Optane, etc., kokoke. mea unuhi) ma kahi o ka RAM maʻamau. I ka hoʻohana ʻana i ka memcached ma o kahi mea hoʻoponopono noi, hiki iā ʻoe ke hoʻohana i nā volume ephemeral kumu nui e noi ai e hoʻokaʻawale ʻia kahi leo o ka nui i hāʻawi ʻia mai PMEM me ka hoʻohana ʻana i ka mea hoʻokele CSI, no ka laʻana. PMEM-CSI.

LVM waihona kūloko ma ke ʻano he wahi hana

Pono paha nā noi e hana me ka ʻikepili ʻoi aku ka nui ma mua o ka RAM me ka nui a i ʻole nā ​​ana hana i hiki ʻole i nā puke EmptyDir maʻamau mai Kubernetes ke hāʻawi. No ka laʻana, no kēia kumu i kākau ʻia ai TopoLVM.

Heluhelu wale no ka nui o ka ikepili

Hiki i ka hoʻokaʻawale ʻana i kahi leo ke hana i kahi leo piha inā:

Hiki ke kau ʻia kēia mau puke ma ke ʻano heluhelu wale nō.

Pehea hana i keia hana

Nui Ephemeral Volumes

ʻO kahi hiʻohiʻona nui o nā puke ephemeral kumu nui ʻo ke kumu leo ​​hou, EphemeralVolumeSource, i loko o nā māla a pau e hana i kahi noi leo (i kapa ʻia i ka mōʻaukala ʻo kahi noi hoʻomau mau, PVC). Mea hooponopono hou iloko kube-controller-manager e nānā i nā pods e hana ana i kēlā kumu leo, a laila hana i kahi PVC no kēlā mau pods. No ka mea hoʻokele CSI, ua like kēia noi me nā mea ʻē aʻe, no laila ʻaʻole pono ke kākoʻo kūikawā ma aneʻi.

I ka lōʻihi o ia mau PVC, hiki ke hoʻohana ʻia e like me nā noi ʻē aʻe ma ka leo. Ma keʻano kūikawā, hiki ke kuhikuhi ʻia lākou ma ke ʻano he kumu ʻikepili i ke kope ʻana i kahi leo a i ʻole ka hana ʻana i kahi kiʻi mai kahi leo. Aia pū ka mea PVC i ke kūlana o kēia manawa o ka leo.

Hoʻonohonoho mua ʻia nā inoa o nā PVC i hana maʻalahi: he hui ia o ka inoa pod a me ka inoa leo, i hoʻokaʻawale ʻia e kahi hyphen. ʻO nā inoa i koho mua ʻia e maʻalahi ke launa pū me ka PVC no ka mea ʻaʻole pono ʻoe e ʻimi inā ʻike ʻoe i ka inoa pod a me ka inoa leo. ʻO ka ʻaoʻao haʻahaʻa, ua hoʻohana ʻia ka inoa, i ʻike ʻia e Kubernetes a ma muli o ka hopena ua pale ʻia ka pod mai ka hoʻomaka ʻana.

No ka hōʻoia ʻana ua holoi ʻia ka leo me ka pod, noi ka mea hoʻoponopono i ka leo ma lalo o ka mea nona. Ke hoʻopau ʻia ka pod, hana ka mīkini ʻōpala maʻamau, kahi e holoi ai i ka noi a me ka leo.

Hoʻohālikelike ʻia nā noi e ka mea hoʻokele mālama ma o ka hana maʻamau o ka papa mālama. ʻOiai nā papa me ka paʻa koke a me ka lohi (aka WaitForFirstConsumer) ua kākoʻo ʻia, no nā puke ephemeral kūpono ke hoʻohana WaitForFirstConsumer, a laila hiki i ka mea hoʻonohonoho ke noʻonoʻo i ka hoʻohana ʻana i ka node a me ka loaʻa ʻana o ka waiho ʻana i ke koho ʻana i kahi node. Hōʻike ʻia kahi hiʻohiʻona hou ma aneʻi.

Ka hoʻokolo ʻana i ka hiki ke mālama

ʻO ka maʻamau, ʻaʻohe ʻike o ka mea hoʻonohonoho i kahi e hana ai ka mea hoʻokele CSI i ka leo. ʻAʻohe ala no ka mea hoʻonohonoho e hoʻopili pololei i ka mea hoʻokele e noi i kēia ʻike. No laila, koho ka mea hoʻonohonoho koho a loaʻa iā ia kahi e hiki ai ke komo i nā puke (ka hoʻopaʻa hope ʻana) a i ʻole waiho i ke koho o kahi wahi i ka mea hoʻokele (hoʻopaʻa koke).

Mea hou API CSIStorageCapacity, aia i loko o ka alpha stage, e ʻae i ka ʻikepili kūpono e mālama ʻia i etcd i loaʻa i ka mea hoʻonohonoho. ʻAʻole like me ke kākoʻo no nā puke ephemeral kumu nui, ke kau ʻoe i ka mea hoʻokele, pono ʻoe e ʻae i ka nānā ʻana i ka hiki ke mālama: external-provisioner pono e hoʻolaha i ka ʻike hiki ke loaʻa mai ka mea hoʻokele ma o ka maʻamau GetCapacity.

Inā pono ka mea hoʻonohonoho e koho i kahi node no kahi pod me ka leo i hoʻopaʻa ʻole ʻia e hoʻohana ana i ka hoʻopaʻa hope ʻana, a ua hoʻohana ka mea hoʻokele i kēia hiʻohiʻona i ka wā o ka hoʻonohonoho ʻana i ka hae. CSIDriver.storageCapacity, a laila e hoʻolei ʻia nā nodes i lawa ʻole ka mana mālama. Hana ʻia kēia no nā puʻupuʻu ephemeral a me nā puʻupuʻu hoʻomau, akā ʻaʻole no nā puke ephemeral CSI no ka mea ʻaʻole hiki ke heluhelu ʻia ko lākou mau palena e nā Kubernetes.

E like me ka mea maʻamau, hana ʻia nā puke i hoʻopili koke ʻia ma mua o ka hoʻonohonoho ʻana i nā pods, a koho ʻia ko lākou wahi e ka mea hoʻokele mālama, no laila ke hoʻonohonoho ʻana. external-provisioner ʻO ka mea paʻamau, hoʻokuʻu ʻia nā papa mālama me ka nakinaki koke ʻana, no ka mea, ʻaʻole e hoʻohana ʻia kēia ʻikepili.

No ka mea ua koi ʻia ka mea hoʻonohonoho kubernetes e hana me ka ʻike o ka wā kahiko, ʻaʻohe mea e hōʻoiaʻiʻo e loaʻa ka hiki i kēlā me kēia hihia ke hana ʻia ka leo, akā ua hoʻonui ʻia nā manawa e hana ʻia me ka ʻole o ka hoʻāʻo hou ʻana.

NB Hiki iā ʻoe ke loaʻa i ka ʻike kikoʻī hou aʻe, a me ka palekana "hoʻomaʻamaʻa i nā pōpoki kū", a inā he kūlana hiki ʻole ke hoʻomaopopo ʻia, e loaʻa i ke kōkua kākoʻo ʻenehana kūpono i nā papa koʻikoʻi - Kubernetes Base e mālama ʻia ma ka lā 28-30 o Kepakemapa, a no nā loea ʻoi aʻe Kubernetes Mega ʻOkakopa 14–16.

Ka maluhia

CSIStorageCapacity

Noho nā mea CSIStorageCapacity i nā inoa; i ka wā e ʻōwili ai i kēlā me kēia mea hoʻokele CSI i kona inoa inoa ponoʻī, pono ia e kaohi i nā kuleana RBAC i ka CSIStorageCapacity ma ia wahi no ka mea ua maopopo kahi e hele mai ai ka ʻikepili. ʻAʻole nānā ʻo Kubernetes i kēia, a ʻo ka mea maʻamau e hoʻokomo ʻia nā mea hoʻokele i ka inoa inoa like, no laila e manaʻo ʻia nā mea hoʻokele e hana a ʻaʻole hoʻolaha i ka ʻikepili pololei (a ʻo ia kahi i hāʻule ai kaʻu kāleka, kokoke. unuhi ma muli o ka ʻumiʻumi hoʻohenehene)

Nui Ephemeral Volumes

Inā loaʻa i nā mea hoʻohana nā kuleana e hana i kahi pod (pololei a ʻaʻole pololei paha), hiki iā lākou ke hana i nā puke ephemeral kumu nui inā ʻaʻohe o lākou kuleana e hana i kahi noi ma ka leo. ʻO kēia no ka mea ua hoʻopili ʻia nā loiloi ʻae RBAC i ka mea hoʻoponopono i hana i ka PVC, ʻaʻole i ka mea hoʻohana. ʻO kēia ka hoʻololi nui e hoʻohui i kāu moʻokāki, ma mua o ka hoʻohana ʻana i kēia hiʻohiʻona ma nā pūʻulu kahi e pono ʻole ai nā mea hoʻohana hilinaʻi ʻole e hana i nā puke.

Pākuhi:

Hoʻokaʻawale lālā Loaʻa i ka PMEM-CSI nā hoʻololi āpau e pono ai e holo i kahi hui Kubernetes 1.19 i loko o nā mīkini virtual QEMU me nā hiʻohiʻona āpau i ka pae alpha. ʻAʻole i hoʻololi ke code kaʻa, ua loli wale ka hoʻolaha.

Ma kahi mīkini kūpono (Linux, hiki i kahi mea hoʻohana maʻamau ke hoʻohana Docker, nana maanei nā kikoʻī) e lawe mai kēia mau kauoha i ka hui a hoʻokomo i ka mea hoʻokele 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

Ma hope o ka hana ʻana o nā mea a pau, e loaʻa nā ʻōlelo kuhikuhi no ka hoʻohana ʻana:

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 -

ʻAʻole i manaʻo ʻia nā mea CSIStorageCapacity e heluhelu ʻia e nā kānaka, no laila e koi ʻia kekahi hana. E hōʻike ana nā kānana template Golang i nā papa mālama, e hōʻike kēia hiʻohiʻona i ka inoa, topology a me ka hiki:

$ 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

Loaʻa i kekahi mea hoʻokahi kēia maʻiʻo:

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

E hoʻāʻo mākou e hana i kahi noi demo me ka leo ephemeral kumu hoʻokahi. waihona waihona 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

Ma hope o ka hana ʻana, e like me ka mea i hōʻike ʻia ma nā ʻōlelo aʻoaʻo ma luna, ua loaʻa iā mākou kahi pod a me 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

Mea nona ka PVC - ma lalo o:

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

ʻIke hou ʻia i manaʻo ʻia no 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

Inā makemake ʻia kahi noi ʻē aʻe ma mua o 26620Mi, ʻaʻole e noʻonoʻo ka mea hoʻonohonoho pmem-csi-pmem-govm-worker1 i kekahi hihia.

He aha ka mea e hiki mai ana?

Ke hoʻomau nei nā hiʻohiʻona ʻelua. Ua wehe ʻia kekahi mau noi i ka wā hoʻāʻo alpha. Hoʻopaʻa nā loulou i ka manaʻo hoʻomaikaʻi i ka hana e pono ai e neʻe i ka pae beta, a me nā mea ʻē aʻe i noʻonoʻo ʻia a hōʻole ʻia:

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka