Деректерді Kubernetes кластерінде сақтау

Kubernetes кластерінде жұмыс істейтін қолданбалар үшін деректерді сақтауды конфигурациялаудың бірнеше жолы бар. Олардың кейбіреулері ескірген, басқалары жақында пайда болды. Бұл мақалада біз сақтау жүйелерін қосудың үш нұсқасының тұжырымдамасын қарастырамыз, оның ішінде ең соңғысы - Контейнерді сақтау интерфейсі арқылы қосылу.

Деректерді Kubernetes кластерінде сақтау

1-әдіс: подманифестте PV көрсетіңіз

Kubernetes кластеріндегі подкастты сипаттайтын әдеттегі манифест:

Деректерді Kubernetes кластерінде сақтау

Манифесттің қай томның қосылғанын және қай жерде екенін сипаттайтын бөліктері түспен бөлектелген.

бөлім көлемді орнату монтаждау нүктелерін (mountPath) көрсетіңіз - тұрақты көлем контейнер ішіндегі қай каталогта орнатылады, сонымен қатар томның атауы.

бөлім x қосқышта пайдаланылатын барлық томдардың тізімін береді. Әрбір томның атын, сондай-ақ түрін (біздің жағдайда: awsElasticBlockStore) және қосылым параметрлерін көрсетіңіз. Манифестте қандай параметрлер тізімделгені көлем түріне байланысты.

Бірдей көлемді бір уақытта бірнеше баған контейнерлеріне орнатуға болады. Осылайша, әртүрлі қолданбалы процестер бірдей деректерге қол жеткізе алады.

Бұл қосылу әдісі ең басында ойлап табылған, Кубернетес енді ғана қалыптасып келе жатқан кезде, бүгінде бұл әдіс ескірген.

Оны пайдалану кезінде бірнеше проблемалар бар:

  1. барлық томдар қолмен жасалуы керек; Кубернетес біз үшін ештеңе жасай алмайды;
  2. әрбір том үшін қол жеткізу параметрлері бірегей және олар томды пайдаланатын барлық подкасттардың манифесттерінде көрсетілуі керек;
  3. сақтау жүйесін өзгерту үшін (мысалы, AWS-тен Google Cloud-қа көшу), барлық манифесттердегі орнатылған томдардың параметрлері мен түрін өзгерту керек.

Мұның бәрі өте ыңғайсыз, сондықтан іс жүзінде бұл әдіс тек кейбір арнайы көлемдер түрлерін қосу үшін қолданылады: configMap, secret, emptyDir, hostPath:

  • configMap және құпия — контейнердегі Kubernetes манифесттерінің файлдарымен том жасауға мүмкіндік беретін қызмет томдары.

  • emptyDir — уақытша көлем, тек подкасттың қызмет ету мерзімі үшін жасалған. Уақытша деректерді сынау немесе сақтау үшін пайдалануға ыңғайлы. Қондырғы жойылған кезде, emptyDir көлемі де жойылады және барлық деректер жоғалады.

  • hostPath - кез келген каталогты /etc/kubernetes қоса алғанда, қолданбасы бар контейнер ішінде қолданба іске қосылған сервердің жергілікті дискісіне орнатуға мүмкіндік береді. Бұл қауіпті мүмкіндік, сондықтан қауіпсіздік саясаты әдетте осы түрдегі томдарды пайдалануға тыйым салады. Әйтпесе, шабуылдаушы қолданбасы HTC Kubernetes каталогын өз контейнеріне орнатып, барлық кластер сертификаттарын ұрлай алады. Әдетте, hostPath көлемдерін тек kube-жүйенің аттар кеңістігінде іске қосылған жүйелік қолданбаларда пайдалануға рұқсат етіледі.

Kubernetes қораптан тыс жұмыс істейтін сақтау жүйелері құжаттамада көрсетілген.

2-әдіс. SC/PVC/PV ошақтарына қосу

Балама қосылым әдісі - Сақтау класы, PersistentVolumeClaim, PersistentVolume тұжырымдамасы.

