<!-- CANARY: REQ=REQ-DOCS-001; FEATURE="Docs"; ASPECT=Documentation; STATUS=TESTED; OWNER=docs; UPDATED=2026-01-15 --> <h2 id="geode-on-google-cloud-platform-gcp" class="position-relative d-flex align-items-center group"> <span>Geode on 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="geode-on-google-cloud-platform-gcp" aria-haspopup="dialog" aria-label="Share link: Geode on 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> </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>Google Cloud Platform offers powerful infrastructure for deploying Geode graph database with excellent performance, managed services, global network capabilities, and deep integration with Google&rsquo;s ecosystem. This comprehensive guide covers production-ready deployment patterns, best practices, and GCP-specific optimizations.</p> <h3 id="gcp-deployment-options" class="position-relative d-flex align-items-center group"> <span>GCP Deployment Options</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="gcp-deployment-options" aria-haspopup="dialog" aria-label="Share link: GCP Deployment Options"> <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="compute-engine" class="position-relative d-flex align-items-center group"> <span>Compute Engine</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="compute-engine" aria-haspopup="dialog" aria-label="Share link: Compute Engine"> <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 on Google Compute Engine VMs for maximum control and performance.</p> <p><strong>Recommended Machine Types</strong>:</p> <p><strong>General Purpose (Development/Testing)</strong>:</p> <ul> <li><strong>E2 Series</strong>: Cost-effective for small workloads <ul> <li>e2-standard-4: 4 vCPUs, 16 GB RAM</li> <li>e2-standard-8: 8 vCPUs, 32 GB RAM</li> <li>e2-standard-16: 16 vCPUs, 64 GB RAM</li> </ul> </li> </ul> <p><strong>Balanced (Production)</strong>:</p> <ul> <li><strong>N2 Series</strong>: Balanced price/performance <ul> <li>n2-standard-8: 8 vCPUs, 32 GB RAM</li> <li>n2-standard-16: 16 vCPUs, 64 GB RAM</li> <li>n2-standard-32: 32 vCPUs, 128 GB RAM</li> </ul> </li> </ul> <p><strong>Memory Optimized</strong>:</p> <ul> <li><strong>N2-highmem Series</strong>: High memory-to-CPU ratio for graph workloads <ul> <li>n2-highmem-8: 8 vCPUs, 64 GB RAM</li> <li>n2-highmem-16: 16 vCPUs, 128 GB RAM</li> <li>n2-highmem-32: 32 vCPUs, 256 GB RAM</li> </ul> </li> </ul> <p><strong>M2-ultramem Series</strong>: Ultra-high memory (4TB+) for massive graphs</p> <ul> <li>m2-ultramem-208: 208 vCPUs, 5.7 TB RAM</li> <li>m2-ultramem-416: 416 vCPUs, 11.8 TB RAM</li> </ul> <p><strong>Compute Optimized</strong>:</p> <ul> <li><strong>C2 Series</strong>: High CPU performance for query-intensive workloads <ul> <li>c2-standard-8: 8 vCPUs, 32 GB RAM (3.8 GHz)</li> <li>c2-standard-16: 16 vCPUs, 64 GB RAM</li> <li>c2-standard-30: 30 vCPUs, 120 GB RAM</li> </ul> </li> </ul> <p><strong>Local SSD</strong>:</p> <ul> <li><strong>N2-highmem with Local SSD</strong>: Ultra-low latency storage <ul> <li>Each instance supports up to 24 x 375 GB Local SSDs</li> <li>Up to 9 TB of Local SSD per instance</li> <li>Sub-millisecond latency</li> </ul> </li> </ul> <h4 id="google-kubernetes-engine-gke" class="position-relative d-flex align-items-center group"> <span>Google Kubernetes Engine (GKE)</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-kubernetes-engine-gke" aria-haspopup="dialog" aria-label="Share link: Google Kubernetes Engine (GKE)"> <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 on GKE for automatic scaling, rolling updates, and orchestration.</p> <p><strong>Benefits</strong>:</p> <ul> <li>Managed Kubernetes control plane (free)</li> <li>Auto-scaling (HPA, VPA, and Cluster Autoscaler)</li> <li>Multi-zone and regional clusters for HA</li> <li>Workload Identity for secure service access</li> <li>Built-in monitoring with Cloud Operations</li> <li>Automatic node repairs and upgrades</li> </ul> <p><strong>GKE Cluster 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 GKE cluster with Autopilot (recommended)</span> </span></span><span class="line"><span class="cl">gcloud container clusters create-auto geode-cluster <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --region<span class="o">=</span>us-central1 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --release-channel<span class="o">=</span>regular <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">12</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --enable-stackdriver-kubernetes </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># OR create standard cluster for more control</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> --region<span class="o">=</span>us-central1 <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> --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> --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">12</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --enable-autorepair <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --enable-autoupgrade <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --enable-ip-alias <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --enable-stackdriver-kubernetes <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --release-channel<span class="o">=</span>regular <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --workload-pool<span class="o">=</span>PROJECT_ID.svc.id.goog </span></span></code></pre></div><p><strong>Add Node Pool for Geode</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">gcloud container node-pools create geode-pool <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --cluster<span class="o">=</span>geode-cluster <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --region<span class="o">=</span>us-central1 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --machine-type<span class="o">=</span>n2-highmem-16 <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> --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">200</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">12</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --node-taints<span class="o">=</span><span class="nv">workload</span><span class="o">=</span>geode:NoSchedule <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --node-labels<span class="o">=</span><span class="nv">workload</span><span class="o">=</span>geode <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --enable-autorepair <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --enable-autoupgrade </span></span></code></pre></div> <h4 id="cloud-run-managed-containers" class="position-relative d-flex align-items-center group"> <span>Cloud Run (Managed Containers)</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-run-managed-containers" aria-haspopup="dialog" aria-label="Share link: Cloud Run (Managed Containers)"> <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>Quick deployment for development and lightweight workloads:</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"># Deploy Geode to Cloud Run (stateless mode only)</span> </span></span><span class="line"><span class="cl">gcloud run deploy geode <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --image<span class="o">=</span>geodedb/geode:latest <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --platform<span class="o">=</span>managed <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --region<span class="o">=</span>us-central1 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --port<span class="o">=</span><span class="m">8443</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --memory<span class="o">=</span>4Gi <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --cpu<span class="o">=</span><span class="m">2</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --min-instances<span class="o">=</span><span class="m">1</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --max-instances<span class="o">=</span><span class="m">10</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --allow-unauthenticated </span></span></code></pre></div><p><strong>Note</strong>: Cloud Run is best for stateless workloads. Use Compute Engine or GKE for production databases.</p> <h3 id="compute-engine-deployment" class="position-relative d-flex align-items-center group"> <span>Compute Engine 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="compute-engine-deployment" aria-haspopup="dialog" aria-label="Share link: Compute Engine 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> </h3> <h4 id="single-instance-setup" class="position-relative d-flex align-items-center group"> <span>Single-Instance Setup</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="single-instance-setup" aria-haspopup="dialog" aria-label="Share link: Single-Instance Setup"> <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>1. Create VPC Network</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 VPC</span> </span></span><span class="line"><span class="cl">gcloud compute networks create geode-network <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --subnet-mode<span class="o">=</span>custom </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Create subnet</span> </span></span><span class="line"><span class="cl">gcloud compute networks subnets create geode-subnet <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --network<span class="o">=</span>geode-network <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --region<span class="o">=</span>us-central1 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --range<span class="o">=</span>10.0.0.0/24 </span></span></code></pre></div><p><strong>2. Create Firewall Rules</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"># Allow QUIC (3141/udp)</span> </span></span><span class="line"><span class="cl">gcloud compute firewall-rules create allow-geode-quic <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --network<span class="o">=</span>geode-network <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --allow<span class="o">=</span>udp:3141 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --source-ranges<span class="o">=</span>0.0.0.0/0 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --description<span class="o">=</span><span class="s2">&#34;Allow QUIC connections to Geode&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Allow HTTPS (8443/tcp)</span> </span></span><span class="line"><span class="cl">gcloud compute firewall-rules create allow-geode-https <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --network<span class="o">=</span>geode-network <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --allow<span class="o">=</span>tcp:8443 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --source-ranges<span class="o">=</span>0.0.0.0/0 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --description<span class="o">=</span><span class="s2">&#34;Allow HTTPS connections to Geode&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Allow SSH</span> </span></span><span class="line"><span class="cl">gcloud compute firewall-rules create allow-ssh <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --network<span class="o">=</span>geode-network <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --allow<span class="o">=</span>tcp:22 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --source-ranges<span class="o">=</span>YOUR_IP/32 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --description<span class="o">=</span><span class="s2">&#34;Allow SSH from specific IP&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Allow internal communication</span> </span></span><span class="line"><span class="cl">gcloud compute firewall-rules create allow-internal <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --network<span class="o">=</span>geode-network <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --allow<span class="o">=</span>tcp:0-65535,udp:0-65535,icmp <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --source-ranges<span class="o">=</span>10.0.0.0/24 </span></span></code></pre></div><p><strong>3. Create Persistent Disk</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 SSD 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>500GB <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"># OR create Extreme Persistent Disk for highest performance</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>500GB <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --type<span class="o">=</span>pd-extreme <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --provisioned-iops<span class="o">=</span><span class="m">100000</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>4. Create Compute Engine Instance</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 instances create geode-vm-01 <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> --machine-type<span class="o">=</span>n2-highmem-16 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --network-interface<span class="o">=</span><span class="nv">subnet</span><span class="o">=</span>geode-subnet <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --maintenance-policy<span class="o">=</span>MIGRATE <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> --disk<span class="o">=</span><span class="nv">name</span><span class="o">=</span>geode-data-disk,mode<span class="o">=</span>rw <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --metadata<span class="o">=</span>startup-script<span class="o">=</span><span class="s1">&#39;#!/bin/bash </span></span></span><span class="line"><span class="cl"><span class="s1"> apt-get update </span></span></span><span class="line"><span class="cl"><span class="s1"> apt-get install -y docker.io </span></span></span><span class="line"><span class="cl"><span class="s1"> mkfs.ext4 -F /dev/sdb </span></span></span><span class="line"><span class="cl"><span class="s1"> mkdir -p /data </span></span></span><span class="line"><span class="cl"><span class="s1"> mount /dev/sdb /data </span></span></span><span class="line"><span class="cl"><span class="s1"> echo &#34;/dev/sdb /data ext4 defaults 0 0&#34; &gt;&gt; /etc/fstab </span></span></span><span class="line"><span class="cl"><span class="s1"> docker run -d \ </span></span></span><span class="line"><span class="cl"><span class="s1"> --name geode \ </span></span></span><span class="line"><span class="cl"><span class="s1"> --restart always \ </span></span></span><span class="line"><span class="cl"><span class="s1"> -p 3141:3141/udp \ </span></span></span><span class="line"><span class="cl"><span class="s1"> -p 8443:8443/tcp \ </span></span></span><span class="line"><span class="cl"><span class="s1"> -v /data:/var/lib/geode \ </span></span></span><span class="line"><span class="cl"><span class="s1"> -e GEODE_DATA_DIR=/var/lib/geode \ </span></span></span><span class="line"><span class="cl"><span class="s1"> geodedb/geode:latest serve --listen 0.0.0.0:3141&#39;</span> <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> --labels<span class="o">=</span><span class="nv">app</span><span class="o">=</span>geode,env<span class="o">=</span>production </span></span></code></pre></div><p><strong>5. Reserve Static IP</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 static external IP</span> </span></span><span class="line"><span class="cl">gcloud compute addresses create geode-ip <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><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Assign to instance</span> </span></span><span class="line"><span class="cl">gcloud compute instances add-access-config geode-vm-01 <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> --address<span class="o">=</span><span class="k">$(</span>gcloud compute addresses describe geode-ip <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --region<span class="o">=</span>us-central1 --format<span class="o">=</span><span class="s1">&#39;get(address)&#39;</span><span class="k">)</span> </span></span></code></pre></div> <h4 id="high-availability-deployment" class="position-relative d-flex align-items-center group"> <span>High-Availability 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="high-availability-deployment" aria-haspopup="dialog" aria-label="Share link: High-Availability 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><strong>1. Create Instance Template</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 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-16 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --network-interface<span class="o">=</span><span class="nv">subnet</span><span class="o">=</span>geode-subnet <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> --create-disk<span class="o">=</span><span class="nv">size</span><span class="o">=</span>500GB,type<span class="o">=</span>pd-ssd <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>startup.sh <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> --labels<span class="o">=</span><span class="nv">app</span><span class="o">=</span>geode </span></span></code></pre></div><p><strong>2. Create Managed Instance Group</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 instance-groups managed create geode-mig <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --base-instance-name<span class="o">=</span>geode <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> --zones<span class="o">=</span>us-central1-a,us-central1-b,us-central1-c <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --health-check<span class="o">=</span>geode-health-check <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --initial-delay<span class="o">=</span><span class="m">300</span> </span></span></code></pre></div><p><strong>3. Create Health Check</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 health-checks create https 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">8443</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --request-path<span class="o">=</span>/health <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --check-interval<span class="o">=</span>30s <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --timeout<span class="o">=</span>10s <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --healthy-threshold<span class="o">=</span><span class="m">2</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --unhealthy-threshold<span class="o">=</span><span class="m">3</span> </span></span></code></pre></div><p><strong>4. Create 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 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>UDP <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 instance group to backend</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-mig <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><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Create forwarding rule</span> </span></span><span class="line"><span class="cl">gcloud compute forwarding-rules create geode-lb <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --global <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --ports<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> --address<span class="o">=</span>geode-ip <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --backend-service<span class="o">=</span>geode-backend </span></span></code></pre></div> <h3 id="gke-deployment" class="position-relative d-flex align-items-center group"> <span>GKE 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="gke-deployment" aria-haspopup="dialog" aria-label="Share link: GKE 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> </h3> <h4 id="kubernetes-manifests" class="position-relative d-flex align-items-center group"> <span>Kubernetes Manifests</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="kubernetes-manifests" aria-haspopup="dialog" aria-label="Share link: Kubernetes Manifests"> <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>Namespace and ConfigMap</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"># namespace.yaml</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">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">Namespace</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</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nn">---</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># configmap.yaml</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">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">ConfigMap</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-config</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">namespace</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">data</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">geode.conf</span><span class="p">:</span><span class="w"> </span><span class="p">|</span><span class="sd"> </span></span></span><span class="line"><span class="cl"><span class="sd"> log_level = &#34;info&#34; </span></span></span><span class="line"><span class="cl"><span class="sd"> data_dir = &#34;/var/lib/geode&#34; </span></span></span><span class="line"><span class="cl"><span class="sd"> listen_addr = &#34;0.0.0.0:3141&#34;</span><span class="w"> </span></span></span></code></pre></div><p><strong>StatefulSet with Persistent 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="c"># statefulset.yaml</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">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</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">namespace</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">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">serviceName</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">replicas</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">selector</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">matchLabels</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">app</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">template</span><span class="p">:</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">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">app</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">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">nodeSelector</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">workload</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">tolerations</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="l">workload</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">operator</span><span class="p">:</span><span class="w"> </span><span class="l">Equal</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">value</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">effect</span><span class="p">:</span><span class="w"> </span><span class="l">NoSchedule</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">containers</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</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">geodedb/geode:latest</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ports</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">containerPort</span><span class="p">:</span><span class="w"> </span><span class="m">3141</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">protocol</span><span class="p">:</span><span class="w"> </span><span class="l">UDP</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">quic</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">containerPort</span><span class="p">:</span><span class="w"> </span><span class="m">8443</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">protocol</span><span class="p">:</span><span class="w"> </span><span class="l">TCP</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">https</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">env</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_DATA_DIR</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">value</span><span class="p">:</span><span class="w"> </span><span class="l">/var/lib/geode</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_LOG_LEVEL</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">value</span><span class="p">:</span><span class="w"> </span><span class="l">info</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">GOOGLE_CLOUD_PROJECT</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">value</span><span class="p">:</span><span class="w"> </span><span class="l">YOUR_PROJECT_ID</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">resources</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">requests</span><span class="p">:</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="s2">&#34;64Gi&#34;</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="s2">&#34;8&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">limits</span><span class="p">:</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="s2">&#34;128Gi&#34;</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="s2">&#34;16&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">volumeMounts</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">data</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">mountPath</span><span class="p">:</span><span class="w"> </span><span class="l">/var/lib/geode</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">config</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">mountPath</span><span class="p">:</span><span class="w"> </span><span class="l">/etc/geode</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">livenessProbe</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">httpGet</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">path</span><span class="p">:</span><span class="w"> </span><span class="l">/health</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">port</span><span class="p">:</span><span class="w"> </span><span class="m">8443</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">scheme</span><span class="p">:</span><span class="w"> </span><span class="l">HTTPS</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">initialDelaySeconds</span><span class="p">:</span><span class="w"> </span><span class="m">30</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">periodSeconds</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">readinessProbe</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">httpGet</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">path</span><span class="p">:</span><span class="w"> </span><span class="l">/ready</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">port</span><span class="p">:</span><span class="w"> </span><span class="m">8443</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">scheme</span><span class="p">:</span><span class="w"> </span><span class="l">HTTPS</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">initialDelaySeconds</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">periodSeconds</span><span class="p">:</span><span class="w"> </span><span class="m">5</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">volumes</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">config</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">configMap</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-config</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">volumeClaimTemplates</span><span class="p">:</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">data</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">accessModes</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="s2">&#34;ReadWriteOnce&#34;</span><span class="w"> </span><span class="p">]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">storageClassName</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">resources</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">requests</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">storage</span><span class="p">:</span><span class="w"> </span><span class="l">500Gi</span><span class="w"> </span></span></span></code></pre></div><p><strong>Service (Internal Load Balancer)</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"># service.yaml</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">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">Service</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</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">namespace</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">annotations</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">cloud.google.com/load-balancer-type</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;Internal&#34;</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">type</span><span class="p">:</span><span class="w"> </span><span class="l">LoadBalancer</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">selector</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">app</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">ports</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">quic</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">port</span><span class="p">:</span><span class="w"> </span><span class="m">3141</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">protocol</span><span class="p">:</span><span class="w"> </span><span class="l">UDP</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">https</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">port</span><span class="p">:</span><span class="w"> </span><span class="m">8443</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">protocol</span><span class="p">:</span><span class="w"> </span><span class="l">TCP</span><span class="w"> </span></span></span></code></pre></div><p><strong>HorizontalPodAutoscaler</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"># hpa.yaml</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">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</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">namespace</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">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">12</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">behavior</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">scaleDown</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">stabilizationWindowSeconds</span><span class="p">:</span><span class="w"> </span><span class="m">300</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">policies</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">Pods</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">value</span><span class="p">:</span><span class="w"> </span><span class="m">1</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">periodSeconds</span><span class="p">:</span><span class="w"> </span><span class="m">60</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">scaleUp</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">stabilizationWindowSeconds</span><span class="p">:</span><span class="w"> </span><span class="m">0</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">policies</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">Pods</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">value</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">periodSeconds</span><span class="p">:</span><span class="w"> </span><span class="m">60</span><span class="w"> </span></span></span></code></pre></div><p><strong>Deploy to GKE</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"># Get GKE credentials</span> </span></span><span class="line"><span class="cl">gcloud container clusters get-credentials geode-cluster <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><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Apply manifests</span> </span></span><span class="line"><span class="cl">kubectl apply -f namespace.yaml </span></span><span class="line"><span class="cl">kubectl apply -f configmap.yaml </span></span><span class="line"><span class="cl">kubectl apply -f statefulset.yaml </span></span><span class="line"><span class="cl">kubectl apply -f service.yaml </span></span><span class="line"><span class="cl">kubectl apply -f hpa.yaml </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Verify deployment</span> </span></span><span class="line"><span class="cl">kubectl get pods -n geode -w </span></span><span class="line"><span class="cl">kubectl get svc -n geode </span></span><span class="line"><span class="cl">kubectl describe statefulset geode -n geode </span></span></code></pre></div> <h3 id="storage-options" class="position-relative d-flex align-items-center group"> <span>Storage Options</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-options" aria-haspopup="dialog" aria-label="Share link: Storage Options"> <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="persistent-disks" class="position-relative d-flex align-items-center group"> <span>Persistent Disks</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="persistent-disks" aria-haspopup="dialog" aria-label="Share link: Persistent Disks"> <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>Standard Persistent Disk (pd-standard)</strong>:</p> <ul> <li>Up to 64 TB per disk</li> <li>0.75 IOPS per GB (read/write)</li> <li>0.12 MB/s per GB throughput</li> <li>Best for: Development, archival, backups</li> </ul> <p><strong>SSD Persistent Disk (pd-ssd)</strong>:</p> <ul> <li>Up to 64 TB per disk</li> <li>30 IOPS per GB (read/write)</li> <li>0.48 MB/s per GB throughput</li> <li>Best for: Production workloads, transaction processing</li> </ul> <p><strong>Balanced Persistent Disk (pd-balanced)</strong>:</p> <ul> <li>Up to 64 TB per disk</li> <li>6 IOPS per GB</li> <li>0.28 MB/s per GB throughput</li> <li>Best for: Cost-effective production workloads</li> </ul> <p><strong>Extreme Persistent Disk (pd-extreme)</strong>:</p> <ul> <li>Up to 64 TB per disk</li> <li>Provisioned IOPS up to 120,000 per disk</li> <li>Provisioned throughput up to 2,400 MB/s</li> <li>Best for: Highest performance requirements</li> </ul> <p><strong>Create Extreme Disk</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 disks create geode-extreme-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-extreme <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --provisioned-iops<span class="o">=</span><span class="m">100000</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --provisioned-throughput<span class="o">=</span><span class="m">2000</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> <h4 id="local-ssd" class="position-relative d-flex align-items-center group"> <span>Local SSD</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="local-ssd" aria-haspopup="dialog" aria-label="Share link: Local SSD"> <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>Ultra-low latency local storage:</p> <p><strong>Create Instance with Local SSD</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 instances create geode-local-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 class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --machine-type<span class="o">=</span>n2-highmem-16 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --local-ssd<span class="o">=</span><span class="nv">interface</span><span class="o">=</span>NVME <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --local-ssd<span class="o">=</span><span class="nv">interface</span><span class="o">=</span>NVME <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --local-ssd<span class="o">=</span><span class="nv">interface</span><span class="o">=</span>NVME <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --local-ssd<span class="o">=</span><span class="nv">interface</span><span class="o">=</span>NVME <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --metadata<span class="o">=</span>startup-script<span class="o">=</span><span class="s1">&#39;#!/bin/bash </span></span></span><span class="line"><span class="cl"><span class="s1"> # RAID 0 for Local SSDs </span></span></span><span class="line"><span class="cl"><span class="s1"> mdadm --create /dev/md0 --level=0 --raid-devices=4 \ </span></span></span><span class="line"><span class="cl"><span class="s1"> /dev/nvme0n1 /dev/nvme0n2 /dev/nvme0n3 /dev/nvme0n4 </span></span></span><span class="line"><span class="cl"><span class="s1"> mkfs.ext4 -F /dev/md0 </span></span></span><span class="line"><span class="cl"><span class="s1"> mkdir -p /data </span></span></span><span class="line"><span class="cl"><span class="s1"> mount /dev/md0 /data&#39;</span> </span></span></code></pre></div><p><strong>Characteristics</strong>:</p> <ul> <li>375 GB per Local SSD</li> <li>Up to 24 Local SSDs per instance (9 TB total)</li> <li>Sub-millisecond latency</li> <li>Ephemeral (data lost on instance stop/delete)</li> <li>Ideal for caching and temporary data</li> </ul> <h4 id="cloud-storage" class="position-relative d-flex align-items-center group"> <span>Cloud 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="cloud-storage" aria-haspopup="dialog" aria-label="Share link: Cloud 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>For backups and archival:</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 bucket</span> </span></span><span class="line"><span class="cl">gsutil mb -c STANDARD -l us-central1 gs://geode-backups/ </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Enable versioning</span> </span></span><span class="line"><span class="cl">gsutil versioning <span class="nb">set</span> on gs://geode-backups/ </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Set lifecycle policy</span> </span></span><span class="line"><span class="cl">cat &gt; lifecycle.json <span class="s">&lt;&lt;EOF </span></span></span><span class="line"><span class="cl"><span class="s">{ </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;lifecycle&#34;: { </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;rule&#34;: [ </span></span></span><span class="line"><span class="cl"><span class="s"> { </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;action&#34;: {&#34;type&#34;: &#34;SetStorageClass&#34;, &#34;storageClass&#34;: &#34;NEARLINE&#34;}, </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;condition&#34;: {&#34;age&#34;: 30} </span></span></span><span class="line"><span class="cl"><span class="s"> }, </span></span></span><span class="line"><span class="cl"><span class="s"> { </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;action&#34;: {&#34;type&#34;: &#34;SetStorageClass&#34;, &#34;storageClass&#34;: &#34;COLDLINE&#34;}, </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;condition&#34;: {&#34;age&#34;: 90} </span></span></span><span class="line"><span class="cl"><span class="s"> }, </span></span></span><span class="line"><span class="cl"><span class="s"> { </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;action&#34;: {&#34;type&#34;: &#34;Delete&#34;}, </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;condition&#34;: {&#34;age&#34;: 365} </span></span></span><span class="line"><span class="cl"><span class="s"> } </span></span></span><span class="line"><span class="cl"><span class="s"> ] </span></span></span><span class="line"><span class="cl"><span class="s"> } </span></span></span><span class="line"><span class="cl"><span class="s">} </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">gsutil lifecycle <span class="nb">set</span> lifecycle.json gs://geode-backups/ </span></span></code></pre></div> <h3 id="monitoring-and-observability" class="position-relative d-flex align-items-center group"> <span>Monitoring and Observability</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="monitoring-and-observability" aria-haspopup="dialog" aria-label="Share link: Monitoring and Observability"> <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="cloud-monitoring-stackdriver" class="position-relative d-flex align-items-center group"> <span>Cloud Monitoring (Stackdriver)</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-stackdriver" aria-haspopup="dialog" aria-label="Share link: Cloud Monitoring (Stackdriver)"> <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>Enable Cloud Operations</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"># Install Ops Agent on Compute Engine</span> </span></span><span class="line"><span class="cl">curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh </span></span><span class="line"><span class="cl">sudo bash add-google-cloud-ops-agent-repo.sh --also-install </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Configure Ops Agent</span> </span></span><span class="line"><span class="cl">cat &gt; /etc/google-cloud-ops-agent/config.yaml <span class="s">&lt;&lt;EOF </span></span></span><span class="line"><span class="cl"><span class="s">logging: </span></span></span><span class="line"><span class="cl"><span class="s"> receivers: </span></span></span><span class="line"><span class="cl"><span class="s"> geode_logs: </span></span></span><span class="line"><span class="cl"><span class="s"> type: files </span></span></span><span class="line"><span class="cl"><span class="s"> include_paths: </span></span></span><span class="line"><span class="cl"><span class="s"> - /var/lib/geode/logs/*.log </span></span></span><span class="line"><span class="cl"><span class="s"> processors: </span></span></span><span class="line"><span class="cl"><span class="s"> geode_parser: </span></span></span><span class="line"><span class="cl"><span class="s"> type: parse_json </span></span></span><span class="line"><span class="cl"><span class="s"> service: </span></span></span><span class="line"><span class="cl"><span class="s"> pipelines: </span></span></span><span class="line"><span class="cl"><span class="s"> geode_pipeline: </span></span></span><span class="line"><span class="cl"><span class="s"> receivers: [geode_logs] </span></span></span><span class="line"><span class="cl"><span class="s"> processors: [geode_parser] </span></span></span><span class="line"><span class="cl"><span class="s"> </span></span></span><span class="line"><span class="cl"><span class="s">metrics: </span></span></span><span class="line"><span class="cl"><span class="s"> receivers: </span></span></span><span class="line"><span class="cl"><span class="s"> hostmetrics: </span></span></span><span class="line"><span class="cl"><span class="s"> type: hostmetrics </span></span></span><span class="line"><span class="cl"><span class="s"> collection_interval: 60s </span></span></span><span class="line"><span class="cl"><span class="s"> service: </span></span></span><span class="line"><span class="cl"><span class="s"> pipelines: </span></span></span><span class="line"><span class="cl"><span class="s"> default_pipeline: </span></span></span><span class="line"><span class="cl"><span class="s"> receivers: [hostmetrics] </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">sudo systemctl restart google-cloud-ops-agent </span></span></code></pre></div><p><strong>Create Custom Dashboard</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"># dashboard.json</span> </span></span><span class="line"><span class="cl">cat &gt; dashboard.json <span class="s">&lt;&lt;&#39;EOF&#39; </span></span></span><span class="line"><span class="cl"><span class="s">{ </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;displayName&#34;: &#34;Geode Performance Dashboard&#34;, </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;mosaicLayout&#34;: { </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;columns&#34;: 12, </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;tiles&#34;: [ </span></span></span><span class="line"><span class="cl"><span class="s"> { </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;width&#34;: 6, </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;height&#34;: 4, </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;widget&#34;: { </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;title&#34;: &#34;Query Latency (p99)&#34;, </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;xyChart&#34;: { </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;dataSets&#34;: [{ </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;timeSeriesQuery&#34;: { </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;timeSeriesFilter&#34;: { </span></span></span><span class="line"><span class="cl"><span class="s"> &#34;filter&#34;: &#34;resource.type=\&#34;gce_instance\&#34; AND metric.type=\&#34;custom.googleapis.com/geode/query_latency_p99\&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s"> } </span></span></span><span class="line"><span class="cl"><span class="s"> } </span></span></span><span class="line"><span class="cl"><span class="s"> }] </span></span></span><span class="line"><span class="cl"><span class="s"> } </span></span></span><span class="line"><span class="cl"><span class="s"> } </span></span></span><span class="line"><span class="cl"><span class="s"> } </span></span></span><span class="line"><span class="cl"><span class="s"> ] </span></span></span><span class="line"><span class="cl"><span class="s"> } </span></span></span><span class="line"><span class="cl"><span class="s">} </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">gcloud monitoring dashboards create --config-from-file<span class="o">=</span>dashboard.json </span></span></code></pre></div><p><strong>Custom Metrics from Geode</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"># Python client with Cloud Monitoring</span> </span></span><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 class="kn">import</span> <span class="nn">geode_client</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="n">client</span> <span class="o">=</span> <span class="n">geode_client</span><span class="o">.</span><span class="n">open_database</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">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="n">start</span> <span class="o">=</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 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;MATCH (u:User) RETURN COUNT(u)&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="n">duration</span> <span class="o">=</span> <span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">-</span> <span class="n">start</span><span class="p">)</span> <span class="o">*</span> <span class="mi">1000</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Send metric to Cloud Monitoring</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/query_latency&#34;</span> </span></span><span class="line"><span class="cl"> <span class="n">point</span> <span class="o">=</span> <span class="n">monitoring_v3</span><span class="o">.</span><span class="n">Point</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">duration</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 class="n">series</span><span class="o">.</span><span class="n">points</span> <span class="o">=</span> <span class="p">[</span><span class="n">point</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">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> <h4 id="cloud-logging" class="position-relative d-flex align-items-center group"> <span>Cloud Logging</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-logging" aria-haspopup="dialog" aria-label="Share link: Cloud Logging"> <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>Log-based Metrics</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 log-based metric for query errors</span> </span></span><span class="line"><span class="cl">gcloud logging metrics create geode_query_errors <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --description<span class="o">=</span><span class="s2">&#34;Count of Geode query errors&#34;</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --log-filter<span class="o">=</span><span class="s1">&#39;resource.type=&#34;gce_instance&#34; </span></span></span><span class="line"><span class="cl"><span class="s1"> labels.app=&#34;geode&#34; </span></span></span><span class="line"><span class="cl"><span class="s1"> severity&gt;=ERROR </span></span></span><span class="line"><span class="cl"><span class="s1"> jsonPayload.query_error=true&#39;</span> </span></span></code></pre></div><p><strong>Export Logs to BigQuery</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 BigQuery dataset</span> </span></span><span class="line"><span class="cl">bq mk --dataset geode_logs </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Create log sink</span> </span></span><span class="line"><span class="cl">gcloud logging sinks create geode-to-bigquery <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> bigquery.googleapis.com/projects/PROJECT_ID/datasets/geode_logs <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --log-filter<span class="o">=</span><span class="s1">&#39;resource.type=&#34;gce_instance&#34; </span></span></span><span class="line"><span class="cl"><span class="s1"> labels.app=&#34;geode&#34;&#39;</span> </span></span></code></pre></div> <h4 id="cloud-trace" class="position-relative d-flex align-items-center group"> <span>Cloud Trace</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-trace" aria-haspopup="dialog" aria-label="Share link: Cloud Trace"> <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>Distributed tracing for queries:</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"># Python client with Cloud Trace</span> </span></span><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">trace_v2</span> </span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">geode_client</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="n">tracer</span> <span class="o">=</span> <span class="n">trace_v2</span><span class="o">.</span><span class="n">TraceServiceClient</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">geode_client</span><span class="o">.</span><span class="n">open_database</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">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="k">with</span> <span class="n">tracer</span><span class="o">.</span><span class="n">span</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s2">&#34;geode_query&#34;</span><span class="p">):</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 (u:User)-[:FRIEND]-&gt;(f:User) </span></span></span><span class="line"><span class="cl"><span class="s2"> WHERE u.city = &#39;Seattle&#39; </span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN u.name, COUNT(f) </span></span></span><span class="line"><span class="cl"><span class="s2"> &#34;&#34;&#34;</span><span class="p">)</span> </span></span></code></pre></div> <h3 id="security" class="position-relative d-flex align-items-center group"> <span>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="security" aria-haspopup="dialog" aria-label="Share link: 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> </h3> <h4 id="workload-identity" class="position-relative d-flex align-items-center group"> <span>Workload Identity</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="workload-identity" aria-haspopup="dialog" aria-label="Share link: Workload Identity"> <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>Secure access to GCP services from GKE:</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"># Enable Workload Identity</span> </span></span><span class="line"><span class="cl">gcloud container clusters update geode-cluster <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --region<span class="o">=</span>us-central1 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --workload-pool<span class="o">=</span>PROJECT_ID.svc.id.goog </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Create service account</span> </span></span><span class="line"><span class="cl">gcloud iam service-accounts create geode-sa <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --display-name<span class="o">=</span><span class="s2">&#34;Geode Service Account&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Grant permissions</span> </span></span><span class="line"><span class="cl">gcloud projects add-iam-policy-binding PROJECT_ID <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --member<span class="o">=</span><span class="s2">&#34;serviceAccount:geode-sa@PROJECT_ID.iam.gserviceaccount.com&#34;</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --role<span class="o">=</span><span class="s2">&#34;roles/storage.objectAdmin&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Bind to Kubernetes service account</span> </span></span><span class="line"><span class="cl">gcloud iam service-accounts add-iam-policy-binding <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> geode-sa@PROJECT_ID.iam.gserviceaccount.com <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --role roles/iam.workloadIdentityUser <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --member <span class="s2">&#34;serviceAccount:PROJECT_ID.svc.id.goog[geode/geode]&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Annotate K8s service account</span> </span></span><span class="line"><span class="cl">kubectl annotate serviceaccount geode <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --namespace geode <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> iam.gke.io/gcp-service-account<span class="o">=</span>geode-sa@PROJECT_ID.iam.gserviceaccount.com </span></span></code></pre></div> <h4 id="secret-manager" class="position-relative d-flex align-items-center group"> <span>Secret Manager</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="secret-manager" aria-haspopup="dialog" aria-label="Share link: Secret Manager"> <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>Store TLS certificates and secrets:</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 secret</span> </span></span><span class="line"><span class="cl"><span class="nb">echo</span> -n <span class="s2">&#34;admin-password-here&#34;</span> <span class="p">|</span> gcloud secrets create geode-admin-password <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --data-file<span class="o">=</span>- </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Grant access</span> </span></span><span class="line"><span class="cl">gcloud secrets add-iam-policy-binding geode-admin-password <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --member<span class="o">=</span><span class="s2">&#34;serviceAccount:geode-sa@PROJECT_ID.iam.gserviceaccount.com&#34;</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --role<span class="o">=</span><span class="s2">&#34;roles/secretmanager.secretAccessor&#34;</span> </span></span></code></pre></div><p><strong>Access from Kubernetes</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"># Use GKE Workload Identity</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">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">Pod</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</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">serviceAccountName</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">containers</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</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">geodedb/geode:latest</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">env</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">ADMIN_PASSWORD</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">valueFrom</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">secretKeyRef</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-admin-password</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="l">password</span><span class="w"> </span></span></span></code></pre></div> <h4 id="vpc-service-controls" class="position-relative d-flex align-items-center group"> <span>VPC Service Controls</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="vpc-service-controls" aria-haspopup="dialog" aria-label="Share link: VPC Service Controls"> <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>Protect against data exfiltration:</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 access policy</span> </span></span><span class="line"><span class="cl">gcloud access-context-manager policies create <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --title<span class="o">=</span><span class="s2">&#34;Geode Security Policy&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Create service perimeter</span> </span></span><span class="line"><span class="cl">gcloud access-context-manager perimeters create geode-perimeter <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --title<span class="o">=</span><span class="s2">&#34;Geode Perimeter&#34;</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --resources<span class="o">=</span>projects/PROJECT_NUMBER <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --restricted-services<span class="o">=</span>storage.googleapis.com,compute.googleapis.com <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --policy<span class="o">=</span>POLICY_ID </span></span></code></pre></div> <h3 id="backup-and-disaster-recovery" class="position-relative d-flex align-items-center group"> <span>Backup and Disaster Recovery</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="backup-and-disaster-recovery" aria-haspopup="dialog" aria-label="Share link: Backup and Disaster Recovery"> <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="persistent-disk-snapshots" class="position-relative d-flex align-items-center group"> <span>Persistent Disk Snapshots</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="persistent-disk-snapshots" aria-haspopup="dialog" aria-label="Share link: Persistent Disk Snapshots"> <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><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 snapshot schedule</span> </span></span><span class="line"><span class="cl">gcloud compute resource-policies create snapshot-schedule geode-daily-backup <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --region<span class="o">=</span>us-central1 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --max-retention-days<span class="o">=</span><span class="m">30</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --on-source-disk-delete<span class="o">=</span>keep-auto-snapshots <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --daily-schedule <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --start-time<span class="o">=</span>02:00 </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Attach to disk</span> </span></span><span class="line"><span class="cl">gcloud compute disks add-resource-policies geode-data-disk <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --resource-policies<span class="o">=</span>geode-daily-backup <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> <h4 id="regional-backup-to-cloud-storage" class="position-relative d-flex align-items-center group"> <span>Regional Backup to Cloud 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="regional-backup-to-cloud-storage" aria-haspopup="dialog" aria-label="Share link: Regional Backup to Cloud 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><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="cp">#!/bin/bash </span></span></span><span class="line"><span class="cl"><span class="cp"></span><span class="c1"># backup-to-gcs.sh</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="nv">DATE</span><span class="o">=</span><span class="k">$(</span>date +%Y%m%d-%H%M%S<span class="k">)</span> </span></span><span class="line"><span class="cl"><span class="nv">BACKUP_FILE</span><span class="o">=</span><span class="s2">&#34;/tmp/geode-backup-</span><span class="nv">$DATE</span><span class="s2">.tar.gz&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Create backup</span> </span></span><span class="line"><span class="cl">docker <span class="nb">exec</span> geode geode backup --output <span class="nv">$BACKUP_FILE</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Upload to Cloud Storage</span> </span></span><span class="line"><span class="cl">gsutil cp <span class="nv">$BACKUP_FILE</span> gs://geode-backups/ </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Clean up local backup</span> </span></span><span class="line"><span class="cl">rm <span class="nv">$BACKUP_FILE</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Optional: Create cross-region copy</span> </span></span><span class="line"><span class="cl">gsutil cp gs://geode-backups/geode-backup-<span class="nv">$DATE</span>.tar.gz <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> gs://geode-backups-eu/ </span></span></code></pre></div> <h4 id="multi-regional-replication" class="position-relative d-flex align-items-center group"> <span>Multi-Regional Replication</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="multi-regional-replication" aria-haspopup="dialog" aria-label="Share link: Multi-Regional Replication"> <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><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 multi-regional bucket</span> </span></span><span class="line"><span class="cl">gsutil mb -c MULTI_REGIONAL -l US gs://geode-backups-mr/ </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Enable object versioning</span> </span></span><span class="line"><span class="cl">gsutil versioning <span class="nb">set</span> on gs://geode-backups-mr/ </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Set up dual-region replication</span> </span></span><span class="line"><span class="cl">gsutil mb -c DUAL_REGIONAL -l US-CENTRAL1,US-EAST1 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> gs://geode-backups-dr/ </span></span></code></pre></div> <h3 id="cost-optimization" class="position-relative d-flex align-items-center group"> <span>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="cost-optimization" aria-haspopup="dialog" aria-label="Share link: 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="committed-use-discounts" class="position-relative d-flex align-items-center group"> <span>Committed Use Discounts</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="committed-use-discounts" aria-haspopup="dialog" aria-label="Share link: Committed Use Discounts"> <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>Save up to 57% with 1 or 3-year commitments:</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 commitment</span> </span></span><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> --region<span class="o">=</span>us-central1 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --plan<span class="o">=</span>36-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>64,memory<span class="o">=</span>512GB </span></span></code></pre></div> <h4 id="preemptible-vms-for-development" class="position-relative d-flex align-items-center group"> <span>Preemptible VMs for Development</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="preemptible-vms-for-development" aria-haspopup="dialog" aria-label="Share link: Preemptible VMs for Development"> <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>Save up to 80%:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">gcloud compute instances create geode-dev-preemptible <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> --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> --preemptible <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> --metadata<span class="o">=</span>startup-script<span class="o">=</span><span class="s1">&#39;...&#39;</span> </span></span></code></pre></div> <h4 id="sustained-use-discounts" class="position-relative d-flex align-items-center group"> <span>Sustained Use Discounts</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="sustained-use-discounts" aria-haspopup="dialog" aria-label="Share link: Sustained Use Discounts"> <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>Automatic discounts (up to 30%) for sustained usage. No action required.</p> <h4 id="storage-cost-optimization" class="position-relative d-flex align-items-center group"> <span>Storage 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="storage-cost-optimization" aria-haspopup="dialog" aria-label="Share link: Storage 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> </h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Use pd-balanced instead of pd-ssd (33% cheaper)</span> </span></span><span class="line"><span class="cl">gcloud compute disks create geode-balanced <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --size<span class="o">=</span>500GB <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --type<span class="o">=</span>pd-balanced </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Use Nearline for infrequent access backups</span> </span></span><span class="line"><span class="cl">gsutil cp backup.tar.gz gs://geode-backups-nearline/ </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/cloud/" >Cloud</a> </strong>: General cloud deployment strategies</li> <li><strong><a href="/tags/aws/" >AWS</a> </strong>: Amazon Web Services deployment</li> <li><strong><a href="/tags/azure/" >Azure</a> </strong>: Microsoft Azure deployment</li> <li><strong><a href="/tags/kubernetes/" >Kubernetes</a> </strong>: Kubernetes orchestration</li> <li><strong><a href="/tags/docker/" >Docker</a> </strong>: Container deployment</li> <li><strong><a href="/tags/monitoring/" >Monitoring</a> </strong>: Monitoring and observability</li> <li><strong><a href="/tags/security/" >Security</a> </strong>: Security best practices</li> <li><strong><a href="/tags/high-availability/" >High Availability</a> </strong>: HA architecture</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>GCP Deployment Guide</strong>: <code>/docs/deployment/gcp/</code></li> <li><strong>GKE Best Practices</strong>: <code>/docs/deployment/gke/</code></li> <li><strong>Cloud Operations Integration</strong>: <code>/docs/monitoring/gcp-monitoring/</code></li> <li><strong>Security on GCP</strong>: <code>/docs/security/gcp-security/</code></li> </ul> <h3 id="conclusion" class="position-relative d-flex align-items-center group"> <span>Conclusion</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="conclusion" aria-haspopup="dialog" aria-label="Share link: Conclusion"> <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>Google Cloud Platform provides excellent infrastructure for deploying Geode graph database at any scale. From simple Compute Engine VMs to sophisticated GKE clusters with auto-scaling, GCP&rsquo;s managed services, global network (100+ points of presence), and powerful data analytics integration make it an outstanding choice for Geode deployments.</p> <p>Key advantages of GCP for Geode:</p> <ul> <li>Best-in-class networking with premium tier</li> <li>Powerful managed Kubernetes (GKE Autopilot)</li> <li>Exceptional performance with Local SSD and Extreme Persistent Disks</li> <li>Deep integration with BigQuery for analytics</li> <li>Comprehensive Cloud Operations suite (formerly Stackdriver)</li> <li>Competitive pricing with automatic sustained use discounts</li> </ul>

Related Articles

No articles found with this tag yet.

Back to Home