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 APICSIStorageCapacity, 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:
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
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: