<!-- 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’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">"Allow QUIC connections to Geode"</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">"Allow HTTPS connections to Geode"</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">"Allow SSH from specific IP"</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">'#!/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 "/dev/sdb /data ext4 defaults 0 0" >> /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'</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">'get(address)'</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 = "info"
</span></span></span><span class="line"><span class="cl"><span class="sd"> data_dir = "/var/lib/geode"
</span></span></span><span class="line"><span class="cl"><span class="sd"> listen_addr = "0.0.0.0:3141"</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">"64Gi"</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">"8"</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">"128Gi"</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">"16"</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">"ReadWriteOnce"</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">"Internal"</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">'#!/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'</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 > lifecycle.json <span class="s"><<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"> "lifecycle": {
</span></span></span><span class="line"><span class="cl"><span class="s"> "rule": [
</span></span></span><span class="line"><span class="cl"><span class="s"> {
</span></span></span><span class="line"><span class="cl"><span class="s"> "action": {"type": "SetStorageClass", "storageClass": "NEARLINE"},
</span></span></span><span class="line"><span class="cl"><span class="s"> "condition": {"age": 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"> "action": {"type": "SetStorageClass", "storageClass": "COLDLINE"},
</span></span></span><span class="line"><span class="cl"><span class="s"> "condition": {"age": 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"> "action": {"type": "Delete"},
</span></span></span><span class="line"><span class="cl"><span class="s"> "condition": {"age": 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 > /etc/google-cloud-ops-agent/config.yaml <span class="s"><<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 > dashboard.json <span class="s"><<'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"> "displayName": "Geode Performance Dashboard",
</span></span></span><span class="line"><span class="cl"><span class="s"> "mosaicLayout": {
</span></span></span><span class="line"><span class="cl"><span class="s"> "columns": 12,
</span></span></span><span class="line"><span class="cl"><span class="s"> "tiles": [
</span></span></span><span class="line"><span class="cl"><span class="s"> {
</span></span></span><span class="line"><span class="cl"><span class="s"> "width": 6,
</span></span></span><span class="line"><span class="cl"><span class="s"> "height": 4,
</span></span></span><span class="line"><span class="cl"><span class="s"> "widget": {
</span></span></span><span class="line"><span class="cl"><span class="s"> "title": "Query Latency (p99)",
</span></span></span><span class="line"><span class="cl"><span class="s"> "xyChart": {
</span></span></span><span class="line"><span class="cl"><span class="s"> "dataSets": [{
</span></span></span><span class="line"><span class="cl"><span class="s"> "timeSeriesQuery": {
</span></span></span><span class="line"><span class="cl"><span class="s"> "timeSeriesFilter": {
</span></span></span><span class="line"><span class="cl"><span class="s"> "filter": "resource.type=\"gce_instance\" AND metric.type=\"custom.googleapis.com/geode/query_latency_p99\""
</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">"projects/</span><span class="si">{</span><span class="n">project_id</span><span class="si">}</span><span class="s2">"</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">"MATCH (u:User) RETURN COUNT(u)"</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">"custom.googleapis.com/geode/query_latency"</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">"Count of Geode query errors"</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">'resource.type="gce_instance"
</span></span></span><span class="line"><span class="cl"><span class="s1"> labels.app="geode"
</span></span></span><span class="line"><span class="cl"><span class="s1"> severity>=ERROR
</span></span></span><span class="line"><span class="cl"><span class="s1"> jsonPayload.query_error=true'</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">'resource.type="gce_instance"
</span></span></span><span class="line"><span class="cl"><span class="s1"> labels.app="geode"'</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">"geode_query"</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">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (u:User)-[:FRIEND]->(f:User)
</span></span></span><span class="line"><span class="cl"><span class="s2"> WHERE u.city = 'Seattle'
</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"> """</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">"Geode Service Account"</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">"serviceAccount:geode-sa@PROJECT_ID.iam.gserviceaccount.com"</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">"roles/storage.objectAdmin"</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">"serviceAccount:PROJECT_ID.svc.id.goog[geode/geode]"</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">"admin-password-here"</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">"serviceAccount:geode-sa@PROJECT_ID.iam.gserviceaccount.com"</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">"roles/secretmanager.secretAccessor"</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">"Geode Security Policy"</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">"Geode Perimeter"</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">"/tmp/geode-backup-</span><span class="nv">$DATE</span><span class="s2">.tar.gz"</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">'...'</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’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