Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions docs/.vuepress/breadcrumb-replacements.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
{
"cloud": "Kurrent Cloud",
"server": "KurrentDB",
"kubernetes-operator": "Kubernetes Operator"
"server": "KurrentDB"
}

5 changes: 4 additions & 1 deletion docs/.vuepress/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,10 @@ export default defineClientConfig({
}
}, 0);
});
addDynamicRoute("/server/kubernetes-operator", to => `/server/kubernetes-operator/getting-started/`);
const operatorLatest = __VERSIONS__.all.filter(x => x.id == 'kubernetes-operator')[0].versions[0].version;
addDynamicRoute("/server/kubernetes-operator", to => `/server/kubernetes-operator/${operatorLatest}/getting-started/`);
addDynamicRoute("/server/kubernetes-operator/:version", to => `/server/kubernetes-operator/${to.params.version}/getting-started/`);

addDynamicRoute("/server/:version", to => `/server/${to.params.version}/quick-start/`);
addDynamicRoute('/client/:lang',
to => {
Expand Down
17 changes: 10 additions & 7 deletions docs/.vuepress/components/breadCrumb.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,20 +71,23 @@ export default defineComponent({
if (notFound || meta.breadcrumbExclude) return null;

// Get the original title from metadata or name
let title = meta.shortTitle || meta.title || name;
let title = meta.shortTitle || meta.title;
if (!title) {
// Generate a title using the name
title = name;
// Remove dashes, remove file extensions, and capitalize first letter
title = title.replace(/-/g, " ");
title = title.replace(/\..*$/, "");
title = title.trim();
title = title.charAt(0).toUpperCase() + title.slice(1);
}

// Check if the title should be replaced
const replacement = breadcrumbReplacements[title.toLowerCase()];
if (replacement) {
title = replacement;
}

// Remove dashes, remove file extensions, and capitalize first letter
title = title.replace(/-/g, " ");
title = title.replace(/\..*$/, "");
title = title.trim();
title = title.charAt(0).toUpperCase() + title.slice(1);

return {
title,
icon: meta.icon,
Expand Down
1 change: 0 additions & 1 deletion docs/.vuepress/configs/sidebar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,6 @@ export const sidebarEn: EsSidebarOptions = {
],
"/clients/grpc/": "structure",
"/cloud/": "structure",
"/server/kubernetes-operator/": "structure",
...ver.getSidebars(),
"/clients/tcp/dotnet/21.2/": "structure",
};
8 changes: 4 additions & 4 deletions docs/server/kubernetes-operator/README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
title: KurrentDB Kubernetes Operator
order: 1
---

# KurrentDB Kubernetes Operator
# This directory exists to collect versions of the kubernetes operator docs,
# but it should not appear as an extra breadcrumb layer.
breadcrumbExclude: true
---
5 changes: 5 additions & 0 deletions docs/server/kubernetes-operator/v1.0.0/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
# title is for breadcrumb and sidebar nav
title: Kubernetes Operator v1.0.0
order: 1
---
5 changes: 5 additions & 0 deletions docs/server/kubernetes-operator/v1.1.0/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
# title is for breadcrumb and sidebar nav
title: Kubernetes Operator v1.1.0
order: 1
---
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
---
order: 1
dir:
text: "Getting started"
link: true
order: 1
---

<CloudBanner />

---
Welcome to the **KurrentDB Kubernetes Operator** guide! For the sake of brevity, further references will use the shorter term of Operator.

This guide aims to:
* Detail key features
* Provide comprehensive instructions for installing and utilizing the Operator

:::important
The Operator is an Enterprise only feature, please [contact us](https://www.kurrent.io/contact) for more information.
:::

## KurrentDB and Kubernetes: The Perfect Match

Kubernetes is the modern Enterprise standard for deploying containerized applications at scale. The Operator has been purpose built to streamline the deployment and management of KurrentDB.

## Features

* Deployment of single-node and multi-node database clusters
* Backup and restore
* Rolling upgrades and configuration changes

## Supported KurrentDB Versions

The Operator supports running the following major versions of KurrentDB:
- v23
- v24
- v25

## Supported Hardware Architectures

The Operator is packaged for the following hardware architectures:
- x86_64
- arm64

## Technical Support

If you have specific questions please [contact us](https://www.kurrent.io/contact).

## First Steps

Head over to the [installation](installation.md) section to get rolling!
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
---
title: Installation
order: 2
---

This section covers the various aspects of installing the Operator.

::: important
The Operator is an Enterprise only feature, please [contact us](https://www.kurrent.io/contact) for more information.
:::

## Prerequisites

::: tip
To get the best out of this guide, a basic understanding of [Kubernetes concepts](https://kubernetes.io/docs/concepts/) is essential.
:::

Before installing and executing the Operator, the following requirements should be met:

* Access to a Kubernetes cluster with a minimum version of `v1.23.1+`.
* Sufficient permissions to deploy the Operator and Custom Resource Definitions (CRDs).
* The following CLI tools are installed and configured to interact with your Kubernetes cluster. This means the tool must be accessible from your shell's `$PATH`, and your `$KUBECONFIG` environment variable must point to the correct Kubernetes configuration file:
* [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl)
* [k9s](https://k9scli.io/topics/install/)
* The [Helm 3 CLI](https://helm.sh/docs/intro/install/) tool is installed and configured to interact with your Kubernetes cluster.
* Operator license (please [contact us](https://www.kurrent.io/contact) for more information).

## Helm Repository

The Operator deployment process is managed via Helm. The following Kurrent repository must be configured using the command:

```bash
helm repo add kurrent-latest \
'https://packages.kurrent.io/basic/kurrent-latest/helm/charts/'
```

## Custom Resource Definitions (CRDs)

The following resource types are supported by the Operator:
- [KurrentDB](resource-types.md#kurrentdb)
- [KurrentDBBackup](resource-types.md#kurrentdbbackup)

Since CRDs are managed globally by Kubernetes, special care must be taken to install them.

### Automatic Install

The recommended approach to install and manage the CRDs is using Helm. Refer to the [Deployment Modes](#deployment-modes) section for more details.

### Manual Install

If the CRDs must be installed manually, then the following steps can be used:

```bash
# Download the kurrentdb-operator Helm chart
helm pull kurrent-latest/kurrentdb-operator --version 1.1.0 --untar
# Install the CRDs
kubectl apply -f kurrentdb-operator/templates/crds
```
*Expected Output*:
```
customresourcedefinition.apiextensions.k8s.io/kurrentdbbackups.kubernetes.kurrent.io created
customresourcedefinition.apiextensions.k8s.io/kurrentdbs.kubernetes.kurrent.io created
```

## Deployment Modes

The Operator can be scoped to track Kurrent resources across *all* or *specific* namespaces.

### Cluster-wide

In this mode, the Operator will track Kurrent resources across **all** namespaces. This mode offers the simplest configuration option but the Operator requires a `ClusterRole` (this will be created as part of the installation process).

To deploy the Operator in this mode, the following command can be used:

```bash
helm install kurrentdb-operator kurrent-latest/kurrentdb-operator \
--version 1.1.0 \
--namespace kurrent \
--create-namespace \
--set crds.enabled=true \
--set-file operator.license.key=/path/to/license.key \
--set-file operator.license.file=/path/to/license.lic
```

Here's what the command does:
- Sets the namespace of where the Operator will be deployed i.e. `kurrent` (feel free to change this)
- Creates the namespace (if it already exists, leave out the `--create-namespace` flag)
- Deploys CRDs (this can be skipped by removing `--set crds.enabled=true`)
- Configures the Operator license
- Deploys a new Helm release called `kurrentdb-operator` in the `kurrent` namespace.

*Expected Output*:
```
NAME: kurrentdb-operator
LAST DEPLOYED: Thu Mar 20 14:51:42 2025
NAMESPACE: kurrent
STATUS: deployed
REVISION: 1
TEST SUITE: None
```

Once installed, navigate to the [deployment validation](#deployment-validation) section.

### Specific Namespace(s)

In this mode, the Operator will track Kurrent resources across **specific** namespaces. This mode reduces the level of permissions required. The Operator will create a `Role` in each namespace that it is expected to manage.

To deploy the Operator in this mode, the following command can be used:

```bash
helm install kurrentdb-operator kurrent-latest/kurrentdb-operator \
--version 1.1.0 \
--namespace kurrent \
--create-namespace \
--set crds.enabled=true \
--set-file operator.license.key=/path/to/license.key \
--set-file operator.license.file=/path/to/license.lic \
--set operator.namespaces='{kurrent, foo}'
```

Here's what the command does:
- Sets the namespace of where the Operator will be deployed i.e. `kurrent` (feel free to change this)
- Creates the namespace (if it already exists, leave out the `--create-namespace` flag)
- Deploys CRDs (this can be skipped by removing `--set crds.enabled=true`)
- Configures the Operator license
- Sets the underlying Operator configuration to target the namespaces: `kurrent` and `foo`
- Deploys a new Helm release called `kurrentdb-operator` in the `kurrent` namespace

::: important
Make sure the namespaces listed as part of the `operator.namespaces` parameter already exist before running the command (unless you are using the Operator to target the namespace that it will be deployed in to).
:::

*Expected Output*:
```
NAME: kurrentdb-operator
LAST DEPLOYED: Thu Mar 20 14:51:42 2025
NAMESPACE: kurrent
STATUS: deployed
REVISION: 1
TEST SUITE: None
```

Once installed, navigate to the [deployment validation](#deployment-validation) section.

#### Augmenting Namespaces

The Operator deployment can be updated to adjust which namespaces are watched. For example, in addition to the `kurrent` and `foo` namespaces (from the example above), a new namespace `bar` may also be watched using the command below:

```bash
helm upgrade kurrentdb-operator kurrent-latest/kurrentdb-operator \
--version 1.1.0 \
--namespace kurrent \
--reuse-values \
--set operator.namespaces='{kurrent,foo,bar}'
```

This will trigger:
- a new `Role` to be created in the `bar` namespace
- a rolling restart of the Operator to pick up the new configuration changes

## Deployment Validation

Using the k9s tool, navigate to the namespace listing using the command `:namespaces`. It should show the namespace where the Operator was deployed:

![Namespaces](images/install/namespace-list.png)

After stepping in to the `kurrent` namespace, type `:deployments` in the k9s console. It should show the following:

![Operator Deployment](images/install/deployments-list.png)

Pods may also be viewed using the `:pods` command, for example:

![Operator Pod](images/install/pods-list.png)

Pressing the `Return` key on the selected Operator pod will allow you to drill through the container hosted in the pod, and then finally to the logs:

![Operator Logs](images/install/logs.png)
Loading
Loading