{"id":30353,"date":"2024-10-31T17:53:04","date_gmt":"2024-10-31T16:53:04","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/?p=30353"},"modified":"2024-11-12T10:06:56","modified_gmt":"2024-11-12T09:06:56","slug":"proteggi-la-tua-web-app-deployment-resiliente-su-due-zone-di-disponibilita-con-kubernetes","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/cloud-it\/proteggi-la-tua-web-app-deployment-resiliente-su-due-zone-di-disponibilita-con-kubernetes\/","title":{"rendered":"Proteggi la tua Web App: deployment resiliente su due zone di disponibilit\u00e0 con Kubernetes"},"content":{"rendered":"\n<p class=\"has-larger-font-size\"><strong>Insieme ad Aruba, scopriamo come garantire l&#8217;alta disponibilit\u00e0 della tua applicazione web con Kubernetes gestito.<\/strong><\/p>\n\n\n\t\t\t\t<div class=\"wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-030bc0b2      \"\n\t\t\t\t\tdata-scroll= \"1\"\n\t\t\t\t\tdata-offset= \"30\"\n\t\t\t\t\tstyle=\"\"\n\t\t\t\t>\n\t\t\t\t<div class=\"uagb-toc__wrap\">\n\t\t\t\t\t\t<div class=\"uagb-toc__title\">\n\t\t\t\t\t\t\tTable Of Contents\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"uagb-toc__list-wrap \">\n\t\t\t\t\t\t<ol class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#1-introduzione-al-kubernetes-gestito\" class=\"uagb-toc-link__trigger\">1. Introduzione al Kubernetes gestito<\/a><li class=\"uagb-toc__list\"><a href=\"#2-concetti-chiave-dellalta-disponibilit\u00e0\" class=\"uagb-toc-link__trigger\">2. Concetti chiave dell&#039;alta disponibilit\u00e0<\/a><li class=\"uagb-toc__list\"><a href=\"#3-configurazione-del-cluster-kubernetes-multi-zona\" class=\"uagb-toc-link__trigger\">3. Configurazione del Cluster Kubernetes Multi-zona<\/a><li class=\"uagb-toc__list\"><a href=\"#4-design-e-best-practices\" class=\"uagb-toc-link__trigger\">4. Design e best practices\u00a0<\/a><li class=\"uagb-toc__list\"><a href=\"#5-monitoraggio-e-gestione-della-continuit\u00e0-operativa\" class=\"uagb-toc-link__trigger\">5. Monitoraggio e gestione della continuit\u00e0 operativa<\/a><\/ol>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\n\n\n<h3 class=\"wp-block-heading has-large-font-size\" id=\"h-1-introduzione-al-kubernetes-gestito\"><strong>1. Introduzione al Kubernetes gestito<\/strong><\/h3>\n\n\n\n<p>Kubernetes \u00e8 diventato lo standard \u2018de facto\u2019 per l&#8217;orchestrazione di container nel panorama dell&#8217;IT moderno. Questa piattaforma open-source, originariamente sviluppata da Google, permette di automatizzare il deployment, lo scaling e la gestione di applicazioni containerizzate. La sua importanza risiede nella capacit\u00e0 di semplificare la gestione di applicazioni complesse, migliorare l&#8217;efficienza operativa e garantire la scalabilit\u00e0 in ambienti cloud e on-premise.<\/p>\n\n\n\n<p>Il Kubernetes gestito di Aruba offre numerosi vantaggi rispetto a una configurazione self-managed. Innanzitutto, <strong>elimina la complessit\u00e0 dell&#8217;installazione e della manutenzione dell&#8217;infrastruttura Kubernetes<\/strong>, consentendo ai team di sviluppo di concentrarsi sulla creazione e il miglioramento delle applicazioni. Inoltre, Aruba si occupa degli aggiornamenti di sicurezza e delle patch, garantendo che il cluster sia sempre aggiornato e protetto.<\/p>\n\n\n\n<p>Un aspetto fondamentale del Aruba-managed Kubernetes \u00e8 il concetto di alta disponibilit\u00e0, che si applica sia al control plane che al data plane. L&#8217;alta disponibilit\u00e0 del control plane assicura che i componenti master di Kubernetes siano replicati e distribuiti su pi\u00f9 nodi di availability in zone diverse, garantendo la continuit\u00e0 operativa anche in caso di guasti hardware o di rete. Questo \u00e8 particolarmente importante per mantenere la stabilit\u00e0 e la gestibilit\u00e0 del cluster.<\/p>\n\n\n\n<p>L&#8217;utilizzatore pu\u00f2 beneficiare dell&#8217;alta affidabilit\u00e0 del dataplane Kubernetes grazie alla disponibilit\u00e0 di avere Kubernetes NodePool su Availability Zone diverse. In Aruba il concetto di Kubernetes NodePool \u00e8 locale ad una availability Zone. Questo significa che se abbiamo nodepool in availability zone diverse allora l&#8217;applicazione, e quindi il dataplane Kubernetes, sar\u00e0 resiliente a fallimenti locali ad una singola availability zone perch\u00e8 grazie a Kubernetes l&#8217;applicazione pu\u00f2 essere schedulata e replicata su nodi diversi.<\/p>\n\n\n\n<p>Questa configurazione \u00e8 cruciale per <strong>garantire la resilienza delle applicazioni degli utenti<\/strong>. Distribuendo i nodi del cluster su zone di disponibilit\u00e0 diverse, si crea un&#8217;architettura robusta che pu\u00f2 resistere a interruzioni localizzate e garantire la continuit\u00e0 del servizio.<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-large-font-size\" id=\"h-2-concetti-chiave-dell-alta-disponibilita\"><strong>2. Concetti chiave dell&#8217;alta disponibilit\u00e0<\/strong><\/h3>\n\n\n\n<p>Le zone di disponibilit\u00e0 (AZ) sono infrastrutture fisicamente separate all&#8217;interno di una regione cloud, ciascuna con la propria alimentazione, raffreddamento e connettivit\u00e0 di rete. Queste zone sono progettate per essere isolate le une dalle altre, in modo che un problema in una zona non influisca sulle altre. L&#8217;importanza delle zone di disponibilit\u00e0 risiede nella loro capacit\u00e0 di fornire ridondanza e resilienza a livello di infrastruttura, consentendo alle applicazioni di rimanere operative anche in caso di guasti localizzati o disastri.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/events.codemotion.com\/hackathons\/cloud-budget-revolution\/home\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/PREVIEW-1920X1080-1024x576.png\" alt=\"Cloud Aruba Banner\" class=\"wp-image-30357\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/PREVIEW-1920X1080-1024x576.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/PREVIEW-1920X1080-300x169.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/PREVIEW-1920X1080-768x432.png 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/PREVIEW-1920X1080-1536x864.png 1536w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/PREVIEW-1920X1080-896x504.png 896w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/PREVIEW-1920X1080-400x225.png 400w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/PREVIEW-1920X1080.png 1921w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>Le strategie di resilienza per le applicazioni web si basano su diversi principi chiave:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Ridondanza<\/strong>: Distribuzione di copie multiple dell&#8217;applicazione su diverse zone di disponibilit\u00e0.<\/li>\n\n\n\n<li><strong>Bilanciamento del carico<\/strong>: Distribuzione uniforme del traffico tra le istanze dell&#8217;applicazione.<\/li>\n\n\n\n<li><strong>Failover automatico<\/strong>: Capacit\u00e0 di reindirizzare il traffico verso istanze funzionanti in caso di guasti.<\/li>\n\n\n\n<li><strong>Stato distribuito<\/strong>: Memorizzazione dei dati di stato in modo distribuito per evitare singoli punti di fallimento.<\/li>\n\n\n\n<li><strong>Monitoraggio e auto-guarigione<\/strong>: Implementazione di sistemi che possono rilevare e risolvere automaticamente i problemi.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading has-large-font-size\" id=\"h-3-configurazione-del-cluster-kubernetes-multi-zona\"><strong>3. Configurazione del Cluster Kubernetes Multi-zona<\/strong><\/h3>\n\n\n\n<p>L\u2019alta disponibilit\u00e0 del control plane viene garantita selezionando l\u2019opzione HA sul pannello di gestione Aruba (o direttamente tramite API).. In questa configurazione, il control plane di Kubernetes \u00e8 distribuito su tre zone di disponibilit\u00e0 per garantire la continuit\u00e0 operativa e l\u2019alta disponibilit\u00e0 del sistema di gestione, in quanto lo stato del cluster risiede su etcd, che richiede tre zone per mantenere la resilienza in caso di caduta di una zona.\u00a0<\/p>\n\n\n\n<p>L&#8217;architettura di dataplane \u00e8, al contrario, decisa dal cliente e si basa sulla distribuzione strategica dei nodi del cluster su infrastrutture fisicamente separate, in base alle necessit\u00e0 delle proprie applicazioni. I node pool sono un concetto logico che sente di raggruppare uno o pi\u00f9 nodi computazionali ( a seconda della cardinalit\u00e0 impostata) che sono simili per taglia e topologia&nbsp;<\/p>\n\n\n\n<p>Ecco i passaggi principali per distribuire i nodi su zone diverse utilizzando Aruba Managed Kubernetes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Creazione del cluster<\/strong>: Utilizzare la console di Aruba Cloud per creare un nuovo cluster Kubernetes, selezionando l&#8217;opzione per il multi-zona.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Configurazione dei node pool<\/strong>: Definire almeno due node pool, uno per ciascuna zona di disponibilit\u00e0. Ad esempio:<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">nodePools:\n- name: <span class=\"hljs-string\">\"pool1\"<\/span>\n  <span class=\"hljs-attr\">nodes<\/span>: <span class=\"hljs-number\">3<\/span>\n  <span class=\"hljs-attr\">instance<\/span>: <span class=\"hljs-string\">\"m1.medium\"<\/span>\n  <span class=\"hljs-attr\">dataCenter<\/span>: <span class=\"hljs-string\">\"zone-1\"<\/span>\n- name: <span class=\"hljs-string\">\"pool2\"<\/span>\n  <span class=\"hljs-attr\">nodes<\/span>: <span class=\"hljs-number\">3<\/span>\n  <span class=\"hljs-attr\">instance<\/span>: <span class=\"hljs-string\">\"m1.medium\"<\/span>\n  <span class=\"hljs-attr\">dataCenter<\/span>: <span class=\"hljs-string\">\"zone-2\"<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Schema Architetturale:<\/strong><\/li>\n<\/ul>\n\n\n\n<p><strong>Zone:<\/strong> 2 (es. zone-1 e zone-2)<br><strong>Node Pools:<\/strong> 2 (uno per zona)<br><strong>Nodi per Node Pool:<\/strong> 3 nodi per zona, per un totale di 6 nodi<\/p>\n\n\n\n<p>Questo garantisce ridondanza tra le zone e bilanciamento del carico.<\/p>\n\n\n\n<p>L\u2019etichettatura dei nodi, con Aruba managed Kubernetes, viene eseguita in maniera automatica:&nbsp;<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">DC-A &gt; az1\nDC-B &gt; az2\nDC-C &gt; az3<\/code><\/span><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Configurazione delle informazioni di topologia<\/strong>: Applicata su risorse come Pod o Deployment.<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"YAML\" data-shcb-language-slug=\"yaml\"><span><code class=\"hljs language-yaml\"><span class=\"hljs-attr\">topologySpreadConstraints:<\/span>\n<span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-attr\">maxSkew:<\/span> <span class=\"hljs-number\">1<\/span>\n  <span class=\"hljs-attr\">topologyKey:<\/span> <span class=\"hljs-string\">topology.kubernetes.io\/zone<\/span>\n  <span class=\"hljs-attr\">whenUnsatisfiable:<\/span> <span class=\"hljs-string\">DoNotSchedule<\/span>\n  <span class=\"hljs-attr\">labelSelector:<\/span>\n    <span class=\"hljs-attr\">matchLabels:<\/span>\n      <span class=\"hljs-attr\">name:<\/span> <span class=\"hljs-string\">web-app<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">YAML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">yaml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Chiavi principali<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>maxSkew<\/strong>: Definisce la differenza massima consentita nel numero di pod tra le zone. Un valore di 1 significa che la differenza tra la zona con pi\u00f9 pod e quella con meno pod non pu\u00f2 superare 1 unit\u00e0.<\/li>\n\n\n\n<li><strong>topologyKey<\/strong>: L&#8217;etichetta topology.kubernetes.io\/zone viene utilizzata per identificare le diverse zone di disponibilit\u00e0 in cui distribuire i pod.<\/li>\n\n\n\n<li><strong>whenUnsatisfiable<\/strong>: L&#8217;opzione DoNotSchedule indica che se non \u00e8 possibile rispettare il vincolo di distribuzione, il pod non verr\u00e0 schedulato.<\/li>\n\n\n\n<li><strong>labelSelector<\/strong>: Specifica quali pod devono seguire questa politica di distribuzione, attraverso le loro etichette (in questo caso, name: web-app).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading has-large-font-size\" id=\"h-4-design-e-best-practices-nbsp\"><strong>4. Design e best practices&nbsp;<\/strong><\/h3>\n\n\n\n<p>Fare le giuste scelte di design \u00e8 fondamentale per poter ottenere una soluzione che sia altamente affidabile e facilmente manutenibile. Di seguito i punti chiave:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Distribuzione Multi-Zona<\/strong>: La configurazione prevede la distribuzione dei pod su diverse zone, migliorando la resilienza dell\u2019applicazione rispetto a guasti locali e zonali.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Bilanciamento del carico tramite Ingress<\/strong>: L\u2019uso di un solo Ingress per esporre l\u2019applicazione centralizza il traffico esterno in un unico punto di ingresso, semplificando l\u2019architettura e riducendo la complessit\u00e0 operativa. In base al carico di traffico atteso potrebbe essere opportuno riservare dei nodi per la gestione del solo traffico in ingresso, etichettando opportunamente (e.g. con la label \u201cingress\u201d). Si consideri questo esempio, non esuasitvo, di specifica:<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"YAML\" data-shcb-language-slug=\"yaml\"><span><code class=\"hljs language-yaml\"><span class=\"hljs-attr\">apiVersion:<\/span> <span class=\"hljs-string\">apps\/v1<\/span>\n<span class=\"hljs-attr\">kind:<\/span> <span class=\"hljs-string\">DaemonSet<\/span>\n<span class=\"hljs-attr\">metadata:<\/span>\n  <span class=\"hljs-attr\">name:<\/span> <span class=\"hljs-string\">nginx-ingress<\/span>\n  <span class=\"hljs-attr\">namespace:<\/span> <span class=\"hljs-string\">nginx-ingress<\/span>\n<span class=\"hljs-attr\">spec:<\/span>\n  <span class=\"hljs-attr\">selector:<\/span>\n    <span class=\"hljs-attr\">matchLabels:<\/span>\n      <span class=\"hljs-attr\">app:<\/span> <span class=\"hljs-string\">nginx-ingress<\/span>\n  <span class=\"hljs-attr\">template:<\/span>\n    <span class=\"hljs-attr\">metadata:<\/span>\n      <span class=\"hljs-attr\">labels:<\/span>\n        <span class=\"hljs-attr\">app:<\/span> <span class=\"hljs-string\">nginx-ingress<\/span>\n        <span class=\"hljs-attr\">app.kubernetes.io\/name:<\/span> <span class=\"hljs-string\">nginx-ingress<\/span>\n    <span class=\"hljs-attr\">spec:<\/span>\n      <span class=\"hljs-attr\">affinity:<\/span>\n        <span class=\"hljs-attr\">nodeAffinity:<\/span>\n          <span class=\"hljs-attr\">requiredDuringSchedulingIgnoredDuringExecution:<\/span>\n            <span class=\"hljs-attr\">nodeSelectorTerms:<\/span>\n            <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-attr\">matchExpressions:<\/span>\n              <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-attr\">key:<\/span> <span class=\"hljs-string\">topology.kubernetes.io\/zone<\/span>\n                <span class=\"hljs-attr\">operator:<\/span> <span class=\"hljs-string\">In<\/span>\n                <span class=\"hljs-attr\">values:<\/span>\n                <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">az2<\/span>\n      <span class=\"hljs-attr\">tolerations:<\/span>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-attr\">key:<\/span> <span class=\"hljs-string\">\"ingress\"<\/span>\n        <span class=\"hljs-attr\">operator:<\/span> <span class=\"hljs-string\">\"Exists\"<\/span>\n        <span class=\"hljs-attr\">effect:<\/span> <span class=\"hljs-string\">\"NoSchedule\"<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">YAML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">yaml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In pi\u00f9, utilizzando un ingress, non \u00e8 pi\u00f9 necessario istanziare un LoadBalancer separato per ogni servizio, poich\u00e9 l\u2019Ingress si occupa gi\u00e0 di gestire il traffico HTTP\/HTTPS e instradarlo verso il backen corretto, con conseguente risparmio di costo e tempi di gestione.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Deployment<\/strong>: Utilizziamo un Deployment per gestire il ciclo di vita dei pod in modo flessibile e automatizzato, aggiungendo le specifiche di topologySpreadConstraints<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"YAML\" data-shcb-language-slug=\"yaml\"><span><code class=\"hljs language-yaml\"><span class=\"hljs-attr\">apiVersion:<\/span> <span class=\"hljs-string\">apps\/v1<\/span>\n<span class=\"hljs-attr\">kind:<\/span> <span class=\"hljs-string\">Deployment<\/span>\n<span class=\"hljs-attr\">metadata:<\/span>\n  <span class=\"hljs-attr\">name:<\/span> <span class=\"hljs-string\">webapp-deployment<\/span>\n<span class=\"hljs-attr\">spec:<\/span>\n  <span class=\"hljs-attr\">replicas:<\/span> <span class=\"hljs-number\">3<\/span>\n  <span class=\"hljs-attr\">selector:<\/span>\n    <span class=\"hljs-attr\">matchLabels:<\/span>\n      <span class=\"hljs-attr\">app:<\/span> <span class=\"hljs-string\">webapp<\/span>\n  <span class=\"hljs-attr\">template:<\/span>\n    <span class=\"hljs-attr\">metadata:<\/span>\n      <span class=\"hljs-attr\">labels:<\/span>\n        <span class=\"hljs-attr\">app:<\/span> <span class=\"hljs-string\">webapp<\/span>\n    <span class=\"hljs-attr\">spec:<\/span>\n      <span class=\"hljs-attr\">topologySpreadConstraints:<\/span>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-attr\">maxSkew:<\/span> <span class=\"hljs-number\">1<\/span>\n        <span class=\"hljs-attr\">topologyKey:<\/span> <span class=\"hljs-string\">topology.kubernetes.io\/zone<\/span>\n        <span class=\"hljs-attr\">whenUnsatisfiable:<\/span> <span class=\"hljs-string\">DoNotSchedule<\/span>\n        <span class=\"hljs-attr\">labelSelector:<\/span>\n          <span class=\"hljs-attr\">matchLabels:<\/span>\n            <span class=\"hljs-attr\">name:<\/span> <span class=\"hljs-string\">webapp<\/span>\n      <span class=\"hljs-attr\">containers:<\/span>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-attr\">name:<\/span> <span class=\"hljs-string\">webapp<\/span>\n        <span class=\"hljs-attr\">image:<\/span> <span class=\"hljs-string\">webapp:1.0<\/span>\n        <span class=\"hljs-attr\">resources:<\/span>\n          <span class=\"hljs-attr\">requests:<\/span>\n            <span class=\"hljs-attr\">memory:<\/span> <span class=\"hljs-string\">\"256Mi\"<\/span>\n            <span class=\"hljs-attr\">cpu:<\/span> <span class=\"hljs-string\">\"250m\"<\/span>\n          <span class=\"hljs-attr\">limits:<\/span>\n            <span class=\"hljs-attr\">memory:<\/span> <span class=\"hljs-string\">\"512Mi\"<\/span>\n            <span class=\"hljs-attr\">cpu:<\/span> <span class=\"hljs-string\">\"500m\"<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">YAML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">yaml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Si faccia attenzione all\u2019impostazione di request e limit per la nostra applicazione. Su un sistema carico alcuni container potrebbero essere rimossi per recuperare risorse come CPU e RAM. Idealmente, vorremmo eliminare i container meno importanti. Per questo, in k8s, \u00e8 possibile definire tre classi di servizio (<em>QoS classes<\/em>) per i container in base alle impostazioni di <em>Request <\/em>e <em>Limit<\/em>: Guaranteed, Burstable e Best-Effort, in ordine decrescente di priorit\u00e0. In particolare:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Se i limiti e, facoltativamente, le richieste (diversi da 0) sono impostati tra le <em>Resources <\/em>dei container e sono uguali, il pod viene classificato come Guaranteed.<\/li>\n\n\n\n<li>Se le richieste e facoltativamente i limiti sono impostati (diversi da 0) tra le <em>Resources <\/em>dei container e non sono uguali, il pod viene classificato come Burstable. Quando i limiti non sono specificati, vengono impostati di default alla capacit\u00e0 del nodo<\/li>\n\n\n\n<li>Se le richieste e i limiti non sono impostati il pod viene classificato come Best-Effort.<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>PodDisruptionBudget (PDB)<\/strong>: Definiamo un PDB che assicura la disponibilit\u00e0 di almeno due pod durante operazioni di manutenzione, garantendo continuit\u00e0 del servizio.<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"YAML\" data-shcb-language-slug=\"yaml\"><span><code class=\"hljs language-yaml\"><span class=\"hljs-attr\">apiVersion:<\/span> <span class=\"hljs-string\">policy\/v1<\/span>\n<span class=\"hljs-attr\">kind:<\/span> <span class=\"hljs-string\">PodDisruptionBudget<\/span>\n<span class=\"hljs-attr\">metadata:<\/span>\n  <span class=\"hljs-attr\">name:<\/span> <span class=\"hljs-string\">webapp-pdb<\/span>\n<span class=\"hljs-attr\">spec:<\/span>\n  <span class=\"hljs-attr\">minAvailable:<\/span> <span class=\"hljs-number\">2<\/span>\n  <span class=\"hljs-attr\">selector:<\/span>\n    <span class=\"hljs-attr\">matchLabels:<\/span>\n      <span class=\"hljs-attr\">app:<\/span> <span class=\"hljs-string\">webapp<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">YAML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">yaml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Il PDB garantisce che almeno 2 pod rimangano sempre disponibili durante operazioni di manutenzione pianificate.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Ingress e ClusterIP Service<\/strong>: Utilizziamo una Ingress rules per gestire il traffico esterno, e un Service di tipo ClusterIP per inoltrare il traffico ai pod senza l\u2019uso di un LoadBalancer aggiuntivo, ottimizzando la gestione del traffico.<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"YAML\" data-shcb-language-slug=\"yaml\"><span><code class=\"hljs language-yaml\"><span class=\"hljs-attr\">apiVersion:<\/span> <span class=\"hljs-string\">v1<\/span>\n<span class=\"hljs-attr\">kind:<\/span> <span class=\"hljs-string\">Service<\/span>\n<span class=\"hljs-attr\">metadata:<\/span>\n  <span class=\"hljs-attr\">name:<\/span> <span class=\"hljs-string\">webapp-service<\/span>\n<span class=\"hljs-attr\">spec:<\/span>\n  <span class=\"hljs-attr\">type:<\/span> <span class=\"hljs-string\">ClusterIP<\/span>\n  <span class=\"hljs-attr\">ports:<\/span>\n  <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-attr\">port:<\/span> <span class=\"hljs-number\">80<\/span>\n    <span class=\"hljs-attr\">targetPort:<\/span> <span class=\"hljs-number\">8080<\/span>\n  <span class=\"hljs-attr\">selector:<\/span>\n    <span class=\"hljs-attr\">app:<\/span> <span class=\"hljs-string\">webapp<\/span>\n<span class=\"hljs-meta\">---<\/span>\n<span class=\"hljs-attr\">apiVersion:<\/span> <span class=\"hljs-string\">networking.k8s.io\/v1<\/span>\n<span class=\"hljs-attr\">kind:<\/span> <span class=\"hljs-string\">Ingress<\/span>\n<span class=\"hljs-attr\">metadata:<\/span>\n  <span class=\"hljs-attr\">name:<\/span> <span class=\"hljs-string\">webapp-ingress<\/span>\n  <span class=\"hljs-attr\">annotations:<\/span>\n    <span class=\"hljs-attr\">nginx.ingress.kubernetes.io\/rewrite-target:<\/span> <span class=\"hljs-string\">\/<\/span>\n<span class=\"hljs-attr\">spec:<\/span>\n  <span class=\"hljs-attr\">rules:<\/span>\n  <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-attr\">http:<\/span>\n      <span class=\"hljs-attr\">paths:<\/span>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-attr\">path:<\/span> <span class=\"hljs-string\">\/webapp<\/span>\n        <span class=\"hljs-attr\">pathType:<\/span> <span class=\"hljs-string\">Prefix<\/span>\n        <span class=\"hljs-attr\">backend:<\/span>\n          <span class=\"hljs-attr\">service:<\/span>\n            <span class=\"hljs-attr\">name:<\/span> <span class=\"hljs-string\">webapp-service<\/span>\n            <span class=\"hljs-attr\">port:<\/span>\n              <span class=\"hljs-attr\">number:<\/span> <span class=\"hljs-number\">80<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">YAML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">yaml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>L&#8217;Ingress pu\u00f2 essere configurato per gestire il routing HTTP\/HTTPS con path-based routing e SSL termination.<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-large-font-size\" id=\"h-5-monitoraggio-e-gestione-della-continuita-operativa\"><strong>5. Monitoraggio e gestione della continuit\u00e0 operativa<\/strong><\/h3>\n\n\n\n<p>Per garantire l&#8217;alta disponibilit\u00e0 della web app, \u00e8 fondamentale implementare un sistema di monitoraggio robusto. \u00c8 possibile utilizzare diversi strumenti di monitoraggio, tra cui:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Prometheus: Per la raccolta di metriche del cluster e delle applicazioni.<\/li>\n\n\n\n<li>Grafana: Per la visualizzazione dei dati e la creazione di dashboard personalizzate.<\/li>\n\n\n\n<li>Alertmanager: Per la gestione e l&#8217;invio di notifiche in caso di problemi.<\/li>\n<\/ol>\n\n\n\n<p><strong>Simulazione del fault di un nodo<\/strong><\/p>\n\n\n\n<p>Per dimostrare la resilienza dell&#8217;architettura, possiamo simulare il drain dei nodi in una zona specifica per verificare la rischedulazione automatica dei pod.<\/p>\n\n\n\n<p><strong>Passaggi:<\/strong><\/p>\n\n\n\n<p><strong>Identificare i nodi nella zona target:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">bash\nkubectl get nodes -l topology.kubernetes.io\/zone=az1<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Eseguire il drain dei nodi:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">bash\nkubectl drain &lt;node-name&gt; \\\n  --ignore-daemonsets \\\n  --delete-emptydir-data \\\n  --timeout=300s<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Monitorare la rischedulazione:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">bash\nkubectl get pods -o wide -w<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Risultato atteso:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>I pod verranno rischedulati solo sui nodi rimanenti della zona, garantendo che il traffico continui ad essere bilanciato sulle due zone. Iterando il drain su tutti i nodi di una zona i pod verranno schedulati sulla zona rimanente fintanto che non si viola la maxSkew.<\/li>\n\n\n\n<li>Il PDB garantir\u00e0 almeno 2 pod attivi durante il processo<\/li>\n\n\n\n<li>L&#8217;Ingress continuer\u00e0 a distribuire il traffico ai pod attivi<\/li>\n<\/ul>\n\n\n\n<p>In conclusione, questa simulazione verifica l&#8217;efficacia delle configurazioni di alta disponibilit\u00e0 implementate e la capacit\u00e0 dell&#8217;infrastruttura di mantenere il servizio attivo anche in caso di perdita di una zona.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.cloud.it\/managed-kubernetes.aspx\"><img loading=\"lazy\" decoding=\"async\" width=\"975\" height=\"250\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/BANNER-FOOTER-18.png\" alt=\"Kubernetes aruba\" class=\"wp-image-30355\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/BANNER-FOOTER-18.png 975w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/BANNER-FOOTER-18-300x77.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/BANNER-FOOTER-18-768x197.png 768w\" sizes=\"auto, (max-width: 975px) 100vw, 975px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Insieme ad Aruba, scopriamo come garantire l&#8217;alta disponibilit\u00e0 della tua applicazione web con Kubernetes gestito. 1. Introduzione al Kubernetes gestito Kubernetes \u00e8 diventato lo standard \u2018de facto\u2019 per l&#8217;orchestrazione di container nel panorama dell&#8217;IT moderno. Questa piattaforma open-source, originariamente sviluppata da Google, permette di automatizzare il deployment, lo scaling e la gestione di applicazioni containerizzate.&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/cloud-it\/proteggi-la-tua-web-app-deployment-resiliente-su-due-zone-di-disponibilita-con-kubernetes\/\">Read more<\/a><\/p>\n","protected":false},"author":64,"featured_media":30361,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[10291],"tags":[12710,12712,12715],"collections":[],"class_list":{"0":"post-30353","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-cloud-it","8":"tag-aruba","9":"tag-cluster","10":"tag-k8s","11":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Proteggi la tua Web App: deployment resiliente su due zone di disponibilit\u00e0 con Kubernetes - Codemotion Magazine<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/cloud-it\/proteggi-la-tua-web-app-deployment-resiliente-su-due-zone-di-disponibilita-con-kubernetes\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Proteggi la tua Web App: deployment resiliente su due zone di disponibilit\u00e0 con Kubernetes\" \/>\n<meta property=\"og:description\" content=\"Insieme ad Aruba, scopriamo come garantire l&#8217;alta disponibilit\u00e0 della tua applicazione web con Kubernetes gestito. 1. Introduzione al Kubernetes gestito Kubernetes \u00e8 diventato lo standard \u2018de facto\u2019 per l&#8217;orchestrazione di container nel panorama dell&#8217;IT moderno. Questa piattaforma open-source, originariamente sviluppata da Google, permette di automatizzare il deployment, lo scaling e la gestione di applicazioni containerizzate.&#8230; Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/cloud-it\/proteggi-la-tua-web-app-deployment-resiliente-su-due-zone-di-disponibilita-con-kubernetes\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-10-31T16:53:04+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-12T09:06:56+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/Cloud-Aruba-Managed.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1792\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Codemotion\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Codemotion\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/devops-it\\\/cloud-it\\\/proteggi-la-tua-web-app-deployment-resiliente-su-due-zone-di-disponibilita-con-kubernetes\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/devops-it\\\/cloud-it\\\/proteggi-la-tua-web-app-deployment-resiliente-su-due-zone-di-disponibilita-con-kubernetes\\\/\"},\"author\":{\"name\":\"Codemotion\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/person\\\/201bb98b02412383686cced7521b861c\"},\"headline\":\"Proteggi la tua Web App: deployment resiliente su due zone di disponibilit\u00e0 con Kubernetes\",\"datePublished\":\"2024-10-31T16:53:04+00:00\",\"dateModified\":\"2024-11-12T09:06:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/devops-it\\\/cloud-it\\\/proteggi-la-tua-web-app-deployment-resiliente-su-due-zone-di-disponibilita-con-kubernetes\\\/\"},\"wordCount\":1457,\"publisher\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/devops-it\\\/cloud-it\\\/proteggi-la-tua-web-app-deployment-resiliente-su-due-zone-di-disponibilita-con-kubernetes\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/Cloud-Aruba-Managed.webp\",\"keywords\":[\"aruba\",\"cluster\",\"k8s\"],\"articleSection\":[\"Cloud\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/devops-it\\\/cloud-it\\\/proteggi-la-tua-web-app-deployment-resiliente-su-due-zone-di-disponibilita-con-kubernetes\\\/\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/devops-it\\\/cloud-it\\\/proteggi-la-tua-web-app-deployment-resiliente-su-due-zone-di-disponibilita-con-kubernetes\\\/\",\"name\":\"Proteggi la tua Web App: deployment resiliente su due zone di disponibilit\u00e0 con Kubernetes - Codemotion Magazine\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/devops-it\\\/cloud-it\\\/proteggi-la-tua-web-app-deployment-resiliente-su-due-zone-di-disponibilita-con-kubernetes\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/devops-it\\\/cloud-it\\\/proteggi-la-tua-web-app-deployment-resiliente-su-due-zone-di-disponibilita-con-kubernetes\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/Cloud-Aruba-Managed.webp\",\"datePublished\":\"2024-10-31T16:53:04+00:00\",\"dateModified\":\"2024-11-12T09:06:56+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/devops-it\\\/cloud-it\\\/proteggi-la-tua-web-app-deployment-resiliente-su-due-zone-di-disponibilita-con-kubernetes\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/devops-it\\\/cloud-it\\\/proteggi-la-tua-web-app-deployment-resiliente-su-due-zone-di-disponibilita-con-kubernetes\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/devops-it\\\/cloud-it\\\/proteggi-la-tua-web-app-deployment-resiliente-su-due-zone-di-disponibilita-con-kubernetes\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/Cloud-Aruba-Managed.webp\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/Cloud-Aruba-Managed.webp\",\"width\":1792,\"height\":1024},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/devops-it\\\/cloud-it\\\/proteggi-la-tua-web-app-deployment-resiliente-su-due-zone-di-disponibilita-con-kubernetes\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DevOps\",\"item\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/devops-it\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Cloud\",\"item\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/devops-it\\\/cloud-it\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Proteggi la tua Web App: deployment resiliente su due zone di disponibilit\u00e0 con Kubernetes\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#website\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/codemotionlogo.png\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/Codemotion.Italy\\\/\",\"https:\\\/\\\/x.com\\\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/person\\\/201bb98b02412383686cced7521b861c\",\"name\":\"Codemotion\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/cropped-codemotionlogo-150x150.png\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/cropped-codemotionlogo-150x150.png\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/cropped-codemotionlogo-150x150.png\",\"caption\":\"Codemotion\"},\"description\":\"Articles wirtten by the Codemotion staff. Tech news, inspiration, latest treends in software development and more.\",\"sameAs\":[\"https:\\\/\\\/x.com\\\/CodemotionIT\"],\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/author\\\/codemotion-2\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Proteggi la tua Web App: deployment resiliente su due zone di disponibilit\u00e0 con Kubernetes - Codemotion Magazine","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/cloud-it\/proteggi-la-tua-web-app-deployment-resiliente-su-due-zone-di-disponibilita-con-kubernetes\/","og_locale":"en_US","og_type":"article","og_title":"Proteggi la tua Web App: deployment resiliente su due zone di disponibilit\u00e0 con Kubernetes","og_description":"Insieme ad Aruba, scopriamo come garantire l&#8217;alta disponibilit\u00e0 della tua applicazione web con Kubernetes gestito. 1. Introduzione al Kubernetes gestito Kubernetes \u00e8 diventato lo standard \u2018de facto\u2019 per l&#8217;orchestrazione di container nel panorama dell&#8217;IT moderno. Questa piattaforma open-source, originariamente sviluppata da Google, permette di automatizzare il deployment, lo scaling e la gestione di applicazioni containerizzate.&#8230; Read more","og_url":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/cloud-it\/proteggi-la-tua-web-app-deployment-resiliente-su-due-zone-di-disponibilita-con-kubernetes\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2024-10-31T16:53:04+00:00","article_modified_time":"2024-11-12T09:06:56+00:00","og_image":[{"width":1792,"height":1024,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/Cloud-Aruba-Managed.webp","type":"image\/webp"}],"author":"Codemotion","twitter_card":"summary_large_image","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Codemotion","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/cloud-it\/proteggi-la-tua-web-app-deployment-resiliente-su-due-zone-di-disponibilita-con-kubernetes\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/cloud-it\/proteggi-la-tua-web-app-deployment-resiliente-su-due-zone-di-disponibilita-con-kubernetes\/"},"author":{"name":"Codemotion","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/201bb98b02412383686cced7521b861c"},"headline":"Proteggi la tua Web App: deployment resiliente su due zone di disponibilit\u00e0 con Kubernetes","datePublished":"2024-10-31T16:53:04+00:00","dateModified":"2024-11-12T09:06:56+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/cloud-it\/proteggi-la-tua-web-app-deployment-resiliente-su-due-zone-di-disponibilita-con-kubernetes\/"},"wordCount":1457,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/cloud-it\/proteggi-la-tua-web-app-deployment-resiliente-su-due-zone-di-disponibilita-con-kubernetes\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/Cloud-Aruba-Managed.webp","keywords":["aruba","cluster","k8s"],"articleSection":["Cloud"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/cloud-it\/proteggi-la-tua-web-app-deployment-resiliente-su-due-zone-di-disponibilita-con-kubernetes\/","url":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/cloud-it\/proteggi-la-tua-web-app-deployment-resiliente-su-due-zone-di-disponibilita-con-kubernetes\/","name":"Proteggi la tua Web App: deployment resiliente su due zone di disponibilit\u00e0 con Kubernetes - Codemotion Magazine","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/cloud-it\/proteggi-la-tua-web-app-deployment-resiliente-su-due-zone-di-disponibilita-con-kubernetes\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/cloud-it\/proteggi-la-tua-web-app-deployment-resiliente-su-due-zone-di-disponibilita-con-kubernetes\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/Cloud-Aruba-Managed.webp","datePublished":"2024-10-31T16:53:04+00:00","dateModified":"2024-11-12T09:06:56+00:00","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/cloud-it\/proteggi-la-tua-web-app-deployment-resiliente-su-due-zone-di-disponibilita-con-kubernetes\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/cloud-it\/proteggi-la-tua-web-app-deployment-resiliente-su-due-zone-di-disponibilita-con-kubernetes\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/cloud-it\/proteggi-la-tua-web-app-deployment-resiliente-su-due-zone-di-disponibilita-con-kubernetes\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/Cloud-Aruba-Managed.webp","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/Cloud-Aruba-Managed.webp","width":1792,"height":1024},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/cloud-it\/proteggi-la-tua-web-app-deployment-resiliente-su-due-zone-di-disponibilita-con-kubernetes\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"DevOps","item":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/"},{"@type":"ListItem","position":3,"name":"Cloud","item":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/cloud-it\/"},{"@type":"ListItem","position":4,"name":"Proteggi la tua Web App: deployment resiliente su due zone di disponibilit\u00e0 con Kubernetes"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/201bb98b02412383686cced7521b861c","name":"Codemotion","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/cropped-codemotionlogo-150x150.png","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/cropped-codemotionlogo-150x150.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/cropped-codemotionlogo-150x150.png","caption":"Codemotion"},"description":"Articles wirtten by the Codemotion staff. Tech news, inspiration, latest treends in software development and more.","sameAs":["https:\/\/x.com\/CodemotionIT"],"url":"https:\/\/www.codemotion.com\/magazine\/author\/codemotion-2\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/Cloud-Aruba-Managed-600x400.webp","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/Cloud-Aruba-Managed-600x600.webp","author_info":{"display_name":"Codemotion","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/codemotion-2\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/Cloud-Aruba-Managed.webp",1792,1024,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/Cloud-Aruba-Managed-150x150.webp",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/Cloud-Aruba-Managed-300x171.webp",300,171,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/Cloud-Aruba-Managed-768x439.webp",768,439,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/Cloud-Aruba-Managed-1024x585.webp",1024,585,true],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/Cloud-Aruba-Managed-1536x878.webp",1536,878,true],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/Cloud-Aruba-Managed.webp",1792,1024,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/Cloud-Aruba-Managed-100x100.webp",100,100,true],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/Cloud-Aruba-Managed-180x128.webp",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/Cloud-Aruba-Managed-896x504.webp",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/Cloud-Aruba-Managed-400x225.webp",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/Cloud-Aruba-Managed-600x400.webp",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/Cloud-Aruba-Managed-600x600.webp",600,600,true]},"uagb_author_info":{"display_name":"Codemotion","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/codemotion-2\/"},"uagb_comment_info":0,"uagb_excerpt":"Insieme ad Aruba, scopriamo come garantire l&#8217;alta disponibilit\u00e0 della tua applicazione web con Kubernetes gestito. 1. Introduzione al Kubernetes gestito Kubernetes \u00e8 diventato lo standard \u2018de facto\u2019 per l&#8217;orchestrazione di container nel panorama dell&#8217;IT moderno. Questa piattaforma open-source, originariamente sviluppata da Google, permette di automatizzare il deployment, lo scaling e la gestione di applicazioni containerizzate.&#8230;&hellip;","lang":"it","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/30353","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/64"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=30353"}],"version-history":[{"count":2,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/30353\/revisions"}],"predecessor-version":[{"id":30400,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/30353\/revisions\/30400"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/30361"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=30353"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=30353"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=30353"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=30353"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}