ProHoster > Օրագիր > Վարչակազմը > Ժամանակավոր ծավալներ՝ պահպանման հզորության հետագծմամբ. EmptyDir ստերոիդների վրա
Ժամանակավոր ծավալներ՝ պահպանման հզորության հետագծմամբ. EmptyDir ստերոիդների վրա
Որոշ հավելվածներ նույնպես պետք է պահեն տվյալներ, բայց նրանց համար բավականին հարմար է այն փաստը, որ տվյալները չեն պահպանվի վերագործարկումից հետո:
Օրինակ, քեշավորման ծառայությունները սահմանափակված են RAM-ով, բայց կարող են նաև տեղափոխել այն տվյալները, որոնք հազվադեպ են օգտագործվում RAM-ից ավելի դանդաղ պահեստավորման համար, ինչը փոքր ազդեցություն ունի ընդհանուր կատարողականի վրա: Այլ հավելվածները պետք է տեղյակ լինեն, որ ֆայլերում կարող են լինել միայն կարդալու մուտքագրումներ, ինչպիսիք են կարգավորումները կամ գաղտնի ստեղները:
Kubernetes-ն արդեն ունի մի քանի տեսակներ վաղանցիկ ծավալներ, սակայն դրանց ֆունկցիոնալությունը սահմանափակվում է K8-ներում ներդրվածով:
Ժամանակավոր CSI հատորները թույլ տվեց Kubernetes-ը ընդլայնել CSI վարորդների հետ՝ աջակցություն տրամադրելու թեթև լոկալ ծավալներին: Այս կերպ հնարավոր է օգտագործել կամայական կառույցներկարգավորումներ, գաղտնիքներ, նույնականացման տվյալներ, փոփոխականներ և այլն: CSI դրայվերները պետք է փոփոխվեն Kubernetes-ի այս ֆունկցիան աջակցելու համար, քանի որ ենթադրվում է, որ սովորական ստանդարտացված դրայվերները չեն աշխատի, բայց ենթադրվում է, որ նման ծավալները կարող են օգտագործվել pod-ի համար ընտրված ցանկացած հանգույցի վրա:
Սա կարող է խնդիր լինել այն ծավալների համար, որոնք սպառում են զգալի հյուրընկալող ռեսուրսներ կամ պահեստավորման համար, որը հասանելի է միայն որոշ հոսթորդների համար: Ահա թե ինչու Kubernetes 1.19-ը ներկայացնում է երկու նոր ալֆա թեստավորման ծավալի առանձնահատկություններ, որոնք կոնցեպտուալ առումով նման են EmptyDir հատորներին.
ընդհանուր նշանակության ժամանակավոր ծավալներ;
CSI պահեստավորման կարողությունների հետևում:
Նոր մոտեցման առավելությունները.
պահեստը կարող է լինել տեղական կամ միացված ցանցի միջոցով.
հատորները կարող են ունենալ նշված չափս, որը չի կարող գերազանցվել հավելվածի կողմից.
աշխատում է ցանկացած CSI վարորդների հետ, որոնք աջակցում են մշտական ծավալների տրամադրմանը և (հզորությունների հետևմանն աջակցելու համար) իրականացնում են զանգը GetCapacity;
ծավալները կարող են ունենալ որոշ նախնական տվյալներ՝ կախված վարորդից և կարգավորումներից.
բոլոր ստանդարտ գործողությունները ծավալով (պատկերի ստեղծում, չափափոխում և այլն) աջակցվում են.
Ծավալները կարող են օգտագործվել ցանկացած հավելվածի կարգավորիչի հետ, որն ընդունում է մոդուլ կամ ծավալի ճշգրտում.
Kubernetes-ի ժամանակացույցն ինքնուրույն ընտրում է համապատասխան հանգույցներ, ուստի այլևս կարիք չկա ժամանակացույցի ընդլայնումներ տրամադրելու և կազմաձևելու կամ վեբ-կեռիկներ փոփոխելու:
Դիմումի ընտրանքներ
Հետևաբար, ընդհանուր նշանակության ժամանակավոր ծավալները հարմար են հետևյալ օգտագործման դեպքերի համար.
Մշտական հիշողություն որպես RAM-ի փոխարինում memcached-ի համար
Memcached-ի վերջին թողարկումները ավելացված աջակցություն օգտագործելով մշտական հիշողություն (Intel Optane և այլն, մոտ. թարգմանիչ) սովորական RAM-ի փոխարեն: Ծրագրի կարգավորիչի միջոցով memcached-ը տեղակայելիս կարող եք օգտագործել ընդհանուր նշանակության ժամանակավոր ծավալներ՝ խնդրելով, որ տվյալ չափի ծավալը հատկացվի PMEM-ից՝ օգտագործելով CSI դրայվերը, օրինակ, PMEM-CSI.
LVM տեղական պահեստավորումը որպես աշխատանքային տարածք
Հավելվածները, որոնք աշխատում են RAM-ից ավելի տվյալների հետ, կարող են պահանջել տեղային հիշողություն՝ չափի կամ կատարողականի չափման չափանիշով, որը Kubernetes-ի սովորական EmptyDir հատորները չեն կարող ապահովել: Օրինակ, այս նպատակով գրված էր TopoLVM.
Միայն կարդալու հասանելիություն տվյալների ծավալների համար
Հատորի բաշխումը կարող է հանգեցնել ամբողջական ծավալի ստեղծմանը, երբ.
Այս ծավալները կարող են տեղադրվել միայն կարդալու ռեժիմում:
Ինչպես է այն աշխատում
Ընդհանուր նշանակության էֆեմերալ ծավալներ
Ընդհանուր նշանակության ժամանակավոր ծավալների հիմնական հատկանիշը նոր ծավալի աղբյուրն է, EphemeralVolumeSource, որը պարունակում է բոլոր դաշտերը՝ ծավալի հարցում ստեղծելու համար (պատմականորեն կոչվում է մշտական ծավալի հարցում՝ PVC): Նոր վերահսկիչ kube-controller-manager նայում է պատիճներին, որոնք ստեղծում են նման ծավալի աղբյուր, այնուհետև ստեղծում է ՊՎՔ այդ պատիճների համար: CSI վարորդի համար այս հարցումը նույնն է, ինչ մյուսները, ուստի այստեղ հատուկ աջակցություն կարիք չկա:
Քանի դեռ այդպիսի PVC-ները գոյություն ունեն, դրանք կարող են օգտագործվել, ինչպես ցանկացած այլ հարցում ձայնի վրա: Մասնավորապես, դրանք կարող են հիշատակվել որպես տվյալների աղբյուր՝ հատորը պատճենելիս կամ հատորից նկար ստեղծելիս: PVC օբյեկտը պարունակում է նաև ծավալի ներկայիս վիճակը:
Ինքնաբերաբար ստեղծված PVC-ների անունները նախապես սահմանված են. դրանք պատիճ անվան և ծավալի անվան համակցություն են՝ բաժանված գծիկով: Նախապես սահմանված անունները հեշտացնում են ՊՎՔ-ի հետ փոխգործակցությունը, քանի որ այն փնտրելու կարիք չկա, եթե գիտեք պատիճ անվանումը և ծավալի անվանումը: Բացասական կողմն այն է, որ անունը կարող է արդեն օգտագործվել, ինչը հայտնաբերվում է Kubernetes-ի կողմից, և արդյունքում pod-ը արգելափակվում է սկսելու համար:
Ապահովելու համար, որ ձայնը ջնջվում է պատի հետ միասին, կարգավորիչը հարցում է կատարում սեփականատիրոջ տակ գտնվող ձայնին: Երբ պատիճը ջնջվում է, աշխատում է աղբահանության ստանդարտ մեխանիզմը, որը ջնջում է և՛ հարցումը, և՛ ծավալը։
Հարցումները համընկնում են պահեստավորման վարորդի կողմից պահեստավորման դասի նորմալ մեխանիզմի միջոցով: Թեև անհապաղ և ուշ պարտադիր պարտադիր դասեր (aka WaitForFirstConsumer) աջակցվում են, ժամանակավոր ծավալների համար իմաստ ունի օգտագործել WaitForFirstConsumer, ապա ժամանակացույցը կարող է հաշվի առնել ինչպես հանգույցի օգտագործումը, այնպես էլ պահեստավորման առկայությունը հանգույց ընտրելիս: Այստեղ հայտնվում է նոր գործառույթ:
Պահպանման հզորության հետևում
Սովորաբար ժամանակացույցը չգիտի, թե որտեղ է CSI դրայվերը ստեղծելու ձայնը: Չկա նաև հնարավորություն, որ ժամանակացույցը ուղղակիորեն կապվի վարորդի հետ՝ խնդրելու այս տեղեկությունը: Հետևաբար, ժամանակացույցը հարցումներ է կատարում հանգույցների վրա, մինչև գտնի մեկը, որի վրա կարելի է մուտք գործել հատորներ (ուշ կապում) կամ թողնում է գտնվելու վայրի ընտրությունը ամբողջությամբ վարորդին (անմիջական կապում):
Նոր APICSIStorageCapacity, որը գտնվում է ալֆա փուլում, թույլ է տալիս անհրաժեշտ տվյալները պահել etcd-ում, որպեսզի դրանք հասանելի լինեն ժամանակացույցին։ Ի տարբերություն ընդհանուր նշանակության ժամանակավոր ծավալների աջակցության, երբ տեղադրում եք վարորդը, դուք պետք է միացնեք պահեստային կարողությունների հետագծումը. external-provisioner պետք է հրապարակի վարորդից ստացված կարողությունների մասին տեղեկատվությունը նորմալ միջոցով GetCapacity.
Եթե ժամանակացույցը պետք է ընտրի հանգույց առանց կապի ծավալով պատիվի համար, որն օգտագործում է ուշ կապում, և վարորդը միացրել է այս գործառույթը տեղակայման ժամանակ՝ դնելով դրոշակը: CSIDriver.storageCapacity, ապա այն հանգույցները, որոնք չունեն բավարար պահեստային հզորություն, ավտոմատ կերպով կհեռացվեն: Սա աշխատում է և՛ ընդհանուր նշանակության ժամանակավոր, և՛ մշտական ծավալների համար, բայց ոչ CSI ժամանակավոր ծավալների համար, քանի որ դրանց պարամետրերը չեն կարող կարդալ Kubernetes-ի կողմից:
Ինչպես միշտ, անմիջապես կապակցված հատորները ստեղծվում են նախքան պատիճների պլանավորումը, և դրանց տեղադրումն ընտրվում է պահեստավորման վարորդի կողմից, այնպես որ կարգավորելիս external-provisioner Լռելյայնորեն, անհապաղ կապով պահեստավորման դասերը բաց են թողնվում, քանի որ այս տվյալները, այնուամենայնիվ, չեն օգտագործվի:
Քանի որ kubernetes ժամանակացույցը ստիպված է աշխատել պոտենցիալ հնացած տեղեկատվության հետ, երաշխիք չկա, որ հզորությունը հասանելի կլինի ամեն դեպքում, երբ ծավալը ստեղծվի, բայց հավանականությունը, որ այն կստեղծվի առանց կրկնակի փորձերի, այնուամենայնիվ, մեծանում է:
NB Դուք կարող եք ավելի մանրամասն տեղեկություններ ստանալ, ինչպես նաև ապահով «պարապել կատուների տակդիրի վրա», իսկ բոլորովին անհասկանալի իրավիճակի դեպքում ստանալ որակյալ տեխնիկական աջակցություն ինտենսիվ դասընթացներում. Կուբերնետես բազա կանցկացվի սեպտեմբերի 28-30-ը, իսկ ավելի առաջադեմ մասնագետների համար Kubernetes Mega հոկտեմբերի 14–16.
Безопасность
CSISstorage Capacity
CSIStorageCapacity օբյեկտները բնակվում են անունների տարածություններում; յուրաքանչյուր CSI դրայվեր իր սեփական անվանատարածքում գլորելիս խորհուրդ է տրվում սահմանափակել RBAC իրավունքները CSIStorageCapacity-ի վրա այդ տարածքում, քանի որ ակնհայտ է, թե որտեղից են գալիս տվյալները: Kubernetes-ը, այնուամենայնիվ, դա չի ստուգում, և սովորաբար դրայվերները տեղադրվում են նույն անվանատարածքում, այնպես որ, ի վերջո, ակնկալվում է, որ վարորդները աշխատեն և սխալ տվյալներ չհրապարակեն (և այստեղ է, որ իմ քարտը ձախողվեց, մոտ. թարգմանիչ՝ հիմնված մորուքավոր կատակի վրա)
Ընդհանուր նշանակության էֆեմերալ ծավալներ
Եթե օգտատերերն իրավունք ունեն ստեղծելու pod (ուղղակի կամ անուղղակիորեն), նրանք նաև կկարողանան ստեղծել ընդհանուր նշանակության ժամանակավոր հատորներ, նույնիսկ եթե չունեն ձայնի վրա հարցում ստեղծելու իրավունք: Դա պայմանավորված է նրանով, որ RBAC-ի թույլտվության ստուգումները կիրառվում են վերահսկիչի վրա, որը ստեղծում է PVC-ը, այլ ոչ թե օգտվողին: Սա ավելացման հիմնական փոփոխությունն է ձեր հաշվին, նախքան այս հատկությունը միացնելն այն կլաստերներում, որտեղ անվստահելի օգտվողները չպետք է ունենան հատորներ ստեղծելու իրավունք:
Օրինակ
Առանձին մասնաճյուղ PMEM-CSI-ն պարունակում է բոլոր անհրաժեշտ փոփոխությունները՝ QEMU վիրտուալ մեքենաների ներսում Kubernetes 1.19 կլաստերը գործարկելու համար՝ ալֆա փուլի բոլոր հատկանիշներով: Վարորդի կոդը չի փոխվել, փոխվել է միայն տեղակայումը։
Համապատասխան մեքենայի վրա (Linux, նորմալ օգտագործողը կարող է օգտագործել դոկեր, նայել այստեղ մանրամասներ) այս հրամանները կբերեն կլաստերը և կտեղադրեն 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
Ամեն ինչ աշխատելուց հետո ելքը կպարունակի օգտագործման հրահանգներ.
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 -
CSIStorageCapacity օբյեկտները նախատեսված չեն մարդկանց կողմից կարդալու համար, ուստի որոշակի մշակում է պահանջվում: Golang կաղապարի զտիչները ցույց կտան պահեստավորման դասերը, այս օրինակը ցույց կտա անունը, տոպոլոգիան և հզորությունը.
Փորձենք ստեղծել ցուցադրական հավելված մեկ ընդհանուր նշանակության ժամանակավոր ծավալով: Ֆայլի բովանդակությունը 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
Ստեղծելուց հետո, ինչպես ցույց է տրված վերը նշված հրահանգներում, մենք այժմ ունենք լրացուցիչ պատիճ և 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
Եթե մեկ այլ հավելվածի կարիք ունի ավելի քան 26620Mi, ապա ժամանակացույցը հաշվի չի առնի pmem-csi-pmem-govm-worker1 ամեն դեպքում.
Ինչ հաջորդ?
Երկու հատկանիշները դեռ մշակման փուլում են: Ալֆա թեստավորման ժամանակ բացվել են մի քանի հավելվածներ։ Բարելավման առաջարկի հղումները փաստում են այն աշխատանքը, որը պետք է կատարվի բետա փուլ անցնելու համար, ինչպես նաև, թե որ այլընտրանքներն արդեն դիտարկվել և մերժվել են.