Сақтау класы деректерді сақтау жүйесіне қосылу параметрлерін сақтайды.

PersistentVolumeClaim қолданбаға қажетті талаптарды сипаттайды.
PersistentVolume кіру параметрлері мен дыбыс деңгейін сақтайды.

Идеяның мәні: подманифестте олар PersistentVolumeClaim түрінің көлемін көрсетеді және claimName параметрінде осы нысанның атын көрсетеді.

Деректерді Kubernetes кластерінде сақтау

PersistentVolumeClaim манифесті қолданба талап ететін деректер көлеміне қойылатын талаптарды сипаттайды. Соның ішінде:

  • дискінің өлшемі;
  • қатынау әдісі: ReadWriteOnce немесе ReadWriteMany;
  • Сақтау класына сілтеме - біз көлемді қай деректерді сақтау жүйесінде жасағымыз келеді.

Сақтау класы манифесті сақтау жүйесіне қосылымның түрі мен параметрлерін сақтайды. Текшеге дыбысты оның түйініне орнату үшін қажет.

PersistentVolume манифесттері белгілі бір томға (том идентификаторы, жол және т.б.) арналған Сақтау класын және кіру параметрлерін көрсетеді.

ПВХ жасаған кезде, Кубернетес қандай көлемдегі көлемді және қандай Сақтау класын қажет ететінін қарастырады және тегін PersistentVolume таңдайды.

Егер мұндай PV қол жетімді болмаса, Kubernetes арнайы бағдарламаны іске қоса алады - Провайдер (оның аты Сақтау класында көрсетілген). Бұл бағдарлама сақтау жүйесіне қосылады, қажетті өлшемнің көлемін жасайды, идентификаторды алады және PersistentVolumeClaim-пен байланыстырылған Kubernetes кластерінде PersistentVolume манифестін жасайды.

Барлық осы абстракциялар жиынтығы қолданбаның қай сақтау жүйесімен жұмыс істейтіні туралы ақпаратты қолданба манифест деңгейінен басқару деңгейіне дейін жоюға мүмкіндік береді.

Деректерді сақтау жүйесіне қосылудың барлық параметрлері Сақтау класында орналасқан, ол үшін кластер әкімшілері жауап береді. AWS-тен Google Cloud-қа көшкен кезде сізге қажет нәрсе - қолданба манифесттерінде Сақтау класының атауын PVC-ге өзгерту. Деректерді сақтауға арналған тұрақты көлем Provisioner бағдарламасы арқылы кластерде автоматты түрде жасалады.

3-әдіс: Контейнерді сақтау интерфейсі

Әртүрлі сақтау жүйелерімен әрекеттесетін барлық код Kubernetes ядросының бөлігі болып табылады. Қателерді түзету немесе жаңа функцияларды шығару жаңа шығарылымдарға байланысты; код Kubernetes қолданбасының барлық қолдау көрсетілетін нұсқалары үшін өзгертілуі керек. Мұның бәрін сақтау және жаңа функцияларды қосу қиын.

Мәселені шешу үшін Cloud Foundry, Kubernetes, Mesos және Docker әзірлеушілері Container Storage Interface (CSI) - контейнерлерді басқару жүйесінің өзара әрекеттесуін сипаттайтын қарапайым біріккен интерфейсті және арнайы драйвермен жұмыс істейтін арнайы драйверді (CSI Driver) жасады. сақтау жүйесі. Сақтау жүйелерімен өзара әрекеттесу үшін барлық код Kubernetes өзегінен бөлек жүйеге ауыстырылды.

Контейнерді сақтау интерфейсінің құжаттамасы.

Әдетте, CSI драйвері екі құрамдас бөліктен тұрады: Node Plugin және Controller плагині.

Түйін плагині әрбір түйінде жұмыс істейді және көлемдерді орнатуға және оларда операцияларды орындауға жауапты. Controller плагині сақтау жүйесімен өзара әрекеттеседі: томдарды жасайды немесе жояды, кіру құқықтарын тағайындайды және т.б.

