{"id":71858,"date":"2020-02-28T21:00:08","date_gmt":"2020-02-28T18:00:08","guid":{"rendered":"https:\/\/prohoster.info\/blog\/patterny-hraneniya-dannyh-v-kubernetes"},"modified":"2020-03-03T16:14:09","modified_gmt":"2020-03-03T13:14:09","slug":"patterny-hraneniya-dannyh-v-kubernetes","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/patterny-hraneniya-dannyh-v-kubernetes","title":{"rendered":"Pattern di archiviazione dei dati in Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/piter\/blog\/490180\/\"><img decoding=\"async\" alt=\"Pattern di archiviazione dei dati in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/148744e73101d47e7a5a76bdd3bb57e1.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\nCiao, Habr!<\/p>\n<p>Ricordiamo che \u00e8 uscito un altro articolo estremamente interessante e utile <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/collection\/new\/product\/patterny-kubernetes-shablony-razrabotki-sobstvennyh-oblachnyh-prilozheniy\">libro<\/a><\/noindex> sui modelli Kubernetes. Tutto \u00e8 iniziato con \"<noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/collection\/all\/product\/raspredelennye-sistemy-patterny-proektirovaniya\">Pattern<\/a><\/noindex>\" di Brendan Burns, e del resto, la nostra attivit\u00e0 in questo segmento \u00e8 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/collection\/new\/product\/kubernetes-dlya-devops-razvertyvanie-zapusk-i-masshtabirovanie-v-oblake\">in pieno svolgimento<\/a><\/noindex>. Oggi vi proponiamo di leggere un articolo del blog MinIO, che riassume le tendenze e le specificit\u00e0 dei pattern di archiviazione dei dati in Kubernetes.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Kubernetes ha cambiato radicalmente i tradizionali pattern di sviluppo e distribuzione delle applicazioni. Ora un team pu\u00f2 impiegare solo pochi giorni per sviluppare, testare e distribuire un'applicazione \u2013 in diversi ambienti, il tutto all'interno di cluster Kubernetes. Un lavoro simile con le tecnologie delle generazioni precedenti richiedeva solitamente settimane, se non mesi.<\/p>\n<p>Tale accelerazione \u00e8 stata possibile grazie all'astrazione fornita da Kubernetes, cio\u00e8 al fatto che Kubernetes gestisce da solo le interazioni con i dettagli a basso livello delle macchine fisiche o virtuali, permettendo agli utenti di dichiarare tra le altre variabili la CPU necessaria, la quantit\u00e0 di memoria e il numero di istanze di contenitori. Poich\u00e9 un enorme community si occupa del supporto di Kubernetes e gli ambiti di applicazione continuano ad espandersi, esso guida di gran lunga tutte le piattaforme di orchestrazione dei contenitori.<\/p>\n<p><i><b>Con l'aumentare dell'uso di Kubernetes, cresce anche la confusione riguardo ai pattern di archiviazione dei dati utilizzati.<\/b><\/i>.<\/p>\n<p>Nella generale concorrenza per una fetta della torta di Kubernetes (cio\u00e8, per lo storage dei dati), quando si discute di archiviazione dei dati, il segnale qui \u00e8 inghiottito da un forte rumore.<br \/>\nKubernetes incarna il modello moderno di sviluppo e distribuzione delle applicazioni, cos\u00ec come la loro gestione. Questo modello moderno scollega l'archiviazione dei dati dai calcoli. Per comprendere appieno tale scollegamento nel contesto di Kubernetes, \u00e8 necessario anche capire cosa siano le applicazioni con stato e senza stato, e come si integri l'archiviazione dei dati. \u00c8 proprio qui che l'approccio REST API, utilizzato da S3, ha chiari vantaggi rispetto all'approccio POSIX\/CSI, caratteristico di altre soluzioni.<\/p>\n<p>In questo articolo parleremo dei modelli di archiviazione dei dati in Kubernetes e affronteremo separatamente la questione delle applicazioni che operano con e senza stato, per comprendere appieno qual \u00e8 la differenza tra di esse e perch\u00e9 sia importante. In seguito, verranno esaminate le applicazioni e i modelli di archiviazione dei dati utilizzati in esse alla luce delle migliori pratiche per lavorare con i contenitori e Kubernetes.<\/p>\n<h4>Contenitori senza stato<\/h4>\n<p>\nI contenitori sono, per loro natura, leggeri ed efimeri. Possono essere facilmente fermati, eliminati o distribuiti su un altro nodo - il tutto richiede solo pochi secondi. In un grande sistema di orchestrazione dei contenitori, queste operazioni avvengono continuamente, e gli utenti non notano nemmeno tali cambiamenti. Tuttavia, i trasferimenti sono possibili solo se il contenitore non ha alcuna dipendenza dal nodo su cui si trova. Di tali contenitori si dice che funzionano <i>senza stato<\/i>.<\/p>\n<h4>Contenitori con stato<\/h4>\n<p>\nSe un contenitore conserva dati su dispositivi collegati localmente (o su uno storage a blocchi), il volume di archiviazione su cui si trova dovr\u00e0 essere trasferito su un nuovo nodo insieme al contenitore stesso - in caso di guasto. Questo \u00e8 importante, poich\u00e9 altrimenti l'applicazione in esecuzione nel contenitore non potr\u00e0 funzionare correttamente, poich\u00e9 deve accedere ai dati memorizzati sui supporti locali. Di tali contenitori si dice che funzionano <i>con stato<\/i>.<\/p>\n<p>Da un punto di vista puramente tecnico, anche i contenitori con stato possono essere spostati su altri nodi. Di solito, ci\u00f2 \u00e8 garantito attraverso l'uso di file system distribuiti o di archiviazioni di dati a blocchi in rete, attaccate a tutti i nodi su cui funzionano i contenitori. In questo modo, i contenitori ottengono accesso ai volumi per l'archiviazione persistente dei dati, e le informazioni vengono memorizzate su dischi situati in tutta la rete. Questo metodo lo chiamer\u00f2 \"<i>approccio del contenitore con stato<\/i>\" e nel resto dell'articolo mi riferir\u00f2 a esso in questo modo per coerenza.<\/p>\n<p><img decoding=\"async\" alt=\"Pattern di archiviazione dei dati in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/a5546db15801389d58476f50c8c66803.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCon un approccio tipico ai contenitori con stato, tutti i pod delle applicazioni sono collegati a un unico sistema di file distribuiti: si crea un tipo di archiviazione condivisa, dove si trovano tutti i dati delle applicazioni. Pur essendo possibili alcune variazioni, questo \u00e8 un approccio ad alto livello.<\/p>\n<p>Ora vediamo perch\u00e9 l'approccio ai contenitori con stato nel mondo orientato al cloud \u00e8 considerato un antipattern.<\/p>\n<h4>Progettazione di applicazioni orientate al cloud<\/h4>\n<p>\nTradizionalmente, le applicazioni utilizzavano database per la memorizzazione strutturata delle informazioni e dischi locali o sistemi di file distribuiti, dove venivano scaricati tutti i dati non strutturati o semi-strutturati. Con l'aumento dei volumi di dati non strutturati, gli sviluppatori si resero conto che POSIX era troppo 'chiacchierone', comportava costi significativi e, alla fine, ostacolava il funzionamento dell'applicazione quando si passava a scale veramente grandi.<\/p>\n<p>Questo ha principalmente contribuito alla nascita di un nuovo standard di archiviazione dei dati, ovvero i sistemi di archiviazione orientati al cloud, che operano principalmente basati su REST API e liberano l'applicazione dal gravoso compito della gestione di archiviazioni locali. In questo caso, l'applicazione passa effettivamente a una modalit\u00e0 di funzionamento senza stato (poich\u00e9 lo stato \u00e8 in un'archiviazione remota). Le applicazioni moderne vengono costruite fin dall'inizio tenendo conto di questo fattore. Di solito, qualsiasi applicazione moderna che gestisce dati di vario tipo (log, metadati, blob, ecc.) \u00e8 costruita secondo la paradigamma orientata al cloud, dove lo stato viene trasferito a un sistema software dedicato per la sua archiviazione. <\/p>\n<p><i><b>L'approccio ai contenitori con stato costringe l'intera paradigamma a tornare esattamente all'origine da cui era partita! <\/b><\/i><\/p>\n<p>Utilizzando le interfacce POSIX per l'archiviazione dei dati, le applicazioni funzionano come se stessero conservando lo stato, e per questo si allontanano dai postulati pi\u00f9 importanti del design orientato al cloud, ovvero la possibilit\u00e0 di variare le dimensioni dei flussi di lavoro dell'applicazione in base al carico in ingresso, spostarsi su un nuovo nodo non appena quello attuale fallisce, e cos\u00ec via.<\/p>\n<p>Osservando questa situazione pi\u00f9 da vicino, scopriamo che nella scelta dello storage dei dati ci troviamo di nuovo di fronte al dilemma 'POSIX contro REST API', MA con un'ulteriore aggravante riguardo ai problemi di POSIX, dovuta alla natura distribuita degli ambienti Kubernetes. In particolare,<\/p>\n<ul>\n<li><b>POSIX \u00e8 prolisso<\/b>: la semantica di POSIX richiede di associare a ogni operazione metadati e descrittori di file, che aiutano a mantenere lo stato dell'operazione. Questo porta a costi significativi, privi di reale valore. L'API per l'archiviazione degli oggetti, in particolare l'API S3, ha eliminato questi requisiti, permettendo all'applicazione di eseguire l'operazione e poi 'dimenticarsi' della chiamata. La risposta del sistema di storage indica se l'operazione \u00e8 stata eseguita con successo o meno. In caso di fallimento, l'applicazione pu\u00f2 tentare nuovamente.<\/li>\n<li><b>Limitazioni di rete<\/b>: in un sistema distribuito si presuppone che possano esistere pi\u00f9 applicazioni che cercano di scrivere dati su un unico supporto di memorizzazione attaccato. Pertanto, non solo le applicazioni competiranno tra loro per la larghezza di banda (per inviare dati sul supporto), ma anche il sistema di storage stesso concorrer\u00e0 per questa larghezza di banda, distribuendo i dati su dischi fisici. A causa della verbosit\u00e0 di POSIX, il numero di chiamate di rete aumenta notevolmente. D'altra parte, l'API S3 fornisce una chiara separazione tra le chiamate di rete che arrivano dal client al server e quelle che avvengono all'interno del server.<\/li>\n<li><b>Sicurezza<\/b>: Il modello di sicurezza POSIX richiede un attivo coinvolgimento umano: gli amministratori configurano specifici livelli di accesso per ogni utente o gruppo. Questa paradosso \u00e8 difficile da adattare a un mondo orientato al cloud. Le applicazioni moderne dipendono da modelli di sicurezza legati alle API, dove i diritti di accesso sono definiti come un insieme di politiche, account di servizio, credenziali temporanee, ecc.<\/li>\n<li><b>Gestibilit\u00e0<\/b>: I container con stato comportano determinati costi associati alla gestione. Si tratta della sincronizzazione dell'accesso parallelo ai dati, della garanzia di coerenza dei dati, tutto ci\u00f2 richiede di valutare attentamente quali modelli di accesso ai dati utilizzare. \u00c8 necessario installare, controllare e configurare programmi aggiuntivi, senza contare gli sforzi aggiuntivi necessari per lo sviluppo.<\/li>\n<\/ul>\n<p><\/p>\n<h4>Interfaccia di storage dei container<\/h4>\n<p>\nMentre l'interfaccia di storage dei container (CSI) ha aiutato notevolmente a diffondere il livello dei volumi Kubernetes, trasferendolo parzialmente a fornitori terzi di storage, ha anche contribuito accidentalmente alla convinzione che l'approccio dei container con stato sia il metodo raccomandato per la memorizzazione dei dati in Kubernetes.<\/p>\n<p>Il CSI \u00e8 stato progettato come uno standard per fornire sistemi di storage a blocchi e file arbitrari alle applicazioni legacy utilizzando Kubernetes. Come dimostrato in questo articolo, l'unica situazione in cui l'approccio dei container con stato (e il CSI nella sua forma attuale) \u00e8 ragionevole \u00e8 quando l'applicazione stessa \u00e8 un sistema legacy, in cui non \u00e8 possibile aggiungere il supporto per le API dell'oggetto di storage dei dati.<\/p>\n<p>\u00c8 importante comprendere che, utilizzando il CSI nella sua forma attuale, cio\u00e8 montando i volumi mentre si utilizza applicazioni moderne, ci si imbatter\u00e0 in problemi simili a quelli riscontrati nei sistemi in cui il storage dei dati \u00e8 organizzato nello stile POSIX.<\/p>\n<h4>Un approccio di maggiore qualit\u00e0<\/h4>\n<p>\nIn questo caso, \u00e8 importante capire che la maggior parte delle applicazioni in realt\u00e0 non \u00e8 progettata per lavorare con la persistenza dello stato o senza. Questo comportamento dipende dall'architettura generale del sistema e dalle scelte specifiche fatte durante la progettazione. Parliamo un po' delle applicazioni che mantengono lo stato.<\/p>\n<p>In linea di principio, tutti i dati delle applicazioni possono essere suddivisi in diversi ampi tipi:<\/p>\n<ul>\n<li>Dati di log<\/li>\n<li>Dati di timestamp<\/li>\n<li>Dati di transazioni<\/li>\n<li>Metadati<\/li>\n<li>Immagini dei container<\/li>\n<li>Dati blob (oggetti binari di grandi dimensioni)<\/li>\n<\/ul>\n<p>\nTutti questi tipi di dati sono ben supportati dalle piattaforme moderne di archiviazione dati, e ci sono diverse piattaforme orientate al cloud adattate per fornire dati in ciascuno di questi specifici formati. Ad esempio, i dati di transazioni e i metadati possono essere conservati in un database moderno orientato al cloud, come CockroachDB, YugaByte, ecc. Le immagini dei container o i dati blob possono essere archiviate in un registro docker basato su MinIO. I dati di timestamp possono essere conservati in un database di serie temporali, ad esempio, InfluxDB, ecc. Non entreremo nei dettagli di ciascun tipo di dato e delle relative applicazioni, ma l'idea generale \u00e8 di evitare la persistenza dello stato basata su mount locali.<\/p>\n<p><img decoding=\"async\" alt=\"Pattern di archiviazione dei dati in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/8e39996ef159f09915802549d4e8ecd5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nInoltre, spesso risulta efficace fornire un livello di caching temporaneo, che funge per le applicazioni da una sorta di archiviazione di file temporanei, ma le applicazioni non dovrebbero fare affidamento su questo livello come sorgente di verit\u00e0.<\/p>\n<h4>Archiviazione per applicazioni con stato<\/h4>\n<p>\nMentre nella maggior parte dei casi \u00e8 utile mantenere le applicazioni senza stato, quelle progettate per conservare dati \u2013 come database, archivi di oggetti, archivi a chiave-valore \u2013 devono mantenere lo stato. Vediamo perch\u00e9 queste applicazioni vengono implementate su Kubernetes. Prendiamo MinIO come esempio, ma principi simili si applicano a qualsiasi altro grande sistema di archiviazione dati orientato al cloud.<\/p>\n<p>Le applicazioni orientate al cloud sono progettate per sfruttare al massimo la flessibilit\u00e0 intrinseca dei contenitori. Ci\u00f2 significa che non vengono fatte assunzioni riguardo all'ambiente in cui saranno distribuite. Ad esempio, MinIO utilizza un meccanismo interno di codifica per ridondanza (erasure coding) che fornisce al sistema una robustezza sufficiente per rimanere operativo anche in caso di guasto della met\u00e0 dei dischi. Inoltre, MinIO gestisce l'integrit\u00e0 e la sicurezza dei dati utilizzando un proprio sistema di hashing e crittografia lato server.<\/p>\n<p>Per queste applicazioni orientate al cloud, i volumi persistenti locali (PV) sono la soluzione pi\u00f9 comoda per l'archiviazione di backup. Un PV locale consente di memorizzare dati grezzi, mentre le applicazioni che operano sopra questi PV raccolgono autonomamente informazioni che consentono di scalare i dati e gestire le crescenti esigenze di archiviazione.<\/p>\n<p>Questo approccio \u00e8 molto pi\u00f9 semplice e si scalda significativamente meglio rispetto ai PV basati su CSI, i quali introducono nei sistemi i propri livelli di gestione dei dati e ridondanza; il problema \u00e8 che questi livelli generalmente entrano in conflitto con le applicazioni progettate secondo il principio del salvataggio dello stato.<\/p>\n<h4>Una transizione sicura verso il disaccoppiamento dei dati dai calcoli<\/h4>\n<p>\nIn questo articolo abbiamo discusso su come le applicazioni si stanno riorientando per funzionare senza mantenere lo stato, in altre parole, l'archiviazione dei dati \u00e8 separata dai calcoli effettuati su di essi. Concludendo, esamineremo alcuni esempi reali di questa tendenza.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/spark.apache.org\/\">Spark<\/a><\/noindex>, la famosa piattaforma per l'analisi dei dati, \u00e8 tradizionalmente utilizzata con una gestione dello stato e con distribuzione nel file system HDFS. Tuttavia, con il passaggio di Spark a un mondo orientato al cloud, questa piattaforma \u00e8 sempre pi\u00f9 utilizzata senza mantenere lo stato utilizzando `s3a`. Spark utilizza s3a per trasferire lo stato ad altri sistemi, mentre i contenitori stessi di Spark funzionano completamente senza mantenere lo stato. Altri grandi attori enterprise nel campo dell'analisi dei big data, in particolare, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.vertica.com\/docs\/9.2.x\/HTML\/Content\/Authoring\/Eon\/Architecture.htm\">Vertica<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/min.io\/resources\/docs\/Teradata-solution-brief.pdf\">Teradata<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.pivotal.io\/partners\/minio-greenplum\/using.html\">Greenplum<\/a><\/noindex> stanno anche passando a lavorare con la separazione tra archiviazione dei dati e calcolo sui dati.<\/p>\n<p>Pattern simili possono essere riscontrati anche su altre importanti piattaforme analitiche, tra cui Presto, Tensorflow to R, Jupyter. Esportando lo stato nei sistemi di archiviazione cloud remoti, diventa molto pi\u00f9 facile gestire e scalare la tua applicazione. Inoltre, ci\u00f2 favorisce la portabilit\u00e0 dell'applicazione in diversi ambienti.<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/piter\/blog\/490180\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0432\u044b\u0448\u043b\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u0430\u044f \u0447\u0440\u0435\u0437\u0432\u044b\u0447\u0430\u0439\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u043a\u043d\u0438\u0433\u0430 \u043e \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430\u0445 Kubernetes. \u041d\u0430\u0447\u0438\u043d\u0430\u043b\u043e\u0441\u044c \u0432\u0441\u0435 \u0435\u0449\u0435 \u0441 &quot;\u041f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432&quot; \u0411\u0440\u0435\u043d\u0434\u0430\u043d\u0430 \u0411\u0435\u0440\u043d\u0441\u0430, \u0438, \u0432\u043f\u0440\u043e\u0447\u0435\u043c, \u0440\u0430\u0431\u043e\u0442\u0430 \u0432 \u044d\u0442\u043e\u043c \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0435 \u0443 \u043d\u0430\u0441 \u043a\u0438\u043f\u0438\u0442. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0436\u0435 \u043c\u044b \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c \u0432\u0430\u043c \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u0438\u0437 \u0431\u043b\u043e\u0433\u0430 MinIO, \u043a\u0440\u0430\u0442\u043a\u043e \u0438\u0437\u043b\u0430\u0433\u0430\u044e\u0449\u0443\u044e \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u0438 \u0438 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0443 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Kubernetes. Kubernetes \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":71859,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-71858","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/patterny-hraneniya-dannyh-v-kubernetes\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Kubernetes | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/patterny-hraneniya-dannyh-v-kubernetes\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-02-28T18:00:08+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-03T13:14:09+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Pattern di archiviazione dei dati in Kubernetes | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/patterny-hraneniya-dannyh-v-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Kubernetes | ProHoster","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/patterny-hraneniya-dannyh-v-kubernetes","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-02-28T18:00:08+00:00","article:modified_time":"2020-03-03T13:14:09+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"71858","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 18:55:27","updated":"2022-09-27 18:57:08","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/71858","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=71858"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/71858\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/71859"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=71858"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=71858"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=71858"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}