From b273e83cd2d0bc9198e0f9e67b060f31842ced02 Mon Sep 17 00:00:00 2001
From: Guanzhou Song
Date: Tue, 17 Mar 2026 14:24:06 -0400
Subject: [PATCH 1/3] Add Kubernetes operator promotion page
Create a dedicated DocumentDB Kubernetes Operator landing page, add homepage and docs entry points, and align the copy and styling with the rest of the site while highlighting local, hybrid, and multi-cloud workflows.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---
app/kubernetes-operator/page.tsx | 343 +++++++++++++++++++++++++++++++
app/page.tsx | 84 +++++++-
app/services/articleService.ts | 6 +-
app/services/externalLinks.ts | 5 +
articles/content.yml | 4 +-
5 files changed, 437 insertions(+), 5 deletions(-)
create mode 100644 app/kubernetes-operator/page.tsx
create mode 100644 app/services/externalLinks.ts
diff --git a/app/kubernetes-operator/page.tsx b/app/kubernetes-operator/page.tsx
new file mode 100644
index 0000000..263f8ea
--- /dev/null
+++ b/app/kubernetes-operator/page.tsx
@@ -0,0 +1,343 @@
+import Link from "next/link";
+import { getMetadata } from "../services/metadataService";
+import {
+ documentdbKubernetesOperatorDocsUrl,
+ documentdbKubernetesOperatorGitHubUrl,
+} from "../services/externalLinks";
+
+const operatorBenefits = [
+ {
+ title: "Local to cloud",
+ description:
+ "Start on kind or minikube, then move to managed or self-managed Kubernetes with the same operator model.",
+ },
+ {
+ title: "Hybrid and multi-cloud",
+ description:
+ "The docs include concrete AKS, EKS, GKE, and on-prem deployment patterns for teams spanning more than one environment.",
+ },
+ {
+ title: "Cross-cluster replication",
+ description:
+ "Use documented multi-cluster replication and failover patterns when one cluster is not enough.",
+ },
+ {
+ title: "HA, backup, and TLS",
+ description:
+ "Add automatic failover, backup resources, and TLS to operate DocumentDB as a real service.",
+ },
+ {
+ title: "Day-2 operations",
+ description:
+ "Use the kubectl plugin for status, events, and promotion workflows.",
+ },
+] as const;
+
+const setupSteps = [
+ {
+ step: "01",
+ title: "Prepare the cluster",
+ description:
+ "Use kind or minikube locally, or a Kubernetes 1.35+ cluster such as AKS, EKS, or GKE.",
+ },
+ {
+ step: "02",
+ title: "Install the operator",
+ description:
+ "Deploy the operator so it can reconcile DocumentDB resources and manage cluster lifecycle operations.",
+ },
+ {
+ step: "03",
+ title: "Create a DocumentDB resource",
+ description:
+ "Apply a DocumentDB custom resource to start locally or grow into replicated topologies as your environment expands.",
+ },
+] as const;
+
+const operatorHighlights = [
+ "kind + minikube quickstart",
+ "AKS / EKS / GKE",
+ "Hybrid / on-prem guide",
+ "Cross-cluster replication",
+ "Backup + ScheduledBackup resources",
+ "kubectl plugin for operator workflows",
+ "TLS-aware deployment model",
+] as const;
+
+const bestFitScenarios = [
+ "Teams starting on local clusters and growing toward managed Kubernetes.",
+ "Platform teams spanning cloud and on-prem Kubernetes environments.",
+ "Operators that need cross-cluster replication and promotion workflows.",
+] as const;
+
+export const metadata = getMetadata({
+ title: "DocumentDB Kubernetes Operator",
+ description:
+ "Learn how the DocumentDB Kubernetes Operator takes DocumentDB from local Kubernetes clusters to hybrid and multi-cloud topologies with replication, HA, backups, and TLS.",
+ extraKeywords: [
+ "Kubernetes",
+ "operator",
+ "Helm",
+ "multi-cloud",
+ "hybrid",
+ "on-prem",
+ "cross-cluster replication",
+ "high availability",
+ "backup",
+ "TLS",
+ ],
+});
+
+export default function KubernetesOperatorPage() {
+ return (
+
+
+
+
+
+
+
+ Operator preview
+
+
+ DocumentDB Kubernetes Operator
+
+
+ Start on kind or minikube. Expand to{" "}
+ hybrid and multi-cloud Kubernetes.
+
+
+ Install with Helm, manage with custom resources, and extend to
+ documented cross-cluster replication, failover, backups, and
+ TLS.
+
+
+
+
+
+
+
+ Where it fits
+
+
+ Built for local, hybrid, and multi-cluster paths
+
+
+ Use the operator when one cluster is not enough and you want a
+ consistent Kubernetes operating model.
+
+
+
+
+ {bestFitScenarios.map((item) => (
+
+
+
+
+
+
+ {item}
+
+ ))}
+
+
+
+
+ Operator highlights
+
+
+ {operatorHighlights.map((item) => (
+
+ {item}
+
+ ))}
+
+
+ Preview status
+
+
+ The operator is still in preview. Use this page to assess the
+ fit, then follow the quick start or multi-cluster guides.
+
+
+
+
+
+
+
+
+
+
+
+ What the operator adds
+
+
+ A better fit for Kubernetes-based DocumentDB environments
+
+
+ Choose the operator when one cluster is not enough and you want
+ the same operating model across local, hybrid, and multi-cloud
+ environments.
+
+
+
+
+ {operatorBenefits.map((item) => (
+
+
+ {item.title}
+
+ {item.description}
+
+
+ ))}
+
+
+
+
+
+
+
+
+ Setup at a glance
+
+
+ The operator flow in three steps
+
+
+ Use this page to understand the path. Use the docs for commands,
+ topology setup, and current support details.
+
+
+
+
+ {setupSteps.map((item) => (
+
+
+ {item.step}
+
+
+ {item.title}
+
+
+ {item.description}
+
+
+ ))}
+
+
+
+
+
+
+ What to expect before you start
+
+
+ The operator currently targets Kubernetes 1.35+ and depends on
+ cert-manager and CloudNativePG. Cross-cluster topologies also
+ require network connectivity between clusters.
+
+
+
+ Open quick start
+
+
+
+
+
+
+
+
+
+ Next step
+
+
+ Start local, then expand
+
+
+ Use the quick start for a local cluster. Then continue with the
+ hybrid and multi-cloud guides.
+
+
+
+
+
+ );
+}
diff --git a/app/page.tsx b/app/page.tsx
index b49681c..aba0ef9 100644
--- a/app/page.tsx
+++ b/app/page.tsx
@@ -1,6 +1,7 @@
import Image from "next/image";
import Link from "next/link";
import CommandSnippet from "./components/CommandSnippet";
+import { documentdbKubernetesOperatorDocsUrl } from "./services/externalLinks";
import { withBasePath } from "./services/sitePath";
type CapabilityIconName =
@@ -26,7 +27,26 @@ const quickStartSteps = [
},
{
step: "03",
- description: "Continue with the docs or prebuilt packages.",
+ description: "Continue with the docs or Linux packages for the setup you need.",
+ },
+];
+
+const kubernetesOperatorEntryPoints = [
+ {
+ title: "Local clusters",
+ description: "Start on kind or minikube for local Kubernetes development.",
+ },
+ {
+ title: "Hybrid and multi-cloud",
+ description: "Use documented AKS, EKS, GKE, and on-prem deployment guides.",
+ },
+ {
+ title: "Replication and resilience",
+ description: "Extend to cross-cluster replication, HA, backups, and TLS.",
+ },
+ {
+ title: "Day-2 operations",
+ description: "Use the kubectl plugin for status, events, and promotion.",
},
];
@@ -578,6 +598,68 @@ export default function Home() {
+
+
+
+
+ Operator preview
+
+
+ DocumentDB Kubernetes Operator
+
+
+ Run DocumentDB on Kubernetes—from kind and minikube to{" "}
+ hybrid and multi-cloud deployments.
+
+
+
+
+ {kubernetesOperatorEntryPoints.map((item) => (
+
+
+ {item.title}
+
+
+ {item.description}
+
+
+ ))}
+
+
+
+
+
+
+ Preview with local, hybrid, and multi-cluster paths
+
+
+ The operator is still in preview. Start with the overview, then
+ follow the quick start or multi-cluster guides.
+
+
+
+
+
+
+
+
+
diff --git a/app/services/articleService.ts b/app/services/articleService.ts
index 49991c8..1f79758 100644
--- a/app/services/articleService.ts
+++ b/app/services/articleService.ts
@@ -109,7 +109,7 @@ function splitPrebuiltNavigation(section: string, links: Link[]): Link[] {
const isPrebuiltPackages = (link: Link) =>
link.link.includes('prebuilt-packages') || /pre-built packages/i.test(link.title);
- const dockerAndLinuxLinks: Link[] = [
+ const gettingStartedQuickLinks: Link[] = [
{
title: 'Docker',
link: '/docs/getting-started/docker',
@@ -123,11 +123,11 @@ function splitPrebuiltNavigation(section: string, links: Link[]): Link[] {
const gettingStartedIndex = filteredLinks.find((link) => link.link === 'index.md');
if (!gettingStartedIndex) {
- return [...dockerAndLinuxLinks, ...filteredLinks];
+ return [...gettingStartedQuickLinks, ...filteredLinks];
}
const remainingLinks = filteredLinks.filter((link) => link !== gettingStartedIndex);
- return [gettingStartedIndex, ...dockerAndLinuxLinks, ...remainingLinks];
+ return [gettingStartedIndex, ...gettingStartedQuickLinks, ...remainingLinks];
}
function updateGettingStartedIndexContent(content: string): string {
diff --git a/app/services/externalLinks.ts b/app/services/externalLinks.ts
new file mode 100644
index 0000000..eab069c
--- /dev/null
+++ b/app/services/externalLinks.ts
@@ -0,0 +1,5 @@
+export const documentdbKubernetesOperatorDocsUrl =
+ 'https://documentdb.io/documentdb-kubernetes-operator/preview/';
+
+export const documentdbKubernetesOperatorGitHubUrl =
+ 'https://github.com/documentdb/documentdb-kubernetes-operator';
diff --git a/articles/content.yml b/articles/content.yml
index 8514350..c3c5065 100644
--- a/articles/content.yml
+++ b/articles/content.yml
@@ -4,6 +4,8 @@ landing:
links:
- title: Getting Started with DocumentDB
link: /docs/getting-started
+ - title: DocumentDB Kubernetes Operator (Preview)
+ link: /kubernetes-operator
- title: API Reference
link: /docs/reference
- title: Postgres Extension API
@@ -11,4 +13,4 @@ landing:
- title: DocumentDB Local
link: /docs/documentdb-local
- title: Architecture under the hood
- link: /docs/architecture
\ No newline at end of file
+ link: /docs/architecture
From 9c2473740e0fcf79365593074bdf0ddff3425d01 Mon Sep 17 00:00:00 2001
From: Guanzhou Song
Date: Tue, 17 Mar 2026 14:35:11 -0400
Subject: [PATCH 2/3] Remove operator local guides CTA
Remove the "View local install guides" buttons from the DocumentDB Kubernetes Operator landing page so the page stays focused on the operator quick start and repository links.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---
app/kubernetes-operator/page.tsx | 13 -------------
1 file changed, 13 deletions(-)
diff --git a/app/kubernetes-operator/page.tsx b/app/kubernetes-operator/page.tsx
index 263f8ea..a7009bc 100644
--- a/app/kubernetes-operator/page.tsx
+++ b/app/kubernetes-operator/page.tsx
@@ -1,4 +1,3 @@
-import Link from "next/link";
import { getMetadata } from "../services/metadataService";
import {
documentdbKubernetesOperatorDocsUrl,
@@ -124,12 +123,6 @@ export default function KubernetesOperatorPage() {
>
GitHub repository
-
- View local install guides
-
@@ -329,12 +322,6 @@ export default function KubernetesOperatorPage() {
>
GitHub repository
-
- View local install guides
-
From 1b1a4882b217aa8fb42685525cb1f54c3a814ee2 Mon Sep 17 00:00:00 2001
From: Guanzhou Song
Date: Tue, 17 Mar 2026 14:39:40 -0400
Subject: [PATCH 3/3] Refine operator benefit cards
Replace the generic plus icon in the operator benefits section with clearer icons, shorten the card copy, and give the grid more room so the section reads faster.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---
app/kubernetes-operator/page.tsx | 132 ++++++++++++++++++++++++-------
1 file changed, 105 insertions(+), 27 deletions(-)
diff --git a/app/kubernetes-operator/page.tsx b/app/kubernetes-operator/page.tsx
index a7009bc..22d2436 100644
--- a/app/kubernetes-operator/page.tsx
+++ b/app/kubernetes-operator/page.tsx
@@ -4,34 +4,124 @@ import {
documentdbKubernetesOperatorGitHubUrl,
} from "../services/externalLinks";
+type OperatorBenefitIcon = "cluster" | "globe" | "replication" | "shield" | "terminal";
+
const operatorBenefits = [
{
- title: "Local to cloud",
- description:
- "Start on kind or minikube, then move to managed or self-managed Kubernetes with the same operator model.",
+ title: "Local first",
+ description: "Start on kind or minikube, then scale out.",
+ icon: "cluster" as const,
},
{
title: "Hybrid and multi-cloud",
- description:
- "The docs include concrete AKS, EKS, GKE, and on-prem deployment patterns for teams spanning more than one environment.",
+ description: "Keep one operator model across cloud and on-prem clusters.",
+ icon: "globe" as const,
},
{
title: "Cross-cluster replication",
- description:
- "Use documented multi-cluster replication and failover patterns when one cluster is not enough.",
+ description: "Replicate across clusters and promote when needed.",
+ icon: "replication" as const,
},
{
title: "HA, backup, and TLS",
- description:
- "Add automatic failover, backup resources, and TLS to operate DocumentDB as a real service.",
+ description: "Add failover, backups, and secure connectivity.",
+ icon: "shield" as const,
},
{
- title: "Day-2 operations",
- description:
- "Use the kubectl plugin for status, events, and promotion workflows.",
+ title: "Day-2 tooling",
+ description: "Use the kubectl plugin for status and promotion tasks.",
+ icon: "terminal" as const,
},
] as const;
+function OperatorBenefitGlyph({ icon }: { icon: OperatorBenefitIcon }) {
+ switch (icon) {
+ case "cluster":
+ return (
+
+
+
+
+
+
+ );
+ case "globe":
+ return (
+
+
+
+ );
+ case "replication":
+ return (
+
+
+
+ );
+ case "shield":
+ return (
+
+
+
+ );
+ case "terminal":
+ return (
+
+
+
+ );
+ }
+}
+
const setupSteps = [
{
step: "01",
@@ -209,28 +299,16 @@ export default function KubernetesOperatorPage() {
-
+
{operatorBenefits.map((item) => (
- {item.title}
+ {item.title}
{item.description}