<!-- CANARY: REQ=REQ-DOCS-001; FEATURE="Docs"; ASPECT=Documentation; STATUS=TESTED; OWNER=docs; UPDATED=2026-01-15 --> <h2 id="cloud-deployment-for-geode" class="position-relative d-flex align-items-center group"> <span>Cloud Deployment for Geode</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="cloud-deployment-for-geode" aria-haspopup="dialog" aria-label="Share link: Cloud Deployment for Geode"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h2><div id="headingShareModal" class="heading-share-modal" role="dialog" aria-modal="true" aria-labelledby="headingShareTitle" hidden> <div class="hsm-dialog" role="document"> <div class="hsm-header"> <h2 id="headingShareTitle" class="h6 mb-0 fw-bold">Share this section</h2> <button type="button" class="hsm-close" aria-label="Close"> <i class="fa-solid fa-xmark"></i> </button> </div> <div class="hsm-body"> <label for="headingShareInput" class="form-label small text-muted mb-1 text-uppercase fw-bold" style="font-size: 0.7rem; letter-spacing: 0.5px;">Permalink</label> <div class="input-group mb-4 hsm-url-group"> <input id="headingShareInput" type="text" class="form-control font-monospace" readonly aria-readonly="true" style="font-size: 0.85rem;" /> <button class="btn btn-primary hsm-copy" type="button" aria-label="Copy" title="Copy"> <i class="fa-duotone fa-clipboard" aria-hidden="true"></i> </button> </div> <div class="small fw-bold mb-2 text-muted text-uppercase" style="font-size: 0.7rem; letter-spacing: 0.5px;">Share via</div> <div class="hsm-share-grid"> <a id="share-twitter" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-twitter me-2"></i>Twitter </a> <a id="share-linkedin" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-linkedin me-2"></i>LinkedIn </a> <a id="share-facebook" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-facebook me-2"></i>Facebook </a> </div> </div> </div> </div> <style> .heading-share-modal { position: fixed; inset: 0; display: flex; justify-content: center; align-items: center; background: rgba(0, 0, 0, 0.6); z-index: 1050; padding: 1rem; backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px); } .heading-share-modal[hidden] { display: none !important; } .hsm-dialog { max-width: 420px; width: 100%; background: var(--bs-body-bg, #fff); color: var(--bs-body-color, #212529); border: 1px solid var(--bs-border-color, rgba(0,0,0,0.1)); border-radius: 1rem; box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); overflow: hidden; animation: hsm-fade-in 0.2s ease-out; } @keyframes hsm-fade-in { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } [data-bs-theme="dark"] .hsm-dialog { background: #1e293b; border-color: rgba(255,255,255,0.1); color: #f8f9fa; } .hsm-header { display: flex; justify-content: space-between; align-items: center; padding: 1rem 1.5rem; border-bottom: 1px solid var(--bs-border-color, rgba(0,0,0,0.1)); background: rgba(0,0,0,0.02); } [data-bs-theme="dark"] .hsm-header { background: rgba(255,255,255,0.02); border-color: rgba(255,255,255,0.1); } .hsm-close { background: transparent; border: none; color: inherit; opacity: 0.5; padding: 0.25rem 0.5rem; border-radius: 0.25rem; font-size: 1.2rem; line-height: 1; transition: opacity 0.2s; } .hsm-close:hover { opacity: 1; } .hsm-body { padding: 1.5rem; } .hsm-url-group { display: flex !important; align-items: stretch; } .hsm-url-group .form-control { flex: 1; min-width: 0; margin: 0; background: var(--bs-secondary-bg, #f8f9fa); border-color: var(--bs-border-color, #dee2e6); border-top-right-radius: 0; border-bottom-right-radius: 0; height: 42px; } .hsm-url-group .btn { flex: 0 0 auto; margin: 0; margin-left: -1px; border-top-left-radius: 0; border-bottom-left-radius: 0; height: 42px; display: flex; align-items: center; justify-content: center; padding: 0 1.25rem; z-index: 2; } [data-bs-theme="dark"] .hsm-url-group .form-control { background: #0f172a; border-color: #334155; color: #e2e8f0; } .hsm-share-grid { display: flex; flex-direction: column; gap: 0.5rem; } .hsm-share-grid .btn { display: flex; align-items: center; justify-content: center; font-size: 0.9rem; padding: 0.6rem; border-color: var(--bs-border-color); width: 100%; } [data-bs-theme="dark"] .hsm-share-grid .btn { color: #e2e8f0; border-color: #475569; } [data-bs-theme="dark"] .hsm-share-grid .btn:hover { background: #334155; border-color: #cbd5e1; } </style> <script> (function(){ const modal = document.getElementById('headingShareModal'); if(!modal) return; const input = modal.querySelector('#headingShareInput'); const copyBtn = modal.querySelector('.hsm-copy'); const twitter = modal.querySelector('#share-twitter'); const linkedin = modal.querySelector('#share-linkedin'); const facebook = modal.querySelector('#share-facebook'); const closeBtn = modal.querySelector('.hsm-close'); let lastFocus=null; let trapBound=false; function buildUrl(id){ return window.location.origin + window.location.pathname + '#' + id; } function isOpen(){ return !modal.hasAttribute('hidden'); } function hydrate(id){ const url=buildUrl(id); input.value=url; const enc=encodeURIComponent(url); const text=encodeURIComponent(document.title); if(twitter) twitter.href=`https://twitter.com/intent/tweet?url=${enc}&text=${text}`; if(linkedin) linkedin.href=`https://www.linkedin.com/sharing/share-offsite/?url=${enc}`; if(facebook) facebook.href=`https://www.facebook.com/sharer/sharer.php?u=${enc}`; } function openModal(id){ lastFocus=document.activeElement; hydrate(id); if(!isOpen()){ modal.removeAttribute('hidden'); } requestAnimationFrame(()=>{ input.focus(); }); trapFocus(); } function closeModal(){ if(!isOpen()) return; modal.setAttribute('hidden',''); if(lastFocus && typeof lastFocus.focus==='function') lastFocus.focus(); } function copyCurrent(){ try{ navigator.clipboard.writeText(input.value).then(()=>feedback(true),()=>fallback()); } catch(e){ fallback(); } } function fallback(){ input.select(); try{ document.execCommand('copy'); feedback(true);}catch(e){ feedback(false);} } function feedback(ok){ if(!copyBtn) return; const icon=copyBtn.querySelector('i'); if(!icon) return; const prev=copyBtn.getAttribute('data-prev')||icon.className; if(!copyBtn.getAttribute('data-prev')) copyBtn.setAttribute('data-prev',prev); icon.className= ok ? 'fa-duotone fa-clipboard-check':'fa-duotone fa-circle-exclamation'; setTimeout(()=>{ icon.className=prev; },1800); } function handleShareClick(e){ e.preventDefault(); const btn=e.currentTarget; const id=btn.getAttribute('data-share-target'); if(id) openModal(id); } function bindShareButtons(){ document.querySelectorAll('.h-share').forEach(btn=>{ if(!btn.dataset.hShareBound){ btn.addEventListener('click', handleShareClick); btn.dataset.hShareBound='1'; } }); } bindShareButtons(); if(document.readyState==='loading'){ document.addEventListener('DOMContentLoaded', bindShareButtons); } else { requestAnimationFrame(bindShareButtons); } document.addEventListener('click', function(e){ const shareBtn=e.target.closest && e.target.closest('.h-share'); if(shareBtn && !shareBtn.dataset.hShareBound){ handleShareClick.call(shareBtn, e); } }, true); document.addEventListener('click', e=>{ if(e.target===modal) closeModal(); if(e.target.closest && e.target.closest('.hsm-close')){ e.preventDefault(); closeModal(); } if(copyBtn && (e.target===copyBtn || (e.target.closest && e.target.closest('.hsm-copy')))) { e.preventDefault(); copyCurrent(); } }); document.addEventListener('keydown', e=>{ if(e.key==='Escape' && isOpen()) closeModal(); }); function trapFocus(){ if(trapBound) return; trapBound=true; modal.addEventListener('keydown', f=>{ if(f.key==='Tab' && isOpen()){ const focusable=[...modal.querySelectorAll('a[href],button,input,textarea,select,[tabindex]:not([tabindex="-1"])')].filter(el=>!el.hasAttribute('disabled')); if(!focusable.length) return; const first=focusable[0]; const last=focusable[focusable.length-1]; if(f.shiftKey && document.activeElement===first){ f.preventDefault(); last.focus(); } else if(!f.shiftKey && document.activeElement===last){ f.preventDefault(); first.focus(); } } }); } if(closeBtn) closeBtn.addEventListener('click', e=>{ e.preventDefault(); closeModal(); }); })(); </script><p>Cloud platforms provide scalable, managed infrastructure for deploying Geode graph database systems. This guide covers cloud-native deployment patterns, platform-specific configurations, and best practices for running Geode on AWS, Google Cloud Platform (GCP), and Microsoft Azure.</p> <h3 id="introduction-to-cloud-deployments" class="position-relative d-flex align-items-center group"> <span>Introduction to Cloud Deployments</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="introduction-to-cloud-deployments" aria-haspopup="dialog" aria-label="Share link: Introduction to Cloud Deployments"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Cloud deployment offers several advantages for database systems:</p> <p><strong>Elasticity</strong>: Scale compute and storage resources dynamically based on demand</p> <p><strong>Managed Services</strong>: Leverage cloud-provider managed services for storage, networking, and monitoring</p> <p><strong>Global Distribution</strong>: Deploy across multiple regions for low-latency access worldwide</p> <p><strong>High Availability</strong>: Built-in redundancy and fault tolerance mechanisms</p> <p><strong>Cost Optimization</strong>: Pay only for resources used, with options for reserved capacity</p> <p><strong>Automated Operations</strong>: Leverage cloud-native tools for backups, patching, and monitoring</p> <p>For Geode, cloud deployments typically use either virtual machines (IaaS), container orchestration (Kubernetes), or a hybrid approach combining both.</p> <h3 id="cloud-architecture-patterns" class="position-relative d-flex align-items-center group"> <span>Cloud Architecture Patterns</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="cloud-architecture-patterns" aria-haspopup="dialog" aria-label="Share link: Cloud Architecture Patterns"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="1-single-region-deployment" class="position-relative d-flex align-items-center group"> <span>1. Single-Region Deployment</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="1-single-region-deployment" aria-haspopup="dialog" aria-label="Share link: 1. Single-Region Deployment"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Deploy Geode in a single cloud region for applications with localized user bases:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">┌─────────────────────────────────────┐ </span></span><span class="line"><span class="cl">│ Cloud Region (us-east-1) │ </span></span><span class="line"><span class="cl">│ │ </span></span><span class="line"><span class="cl">│ ┌──────────────────────────────┐ │ </span></span><span class="line"><span class="cl">│ │ Load Balancer │ │ </span></span><span class="line"><span class="cl">│ │ (Cloud LB / K8s Ingress) │ │ </span></span><span class="line"><span class="cl">│ └──────────┬───────────────────┘ │ </span></span><span class="line"><span class="cl">│ │ │ </span></span><span class="line"><span class="cl">│ ┌──────────┴───────────────────┐ │ </span></span><span class="line"><span class="cl">│ │ Geode Cluster (3 nodes) │ │ </span></span><span class="line"><span class="cl">│ │ - Availability Zone A │ │ </span></span><span class="line"><span class="cl">│ │ - Availability Zone B │ │ </span></span><span class="line"><span class="cl">│ │ - Availability Zone C │ │ </span></span><span class="line"><span class="cl">│ └──────────┬───────────────────┘ │ </span></span><span class="line"><span class="cl">│ │ │ </span></span><span class="line"><span class="cl">│ ┌──────────┴───────────────────┐ │ </span></span><span class="line"><span class="cl">│ │ Persistent Storage │ │ </span></span><span class="line"><span class="cl">│ │ (EBS / Persistent Disk) │ │ </span></span><span class="line"><span class="cl">│ └──────────────────────────────┘ │ </span></span><span class="line"><span class="cl">└─────────────────────────────────────┘ </span></span></code></pre></div><p><strong>Benefits</strong>:</p> <ul> <li>Lower latency (single region)</li> <li>Simpler networking</li> <li>Lower data transfer costs</li> <li>Easier management</li> </ul> <p><strong>Use cases</strong>: Regional applications, development/staging environments</p> <h4 id="2-multi-region-active-passive" class="position-relative d-flex align-items-center group"> <span>2. Multi-Region Active-Passive</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="2-multi-region-active-passive" aria-haspopup="dialog" aria-label="Share link: 2. Multi-Region Active-Passive"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Primary region handles writes, secondary regions provide read replicas:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">┌──────────────────┐ ┌──────────────────┐ </span></span><span class="line"><span class="cl">│ Primary Region │ │ Secondary Region │ </span></span><span class="line"><span class="cl">│ (us-east-1) │ │ (eu-west-1) │ </span></span><span class="line"><span class="cl">│ │ │ │ </span></span><span class="line"><span class="cl">│ Geode Primary │──────────&gt; Geode Replica │ </span></span><span class="line"><span class="cl">│ (Read/Write) │ Async │ (Read-only) │ </span></span><span class="line"><span class="cl">│ │ Replica │ │ </span></span><span class="line"><span class="cl">└──────────────────┘ └──────────────────┘ </span></span></code></pre></div><p><strong>Benefits</strong>:</p> <ul> <li>Disaster recovery capability</li> <li>Read scaling across regions</li> <li>Geographic distribution</li> </ul> <p><strong>Use cases</strong>: Global applications with primary user base in one region</p> <h4 id="3-multi-region-active-active" class="position-relative d-flex align-items-center group"> <span>3. Multi-Region Active-Active</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="3-multi-region-active-active" aria-haspopup="dialog" aria-label="Share link: 3. Multi-Region Active-Active"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Multiple regions serve both reads and writes with conflict resolution:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">┌──────────────────┐ ┌──────────────────┐ </span></span><span class="line"><span class="cl">│ Region A │ │ Region B │ </span></span><span class="line"><span class="cl">│ (us-east-1) │&lt;────────&gt;│ (eu-west-1) │ </span></span><span class="line"><span class="cl">│ │ Bi-dir │ │ </span></span><span class="line"><span class="cl">│ Geode Cluster │ Sync │ Geode Cluster │ </span></span><span class="line"><span class="cl">│ (Read/Write) │ │ (Read/Write) │ </span></span><span class="line"><span class="cl">└──────────────────┘ └──────────────────┘ </span></span><span class="line"><span class="cl"> │ │ </span></span><span class="line"><span class="cl"> └─────────────┬───────────────┘ </span></span><span class="line"><span class="cl"> │ </span></span><span class="line"><span class="cl"> ┌──────────┴──────────┐ </span></span><span class="line"><span class="cl"> │ Region C │ </span></span><span class="line"><span class="cl"> │ (ap-south-1) │ </span></span><span class="line"><span class="cl"> │ Geode Cluster │ </span></span><span class="line"><span class="cl"> │ (Read/Write) │ </span></span><span class="line"><span class="cl"> └─────────────────────┘ </span></span></code></pre></div><p><strong>Benefits</strong>:</p> <ul> <li>Global low latency</li> <li>High availability</li> <li>Regional failure tolerance</li> </ul> <p><strong>Use cases</strong>: Mission-critical global applications</p> <h3 id="cloud-platform-deployment-guides" class="position-relative d-flex align-items-center group"> <span>Cloud Platform Deployment Guides</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="cloud-platform-deployment-guides" aria-haspopup="dialog" aria-label="Share link: Cloud Platform Deployment Guides"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="amazon-web-services-aws" class="position-relative d-flex align-items-center group"> <span>Amazon Web Services (AWS)</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="amazon-web-services-aws" aria-haspopup="dialog" aria-label="Share link: Amazon Web Services (AWS)"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>EC2-Based Deployment</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Launch EC2 instances for Geode cluster</span> </span></span><span class="line"><span class="cl">aws ec2 run-instances <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --image-id ami-0c55b159cbfafe1f0 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --count <span class="m">3</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --instance-type r6g.2xlarge <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --key-name geode-key <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --security-group-ids sg-0123456789abcdef0 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --subnet-id subnet-0bb1c79de3EXAMPLE <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --tag-specifications <span class="s1">&#39;ResourceType=instance,Tags=[{Key=Name,Value=geode-node}]&#39;</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --block-device-mappings <span class="s1">&#39;[ </span></span></span><span class="line"><span class="cl"><span class="s1"> { </span></span></span><span class="line"><span class="cl"><span class="s1"> &#34;DeviceName&#34;: &#34;/dev/sda1&#34;, </span></span></span><span class="line"><span class="cl"><span class="s1"> &#34;Ebs&#34;: { </span></span></span><span class="line"><span class="cl"><span class="s1"> &#34;VolumeSize&#34;: 100, </span></span></span><span class="line"><span class="cl"><span class="s1"> &#34;VolumeType&#34;: &#34;gp3&#34;, </span></span></span><span class="line"><span class="cl"><span class="s1"> &#34;Iops&#34;: 3000, </span></span></span><span class="line"><span class="cl"><span class="s1"> &#34;Throughput&#34;: 125 </span></span></span><span class="line"><span class="cl"><span class="s1"> } </span></span></span><span class="line"><span class="cl"><span class="s1"> } </span></span></span><span class="line"><span class="cl"><span class="s1"> ]&#39;</span> </span></span></code></pre></div><p><strong>EBS Volume Configuration</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Create EBS volume for data</span> </span></span><span class="line"><span class="cl">aws ec2 create-volume <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --availability-zone us-east-1a <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --size <span class="m">1000</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --volume-type io2 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --iops <span class="m">64000</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --multi-attach-enabled <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --tag-specifications <span class="s1">&#39;ResourceType=volume,Tags=[{Key=Name,Value=geode-data}]&#39;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Attach to EC2 instance</span> </span></span><span class="line"><span class="cl">aws ec2 attach-volume <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --volume-id vol-0123456789abcdef0 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --instance-id i-0123456789abcdef0 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --device /dev/sdf </span></span></code></pre></div><p><strong>Application Load Balancer</strong> (for client connections):</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Create ALB</span> </span></span><span class="line"><span class="cl">aws elbv2 create-load-balancer <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --name geode-alb <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --subnets subnet-0bb1c79de3EXAMPLE subnet-0bb1c79de3EXAMPLE2 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --security-groups sg-0123456789abcdef0 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --type network <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --ip-address-type ipv4 </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Create target group</span> </span></span><span class="line"><span class="cl">aws elbv2 create-target-group <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --name geode-targets <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --protocol TCP <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --port <span class="m">3141</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --vpc-id vpc-0123456789abcdef0 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --health-check-protocol TCP <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --health-check-port <span class="m">3141</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Register targets</span> </span></span><span class="line"><span class="cl">aws elbv2 register-targets <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --target-group-arn arn:aws:elasticloadbalancing:... <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --targets <span class="nv">Id</span><span class="o">=</span>i-0123456789abcdef0 <span class="nv">Id</span><span class="o">=</span>i-0123456789abcdef1 <span class="nv">Id</span><span class="o">=</span>i-0123456789abcdef2 </span></span></code></pre></div><p><strong>EKS Deployment</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># eksctl configuration</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">eksctl.io/v1alpha5</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">ClusterConfig</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">metadata</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">geode-cluster</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">region</span><span class="p">:</span><span class="w"> </span><span class="l">us-east-1</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">version</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;1.28&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">nodeGroups</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">geode-nodes</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">instanceType</span><span class="p">:</span><span class="w"> </span><span class="l">r6g.2xlarge</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">desiredCapacity</span><span class="p">:</span><span class="w"> </span><span class="m">3</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">minSize</span><span class="p">:</span><span class="w"> </span><span class="m">3</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">maxSize</span><span class="p">:</span><span class="w"> </span><span class="m">6</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">volumeSize</span><span class="p">:</span><span class="w"> </span><span class="m">100</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">volumeType</span><span class="p">:</span><span class="w"> </span><span class="l">gp3</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">volumeIOPS</span><span class="p">:</span><span class="w"> </span><span class="m">3000</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">volumeThroughput</span><span class="p">:</span><span class="w"> </span><span class="m">125</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">labels</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">role</span><span class="p">:</span><span class="w"> </span><span class="l">geode</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">tags</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">Name</span><span class="p">:</span><span class="w"> </span><span class="l">geode-node</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">Environment</span><span class="p">:</span><span class="w"> </span><span class="l">production</span><span class="w"> </span></span></span></code></pre></div><p>Deploy with:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">eksctl create cluster -f cluster-config.yaml </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Deploy Geode using Helm</span> </span></span><span class="line"><span class="cl">helm repo add geode https://charts.geodedb.com </span></span><span class="line"><span class="cl">helm install geode geode/geode <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --set <span class="nv">replicaCount</span><span class="o">=</span><span class="m">3</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --set resources.requests.memory<span class="o">=</span>24Gi <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --set storage.size<span class="o">=</span>1Ti <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --set storage.storageClass<span class="o">=</span>gp3 </span></span></code></pre></div><p>See <strong><a href="/tags/aws/" >AWS</a> </strong> for detailed AWS-specific configurations.</p> <h4 id="google-cloud-platform-gcp" class="position-relative d-flex align-items-center group"> <span>Google Cloud Platform (GCP)</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="google-cloud-platform-gcp" aria-haspopup="dialog" aria-label="Share link: Google Cloud Platform (GCP)"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Compute Engine Deployment</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Create instance template</span> </span></span><span class="line"><span class="cl">gcloud compute instance-templates create geode-template <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --machine-type<span class="o">=</span>n2-highmem-8 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --image-family<span class="o">=</span>ubuntu-2204-lts <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --image-project<span class="o">=</span>ubuntu-os-cloud <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --boot-disk-size<span class="o">=</span>100GB <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --boot-disk-type<span class="o">=</span>pd-ssd <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --tags<span class="o">=</span>geode-server <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --metadata-from-file<span class="o">=</span>startup-script<span class="o">=</span>install-geode.sh </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Create managed instance group</span> </span></span><span class="line"><span class="cl">gcloud compute instance-groups managed create geode-cluster <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --base-instance-name<span class="o">=</span>geode-node <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --template<span class="o">=</span>geode-template <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --size<span class="o">=</span><span class="m">3</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --zone<span class="o">=</span>us-central1-a </span></span></code></pre></div><p><strong>Persistent Disk Configuration</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Create persistent disk</span> </span></span><span class="line"><span class="cl">gcloud compute disks create geode-data-disk <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --size<span class="o">=</span>1000GB <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --type<span class="o">=</span>pd-ssd <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --zone<span class="o">=</span>us-central1-a </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Attach to instance</span> </span></span><span class="line"><span class="cl">gcloud compute instances attach-disk geode-node-1 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --disk<span class="o">=</span>geode-data-disk <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --device-name<span class="o">=</span>geode-data </span></span></code></pre></div><p><strong>Cloud Load Balancing</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Create health check</span> </span></span><span class="line"><span class="cl">gcloud compute health-checks create tcp geode-health-check <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --port<span class="o">=</span><span class="m">3141</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --check-interval<span class="o">=</span>10s <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --timeout<span class="o">=</span>5s </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Create backend service</span> </span></span><span class="line"><span class="cl">gcloud compute backend-services create geode-backend <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --protocol<span class="o">=</span>TCP <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --health-checks<span class="o">=</span>geode-health-check <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --global </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Add backends</span> </span></span><span class="line"><span class="cl">gcloud compute backend-services add-backend geode-backend <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --instance-group<span class="o">=</span>geode-cluster <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --instance-group-zone<span class="o">=</span>us-central1-a <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --global </span></span></code></pre></div><p><strong>GKE Deployment</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Create GKE cluster</span> </span></span><span class="line"><span class="cl">gcloud container clusters create geode-cluster <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --machine-type<span class="o">=</span>n2-highmem-8 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --num-nodes<span class="o">=</span><span class="m">3</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --zone<span class="o">=</span>us-central1-a <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --disk-type<span class="o">=</span>pd-ssd <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --disk-size<span class="o">=</span><span class="m">100</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --enable-autoscaling <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --min-nodes<span class="o">=</span><span class="m">3</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --max-nodes<span class="o">=</span><span class="m">10</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Create storage class</span> </span></span><span class="line"><span class="cl">kubectl apply -f - <span class="s">&lt;&lt;EOF </span></span></span><span class="line"><span class="cl"><span class="s">apiVersion: storage.k8s.io/v1 </span></span></span><span class="line"><span class="cl"><span class="s">kind: StorageClass </span></span></span><span class="line"><span class="cl"><span class="s">metadata: </span></span></span><span class="line"><span class="cl"><span class="s"> name: geode-storage </span></span></span><span class="line"><span class="cl"><span class="s">provisioner: pd.csi.storage.gke.io </span></span></span><span class="line"><span class="cl"><span class="s">parameters: </span></span></span><span class="line"><span class="cl"><span class="s"> type: pd-ssd </span></span></span><span class="line"><span class="cl"><span class="s"> replication-type: regional-pd </span></span></span><span class="line"><span class="cl"><span class="s">volumeBindingMode: WaitForFirstConsumer </span></span></span><span class="line"><span class="cl"><span class="s">allowVolumeExpansion: true </span></span></span><span class="line"><span class="cl"><span class="s">EOF</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Deploy Geode</span> </span></span><span class="line"><span class="cl">kubectl apply -f geode-statefulset.yaml </span></span></code></pre></div><p>See <strong><a href="/tags/gcp/" >GCP</a> </strong> for detailed Google Cloud configurations.</p> <h4 id="microsoft-azure" class="position-relative d-flex align-items-center group"> <span>Microsoft Azure</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="microsoft-azure" aria-haspopup="dialog" aria-label="Share link: Microsoft Azure"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Virtual Machine Deployment</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Create resource group</span> </span></span><span class="line"><span class="cl">az group create --name geode-rg --location eastus </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Create virtual network</span> </span></span><span class="line"><span class="cl">az network vnet create <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --resource-group geode-rg <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --name geode-vnet <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --address-prefix 10.0.0.0/16 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --subnet-name geode-subnet <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --subnet-prefix 10.0.1.0/24 </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Create VMs</span> </span></span><span class="line"><span class="cl"><span class="k">for</span> i in <span class="m">1</span> <span class="m">2</span> 3<span class="p">;</span> <span class="k">do</span> </span></span><span class="line"><span class="cl"> az vm create <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --resource-group geode-rg <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --name geode-node-<span class="nv">$i</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --image Ubuntu2204 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --size Standard_E8s_v5 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --vnet-name geode-vnet <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --subnet geode-subnet <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --data-disk-sizes-gb <span class="m">1000</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --storage-sku Premium_LRS <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --admin-username geodeadmin <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --generate-ssh-keys </span></span><span class="line"><span class="cl"><span class="k">done</span> </span></span></code></pre></div><p><strong>Azure Load Balancer</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Create load balancer</span> </span></span><span class="line"><span class="cl">az network lb create <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --resource-group geode-rg <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --name geode-lb <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --sku Standard <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --frontend-ip-name geode-frontend <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --backend-pool-name geode-backend </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Create health probe</span> </span></span><span class="line"><span class="cl">az network lb probe create <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --resource-group geode-rg <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --lb-name geode-lb <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --name geode-health <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --protocol tcp <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --port <span class="m">3141</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Create load balancing rule</span> </span></span><span class="line"><span class="cl">az network lb rule create <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --resource-group geode-rg <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --lb-name geode-lb <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --name geode-rule <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --protocol tcp <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --frontend-port <span class="m">3141</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --backend-port <span class="m">3141</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --frontend-ip-name geode-frontend <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --backend-pool-name geode-backend <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --probe-name geode-health </span></span></code></pre></div><p><strong>AKS Deployment</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Create AKS cluster</span> </span></span><span class="line"><span class="cl">az aks create <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --resource-group geode-rg <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --name geode-aks <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --node-count <span class="m">3</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --node-vm-size Standard_E8s_v5 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --node-osdisk-size <span class="m">100</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --enable-managed-identity <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --generate-ssh-keys </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Get credentials</span> </span></span><span class="line"><span class="cl">az aks get-credentials --resource-group geode-rg --name geode-aks </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Deploy Geode</span> </span></span><span class="line"><span class="cl">kubectl apply -f geode-azure-deployment.yaml </span></span></code></pre></div><p>See <strong><a href="/tags/azure/" >Azure</a> </strong> for detailed Azure configurations.</p> <h3 id="cloud-native-features" class="position-relative d-flex align-items-center group"> <span>Cloud-Native Features</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="cloud-native-features" aria-haspopup="dialog" aria-label="Share link: Cloud-Native Features"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="auto-scaling" class="position-relative d-flex align-items-center group"> <span>Auto-Scaling</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="auto-scaling" aria-haspopup="dialog" aria-label="Share link: Auto-Scaling"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Horizontal Pod Autoscaling</strong> (Kubernetes):</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">autoscaling/v2</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">HorizontalPodAutoscaler</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">metadata</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">geode-hpa</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">spec</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">scaleTargetRef</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">apps/v1</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">StatefulSet</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">geode</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">minReplicas</span><span class="p">:</span><span class="w"> </span><span class="m">3</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">maxReplicas</span><span class="p">:</span><span class="w"> </span><span class="m">10</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">metrics</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l">Resource</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">resource</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">cpu</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">target</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l">Utilization</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">averageUtilization</span><span class="p">:</span><span class="w"> </span><span class="m">70</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l">Resource</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">resource</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">memory</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">target</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l">Utilization</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">averageUtilization</span><span class="p">:</span><span class="w"> </span><span class="m">80</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l">Pods</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">pods</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">metric</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">geode_queries_per_second</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">target</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l">AverageValue</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">averageValue</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;500&#34;</span><span class="w"> </span></span></span></code></pre></div><p><strong>Vertical Pod Autoscaling</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">autoscaling.k8s.io/v1</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">VerticalPodAutoscaler</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">metadata</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">geode-vpa</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">spec</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">targetRef</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">apps/v1</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">StatefulSet</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">geode</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">updatePolicy</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">updateMode</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;Auto&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">resourcePolicy</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">containerPolicies</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">containerName</span><span class="p">:</span><span class="w"> </span><span class="l">geode</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">minAllowed</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">cpu</span><span class="p">:</span><span class="w"> </span><span class="m">2</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">memory</span><span class="p">:</span><span class="w"> </span><span class="l">16Gi</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">maxAllowed</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">cpu</span><span class="p">:</span><span class="w"> </span><span class="m">16</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">memory</span><span class="p">:</span><span class="w"> </span><span class="l">64Gi</span><span class="w"> </span></span></span></code></pre></div> <h4 id="managed-storage" class="position-relative d-flex align-items-center group"> <span>Managed Storage</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="managed-storage" aria-haspopup="dialog" aria-label="Share link: Managed Storage"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>AWS EBS CSI Driver</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">storage.k8s.io/v1</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">StorageClass</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">metadata</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">geode-ebs</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">provisioner</span><span class="p">:</span><span class="w"> </span><span class="l">ebs.csi.aws.com</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">parameters</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l">gp3</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">iops</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;16000&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">throughput</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;1000&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">encrypted</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;true&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">kmsKeyId</span><span class="p">:</span><span class="w"> </span><span class="l">arn:aws:kms:us-east-1:123456789012:key/...</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">allowVolumeExpansion</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">volumeBindingMode</span><span class="p">:</span><span class="w"> </span><span class="l">WaitForFirstConsumer</span><span class="w"> </span></span></span></code></pre></div><p><strong>GCP Persistent Disk</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">storage.k8s.io/v1</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">StorageClass</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">metadata</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">geode-pd</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">provisioner</span><span class="p">:</span><span class="w"> </span><span class="l">pd.csi.storage.gke.io</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">parameters</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l">pd-ssd</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">replication-type</span><span class="p">:</span><span class="w"> </span><span class="l">regional-pd</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">disk-encryption-kms-key</span><span class="p">:</span><span class="w"> </span><span class="l">projects/PROJECT/locations/LOCATION/keyRings/KEYRING/cryptoKeys/KEY</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">allowVolumeExpansion</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span></span></span></code></pre></div><p><strong>Azure Managed Disks</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">storage.k8s.io/v1</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">StorageClass</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">metadata</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">geode-disk</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">provisioner</span><span class="p">:</span><span class="w"> </span><span class="l">disk.csi.azure.com</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">parameters</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">storageaccounttype</span><span class="p">:</span><span class="w"> </span><span class="l">Premium_LRS</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">Managed</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">diskEncryptionSetID</span><span class="p">:</span><span class="w"> </span><span class="l">/subscriptions/.../diskEncryptionSets/...</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">allowVolumeExpansion</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span></span></span></code></pre></div> <h4 id="cloud-monitoring-integration" class="position-relative d-flex align-items-center group"> <span>Cloud Monitoring Integration</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="cloud-monitoring-integration" aria-haspopup="dialog" aria-label="Share link: Cloud Monitoring Integration"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>AWS CloudWatch</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">boto3</span> </span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">geode_client</span> <span class="kn">import</span> <span class="n">Client</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="n">cloudwatch</span> <span class="o">=</span> <span class="n">boto3</span><span class="o">.</span><span class="n">client</span><span class="p">(</span><span class="s1">&#39;cloudwatch&#39;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">publish_geode_metrics</span><span class="p">():</span> </span></span><span class="line"><span class="cl"> <span class="n">client</span> <span class="o">=</span> <span class="n">Client</span><span class="p">(</span><span class="n">host</span><span class="o">=</span><span class="s2">&#34;geode.aws.internal&#34;</span><span class="p">,</span> <span class="n">port</span><span class="o">=</span><span class="mi">3141</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">with</span> <span class="n">client</span><span class="o">.</span><span class="n">connection</span><span class="p">()</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="c1"># Get metrics from Geode</span> </span></span><span class="line"><span class="cl"> <span class="n">result</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s2">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (n) RETURN count(n) AS node_count </span></span></span><span class="line"><span class="cl"><span class="s2"> &#34;&#34;&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Publish to CloudWatch</span> </span></span><span class="line"><span class="cl"> <span class="n">cloudwatch</span><span class="o">.</span><span class="n">put_metric_data</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="n">Namespace</span><span class="o">=</span><span class="s1">&#39;Geode&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">MetricData</span><span class="o">=</span><span class="p">[</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;MetricName&#39;</span><span class="p">:</span> <span class="s1">&#39;NodeCount&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;Value&#39;</span><span class="p">:</span> <span class="n">result</span><span class="o">.</span><span class="n">bindings</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s1">&#39;node_count&#39;</span><span class="p">],</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;Unit&#39;</span><span class="p">:</span> <span class="s1">&#39;Count&#39;</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">]</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span></code></pre></div><p><strong>GCP Cloud Monitoring</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">google.cloud</span> <span class="kn">import</span> <span class="n">monitoring_v3</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="n">client</span> <span class="o">=</span> <span class="n">monitoring_v3</span><span class="o">.</span><span class="n">MetricServiceClient</span><span class="p">()</span> </span></span><span class="line"><span class="cl"><span class="n">project_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&#34;projects/</span><span class="si">{</span><span class="n">project_id</span><span class="si">}</span><span class="s2">&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Create custom metric for Geode</span> </span></span><span class="line"><span class="cl"><span class="n">series</span> <span class="o">=</span> <span class="n">monitoring_v3</span><span class="o">.</span><span class="n">TimeSeries</span><span class="p">()</span> </span></span><span class="line"><span class="cl"><span class="n">series</span><span class="o">.</span><span class="n">metric</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="s2">&#34;custom.googleapis.com/geode/queries_per_second&#34;</span> </span></span><span class="line"><span class="cl"><span class="n">series</span><span class="o">.</span><span class="n">resource</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="s2">&#34;gce_instance&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="n">point</span> <span class="o">=</span> <span class="n">series</span><span class="o">.</span><span class="n">points</span><span class="o">.</span><span class="n">add</span><span class="p">()</span> </span></span><span class="line"><span class="cl"><span class="n">point</span><span class="o">.</span><span class="n">value</span><span class="o">.</span><span class="n">double_value</span> <span class="o">=</span> <span class="n">qps</span> </span></span><span class="line"><span class="cl"><span class="n">point</span><span class="o">.</span><span class="n">interval</span><span class="o">.</span><span class="n">end_time</span><span class="o">.</span><span class="n">seconds</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">())</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="n">client</span><span class="o">.</span><span class="n">create_time_series</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">project_name</span><span class="p">,</span> <span class="n">time_series</span><span class="o">=</span><span class="p">[</span><span class="n">series</span><span class="p">])</span> </span></span></code></pre></div><p><strong>Azure Monitor</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">azure.monitor.ingestion</span> <span class="kn">import</span> <span class="n">LogsIngestionClient</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="n">client</span> <span class="o">=</span> <span class="n">LogsIngestionClient</span><span class="p">(</span><span class="n">endpoint</span><span class="p">,</span> <span class="n">credential</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Send Geode metrics to Azure Monitor</span> </span></span><span class="line"><span class="cl"><span class="n">client</span><span class="o">.</span><span class="n">upload</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="n">rule_id</span><span class="o">=</span><span class="n">rule_id</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">stream_name</span><span class="o">=</span><span class="n">stream_name</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">logs</span><span class="o">=</span><span class="p">[</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;timestamp&#34;</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span><span class="o">.</span><span class="n">isoformat</span><span class="p">(),</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;metric&#34;</span><span class="p">:</span> <span class="s2">&#34;query_latency_ms&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;value&#34;</span><span class="p">:</span> <span class="mf">25.4</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;instance&#34;</span><span class="p">:</span> <span class="s2">&#34;geode-node-1&#34;</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">]</span> </span></span><span class="line"><span class="cl"><span class="p">)</span> </span></span></code></pre></div> <h3 id="cloud-cost-optimization" class="position-relative d-flex align-items-center group"> <span>Cloud Cost Optimization</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="cloud-cost-optimization" aria-haspopup="dialog" aria-label="Share link: Cloud Cost Optimization"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="right-sizing-instances" class="position-relative d-flex align-items-center group"> <span>Right-Sizing Instances</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="right-sizing-instances" aria-haspopup="dialog" aria-label="Share link: Right-Sizing Instances"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Geode resource requirements by workload</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># Calculate required resources</span> </span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">calculate_instance_size</span><span class="p">(</span><span class="n">workload</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> Determine optimal cloud instance type based on workload. </span></span></span><span class="line"><span class="cl"><span class="s2"> &#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="n">workload</span><span class="p">[</span><span class="s1">&#39;nodes&#39;</span><span class="p">]</span> <span class="o">&lt;</span> <span class="mi">100_000</span> <span class="ow">and</span> <span class="n">workload</span><span class="p">[</span><span class="s1">&#39;qps&#39;</span><span class="p">]</span> <span class="o">&lt;</span> <span class="mi">100</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="c1"># Small workload</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;aws&#39;</span><span class="p">:</span> <span class="s1">&#39;r6g.large&#39;</span><span class="p">,</span> <span class="c1"># 2 vCPU, 16 GiB RAM</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;gcp&#39;</span><span class="p">:</span> <span class="s1">&#39;n2-highmem-2&#39;</span><span class="p">,</span> <span class="c1"># 2 vCPU, 16 GB RAM</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;azure&#39;</span><span class="p">:</span> <span class="s1">&#39;Standard_E2s_v5&#39;</span> <span class="c1"># 2 vCPU, 16 GiB RAM</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="k">elif</span> <span class="n">workload</span><span class="p">[</span><span class="s1">&#39;nodes&#39;</span><span class="p">]</span> <span class="o">&lt;</span> <span class="mi">1_000_000</span> <span class="ow">and</span> <span class="n">workload</span><span class="p">[</span><span class="s1">&#39;qps&#39;</span><span class="p">]</span> <span class="o">&lt;</span> <span class="mi">500</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="c1"># Medium workload</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;aws&#39;</span><span class="p">:</span> <span class="s1">&#39;r6g.2xlarge&#39;</span><span class="p">,</span> <span class="c1"># 8 vCPU, 64 GiB RAM</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;gcp&#39;</span><span class="p">:</span> <span class="s1">&#39;n2-highmem-8&#39;</span><span class="p">,</span> <span class="c1"># 8 vCPU, 64 GB RAM</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;azure&#39;</span><span class="p">:</span> <span class="s1">&#39;Standard_E8s_v5&#39;</span> <span class="c1"># 8 vCPU, 64 GiB RAM</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="k">else</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="c1"># Large workload</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;aws&#39;</span><span class="p">:</span> <span class="s1">&#39;r6g.8xlarge&#39;</span><span class="p">,</span> <span class="c1"># 32 vCPU, 256 GiB RAM</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;gcp&#39;</span><span class="p">:</span> <span class="s1">&#39;n2-highmem-32&#39;</span><span class="p">,</span> <span class="c1"># 32 vCPU, 256 GB RAM</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;azure&#39;</span><span class="p">:</span> <span class="s1">&#39;Standard_E32s_v5&#39;</span> <span class="c1"># 32 vCPU, 256 GiB RAM</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span></code></pre></div> <h4 id="reserved-capacity" class="position-relative d-flex align-items-center group"> <span>Reserved Capacity</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="reserved-capacity" aria-haspopup="dialog" aria-label="Share link: Reserved Capacity"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>AWS Reserved Instances</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Purchase 1-year reserved instance</span> </span></span><span class="line"><span class="cl">aws ec2 purchase-reserved-instances-offering <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --reserved-instances-offering-id &lt;offering-id&gt; <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --instance-count <span class="m">3</span> </span></span></code></pre></div><p><strong>GCP Committed Use Discounts</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">gcloud compute commitments create geode-commitment <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --plan<span class="o">=</span>12-month <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --resources<span class="o">=</span><span class="nv">vcpu</span><span class="o">=</span>24,memory<span class="o">=</span>192GB <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --region<span class="o">=</span>us-central1 </span></span></code></pre></div><p><strong>Azure Reserved VM Instances</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">az reservations reservation-order purchase <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --reservation-order-id &lt;order-id&gt; <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --sku Standard_E8s_v5 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --location eastus <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --quantity <span class="m">3</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --term P1Y </span></span></code></pre></div> <h4 id="storage-tiering" class="position-relative d-flex align-items-center group"> <span>Storage Tiering</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="storage-tiering" aria-haspopup="dialog" aria-label="Share link: Storage Tiering"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Move infrequently accessed data to cheaper storage:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># AWS S3 lifecycle policy for Geode backups</span> </span></span><span class="line"><span class="cl">aws s3api put-bucket-lifecycle-configuration <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --bucket geode-backups <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --lifecycle-configuration <span class="s1">&#39;{ </span></span></span><span class="line"><span class="cl"><span class="s1"> &#34;Rules&#34;: [ </span></span></span><span class="line"><span class="cl"><span class="s1"> { </span></span></span><span class="line"><span class="cl"><span class="s1"> &#34;Id&#34;: &#34;Archive old backups&#34;, </span></span></span><span class="line"><span class="cl"><span class="s1"> &#34;Status&#34;: &#34;Enabled&#34;, </span></span></span><span class="line"><span class="cl"><span class="s1"> &#34;Transitions&#34;: [ </span></span></span><span class="line"><span class="cl"><span class="s1"> { </span></span></span><span class="line"><span class="cl"><span class="s1"> &#34;Days&#34;: 30, </span></span></span><span class="line"><span class="cl"><span class="s1"> &#34;StorageClass&#34;: &#34;STANDARD_IA&#34; </span></span></span><span class="line"><span class="cl"><span class="s1"> }, </span></span></span><span class="line"><span class="cl"><span class="s1"> { </span></span></span><span class="line"><span class="cl"><span class="s1"> &#34;Days&#34;: 90, </span></span></span><span class="line"><span class="cl"><span class="s1"> &#34;StorageClass&#34;: &#34;GLACIER&#34; </span></span></span><span class="line"><span class="cl"><span class="s1"> } </span></span></span><span class="line"><span class="cl"><span class="s1"> ] </span></span></span><span class="line"><span class="cl"><span class="s1"> } </span></span></span><span class="line"><span class="cl"><span class="s1"> ] </span></span></span><span class="line"><span class="cl"><span class="s1"> }&#39;</span> </span></span></code></pre></div> <h3 id="cloud-security-best-practices" class="position-relative d-flex align-items-center group"> <span>Cloud Security Best Practices</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="cloud-security-best-practices" aria-haspopup="dialog" aria-label="Share link: Cloud Security Best Practices"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="network-security" class="position-relative d-flex align-items-center group"> <span>Network Security</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="network-security" aria-haspopup="dialog" aria-label="Share link: Network Security"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>VPC Configuration</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-hcl" data-lang="hcl"><span class="line"><span class="cl"><span class="c1"># Terraform configuration for AWS VPC </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">resource</span> <span class="s2">&#34;aws_vpc&#34; &#34;geode&#34;</span> { </span></span><span class="line"><span class="cl"><span class="n"> cidr_block</span> <span class="o">=</span> <span class="s2">&#34;10.0.0.0/16&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="n"> tags</span> <span class="o">=</span> { </span></span><span class="line"><span class="cl"><span class="n"> Name</span> <span class="o">=</span> <span class="s2">&#34;geode-vpc&#34;</span> </span></span><span class="line"><span class="cl"> } </span></span><span class="line"><span class="cl">} </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="k">resource</span> <span class="s2">&#34;aws_subnet&#34; &#34;private&#34;</span> { </span></span><span class="line"><span class="cl"><span class="n"> count</span> <span class="o">=</span> <span class="m">3</span> </span></span><span class="line"><span class="cl"><span class="n"> vpc_id</span> <span class="o">=</span> <span class="k">aws_vpc</span><span class="p">.</span><span class="k">geode</span><span class="p">.</span><span class="k">id</span> </span></span><span class="line"><span class="cl"><span class="n"> cidr_block</span> <span class="o">=</span> <span class="s2">&#34;10.0.${count.index}.0/24&#34;</span> </span></span><span class="line"><span class="cl"><span class="n"> availability_zone</span> <span class="o">=</span> <span class="k">data</span><span class="p">.</span><span class="k">aws_availability_zones</span><span class="p">.</span><span class="k">available</span><span class="p">.</span><span class="k">names</span><span class="p">[</span><span class="k">count</span><span class="p">.</span><span class="k">index</span><span class="p">]</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="n"> tags</span> <span class="o">=</span> { </span></span><span class="line"><span class="cl"><span class="n"> Name</span> <span class="o">=</span> <span class="s2">&#34;geode-private-${count.index}&#34;</span> </span></span><span class="line"><span class="cl"> } </span></span><span class="line"><span class="cl">}<span class="c1"> </span></span></span><span class="line"><span class="cl"><span class="c1"> </span></span></span><span class="line"><span class="cl"><span class="c1"># Security group </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">resource</span> <span class="s2">&#34;aws_security_group&#34; &#34;geode&#34;</span> { </span></span><span class="line"><span class="cl"><span class="n"> name</span> <span class="o">=</span> <span class="s2">&#34;geode-sg&#34;</span> </span></span><span class="line"><span class="cl"><span class="n"> description</span> <span class="o">=</span> <span class="s2">&#34;Security group for Geode&#34;</span> </span></span><span class="line"><span class="cl"><span class="n"> vpc_id</span> <span class="o">=</span> <span class="k">aws_vpc</span><span class="p">.</span><span class="k">geode</span><span class="p">.</span><span class="k">id</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">ingress</span> { </span></span><span class="line"><span class="cl"><span class="n"> from_port</span> <span class="o">=</span> <span class="m">3141</span> </span></span><span class="line"><span class="cl"><span class="n"> to_port</span> <span class="o">=</span> <span class="m">3141</span> </span></span><span class="line"><span class="cl"><span class="n"> protocol</span> <span class="o">=</span> <span class="s2">&#34;tcp&#34;</span> </span></span><span class="line"><span class="cl"><span class="n"> cidr_blocks</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&#34;10.0.0.0/16&#34;</span><span class="p">]</span><span class="c1"> # Internal only </span></span></span><span class="line"><span class="cl"><span class="c1"></span> } </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">egress</span> { </span></span><span class="line"><span class="cl"><span class="n"> from_port</span> <span class="o">=</span> <span class="m">0</span> </span></span><span class="line"><span class="cl"><span class="n"> to_port</span> <span class="o">=</span> <span class="m">0</span> </span></span><span class="line"><span class="cl"><span class="n"> protocol</span> <span class="o">=</span> <span class="s2">&#34;-1&#34;</span> </span></span><span class="line"><span class="cl"><span class="n"> cidr_blocks</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&#34;0.0.0.0/0&#34;</span><span class="p">]</span> </span></span><span class="line"><span class="cl"> } </span></span><span class="line"><span class="cl">} </span></span></code></pre></div> <h4 id="encryption" class="position-relative d-flex align-items-center group"> <span>Encryption</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="encryption" aria-haspopup="dialog" aria-label="Share link: Encryption"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Encryption at rest</strong> (all cloud providers support):</p> <ul> <li>Encrypted EBS volumes (AWS)</li> <li>Encrypted persistent disks (GCP)</li> <li>Encrypted managed disks (Azure)</li> </ul> <p><strong>Encryption in transit</strong>:</p> <ul> <li>Geode uses TLS 1.3 with QUIC protocol</li> <li>All client-server communication encrypted</li> </ul> <h4 id="iam-and-access-control" class="position-relative d-flex align-items-center group"> <span>IAM and Access Control</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="iam-and-access-control" aria-haspopup="dialog" aria-label="Share link: IAM and Access Control"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>AWS IAM Role for Geode</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;Version&#34;</span><span class="p">:</span> <span class="s2">&#34;2012-10-17&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;Statement&#34;</span><span class="p">:</span> <span class="p">[</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;Effect&#34;</span><span class="p">:</span> <span class="s2">&#34;Allow&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;Action&#34;</span><span class="p">:</span> <span class="p">[</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;ec2:DescribeInstances&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;ec2:DescribeVolumes&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;s3:PutObject&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;s3:GetObject&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;cloudwatch:PutMetricData&#34;</span> </span></span><span class="line"><span class="cl"> <span class="p">],</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;Resource&#34;</span><span class="p">:</span> <span class="s2">&#34;*&#34;</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">]</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div> <h3 id="related-topics" class="position-relative d-flex align-items-center group"> <span>Related Topics</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="related-topics" aria-haspopup="dialog" aria-label="Share link: Related Topics"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><ul> <li><strong><a href="/tags/aws/" >AWS</a> </strong>: Amazon Web Services deployment guide</li> <li><strong><a href="/tags/gcp/" >GCP</a> </strong>: Google Cloud Platform deployment guide</li> <li><strong><a href="/tags/azure/" >Azure</a> </strong>: Microsoft Azure deployment guide</li> <li><strong><a href="/tags/containers/" >Containers</a> </strong>: Container deployment patterns</li> <li><strong><a href="/tags/orchestration/" >Orchestration</a> </strong>: Kubernetes orchestration</li> <li><strong><a href="/tags/infrastructure/" >Infrastructure</a> </strong>: Infrastructure as Code</li> <li><strong><a href="/tags/deployment/" >Deployment</a> </strong>: General deployment strategies</li> </ul> <h3 id="further-reading" class="position-relative d-flex align-items-center group"> <span>Further Reading</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="further-reading" aria-haspopup="dialog" aria-label="Share link: Further Reading"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><ul> <li><strong>Cloud Deployment Guide</strong>: <code>/docs/deployment/cloud/</code></li> <li><strong>Multi-Cloud Strategy</strong>: <code>/docs/deployment/multi-cloud/</code></li> <li><strong>Cloud Cost Optimization</strong>: <code>/docs/operations/cloud-cost-optimization/</code></li> <li><strong>Cloud Security</strong>: <code>/docs/security/cloud-security/</code></li> <li><strong>Disaster Recovery</strong>: <code>/docs/operations/disaster-recovery/</code></li> </ul>

Related Articles

No articles found with this tag yet.

Back to Home