diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts
index 9916cea..a675deb 100644
--- a/docs/.vitepress/config.mts
+++ b/docs/.vitepress/config.mts
@@ -88,14 +88,19 @@ export default withMermaid({
{
text: 'Documentation',
items: [
- { text: 'Platform', link: '/platform/' },
+ { text: 'Bare Metal Management', link: '/bare-metal/' },
{ text: 'Compute', link: '/compute/' },
- { text: 'OpenStack', link: '/openstack/' },
{ text: 'Storage', link: '/storage/' },
- { text: 'Networking', link: '/networking/' },
- { text: 'Observability', link: '/observability/' },
- { text: 'Management', link: '/management/' },
- { text: 'API Reference', link: '/api/' },
+ { text: 'Network', link: '/network/' },
+ { text: 'OpenStack', link: '/openstack/' },
+ {
+ text: 'Operations',
+ link: '/overview/',
+ items: [
+ { text: 'Platform', link: '/platform/' },
+ { text: 'Observability', link: '/observability/' },
+ ],
+ },
],
},
{ text: 'Blog', link: '/blog/' },
@@ -121,8 +126,8 @@ export default withMermaid({
...generateSidebar([
{
documentRootPath: '/docs/',
- scanStartPath: 'overview',
- resolvePath: '/overview/',
+ scanStartPath: 'bare-metal',
+ resolvePath: '/bare-metal/',
capitalizeFirst: false,
useTitleFromFrontmatter: true,
useFolderLinkFromIndexFile: true,
@@ -131,8 +136,8 @@ export default withMermaid({
},
{
documentRootPath: '/docs/',
- scanStartPath: 'getting-started',
- resolvePath: '/getting-started/',
+ scanStartPath: 'overview',
+ resolvePath: '/overview/',
capitalizeFirst: false,
useTitleFromFrontmatter: true,
useFolderLinkFromIndexFile: true,
@@ -141,8 +146,8 @@ export default withMermaid({
},
{
documentRootPath: '/docs/',
- scanStartPath: 'platform',
- resolvePath: '/platform/',
+ scanStartPath: 'getting-started',
+ resolvePath: '/getting-started/',
capitalizeFirst: false,
useTitleFromFrontmatter: true,
useFolderLinkFromIndexFile: true,
@@ -171,18 +176,8 @@ export default withMermaid({
},
{
documentRootPath: '/docs/',
- scanStartPath: 'networking',
- resolvePath: '/networking/',
- capitalizeFirst: false,
- useTitleFromFrontmatter: true,
- useFolderLinkFromIndexFile: true,
- useFolderTitleFromIndexFile: true,
- sortMenusByFrontmatterOrder: true,
- },
- {
- documentRootPath: '/docs/',
- scanStartPath: 'management',
- resolvePath: '/management/',
+ scanStartPath: 'network',
+ resolvePath: '/network/',
capitalizeFirst: false,
useTitleFromFrontmatter: true,
useFolderLinkFromIndexFile: true,
diff --git a/docs/api/index.md b/docs/api/index.md
deleted file mode 100644
index c13e185..0000000
--- a/docs/api/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-title: API Reference
----
-
-# API Reference
-
-The CobaltCore API reference provides detailed information about the custom resources and their specifications used within the CobaltCore environment. This documentation is intended for developers and operators who need to interact with or extend the functionality of CobaltCore.
-
-## Packages
-- [kvm.cloud.sap/v1/hypervisor](kvm.cloud.sap/v1/hypervisor) Hypervisor CRD
-- [kvm.cloud.sap/v1/eviction](kvm.cloud.sap/v1/eviction) Eviction CRD
-- [kvm.cloud.sap/v1alpha1/migration](kvm.cloud.sap/v1alpha1/migration) Migration CRD
\ No newline at end of file
diff --git a/docs/api/kvm.cloud.sap/v1/eviction.md b/docs/api/kvm.cloud.sap/v1/eviction.md
deleted file mode 100644
index 91d07cf..0000000
--- a/docs/api/kvm.cloud.sap/v1/eviction.md
+++ /dev/null
@@ -1,235 +0,0 @@
----
-title: Eviction
-weight: 1
-description: Eviction CRD
----
-
-Packages:
-
-- [kvm.cloud.sap/v1](#kvmcloudsapv1)
-
-# kvm.cloud.sap/v1
-
-Resource Types:
-
-- [Eviction](#eviction)
-
-
-
-
-## Eviction
-[↩ Parent](#kvmcloudsapv1 )
-
-
-
-
-
-
-Eviction is the Schema for the evictions API
-
-
-
-
- | Name |
- Type |
- Description |
- Required |
-
-
-
- | apiVersion |
- string |
- kvm.cloud.sap/v1 |
- true |
-
-
- | kind |
- string |
- Eviction |
- true |
-
-
- | metadata |
- object |
- Refer to the Kubernetes API documentation for the fields of the `metadata` field. |
- true |
-
- | spec |
- object |
-
- EvictionSpec defines the desired state of Eviction
- |
- false |
-
- | status |
- object |
-
- EvictionStatus defines the observed state of Eviction
- |
- false |
-
-
-
-
-### Eviction.spec
-[↩ Parent](#eviction)
-
-
-
-EvictionSpec defines the desired state of Eviction
-
-
-
-
- | Name |
- Type |
- Description |
- Required |
-
-
-
- | hypervisor |
- string |
-
- Name of hypervisor to evict
-
- Validations:self == oldSelf: Value is immutable
- |
- true |
-
- | reason |
- string |
-
- Reason for eviction, always required
- |
- true |
-
-
-
-
-### Eviction.status
-[↩ Parent](#eviction)
-
-
-
-EvictionStatus defines the observed state of Eviction
-
-
-
-
- | Name |
- Type |
- Description |
- Required |
-
-
-
- | conditions |
- []object |
-
- Conditions is an array of current conditions
- |
- false |
-
- | hypervisorServiceId |
- string |
-
-
- |
- false |
-
- | outstandingInstances |
- []string |
-
-
- |
- false |
-
- | outstandingRamMb |
- integer |
-
-
-
- Format: int64
- Default: 0
- |
- false |
-
-
-
-
-### Eviction.status.conditions[index]
-[↩ Parent](#evictionstatus)
-
-
-
-Condition contains details for one aspect of the current state of this API Resource.
-
-
-
-
- | Name |
- Type |
- Description |
- Required |
-
-
-
- | lastTransitionTime |
- string |
-
- lastTransitionTime is the last time the condition transitioned from one status to another.
-This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
-
- Format: date-time
- |
- true |
-
- | message |
- string |
-
- message is a human readable message indicating details about the transition.
-This may be an empty string.
- |
- true |
-
- | reason |
- string |
-
- reason contains a programmatic identifier indicating the reason for the condition's last transition.
-Producers of specific condition types may define expected values and meanings for this field,
-and whether the values are considered a guaranteed API.
-The value should be a CamelCase string.
-This field may not be empty.
- |
- true |
-
- | status |
- enum |
-
- status of the condition, one of True, False, Unknown.
-
- Enum: True, False, Unknown
- |
- true |
-
- | type |
- string |
-
- type of condition in CamelCase or in foo.example.com/CamelCase.
- |
- true |
-
- | observedGeneration |
- integer |
-
- observedGeneration represents the .metadata.generation that the condition was set based upon.
-For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
-with respect to the current state of the instance.
-
- Format: int64
- Minimum: 0
- |
- false |
-
-
diff --git a/docs/api/kvm.cloud.sap/v1/hypervisor.md b/docs/api/kvm.cloud.sap/v1/hypervisor.md
deleted file mode 100644
index 4de78d2..0000000
--- a/docs/api/kvm.cloud.sap/v1/hypervisor.md
+++ /dev/null
@@ -1,572 +0,0 @@
----
-title: Hypervisor
-weight: 1
-description: Hypervisor CRD
----
-
-Packages:
-
-- [kvm.cloud.sap/v1](#kvmcloudsapv1)
-
-# kvm.cloud.sap/v1
-
-Resource Types:
-
-- [Hypervisor](#hypervisor)
-
-
-
-
-## Hypervisor
-[↩ Parent](#kvmcloudsapv1 )
-
-
-
-
-
-
-Hypervisor is the Schema for the hypervisors API
-
-
-
-
- | Name |
- Type |
- Description |
- Required |
-
-
-
- | apiVersion |
- string |
- kvm.cloud.sap/v1 |
- true |
-
-
- | kind |
- string |
- Hypervisor |
- true |
-
-
- | metadata |
- object |
- Refer to the Kubernetes API documentation for the fields of the `metadata` field. |
- true |
-
- | spec |
- object |
-
- HypervisorSpec defines the desired state of Hypervisor
- |
- false |
-
- | status |
- object |
-
- HypervisorStatus defines the observed state of Hypervisor
- |
- false |
-
-
-
-
-### Hypervisor.spec
-[↩ Parent](#hypervisor)
-
-
-
-HypervisorSpec defines the desired state of Hypervisor
-
-
-
-
- | Name |
- Type |
- Description |
- Required |
-
-
-
- | createCertManagerCertificate |
- boolean |
-
- Require to issue a certificate from cert-manager for the hypervisor, to be used for
-secure communication with the libvirt API.
-
- Default: false
- |
- true |
-
- | customTraits |
- []string |
-
- CustomTraits are used to apply custom traits to the hypervisor.
-
- Default: []
- |
- true |
-
- | evacuateOnReboot |
- boolean |
-
- EvacuateOnReboot request an evacuation of all instances before reboot.
-
- Default: true
- |
- true |
-
- | highAvailability |
- boolean |
-
- HighAvailability is used to enable the high availability handling of the hypervisor.
-
- Default: true
- |
- true |
-
- | installCertificate |
- boolean |
-
- InstallCertificate is used to enable the installations of the certificates via kvm-node-agent.
-
- Default: true
- |
- true |
-
- | lifecycleEnabled |
- boolean |
-
- LifecycleEnabled enables the lifecycle management of the hypervisor via hypervisor-operator.
-
- Default: true
- |
- true |
-
- | reboot |
- boolean |
-
- Reboot request an reboot after successful installation of an upgrade.
-
- Default: false
- |
- true |
-
- | skipTests |
- boolean |
-
- SkipTests skips the tests during the onboarding process.
-
- Default: false
- |
- true |
-
- | version |
- string |
-
- OperatingSystemVersion represents the desired operating system version.
- |
- false |
-
-
-
-
-### Hypervisor.status
-[↩ Parent](#hypervisor)
-
-
-
-HypervisorStatus defines the observed state of Hypervisor
-
-
-
-
- | Name |
- Type |
- Description |
- Required |
-
-
-
- | numInstances |
- integer |
-
- Represent the num of instances
-
- Default: 0
- |
- true |
-
- | capabilities |
- object |
-
- The capabilities of the hypervisors as reported by libvirt.
- |
- false |
-
- | conditions |
- []object |
-
- Represents the Hypervisor node conditions.
- |
- false |
-
- | hypervisorId |
- string |
-
- HypervisorID is the unique identifier of the hypervisor in OpenStack.
- |
- false |
-
- | instances |
- []object |
-
- Represents the Hypervisor hosted Virtual Machines
- |
- false |
-
- | libVirtVersion |
- string |
-
- Represents the LibVirt version.
-
- Default: unknown
- |
- false |
-
- | operatingSystem |
- object |
-
- Represents the Operating System status.
- |
- false |
-
- | serviceId |
- string |
-
- ServiceID is the unique identifier of the compute service in OpenStack.
- |
- false |
-
- | specHash |
- string |
-
-
- |
- false |
-
- | updateStatus |
- object |
-
- Represents the Hypervisor update status.
- |
- false |
-
-
-
-
-### Hypervisor.status.capabilities
-[↩ Parent](#hypervisorstatus)
-
-
-
-The capabilities of the hypervisors as reported by libvirt.
-
-
-
-
- | Name |
- Type |
- Description |
- Required |
-
-
-
- | cpuArch |
- string |
-
- The hosts CPU architecture (not the guests).
-
- Default: unknown
- |
- false |
-
- | cpus |
- int or string |
-
- Total host cpus available as a sum of cpus over all numa cells.
- |
- false |
-
- | memory |
- int or string |
-
- Total host memory available as a sum of memory over all numa cells.
- |
- false |
-
-
-
-
-### Hypervisor.status.conditions[index]
-[↩ Parent](#hypervisorstatus)
-
-
-
-Condition contains details for one aspect of the current state of this API Resource.
-
-
-
-
- | Name |
- Type |
- Description |
- Required |
-
-
-
- | lastTransitionTime |
- string |
-
- lastTransitionTime is the last time the condition transitioned from one status to another.
-This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
-
- Format: date-time
- |
- true |
-
- | message |
- string |
-
- message is a human readable message indicating details about the transition.
-This may be an empty string.
- |
- true |
-
- | reason |
- string |
-
- reason contains a programmatic identifier indicating the reason for the condition's last transition.
-Producers of specific condition types may define expected values and meanings for this field,
-and whether the values are considered a guaranteed API.
-The value should be a CamelCase string.
-This field may not be empty.
- |
- true |
-
- | status |
- enum |
-
- status of the condition, one of True, False, Unknown.
-
- Enum: True, False, Unknown
- |
- true |
-
- | type |
- string |
-
- type of condition in CamelCase or in foo.example.com/CamelCase.
- |
- true |
-
- | observedGeneration |
- integer |
-
- observedGeneration represents the .metadata.generation that the condition was set based upon.
-For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
-with respect to the current state of the instance.
-
- Format: int64
- Minimum: 0
- |
- false |
-
-
-
-
-### Hypervisor.status.instances[index]
-[↩ Parent](#hypervisorstatus)
-
-
-
-
-
-
-
-
- | Name |
- Type |
- Description |
- Required |
-
-
-
- | active |
- boolean |
-
- Represents the instance state.
- |
- true |
-
- | id |
- string |
-
- Represents the instance ID (uuidv4).
- |
- true |
-
- | name |
- string |
-
- Represents the instance name.
- |
- true |
-
-
-
-
-### Hypervisor.status.operatingSystem
-[↩ Parent](#hypervisorstatus)
-
-
-
-Represents the Operating System status.
-
-
-
-
- | Name |
- Type |
- Description |
- Required |
-
-
-
- | firmwareDate |
- string |
-
- FirmwareDate
-
- Format: date-time
- |
- false |
-
- | firmwareVendor |
- string |
-
- FirmwareVendor
- |
- false |
-
- | firmwareVersion |
- string |
-
- FirmwareVersion
- |
- false |
-
- | hardwareModel |
- string |
-
- HardwareModel
- |
- false |
-
- | hardwareSerial |
- string |
-
- HardwareSerial
- |
- false |
-
- | hardwareVendor |
- string |
-
- HardwareVendor
- |
- false |
-
- | kernelName |
- string |
-
- KernelName
- |
- false |
-
- | kernelRelease |
- string |
-
- KernelRelease
- |
- false |
-
- | kernelVersion |
- string |
-
- KernelVersion
- |
- false |
-
- | prettyVersion |
- string |
-
- PrettyVersion
- |
- false |
-
- | version |
- string |
-
- Represents the Operating System version.
- |
- false |
-
-
-
-
-### Hypervisor.status.updateStatus
-[↩ Parent](#hypervisorstatus)
-
-
-
-Represents the Hypervisor update status.
-
-
-
-
- | Name |
- Type |
- Description |
- Required |
-
-
-
- | inProgress |
- boolean |
-
- Represents a running Operating System update.
-
- Default: false
- |
- true |
-
- | retry |
- integer |
-
- Represents the number of retries.
-
- Default: 3
- |
- true |
-
- | installed |
- string |
-
- Represents the Operating System installed update version.
-
- Default: unknown
- |
- false |
-
-
diff --git a/docs/api/kvm.cloud.sap/v1alpha1/migration.md b/docs/api/kvm.cloud.sap/v1alpha1/migration.md
deleted file mode 100644
index 8b47806..0000000
--- a/docs/api/kvm.cloud.sap/v1alpha1/migration.md
+++ /dev/null
@@ -1,304 +0,0 @@
----
-title: Migration
-weight: 1
-description: Migration CRD
----
-
-Packages:
-
-- [kvm.cloud.sap/v1alpha1](#kvmcloudsapv1alpha1)
-
-# kvm.cloud.sap/v1alpha1
-
-Resource Types:
-
-- [Migration](#migration)
-
-
-
-
-## Migration
-[↩ Parent](#kvmcloudsapv1alpha1 )
-
-
-
-
-
-
-Migration is the Schema for the migrations API.
-
-
-
-
- | Name |
- Type |
- Description |
- Required |
-
-
-
- | apiVersion |
- string |
- kvm.cloud.sap/v1alpha1 |
- true |
-
-
- | kind |
- string |
- Migration |
- true |
-
-
- | metadata |
- object |
- Refer to the Kubernetes API documentation for the fields of the `metadata` field. |
- true |
-
- | spec |
- object |
-
- MigrationSpec defines the desired state of Migration.
- |
- false |
-
- | status |
- object |
-
- MigrationStatus defines the observed state of Migration.
- |
- false |
-
-
-
-
-### Migration.status
-[↩ Parent](#migration)
-
-
-
-MigrationStatus defines the observed state of Migration.
-
-
-
-
- | Name |
- Type |
- Description |
- Required |
-
-
-
- | autoConvergeThrottle |
- string |
-
-
- |
- false |
-
- | dataProcessed |
- string |
-
-
- |
- false |
-
- | dataRemaining |
- string |
-
-
- |
- false |
-
- | dataTotal |
- string |
-
-
- |
- false |
-
- | destination |
- string |
-
-
- |
- false |
-
- | diskBps |
- string |
-
-
- |
- false |
-
- | diskProcessed |
- string |
-
-
- |
- false |
-
- | diskRemaining |
- string |
-
-
- |
- false |
-
- | diskTotal |
- string |
-
-
- |
- false |
-
- | downtime |
- string |
-
-
- |
- false |
-
- | errMsg |
- string |
-
-
- |
- false |
-
- | memBps |
- string |
-
-
- |
- false |
-
- | memConstant |
- integer |
-
-
-
- Format: int64
- |
- false |
-
- | memDirtyRate |
- string |
-
-
- |
- false |
-
- | memIteration |
- integer |
-
-
-
- Format: int64
- |
- false |
-
- | memNormal |
- integer |
-
-
-
- Format: int64
- |
- false |
-
- | memNormalBytes |
- string |
-
-
- |
- false |
-
- | memPageSize |
- string |
-
-
- |
- false |
-
- | memPostcopyRequests |
- integer |
-
-
-
- Format: int64
- |
- false |
-
- | memProcessed |
- string |
-
-
- |
- false |
-
- | memRemaining |
- string |
-
-
- |
- false |
-
- | memTotal |
- string |
-
-
- |
- false |
-
- | operation |
- string |
-
-
- |
- false |
-
- | origin |
- string |
-
-
- |
- false |
-
- | setupTime |
- string |
-
-
- |
- false |
-
- | started |
- string |
-
-
-
- Format: date-time
- |
- false |
-
- | timeElapsed |
- string |
-
-
- |
- false |
-
- | timeRemaining |
- string |
-
-
- |
- false |
-
- | type |
- string |
-
-
- |
- false |
-
-
diff --git a/docs/bare-metal/index.md b/docs/bare-metal/index.md
new file mode 100644
index 0000000..b939555
--- /dev/null
+++ b/docs/bare-metal/index.md
@@ -0,0 +1,6 @@
+---
+title: Bare Metal Management
+order: 1
+---
+
+# Bare Metal Management
diff --git a/docs/compute/gpu.md b/docs/compute/gpu.md
index a26b03f..331c888 100644
--- a/docs/compute/gpu.md
+++ b/docs/compute/gpu.md
@@ -36,4 +36,4 @@ SR-IOV (Single Root I/O Virtualization) allows a single physical NIC to present
## See also
- [Compute - Hypervisor](/compute/hypervisor)
-- [Networking - OVN](/networking/ovn)
+- [Networking - OVN](/network/ovn)
diff --git a/docs/compute/ha-service.md b/docs/compute/ha-service.md
index 735f4fc..d2cdc54 100644
--- a/docs/compute/ha-service.md
+++ b/docs/compute/ha-service.md
@@ -69,5 +69,4 @@ graph LR;
## See also
-- [API Reference - Eviction](/api/kvm.cloud.sap/v1/eviction)
- [Compute - Hypervisor](/compute/hypervisor)
diff --git a/docs/compute/hypervisor.md b/docs/compute/hypervisor.md
index 46f8372..5e89b36 100644
--- a/docs/compute/hypervisor.md
+++ b/docs/compute/hypervisor.md
@@ -14,7 +14,7 @@ The hypervisor is the bare metal node that runs virtual machines. CobaltCore man
## Component stack
-Each hypervisor node runs the following components on top of [GardenLinux](/platform/gardenlinux):
+Each hypervisor node runs the following components on top of GardenLinux:
```mermaid
block-beta
@@ -101,7 +101,7 @@ node001-bb234 node001-bb234 Garden Linux 1933.0 11 PowerEdge R860
node006-bb123 node006-bb123 Garden Linux 1933.0 0 ProLiant DL560 Gen11 6.12.38-amd64 27h
```
-See the [API Reference](/api/kvm.cloud.sap/v1/hypervisor) for the full spec.
+See the full spec for details.
### `migrations.kvm.cloud.sap`
@@ -114,7 +114,7 @@ NAME ORIGIN DESTINATION TYPE
1552e60a-bdba-4850-84da-07dd635bce2c node006-bb086 node003-bb087 completed migration_out 22d 35.078s 64.0 GiB
```
-See the [API Reference](/api/kvm.cloud.sap/v1alpha1/migration) for the full spec.
+See the full spec for details.
## KVM HA Agent
diff --git a/docs/getting-started/full-deployment.md b/docs/getting-started/full-deployment.md
index 4e5542c..ef23cdf 100644
--- a/docs/getting-started/full-deployment.md
+++ b/docs/getting-started/full-deployment.md
@@ -33,9 +33,9 @@ Follow the [Minimal Environment](/getting-started/minimal) guide first to unders
## Prerequisites
-- IronCore configured and managing your bare metal nodes - see [Platform - IronCore](/platform/ironcore)
-- Gardener cluster provisioned - see [Platform - Gardener](/platform/gardener)
-- GardenLinux deployed on hypervisor nodes - see [Platform - GardenLinux](/platform/gardenlinux)
+- IronCore configured and managing your bare metal nodes
+- Gardener cluster provisioned
+- GardenLinux deployed on hypervisor nodes
- At least 3 control plane nodes for HA Kubernetes
- At least 2 data centers (or failure domains) for stretched Ceph
@@ -65,7 +65,7 @@ Follow the [Minimal Environment](/getting-started/minimal) guide first to unders
### Networking layer
-- [ ] OVN control plane deployed - see [Networking - OVN](/networking/ovn)
+- [ ] OVN control plane deployed - see [Networking - OVN](/network/ovn)
- [ ] OVN Controller daemonset running on all hypervisor nodes
- [ ] Neutron API connected to OVN Northbound DB
@@ -87,9 +87,9 @@ Follow the [Minimal Environment](/getting-started/minimal) guide first to unders
### Management layer
-- [ ] Greenhouse connected to the cluster - see [Management - Greenhouse](/management/greenhouse)
-- [ ] Aurora management frontend accessible - see [Management - Aurora](/management/aurora)
-- [ ] Cortex placement configured and integrated with Nova - see [Management - Cortex](/management/cortex)
+- [ ] Greenhouse connected to the cluster
+- [ ] Aurora management frontend accessible
+- [ ] Cortex placement configured and integrated with Nova
## Operational readiness
diff --git a/docs/getting-started/minimal.md b/docs/getting-started/minimal.md
index 27b098a..c392420 100644
--- a/docs/getting-started/minimal.md
+++ b/docs/getting-started/minimal.md
@@ -42,7 +42,6 @@ CobaltCore uses [Gardener](https://gardener.cloud) for cluster lifecycle managem
The control plane must be reachable from the hypervisor node.
-See [Platform - Bootstrap](/platform/bootstrap) for details on how CobaltCore clusters are set up in production.
## Step 2: Install the Hypervisor Operator
diff --git a/docs/network/index.md b/docs/network/index.md
new file mode 100644
index 0000000..9e9a6c1
--- /dev/null
+++ b/docs/network/index.md
@@ -0,0 +1,20 @@
+---
+title: Networking
+order: 1
+---
+
+# Networking
+
+CobaltCore uses OVN (Open Virtual Network) as the virtual networking layer for VMs. OVN is managed by Neutron's OVN backend and provides virtual networks, routers, and security groups at scale without per-node agent complexity.
+
+## Components
+
+| Component | Role |
+|---|---|
+| [OVN](/network/ovn) | Virtual networking for VMs - provides L2/L3 switching and routing |
+
+## How it fits in the stack
+
+Neutron (in the OpenStack layer) owns the logical network model - networks, subnets, ports, routers, security groups. OVN translates those logical resources into forwarding rules on each hypervisor node via the OVN Controller daemonset. VMs get virtual interfaces managed by OVS.
+
+See [OpenStack - Neutron](/openstack/neutron) for the Neutron API layer, and [Networking - OVN](/network/ovn) for the OVN data plane details.
diff --git a/docs/network/ovn.md b/docs/network/ovn.md
new file mode 100644
index 0000000..5909ebb
--- /dev/null
+++ b/docs/network/ovn.md
@@ -0,0 +1,66 @@
+---
+title: OVN
+order: 10
+outline: deep
+---
+
+# OVN (Open Virtual Network)
+
+OVN is the virtual networking backend for CobaltCore. It replaces the traditional per-node Neutron Open vSwitch agents with a centralized control plane and distributed forwarding, giving consistent network state across all hypervisor nodes.
+
+## Architecture
+
+```mermaid
+graph TB
+ subgraph "Control Plane"
+ NeutronAPI["Neutron API"]
+ OVNNB["OVN Northbound DB\n(logical state)"]
+ OVNNorthD["OVN-NorthD\n(translation)"]
+ OVNSB["OVN Southbound DB\n(physical state / flows)"]
+ end
+ subgraph "Hypervisor Node A"
+ OVNCtrlA["OVN Controller"]
+ OVSA["Open vSwitch (OVS)"]
+ VMA["VM interfaces"]
+ end
+ subgraph "Hypervisor Node B"
+ OVNCtrlB["OVN Controller"]
+ OVSB["Open vSwitch (OVS)"]
+ VMB["VM interfaces"]
+ end
+
+ NeutronAPI -->|"writes logical state"| OVNNB
+ OVNNorthD -->|"reads"| OVNNB
+ OVNNorthD -->|"writes flows"| OVNSB
+ OVNSB -->|"distributes"| OVNCtrlA
+ OVNSB -->|"distributes"| OVNCtrlB
+ OVNCtrlA -->|"programs"| OVSA
+ OVNCtrlB -->|"programs"| OVSB
+ OVSA -->|"manages"| VMA
+ OVSB -->|"manages"| VMB
+```
+
+## Data flow
+
+| Component | Role |
+|---|---|
+| **Neutron API** | Writes logical network resources (networks, ports, routers, security groups) to OVN Northbound DB via the OVN ML2 driver |
+| **OVN Northbound DB** | Stores the logical network model - what the network should look like |
+| **OVN-NorthD** | Translates the logical model into forwarding rules and populates OVN Southbound DB |
+| **OVN Southbound DB** | Stores the physical network state - which hypervisor hosts which port, and what flows to install |
+| **OVN Controller** | Runs as a daemonset on each hypervisor; reads its local flows from OVN-SB and programs OVS |
+| **OVS** | Kernel-level datapath that forwards VM traffic according to the flows installed by OVN Controller |
+
+## Why OVN over Neutron's legacy agents?
+
+With traditional OVS agents, each hypervisor node runs its own Neutron agent that independently manages network state. At scale this creates coordination complexity, slow convergence, and debugging difficulty. OVN centralizes the control plane:
+
+- Network state is authoritative in OVN-NB - no drift between nodes
+- Adding a hypervisor node requires no per-node Neutron agent configuration
+- Troubleshooting uses OVN-trace to follow a packet's path through logical flows
+
+## See also
+
+- [OpenStack - Neutron](/openstack/neutron)
+- [OVN architecture overview](https://www.ovn.org/en/architecture/)
+- [Red Hat OVN guide](https://docs.redhat.com/en/documentation/red_hat_openstack_platform/13/html/networking_with_open_virtual_network/open_virtual_network_ovn)
diff --git a/docs/openstack/index.md b/docs/openstack/index.md
index e9a9604..96c7cf8 100644
--- a/docs/openstack/index.md
+++ b/docs/openstack/index.md
@@ -40,7 +40,7 @@ Compute Clusters
## CobaltCore-specific choices
-**Why OVN for networking?** Neutron's OVN backend replaces the per-node Open vSwitch agents with a centralized control plane (OVN-NB/SB databases) and distributed forwarding. This reduces per-node complexity and scales better at large node counts. See [Networking - OVN](/networking/ovn).
+**Why OVN for networking?** Neutron's OVN backend replaces the per-node Open vSwitch agents with a centralized control plane (OVN-NB/SB databases) and distributed forwarding. This reduces per-node complexity and scales better at large node counts. See [Networking - OVN](/network/ovn).
**Why NetApp/NFS for Cinder?** In CobaltCore's reference configuration, Cinder uses a NetApp filer for block volumes delivered as NFS mounts. This enables thin provisioning and hardware-level snapshots. Ceph RBD is an alternative backend for environments without a NetApp filer.
diff --git a/docs/openstack/neutron.md b/docs/openstack/neutron.md
index d852bbd..4a89080 100644
--- a/docs/openstack/neutron.md
+++ b/docs/openstack/neutron.md
@@ -59,10 +59,10 @@ OVN replaces Neutron's traditional agent-per-node model:
| **OVN Controller** | Runs on each compute node; translates SB flows into OVS rules |
| **OVS** | Open vSwitch - the kernel datapath that forwards VM traffic |
-See [Networking - OVN](/networking/ovn) for the full OVN architecture and CobaltCore-specific configuration.
+See [Networking - OVN](/network/ovn) for the full OVN architecture and CobaltCore-specific configuration.
## See also
-- [Networking - OVN](/networking/ovn)
+- [Networking - OVN](/network/ovn)
- [OpenStack Neutron docs](https://docs.openstack.org/neutron/latest/)
- [OVN architecture overview](https://www.ovn.org/en/architecture/)
diff --git a/docs/openstack/nova.md b/docs/openstack/nova.md
index 6ff96c7..eeb0cbc 100644
--- a/docs/openstack/nova.md
+++ b/docs/openstack/nova.md
@@ -56,7 +56,7 @@ Nova Compute Agents run as Kubernetes daemonsets on hypervisor nodes managed by
The [HA Service](/compute/ha-service) calls Nova's host evacuation API when a hypervisor fails.
-[Cortex](/management/cortex) integrates with Nova's placement API to make intelligent scheduling decisions based on cluster state.
+Cortex integrates with Nova's placement API to make intelligent scheduling decisions based on cluster state.
## See also
diff --git a/docs/overview/architecture.md b/docs/overview/architecture.md
index c1ca33b..52378f0 100644
--- a/docs/overview/architecture.md
+++ b/docs/overview/architecture.md
@@ -28,7 +28,7 @@ CobaltCore is organized as a layered stack. Each layer has a clear responsibilit
## Platform
-The foundation. Kubernetes provides the control plane. [IronCore](/platform/ironcore) handles bare metal discovery and lifecycle. [Gardener](/platform/gardener) manages cluster lifecycle (creating, upgrading, and deleting Kubernetes clusters). [GardenLinux](/platform/gardenlinux) is the hardened Linux OS that runs on hypervisor nodes.
+The foundation. Kubernetes provides the control plane. IronCore handles bare metal discovery and lifecycle. Gardener manages cluster lifecycle (creating, upgrading, and deleting Kubernetes clusters). GardenLinux is the hardened Linux OS that runs on hypervisor nodes.
Everything above this layer runs as Kubernetes workloads.
@@ -38,7 +38,7 @@ The infrastructure data plane - the raw execution environment for virtual machin
- **[Compute](/compute/)** - KVM hypervisors managed by a Kubernetes operator. VMs run on bare metal nodes via libvirt. The HA service monitors hypervisor health and triggers evacuation when nodes fail.
- **[Storage](/storage/)** - Ceph provides block (RBD), object (RGW), and file (CephFS) storage. Rook operates Ceph as a Kubernetes-native workload. Arbiter enables stretched clusters across two data centers. Chorus handles S3 object replication.
-- **[Networking](/networking/)** - OVN provides virtual networking for VMs. Neutron's OVN integration manages the control plane.
+- **[Networking](/network/)** - OVN provides virtual networking for VMs. Neutron's OVN integration manages the control plane.
## Observability
@@ -52,7 +52,7 @@ The cloud services layer. OpenStack APIs (Nova, Neutron, Cinder, Keystone, Glanc
## Management
-The operations and control plane UI. [Aurora](/management/aurora) is the cloud management frontend. [Greenhouse](/management/greenhouse) provides the monitoring and management umbrella. [Cortex](/management/cortex) handles intelligent placement and scheduling of workloads across the cluster.
+The operations and control plane UI. Aurora is the cloud management frontend. Greenhouse provides the monitoring and management umbrella. Cortex handles intelligent placement and scheduling of workloads across the cluster.
## Data flow: provisioning a VM
diff --git a/docs/platform/index.md b/docs/platform/index.md
index 4f12620..90b84d6 100644
--- a/docs/platform/index.md
+++ b/docs/platform/index.md
@@ -4,18 +4,3 @@ order: 1
---
# Platform
-
-The platform layer is the foundation that everything else in CobaltCore runs on. It covers bare metal lifecycle, cluster orchestration, and the operating system on hypervisor nodes.
-
-## Components
-
-| Component | Role |
-|---|---|
-| [IronCore](/platform/ironcore) | Bare metal discovery, provisioning, and lifecycle management |
-| [Gardener](/platform/gardener) | Kubernetes cluster lifecycle (create, upgrade, delete) |
-| [GardenLinux](/platform/gardenlinux) | Hardened Linux OS for hypervisor nodes |
-| [Bootstrap](/platform/bootstrap) | How a new CobaltCore cluster is stood up end-to-end |
-
-## How the layers relate
-
-IronCore discovers physical machines and makes them available as managed resources. Gardener uses those resources to provision Kubernetes clusters. GardenLinux is the OS deployed on the hypervisor nodes that Gardener provisions. Everything above - Kubernetes operators, OpenStack services, Ceph - runs on top of this foundation.