Կան մի քանի եղանակներ կարգավորելու տվյալների պահեստը Kubernetes կլաստերի վրա աշխատող հավելվածների համար: Դրանցից մի քանիսն արդեն հնացել են, մյուսները հայտնվել են բոլորովին վերջերս։ Այս հոդվածում մենք կանդրադառնանք պահեստավորման համակարգերի միացման երեք տարբերակի հայեցակարգին, ներառյալ ամենավերջինը` կոնտեյների պահպանման միջերեսի միջոցով միացումը:
Մեթոդ 1. նշեք PV-ն մանիֆեստում
Տիպիկ մանիֆեստ, որը նկարագրում է պատիճը Kubernetes կլաստերի մեջ.
Մանիֆեստի այն մասերը, որոնք նկարագրում են, թե որ ծավալն է միացված և որտեղ, ընդգծված են գունավոր:
Բաժին volumeMounts նշեք տեղադրման կետերը (mountPath) - կոնտեյների ներսում որ գրացուցակում կտեղադրվի մշտական ծավալը, ինչպես նաև ծավալի անվանումը:
Բաժին x թվարկում է բոլոր հատորները, որոնք օգտագործվում են պատիճում: Նշեք յուրաքանչյուր հատորի անունը, ինչպես նաև տեսակը (մեր դեպքում՝ awsElasticBlockStore) և կապի պարամետրերը։ Որ պարամետրերը նշված են մանիֆեստում, կախված է ծավալի տեսակից:
Նույն ծավալը կարող է տեղադրվել միաժամանակ մի քանի պատիճ բեռնարկղերի մեջ: Այս կերպ տարբեր կիրառական գործընթացներ կարող են մուտք գործել նույն տվյալները:
Կապի այս մեթոդը հորինվել է հենց սկզբում, երբ Kubernetes-ը դեռ նոր էր սկսվում, իսկ այսօր մեթոդը հնացել է։
Այն օգտագործելիս կան մի քանի խնդիրներ.
- բոլոր հատորները պետք է ձեռքով ստեղծվեն, Kubernetes-ը մեզ համար ոչինչ չի կարող ստեղծել.
- Յուրաքանչյուր հատորի համար մուտքի պարամետրերը եզակի են, և դրանք պետք է նշվեն ձայնը օգտագործող բոլոր պատյանների մանիֆեստներում.
- պահեստավորման համակարգը փոխելու համար (օրինակ՝ AWS-ից Google Cloud տեղափոխվել), դուք պետք է փոխեք բոլոր մանիֆեստներում տեղադրված ծավալների կարգավորումները և տեսակը:
Այս ամենը շատ անհարմար է, ուստի իրականում այս մեթոդը օգտագործվում է միայն որոշ հատուկ տեսակի հատորներ միացնելու համար՝ configMap, secret, դատարկDir, hostPath:
-
configMap-ը և secret-ը ծառայությունների ծավալներ են, որոնք թույլ են տալիս կոնտեյների մեջ ստեղծել հատոր Kubernetes մանիֆեստներից ֆայլերով:
-
valaDir-ը ժամանակավոր ծավալ է, որը ստեղծվել է միայն պատի ողջ կյանքի համար: Հարմար է օգտագործել փորձարկման կամ ժամանակավոր տվյալների պահպանման համար: Երբ pod-ը ջնջվում է, դատարկDir ծավալը նույնպես ջնջվում է, և բոլոր տվյալները կորչում են:
-
hostPath - թույլ է տալիս տեղադրել ցանկացած գրացուցակ սերվերի տեղական սկավառակի վրա, որի վրա հավելվածն աշխատում է հավելվածի կոնտեյների ներսում, ներառյալ /etc/kubernetes: Սա վտանգավոր հատկություն է, ուստի անվտանգության քաղաքականությունը սովորաբար արգելում է այս տեսակի ծավալների օգտագործումը: Հակառակ դեպքում, հարձակվողի հավելվածը կկարողանա տեղադրել HTC Kubernetes գրացուցակը իր կոնտեյների ներսում և գողանալ բոլոր կլաստերի վկայականները: Սովորաբար, hostPath-ի ծավալները թույլատրվում են օգտագործել միայն համակարգային հավելվածների կողմից, որոնք աշխատում են kube-համակարգի անվանատարածքում:
Մեթոդ 2. Միացում SC/PVC/PV օջախներին
Այլընտրանքային կապի մեթոդը Storage դասի, PersistentVolumeClaim, PersistentVolume հասկացությունն է:
Պահպանման դաս պահպանում է տվյալների պահպանման համակարգի միացման պարամետրերը:
PersistentVolumeClaim նկարագրում է այն պահանջները, որոնց կարիքն ունի հայտը:
Մշտական ծավալ պահպանում է մուտքի պարամետրերը և ծավալի կարգավիճակը:
Գաղափարի էությունը. pod մանիֆեստում նրանք նշում են PersistentVolumeClaim տիպի ծավալը և նշում են այս էության անունը pretendName պարամետրում:
PersistentVolumeClaim մանիֆեստը նկարագրում է հավելվածի պահանջվող տվյալների ծավալի պահանջները: Ներառյալ՝
- սկավառակի չափը;
- մուտքի եղանակը՝ ReadWriteOnce կամ ReadWriteMany;
- հղում Storage դասին - տվյալների պահպանման որ համակարգում ենք ցանկանում ստեղծել ծավալը:
Storage դասի մանիֆեստը պահպանում է պահպանման համակարգի հետ կապի տեսակը և պարամետրերը: Cubelet-ին անհրաժեշտ են դրանք՝ ձայնը իր հանգույցի վրա տեղադրելու համար:
PersistentVolume մանիֆեստները ցույց են տալիս Storage դասը և մուտքի պարամետրերը որոշակի ծավալի համար (ծավալի ID, ուղի և այլն):
ՊՎՔ ստեղծելիս Kubernetes-ը նայում է, թե ինչ չափի ծավալ և ինչ Storage դաս է պահանջվում, և ընտրում է անվճար PersistentVolume:
Եթե նման PV-ները հասանելի չեն, Kubernetes-ը կարող է գործարկել հատուկ ծրագիր՝ Provisioner (նրա անունը նշված է Storage դասում): Այս ծրագիրը միանում է պահեստավորման համակարգին, ստեղծում է անհրաժեշտ չափի ծավալ, ստանում է նույնացուցիչ և ստեղծում է PersistentVolume մանիֆեստ Kubernetes կլաստերում, որը կապված է PersistentVolumeClaim-ի հետ:
Վերացականների այս ամբողջ բազմությունը թույլ է տալիս հեռացնել տեղեկատվությունը այն մասին, թե որ պահպանման համակարգի հետ է աշխատում հավելվածը հավելվածի մանիֆեստի մակարդակից մինչև կառավարման մակարդակ:
Տվյալների պահպանման համակարգին միանալու բոլոր պարամետրերը գտնվում են Storage դասում, որի համար պատասխանատու են կլաստերի ադմինիստրատորները։ Այն ամենը, ինչ դուք պետք է անեք AWS-ից Google Cloud տեղափոխվելիս, հավելվածի մանիֆեստներում Storage դասի անվանումը փոխելն է PVC-ի: Տվյալների պահպանման համար Persistance Volume-ը կստեղծվի կլաստերում ավտոմատ կերպով՝ օգտագործելով Provisioner ծրագիրը:
Մեթոդ 3. Բեռնարկղերի պահպանման միջերես
Բոլոր ծածկագրերը, որոնք փոխազդում են պահեստավորման տարբեր համակարգերի հետ, Kubernetes միջուկի մաս են կազմում: Սխալների շտկման կամ նոր գործառույթների թողարկումը կապված է նոր թողարկումների հետ. կոդը պետք է փոխվի Kubernetes-ի բոլոր աջակցվող տարբերակների համար: Այս ամենը դժվար է պահպանել և նոր ֆունկցիոնալություն ավելացնել:
Խնդիրը լուծելու համար Cloud Foundry-ի, Kubernetes-ի, Mesos-ի և Docker-ի ծրագրավորողները ստեղծեցին Container Storage Interface (CSI)՝ պարզ միասնական ինտերֆեյս, որը նկարագրում է կոնտեյների կառավարման համակարգի փոխազդեցությունը և հատուկ դրայվերի (CSI Driver), որն աշխատում է որոշակի հատուկ սարքի հետ: պահեստավորման համակարգ. Պահպանման համակարգերի հետ փոխգործակցության բոլոր ծածկագրերը Kubernetes միջուկից տեղափոխվել են առանձին համակարգ:
Սովորաբար, CSI Driver-ը բաղկացած է երկու բաղադրիչից՝ Node Plugin և Controller plugin:
Node Plugin-ն աշխատում է յուրաքանչյուր հանգույցի վրա և պատասխանատու է ծավալների տեղադրման և դրանց վրա գործողություններ կատարելու համար: Controller plugin-ը փոխազդում է պահեստավորման համակարգի հետ՝ ստեղծում կամ ջնջում է ծավալներ, հատկացնում մուտքի իրավունքներ և այլն:
Առայժմ հին դրայվերները մնում են Kubernetes միջուկում, բայց դրանք այլևս խորհուրդ չի տրվում օգտագործել, և բոլորին խորհուրդ է տրվում տեղադրել CSI Driver-ը հատուկ այն համակարգի համար, որի հետ աշխատելու են:
Նորարարությունը կարող է վախեցնել նրանց, ովքեր արդեն սովոր են Storage դասի միջոցով տվյալների պահեստավորումը կարգավորել, բայց իրականում ոչ մի սարսափելի բան տեղի չի ունեցել: Ծրագրավորողների համար իրականում ոչինչ չի փոխվում. նրանք աշխատել են միայն Storage դասի անվան հետ և կշարունակեն դա անել: Ադմինիստրատորների համար ավելացվել է ղեկի գծապատկերի տեղադրումը և փոխվել է կարգավորումների կառուցվածքը: Եթե նախկինում կարգավորումները մուտքագրվում էին անմիջապես Storage դասի մեջ, ապա այժմ դրանք նախ պետք է տեղադրվեն ղեկի գծապատկերում, իսկ հետո՝ Storage դասում: Եթե նայեք դրան, ապա ոչ մի վատ բան տեղի չի ունեցել:
Եկեք օրինակ վերցնենք՝ տեսնելու այն առավելությունները, որոնք դուք կարող եք ստանալ՝ միացնելով Ceph պահեստավորման համակարգերին՝ օգտագործելով CSI դրայվերը:
Ceph-ի հետ աշխատելիս CSI plugin-ն ավելի շատ տարբերակներ է ապահովում պահեստավորման համակարգերի հետ աշխատելու համար, քան ներկառուցված դրայվերները:
- Դինամիկ սկավառակի ստեղծում: Սովորաբար RBD սկավառակներն օգտագործվում են միայն RWO ռեժիմում, սակայն CSI-ը Ceph-ի համար թույլ է տալիս դրանք օգտագործել RWX ռեժիմում: Մի քանի պատիճ տարբեր հանգույցների վրա կարող են միևնույն RDB սկավառակը տեղադրել իրենց հանգույցների վրա և աշխատել դրանց հետ զուգահեռ: Արդարության համար, ամեն ինչ այնքան էլ պայծառ չէ. այս սկավառակը կարող է միացվել միայն որպես բլոկ սարք, ինչը նշանակում է, որ դուք պետք է հարմարեցնեք հավելվածը, որպեսզի աշխատի դրա հետ բազմակի մուտքի ռեժիմում:
- Պատկերների ստեղծում: Kubernetes կլաստերում դուք կարող եք ստեղծել մանիֆեստ՝ լուսանկար ստեղծելու պահանջով: CSI plugin-ը կտեսնի այն և լուսանկար կտա սկավառակից: Դրա հիման վրա դուք կարող եք ստեղծել կամ կրկնօրինակ կամ պատճենել PersistentVolume-ը:
- Սկավառակի չափի մեծացում պահեստավորման և PersistentVolume-ի վրա Kubernetes կլաստերում:
- Քվոտաներ. Kubernetes-ում ներկառուցված CephFS դրայվերները չեն աջակցում քվոտաներին, սակայն վերջին Ceph Nautilus-ով թարմ CSI հավելվածները կարող են միացնել քվոտաները CephFS միջնորմների վրա:
- Չափումներ. CSI plugin-ը կարող է Պրոմեթևսին տրամադրել մի շարք չափումներ այն մասին, թե որ ծավալներն են միացված, ինչ հաղորդակցություններ են տեղի ունենում և այլն:
- Տոպոլոգիայի տեղյակ. Թույլ է տալիս մանիֆեստներում նշել, թե ինչպես է կլաստերը աշխարհագրորեն բաշխված, և խուսափել Ամստերդամում տեղակայված պահեստավորման համակարգը Լոնդոնում աշխատող բլոկներին միացնելուց:
Ինչպես միացնել Ceph-ը Kubernetes կլաստերին CSI-ի միջոցով, տես
Հոդվածի հեղինակ՝ Սերգեյ Բոնդարև, Southbridge-ի պրակտիկ ճարտարապետ, Kubernetes-ի հավաստագրված ադմինիստրատոր, kubespray-ի մշակողներից մեկը։
Մի փոքրիկ Պոստ Սկրիպտում ոչ թե գովազդի, այլ շահի համար...
Հ.Գ. Սերգեյ Բոնդարևը վարում է երկու ինտենսիվ դասընթացներ՝ թարմացված
Source: www.habr.com