Әзірге ескі драйверлер Kubernetes ядросында қалады, бірақ оларды енді пайдалану ұсынылмайды және барлығына CSI драйверін олар жұмыс істейтін жүйе үшін арнайы орнату ұсынылады.

Жаңалық Storage класы арқылы деректерді сақтауды орнатуға үйреніп қалғандарды қорқытуы мүмкін, бірақ іс жүзінде қорқынышты ештеңе болған жоқ. Бағдарламашылар үшін шын мәнінде ештеңе өзгермейді - олар тек Storage класы атауымен жұмыс істеді және солай істей береді. Әкімшілер үшін руль диаграммасының орнатылымы қосылды және параметрлердің құрылымы өзгерді. Егер бұрын параметрлер тікелей Сақтау класына енгізілген болса, енді олар алдымен руль диаграммасында, содан кейін Сақтау класында орнатылуы керек. Қарап отырсаңыз, жаман ештеңе болған жоқ.

CSI драйвері арқылы Ceph сақтау жүйелеріне қосылуға ауысу арқылы алуға болатын артықшылықтарды қарастыру үшін мысал келтірейік.

Ceph-пен жұмыс істегенде, CSI плагині кірістірілген драйверлерге қарағанда сақтау жүйелерімен жұмыс істеуге көбірек мүмкіндіктер береді.

  1. Динамикалық диск құру. Әдетте RBD дискілері тек RWO режимінде пайдаланылады, бірақ CSI for Ceph оларды RWX режимінде пайдалануға мүмкіндік береді. Әртүрлі түйіндердегі бірнеше подкольдер бір RDB дискісін түйіндеріне орнатып, олармен параллель жұмыс істей алады. Әділ болу үшін, бәрі соншалықты жарқын емес - бұл дискіні тек блоктық құрылғы ретінде қосуға болады, яғни қосымшаны онымен бірнеше қатынас режимінде жұмыс істеуге бейімдеуге тура келеді.
  2. Суреттерді жасау. Kubernetes кластерінде суретті жасау талабымен манифест жасауға болады. CSI плагині оны көріп, дискіден суретке түсіреді. Оның негізінде сіз PersistentVolume бағдарламасының сақтық көшірмесін немесе көшірмесін жасай аласыз.
  3. Диск өлшемін ұлғайту сақтау және Kubernetes кластеріндегі PersistentVolume туралы.
  4. Квоталар. Kubernetes ішіне орнатылған CephFS драйверлері квоталарды қолдамайды, бірақ соңғы Ceph Nautilus бар жаңа CSI плагиндері CephFS бөлімдерінде квоталарды қоса алады.
  5. Көрсеткіштер. CSI плагині Prometheus-ке қандай томдар қосылғаны, қандай байланыстар болып жатқаны және т.б. туралы әртүрлі көрсеткіштерді бере алады.
  6. Топологиядан хабардар. Манифесттерде кластердің географиялық таралу жолын көрсетуге және Амстердамда орналасқан сақтау жүйесін Лондонда жұмыс істейтін қосқыштарға қосудан аулақ болуға мүмкіндік береді.

Ceph-ті Kubernetes кластеріне CSI арқылы қалай қосуға болады, қараңыз Слурм кешкі мектеп лекциясының практикалық бөлімінде. Сіз де жазыла аласыз Ceph бейне курсы, ол 15 қазанда іске қосылады.

Мақала авторы: Сергей Бондарев, Southbridge-де тәжірибелік сәулетші, Кубернетестің сертификатталған әкімшісі, kubespray әзірлеушілерінің бірі.

Кішкене Post Scriptum жарнама үшін емес, пайда үшін...

PS Сергей Бондарев екі қарқынды курсты жүргізеді: жаңартылған Кубернетес базасы 28-30 қыркүйек және ілгері Kubernetes Mega 14–16 қазан.

Деректерді Kubernetes кластерінде сақтау

Ақпарат көзі: www.habr.com

пікір қалдыру