ProHoster > Блог > басқарма > Сақтау сыйымдылығын қадағалайтын эфемерлі көлемдер: стероидтардағы EmptyDir
Сақтау сыйымдылығын қадағалайтын эфемерлі көлемдер: стероидтардағы EmptyDir
Кейбір қолданбалар да деректерді сақтауды қажет етеді, бірақ олар қайта іске қосқаннан кейін деректер сақталмайтындығына өте ыңғайлы.
Мысалы, кэштеу қызметтері жедел жадпен шектеледі, бірақ сонымен бірге жалпы өнімділікке аз әсер ететін жедел жадқа қарағанда баяу сақтау үшін сирек қолданылатын деректерді жылжыта алады. Басқа қолданбалар файлдарда параметрлер немесе құпия кілттер сияқты тек оқуға арналған енгізулер болуы мүмкін екенін білуі керек.
Kubernetes қазірдің өзінде бірнеше түрі бар эфемерлік көлемдер, бірақ олардың функционалдығы K8 құрылғыларында жүзеге асырылатын нәрселермен шектеледі.
Эфемерлі CSI көлемдері жеңіл салмақты жергілікті томдарға қолдау көрсету үшін Kubernetes-ті CSI драйверлерімен кеңейтуге мүмкіндік берді. Осылайша қолдануға болады ерікті құрылымдар: параметрлер, құпиялар, сәйкестендіру деректері, айнымалылар және т.б. CSI драйверлері осы Kubernetes мүмкіндігін қолдау үшін өзгертілуі керек, өйткені әдеттегі стандартталған драйверлер жұмыс істемейді деп болжанады - бірақ мұндай көлемдер подкаст үшін таңдалған кез келген түйінде пайдаланылуы мүмкін деп болжанады.
Бұл маңызды хост ресурстарын тұтынатын көлемдер немесе кейбір хосттарда ғана қолжетімді сақтау үшін мәселе болуы мүмкін. Сондықтан Kubernetes 1.19 тұжырымдамалық түрде EmptyDir томдарына ұқсас екі жаңа альфа сынау көлемі мүмкіндіктерін ұсынады:
жалпы мақсаттағы эфемерлік көлемдер;
CSI сақтау сыйымдылығын қадағалау.
Жаңа тәсілдің артықшылықтары:
сақтау жергілікті болуы немесе желі арқылы қосылуы мүмкін;
көлемдер қолданба арқылы аспайтын көрсетілген өлшемге ие болуы мүмкін;
тұрақты көлемдерді қамтамасыз етуді қолдайтын және (сыйымдылықты бақылауды қолдау үшін) қоңырауды жүзеге асыратын кез келген CSI драйверлерімен жұмыс істейді. GetCapacity;
драйвер мен параметрлерге байланысты томдарда кейбір бастапқы деректер болуы мүмкін;
көлемі бар барлық стандартты операцияларға (суретті жасау, өлшемін өзгерту және т.б.) қолдау көрсетіледі;
томдарды модульді немесе көлемнің сипаттамасын қабылдайтын кез келген қолданба контроллерімен пайдалануға болады;
Kubernetes жоспарлаушысы қолайлы түйіндерді өзі таңдайды, сондықтан жоспарлаушы кеңейтімдерін қамтамасыз ету және конфигурациялау немесе веб-ілмектерді өзгерту қажет емес.
Өтініштер
Сондықтан жалпы мақсаттағы эфемерлі көлемдер келесі пайдалану жағдайлары үшін жарамды:
Memcached үшін жедел жадты ауыстыру ретінде тұрақты жад
memcached соңғы шығарылымдары қосымша қолдау тұрақты жадты пайдалану (Intel Optane және т.б., шамамен. аудармашы) кәдімгі ЖЖҚ орнына. Қолданба контроллері арқылы жад кэштелген қолданбаларды орналастыру кезінде CSI драйверін пайдаланып, берілген өлшемнің көлемін PMEM жүйесінен бөлуді сұрау үшін жалпы мақсаттағы эфемерлі томдарды пайдалана аласыз, мысалы PMEM-CSI.
LVM жергілікті жады жұмыс кеңістігі ретінде
ЖЖҚ көлемінен үлкен деректермен жұмыс істейтін қолданбалар Kubernetes ұсынған тұрақты EmptyDir көлемдері қамтамасыз ете алмайтын өлшем немесе өнімділік көрсеткіштері бар жергілікті жадты қажет етуі мүмкін. Мысалы, осы мақсатта жазылған TopoLVM.
Деректер көлеміне тек оқуға рұқсат
Томды бөлу келесі жағдайларда толық томды жасауға әкелуі мүмкін:
Бұл томдарды тек оқуға арналған режимде орнатуға болады.
Бұл қалай жұмыс істейді
Жалпы мақсаттағы эфемерлік томдар
Жалпы мақсаттағы эфемерлі томдардың негізгі ерекшелігі жаңа көлем көзі болып табылады, EphemeralVolumeSource, көлем сұрауын жасау үшін барлық өрістерді қамтитын (тарихи түрде тұрақты көлем сұрауы, PVC деп аталады). Жаңа контроллер kube-controller-manager осындай көлем көзін жасайтын бөтелкелерге қарайды, содан кейін сол бөтелкелер үшін ПВХ жасайды. CSI драйвері үшін бұл сұрау басқаларға ұқсайды, сондықтан мұнда арнайы қолдау қажет емес.
Мұндай ПВХ бар болғанша, оларды көлемдегі кез келген басқа сұраулар сияқты пайдалануға болады. Атап айтқанда, оларға томды көшіру немесе томнан суретті жасау кезінде деректер көзі ретінде сілтеме жасауға болады. ПВХ нысаны сонымен қатар көлемнің ағымдағы күйін қамтиды.
Автоматты түрде жасалған ПВХ атаулары алдын ала анықталған: олар сызықшамен бөлінген подкаст атауы мен том атауының тіркесімі. Алдын ала анықталған атаулар ПВХ-мен өзара әрекеттесуді жеңілдетеді, себебі подвод атауы мен том атауын білсеңіз, оны іздеудің қажеті жоқ. Кемшілігі - бұл атау бұрыннан қолданыста болуы мүмкін, оны Кубернетес анықтайды және нәтижесінде подкасттың іске қосылуына тыйым салынады.
Дыбыс қосқышпен бірге жойылуын қамтамасыз ету үшін контроллер иесінің астындағы дыбыс деңгейіне сұрау жасайды. Пост жойылған кезде стандартты қоқыс жинау механизмі жұмыс істейді, ол сұрауды да, көлемді де жояды.
Сұраныстарды сақтау драйвері сақтау класының қалыпты механизмі арқылы сәйкестендіреді. Бірден және кеш байланыстырылатын сабақтар (aka WaitForFirstConsumer) қолдау көрсетіледі, эфемерлі томдар үшін оны пайдалану мағынасы бар WaitForFirstConsumer, содан кейін жоспарлаушы түйінді таңдау кезінде түйінді пайдалануды да, сақтаудың қолжетімділігін де қарастыра алады. Мұнда жаңа мүмкіндік пайда болады.
Сақтау сыйымдылығын қадағалау
Әдетте жоспарлаушыда CSI драйвері көлемді қай жерде жасайтынын білмейді. Сондай-ақ жоспарлаушының бұл ақпаратты сұрау үшін жүргізушімен тікелей байланысу мүмкіндігі жоқ. Сондықтан, жоспарлаушы томдарға қол жеткізуге болатын біреуін тапқанша (кеш байлау) немесе орынды таңдауды толығымен драйверге қалдырмайынша (жедел байланыстыру) түйіндерді сұрайды.
жаңа APICSIStorageCapacityальфа сатысында тұрған , жоспарлаушыға қолжетімді болуы үшін қажетті деректерді etcd ішінде сақтауға мүмкіндік береді. Жалпы мақсаттағы эфемерлі томдарға қолдау көрсетуден айырмашылығы, драйверді қолданған кезде жад көлемін бақылауды қосу керек: external-provisioner қалыпты арқылы жүргізушіден алынған сыйымдылық туралы ақпаратты жариялау керек GetCapacity.
Жоспарлағыш кеш байлауды пайдаланатын қосылмаған көлемі бар подколь үшін түйінді таңдауы қажет болса және жалаушаны орнату арқылы жалаушаны орнату арқылы драйвер бұл мүмкіндікті қосса CSIDriver.storageCapacity, содан кейін сақтау сыйымдылығы жеткіліксіз түйіндер автоматты түрде жойылады. Бұл жалпы мақсаттағы эфемерлі және тұрақты томдар үшін де жұмыс істейді, бірақ CSI эфемерлі томдары үшін емес, өйткені олардың параметрлерін Кубернетес оқи алмайды.
Әдеттегідей, тікелей байланыстырылған томдар подкладкалар жоспарланғанға дейін жасалады және олардың орналасуын сақтау драйвері таңдайды, сондықтан конфигурациялау кезінде external-provisioner Әдепкі бойынша, дереу байланыстыруы бар сақтау сыныптары өткізіліп жіберіледі, себебі бұл деректер бәрібір пайдаланылмайды.
Kubernetes жоспарлаушысы ықтимал ескірген ақпаратпен жұмыс істеуге мәжбүр болғандықтан, көлем жасалған кез келген жағдайда сыйымдылық қолжетімді болатынына кепілдік жоқ, бірақ оның қайталанусыз жасалу мүмкіндігі соған қарамастан артады.
NB Сіз толығырақ ақпарат ала аласыз, сондай-ақ «мысықтар стендінде жаттығу» жасай аласыз, ал мүлдем түсініксіз жағдай туындаған жағдайда, қарқынды курстарда білікті техникалық көмек ала аласыз - Кубернетес базасы 28-30 қыркүйекте өтеді, ал одан да жоғары мамандар үшін Kubernetes Mega 14–16 қазан.
Қауіпсіздік
CSIStorageCapacity
CSIStorageCapacity нысандары аттар кеңістігінде орналасады; әрбір CSI драйверін өз аттар кеңістігінде шығарған кезде, деректердің қайдан келетіні анық болғандықтан, сол кеңістікте CSIStorageCapacity үшін RBAC құқықтарын шектеу ұсынылады. Кубернетес мұны бәрібір тексермейді және әдетте драйверлер бірдей аттар кеңістігіне қойылады, сондықтан ақыр соңында драйверлер жұмыс істейді және дұрыс емес деректерді жарияламайды (және бұл жерде менің картам сәтсіз болды, шамамен. сақалды әзілге негізделген аудармашы)
Жалпы мақсаттағы эфемерлік томдар
Пайдаланушылардың подкаст жасау құқықтары болса (тікелей немесе жанама), олар томға сұрау жасауға құқықтары болмаса да, жалпы мақсаттағы эфемерлік томдарды жасай алады. Себебі RBAC рұқсат тексерулері пайдаланушыға емес, ПВХ жасайтын контроллерге қолданылады. Бұл қосылатын негізгі өзгеріс есептік жазбаңызға, сенімсіз пайдаланушылардың том жасау құқықтары болмауы керек кластерлерде бұл мүмкіндікті қосу алдында.
Мысал:
Бөлек шырша 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
Жоғарыдағы нұсқауларда көрсетілгендей, жасағаннан кейін бізде қосымша подвод пен ПВХ бар:
$ 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 кез келген жағдайда.
Ары қарай не?
Екі мүмкіндік те әлі даму үстінде. Альфа тестілеу кезінде бірнеше қосымшалар ашылды. Жақсарту ұсынысының сілтемелері бета-кезеңіне өту үшін жасалуы керек жұмыстарды, сондай-ақ қандай балама нұсқалардың қарастырылып, қабылданбағанын құжаттайды: