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