From 4fec9528439d9229e81d4c0c14a05623799e9029 Mon Sep 17 00:00:00 2001 From: Tapajit Chandra Paul <33987732+tapojit047@users.noreply.github.com> Date: Thu, 14 Nov 2024 14:09:03 +0600 Subject: [PATCH] Add Druid Complete Docs (#699) * Add druid concepts Signed-off-by: Tapajit Chandra Paul --- docs/guides/README.md | 2 +- docs/guides/druid/README.md | 60 +- docs/guides/druid/autoscaler/_index.md | 10 + .../guides/druid/autoscaler/compute/_index.md | 10 + docs/guides/druid/autoscaler/compute/guide.md | 864 +++++++++ .../compute/images/compute-autoscaling.png | Bin 0 -> 65595 bytes .../druid/autoscaler/compute/overview.md | 55 + .../compute/yamls/deep-storage-config.yaml | 16 + .../compute/yamls/druid-autoscaler.yaml | 31 + .../compute/yamls/druid-cluster.yaml | 31 + .../guides/druid/autoscaler/storage/_index.md | 10 + docs/guides/druid/autoscaler/storage/guide.md | 896 ++++++++++ .../storage/images/storage-autoscaling.png | Bin 0 -> 66996 bytes .../druid/autoscaler/storage/overview.md | 55 + .../storage/yamls/deep-storage-config.yaml | 16 + .../storage/yamls/druid-cluster.yaml | 40 + .../yamls/druid-storage-autoscaler.yaml | 19 + docs/guides/druid/backup/_index.md | 2 +- .../druid/backup/application-level/index.md | 3 +- docs/guides/druid/backup/auto-backup/index.md | 2 +- .../backup/cross-ns-dependencies/index.md | 2 +- docs/guides/druid/backup/logical/index.md | 2 +- docs/guides/druid/backup/overview/index.md | 2 +- docs/guides/druid/clustering/_index.md | 10 + docs/guides/druid/clustering/guide/index.md | 925 ++++++++++ .../guide/yamls/deep-storage-config.yaml | 16 + .../clustering/guide/yamls/druid-cluster.yaml | 15 + .../overview/images/druid-architecture.svg | 19 + .../guides/druid/clustering/overview/index.md | 115 ++ docs/guides/druid/concepts/_index.md | 2 +- docs/guides/druid/concepts/appbinding.md | 277 +-- docs/guides/druid/concepts/catalog.md | 111 -- docs/guides/druid/concepts/druid.md | 679 +++++--- docs/guides/druid/concepts/druidautoscaler.md | 132 ++ docs/guides/druid/concepts/druidopsrequest.md | 473 +++++ docs/guides/druid/concepts/druidversion.md | 102 ++ docs/guides/druid/configuration/_index.md | 10 + .../config-file/images/druid-updated-ui.png | Bin 0 -> 48477 bytes .../druid/configuration/config-file/index.md | 284 +++ .../config-file/yamls/config-secret.yaml | 10 + .../yamls/deep-storage-config.yaml | 16 + .../config-file/yamls/druid-with-config.yaml | 17 + .../configuration/podtemplating/index.md | 618 +++++++ .../yamls/deep-storage-config.yaml | 16 + .../podtemplating/yamls/druid-cluster.yaml | 43 + .../yamls/druid-node-selector.yaml | 20 + .../yamls/druid-with-tolerations.yaml | 58 + .../yamls/druid-without-tolerations.yaml | 15 + docs/guides/druid/monitoring/_index.md | 10 + .../monitoring/images/druid-monitoring.png | Bin 0 -> 68080 bytes .../monitoring/images/druid-prometheus.png | Bin 0 -> 209966 bytes docs/guides/druid/monitoring/overview.md | 139 ++ .../monitoring/using-builtin-prometheus.md | 372 ++++ .../monitoring/using-prometheus-operator.md | 343 ++++ .../monitoring/yamls/deep-storage-config.yaml | 16 + .../yamls/druid-monitoring-builtin.yaml | 24 + .../yamls/druid-with-monitoring.yaml | 23 + docs/guides/druid/quickstart/_index.md | 2 +- .../quickstart/{overview => guide}/index.md | 12 +- docs/guides/druid/reconfigure-tls/_index.md | 10 + docs/guides/druid/reconfigure-tls/guide.md | 1539 +++++++++++++++++ .../druid/reconfigure-tls/images/druid-ui.png | Bin 0 -> 46148 bytes .../reconfigure-tls/images/druid-with-tls.png | Bin 0 -> 99499 bytes .../images/druid-without-tls.png | Bin 0 -> 114409 bytes .../images/reconfigure-tls.png | Bin 0 -> 37055 bytes docs/guides/druid/reconfigure-tls/overview.md | 54 + .../yamls/deep-storage-config.yaml | 16 + .../reconfigure-tls/yamls/drops-add-tls.yaml | 23 + .../reconfigure-tls/yamls/drops-remove.yaml | 11 + .../reconfigure-tls/yamls/drops-rotate.yaml | 11 + .../yamls/druid-ca-issuer.yaml | 8 + .../reconfigure-tls/yamls/druid-cluster.yaml | 16 + .../yamls/druid-new-issuer.yaml | 8 + .../yamls/druid-update-tls-issuer.yaml | 14 + docs/guides/druid/reconfigure/_index.md | 10 + docs/guides/druid/reconfigure/guide.md | 704 ++++++++ .../druid/reconfigure/images/druid-ui.png | Bin 0 -> 47241 bytes .../druid/reconfigure/images/reconfigure.svg | 120 ++ docs/guides/druid/reconfigure/overview.md | 54 + .../reconfigure/yamls/config-secret.yaml | 10 + .../yamls/deep-storage-config.yaml | 16 + .../reconfigure/yamls/druid-cluster.yaml | 15 + .../yamls/reconfigure-druid-ops.yaml | 12 + docs/guides/druid/restart/_index.md | 10 + docs/guides/druid/restart/guide.md | 283 +++ .../restart/yamls/deep-storage-config.yaml | 16 + .../druid/restart/yamls/druid-cluster.yaml | 16 + docs/guides/druid/restart/yamls/restart.yaml | 11 + docs/guides/druid/scaling/_index.md | 10 + .../scaling/horizontal-scaling/_index.md | 10 + .../druid/scaling/horizontal-scaling/guide.md | 603 +++++++ .../images/dr-horizontal-scaling.png | Bin 0 -> 68725 bytes .../images/druid-ui-scaled-up.png | Bin 0 -> 52430 bytes .../horizontal-scaling/images/druid-ui.png | Bin 0 -> 46148 bytes .../scaling/horizontal-scaling/overview.md | 54 + .../yamls/deep-storage-config.yaml | 16 + .../yamls/druid-cluster.yaml | 16 + .../yamls/druid-hscale-down.yaml | 13 + .../yamls/druid-hscale-up.yaml | 13 + .../druid/scaling/vertical-scaling/_index.md | 10 + .../druid/scaling/vertical-scaling/guide.md | 454 +++++ .../images/dr-vertical-scaling.png | Bin 0 -> 73609 bytes .../scaling/vertical-scaling/overview.md | 54 + .../yamls/deep-storage-config.yaml | 16 + .../vertical-scaling/yamls/druid-cluster.yaml | 15 + .../vertical-scaling/yamls/druid-vscale.yaml | 28 + docs/guides/druid/tls/_index.md | 10 + docs/guides/druid/tls/guide.md | 307 ++++ docs/guides/druid/tls/images/druid-ui.png | Bin 0 -> 99499 bytes docs/guides/druid/tls/images/tls.png | Bin 0 -> 41254 bytes docs/guides/druid/tls/overview.md | 70 + .../druid/tls/yamls/deep-storage-config.yaml | 16 + .../druid/tls/yamls/druid-ca-issuer.yaml | 8 + .../druid/tls/yamls/druid-cluster-tls.yaml | 21 + docs/guides/druid/update-version/_index.md | 10 + docs/guides/druid/update-version/guide.md | 448 +++++ .../images/dr-update-version.png | Bin 0 -> 73376 bytes .../update-version/images/druid-ui-28.png | Bin 0 -> 46732 bytes .../update-version/images/druid-ui-30.png | Bin 0 -> 48517 bytes docs/guides/druid/update-version/overview.md | 53 + .../yamls/deep-storage-config.yaml | 16 + .../update-version/yamls/druid-cluster.yaml | 15 + .../yamls/update-version-ops.yaml | 13 + docs/guides/druid/volume-expansion/_index.md | 10 + docs/guides/druid/volume-expansion/guide.md | 498 ++++++ .../images/druid-volume-expansion.png | Bin 0 -> 76116 bytes .../guides/druid/volume-expansion/overview.md | 56 + .../yamls/deep-storage-config.yaml | 16 + .../volume-expansion/yamls/druid-cluster.yaml | 34 + .../yamls/volume-expansion-ops.yaml | 13 + 130 files changed, 12370 insertions(+), 595 deletions(-) create mode 100644 docs/guides/druid/autoscaler/_index.md create mode 100644 docs/guides/druid/autoscaler/compute/_index.md create mode 100644 docs/guides/druid/autoscaler/compute/guide.md create mode 100644 docs/guides/druid/autoscaler/compute/images/compute-autoscaling.png create mode 100644 docs/guides/druid/autoscaler/compute/overview.md create mode 100644 docs/guides/druid/autoscaler/compute/yamls/deep-storage-config.yaml create mode 100644 docs/guides/druid/autoscaler/compute/yamls/druid-autoscaler.yaml create mode 100644 docs/guides/druid/autoscaler/compute/yamls/druid-cluster.yaml create mode 100644 docs/guides/druid/autoscaler/storage/_index.md create mode 100644 docs/guides/druid/autoscaler/storage/guide.md create mode 100644 docs/guides/druid/autoscaler/storage/images/storage-autoscaling.png create mode 100644 docs/guides/druid/autoscaler/storage/overview.md create mode 100644 docs/guides/druid/autoscaler/storage/yamls/deep-storage-config.yaml create mode 100644 docs/guides/druid/autoscaler/storage/yamls/druid-cluster.yaml create mode 100644 docs/guides/druid/autoscaler/storage/yamls/druid-storage-autoscaler.yaml create mode 100644 docs/guides/druid/clustering/_index.md create mode 100644 docs/guides/druid/clustering/guide/index.md create mode 100644 docs/guides/druid/clustering/guide/yamls/deep-storage-config.yaml create mode 100644 docs/guides/druid/clustering/guide/yamls/druid-cluster.yaml create mode 100644 docs/guides/druid/clustering/overview/images/druid-architecture.svg create mode 100644 docs/guides/druid/clustering/overview/index.md delete mode 100644 docs/guides/druid/concepts/catalog.md create mode 100644 docs/guides/druid/concepts/druidautoscaler.md create mode 100644 docs/guides/druid/concepts/druidopsrequest.md create mode 100644 docs/guides/druid/concepts/druidversion.md create mode 100644 docs/guides/druid/configuration/_index.md create mode 100644 docs/guides/druid/configuration/config-file/images/druid-updated-ui.png create mode 100644 docs/guides/druid/configuration/config-file/index.md create mode 100644 docs/guides/druid/configuration/config-file/yamls/config-secret.yaml create mode 100644 docs/guides/druid/configuration/config-file/yamls/deep-storage-config.yaml create mode 100644 docs/guides/druid/configuration/config-file/yamls/druid-with-config.yaml create mode 100644 docs/guides/druid/configuration/podtemplating/index.md create mode 100644 docs/guides/druid/configuration/podtemplating/yamls/deep-storage-config.yaml create mode 100644 docs/guides/druid/configuration/podtemplating/yamls/druid-cluster.yaml create mode 100644 docs/guides/druid/configuration/podtemplating/yamls/druid-node-selector.yaml create mode 100644 docs/guides/druid/configuration/podtemplating/yamls/druid-with-tolerations.yaml create mode 100644 docs/guides/druid/configuration/podtemplating/yamls/druid-without-tolerations.yaml create mode 100755 docs/guides/druid/monitoring/_index.md create mode 100644 docs/guides/druid/monitoring/images/druid-monitoring.png create mode 100644 docs/guides/druid/monitoring/images/druid-prometheus.png create mode 100644 docs/guides/druid/monitoring/overview.md create mode 100644 docs/guides/druid/monitoring/using-builtin-prometheus.md create mode 100644 docs/guides/druid/monitoring/using-prometheus-operator.md create mode 100644 docs/guides/druid/monitoring/yamls/deep-storage-config.yaml create mode 100644 docs/guides/druid/monitoring/yamls/druid-monitoring-builtin.yaml create mode 100644 docs/guides/druid/monitoring/yamls/druid-with-monitoring.yaml rename docs/guides/druid/quickstart/{overview => guide}/index.md (97%) create mode 100644 docs/guides/druid/reconfigure-tls/_index.md create mode 100644 docs/guides/druid/reconfigure-tls/guide.md create mode 100644 docs/guides/druid/reconfigure-tls/images/druid-ui.png create mode 100644 docs/guides/druid/reconfigure-tls/images/druid-with-tls.png create mode 100644 docs/guides/druid/reconfigure-tls/images/druid-without-tls.png create mode 100644 docs/guides/druid/reconfigure-tls/images/reconfigure-tls.png create mode 100644 docs/guides/druid/reconfigure-tls/overview.md create mode 100644 docs/guides/druid/reconfigure-tls/yamls/deep-storage-config.yaml create mode 100644 docs/guides/druid/reconfigure-tls/yamls/drops-add-tls.yaml create mode 100644 docs/guides/druid/reconfigure-tls/yamls/drops-remove.yaml create mode 100644 docs/guides/druid/reconfigure-tls/yamls/drops-rotate.yaml create mode 100644 docs/guides/druid/reconfigure-tls/yamls/druid-ca-issuer.yaml create mode 100644 docs/guides/druid/reconfigure-tls/yamls/druid-cluster.yaml create mode 100644 docs/guides/druid/reconfigure-tls/yamls/druid-new-issuer.yaml create mode 100644 docs/guides/druid/reconfigure-tls/yamls/druid-update-tls-issuer.yaml create mode 100644 docs/guides/druid/reconfigure/_index.md create mode 100644 docs/guides/druid/reconfigure/guide.md create mode 100644 docs/guides/druid/reconfigure/images/druid-ui.png create mode 100644 docs/guides/druid/reconfigure/images/reconfigure.svg create mode 100644 docs/guides/druid/reconfigure/overview.md create mode 100644 docs/guides/druid/reconfigure/yamls/config-secret.yaml create mode 100644 docs/guides/druid/reconfigure/yamls/deep-storage-config.yaml create mode 100644 docs/guides/druid/reconfigure/yamls/druid-cluster.yaml create mode 100644 docs/guides/druid/reconfigure/yamls/reconfigure-druid-ops.yaml create mode 100644 docs/guides/druid/restart/_index.md create mode 100644 docs/guides/druid/restart/guide.md create mode 100644 docs/guides/druid/restart/yamls/deep-storage-config.yaml create mode 100644 docs/guides/druid/restart/yamls/druid-cluster.yaml create mode 100644 docs/guides/druid/restart/yamls/restart.yaml create mode 100644 docs/guides/druid/scaling/_index.md create mode 100644 docs/guides/druid/scaling/horizontal-scaling/_index.md create mode 100644 docs/guides/druid/scaling/horizontal-scaling/guide.md create mode 100644 docs/guides/druid/scaling/horizontal-scaling/images/dr-horizontal-scaling.png create mode 100644 docs/guides/druid/scaling/horizontal-scaling/images/druid-ui-scaled-up.png create mode 100644 docs/guides/druid/scaling/horizontal-scaling/images/druid-ui.png create mode 100644 docs/guides/druid/scaling/horizontal-scaling/overview.md create mode 100644 docs/guides/druid/scaling/horizontal-scaling/yamls/deep-storage-config.yaml create mode 100644 docs/guides/druid/scaling/horizontal-scaling/yamls/druid-cluster.yaml create mode 100644 docs/guides/druid/scaling/horizontal-scaling/yamls/druid-hscale-down.yaml create mode 100644 docs/guides/druid/scaling/horizontal-scaling/yamls/druid-hscale-up.yaml create mode 100644 docs/guides/druid/scaling/vertical-scaling/_index.md create mode 100644 docs/guides/druid/scaling/vertical-scaling/guide.md create mode 100644 docs/guides/druid/scaling/vertical-scaling/images/dr-vertical-scaling.png create mode 100644 docs/guides/druid/scaling/vertical-scaling/overview.md create mode 100644 docs/guides/druid/scaling/vertical-scaling/yamls/deep-storage-config.yaml create mode 100644 docs/guides/druid/scaling/vertical-scaling/yamls/druid-cluster.yaml create mode 100644 docs/guides/druid/scaling/vertical-scaling/yamls/druid-vscale.yaml create mode 100755 docs/guides/druid/tls/_index.md create mode 100644 docs/guides/druid/tls/guide.md create mode 100644 docs/guides/druid/tls/images/druid-ui.png create mode 100644 docs/guides/druid/tls/images/tls.png create mode 100644 docs/guides/druid/tls/overview.md create mode 100644 docs/guides/druid/tls/yamls/deep-storage-config.yaml create mode 100644 docs/guides/druid/tls/yamls/druid-ca-issuer.yaml create mode 100644 docs/guides/druid/tls/yamls/druid-cluster-tls.yaml create mode 100644 docs/guides/druid/update-version/_index.md create mode 100644 docs/guides/druid/update-version/guide.md create mode 100644 docs/guides/druid/update-version/images/dr-update-version.png create mode 100644 docs/guides/druid/update-version/images/druid-ui-28.png create mode 100644 docs/guides/druid/update-version/images/druid-ui-30.png create mode 100644 docs/guides/druid/update-version/overview.md create mode 100644 docs/guides/druid/update-version/yamls/deep-storage-config.yaml create mode 100644 docs/guides/druid/update-version/yamls/druid-cluster.yaml create mode 100644 docs/guides/druid/update-version/yamls/update-version-ops.yaml create mode 100644 docs/guides/druid/volume-expansion/_index.md create mode 100644 docs/guides/druid/volume-expansion/guide.md create mode 100644 docs/guides/druid/volume-expansion/images/druid-volume-expansion.png create mode 100644 docs/guides/druid/volume-expansion/overview.md create mode 100644 docs/guides/druid/volume-expansion/yamls/deep-storage-config.yaml create mode 100644 docs/guides/druid/volume-expansion/yamls/druid-cluster.yaml create mode 100644 docs/guides/druid/volume-expansion/yamls/volume-expansion-ops.yaml diff --git a/docs/guides/README.md b/docs/guides/README.md index e7f0486867..065bc32b01 100644 --- a/docs/guides/README.md +++ b/docs/guides/README.md @@ -16,7 +16,7 @@ aliases: # Guides Guides to show you how to perform tasks with KubeDB: -- [Druid](/docs/guides/kafka/README.md). Shows how to manage Druid using KubeDB. +- [Druid](/docs/guides/druid/README.md). Shows how to manage Druid using KubeDB. - [Elasticsearch](/docs/guides/elasticsearch/README.md). Shows how to manage Elasticsearch & OpenSearch using KubeDB. - [Kafka](/docs/guides/kafka/README.md). Shows how to manage Kafka using KubeDB. - [FerretDB](/docs/guides/ferretdb/README.md). Shows how to manage FerretDB using KubeDB. diff --git a/docs/guides/druid/README.md b/docs/guides/druid/README.md index 3117d47cb3..e1f9c98d61 100644 --- a/docs/guides/druid/README.md +++ b/docs/guides/druid/README.md @@ -15,23 +15,35 @@ aliases: > New to KubeDB? Please start [here](/docs/README.md). +## Overview + +Apache Druid is a real-time analytics database designed for fast slice-and-dice analytics ("OLAP" queries) on large data sets. Druid is most often used as a database for powering use cases where real-time ingest, fast query performance, and high uptime are important. As such, Druid is commonly used for powering GUIs of analytical applications, or as a backend for highly-concurrent APIs that need fast aggregations. Druid works best with event-oriented data. + ## Supported Druid Features -| Features | Availability | -|----------------------------------------------------------------------------|:------------:| -| Clustering | ✓ | -| Druid Dependency Management (MySQL, PostgreSQL and ZooKeeper) | ✓ | -| Authentication & Authorization | ✓ | -| Custom Configuration | ✓ | -| Backup/Recovery: Instant, Scheduled ( [KubeStash](https://kubestash.com/)) | ✓ | -| Monitoring with Prometheus & Grafana | ✓ | -| Builtin Prometheus Discovery | ✓ | -| Using Prometheus operator | ✓ | -| Externally manageable Auth Secret | ✓ | -| Reconfigurable Health Checker | ✓ | -| Persistent volume | ✓ | -| Dashboard ( Druid Web Console ) | ✓ | +| Features | Availability | +|------------------------------------------------------------------------------------|:-----:| +| Clustering | ✓ | +| Druid Dependency Management (MySQL, PostgreSQL and ZooKeeper) | ✓ | +| Authentication & Authorization | ✓ | +| Custom Configuration | ✓ | +| Backup/Recovery: Instant, Scheduled ( [KubeStash](https://kubestash.com/)) | ✓ | +| Monitoring with Prometheus & Grafana | ✓ | +| Builtin Prometheus Discovery | ✓ | +| Using Prometheus operator | ✓ | +| Externally manageable Auth Secret | ✓ | +| Reconfigurable Health Checker | ✓ | +| Persistent volume | ✓ | +| Dashboard ( Druid Web Console ) | ✓ | +| Automated Version Update | ✓ | +| Automatic Vertical Scaling | ✓ | +| Automated Horizontal Scaling | ✓ | +| Automated db-configure Reconfiguration | ✓ | +| TLS: Add, Remove, Update, Rotate ( [Cert Manager](https://cert-manager.io/docs/) ) | ✓ | +| Automated Reprovision | ✓ | +| Automated Volume Expansion | ✓ | +| Autoscaling (vertically) | ✓ | ## Supported Druid Versions @@ -39,7 +51,7 @@ KubeDB supports The following Druid versions. - `28.0.1` - `30.0.1` -> The listed DruidVersions are tested and provided as a part of the installation process (ie. catalog chart), but you are open to create your own [DruidVersion](/docs/guides/druid/concepts/catalog.md) object with your custom Druid image. +> The listed DruidVersions are tested and provided as a part of the installation process (ie. catalog chart), but you are open to create your own [DruidVersion](/docs/guides/druid/concepts/druidversion.md) object with your custom Druid image. ## Lifecycle of Druid Object @@ -52,14 +64,12 @@ ref : https://cacoo.com/diagrams/bbB63L6KRIbPLl95/9A5B0

## User Guide -- [Quickstart Druid](/docs/guides/druid/quickstart/overview/index.md) with KubeDB Operator. - -[//]: # (- Druid Clustering supported by KubeDB) - -[//]: # ( - [Topology Clustering](/docs/guides/druid/clustering/topology-cluster/index.md)) - -[//]: # (- Use [kubedb cli](/docs/guides/druid/cli/cli.md) to manage databases like kubectl for Kubernetes.) - +- [Quickstart Druid](/docs/guides/druid/quickstart/guide/index.md) with KubeDB Operator. +- [Druid Clustering](/docs/guides/druid/clustering/overview/index.md) with KubeDB Operator. +- [Backup & Restore](/docs/guides/druid/backup/overview/index.md) Druid databases using KubeStash. +- Start [Druid with Custom Config](/docs/guides/druid/configuration/_index.md). +- Monitor your Druid database with KubeDB using [out-of-the-box Prometheus operator](/docs/guides/druid/monitoring/using-prometheus-operator.md). +- Monitor your Druid database with KubeDB using [out-of-the-box builtin-Prometheus](/docs/guides/druid/monitoring/using-builtin-prometheus.md). - Detail concepts of [Druid object](/docs/guides/druid/concepts/druid.md). - -[//]: # (- Want to hack on KubeDB? Check our [contribution guidelines](/docs/CONTRIBUTING.md).) \ No newline at end of file +- Detail concepts of [DruidVersion object](/docs/guides/druid/concepts/druidversion.md). +- Want to hack on KubeDB? Check our [contribution guidelines](/docs/CONTRIBUTING.md). \ No newline at end of file diff --git a/docs/guides/druid/autoscaler/_index.md b/docs/guides/druid/autoscaler/_index.md new file mode 100644 index 0000000000..a39f2bfba3 --- /dev/null +++ b/docs/guides/druid/autoscaler/_index.md @@ -0,0 +1,10 @@ +--- +title: Autoscaling +menu: + docs_{{ .version }}: + identifier: guides-druid-autoscaler + name: Autoscaling + parent: guides-druid + weight: 100 +menu_name: docs_{{ .version }} +--- \ No newline at end of file diff --git a/docs/guides/druid/autoscaler/compute/_index.md b/docs/guides/druid/autoscaler/compute/_index.md new file mode 100644 index 0000000000..c2c1eea280 --- /dev/null +++ b/docs/guides/druid/autoscaler/compute/_index.md @@ -0,0 +1,10 @@ +--- +title: Compute Autoscaling +menu: + docs_{{ .version }}: + identifier: guides-druid-autoscaler-compute + name: Compute Autoscaling + parent: guides-druid-autoscaler + weight: 46 +menu_name: docs_{{ .version }} +--- diff --git a/docs/guides/druid/autoscaler/compute/guide.md b/docs/guides/druid/autoscaler/compute/guide.md new file mode 100644 index 0000000000..b0810f67b2 --- /dev/null +++ b/docs/guides/druid/autoscaler/compute/guide.md @@ -0,0 +1,864 @@ +--- +title: Druid Topology Autoscaling +menu: + docs_{{ .version }}: + identifier: guides-druid-autoscaler-compute-guide + name: Druid Compute Autoscaling + parent: guides-druid-autoscaler-compute + weight: 20 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- + +> New to KubeDB? Please start [here](/docs/README.md). + +# Autoscaling the Compute Resource of a Druid Topology Cluster + +This guide will show you how to use `KubeDB` to autoscale compute resources i.e. cpu and memory of a Druid topology cluster. + +## Before You Begin + +- At first, you need to have a Kubernetes cluster, and the `kubectl` command-line tool must be configured to communicate with your cluster. + +- Install `KubeDB` Provisioner, Ops-manager and Autoscaler operator in your cluster following the steps [here](/docs/setup/README.md). + +- Install `Metrics Server` from [here](https://github.com/kubernetes-sigs/metrics-server#installation) + +- You should be familiar with the following `KubeDB` concepts: + - [Druid](/docs/guides/druid/concepts/druid.md) + - [DruidAutoscaler](/docs/guides/druid/concepts/druidautoscaler.md) + - [DruidOpsRequest](/docs/guides/druid/concepts/druidopsrequest.md) + - [Compute Resource Autoscaling Overview](/docs/guides/druid/autoscaler/compute/overview.md) + +To keep everything isolated, we are going to use a separate namespace called `demo` throughout this tutorial. + +```bash +$ kubectl create ns demo +namespace/demo created +``` + +> **Note:** YAML files used in this tutorial are stored in [docs/examples/druid](/docs/examples/druid) directory of [kubedb/docs](https://github.com/kubedb/docs) repository. + +## Autoscaling of Topology Cluster + +Here, we are going to deploy a `Druid` Topology Cluster using a supported version by `KubeDB` operator. Then we are going to apply `DruidAutoscaler` to set up autoscaling. + +### Create External Dependency (Deep Storage) + +Before proceeding further, we need to prepare deep storage, which is one of the external dependency of Druid and used for storing the segments. It is a storage mechanism that Apache Druid does not provide. **Amazon S3**, **Google Cloud Storage**, or **Azure Blob Storage**, **S3-compatible storage** (like **Minio**), or **HDFS** are generally convenient options for deep storage. + +In this tutorial, we will run a `minio-server` as deep storage in our local `kind` cluster using `minio-operator` and create a bucket named `druid` in it, which the deployed druid database will use. + +```bash +$ helm repo add minio https://operator.min.io/ +$ helm repo update minio +$ helm upgrade --install --namespace "minio-operator" --create-namespace "minio-operator" minio/operator --set operator.replicaCount=1 + +$ helm upgrade --install --namespace "demo" --create-namespace druid-minio minio/tenant \ +--set tenant.pools[0].servers=1 \ +--set tenant.pools[0].volumesPerServer=1 \ +--set tenant.pools[0].size=1Gi \ +--set tenant.certificate.requestAutoCert=false \ +--set tenant.buckets[0].name="druid" \ +--set tenant.pools[0].name="default" + +``` + +Now we need to create a `Secret` named `deep-storage-config`. It contains the necessary connection information using which the druid database will connect to the deep storage. + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: deep-storage-config + namespace: demo +stringData: + druid.storage.type: "s3" + druid.storage.bucket: "druid" + druid.storage.baseKey: "druid/segments" + druid.s3.accessKey: "minio" + druid.s3.secretKey: "minio123" + druid.s3.protocol: "http" + druid.s3.enablePathStyleAccess: "true" + druid.s3.endpoint.signingRegion: "us-east-1" + druid.s3.endpoint.url: "http://myminio-hl.demo.svc.cluster.local:9000/" +``` + +Let’s create the `deep-storage-config` Secret shown above: + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/autoscaler/compute/yamls/deep-storage-config.yaml +secret/deep-storage-config created +``` + +Now, we are going to deploy a `Druid` combined cluster with version `28.0.1`. + +### Deploy Druid Cluster + +In this section, we are going to deploy a Druid Topology cluster with version `28.0.1`. Then, in the next section we will set up autoscaling for this database using `DruidAutoscaler` CRD. Below is the YAML of the `Druid` CR that we are going to create, + +```yaml +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-cluster + namespace: demo +spec: + version: 28.0.1 + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + routers: + replicas: 1 + deletionPolicy: WipeOut +``` + +Let's create the `Druid` CRO we have shown above, + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/autoscaler/compute/yamls/druid-cluster.yaml +druid.kubedb.com/druid-cluster created +``` + +Now, wait until `druid-cluster` has status `Ready`. i.e, + +```bash +$ kubectl get kf -n demo -w +NAME TYPE VERSION STATUS AGE +druid-cluster kubedb.com/v1alpha2 28.0.1 Provisioning 0s +druid-cluster kubedb.com/v1alpha2 28.0.1 Provisioning 24s +. +. +druid-cluster kubedb.com/v1alpha2 28.0.1 Ready 118s +``` + +## Druid Topology Autoscaler + +Let's check the Druid resources for coordinators and historicals, + +```bash +$ kubectl get druid -n demo druid-cluster -o json | jq '.spec.topology.coordinators.podTemplate.spec.containers[].resources' +{ + "limits": { + "memory": "1Gi" + }, + "requests": { + "cpu": "500m", + "memory": "1Gi" + } +} + +$ kubectl get druid -n demo druid-cluster -o json | jq '.spec.topology.historicals.podTemplate.spec.containers[].resources' +{ + "limits": { + "memory": "1Gi" + }, + "requests": { + "cpu": "500m", + "memory": "1Gi" + } +} +``` + +Let's check the coordinators and historicals Pod containers resources, + +```bash +$ kubectl get pod -n demo druid-cluster-coordinators-0 -o json | jq '.spec.containers[].resources' +{ + "limits": { + "memory": "1Gi" + }, + "requests": { + "cpu": "500m", + "memory": "1Gi" + } +} + +$ kubectl get pod -n demo druid-cluster-historicals-0 -o json | jq '.spec.containers[].resources' +{ + "limits": { + "memory": "1Gi" + }, + "requests": { + "cpu": "500m", + "memory": "1Gi" + } +} +``` + +You can see from the above outputs that the resources for coordinators and historicals are same as the one we have assigned while deploying the druid. + +We are now ready to apply the `DruidAutoscaler` CRO to set up autoscaling for these coordinators and historicals nodes. + +### Compute Resource Autoscaling + +Here, we are going to set up compute resource autoscaling using a DruidAutoscaler Object. + +#### Create DruidAutoscaler Object + +In order to set up compute resource autoscaling for this topology cluster, we have to create a `DruidAutoscaler` CRO with our desired configuration. Below is the YAML of the `DruidAutoscaler` object that we are going to create, + +```yaml +apiVersion: autoscaling.kubedb.com/v1alpha1 +kind: DruidAutoscaler +metadata: + name: druid-autoscaler + namespace: demo +spec: + databaseRef: + name: druid-quickstart + compute: + coordinators: + trigger: "On" + podLifeTimeThreshold: 1m + minAllowed: + cpu: 600m + memory: 2Gi + maxAllowed: + cpu: 1000m + memory: 5Gi + resourceDiffPercentage: 20 + controlledResources: ["cpu", "memory"] + historicals: + trigger: "On" + podLifeTimeThreshold: 1m + minAllowed: + cpu: 600m + memory: 2Gi + maxAllowed: + cpu: 1000m + memory: 5Gi + resourceDiffPercentage: 20 + controlledResources: [ "cpu", "memory"] +``` + +Here, + +- `spec.databaseRef.name` specifies that we are performing compute resource scaling operation on `druid-cluster` cluster. +- `spec.compute.coordinators.trigger` specifies that compute autoscaling is enabled for this node. +- `spec.compute.coordinators.podLifeTimeThreshold` specifies the minimum lifetime for at least one of the pod to initiate a vertical scaling. +- `spec.compute.coordinators.resourceDiffPercentage` specifies the minimum resource difference in percentage. The default is 10%. If the difference between current & recommended resource is less than ResourceDiffPercentage, Autoscaler Operator will ignore the updating. +- `spec.compute.coordinators.minAllowed` specifies the minimum allowed resources for the cluster. +- `spec.compute.coordinators.maxAllowed` specifies the maximum allowed resources for the cluster. +- `spec.compute.coordinators.controlledResources` specifies the resources that are controlled by the autoscaler. +- `spec.compute.coordinators.containerControlledValues` specifies which resource values should be controlled. The default is "RequestsAndLimits". +- `spec.compute.historicals` can be configured the same way shown above. +- `spec.opsRequestOptions` contains the options to pass to the created OpsRequest. It has 2 fields. + - `timeout` specifies the timeout for the OpsRequest. + - `apply` specifies when the OpsRequest should be applied. The default is "IfReady". + +> **Note:** You can also configure autoscaling configurations for all other nodes as well. You can apply autoscaler for each node in separate YAML or combinedly in one a YAML as shown above. + +Let's create the `DruidAutoscaler` CR we have shown above, + +```bash +$ kubectl apply -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/autoscaler/compute/yamls/druid-autoscaler.yaml +druidautoscaler.autoscaling.kubedb.com/druid-autoscaler created +``` + +#### Verify Autoscaling is set up successfully + +Let's check that the `druidautoscaler` resource is created successfully, + +```bash +$ kubectl describe druidautoscaler druid-autoscaler -n demo + kubectl describe druidautoscaler druid-autoscaler -n demo +Name: druid-autoscaler +Namespace: demo +Labels: +Annotations: +API Version: autoscaling.kubedb.com/v1alpha1 +Kind: DruidAutoscaler +Metadata: + Creation Timestamp: 2024-10-24T10:04:22Z + Generation: 1 + Managed Fields: + API Version: autoscaling.kubedb.com/v1alpha1 + Fields Type: FieldsV1 + fieldsV1: + f:metadata: + f:annotations: + .: + f:kubectl.kubernetes.io/last-applied-configuration: + f:spec: + .: + f:compute: + .: + f:coordinators: + .: + f:controlledResources: + f:maxAllowed: + .: + f:cpu: + f:memory: + f:minAllowed: + .: + f:cpu: + f:memory: + f:podLifeTimeThreshold: + f:resourceDiffPercentage: + f:trigger: + f:historicals: + .: + f:controlledResources: + f:maxAllowed: + .: + f:cpu: + f:memory: + f:minAllowed: + .: + f:cpu: + f:memory: + f:podLifeTimeThreshold: + f:resourceDiffPercentage: + f:trigger: + f:databaseRef: + Manager: kubectl-client-side-apply + Operation: Update + Time: 2024-10-24T10:04:22Z + API Version: autoscaling.kubedb.com/v1alpha1 + Fields Type: FieldsV1 + fieldsV1: + f:metadata: + f:ownerReferences: + .: + k:{"uid":"c2a5c29d-3589-49d8-bc18-585b9c05bf8d"}: + Manager: kubedb-autoscaler + Operation: Update + Time: 2024-10-24T10:04:22Z + API Version: autoscaling.kubedb.com/v1alpha1 + Fields Type: FieldsV1 + fieldsV1: + f:status: + .: + f:checkpoints: + f:conditions: + f:vpas: + Manager: kubedb-autoscaler + Operation: Update + Subresource: status + Time: 2024-10-24T10:16:20Z + Owner References: + API Version: kubedb.com/v1alpha2 + Block Owner Deletion: true + Controller: true + Kind: Druid + Name: druid-cluster + UID: c2a5c29d-3589-49d8-bc18-585b9c05bf8d + Resource Version: 274969 + UID: 069fbdd7-87ad-4fd7-acc7-9753fa188312 +Spec: + Compute: + Coordinators: + Controlled Resources: + cpu + memory + Max Allowed: + Cpu: 1000m + Memory: 5Gi + Min Allowed: + Cpu: 600m + Memory: 2Gi + Pod Life Time Threshold: 1m + Resource Diff Percentage: 20 + Trigger: On + Historicals: + Controlled Resources: + cpu + memory + Max Allowed: + Cpu: 1000m + Memory: 5Gi + Min Allowed: + Cpu: 600m + Memory: 2Gi + Pod Life Time Threshold: 1m + Resource Diff Percentage: 20 + Trigger: On + Database Ref: + Name: druid-cluster +Status: + Checkpoints: + Cpu Histogram: + Bucket Weights: + Index: 0 + Weight: 10000 + Index: 5 + Weight: 490 + Reference Timestamp: 2024-10-24T10:05:00Z + Total Weight: 2.871430450948392 + First Sample Start: 2024-10-24T10:05:07Z + Last Sample Start: 2024-10-24T10:16:03Z + Last Update Time: 2024-10-24T10:16:20Z + Memory Histogram: + Bucket Weights: + Index: 25 + Weight: 3648 + Index: 29 + Weight: 10000 + Reference Timestamp: 2024-10-24T10:10:00Z + Total Weight: 3.3099198846728424 + Ref: + Container Name: druid + Vpa Object Name: druid-cluster-historicals + Total Samples Count: 12 + Version: v3 + Cpu Histogram: + Bucket Weights: + Index: 0 + Weight: 3040 + Index: 1 + Weight: 10000 + Index: 2 + Weight: 3278 + Index: 14 + Weight: 1299 + Reference Timestamp: 2024-10-24T10:10:00Z + Total Weight: 1.0092715955023177 + First Sample Start: 2024-10-24T10:04:53Z + Last Sample Start: 2024-10-24T10:14:03Z + Last Update Time: 2024-10-24T10:14:20Z + Memory Histogram: + Bucket Weights: + Index: 24 + Weight: 10000 + Index: 27 + Weight: 8706 + Reference Timestamp: 2024-10-24T10:10:00Z + Total Weight: 3.204567438391289 + Ref: + Container Name: druid + Vpa Object Name: druid-cluster-coordinators + Total Samples Count: 10 + Version: v3 + Conditions: + Last Transition Time: 2024-10-24T10:07:19Z + Message: Successfully created druidOpsRequest demo/drops-druid-cluster-coordinators-g02xtu + Observed Generation: 1 + Reason: CreateOpsRequest + Status: True + Type: CreateOpsRequest + Vpas: + Conditions: + Last Transition Time: 2024-10-24T10:05:19Z + Status: True + Type: RecommendationProvided + Recommendation: + Container Recommendations: + Container Name: druid + Lower Bound: + Cpu: 600m + Memory: 2Gi + Target: + Cpu: 600m + Memory: 2Gi + Uncapped Target: + Cpu: 100m + Memory: 764046746 + Upper Bound: + Cpu: 1 + Memory: 5Gi + Vpa Name: druid-cluster-historicals + Conditions: + Last Transition Time: 2024-10-24T10:06:19Z + Status: True + Type: RecommendationProvided + Recommendation: + Container Recommendations: + Container Name: druid + Lower Bound: + Cpu: 600m + Memory: 2Gi + Target: + Cpu: 600m + Memory: 2Gi + Uncapped Target: + Cpu: 100m + Memory: 671629701 + Upper Bound: + Cpu: 1 + Memory: 5Gi + Vpa Name: druid-cluster-coordinators +Events: +``` +So, the `druidautoscaler` resource is created successfully. + +you can see in the `Status.VPAs.Recommendation` section, that recommendation has been generated for our database. Our autoscaler operator continuously watches the recommendation generated and creates an `druidopsrequest` based on the recommendations, if the database pods resources are needed to scaled up or down. + +Let's watch the `druidopsrequest` in the demo namespace to see if any `druidopsrequest` object is created. After some time you'll see that a `druidopsrequest` will be created based on the recommendation. + +```bash +$ watch kubectl get druidopsrequest -n demo +Every 2.0s: kubectl get druidopsrequest -n demo +NAME TYPE STATUS AGE +drops-druid-cluster-coordinators-g02xtu VerticalScaling Progressing 8m +drops-druid-cluster-historicals-g3oqje VerticalScaling Progressing 8m + +``` +Progressing +Let's wait for the ops request to become successful. + +```bash +$ kubectl get druidopsrequest -n demo +NAME TYPE STATUS AGE +drops-druid-cluster-coordinators-g02xtu VerticalScaling Successful 12m +drops-druid-cluster-historicals-g3oqje VerticalScaling Successful 13m +``` + +We can see from the above output that the `DruidOpsRequest` has succeeded. If we describe the `DruidOpsRequest` we will get an overview of the steps that were followed to scale the cluster. + +```bash +$ kubectl describe druidopsrequests -n demo drops-druid-cluster-coordinators-f6qbth +Name: drops-druid-cluster-coordinators-g02xtu +Namespace: demo +Labels: app.kubernetes.io/component=database + app.kubernetes.io/instance=druid-cluster + app.kubernetes.io/managed-by=kubedb.com + app.kubernetes.io/name=druids.kubedb.com +Annotations: +API Version: ops.kubedb.com/v1alpha1 +Kind: DruidOpsRequest +Metadata: + Creation Timestamp: 2024-10-24T10:07:19Z + Generation: 1 + Managed Fields: + API Version: ops.kubedb.com/v1alpha1 + Fields Type: FieldsV1 + fieldsV1: + f:metadata: + f:labels: + .: + f:app.kubernetes.io/component: + f:app.kubernetes.io/instance: + f:app.kubernetes.io/managed-by: + f:app.kubernetes.io/name: + f:ownerReferences: + .: + k:{"uid":"069fbdd7-87ad-4fd7-acc7-9753fa188312"}: + f:spec: + .: + f:apply: + f:databaseRef: + f:type: + f:verticalScaling: + .: + f:coordinators: + .: + f:resources: + .: + f:limits: + .: + f:memory: + f:requests: + .: + f:cpu: + f:memory: + Manager: kubedb-autoscaler + Operation: Update + Time: 2024-10-24T10:07:19Z + API Version: ops.kubedb.com/v1alpha1 + Fields Type: FieldsV1 + fieldsV1: + f:status: + .: + f:conditions: + f:observedGeneration: + f:phase: + Manager: kubedb-ops-manager + Operation: Update + Subresource: status + Time: 2024-10-24T10:07:43Z + Owner References: + API Version: autoscaling.kubedb.com/v1alpha1 + Block Owner Deletion: true + Controller: true + Kind: DruidAutoscaler + Name: druid-autoscaler + UID: 069fbdd7-87ad-4fd7-acc7-9753fa188312 + Resource Version: 273990 + UID: d14d964b-f4ae-4570-a296-38e91c802473 +Spec: + Apply: IfReady + Database Ref: + Name: druid-cluster + Type: VerticalScaling + Vertical Scaling: + Coordinators: + Resources: + Limits: + Memory: 2Gi + Requests: + Cpu: 600m + Memory: 2Gi +Status: + Conditions: + Last Transition Time: 2024-10-24T10:07:19Z + Message: Druid ops-request has started to vertically scale the Druid nodes + Observed Generation: 1 + Reason: VerticalScaling + Status: True + Type: VerticalScaling + Last Transition Time: 2024-10-24T10:07:28Z + Message: Successfully updated PetSets Resources + Observed Generation: 1 + Reason: UpdatePetSets + Status: True + Type: UpdatePetSets + Last Transition Time: 2024-10-24T10:07:43Z + Message: Successfully Restarted Pods With Resources + Observed Generation: 1 + Reason: RestartPods + Status: True + Type: RestartPods + Last Transition Time: 2024-10-24T10:07:33Z + Message: get pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-cluster-coordinators-0 + Last Transition Time: 2024-10-24T10:07:33Z + Message: evict pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-cluster-coordinators-0 + Last Transition Time: 2024-10-24T10:07:38Z + Message: check pod running; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-cluster-coordinators-0 + Last Transition Time: 2024-10-24T10:07:43Z + Message: Successfully completed the vertical scaling for RabbitMQ + Observed Generation: 1 + Reason: Successful + Status: True + Type: Successful + Observed Generation: 1 + Phase: Successful +Events: + Type Reason Age From Message + ---- ------ ---- ---- ------- + Normal Starting 12m KubeDB Ops-manager Operator Start processing for DruidOpsRequest: demo/drops-druid-cluster-coordinators-g02xtu + Normal Starting 12m KubeDB Ops-manager Operator Pausing Druid databse: demo/druid-cluster + Normal Successful 12m KubeDB Ops-manager Operator Successfully paused Druid database: demo/druid-cluster for DruidOpsRequest: drops-druid-cluster-coordinators-g02xtu + Normal UpdatePetSets 12m KubeDB Ops-manager Operator Successfully updated PetSets Resources + Warning get pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 12m KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 12m KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-coordinators-0 12m KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Normal RestartPods 12m KubeDB Ops-manager Operator Successfully Restarted Pods With Resources + Normal Starting 12m KubeDB Ops-manager Operator Resuming Druid database: demo/druid-cluster + Normal Successful 12m KubeDB Ops-manager Operator Successfully resumed Druid database: demo/druid-cluster for DruidOpsRequest: drops-druid-cluster-coordinators-g02xtu +``` + +Let's describe the other `DruidOpsRequest` created for scaling of historicals. + +```bash +$ kubectl describe druidopsrequests -n demo drops-druid-cluster-historicals-g3oqje +Name: drops-druid-cluster-historicals-g3oqje +Namespace: demo +Labels: app.kubernetes.io/component=database + app.kubernetes.io/instance=druid-cluster + app.kubernetes.io/managed-by=kubedb.com + app.kubernetes.io/name=druids.kubedb.com +Annotations: +API Version: ops.kubedb.com/v1alpha1 +Kind: DruidOpsRequest +Metadata: + Creation Timestamp: 2024-10-24T10:06:19Z + Generation: 1 + Managed Fields: + API Version: ops.kubedb.com/v1alpha1 + Fields Type: FieldsV1 + fieldsV1: + f:metadata: + f:labels: + .: + f:app.kubernetes.io/component: + f:app.kubernetes.io/instance: + f:app.kubernetes.io/managed-by: + f:app.kubernetes.io/name: + f:ownerReferences: + .: + k:{"uid":"069fbdd7-87ad-4fd7-acc7-9753fa188312"}: + f:spec: + .: + f:apply: + f:databaseRef: + f:type: + f:verticalScaling: + .: + f:historicals: + .: + f:resources: + .: + f:limits: + .: + f:memory: + f:requests: + .: + f:cpu: + f:memory: + Manager: kubedb-autoscaler + Operation: Update + Time: 2024-10-24T10:06:19Z + API Version: ops.kubedb.com/v1alpha1 + Fields Type: FieldsV1 + fieldsV1: + f:status: + .: + f:conditions: + f:observedGeneration: + f:phase: + Manager: kubedb-ops-manager + Operation: Update + Subresource: status + Time: 2024-10-24T10:06:37Z + Owner References: + API Version: autoscaling.kubedb.com/v1alpha1 + Block Owner Deletion: true + Controller: true + Kind: DruidAutoscaler + Name: druid-autoscaler + UID: 069fbdd7-87ad-4fd7-acc7-9753fa188312 + Resource Version: 273770 + UID: fc13624c-42d4-4b03-9448-80f451b1a888 +Spec: + Apply: IfReady + Database Ref: + Name: druid-cluster + Type: VerticalScaling + Vertical Scaling: + Historicals: + Resources: + Limits: + Memory: 2Gi + Requests: + Cpu: 600m + Memory: 2Gi +Status: + Conditions: + Last Transition Time: 2024-10-24T10:06:19Z + Message: Druid ops-request has started to vertically scale the Druid nodes + Observed Generation: 1 + Reason: VerticalScaling + Status: True + Type: VerticalScaling + Last Transition Time: 2024-10-24T10:06:22Z + Message: Successfully updated PetSets Resources + Observed Generation: 1 + Reason: UpdatePetSets + Status: True + Type: UpdatePetSets + Last Transition Time: 2024-10-24T10:06:37Z + Message: Successfully Restarted Pods With Resources + Observed Generation: 1 + Reason: RestartPods + Status: True + Type: RestartPods + Last Transition Time: 2024-10-24T10:06:27Z + Message: get pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-cluster-historicals-0 + Last Transition Time: 2024-10-24T10:06:27Z + Message: evict pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-cluster-historicals-0 + Last Transition Time: 2024-10-24T10:06:32Z + Message: check pod running; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-cluster-historicals-0 + Last Transition Time: 2024-10-24T10:06:37Z + Message: Successfully completed the vertical scaling for RabbitMQ + Observed Generation: 1 + Reason: Successful + Status: True + Type: Successful + Observed Generation: 1 + Phase: Successful +Events: + Type Reason Age From Message + ---- ------ ---- ---- ------- + Normal Starting 16m KubeDB Ops-manager Operator Start processing for DruidOpsRequest: demo/drops-druid-cluster-historicals-g3oqje + Normal Starting 16m KubeDB Ops-manager Operator Pausing Druid databse: demo/druid-cluster + Normal Successful 16m KubeDB Ops-manager Operator Successfully paused Druid database: demo/druid-cluster for DruidOpsRequest: drops-druid-cluster-historicals-g3oqje + Normal UpdatePetSets 16m KubeDB Ops-manager Operator Successfully updated PetSets Resources + Warning get pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 16m KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 16m KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-historicals-0 16m KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Normal RestartPods 16m KubeDB Ops-manager Operator Successfully Restarted Pods With Resources + Normal Starting 16m KubeDB Ops-manager Operator Resuming Druid database: demo/druid-cluster + Normal Successful 16m KubeDB Ops-manager Operator Successfully resumed Druid database: demo/druid-cluster for DruidOpsRequest: drops-druid-cluster-historicals-g3oqje + +``` + +Now, we are going to verify from the Pod, and the Druid yaml whether the resources of the coordinators and historicals node has updated to meet up the desired state, Let's check, + +```bash +$ kubectl get pod -n demo druid-cluster-coordinators-0 -o json | jq '.spec.containers[].resources' +{ + "limits": { + "memory": "1536Mi" + }, + "requests": { + "cpu": "600m", + "memory": "1536Mi" + } +} + +$ kubectl get pod -n demo druid-cluster-historicals-0 -o json | jq '.spec.containers[].resources' +{ + "limits": { + "memory": "2Gi" + }, + "requests": { + "cpu": "600m", + "memory": "2Gi" + } +} + +$ kubectl get druid -n demo druid-cluster -o json | jq '.spec.topology.coordinators.podTemplate.spec.containers[].resources' +{ + "limits": { + "memory": "1536Mi" + }, + "requests": { + "cpu": "600m", + "memory": "1536Mi" + } +} + +$ kubectl get druid -n demo druid-cluster -o json | jq '.spec.topology.historicals.podTemplate.spec.containers[].resources' +{ + "limits": { + "memory": "2Gi" + }, + "requests": { + "cpu": "600m", + "memory": "2Gi" + } +} +``` + +The above output verifies that we have successfully auto scaled the resources of the Druid topology cluster for coordinators and historicals. + +## Cleaning Up + +To clean up the Kubernetes resources created by this tutorial, run: + +```bash +kubectl delete druidopsrequest -n demo drops-druid-cluster-coordinators-g02xtu drops-druid-cluster-historicals-g3oqje +kubectl delete druidautoscaler -n demo druid-autoscaler +kubectl delete dr -n demo druid-cluster +kubectl delete ns demo +``` +## Next Steps + +- Detail concepts of [Druid object](/docs/guides/druid/concepts/druid.md). +- Different Druid topology clustering modes [here](/docs/guides/druid/clustering/_index.md). +- Monitor your Druid database with KubeDB using [out-of-the-box Prometheus operator](/docs/guides/druid/monitoring/using-prometheus-operator.md). + +[//]: # (- Monitor your Druid database with KubeDB using [out-of-the-box builtin-Prometheus](/docs/guides/druid/monitoring/using-builtin-prometheus.md).) +- Want to hack on KubeDB? Check our [contribution guidelines](/docs/CONTRIBUTING.md). diff --git a/docs/guides/druid/autoscaler/compute/images/compute-autoscaling.png b/docs/guides/druid/autoscaler/compute/images/compute-autoscaling.png new file mode 100644 index 0000000000000000000000000000000000000000..9406e2b2e99121bf6a2e8b13c83b248fae3ebd80 GIT binary patch literal 65595 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 literal 0 HcmV?d00001 diff --git a/docs/guides/druid/autoscaler/compute/overview.md b/docs/guides/druid/autoscaler/compute/overview.md new file mode 100644 index 0000000000..457bbfe62c --- /dev/null +++ b/docs/guides/druid/autoscaler/compute/overview.md @@ -0,0 +1,55 @@ +--- +title: Druid Compute Autoscaling Overview +menu: + docs_{{ .version }}: + identifier: guides-druid-autoscaler-compute-overview + name: Overview + parent: guides-druid-autoscaler-compute + weight: 10 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- + +> New to KubeDB? Please start [here](/docs/README.md). + +# Druid Compute Resource Autoscaling + +This guide will give an overview on how KubeDB Autoscaler operator autoscales the database compute resources i.e. cpu and memory using `druidautoscaler` crd. + +## Before You Begin + +- You should be familiar with the following `KubeDB` concepts: + - [Druid](/docs/guides/druid/concepts/druid.md) + - [DruidAutoscaler](/docs/guides/druid/concepts/druidautoscaler.md) + - [DruidOpsRequest](/docs/guides/druid/concepts/druidopsrequest.md) + +## How Compute Autoscaling Works + +The following diagram shows how KubeDB Autoscaler operator autoscales the resources of `Druid` database components. Open the image in a new tab to see the enlarged version. + +
+  Volume Expansion process of Druid +
Fig: Compute Auto Scaling process of Druid
+
+ +The Auto Scaling process consists of the following steps: + +1. At first, a user creates a `Druid` Custom Resource Object (CRO). + +2. `KubeDB` Provisioner operator watches the `Druid` CRO. + +3. When the operator finds a `Druid` CRO, it creates required number of `PetSets` and related necessary stuff like secrets, services, etc. + +4. Then, in order to set up autoscaling of the various components (ie. Coordinators, Overlords, Historicals, MiddleManagers, Brokers, Routers) of the `Druid` cluster the user creates a `DruidAutoscaler` CRO with desired configuration. + +5. `KubeDB` Autoscaler operator watches the `DruidAutoscaler` CRO. + +6. `KubeDB` Autoscaler operator generates recommendation using the modified version of kubernetes [official recommender](https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler/pkg/recommender) for different components of the database, as specified in the `DruidAutoscaler` CRO. + +7. If the generated recommendation doesn't match the current resources of the database, then `KubeDB` Autoscaler operator creates a `DruidOpsRequest` CRO to scale the database to match the recommendation generated. + +8. `KubeDB` Ops-manager operator watches the `DruidOpsRequest` CRO. + +9. Then the `KubeDB` Ops-manager operator will scale the database component vertically as specified on the `DruidOpsRequest` CRO. + +In the next docs, we are going to show a step-by-step guide on Autoscaling of various Druid database components using `DruidAutoscaler` CRD. diff --git a/docs/guides/druid/autoscaler/compute/yamls/deep-storage-config.yaml b/docs/guides/druid/autoscaler/compute/yamls/deep-storage-config.yaml new file mode 100644 index 0000000000..3612595828 --- /dev/null +++ b/docs/guides/druid/autoscaler/compute/yamls/deep-storage-config.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Secret +metadata: + name: deep-storage-config + namespace: demo +stringData: + druid.storage.type: "s3" + druid.storage.bucket: "druid" + druid.storage.baseKey: "druid/segments" + druid.s3.accessKey: "minio" + druid.s3.secretKey: "minio123" + druid.s3.protocol: "http" + druid.s3.enablePathStyleAccess: "true" + druid.s3.endpoint.signingRegion: "us-east-1" + druid.s3.endpoint.url: "http://myminio-hl.demo.svc.cluster.local:9000/" + diff --git a/docs/guides/druid/autoscaler/compute/yamls/druid-autoscaler.yaml b/docs/guides/druid/autoscaler/compute/yamls/druid-autoscaler.yaml new file mode 100644 index 0000000000..ef5d96ec78 --- /dev/null +++ b/docs/guides/druid/autoscaler/compute/yamls/druid-autoscaler.yaml @@ -0,0 +1,31 @@ +apiVersion: autoscaling.kubedb.com/v1alpha1 +kind: DruidAutoscaler +metadata: + name: druid-storage-autoscaler + namespace: demo +spec: + databaseRef: + name: druid-cluster + compute: + coordinators: + trigger: "On" + podLifeTimeThreshold: 1m + minAllowed: + cpu: 600m + memory: 2Gi + maxAllowed: + cpu: 1000m + memory: 5Gi + resourceDiffPercentage: 20 + controlledResources: ["cpu", "memory"] + historicals: + trigger: "On" + podLifeTimeThreshold: 1m + minAllowed: + cpu: 600m + memory: 2Gi + maxAllowed: + cpu: 1000m + memory: 5Gi + resourceDiffPercentage: 20 + controlledResources: [ "cpu", "memory"] diff --git a/docs/guides/druid/autoscaler/compute/yamls/druid-cluster.yaml b/docs/guides/druid/autoscaler/compute/yamls/druid-cluster.yaml new file mode 100644 index 0000000000..ffac2b300b --- /dev/null +++ b/docs/guides/druid/autoscaler/compute/yamls/druid-cluster.yaml @@ -0,0 +1,31 @@ +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-cluster + namespace: demo +spec: + version: 28.0.1 + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + historicals: + replicas: 1 + storage: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi + middleManagers: + replicas: 1 + storage: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi + routers: + replicas: 1 + deletionPolicy: Delete diff --git a/docs/guides/druid/autoscaler/storage/_index.md b/docs/guides/druid/autoscaler/storage/_index.md new file mode 100644 index 0000000000..e197ec8429 --- /dev/null +++ b/docs/guides/druid/autoscaler/storage/_index.md @@ -0,0 +1,10 @@ +--- +title: Storage Autoscaling +menu: + docs_{{ .version }}: + identifier: guides-druid-autoscaler-storage + name: Storage Autoscaling + parent: guides-druid-autoscaler + weight: 46 +menu_name: docs_{{ .version }} +--- diff --git a/docs/guides/druid/autoscaler/storage/guide.md b/docs/guides/druid/autoscaler/storage/guide.md new file mode 100644 index 0000000000..02b3571625 --- /dev/null +++ b/docs/guides/druid/autoscaler/storage/guide.md @@ -0,0 +1,896 @@ +--- +title: Druid Topology Autoscaling +menu: + docs_{{ .version }}: + identifier: guides-druid-autoscaler-storage-guide + name: Druid Storage Autoscaling + parent: guides-druid-autoscaler-storage + weight: 20 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- + +> New to KubeDB? Please start [here](/docs/README.md). + +# Storage Autoscaling of a Druid Topology Cluster + +This guide will show you how to use `KubeDB` to autoscale the storage of a Druid Topology cluster. + +## Before You Begin + +- At first, you need to have a Kubernetes cluster, and the `kubectl` command-line tool must be configured to communicate with your cluster. + +- Install `KubeDB` Provisioner, Ops-manager and Autoscaler operator in your cluster following the steps [here](/docs/setup/README.md). + +- Install `Metrics Server` from [here](https://github.com/kubernetes-sigs/metrics-server#installation) + +- Install Prometheus from [here](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack) + +- You must have a `StorageClass` that supports volume expansion. + +- You should be familiar with the following `KubeDB` concepts: + - [Druid](/docs/guides/druid/concepts/druid.md) + - [DruidAutoscaler](/docs/guides/druid/concepts/druidautoscaler.md) + - [DruidOpsRequest](/docs/guides/druid/concepts/druidopsrequest.md) + - [Storage Autoscaling Overview](/docs/guides/druid/autoscaler/storage/overview.md) + +To keep everything isolated, we are going to use a separate namespace called `demo` throughout this tutorial. + +```bash +$ kubectl create ns demo +namespace/demo created +``` + +> **Note:** YAML files used in this tutorial are stored in [docs/examples/druid](/docs/examples/druid) directory of [kubedb/docs](https://github.com/kubedb/docs) repository. + +## Storage Autoscaling of Topology Cluster + +At first verify that your cluster has a storage class, that supports volume expansion. Let's check, + +```bash +$ kubectl get storageclass +NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE +local-path (default) rancher.io/local-path Delete WaitForFirstConsumer false 28h +longhorn (default) driver.longhorn.io Delete Immediate true 28h +longhorn-static driver.longhorn.io Delete Immediate true 28h +``` + +We can see from the output the `longhorn` storage class has `ALLOWVOLUMEEXPANSION` field as true. So, this storage class supports volume expansion. We can use it. + +Now, we are going to deploy a `Druid` topology using a supported version by `KubeDB` operator. Then we are going to apply `DruidAutoscaler` to set up autoscaling. + +### Create External Dependency (Deep Storage) + +Before proceeding further, we need to prepare deep storage, which is one of the external dependency of Druid and used for storing the segments. It is a storage mechanism that Apache Druid does not provide. **Amazon S3**, **Google Cloud Storage**, or **Azure Blob Storage**, **S3-compatible storage** (like **Minio**), or **HDFS** are generally convenient options for deep storage. + +In this tutorial, we will run a `minio-server` as deep storage in our local `kind` cluster using `minio-operator` and create a bucket named `druid` in it, which the deployed druid database will use. + +```bash +$ helm repo add minio https://operator.min.io/ +$ helm repo update minio +$ helm upgrade --install --namespace "minio-operator" --create-namespace "minio-operator" minio/operator --set operator.replicaCount=1 + +$ helm upgrade --install --namespace "demo" --create-namespace druid-minio minio/tenant \ +--set tenant.pools[0].servers=1 \ +--set tenant.pools[0].volumesPerServer=1 \ +--set tenant.pools[0].size=1Gi \ +--set tenant.certificate.requestAutoCert=false \ +--set tenant.buckets[0].name="druid" \ +--set tenant.pools[0].name="default" + +``` + +Now we need to create a `Secret` named `deep-storage-config`. It contains the necessary connection information using which the druid database will connect to the deep storage. + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: deep-storage-config + namespace: demo +stringData: + druid.storage.type: "s3" + druid.storage.bucket: "druid" + druid.storage.baseKey: "druid/segments" + druid.s3.accessKey: "minio" + druid.s3.secretKey: "minio123" + druid.s3.protocol: "http" + druid.s3.enablePathStyleAccess: "true" + druid.s3.endpoint.signingRegion: "us-east-1" + druid.s3.endpoint.url: "http://myminio-hl.demo.svc.cluster.local:9000/" +``` + +Let’s create the `deep-storage-config` Secret shown above: + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/autoscaler/storage/yamls/deep-storage-config.yaml +secret/deep-storage-config created +``` + +### Deploy Druid Cluster + +In this section, we are going to deploy a Druid topology cluster with monitoring enabled and with version `28.0.1`. Then, in the next section we will set up autoscaling for this cluster using `DruidAutoscaler` CRD. Below is the YAML of the `Druid` CR that we are going to create, + +```yaml +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-cluster + namespace: demo +spec: + version: 28.0.1 + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + historicals: + replicas: 1 + storage: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi + storageType: Durable + middleManagers: + replicas: 1 + storage: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi + storageType: Durable + routers: + replicas: 1 + deletionPolicy: Delete + monitor: + agent: prometheus.io/operator + prometheus: + serviceMonitor: + labels: + release: prometheus + interval: 10s +``` + +Let's create the `Druid` CRO we have shown above, + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/autoscaler/storage/yamls/druid-cluster.yaml +druid.kubedb.com/druid-cluster created +``` + +Now, wait until `druid-cluster` has status `Ready`. i.e, + +```bash +$ kubectl get dr -n demo -w +NAME TYPE VERSION STATUS AGE +druid-cluster kubedb.com/v1alpha2 28.0.1 Provisioning 0s +druid-cluster kubedb.com/v1alpha2 28.0.1 Provisioning 24s +. +. +druid-cluster kubedb.com/v1alpha2 28.0.1 Ready 2m20s +``` + +Let's check volume size from petset, and from the persistent volume, + +```bash +$ kubectl get petset -n demo druid-cluster-historicals -o json | jq '.spec.volumeClaimTemplates[].spec.resources.requests.storage' +"1Gi" +$ kubectl get petset -n demo druid-cluster-middleManagers -o json | jq '.spec.volumeClaimTemplates[].spec.resources.requests.storage' +"1Gi" +$ kubectl get pv -n demo +NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE +pvc-2c0ef2aa-0438-4d75-9cb2-c12a176bae6a 1Gi RWO Delete Bound demo/druid-cluster-base-task-dir-druid-cluster-middlemanagers-0 longhorn 95s +pvc-5f4cea5f-e0c8-4339-b67c-9cb8b02ba49d 1Gi RWO Delete Bound demo/druid-cluster-segment-cache-druid-cluster-historicals-0 longhorn 96s +``` + +You can see the petset for both historicals and middleManagers has 1GB storage, and the capacity of all the persistent volume is also 1GB. + +We are now ready to apply the `DruidAutoscaler` CRO to set up storage autoscaling for this cluster(historicals and middleManagers). + +### Storage Autoscaling + +Here, we are going to set up storage autoscaling using a DruidAutoscaler Object. + +#### Create DruidAutoscaler Object + +In order to set up vertical autoscaling for this topology cluster, we have to create a `DruidAutoscaler` CRO with our desired configuration. Below is the YAML of the `DruidAutoscaler` object that we are going to create, + +```yaml +apiVersion: autoscaling.kubedb.com/v1alpha1 +kind: DruidAutoscaler +metadata: + name: druid-storage-autoscaler + namespace: demo +spec: + databaseRef: + name: druid-cluster + storage: + historicals: + expansionMode: "Offline" + trigger: "On" + usageThreshold: 60 + scalingThreshold: 100 + middleManagers: + expansionMode: "Offline" + trigger: "On" + usageThreshold: 60 + scalingThreshold: 100 +``` + +Here, + +- `spec.clusterRef.name` specifies that we are performing vertical scaling operation on `druid-cluster` cluster. +- `spec.storage.historicals.trigger/spec.storage.middleManagers.trigger` specifies that storage autoscaling is enabled for historicals and middleManagers of topology cluster. +- `spec.storage.historicals.usageThreshold/spec.storage.middleManagers.usageThreshold` specifies storage usage threshold, if storage usage exceeds `60%` then storage autoscaling will be triggered. +- `spec.storage.historicals.scalingThreshold/spec.storage.historicals.scalingThreshold` specifies the scaling threshold. Storage will be scaled to `100%` of the current amount. +- It has another field `spec.storage.historicals.expansionMode/spec.storage.middleManagers.expansionMode` to set the opsRequest volumeExpansionMode, which support two values: `Online` & `Offline`. Default value is `Online`. + +Let's create the `DruidAutoscaler` CR we have shown above, + +```bash +$ kubectl apply -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/autoscaler/storage/yamls/druid-storage-autoscaler.yaml +druidautoscaler.autoscaling.kubedb.com/druid-storage-autoscaler created +``` + +#### Storage Autoscaling is set up successfully + +Let's check that the `druidautoscaler` resource is created successfully, + +```bash +$ kubectl get druidautoscaler -n demo +NAME AGE +druid-storage-autoscaler 34s + +$ kubectl describe druidautoscaler -n demo druid-storage-autoscaler +Name: druid-storage-autoscaler +Namespace: demo +Labels: +Annotations: +API Version: autoscaling.kubedb.com/v1alpha1 +Kind: DruidAutoscaler +Metadata: + Creation Timestamp: 2024-10-25T09:52:37Z + Generation: 1 + Managed Fields: + API Version: autoscaling.kubedb.com/v1alpha1 + Fields Type: FieldsV1 + fieldsV1: + f:metadata: + f:annotations: + .: + f:kubectl.kubernetes.io/last-applied-configuration: + f:spec: + .: + f:databaseRef: + f:storage: + .: + f:historicals: + .: + f:expansionMode: + f:scalingThreshold: + f:trigger: + f:usageThreshold: + f:middleManagers: + .: + f:expansionMode: + f:scalingThreshold: + f:trigger: + f:usageThreshold: + Manager: kubectl-client-side-apply + Operation: Update + Time: 2024-10-25T09:52:37Z + API Version: autoscaling.kubedb.com/v1alpha1 + Fields Type: FieldsV1 + fieldsV1: + f:metadata: + f:ownerReferences: + .: + k:{"uid":"712730e8-41ef-4700-b184-825b30ecbc8c"}: + Manager: kubedb-autoscaler + Operation: Update + Time: 2024-10-25T09:52:37Z + Owner References: + API Version: kubedb.com/v1alpha2 + Block Owner Deletion: true + Controller: true + Kind: Druid + Name: druid-cluster + UID: 712730e8-41ef-4700-b184-825b30ecbc8c + Resource Version: 226662 + UID: 57cbd906-a9b7-4649-bfe0-304840bb60c1 +Spec: + Database Ref: + Name: druid-cluster + Ops Request Options: + Apply: IfReady + Storage: + Historicals: + Expansion Mode: Offline + Scaling Rules: + Applies Upto: + Threshold: 100pc + Scaling Threshold: 100 + Trigger: On + Usage Threshold: 60 + Middle Managers: + Expansion Mode: Offline + Scaling Rules: + Applies Upto: + Threshold: 100pc + Scaling Threshold: 100 + Trigger: On + Usage Threshold: 60 +Events: +``` +So, the `druidautoscaler` resource is created successfully. + +Now, for this demo, we are going to manually fill up the persistent volume to exceed the `usageThreshold` using `dd` command to see if storage autoscaling is working or not. + +We are autoscaling volume for both historicals and middleManagers. So we need to fill up the persistent volume for both historicals and middleManagers. + +1. Lets exec into the historicals pod and fill the cluster volume using the following commands: + +```bash +$ kubectl exec -it -n demo druid-cluster-historicals-0 -- bash +bash-5.1$ df -h /druid/data/segments +Filesystem Size Used Available Use% Mounted on +/dev/longhorn/pvc-d4ef15ef-b1af-4a1f-ad25-ad9bc990a2fb 973.4M 92.0K 957.3M 0% /druid/data/segment + +bash-5.1$ dd if=/dev/zero of=/druid/data/segments/file.img bs=600M count=1 +1+0 records in +1+0 records out +629145600 bytes (600.0MB) copied, 46.709228 seconds, 12.8MB/s + +bash-5.1$ df -h /druid/data/segments +Filesystem Size Used Available Use% Mounted on +/dev/longhorn/pvc-d4ef15ef-b1af-4a1f-ad25-ad9bc990a2fb 973.4M 600.1M 357.3M 63% /druid/data/segments +``` + +2. Let's exec into the middleManagers pod and fill the cluster volume using the following commands: + +```bash +$ kubectl exec -it -n demo druid-cluster-middleManagers-0 -- bash +druid@druid-cluster-middleManagers-0:~$ df -h /var/druid/task +Filesystem Size Used Available Use% Mounted on +/dev/longhorn/pvc-2c0ef2aa-0438-4d75-9cb2-c12a176bae6a 973.4M 24.0K 957.4M 0% /var/druid/task +druid@druid-cluster-middleManagers-0:~$ dd if=/dev/zero of=/var/druid/task/file.img bs=600M count=1 +1+0 records in +1+0 records out +629145600 bytes (629 MB, 600 MiB) copied, 3.39618 s, 185 MB/s +druid@druid-cluster-middleManagers-0:~$ df -h /var/druid/task +Filesystem Size Used Available Use% Mounted on +/dev/longhorn/pvc-2c0ef2aa-0438-4d75-9cb2-c12a176bae6a 973.4M 600.0M 357.4M 63% /var/druid/task +``` + +So, from the above output we can see that the storage usage is 63% for both nodes, which exceeded the `usageThreshold` 60%. + +There will be two `DruidOpsRequest` created for both historicals and middleManagers to expand the volume of the cluster for both nodes. +Let's watch the `druidopsrequest` in the demo namespace to see if any `druidopsrequest` object is created. After some time you'll see that a `druidopsrequest` of type `VolumeExpansion` will be created based on the `scalingThreshold`. + +```bash +$ watch kubectl get druidopsrequest -n demo +NAME TYPE STATUS AGE +druidopsrequest.ops.kubedb.com/drops-druid-cluster-gq9huj VolumeExpansion Progressing 46s +druidopsrequest.ops.kubedb.com/drops-druid-cluster-kbw4fd VolumeExpansion Successful 4m46s +``` + +Once ops request has succeeded. Let's wait for the other one to become successful. + +```bash +$ kubectl get druidopsrequest -n demo +NAME TYPE STATUS AGE +druidopsrequest.ops.kubedb.com/drops-druid-cluster-gq9huj VolumeExpansion Successful 3m18s +druidopsrequest.ops.kubedb.com/drops-druid-cluster-kbw4fd VolumeExpansion Successful 7m18s +``` + +We can see from the above output that the both `DruidOpsRequest` has succeeded. If we describe the `DruidOpsRequest` one by one we will get an overview of the steps that were followed to expand the volume of the cluster. + +```bash +$ kubectl describe druidopsrequest -n demo drops-druid-cluster-kbw4fd +Name: drops-druid-cluster-kbw4fd +Namespace: demo +Labels: app.kubernetes.io/component=database + app.kubernetes.io/instance=druid-cluster + app.kubernetes.io/managed-by=kubedb.com + app.kubernetes.io/name=druids.kubedb.com +Annotations: +API Version: ops.kubedb.com/v1alpha1 +Kind: DruidOpsRequest +Metadata: + Creation Timestamp: 2024-10-25T09:57:14Z + Generation: 1 + Managed Fields: + API Version: ops.kubedb.com/v1alpha1 + Fields Type: FieldsV1 + fieldsV1: + f:metadata: + f:labels: + .: + f:app.kubernetes.io/component: + f:app.kubernetes.io/instance: + f:app.kubernetes.io/managed-by: + f:app.kubernetes.io/name: + f:ownerReferences: + .: + k:{"uid":"57cbd906-a9b7-4649-bfe0-304840bb60c1"}: + f:spec: + .: + f:apply: + f:databaseRef: + f:type: + f:volumeExpansion: + .: + f:historicals: + f:mode: + Manager: kubedb-autoscaler + Operation: Update + Time: 2024-10-25T09:57:14Z + API Version: ops.kubedb.com/v1alpha1 + Fields Type: FieldsV1 + fieldsV1: + f:status: + .: + f:conditions: + f:observedGeneration: + f:phase: + Manager: kubedb-ops-manager + Operation: Update + Subresource: status + Time: 2024-10-25T10:00:20Z + Owner References: + API Version: autoscaling.kubedb.com/v1alpha1 + Block Owner Deletion: true + Controller: true + Kind: DruidAutoscaler + Name: druid-storage-autoscaler + UID: 57cbd906-a9b7-4649-bfe0-304840bb60c1 + Resource Version: 228016 + UID: 1fa750bb-2db3-4684-a7cf-1b3047bc07af +Spec: + Apply: IfReady + Database Ref: + Name: druid-cluster + Type: VolumeExpansion + Volume Expansion: + Historicals: 2041405440 + Mode: Offline +Status: + Conditions: + Last Transition Time: 2024-10-25T09:57:14Z + Message: Druid ops-request has started to expand volume of druid nodes. + Observed Generation: 1 + Reason: VolumeExpansion + Status: True + Type: VolumeExpansion + Last Transition Time: 2024-10-25T09:57:22Z + Message: get pet set; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: GetPetSet + Last Transition Time: 2024-10-25T09:57:22Z + Message: is pet set deleted; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: IsPetSetDeleted + Last Transition Time: 2024-10-25T09:57:32Z + Message: successfully deleted the petSets with orphan propagation policy + Observed Generation: 1 + Reason: OrphanPetSetPods + Status: True + Type: OrphanPetSetPods + Last Transition Time: 2024-10-25T09:57:37Z + Message: get pod; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: GetPod + Last Transition Time: 2024-10-25T09:57:37Z + Message: is ops req patched; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: IsOpsReqPatched + Last Transition Time: 2024-10-25T09:57:37Z + Message: create pod; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: CreatePod + Last Transition Time: 2024-10-25T09:57:42Z + Message: get pvc; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: GetPvc + Last Transition Time: 2024-10-25T09:57:42Z + Message: is pvc patched; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: IsPvcPatched + Last Transition Time: 2024-10-25T09:59:27Z + Message: compare storage; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: CompareStorage + Last Transition Time: 2024-10-25T09:59:27Z + Message: create; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: Create + Last Transition Time: 2024-10-25T09:59:35Z + Message: is druid running; ConditionStatus:False + Observed Generation: 1 + Status: False + Type: IsDruidRunning + Last Transition Time: 2024-10-25T09:59:57Z + Message: successfully updated historicals node PVC sizes + Observed Generation: 1 + Reason: UpdateHistoricalsNodePVCs + Status: True + Type: UpdateHistoricalsNodePVCs + Last Transition Time: 2024-10-25T10:00:15Z + Message: successfully reconciled the Druid resources + Observed Generation: 1 + Reason: UpdatePetSets + Status: True + Type: UpdatePetSets + Last Transition Time: 2024-10-25T10:00:20Z + Message: PetSet is recreated + Observed Generation: 1 + Reason: ReadyPetSets + Status: True + Type: ReadyPetSets + Last Transition Time: 2024-10-25T10:00:20Z + Message: Successfully completed volumeExpansion for Druid + Observed Generation: 1 + Reason: Successful + Status: True + Type: Successful + Observed Generation: 1 + Phase: Successful +Events: + Type Reason Age From Message + ---- ------ ---- ---- ------- + Normal Starting 8m29s KubeDB Ops-manager Operator Start processing for DruidOpsRequest: demo/drops-druid-cluster-kbw4fd + Normal Starting 8m29s KubeDB Ops-manager Operator Pausing Druid databse: demo/druid-cluster + Normal Successful 8m29s KubeDB Ops-manager Operator Successfully paused Druid database: demo/druid-cluster for DruidOpsRequest: drops-druid-cluster-kbw4fd + Warning get pet set; ConditionStatus:True 8m21s KubeDB Ops-manager Operator get pet set; ConditionStatus:True + Warning is pet set deleted; ConditionStatus:True 8m21s KubeDB Ops-manager Operator is pet set deleted; ConditionStatus:True + Warning get pet set; ConditionStatus:True 8m16s KubeDB Ops-manager Operator get pet set; ConditionStatus:True + Normal OrphanPetSetPods 8m11s KubeDB Ops-manager Operator successfully deleted the petSets with orphan propagation policy + Warning get pod; ConditionStatus:True 8m6s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning is ops req patched; ConditionStatus:True 8m6s KubeDB Ops-manager Operator is ops req patched; ConditionStatus:True + Warning create pod; ConditionStatus:True 8m6s KubeDB Ops-manager Operator create pod; ConditionStatus:True + Warning get pod; ConditionStatus:True 8m1s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 8m1s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning is pvc patched; ConditionStatus:True 8m1s KubeDB Ops-manager Operator is pvc patched; ConditionStatus:True + Warning compare storage; ConditionStatus:False 8m1s KubeDB Ops-manager Operator compare storage; ConditionStatus:False + Warning get pod; ConditionStatus:True 7m56s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 7m56s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 7m51s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 7m51s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 7m46s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 7m46s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 7m41s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 7m41s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 7m36s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 7m36s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 7m31s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 7m31s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 7m26s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 7m26s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 7m21s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 7m21s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 7m16s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 7m16s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 7m11s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 7m11s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 7m6s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 7m6s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 7m1s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 7m1s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 6m56s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 6m56s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 6m51s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 6m51s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 6m46s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 6m46s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 6m41s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 6m41s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 6m36s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 6m36s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 6m31s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 6m31s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 6m26s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 6m26s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 6m21s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 6m21s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 6m16s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 6m16s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning compare storage; ConditionStatus:True 6m16s KubeDB Ops-manager Operator compare storage; ConditionStatus:True + Warning create; ConditionStatus:True 6m16s KubeDB Ops-manager Operator create; ConditionStatus:True + Warning is ops req patched; ConditionStatus:True 6m16s KubeDB Ops-manager Operator is ops req patched; ConditionStatus:True + Warning get pod; ConditionStatus:True 6m11s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning is druid running; ConditionStatus:False 6m8s KubeDB Ops-manager Operator is druid running; ConditionStatus:False + Warning get pod; ConditionStatus:True 6m6s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pod; ConditionStatus:True 6m1s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pod; ConditionStatus:True 5m56s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pod; ConditionStatus:True 5m51s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Normal UpdateHistoricalsNodePVCs 5m46s KubeDB Ops-manager Operator successfully updated historicals node PVC sizes + Normal UpdatePetSets 5m28s KubeDB Ops-manager Operator successfully reconciled the Druid resources + Warning get pet set; ConditionStatus:True 5m23s KubeDB Ops-manager Operator get pet set; ConditionStatus:True + Normal ReadyPetSets 5m23s KubeDB Ops-manager Operator PetSet is recreated + Normal Starting 5m23s KubeDB Ops-manager Operator Resuming Druid database: demo/druid-cluster + Normal Successful 5m23s KubeDB Ops-manager Operator Successfully resumed Druid database: demo/druid-cluster for DruidOpsRequest: drops-druid-cluster-kbw4fd + Normal UpdatePetSets 5m18s KubeDB Ops-manager Operator successfully reconciled the Druid resources + Normal UpdatePetSets 5m8s KubeDB Ops-manager Operator successfully reconciled the Druid resources + Normal UpdatePetSets 4m57s KubeDB Ops-manager Operator successfully reconciled the Druid resources +``` + +```bash +$ kubectl describe druidopsrequest -n demo drops-druid-cluster-gq9huj +Name: drops-druid-cluster-gq9huj +Namespace: demo +Labels: app.kubernetes.io/component=database + app.kubernetes.io/instance=druid-cluster + app.kubernetes.io/managed-by=kubedb.com + app.kubernetes.io/name=druids.kubedb.com +Annotations: +API Version: ops.kubedb.com/v1alpha1 +Kind: DruidOpsRequest +Metadata: + Creation Timestamp: 2024-10-25T10:01:14Z + Generation: 1 + Managed Fields: + API Version: ops.kubedb.com/v1alpha1 + Fields Type: FieldsV1 + fieldsV1: + f:metadata: + f:labels: + .: + f:app.kubernetes.io/component: + f:app.kubernetes.io/instance: + f:app.kubernetes.io/managed-by: + f:app.kubernetes.io/name: + f:ownerReferences: + .: + k:{"uid":"57cbd906-a9b7-4649-bfe0-304840bb60c1"}: + f:spec: + .: + f:apply: + f:databaseRef: + f:type: + f:volumeExpansion: + .: + f:middleManagers: + f:mode: + Manager: kubedb-autoscaler + Operation: Update + Time: 2024-10-25T10:01:14Z + API Version: ops.kubedb.com/v1alpha1 + Fields Type: FieldsV1 + fieldsV1: + f:status: + .: + f:conditions: + f:observedGeneration: + f:phase: + Manager: kubedb-ops-manager + Operation: Update + Subresource: status + Time: 2024-10-25T10:04:12Z + Owner References: + API Version: autoscaling.kubedb.com/v1alpha1 + Block Owner Deletion: true + Controller: true + Kind: DruidAutoscaler + Name: druid-storage-autoscaler + UID: 57cbd906-a9b7-4649-bfe0-304840bb60c1 + Resource Version: 228783 + UID: 3b97380c-e867-467f-b366-4b50c7cd7d6d +Spec: + Apply: IfReady + Database Ref: + Name: druid-cluster + Type: VolumeExpansion + Volume Expansion: + Middle Managers: 2041405440 + Mode: Offline +Status: + Conditions: + Last Transition Time: 2024-10-25T10:01:14Z + Message: Druid ops-request has started to expand volume of druid nodes. + Observed Generation: 1 + Reason: VolumeExpansion + Status: True + Type: VolumeExpansion + Last Transition Time: 2024-10-25T10:01:22Z + Message: get pet set; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: GetPetSet + Last Transition Time: 2024-10-25T10:01:22Z + Message: is pet set deleted; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: IsPetSetDeleted + Last Transition Time: 2024-10-25T10:01:32Z + Message: successfully deleted the petSets with orphan propagation policy + Observed Generation: 1 + Reason: OrphanPetSetPods + Status: True + Type: OrphanPetSetPods + Last Transition Time: 2024-10-25T10:01:37Z + Message: get pod; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: GetPod + Last Transition Time: 2024-10-25T10:01:37Z + Message: is ops req patched; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: IsOpsReqPatched + Last Transition Time: 2024-10-25T10:01:37Z + Message: create pod; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: CreatePod + Last Transition Time: 2024-10-25T10:01:42Z + Message: get pvc; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: GetPvc + Last Transition Time: 2024-10-25T10:01:42Z + Message: is pvc patched; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: IsPvcPatched + Last Transition Time: 2024-10-25T10:03:32Z + Message: compare storage; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: CompareStorage + Last Transition Time: 2024-10-25T10:03:32Z + Message: create; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: Create + Last Transition Time: 2024-10-25T10:03:40Z + Message: is druid running; ConditionStatus:False + Observed Generation: 1 + Status: False + Type: IsDruidRunning + Last Transition Time: 2024-10-25T10:03:52Z + Message: successfully updated middleManagers node PVC sizes + Observed Generation: 1 + Reason: UpdateMiddleManagersNodePVCs + Status: True + Type: UpdateMiddleManagersNodePVCs + Last Transition Time: 2024-10-25T10:04:07Z + Message: successfully reconciled the Druid resources + Observed Generation: 1 + Reason: UpdatePetSets + Status: True + Type: UpdatePetSets + Last Transition Time: 2024-10-25T10:04:12Z + Message: PetSet is recreated + Observed Generation: 1 + Reason: ReadyPetSets + Status: True + Type: ReadyPetSets + Last Transition Time: 2024-10-25T10:04:12Z + Message: Successfully completed volumeExpansion for Druid + Observed Generation: 1 + Reason: Successful + Status: True + Type: Successful + Observed Generation: 1 + Phase: Successful +Events: + Type Reason Age From Message + ---- ------ ---- ---- ------- + Normal Starting 5m33s KubeDB Ops-manager Operator Start processing for DruidOpsRequest: demo/drops-druid-cluster-gq9huj + Normal Starting 5m33s KubeDB Ops-manager Operator Pausing Druid databse: demo/druid-cluster + Normal Successful 5m33s KubeDB Ops-manager Operator Successfully paused Druid database: demo/druid-cluster for DruidOpsRequest: drops-druid-cluster-gq9huj + Warning get pet set; ConditionStatus:True 5m25s KubeDB Ops-manager Operator get pet set; ConditionStatus:True + Warning is pet set deleted; ConditionStatus:True 5m25s KubeDB Ops-manager Operator is pet set deleted; ConditionStatus:True + Warning get pet set; ConditionStatus:True 5m20s KubeDB Ops-manager Operator get pet set; ConditionStatus:True + Normal OrphanPetSetPods 5m15s KubeDB Ops-manager Operator successfully deleted the petSets with orphan propagation policy + Warning get pod; ConditionStatus:True 5m10s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning is ops req patched; ConditionStatus:True 5m10s KubeDB Ops-manager Operator is ops req patched; ConditionStatus:True + Warning create pod; ConditionStatus:True 5m10s KubeDB Ops-manager Operator create pod; ConditionStatus:True + Warning get pod; ConditionStatus:True 5m5s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 5m5s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning is pvc patched; ConditionStatus:True 5m5s KubeDB Ops-manager Operator is pvc patched; ConditionStatus:True + Warning compare storage; ConditionStatus:False 5m5s KubeDB Ops-manager Operator compare storage; ConditionStatus:False + Warning get pod; ConditionStatus:True 5m KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 5m KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 4m55s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 4m55s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 4m50s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 4m50s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 4m45s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 4m45s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 4m40s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 4m40s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 4m35s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 4m35s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 4m30s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 4m30s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 4m25s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 4m25s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 4m20s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 4m20s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 4m15s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 4m15s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 4m10s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 4m10s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 4m5s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 4m5s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 4m KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 4m KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 3m55s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 3m55s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 3m50s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 3m50s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 3m45s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 3m45s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 3m40s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 3m40s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 3m35s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 3m35s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 3m30s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 3m30s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 3m25s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 3m25s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 3m20s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 3m20s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 3m15s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 3m15s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning compare storage; ConditionStatus:True 3m15s KubeDB Ops-manager Operator compare storage; ConditionStatus:True + Warning create; ConditionStatus:True 3m15s KubeDB Ops-manager Operator create; ConditionStatus:True + Warning is ops req patched; ConditionStatus:True 3m15s KubeDB Ops-manager Operator is ops req patched; ConditionStatus:True + Warning get pod; ConditionStatus:True 3m10s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning is druid running; ConditionStatus:False 3m7s KubeDB Ops-manager Operator is druid running; ConditionStatus:False + Warning get pod; ConditionStatus:True 3m5s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pod; ConditionStatus:True 3m KubeDB Ops-manager Operator get pod; ConditionStatus:True + Normal UpdateMiddleManagersNodePVCs 2m55s KubeDB Ops-manager Operator successfully updated middleManagers node PVC sizes + Normal UpdatePetSets 2m40s KubeDB Ops-manager Operator successfully reconciled the Druid resources + Warning get pet set; ConditionStatus:True 2m35s KubeDB Ops-manager Operator get pet set; ConditionStatus:True + Normal ReadyPetSets 2m35s KubeDB Ops-manager Operator PetSet is recreated + Normal Starting 2m35s KubeDB Ops-manager Operator Resuming Druid database: demo/druid-cluster + Normal Successful 2m35s KubeDB Ops-manager Operator Successfully resumed Druid database: demo/druid-cluster for DruidOpsRequest: drops-druid-cluster-gq9huj +``` + +Now, we are going to verify from the `Petset`, and the `Persistent Volume` whether the volume of the topology cluster has expanded to meet the desired state, Let's check, + +```bash +$ kubectl get petset -n demo druid-cluster-historicals -o json | jq '.spec.volumeClaimTemplates[].spec.resources.requests.storage' +"2041405440" +$ kubectl get petset -n demo druid-cluster-middleManagers -o json | jq '.spec.volumeClaimTemplates[].spec.resources.requests.storage' +"2041405440" +$ kubectl get pv -n demo +NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE +pvc-2c0ef2aa-0438-4d75-9cb2-c12a176bae6a 1948Mi RWO Delete Bound demo/druid-cluster-base-task-dir-druid-cluster-middlemanagers-0 longhorn 19m +pvc-5f4cea5f-e0c8-4339-b67c-9cb8b02ba49d 1948Mi RWO Delete Bound demo/druid-cluster-segment-cache-druid-cluster-historicals-0 longhorn 19m +``` + +The above output verifies that we have successfully autoscaled the volume of the Druid topology cluster for both historicals and middleManagers. + +## Cleaning Up + +To clean up the Kubernetes resources created by this tutorial, run: + +```bash +kubectl delete druidopsrequests -n demo drops-druid-cluster-gq9huj drops-druid-cluster-kbw4fd +kubectl delete druidutoscaler -n demo druid-storage-autoscaler +kubectl delete dr -n demo druid-cluster +``` + +## Next Steps + +- Detail concepts of [Druid object](/docs/guides/druid/concepts/druid.md). +- Different Druid topology clustering modes [here](/docs/guides/druid/clustering/_index.md). +- Monitor your Druid database with KubeDB using [out-of-the-box Prometheus operator](/docs/guides/druid/monitoring/using-prometheus-operator.md). + +[//]: # (- Monitor your Druid database with KubeDB using [out-of-the-box builtin-Prometheus](/docs/guides/druid/monitoring/using-builtin-prometheus.md).) +- Want to hack on KubeDB? Check our [contribution guidelines](/docs/CONTRIBUTING.md). diff --git a/docs/guides/druid/autoscaler/storage/images/storage-autoscaling.png b/docs/guides/druid/autoscaler/storage/images/storage-autoscaling.png new file mode 100644 index 0000000000000000000000000000000000000000..a48b564e1cd28537d8b7520a09eaa0889a6b3940 GIT binary patch literal 66996 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
7Y84b182{+^dgiMU(d2U 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 literal 0 HcmV?d00001 diff --git a/docs/guides/druid/autoscaler/storage/overview.md b/docs/guides/druid/autoscaler/storage/overview.md new file mode 100644 index 0000000000..607e246032 --- /dev/null +++ b/docs/guides/druid/autoscaler/storage/overview.md @@ -0,0 +1,55 @@ +--- +title: Druid Storage Autoscaling Overview +menu: + docs_{{ .version }}: + identifier: guides-druid-autoscaler-storage-overview + name: Overview + parent: guides-druid-autoscaler-storage + weight: 10 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- + +> New to KubeDB? Please start [here](/docs/README.md). + +# Druid Vertical Autoscaling + +This guide will give an overview on how KubeDB Autoscaler operator autoscales the database storage using `druidautoscaler` crd. + +## Before You Begin + +- You should be familiar with the following `KubeDB` concepts: + - [Druid](/docs/guides/druid/concepts/druid.md) + - [DruidAutoscaler](/docs/guides/druid/concepts/druidautoscaler.md) + - [DruidOpsRequest](/docs/guides/druid/concepts/druidopsrequest.md) + +## How Storage Autoscaling Works + +The following diagram shows how KubeDB Autoscaler operator autoscales the resources of `Druid` cluster components. Open the image in a new tab to see the enlarged version. + +
+  Storage Auto Scaling process of Druid +
Fig: Storage Auto Scaling process of Druid
+
+ +The Auto Scaling process consists of the following steps: + +1. At first, a user creates a `Druid` Custom Resource (CR). + +2. `KubeDB` Provisioner operator watches the `Druid` CR. + +3. When the operator finds a `Druid` CR, it creates required number of `PetSets` and related necessary stuff like secrets, services, etc. + +4. Each PetSet creates a Persistent Volume according to the Volume Claim Template provided in the petset configuration. + +5. Then, in order to set up storage autoscaling of the druid data nodes (i.e. Historicals, MiddleManagers) of the `Druid` cluster, the user creates a `DruidAutoscaler` CRO with desired configuration. + +6. `KubeDB` Autoscaler operator watches the `DruidAutoscaler` CRO. + +7. `KubeDB` Autoscaler operator continuously watches persistent volumes of the clusters to check if it exceeds the specified usage threshold. If the usage exceeds the specified usage threshold, then `KubeDB` Autoscaler operator creates a `DruidOpsRequest` to expand the storage of the database. + +8. `KubeDB` Ops-manager operator watches the `DruidOpsRequest` CRO. + +9. Then the `KubeDB` Ops-manager operator will expand the storage of the cluster component as specified on the `DruidOpsRequest` CRO. + +In the next docs, we are going to show a step-by-step guide on Autoscaling storage of various Druid cluster components using `DruidAutoscaler` CRD. diff --git a/docs/guides/druid/autoscaler/storage/yamls/deep-storage-config.yaml b/docs/guides/druid/autoscaler/storage/yamls/deep-storage-config.yaml new file mode 100644 index 0000000000..3612595828 --- /dev/null +++ b/docs/guides/druid/autoscaler/storage/yamls/deep-storage-config.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Secret +metadata: + name: deep-storage-config + namespace: demo +stringData: + druid.storage.type: "s3" + druid.storage.bucket: "druid" + druid.storage.baseKey: "druid/segments" + druid.s3.accessKey: "minio" + druid.s3.secretKey: "minio123" + druid.s3.protocol: "http" + druid.s3.enablePathStyleAccess: "true" + druid.s3.endpoint.signingRegion: "us-east-1" + druid.s3.endpoint.url: "http://myminio-hl.demo.svc.cluster.local:9000/" + diff --git a/docs/guides/druid/autoscaler/storage/yamls/druid-cluster.yaml b/docs/guides/druid/autoscaler/storage/yamls/druid-cluster.yaml new file mode 100644 index 0000000000..5415590a2b --- /dev/null +++ b/docs/guides/druid/autoscaler/storage/yamls/druid-cluster.yaml @@ -0,0 +1,40 @@ +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-cluster + namespace: demo +spec: + version: 28.0.1 + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + historicals: + replicas: 1 + storage: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi + storageType: Durable + middleManagers: + replicas: 1 + storage: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi + storageType: Durable + routers: + replicas: 1 + deletionPolicy: Delete + monitor: + agent: prometheus.io/operator + prometheus: + serviceMonitor: + labels: + release: prometheus + interval: 10s diff --git a/docs/guides/druid/autoscaler/storage/yamls/druid-storage-autoscaler.yaml b/docs/guides/druid/autoscaler/storage/yamls/druid-storage-autoscaler.yaml new file mode 100644 index 0000000000..d1a2f5c438 --- /dev/null +++ b/docs/guides/druid/autoscaler/storage/yamls/druid-storage-autoscaler.yaml @@ -0,0 +1,19 @@ +apiVersion: autoscaling.kubedb.com/v1alpha1 +kind: DruidAutoscaler +metadata: + name: druid-storage-autoscaler + namespace: demo +spec: + databaseRef: + name: druid-cluster + storage: + historicals: + expansionMode: "Offline" + trigger: "On" + usageThreshold: 60 + scalingThreshold: 100 + middleManagers: + expansionMode: "Offline" + trigger: "On" + usageThreshold: 60 + scalingThreshold: 100 diff --git a/docs/guides/druid/backup/_index.md b/docs/guides/druid/backup/_index.md index bb47dcc106..31146d6c14 100644 --- a/docs/guides/druid/backup/_index.md +++ b/docs/guides/druid/backup/_index.md @@ -5,6 +5,6 @@ menu: identifier: guides-druid-backup name: Backup & Restore parent: guides-druid - weight: 40 + weight: 50 menu_name: docs_{{ .version }} --- \ No newline at end of file diff --git a/docs/guides/druid/backup/application-level/index.md b/docs/guides/druid/backup/application-level/index.md index 4c6394ca81..627c865406 100644 --- a/docs/guides/druid/backup/application-level/index.md +++ b/docs/guides/druid/backup/application-level/index.md @@ -20,7 +20,7 @@ This guide will give you how you can take application-level backup and restore y ## Before You Begin - At first, you need to have a Kubernetes cluster, and the `kubectl` command-line tool must be configured to communicate with your cluster. If you do not already have a cluster, you can create one by using `Minikube` or `Kind`. -- Install `KubeDB` in your cluster following the steps [here](/docs/setup/README.md). +- Now, install KubeDB cli on your workstation and KubeDB operator in your cluster following the steps [here](/docs/setup/README.md) and make sure to include the flags `--set global.featureGates.Druid=true` to ensure **Druid CRD** and `--set global.featureGates.ZooKeeper=true` to ensure **ZooKeeper CRD** as Druid depends on ZooKeeper for external dependency with helm command. - Install `KubeStash` in your cluster following the steps [here](https://kubestash.com/docs/latest/setup/install/kubestash). - Install KubeStash `kubectl` plugin following the steps [here](https://kubestash.com/docs/latest/setup/install/kubectl-plugin/). - If you are not familiar with how KubeStash backup and restore Druid databases, please check the following guide [here](/docs/guides/druid/backup/overview/index.md). @@ -52,7 +52,6 @@ This section will demonstrate how to take application-level backup of a `Druid` ## Deploy Sample Druid Database - **Create External Dependency (Deep Storage):** One of the external dependency of Druid is deep storage where the segments are stored. It is a storage mechanism that Apache Druid does not provide. **Amazon S3**, **Google Cloud Storage**, or **Azure Blob Storage**, **S3-compatible storage** (like **Minio**), or **HDFS** are generally convenient options for deep storage. diff --git a/docs/guides/druid/backup/auto-backup/index.md b/docs/guides/druid/backup/auto-backup/index.md index 3c16e8bf33..d2ba2b5bbc 100644 --- a/docs/guides/druid/backup/auto-backup/index.md +++ b/docs/guides/druid/backup/auto-backup/index.md @@ -20,7 +20,7 @@ In this tutorial, we are going to show how you can configure a backup blueprint ## Before You Begin - At first, you need to have a Kubernetes cluster, and the `kubectl` command-line tool must be configured to communicate with your cluster. If you do not already have a cluster, you can create one by using `Minikube` or `Kind`. -- Install `KubeDB` in your cluster following the steps [here](/docs/setup/README.md). +- Now, install KubeDB cli on your workstation and KubeDB operator in your cluster following the steps [here](/docs/setup/README.md) and make sure to include the flags `--set global.featureGates.Druid=true` to ensure **Druid CRD** and `--set global.featureGates.ZooKeeper=true` to ensure **ZooKeeper CRD** as Druid depends on ZooKeeper for external dependency with helm command. - Install `KubeStash` in your cluster following the steps [here](https://kubestash.com/docs/latest/setup/install/kubestash). - Install KubeStash `kubectl` plugin following the steps [here](https://kubestash.com/docs/latest/setup/install/kubectl-plugin/). - If you are not familiar with how KubeStash backup and restore Druid databases, please check the following guide [here](/docs/guides/druid/backup/overview/index.md). diff --git a/docs/guides/druid/backup/cross-ns-dependencies/index.md b/docs/guides/druid/backup/cross-ns-dependencies/index.md index a3f200ec6f..9cbb5a066e 100644 --- a/docs/guides/druid/backup/cross-ns-dependencies/index.md +++ b/docs/guides/druid/backup/cross-ns-dependencies/index.md @@ -22,7 +22,7 @@ This guide will give you how you can take [Application Level Backup](https://git ## Before You Begin - At first, you need to have a Kubernetes cluster, and the `kubectl` command-line tool must be configured to communicate with your cluster. If you do not already have a cluster, you can create one by using `Minikube` or `Kind`. -- Install `KubeDB` in your cluster following the steps [here](/docs/setup/README.md). +- Now, install KubeDB cli on your workstation and KubeDB operator in your cluster following the steps [here](/docs/setup/README.md) and make sure to include the flags `--set global.featureGates.Druid=true` to ensure **Druid CRD** and `--set global.featureGates.ZooKeeper=true` to ensure **ZooKeeper CRD** as Druid depends on ZooKeeper for external dependency with helm command. - Install `KubeStash` in your cluster following the steps [here](https://kubestash.com/docs/latest/setup/install/kubestash). - Install KubeStash `kubectl` plugin following the steps [here](https://kubestash.com/docs/latest/setup/install/kubectl-plugin/). - If you are not familiar with how KubeStash backup and restore Druid databases, please check the following guide [here](/docs/guides/druid/backup/overview/index.md). diff --git a/docs/guides/druid/backup/logical/index.md b/docs/guides/druid/backup/logical/index.md index dbce094ab8..e6e1d06447 100644 --- a/docs/guides/druid/backup/logical/index.md +++ b/docs/guides/druid/backup/logical/index.md @@ -20,7 +20,7 @@ This guide will give you how you can take backup and restore your `Druid` databa ## Before You Begin - At first, you need to have a Kubernetes cluster, and the `kubectl` command-line tool must be configured to communicate with your cluster. If you do not already have a cluster, you can create one by using `Minikube` or `Kind`. -- Install `KubeDB` in your cluster following the steps [here](/docs/setup/README.md). +- Now, install KubeDB cli on your workstation and KubeDB operator in your cluster following the steps [here](/docs/setup/README.md) and make sure to include the flags `--set global.featureGates.Druid=true` to ensure **Druid CRD** and `--set global.featureGates.ZooKeeper=true` to ensure **ZooKeeper CRD** as Druid depends on ZooKeeper for external dependency with helm command. - Install `KubeStash` in your cluster following the steps [here](https://kubestash.com/docs/latest/setup/install/kubestash). - Install KubeStash `kubectl` plugin following the steps [here](https://kubestash.com/docs/latest/setup/install/kubectl-plugin/). - If you are not familiar with how KubeStash backup and restore Druid databases, please check the following guide [here](/docs/guides/druid/backup/overview/index.md). diff --git a/docs/guides/druid/backup/overview/index.md b/docs/guides/druid/backup/overview/index.md index c8adef63e6..723754834f 100644 --- a/docs/guides/druid/backup/overview/index.md +++ b/docs/guides/druid/backup/overview/index.md @@ -2,7 +2,7 @@ title: Backup & Restore Druid Overview menu: docs_{{ .version }}: - identifier: guides-druid-backup-overview + identifier: guides-druid-backup-guide name: Overview parent: guides-druid-backup weight: 10 diff --git a/docs/guides/druid/clustering/_index.md b/docs/guides/druid/clustering/_index.md new file mode 100644 index 0000000000..20b929a8a2 --- /dev/null +++ b/docs/guides/druid/clustering/_index.md @@ -0,0 +1,10 @@ +--- +title: Druid Clustering +menu: + docs_{{ .version }}: + identifier: guides-druid-clustering + name: Clustering + parent: guides-druid + weight: 30 +menu_name: docs_{{ .version }} +--- diff --git a/docs/guides/druid/clustering/guide/index.md b/docs/guides/druid/clustering/guide/index.md new file mode 100644 index 0000000000..b062348a72 --- /dev/null +++ b/docs/guides/druid/clustering/guide/index.md @@ -0,0 +1,925 @@ +--- +title: Druid Topology Cluster Guide +menu: + docs_{{ .version }}: + identifier: guides-druid-clustering-guide + name: Deploy Druid Cluster + parent: guides-druid-clustering + weight: 20 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- + +> New to KubeDB? Please start [here](/docs/README.md). + +# KubeDB - Druid Cluster + +This tutorial will show you how to use KubeDB to provision a Druid Cluster. + +## Before You Begin + +Before proceeding: + +- Read [druid topology cluster overview](/docs/guides/druid/clustering/overview/index.md) to get a basic idea about the design and architecture of Druid. + +- You need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. If you do not already have a cluster, you can create one by using [kind](https://kind.sigs.k8s.io/docs/user/quick-start/). + +- Now, install KubeDB cli on your workstation and KubeDB operator in your cluster following the steps [here](/docs/setup/README.md) and make sure to include the flags `--set global.featureGates.Druid=true` to ensure **Druid CRD** and `--set global.featureGates.ZooKeeper=true` to ensure **ZooKeeper CRD** as Druid depends on ZooKeeper for external dependency with helm command. + +- To keep things isolated, this tutorial uses a separate namespace called `demo` throughout this tutorial. Run the following command to prepare your cluster for this tutorial: + + ```bash + $ kubectl create ns demo + namespace/demo created + ``` + +> Note: The yaml files used in this tutorial are stored in [docs/guides/druid/clustering/topology-cluster-guide/yamls](https://github.com/kubedb/docs/tree/{{< param "info.version" >}}/docs/guides/druid/clustering/topology-cluster-guide/yamls) folder in GitHub repository [kubedb/docs](https://github.com/kubedb/docs). + +## Create External Dependency (Deep Storage) + +Before proceeding further, we need to prepare deep storage, which is one of the external dependency of Druid and used for storing the segments. It is a storage mechanism that Apache Druid does not provide. **Amazon S3**, **Google Cloud Storage**, or **Azure Blob Storage**, **S3-compatible storage** (like **Minio**), or **HDFS** are generally convenient options for deep storage. + +In this tutorial, we will run a `minio-server` as deep storage in our local `kind` cluster using `minio-operator` and create a bucket named `druid` in it, which the deployed druid database will use. + +```bash + +$ helm repo add minio https://operator.min.io/ +$ helm repo update minio +$ helm upgrade --install --namespace "minio-operator" --create-namespace "minio-operator" minio/operator --set operator.replicaCount=1 + +$ helm upgrade --install --namespace "demo" --create-namespace druid-minio minio/tenant \ +--set tenant.pools[0].servers=1 \ +--set tenant.pools[0].volumesPerServer=1 \ +--set tenant.pools[0].size=1Gi \ +--set tenant.certificate.requestAutoCert=false \ +--set tenant.buckets[0].name="druid" \ +--set tenant.pools[0].name="default" + +``` + +Now we need to create a `Secret` named `deep-storage-config`. It contains the necessary connection information using which the druid database will connect to the deep storage. + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: deep-storage-config + namespace: demo +stringData: + druid.storage.type: "s3" + druid.storage.bucket: "druid" + druid.storage.baseKey: "druid/segments" + druid.s3.accessKey: "minio" + druid.s3.secretKey: "minio123" + druid.s3.protocol: "http" + druid.s3.enablePathStyleAccess: "true" + druid.s3.endpoint.signingRegion: "us-east-1" + druid.s3.endpoint.url: "http://myminio-hl.demo.svc.cluster.local:9000/" +``` + +Let’s create the `deep-storage-config` Secret shown above: + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/backup/application-level/examples/deep-storage-config.yaml +secret/deep-storage-config created +``` + +## Deploy Druid Cluster + +The following is an example `Druid` object which creates a Druid cluster of six nodes (coordinators, overlords, brokers, routers, historicals and middleManager). Each with one replica. + +```yaml +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-cluster + namespace: demo +spec: + version: 28.0.1 + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + routers: + replicas: 1 + deletionPolicy: Delete +``` + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/clustering/guide/yamls/druid-with-monitoring.yaml +druid.kubedb.com/druid-cluster created +``` + +KubeDB operator watches for `Druid` objects using Kubernetes API. When a `Druid` object is created, KubeDB operator will create new PetSets and Services with the matching Druid object name. KubeDB operator will also create a governing service for the PetSet with the name `-pods`. + +```bash +$ kubectl describe druid -n demo druid-cluster +Name: druid-cluster +Namespace: demo +Labels: +Annotations: +API Version: kubedb.com/v1alpha2 +Kind: Druid +Metadata: + Creation Timestamp: 2024-10-21T06:01:32Z + Finalizers: + kubedb.com/druid + Generation: 1 + Managed Fields: + API Version: kubedb.com/v1alpha2 + Fields Type: FieldsV1 + fieldsV1: + f:metadata: + f:finalizers: + .: + v:"kubedb.com/druid": + Manager: druid-operator + Operation: Update + Time: 2024-10-21T06:01:32Z + API Version: kubedb.com/v1alpha2 + Fields Type: FieldsV1 + fieldsV1: + f:metadata: + f:annotations: + .: + f:kubectl.kubernetes.io/last-applied-configuration: + f:spec: + .: + f:deepStorage: + .: + f:configSecret: + f:type: + f:deletionPolicy: + f:healthChecker: + .: + f:failureThreshold: + f:periodSeconds: + f:timeoutSeconds: + f:topology: + .: + f:routers: + .: + f:replicas: + f:version: + Manager: kubectl-client-side-apply + Operation: Update + Time: 2024-10-21T06:01:32Z + API Version: kubedb.com/v1alpha2 + Fields Type: FieldsV1 + fieldsV1: + f:status: + .: + f:conditions: + f:phase: + Manager: druid-operator + Operation: Update + Subresource: status + Time: 2024-10-21T06:04:29Z + Resource Version: 52093 + UID: a2e12db2-6694-419f-ad07-2c906df5b611 +Spec: + Auth Secret: + Name: druid-cluster-admin-cred + Deep Storage: + Config Secret: + Name: deep-storage-config + Type: s3 + Deletion Policy: Delete + Health Checker: + Failure Threshold: 3 + Period Seconds: 30 + Timeout Seconds: 10 + Metadata Storage: + Create Tables: true + Linked DB: druid + Name: druid-cluster-mysql-metadata + Namespace: demo + Type: MySQL + Version: 8.0.35 + Topology: + Brokers: + Pod Template: + Controller: + Metadata: + Spec: + Containers: + Name: druid + Resources: + Limits: + Memory: 1Gi + Requests: + Cpu: 500m + Memory: 1Gi + Security Context: + Allow Privilege Escalation: false + Capabilities: + Drop: + ALL + Run As Non Root: true + Run As User: 1000 + Seccomp Profile: + Type: RuntimeDefault + Init Containers: + Name: init-druid + Resources: + Limits: + Memory: 512Mi + Requests: + Cpu: 200m + Memory: 512Mi + Security Context: + Allow Privilege Escalation: false + Capabilities: + Drop: + ALL + Run As Non Root: true + Run As User: 1000 + Seccomp Profile: + Type: RuntimeDefault + Pod Placement Policy: + Name: default + Security Context: + Fs Group: 1000 + Replicas: 1 + Coordinators: + Pod Template: + Controller: + Metadata: + Spec: + Containers: + Name: druid + Resources: + Limits: + Memory: 1Gi + Requests: + Cpu: 500m + Memory: 1Gi + Security Context: + Allow Privilege Escalation: false + Capabilities: + Drop: + ALL + Run As Non Root: true + Run As User: 1000 + Seccomp Profile: + Type: RuntimeDefault + Init Containers: + Name: init-druid + Resources: + Limits: + Memory: 512Mi + Requests: + Cpu: 200m + Memory: 512Mi + Security Context: + Allow Privilege Escalation: false + Capabilities: + Drop: + ALL + Run As Non Root: true + Run As User: 1000 + Seccomp Profile: + Type: RuntimeDefault + Pod Placement Policy: + Name: default + Security Context: + Fs Group: 1000 + Replicas: 1 + Historicals: + Pod Template: + Controller: + Metadata: + Spec: + Containers: + Name: druid + Resources: + Limits: + Memory: 1Gi + Requests: + Cpu: 500m + Memory: 1Gi + Security Context: + Allow Privilege Escalation: false + Capabilities: + Drop: + ALL + Run As Non Root: true + Run As User: 1000 + Seccomp Profile: + Type: RuntimeDefault + Init Containers: + Name: init-druid + Resources: + Limits: + Memory: 512Mi + Requests: + Cpu: 200m + Memory: 512Mi + Security Context: + Allow Privilege Escalation: false + Capabilities: + Drop: + ALL + Run As Non Root: true + Run As User: 1000 + Seccomp Profile: + Type: RuntimeDefault + Pod Placement Policy: + Name: default + Security Context: + Fs Group: 1000 + Replicas: 1 + Storage: + Access Modes: + ReadWriteOnce + Resources: + Requests: + Storage: 1Gi + Storage Type: Durable + Middle Managers: + Pod Template: + Controller: + Metadata: + Spec: + Containers: + Name: druid + Resources: + Limits: + Memory: 2560Mi + Requests: + Cpu: 500m + Memory: 2560Mi + Security Context: + Allow Privilege Escalation: false + Capabilities: + Drop: + ALL + Run As Non Root: true + Run As User: 1000 + Seccomp Profile: + Type: RuntimeDefault + Init Containers: + Name: init-druid + Resources: + Limits: + Memory: 512Mi + Requests: + Cpu: 200m + Memory: 512Mi + Security Context: + Allow Privilege Escalation: false + Capabilities: + Drop: + ALL + Run As Non Root: true + Run As User: 1000 + Seccomp Profile: + Type: RuntimeDefault + Pod Placement Policy: + Name: default + Security Context: + Fs Group: 1000 + Replicas: 1 + Storage: + Access Modes: + ReadWriteOnce + Resources: + Requests: + Storage: 1Gi + Storage Type: Durable + Routers: + Pod Template: + Controller: + Metadata: + Spec: + Containers: + Name: druid + Resources: + Limits: + Memory: 1Gi + Requests: + Cpu: 500m + Memory: 1Gi + Security Context: + Allow Privilege Escalation: false + Capabilities: + Drop: + ALL + Run As Non Root: true + Run As User: 1000 + Seccomp Profile: + Type: RuntimeDefault + Init Containers: + Name: init-druid + Resources: + Limits: + Memory: 512Mi + Requests: + Cpu: 200m + Memory: 512Mi + Security Context: + Allow Privilege Escalation: false + Capabilities: + Drop: + ALL + Run As Non Root: true + Run As User: 1000 + Seccomp Profile: + Type: RuntimeDefault + Pod Placement Policy: + Name: default + Security Context: + Fs Group: 1000 + Replicas: 1 + Version: 28.0.1 + Zookeeper Ref: + Name: druid-cluster-zk + Namespace: demo + Version: 3.7.2 +Status: + Conditions: + Last Transition Time: 2024-10-21T06:01:32Z + Message: The KubeDB operator has started the provisioning of Druid: demo/druid-cluster + Observed Generation: 1 + Reason: DatabaseProvisioningStartedSuccessfully + Status: True + Type: ProvisioningStarted + Phase: Provisioning +Events: + +$ kubectl get petset -n demo +NAME AGE +druid-cluster-brokers 13m +druid-cluster-coordinators 13m +druid-cluster-historicals 13m +druid-cluster-middlemanagers 13m +druid-cluster-mysql-metadata 14m +druid-cluster-routers 13m +druid-cluster-zk 14m + +$ kubectl get pvc -n demo -l app.kubernetes.io/name=druids.kubedb.com +NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE +druid-cluster-base-task-dir-druid-cluster-middlemanagers-0 Bound pvc-d288b621-d281-4004-995d-7a25bb4149de 1Gi RWO standard 14m +druid-cluster-segment-cache-druid-cluster-historicals-0 Bound pvc-ccca6be2-658a-46af-a270-de1c6a041af7 1Gi RWO standard 14m + + +$ kubectl get pv -n demo +NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE +pvc-4f8538f6-a6ce-4233-b533-8566852f5b98 1Gi RWO Delete Bound demo/druid-cluster-base-task-dir-druid-cluster-middlemanagers-0 standard 4m39s +pvc-8823d3ad-d614-4172-89ac-c2284a17f502 1Gi RWO Delete Bound demo/druid-cluster-segment-cache-druid-cluster-historicals-0 standard 4m35s + +$ kubectl get service -n demo +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +druid-cluster-brokers ClusterIP 10.96.186.168 8082/TCP 17m +druid-cluster-coordinators ClusterIP 10.96.122.235 8081/TCP 17m +druid-cluster-mysql-metadata ClusterIP 10.96.109.2 3306/TCP 18m +druid-cluster-mysql-metadata-pods ClusterIP None 3306/TCP 18m +druid-cluster-mysql-metadata-standby ClusterIP 10.96.97.152 3306/TCP 18m +druid-cluster-pods ClusterIP None 8081/TCP,8090/TCP,8083/TCP,8091/TCP,8082/TCP,8888/TCP 17m +druid-cluster-routers ClusterIP 10.96.138.237 8888/TCP 17m +druid-cluster-zk ClusterIP 10.96.148.251 2181/TCP 18m +druid-cluster-zk-admin-server ClusterIP 10.96.2.106 8080/TCP 18m +druid-cluster-zk-pods ClusterIP None 2181/TCP,2888/TCP,3888/TCP 18m +``` + +KubeDB operator sets the `status.phase` to `Ready` once the database is successfully created. Run the following command to see the modified `Druid` object: + +```bash +$ kubectl describe druid -n demo druid-cluster +Name: druid-cluster +Namespace: demo +Labels: +Annotations: +API Version: kubedb.com/v1alpha2 +Kind: Druid +Metadata: + Creation Timestamp: 2024-10-21T06:01:32Z + Finalizers: + kubedb.com/druid + Generation: 1 + Managed Fields: + API Version: kubedb.com/v1alpha2 + Fields Type: FieldsV1 + fieldsV1: + f:metadata: + f:finalizers: + .: + v:"kubedb.com/druid": + Manager: druid-operator + Operation: Update + Time: 2024-10-21T06:01:32Z + API Version: kubedb.com/v1alpha2 + Fields Type: FieldsV1 + fieldsV1: + f:metadata: + f:annotations: + .: + f:kubectl.kubernetes.io/last-applied-configuration: + f:spec: + .: + f:deepStorage: + .: + f:configSecret: + f:type: + f:deletionPolicy: + f:healthChecker: + .: + f:failureThreshold: + f:periodSeconds: + f:timeoutSeconds: + f:topology: + .: + f:routers: + .: + f:replicas: + f:version: + Manager: kubectl-client-side-apply + Operation: Update + Time: 2024-10-21T06:01:32Z + API Version: kubedb.com/v1alpha2 + Fields Type: FieldsV1 + fieldsV1: + f:status: + .: + f:conditions: + f:phase: + Manager: druid-operator + Operation: Update + Subresource: status + Time: 2024-10-21T06:04:29Z + Resource Version: 52093 + UID: a2e12db2-6694-419f-ad07-2c906df5b611 +Spec: + Auth Secret: + Name: druid-cluster-admin-cred + Deep Storage: + Config Secret: + Name: deep-storage-config + Type: s3 + Deletion Policy: Delete + Health Checker: + Failure Threshold: 3 + Period Seconds: 30 + Timeout Seconds: 10 + Metadata Storage: + Create Tables: true + Linked DB: druid + Name: druid-cluster-mysql-metadata + Namespace: demo + Type: MySQL + Version: 8.0.35 + Topology: + Brokers: + Pod Template: + Controller: + Metadata: + Spec: + Containers: + Name: druid + Resources: + Limits: + Memory: 1Gi + Requests: + Cpu: 500m + Memory: 1Gi + Security Context: + Allow Privilege Escalation: false + Capabilities: + Drop: + ALL + Run As Non Root: true + Run As User: 1000 + Seccomp Profile: + Type: RuntimeDefault + Init Containers: + Name: init-druid + Resources: + Limits: + Memory: 512Mi + Requests: + Cpu: 200m + Memory: 512Mi + Security Context: + Allow Privilege Escalation: false + Capabilities: + Drop: + ALL + Run As Non Root: true + Run As User: 1000 + Seccomp Profile: + Type: RuntimeDefault + Pod Placement Policy: + Name: default + Security Context: + Fs Group: 1000 + Replicas: 1 + Coordinators: + Pod Template: + Controller: + Metadata: + Spec: + Containers: + Name: druid + Resources: + Limits: + Memory: 1Gi + Requests: + Cpu: 500m + Memory: 1Gi + Security Context: + Allow Privilege Escalation: false + Capabilities: + Drop: + ALL + Run As Non Root: true + Run As User: 1000 + Seccomp Profile: + Type: RuntimeDefault + Init Containers: + Name: init-druid + Resources: + Limits: + Memory: 512Mi + Requests: + Cpu: 200m + Memory: 512Mi + Security Context: + Allow Privilege Escalation: false + Capabilities: + Drop: + ALL + Run As Non Root: true + Run As User: 1000 + Seccomp Profile: + Type: RuntimeDefault + Pod Placement Policy: + Name: default + Security Context: + Fs Group: 1000 + Replicas: 1 + Historicals: + Pod Template: + Controller: + Metadata: + Spec: + Containers: + Name: druid + Resources: + Limits: + Memory: 1Gi + Requests: + Cpu: 500m + Memory: 1Gi + Security Context: + Allow Privilege Escalation: false + Capabilities: + Drop: + ALL + Run As Non Root: true + Run As User: 1000 + Seccomp Profile: + Type: RuntimeDefault + Init Containers: + Name: init-druid + Resources: + Limits: + Memory: 512Mi + Requests: + Cpu: 200m + Memory: 512Mi + Security Context: + Allow Privilege Escalation: false + Capabilities: + Drop: + ALL + Run As Non Root: true + Run As User: 1000 + Seccomp Profile: + Type: RuntimeDefault + Pod Placement Policy: + Name: default + Security Context: + Fs Group: 1000 + Replicas: 1 + Storage: + Access Modes: + ReadWriteOnce + Resources: + Requests: + Storage: 1Gi + Storage Type: Durable + Middle Managers: + Pod Template: + Controller: + Metadata: + Spec: + Containers: + Name: druid + Resources: + Limits: + Memory: 2560Mi + Requests: + Cpu: 500m + Memory: 2560Mi + Security Context: + Allow Privilege Escalation: false + Capabilities: + Drop: + ALL + Run As Non Root: true + Run As User: 1000 + Seccomp Profile: + Type: RuntimeDefault + Init Containers: + Name: init-druid + Resources: + Limits: + Memory: 512Mi + Requests: + Cpu: 200m + Memory: 512Mi + Security Context: + Allow Privilege Escalation: false + Capabilities: + Drop: + ALL + Run As Non Root: true + Run As User: 1000 + Seccomp Profile: + Type: RuntimeDefault + Pod Placement Policy: + Name: default + Security Context: + Fs Group: 1000 + Replicas: 1 + Storage: + Access Modes: + ReadWriteOnce + Resources: + Requests: + Storage: 1Gi + Storage Type: Durable + Routers: + Pod Template: + Controller: + Metadata: + Spec: + Containers: + Name: druid + Resources: + Limits: + Memory: 1Gi + Requests: + Cpu: 500m + Memory: 1Gi + Security Context: + Allow Privilege Escalation: false + Capabilities: + Drop: + ALL + Run As Non Root: true + Run As User: 1000 + Seccomp Profile: + Type: RuntimeDefault + Init Containers: + Name: init-druid + Resources: + Limits: + Memory: 512Mi + Requests: + Cpu: 200m + Memory: 512Mi + Security Context: + Allow Privilege Escalation: false + Capabilities: + Drop: + ALL + Run As Non Root: true + Run As User: 1000 + Seccomp Profile: + Type: RuntimeDefault + Pod Placement Policy: + Name: default + Security Context: + Fs Group: 1000 + Replicas: 1 + Version: 28.0.1 + Zookeeper Ref: + Name: druid-cluster-zk + Namespace: demo + Version: 3.7.2 +Status: + Conditions: + Last Transition Time: 2024-10-21T06:01:32Z + Message: The KubeDB operator has started the provisioning of Druid: demo/druid-cluster + Observed Generation: 1 + Reason: DatabaseProvisioningStartedSuccessfully + Status: True + Type: ProvisioningStarted + Last Transition Time: 2024-10-21T06:03:03Z + Message: Database dependency is ready + Observed Generation: 1 + Reason: DatabaseDependencyReady + Status: True + Type: DatabaseDependencyReady + Last Transition Time: 2024-10-21T06:03:34Z + Message: All desired replicas are ready. + Observed Generation: 1 + Reason: AllReplicasReady + Status: True + Type: ReplicaReady + Last Transition Time: 2024-10-21T06:04:04Z + Message: The Druid: demo/druid-cluster is accepting client requests and nodes formed a cluster + Observed Generation: 1 + Reason: DatabaseAcceptingConnectionRequest + Status: True + Type: AcceptingConnection + Last Transition Time: 2024-10-21T06:04:29Z + Message: The Druid: demo/druid-cluster is ready. + Observed Generation: 1 + Reason: ReadinessCheckSucceeded + Status: True + Type: Ready + Last Transition Time: 2024-10-21T06:04:29Z + Message: The Druid: demo/druid-cluster is successfully provisioned. + Observed Generation: 1 + Reason: DatabaseSuccessfullyProvisioned + Status: True + Type: Provisioned + Phase: Ready +Events: +``` + + +## Connect with Druid Database +We will use [port forwarding](https://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster/) to connect with our routers of the Druid database. Then we will use `curl` to send `HTTP` requests to check cluster health to verify that our Druid database is working well. It is also possible to use `External-IP` to access druid nodes if you make `service` type of that node as `LoadBalancer`. + +### Check the Service Health + +Let's port-forward the port `8888` to local machine: + +```bash +$ kubectl port-forward -n demo svc/druid-cluster-routers 8888 +Forwarding from 127.0.0.1:8888 -> 8888 +Forwarding from [::1]:8888 -> 8888 +``` + +Now, the Druid cluster is accessible at `localhost:8888`. Let's check the [Service Health](https://druid.apache.org/docs/latest/api-reference/service-status-api/#get-service-health) of Routers of the Druid database. + +```bash +$ curl "http://localhost:8888/status/health" +true +``` +From the retrieved health information above, we can see that our Druid cluster’s status is `true`, indicating that the service can receive API calls and is healthy. In the same way it possible to check the health of other druid nodes by port-forwarding the appropriate services. + +### Access the web console + +We can also access the [web console](https://druid.apache.org/docs/latest/operations/web-console) of Druid database from any browser by port-forwarding the routers in the same way shown in the aforementioned step or directly using the `External-IP` if the router service type is `LoadBalancer`. + +Now hit the `http://localhost:8888` from any browser, and you will be prompted to provide the credential of the druid database. By following the steps discussed below, you can get the credential generated by the KubeDB operator for your Druid database. + +**Connection information:** + +- Username: + + ```bash + $ kubectl get secret -n demo druid-cluster-admin-cred -o jsonpath='{.data.username}' | base64 -d + admin + ``` + +- Password: + + ```bash + $ kubectl get secret -n demo druid-cluster-admin-cred -o jsonpath='{.data.password}' | base64 -d + LzJtVRX5E8MorFaf + ``` + +After providing the credentials correctly, you should be able to access the web console like shown below. + +

+  lifecycle +

+ +You can use this web console for loading data, managing datasources and tasks, and viewing server status and segment information. You can also run SQL and native Druid queries in the console. + +## Cleaning up + +To clean up the Kubernetes resources created by this tutorial, run: + +```bash +$ kubectl patch -n demo druid druid-cluster -p '{"spec":{"deletionPolicy":"WipeOut"}}' --type="merge" +kafka.kubedb.com/druid-cluster patched + +$ kubectl delete dr druid-cluster -n demo +druid.kubedb.com "druid-cluster" deleted + +$ kubectl delete namespace demo +namespace "demo" deleted +``` + +## Next Steps + +- Detail concepts of [Druid object](/docs/guides/druid/concepts/druid.md). +- Detail concepts of [DruidDBVersion object](/docs/guides/druid/concepts/druidversion.md). +- Want to hack on KubeDB? Check our [contribution guidelines](/docs/CONTRIBUTING.md). diff --git a/docs/guides/druid/clustering/guide/yamls/deep-storage-config.yaml b/docs/guides/druid/clustering/guide/yamls/deep-storage-config.yaml new file mode 100644 index 0000000000..3612595828 --- /dev/null +++ b/docs/guides/druid/clustering/guide/yamls/deep-storage-config.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Secret +metadata: + name: deep-storage-config + namespace: demo +stringData: + druid.storage.type: "s3" + druid.storage.bucket: "druid" + druid.storage.baseKey: "druid/segments" + druid.s3.accessKey: "minio" + druid.s3.secretKey: "minio123" + druid.s3.protocol: "http" + druid.s3.enablePathStyleAccess: "true" + druid.s3.endpoint.signingRegion: "us-east-1" + druid.s3.endpoint.url: "http://myminio-hl.demo.svc.cluster.local:9000/" + diff --git a/docs/guides/druid/clustering/guide/yamls/druid-cluster.yaml b/docs/guides/druid/clustering/guide/yamls/druid-cluster.yaml new file mode 100644 index 0000000000..7a89d0dc91 --- /dev/null +++ b/docs/guides/druid/clustering/guide/yamls/druid-cluster.yaml @@ -0,0 +1,15 @@ +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-cluster + namespace: demo +spec: + version: 28.0.1 + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + routers: + replicas: 1 + deletionPolicy: Delete diff --git a/docs/guides/druid/clustering/overview/images/druid-architecture.svg b/docs/guides/druid/clustering/overview/images/druid-architecture.svg new file mode 100644 index 0000000000..3f86a412cf --- /dev/null +++ b/docs/guides/druid/clustering/overview/images/druid-architecture.svg @@ -0,0 +1,19 @@ + + diff --git a/docs/guides/druid/clustering/overview/index.md b/docs/guides/druid/clustering/overview/index.md new file mode 100644 index 0000000000..24893bcce0 --- /dev/null +++ b/docs/guides/druid/clustering/overview/index.md @@ -0,0 +1,115 @@ +--- +title: Druid Topology Cluster Overview +menu: + docs_{{ .version }}: + identifier: guides-druid-clustering-overview + name: Druid Clustering Overview + parent: guides-druid-clustering + weight: 15 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- + +> New to KubeDB? Please start [here](/docs/README.md). + +# Druid Architecture + +Druid has a distributed architecture that is designed to be cloud-friendly and easy to operate. You can configure and scale services independently for maximum flexibility over cluster operations. This design includes enhanced fault tolerance: an outage of one component does not immediately affect other components. + +The following diagram shows the services that make up the Druid architecture, their typical arrangement across servers, and how queries and data flow through this architecture. + +![Druid Architecture](/docs/guides/druid/clustering/overview/images/druid-architecture.svg) + +Image ref: [Druid Official Documentation](https://druid.apache.org/assets/images/druid-architecture-7db1cd79d2d70b2e5ccc73b6bebfcaa4.svg) + + +## Druid services + +Druid has several types of services: + +- **Coordinator** manages data availability on the cluster. +- **Overlord** controls the assignment of data ingestion workloads. +- **Broker** handles queries from external clients. +- **Router** routes requests to Brokers, Coordinators, and Overlords. +- **Historical** stores queryable data. +- **MiddleManager** and Peon ingest data. +- **Indexer** serves an alternative to the MiddleManager + Peon task execution system. + +## Druid servers + +You can deploy Druid services according to your preferences. For ease of deployment, we recommend organizing them into three server types: **Master**, **Query**, and **Data**. + +### Master server +A Master server manages data ingestion and availability. It is responsible for starting new ingestion jobs and coordinating availability of data on the Data server. + +Master servers divide operations between **Coordinator** and **Overlord** services. + +#### Coordinator service +[Coordinator](https://druid.apache.org/docs/latest/design/coordinator/) services watch over the Historical services on the Data servers. They are responsible for assigning segments to specific servers, and for ensuring segments are well-balanced across Historicals. + +### Overlord service +[Overlord](https://druid.apache.org/docs/latest/design/overlord/) services watch over the MiddleManager services on the Data servers and are the controllers of data ingestion into Druid. They are responsible for assigning ingestion tasks to MiddleManagers and for coordinating segment publishing. + +### Query server +A Query server provides the endpoints that users and client applications interact with, routing queries to Data servers or other Query servers (and optionally proxied Master server requests). + +Query servers divide operations between Broker and Router services. + +#### Broker service +[Broker](https://druid.apache.org/docs/latest/design/broker/) services receive queries from external clients and forward those queries to Data servers. When Brokers receive results from those subqueries, they merge those results and return them to the caller. Typically, you query Brokers rather than querying Historical or MiddleManager services on Data servers directly. + +#### Router service +[Router](https://druid.apache.org/docs/latest/design/router/) services provide a unified API gateway in front of Brokers, Overlords, and Coordinators. + +The Router service also runs the web console, a UI for loading data, managing datasources and tasks, and viewing server status and segment information. + +### Data server +A Data server executes ingestion jobs and stores queryable data. + +Data servers divide operations between Historical and MiddleManager services. + +#### Historical service +[Historical](https://druid.apache.org/docs/latest/design/historical/) services handle storage and querying on historical data, including any streaming data that has been in the system long enough to be committed. Historical services download segments from deep storage and respond to queries about these segments. They don't accept writes. + +#### MiddleManager service +[MiddleManager](https://druid.apache.org/docs/latest/design/middlemanager) services handle ingestion of new data into the cluster. They are responsible for reading from external data sources and publishing new Druid segments. + +## External dependencies +In addition to its built-in service types, Druid also has three external dependencies. These are intended to be able to leverage existing infrastructure, where present. + +### Deep storage +Druid uses deep storage to store any data that has been ingested into the system. Deep storage is shared file storage accessible by every Druid server. In a clustered deployment, this is typically a distributed object store like S3 or HDFS, or a network mounted filesystem. In a single-server deployment, this is typically local disk. + +Druid uses deep storage for the following purposes: + +- To store all the data you ingest. Segments that get loaded onto Historical services for low latency queries are also kept in deep storage for backup purposes. Additionally, segments that are only in deep storage can be used for queries from deep storage. +- As a way to transfer data in the background between Druid services. Druid stores data in files called segments. + +Historical services cache data segments on local disk and serve queries from that cache as well as from an in-memory cache. Segments on disk for Historical services provide the low latency querying performance Druid is known for. + +You can also query directly from deep storage. When you query segments that exist only in deep storage, you trade some performance for the ability to query more of your data without necessarily having to scale your Historical services. + +When determining sizing for your storage, keep the following in mind: + +- Deep storage needs to be able to hold all the data that you ingest into Druid. +- On disk storage for Historical services need to be able to accommodate the data you want to load onto them to run queries. The data on Historical services should be data you access frequently and need to run low latency queries for. + +- Deep storage is an important part of Druid's elastic, fault-tolerant design. Druid bootstraps from deep storage even if every single data server is lost and re-provisioned. + +For more details, please see the [Deep storage](https://druid.apache.org/docs/latest/design/deep-storage/) page. + +### Metadata storage +The metadata storage holds various shared system metadata such as segment usage information and task information. In a clustered deployment, this is typically a traditional RDBMS like PostgreSQL or MySQL. In a single-server deployment, it is typically a locally-stored Apache Derby database. + +For more details, please see the [Metadata storage](https://druid.apache.org/docs/latest/design/metadata-storage/) page. + +### ZooKeeper +Used for internal service discovery, coordination, and leader election. + +For more details, please see the [ZooKeeper](https://druid.apache.org/docs/latest/design/zookeeper/) page. + + +## Next Steps + +- [Deploy Druid Cluster](/docs/guides/druid/clustering/overview/index.md) using KubeDB. +- Want to hack on KubeDB? Check our [contribution guidelines](/docs/CONTRIBUTING.md) diff --git a/docs/guides/druid/concepts/_index.md b/docs/guides/druid/concepts/_index.md index 67c3be7748..a5c61e7e6b 100755 --- a/docs/guides/druid/concepts/_index.md +++ b/docs/guides/druid/concepts/_index.md @@ -7,4 +7,4 @@ menu: parent: guides-druid weight: 20 menu_name: docs_{{ .version }} ---- +--- \ No newline at end of file diff --git a/docs/guides/druid/concepts/appbinding.md b/docs/guides/druid/concepts/appbinding.md index 60f9b5bb4d..02c4750799 100644 --- a/docs/guides/druid/concepts/appbinding.md +++ b/docs/guides/druid/concepts/appbinding.md @@ -22,218 +22,127 @@ If you deploy a database using [KubeDB](https://kubedb.com/docs/latest/welcome/) KubeDB uses [Stash](https://appscode.com/products/stash/) to perform backup/recovery of databases. Stash needs to know how to connect with a target database and the credentials necessary to access it. This is done via an `AppBinding`. -[//]: # (## AppBinding CRD Specification) +## AppBinding CRD Specification + +Like any official Kubernetes resource, an `AppBinding` has `TypeMeta`, `ObjectMeta` and `Spec` sections. However, unlike other Kubernetes resources, it does not have a `Status` section. + +An `AppBinding` object created by `KubeDB` for Druid database is shown below, -[//]: # () -[//]: # (Like any official Kubernetes resource, an `AppBinding` has `TypeMeta`, `ObjectMeta` and `Spec` sections. However, unlike other Kubernetes resources, it does not have a `Status` section.) +```yaml +apiVersion: appcatalog.appscode.com/v1alpha1 +kind: AppBinding +metadata: + annotations: + kubectl.kubernetes.io/last-applied-configuration: | + {"apiVersion":"kubedb.com/v1alpha2","kind":"Druid","metadata":{"annotations":{},"name":"druid-quickstart","namespace":"demo"},"spec":{"deepStorage":{"configSecret":{"name":"deep-storage-config"},"type":"s3"},"topology":{"routers":{"replicas":1}},"version":"28.0.1"}} + creationTimestamp: "2024-10-16T13:28:40Z" + generation: 1 + labels: + app.kubernetes.io/component: database + app.kubernetes.io/instance: druid-quickstart + app.kubernetes.io/managed-by: kubedb.com + app.kubernetes.io/name: druids.kubedb.com + name: druid-quickstart + namespace: demo + ownerReferences: + - apiVersion: kubedb.com/v1alpha2 + blockOwnerDeletion: true + controller: true + kind: Druid + name: druid-quickstart + uid: 06dc7c5f-65ad-4310-a203-b18c0d33d662 + resourceVersion: "45154" + uid: 58861709-99f9-4c78-8cf9-b5dc6534102e +spec: + appRef: + apiGroup: kubedb.com + kind: Druid + name: druid-quickstart + namespace: demo + clientConfig: + caBundle: dGhpcyBpcyBub3QgYSBjZXJ0 + service: + name: druid-quickstart-pods + port: 8888 + scheme: http + url: http://druid-quickstart-coordinators-0.druid-quickstart-pods.demo.svc.cluster.local:8081,http://druid-quickstart-overlords-0.druid-quickstart-pods.demo.svc.cluster.local:8090,http://druid-quickstart-middlemanagers-0.druid-quickstart-pods.demo.svc.cluster.local:8091,http://druid-quickstart-historicals-0.druid-quickstart-pods.demo.svc.cluster.local:8083,http://druid-quickstart-brokers-0.druid-quickstart-pods.demo.svc.cluster.local:8082,http://druid-quickstart-routers-0.druid-quickstart-pods.demo.svc.cluster.local:8888 + secret: + name: druid-quickstart-admin-cred + tlsSecret: + name: druid-client-cert + type: kubedb.com/druid + version: 28.0.1 +``` +Here, we are going to describe the sections of an `AppBinding` crd. -[//]: # () -[//]: # (An `AppBinding` object created by `KubeDB` for PostgreSQL database is shown below,) +### AppBinding `Spec` -[//]: # () -[//]: # (```yaml) +An `AppBinding` object has the following fields in the `spec` section: -[//]: # (apiVersion: appcatalog.appscode.com/v1alpha1) +#### spec.type -[//]: # (kind: AppBinding) +`spec.type` is an optional field that indicates the type of the app that this `AppBinding` is pointing to. -[//]: # (metadata:) + + -[//]: # ( app.kubernetes.io/instance: quick-postgres) +#### spec.secret -[//]: # ( app.kubernetes.io/managed-by: kubedb.com) +`spec.secret` specifies the name of the secret which contains the credentials that are required to access the database. This secret must be in the same namespace as the `AppBinding`. -[//]: # ( app.kubernetes.io/name: postgres) +This secret must contain the following keys for Druid: -[//]: # ( app.kubernetes.io/version: "10.2"-v2) +| Key | Usage | +| ---------- |------------------------------------------------| +| `username` | Username of the target Druid instance. | +| `password` | Password for the user specified by `username`. | -[//]: # ( app.kubernetes.io/name: postgreses.kubedb.com) -[//]: # ( app.kubernetes.io/instance: quick-postgres) +#### spec.appRef +appRef refers to the underlying application. It has 4 fields named `apiGroup`, `kind`, `name` & `namespace`. -[//]: # (spec:) +#### spec.clientConfig -[//]: # ( type: kubedb.com/postgres) +`spec.clientConfig` defines how to communicate with the target database. You can use either a URL or a Kubernetes service to connect with the database. You don't have to specify both of them. -[//]: # ( secret:) +You can configure following fields in `spec.clientConfig` section: -[//]: # ( name: quick-postgres-auth) +- **spec.clientConfig.url** -[//]: # ( clientConfig:) + `spec.clientConfig.url` gives the location of the database, in standard URL form (i.e. `[scheme://]host:port/[path]`). This is particularly useful when the target database is running outside the Kubernetes cluster. If your database is running inside the cluster, use `spec.clientConfig.service` section instead. -[//]: # ( service:) +> Note that, attempting to use a user or basic auth (e.g. `user:password@host:port`) is not allowed. Stash will insert them automatically from the respective secret. Fragments ("#...") and query parameters ("?...") are not allowed either. -[//]: # ( name: quick-postgres) +- **spec.clientConfig.service** -[//]: # ( path: /) + If you are running the database inside the Kubernetes cluster, you can use Kubernetes service to connect with the database. You have to specify the following fields in `spec.clientConfig.service` section if you manually create an `AppBinding` object. -[//]: # ( port: 5432) + - **name :** `name` indicates the name of the service that connects with the target database. + - **scheme :** `scheme` specifies the scheme (i.e. http, https) to use to connect with the database. + - **port :** `port` specifies the port where the target database is running. -[//]: # ( query: sslmode=disable) +- **spec.clientConfig.insecureSkipTLSVerify** -[//]: # ( scheme: postgresql) + `spec.clientConfig.insecureSkipTLSVerify` is used to disable TLS certificate verification while connecting with the database. We strongly discourage to disable TLS verification during backup. You should provide the respective CA bundle through `spec.clientConfig.caBundle` field instead. -[//]: # ( secretTransforms:) +- **spec.clientConfig.caBundle** -[//]: # ( - renameKey:) + `spec.clientConfig.caBundle` is a PEM encoded CA bundle which will be used to validate the serving certificate of the database. -[//]: # ( from: POSTGRES_USER) +## Next Steps -[//]: # ( to: username) - -[//]: # ( - renameKey:) - -[//]: # ( from: POSTGRES_PASSWORD) - -[//]: # ( to: password) - -[//]: # ( version: "10.2") - -[//]: # (```) - -[//]: # () -[//]: # (Here, we are going to describe the sections of an `AppBinding` crd.) - -[//]: # () -[//]: # (### AppBinding `Spec`) - -[//]: # () -[//]: # (An `AppBinding` object has the following fields in the `spec` section:) - -[//]: # () -[//]: # (#### spec.type) - -[//]: # () -[//]: # (`spec.type` is an optional field that indicates the type of the app that this `AppBinding` is pointing to. Stash uses this field to resolve the values of `TARGET_APP_TYPE`, `TARGET_APP_GROUP` and `TARGET_APP_RESOURCE` variables of [BackupBlueprint](https://appscode.com/products/stash/latest/concepts/crds/backupblueprint/) object.) - -[//]: # () -[//]: # (This field follows the following format: `/`. The above AppBinding is pointing to a `postgres` resource under `kubedb.com` group.) - -[//]: # () -[//]: # (Here, the variables are parsed as follows:) - -[//]: # () -[//]: # (| Variable | Usage |) - -[//]: # (| --------------------- | --------------------------------------------------------------------------------------------------------------------------------- |) - -[//]: # (| `TARGET_APP_GROUP` | Represents the application group where the respective app belongs (i.e: `kubedb.com`). |) - -[//]: # (| `TARGET_APP_RESOURCE` | Represents the resource under that application group that this appbinding represents (i.e: `postgres`). |) - -[//]: # (| `TARGET_APP_TYPE` | Represents the complete type of the application. It's simply `TARGET_APP_GROUP/TARGET_APP_RESOURCE` (i.e: `kubedb.com/postgres`). |) - -[//]: # () -[//]: # (#### spec.secret) - -[//]: # () -[//]: # (`spec.secret` specifies the name of the secret which contains the credentials that are required to access the database. This secret must be in the same namespace as the `AppBinding`.) - -[//]: # () -[//]: # (This secret must contain the following keys:) - -[//]: # () -[//]: # (PostgreSQL :) - -[//]: # () -[//]: # (| Key | Usage |) - -[//]: # (| ------------------- | --------------------------------------------------- |) - -[//]: # (| `POSTGRES_USER` | Username of the target database. |) - -[//]: # (| `POSTGRES_PASSWORD` | Password for the user specified by `POSTGRES_USER`. |) - -[//]: # () -[//]: # (MySQL :) - -[//]: # () -[//]: # (| Key | Usage |) - -[//]: # (| ---------- | ---------------------------------------------- |) - -[//]: # (| `username` | Username of the target database. |) - -[//]: # (| `password` | Password for the user specified by `username`. |) - -[//]: # () -[//]: # (MongoDB :) - -[//]: # () -[//]: # (| Key | Usage |) - -[//]: # (| ---------- | ---------------------------------------------- |) - -[//]: # (| `username` | Username of the target database. |) - -[//]: # (| `password` | Password for the user specified by `username`. |) - -[//]: # () -[//]: # (Elasticsearch:) - -[//]: # () -[//]: # (| Key | Usage |) - -[//]: # (| ---------------- | ----------------------- |) - -[//]: # (| `ADMIN_USERNAME` | Admin username |) - -[//]: # (| `ADMIN_PASSWORD` | Password for admin user |) - -[//]: # () -[//]: # (#### spec.clientConfig) - -[//]: # () -[//]: # (`spec.clientConfig` defines how to communicate with the target database. You can use either an URL or a Kubernetes service to connect with the database. You don't have to specify both of them.) - -[//]: # () -[//]: # (You can configure following fields in `spec.clientConfig` section:) - -[//]: # () -[//]: # (- **spec.clientConfig.url**) - -[//]: # () -[//]: # ( `spec.clientConfig.url` gives the location of the database, in standard URL form (i.e. `[scheme://]host:port/[path]`). This is particularly useful when the target database is running outside of the Kubernetes cluster. If your database is running inside the cluster, use `spec.clientConfig.service` section instead.) - -[//]: # () -[//]: # ( > Note that, attempting to use a user or basic auth (e.g. `user:password@host:port`) is not allowed. Stash will insert them automatically from the respective secret. Fragments ("#...") and query parameters ("?...") are not allowed either.) - -[//]: # () -[//]: # (- **spec.clientConfig.service**) - -[//]: # () -[//]: # ( If you are running the database inside the Kubernetes cluster, you can use Kubernetes service to connect with the database. You have to specify the following fields in `spec.clientConfig.service` section if you manually create an `AppBinding` object.) - -[//]: # () -[//]: # ( - **name :** `name` indicates the name of the service that connects with the target database.) - -[//]: # ( - **scheme :** `scheme` specifies the scheme (i.e. http, https) to use to connect with the database.) - -[//]: # ( - **port :** `port` specifies the port where the target database is running.) - -[//]: # () -[//]: # (- **spec.clientConfig.insecureSkipTLSVerify**) - -[//]: # () -[//]: # ( `spec.clientConfig.insecureSkipTLSVerify` is used to disable TLS certificate verification while connecting with the database. We strongly discourage to disable TLS verification during backup. You should provide the respective CA bundle through `spec.clientConfig.caBundle` field instead.) - -[//]: # () -[//]: # (- **spec.clientConfig.caBundle**) - -[//]: # () -[//]: # ( `spec.clientConfig.caBundle` is a PEM encoded CA bundle which will be used to validate the serving certificate of the database.) - -[//]: # (## Next Steps) - -[//]: # () -[//]: # (- Learn how to use KubeDB to manage various databases [here](/docs/guides/README.md).) - -[//]: # (- Want to hack on KubeDB? Check our [contribution guidelines](/docs/CONTRIBUTING.md).) +- Learn how to use KubeDB to manage various databases [here](/docs/guides/README.md). +- Want to hack on KubeDB? Check our [contribution guidelines](/docs/CONTRIBUTING.md). diff --git a/docs/guides/druid/concepts/catalog.md b/docs/guides/druid/concepts/catalog.md deleted file mode 100644 index 57ef475dc8..0000000000 --- a/docs/guides/druid/concepts/catalog.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -title: DruidVersion CRD -menu: - docs_{{ .version }}: - identifier: guides-druid-concepts-catalog - name: DruidVersion - parent: guides-druid-concepts - weight: 15 -menu_name: docs_{{ .version }} -section_menu_id: guides ---- - -> New to KubeDB? Please start [here](/docs/README.md). - -# DruidVersion - -[//]: # (## What is DruidVersion) - -[//]: # () -[//]: # (`DruidVersion` is a Kubernetes `Custom Resource Definitions` (CRD). It provides a declarative configuration to specify the docker images to be used for [PgBouncer](https://pgbouncer.github.io/) server deployed with KubeDB in a Kubernetes native way.) - -[//]: # () -[//]: # (When you install KubeDB, a `DruidVersion` custom resource will be created automatically for every supported PgBouncer release versions. You have to specify the name of `DruidVersion` crd in `spec.version` field of [PgBouncer](/docs/guides/pgbouncer/concepts/pgbouncer.md) crd. Then, KubeDB will use the docker images specified in the `DruidVersion` crd to create your expected PgBouncer instance.) - -[//]: # () -[//]: # (Using a separate crd for specifying respective docker image names allow us to modify the images independent of KubeDB operator. This will also allow the users to use a custom PgBouncer image for their server. For more details about how to use custom image with PgBouncer in KubeDB, please visit [here](/docs/guides/pgbouncer/custom-versions/setup.md).) - -[//]: # (## DruidVersion Specification) - -[//]: # () -[//]: # (As with all other Kubernetes objects, a DruidVersion needs `apiVersion`, `kind`, and `metadata` fields. It also needs a `.spec` section.) - -[//]: # () -[//]: # (```yaml) - -[//]: # (apiVersion: catalog.kubedb.com/v1alpha1) - -[//]: # (kind: DruidVersion) - -[//]: # (metadata:) - -[//]: # ( name: "1.17.0") - -[//]: # ( labels:) - -[//]: # ( app: kubedb) - -[//]: # (spec:) - -[//]: # ( deprecated: false) - -[//]: # ( version: "1.17.0") - -[//]: # ( pgBouncer:) - -[//]: # ( image: "${KUBEDB_CATALOG_REGISTRY}/pgbouncer:1.17.0") - -[//]: # ( exporter:) - -[//]: # ( image: "${KUBEDB_CATALOG_REGISTRY}/pgbouncer_exporter:v0.1.1") - -[//]: # (```) - -[//]: # () -[//]: # (### metadata.name) - -[//]: # () -[//]: # (`metadata.name` is a required field that specifies the name of the `DruidVersion` crd. You have to specify this name in `spec.version` field of [PgBouncer](/docs/guides/pgbouncer/concepts/pgbouncer.md) crd.) - -[//]: # () -[//]: # (We follow this convention for naming DruidVersion crd:) - -[//]: # () -[//]: # (- Name format: `{Original pgbouncer image version}-{modification tag}`) - -[//]: # () -[//]: # (We plan to modify original PgBouncer docker images to support additional features. Re-tagging the image with v1, v2 etc. modification tag helps separating newer iterations from the older ones. An image with higher modification tag will have more features than the images with lower modification tag. Hence, it is recommended to use DruidVersion crd with highest modification tag to take advantage of the latest features.) - -[//]: # () -[//]: # (### spec.version) - -[//]: # () -[//]: # (`spec.version` is a required field that specifies the original version of PgBouncer that has been used to build the docker image specified in `spec.server.image` field.) - -[//]: # () -[//]: # (### spec.deprecated) - -[//]: # () -[//]: # (`spec.deprecated` is an optional field that specifies whether the docker images specified here is supported by the current KubeDB operator.) - -[//]: # () -[//]: # (The default value of this field is `false`. If `spec.deprecated` is set `true`, KubeDB operator will not create the server and other respective resources for this version.) - -[//]: # () -[//]: # (### spec.pgBouncer.image) - -[//]: # () -[//]: # (`spec.pgBouncer.image` is a required field that specifies the docker image which will be used to create Petset by KubeDB operator to create expected PgBouncer server.) - -[//]: # () -[//]: # (### spec.exporter.image) - -[//]: # () -[//]: # (`spec.exporter.image` is a required field that specifies the image which will be used to export Prometheus metrics.) - -[//]: # (## Next Steps) - -[//]: # () -[//]: # (- Learn about PgBouncer crd [here](/docs/guides/pgbouncer/concepts/catalog.md).) - -[//]: # (- Deploy your first PgBouncer server with KubeDB by following the guide [here](/docs/guides/pgbouncer/quickstart/quickstart.md).) \ No newline at end of file diff --git a/docs/guides/druid/concepts/druid.md b/docs/guides/druid/concepts/druid.md index 41824e7cfe..5d3ad66d29 100644 --- a/docs/guides/druid/concepts/druid.md +++ b/docs/guides/druid/concepts/druid.md @@ -12,357 +12,518 @@ section_menu_id: guides > New to KubeDB? Please start [here](/docs/README.md). - # Druid -[//]: # () -[//]: # (## What is PgBouncer) - -[//]: # () -[//]: # (`PgBouncer` is a Kubernetes `Custom Resource Definitions` (CRD). It provides declarative configuration for [PgBouncer](https://www.pgbouncer.github.io/) in a Kubernetes native way. You only need to describe the desired configurations in a `PgBouncer` object, and the KubeDB operator will create Kubernetes resources in the desired state for you.) - -[//]: # () -[//]: # (## PgBouncer Spec) - -[//]: # () -[//]: # (Like any official Kubernetes resource, a `PgBouncer` object has `TypeMeta`, `ObjectMeta`, `Spec` and `Status` sections.) - -[//]: # () -[//]: # (Below is an example PgBouncer object.) - -[//]: # () -[//]: # (```yaml) - -[//]: # (apiVersion: kubedb.com/v1alpha2) - -[//]: # (kind: PgBouncer) - -[//]: # (metadata:) - -[//]: # ( name: pgbouncer-server) - -[//]: # ( namespace: demo) - -[//]: # (spec:) - -[//]: # ( version: "1.18.0") - -[//]: # ( replicas: 2) - -[//]: # ( databases:) - -[//]: # ( - alias: "postgres") - -[//]: # ( databaseName: "postgres") - -[//]: # ( databaseRef:) - -[//]: # ( name: "quick-postgres") - -[//]: # ( namespace: demo) - -[//]: # ( connectionPool:) - -[//]: # ( maxClientConnections: 20) - -[//]: # ( reservePoolSize: 5) - -[//]: # ( monitor:) - -[//]: # ( agent: prometheus.io/operator) - -[//]: # ( prometheus:) - -[//]: # ( serviceMonitor:) - -[//]: # ( labels:) - -[//]: # ( release: prometheus) - -[//]: # ( interval: 10s) - -[//]: # (```) - -[//]: # () -[//]: # (### spec.version) - -[//]: # () -[//]: # (`spec.version` is a required field that specifies the name of the [PgBouncerVersion](/docs/guides/pgbouncer/concepts/catalog.md) crd where the docker images are specified. Currently, when you install KubeDB, it creates the following `PgBouncerVersion` resources,) - -[//]: # () -[//]: # (- `1.18.0`) - -[//]: # () -[//]: # (### spec.replicas) - -[//]: # () -[//]: # (`spec.replicas` specifies the total number of available pgbouncer server nodes for each crd. KubeDB uses `PodDisruptionBudget` to ensure that majority of the replicas are available during [voluntary disruptions](https://kubernetes.io/docs/concepts/workloads/pods/disruptions/#voluntary-and-involuntary-disruptions).) - -[//]: # () -[//]: # (### spec.databases) - -[//]: # () -[//]: # (`spec.databases` specifies an array of postgres databases that pgbouncer should add to its connection pool. It contains three `required` fields and two `optional` fields for each database connection.) - -[//]: # () -[//]: # (- `spec.databases.alias`: specifies an alias for the target database located in a postgres server specified by an appbinding.) - -[//]: # (- `spec.databases.databaseName`: specifies the name of the target database.) - -[//]: # (- `spec.databases.databaseRef`: specifies the name and namespace of the AppBinding that contains the path to a PostgreSQL server where the target database can be found.) - -[//]: # () -[//]: # (ConnectionPool is used to configure pgbouncer connection-pool. All the fields here are accompanied by default values and can be left unspecified if no customisation is required by the user.) - -[//]: # () -[//]: # (- `spec.connectionPool.port`: specifies the port on which pgbouncer should listen to connect with clients. The default is 5432.) - -[//]: # () -[//]: # (- `spec.connectionPool.poolMode`: specifies the value of pool_mode. Specifies when a server connection can be reused by other clients.) - -[//]: # () -[//]: # ( - session) - -[//]: # () -[//]: # ( Server is released back to pool after client disconnects. Default.) - -[//]: # () -[//]: # ( - transaction) - -[//]: # () -[//]: # ( Server is released back to pool after transaction finishes.) +## What is Druid + +`Druid` is a Kubernetes `Custom Resource Definitions` (CRD). It provides declarative configuration for [Druid](https://druid.apache.org/) in a Kubernetes native way. You only need to describe the desired database configuration in a `Druid`object, and the KubeDB operator will create Kubernetes objects in the desired state for you. + +## Druid Spec + +As with all other Kubernetes objects, a Druid needs `apiVersion`, `kind`, and `metadata` fields. It also needs a `.spec` section. Below is an example Druid object. + +```yaml +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid + namespace: demo +spec: + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + metadataStorage: + type: PostgreSQL + name: pg-demo + namespace: demo + externallyManaged: true + zookeeperRef: + name: zk-demo + namespace: demo + externallyManaged: true + authSecret: + name: druid-admin-cred + configSecret: + name: druid-custom-config + enableSSL: true + healthChecker: + failureThreshold: 3 + periodSeconds: 20 + timeoutSeconds: 10 + keystoreCredSecret: + name: druid-keystore-cred + deletionPolicy: DoNotTerminate + tls: + certificates: + - alias: server + secretName: druid-server-cert + - alias: client + secretName: druid-client-cert + issuerRef: + apiGroup: cert-manager.io + kind: Issuer + name: druid-ca-issuer + topology: + coordinators: + podTemplate: + spec: + containers: + - name: druid + resources: + requests: + cpu: 500m + memory: 1024Mi + limits: + cpu: 700m + memory: 2Gi + overlords: + podTemplate: + spec: + containers: + - name: druid + resources: + requests: + cpu: 500m + memory: 1024Mi + limits: + cpu: 700m + memory: 2Gi + brokers: + podTemplate: + spec: + containers: + - name: druid + resources: + requests: + cpu: 500m + memory: 1024Mi + limits: + cpu: 700m + memory: 2Gi + routers: + podTemplate: + spec: + containers: + - name: druid + resources: + requests: + cpu: 500m + memory: 1024Mi + limits: + cpu: 700m + memory: 2Gi + middleManagers: + podTemplate: + spec: + containers: + - name: druid + resources: + requests: + cpu: 500m + memory: 1024Mi + limits: + cpu: 700m + memory: 2Gi + storageType: Durable + storage: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 10Gi + storageClassName: standard + historicals: + podTemplate: + spec: + containers: + - name: druid + resources: + requests: + cpu: 500m + memory: 1024Mi + limits: + cpu: 700m + memory: 2Gi + storageType: Durable + storage: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 10Gi + storageClassName: standard + monitor: + agent: prometheus.io/operator + prometheus: + exporter: + port: 56790 + serviceMonitor: + labels: + release: prometheus + interval: 10s + version: 30.0.0 +``` + +### spec.version + +`spec.version` is a required field specifying the name of the [DruidVersion](/docs/guides/druid/concepts/druidversion.md) crd where the docker images are specified. Currently, when you install KubeDB, it creates the following `Druid` resources, + +- `28.0.1` +- `30.0.0` + +### spec.replicas + +`spec.replicas` the number of members in Druid replicaset. + +If `spec.topology` is set, then `spec.replicas` needs to be empty. Instead use `spec.topology.controller.replicas` and `spec.topology.broker.replicas`. You need to set both of them for topology clustering. + +KubeDB uses `PodDisruptionBudget` to ensure that majority of these replicas are available during [voluntary disruptions](https://kubernetes.io/docs/concepts/workloads/pods/disruptions/#voluntary-and-involuntary-disruptions) so that quorum is maintained. + +### spec.authSecret + +`spec.authSecret` is an optional field that points to a Secret used to hold credentials for `druid` admin user. If not set, KubeDB operator creates a new Secret `{druid-object-name}-auth` for storing the password for `admin` user for each Druid object. + +We can use this field in 3 mode. +1. Using an external secret. In this case, You need to create an auth secret first with required fields, then specify the secret name when creating the Druid object using `spec.authSecret.name` & set `spec.authSecret.externallyManaged` to true. +```yaml +authSecret: + name: + externallyManaged: true +``` + +2. Specifying the secret name only. In this case, You need to specify the secret name when creating the Druid object using `spec.authSecret.name`. `externallyManaged` is by default false. +```yaml +authSecret: + name: +``` + +3. Let KubeDB do everything for you. In this case, no work for you. + +AuthSecret contains a `user` key and a `password` key which contains the `username` and `password` respectively for Druid `admin` user. + +Example: + +```bash +$ kubectl create secret generic druid-auth -n demo \ +--from-literal=username=jhon-doe \ +--from-literal=password=6q8u_2jMOW-OOZXk +secret "druid-auth" created +``` -[//]: # () -[//]: # ( - statement) +```yaml +apiVersion: v1 +data: + password: NnE4dV8yak1PVy1PT1pYaw== + username: amhvbi1kb2U= +kind: Secret +metadata: + name: druid-auth + namespace: demo +type: Opaque +``` -[//]: # () -[//]: # ( Server is released back to pool after query finishes. Long transactions spanning multiple statements are disallowed in this mode.) +Secrets provided by users are not managed by KubeDB, and therefore, won't be modified or garbage collected by the KubeDB operator (version 0.13.0 and higher). -[//]: # () -[//]: # (- `spec.connectionPool.maxClientConnections`: specifies the value of max_client_conn. When increased then the file descriptor limits should also be increased. Note that actual number of file descriptors used is more than max_client_conn. Theoretical maximum used is:) +### spec.configSecret -[//]: # () -[//]: # ( ```bash) +`spec.configSecret` is an optional field that points to a Secret used to hold custom Druid configuration. If not set, KubeDB operator will use default configuration for Druid. -[//]: # ( max_client_conn + (max pool_size * total databases * total users)) +### spec.topology -[//]: # ( ```) +`spec.topology` represents the topology configuration for Druid cluster in KRaft mode. -[//]: # () -[//]: # ( if each user connects under its own username to server. If a database user is specified in connect string (all users connect under same username), the theoretical maximum is:) +When `spec.topology` is set, the following fields needs to be empty, otherwise validating webhook will throw error. -[//]: # () -[//]: # ( ```bash) +- `spec.replicas` +- `spec.podTemplate` +- `spec.storage` -[//]: # ( max_client_conn + (max pool_size * total databases)) +#### spec.topology.coordinators -[//]: # ( ```) +`coordinators` represents configuration for coordinators node of Druid. It is a mandatory node. So, if not mentioned in the `YAML`, this node will be initialized by `KubeDB` operator. -[//]: # () -[//]: # ( The theoretical maximum should be never reached, unless somebody deliberately crafts special load for it. Still, it means you should set the number of file descriptors to a safely high number.) +Available configurable fields: -[//]: # () -[//]: # ( Search for `ulimit` in your favorite shell man page. Note: `ulimit` does not apply in a Windows environment.) +- `topology.coordinators`: + - `replicas` (`: "1"`) - is an `optional` field to specify the number of nodes (ie. pods ) that act as the dedicated Druid `coordinators` pods. Defaults to `1`. + - `suffix` (`: "coordinators"`) - is an `optional` field that is added as the suffix of the coordinators PetSet name. Defaults to `coordinators`. + - `resources` (`: "cpu: 500m, memory: 1Gi" `) - is an `optional` field that specifies how much computational resources to request or to limit for each of the `coordinators` pods. -[//]: # () -[//]: # ( Default: 100) +#### spec.topology.overlords -[//]: # () -[//]: # (- `spec.connectionPool.defaultPoolSize`: specifies the value of default_pool_size. Used to determine how many server connections to allow per user/database pair. Can be overridden in the per-database configuration.) +`overlords` represents configuration for overlords node of Druid. It is an optional node. So, it is only going to be deployed by the `KubeDB` operator if explicitly mentioned in the `YAML`. Otherwise, `coordinators` node will act as `overlords`. -[//]: # () -[//]: # ( Default: 20) +Available configurable fields: -[//]: # () -[//]: # (- `spec.connectionPool.minPoolSize`: specifies the value of min_pool_size. PgBouncer adds more server connections to pool if below this number. Improves behavior when usual load comes suddenly back after period of total inactivity.) +- `topology.overlords`: + - `replicas` (`: "1"`) - is an `optional` field to specify the number of nodes (ie. pods ) that act as the dedicated Druid `overlords` pods. Defaults to `1`. + - `suffix` (`: "overlords"`) - is an `optional` field that is added as the suffix of the overlords PetSet name. Defaults to `overlords`. + - `resources` (`: "cpu: 500m, memory: 1Gi" `) - is an `optional` field that specifies how much computational resources to request or to limit for each of the `overlords` pods. -[//]: # () -[//]: # ( Default: 0 (disabled)) +#### spec.topology.brokers -[//]: # () -[//]: # (- `spec.connectionPool.reservePoolSize`: specifies the value of reserve_pool_size. Used to determine how many additional connections to allow to a pool. 0 disables.) +`brokers` represents configuration for brokers node of Druid. It is a mandatory node. So, if not mentioned in the `YAML`, this node will be initialized by `KubeDB` operator. -[//]: # () -[//]: # ( Default: 0 (disabled)) +Available configurable fields: -[//]: # () -[//]: # (- `spec.connectionPool.reservePoolTimeout`: specifies the value of reserve_pool_timeout. If a client has not been serviced in this many seconds, pgbouncer enables use of additional connections from reserve pool. 0 disables.) +- `topology.brokers`: + - `replicas` (`: "1"`) - is an `optional` field to specify the number of nodes (ie. pods ) that act as the dedicated Druid `brokers` pods. Defaults to `1`. + - `suffix` (`: "brokers"`) - is an `optional` field that is added as the suffix of the brokers PetSet name. Defaults to `brokers`. + - `resources` (`: "cpu: 500m, memory: 1Gi" `) - is an `optional` field that specifies how much computational resources to request or to limit for each of the `brokers` pods. -[//]: # () -[//]: # ( Default: 5.0) +#### spec.topology.routers -[//]: # () -[//]: # (- `spec.connectionPool.maxDbConnections`: specifies the value of max_db_connections. PgBouncer does not allow more than this many connections per-database (regardless of pool - i.e. user). It should be noted that when you hit the limit, closing a client connection to one pool will not immediately allow a server connection to be established for another pool, because the server connection for the first pool is still open. Once the server connection closes (due to idle timeout), a new server connection will immediately be opened for the waiting pool.) +`routers` represents configuration for routers node of Druid. It is an optional node. So, it is only going to be deployed by the `KubeDB` operator if explicitly mentioned in the `YAML`. Otherwise, `coordinators` node will act as `routers`. -[//]: # () -[//]: # ( Default: unlimited) +Available configurable fields: -[//]: # () -[//]: # (- `spec.connectionPool.maxUserConnections`: specifies the value of max_user_connections. PgBouncer does not allow more than this many connections per-user (regardless of pool - i.e. user). It should be noted that when you hit the limit, closing a client connection to one pool will not immediately allow a server connection to be established for another pool, because the server connection for the first pool is still open. Once the server connection closes (due to idle timeout), a new server connection will immediately be opened for the waiting pool.) +- `topology.routers`: + - `replicas` (`: "1"`) - is an `optional` field to specify the number of nodes (ie. pods ) that act as the dedicated Druid `routers` pods. Defaults to `1`. + - `suffix` (`: "routers"`) - is an `optional` field that is added as the suffix of the routers PetSet name. Defaults to `routers`. + - `resources` (`: "cpu: 500m, memory: 1Gi" `) - is an `optional` field that specifies how much computational resources to request or to limit for each of the `routers` pods. -[//]: # ( Default: unlimited) +#### spec.topology.historicals -[//]: # () -[//]: # (- `spec.connectionPool.statsPeriod`: sets how often the averages shown in various `SHOW` commands are updated and how often aggregated statistics are written to the log.) +`historicals` represents configuration for historicals node of Druid. It is a mandatory node. So, if not mentioned in the `YAML`, this node will be initialized by `KubeDB` operator. -[//]: # ( Default: 60) +Available configurable fields: -[//]: # () -[//]: # (- `spec.connectionPool.authType`: specifies how to authenticate users. PgBouncer supports several authentication methods including pam, md5, scram-sha-256, trust , or any. However hba, and cert are not supported.) +- `topology.historicals`: + - `replicas` (`: "1"`) - is an `optional` field to specify the number of nodes (ie. pods ) that act as the dedicated Druid `historicals` pods. Defaults to `1`. + - `suffix` (`: "historicals"`) - is an `optional` field that is added as the suffix of the controller PetSet name. Defaults to `historicals`. + - `storage` is a `required` field that specifies how much storage to claim for each of the `historicals` pods. + - `resources` (`: "cpu: 500m, memory: 1Gi" `) - is an `optional` field that specifies how much computational resources to request or to limit for each of the `historicals` pods. -[//]: # () -[//]: # (- `spec.connectionPool.IgnoreStartupParameters`: specifies comma-separated startup parameters that pgbouncer knows are handled by admin and it can ignore them.) +#### spec.topology.middleManagers -[//]: # () -[//]: # (### spec.monitor) +`middleManagers` represents configuration for middleManagers node of Druid. It is a mandatory node. So, if not mentioned in the `YAML`, this node will be initialized by `KubeDB` operator. -[//]: # () -[//]: # (PgBouncer managed by KubeDB can be monitored with builtin-Prometheus and Prometheus operator out-of-the-box. To learn more,) +Available configurable fields: -[//]: # () -[//]: # (- [Monitor PgBouncer with builtin Prometheus](/docs/guides/pgbouncer/monitoring/using-builtin-prometheus.md)) +- `topology.middleManagers`: + - `replicas` (`: "1"`) - is an `optional` field to specify the number of nodes (ie. pods ) that act as the dedicated Druid `middleManagers` pods. Defaults to `1`. + - `suffix` (`: "middleManagers"`) - is an `optional` field that is added as the suffix of the controller PetSet name. Defaults to `middleManagers`. + - `storage` is a `required` field that specifies how much storage to claim for each of the `middleManagers` pods. + - `resources` (`: "cpu: 500m, memory: 1Gi" `) - is an `optional` field that specifies how much computational resources to request or to limit for each of the `middleManagers` pods. -[//]: # (- [Monitor PgBouncer with Prometheus operator](/docs/guides/pgbouncer/monitoring/using-prometheus-operator.md)) -[//]: # () -[//]: # (### spec.podTemplate) +### spec.enableSSL -[//]: # () -[//]: # (KubeDB allows providing a template for pgbouncer pods through `spec.podTemplate`. KubeDB operator will pass the information provided in `spec.podTemplate` to the PetSet created for PgBouncer server) +`spec.enableSSL` is an `optional` field that specifies whether to enable TLS to HTTP layer. The default value of this field is `false`. -[//]: # () -[//]: # (KubeDB accept following fields to set in `spec.podTemplate:`) +```yaml +spec: + enableSSL: true +``` -[//]: # () -[//]: # (- metadata) +### spec.tls -[//]: # ( - annotations (pod's annotation)) +`spec.tls` specifies the TLS/SSL configurations. The KubeDB operator supports TLS management by using the [cert-manager](https://cert-manager.io/). Currently, the operator only supports the `PKCS#8` encoded certificates. -[//]: # (- controller) +```yaml +spec: + tls: + issuerRef: + apiGroup: "cert-manager.io" + kind: Issuer + name: druid-issuer + certificates: + - alias: server + privateKey: + encoding: PKCS8 + secretName: druid-client-cert + subject: + organizations: + - kubedb + - alias: http + privateKey: + encoding: PKCS8 + secretName: druid-server-cert + subject: + organizations: + - kubedb +``` -[//]: # ( - annotations (petset's annotation)) +The `spec.tls` contains the following fields: -[//]: # (- spec:) +- `tls.issuerRef` - is an `optional` field that references to the `Issuer` or `ClusterIssuer` custom resource object of [cert-manager](https://cert-manager.io/docs/concepts/issuer/). It is used to generate the necessary certificate secrets for Druid. If the `issuerRef` is not specified, the operator creates a self-signed CA and also creates necessary certificate (valid: 365 days) secrets using that CA. + - `apiGroup` - is the group name of the resource that is being referenced. Currently, the only supported value is `cert-manager.io`. + - `kind` - is the type of resource that is being referenced. The supported values are `Issuer` and `ClusterIssuer`. + - `name` - is the name of the resource ( `Issuer` or `ClusterIssuer` ) that is being referenced. -[//]: # ( - env) +- `tls.certificates` - is an `optional` field that specifies a list of certificate configurations used to configure the certificates. It has the following fields: + - `alias` - represents the identifier of the certificate. It has the following possible value: + - `server` - is used for the server certificate configuration. + - `client` - is used for the client certificate configuration. -[//]: # ( - resources) + - `secretName` - ( `string` | `"-alias-cert"` ) - specifies the k8s secret name that holds the certificates. -[//]: # ( - initContainers) + - `subject` - specifies an `X.509` distinguished name (DN). It has the following configurable fields: + - `organizations` ( `[]string` | `nil` ) - is a list of organization names. + - `organizationalUnits` ( `[]string` | `nil` ) - is a list of organization unit names. + - `countries` ( `[]string` | `nil` ) - is a list of country names (ie. Country Codes). + - `localities` ( `[]string` | `nil` ) - is a list of locality names. + - `provinces` ( `[]string` | `nil` ) - is a list of province names. + - `streetAddresses` ( `[]string` | `nil` ) - is a list of street addresses. + - `postalCodes` ( `[]string` | `nil` ) - is a list of postal codes. + - `serialNumber` ( `string` | `""` ) is a serial number. -[//]: # ( - imagePullSecrets) + For more details, visit [here](https://golang.org/pkg/crypto/x509/pkix/#Name). -[//]: # ( - affinity) + - `duration` ( `string` | `""` ) - is the period during which the certificate is valid. A duration string is a possibly signed sequence of decimal numbers, each with optional fraction and a unit suffix, such as `"300m"`, `"1.5h"` or `"20h45m"`. Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h". + - `renewBefore` ( `string` | `""` ) - is a specifiable time before expiration duration. + - `dnsNames` ( `[]string` | `nil` ) - is a list of subject alt names. + - `ipAddresses` ( `[]string` | `nil` ) - is a list of IP addresses. + - `uris` ( `[]string` | `nil` ) - is a list of URI Subject Alternative Names. + - `emailAddresses` ( `[]string` | `nil` ) - is a list of email Subject Alternative Names. -[//]: # ( - tolerations) -[//]: # ( - priorityClassName) +### spec..storageType -[//]: # ( - priority) +`spec.storageType` is an optional field that specifies the type of storage to use for database. It can be either `Durable` or `Ephemeral`. The default value of this field is `Durable`. If `Ephemeral` is used then KubeDB will create Druid cluster using [emptyDir](https://kubernetes.io/docs/concepts/storage/volumes/#emptydir) volume. -[//]: # ( - lifecycle) +### spec..storage -[//]: # () -[//]: # (Usage of some fields in `spec.podTemplate` is described below,) +If you set `spec..storageType:` to `Durable`, then `spec..storage` is a required field that specifies the StorageClass of PVCs dynamically allocated to store data for the database. This storage spec will be passed to the PetSet created by KubeDB operator to run database pods. You can specify any StorageClass available in your cluster with appropriate resource requests. -[//]: # () -[//]: # (#### spec.podTemplate.spec.env) +- `spec..storage.storageClassName` is the name of the StorageClass used to provision PVCs. PVCs don’t necessarily have to request a class. A PVC with its storageClassName set equal to "" is always interpreted to be requesting a PV with no class, so it can only be bound to PVs with no class (no annotation or one set equal to ""). A PVC with no storageClassName is not quite the same and is treated differently by the cluster depending on whether the DefaultStorageClass admission plugin is turned on. +- `spec..storage.accessModes` uses the same conventions as Kubernetes PVCs when requesting storage with specific access modes. +- `spec..storage.resources` can be used to request specific quantities of storage. This follows the same resource model used by PVCs. -[//]: # () -[//]: # (`spec.podTemplate.spec.env` is an optional field that specifies the environment variables to pass to the PgBouncer docker image. To know about supported environment variables, please visit [here](https://hub.docker.com/kubedb/pgbouncer/).) +To learn how to configure `spec..storage`, please visit the links below: -[//]: # () -[//]: # (Also, note that KubeDB does not allow updates to the environment variables as updating them does not have any effect once the server is created. If you try to update environment variables, KubeDB operator will reject the request with following error,) +- https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims -[//]: # () -[//]: # (```ini) +### spec.monitor -[//]: # (Error from server (BadRequest): error when applying patch:) +Druid managed by KubeDB can be monitored with Prometheus operator out-of-the-box. To learn more, +- [Monitor Apache Druid with Prometheus operator](/docs/guides/druid/monitoring/using-prometheus-operator.md) +- [Monitor Apache Druid with Built-in Prometheus](/docs/guides/druid/monitoring/using-builtin-prometheus.md) -[//]: # (...) +### spec..podTemplate -[//]: # (for: "./pgbouncer.yaml": admission webhook "pgbouncer.validators.kubedb.com" denied the request: precondition failed for:) +KubeDB allows providing a template for database pod through `spec..podTemplate`. KubeDB operator will pass the information provided in `spec..podTemplate` to the PetSet created for Druid cluster. -[//]: # (...) +KubeDB accept following fields to set in `spec..podTemplate:` -[//]: # (At least one of the following was changed:) +- metadata: + - annotations (pod's annotation) + - labels (pod's labels) +- controller: + - annotations (petset's annotation) + - labels (petset's labels) +- spec: + - containers + - volumes + - podPlacementPolicy + - initContainers + - containers + - imagePullSecrets + - nodeSelector + - affinity + - serviceAccountName + - schedulerName + - tolerations + - priorityClassName + - priority + - securityContext + - livenessProbe + - readinessProbe + - lifecycle -[//]: # ( apiVersion) +You can check out the full list [here](https://github.com/kmodules/offshoot-api/blob/master/api/v2/types.go#L26C1-L279C1). +Uses of some field of `spec..podTemplate` is described below, -[//]: # ( kind) +#### spec..podTemplate.spec.tolerations -[//]: # ( name) +The `spec.podTemplate.spec.tolerations` is an optional field. This can be used to specify the pod's tolerations. -[//]: # ( namespace) +#### spec..podTemplate.spec.volumes -[//]: # ( spec.podTemplate.spec.nodeSelector) +The `spec..podTemplate..volumes` is an optional field. This can be used to provide the list of volumes that can be mounted by containers belonging to the pod. -[//]: # (```) +#### spec..podTemplate.spec.podPlacementPolicy -[//]: # () -[//]: # (#### spec.podTemplate.spec.imagePullSecrets) +`spec..podTemplate.spec.podPlacementPolicy` is an optional field. This can be used to provide the reference of the podPlacementPolicy. This will be used by our Petset controller to place the db pods throughout the region, zone & nodes according to the policy. It utilizes kubernetes affinity & podTopologySpreadContraints feature to do so. -[//]: # () -[//]: # (`spec.podTemplate.spec.imagePullSecrets` is an optional field that points to secrets to be used for pulling docker image if you are using a private docker registry. For more details on how to use private docker registry, please visit [here](/docs/guides/pgbouncer/private-registry/using-private-registry.md).) +#### spec..podTemplate.spec.nodeSelector -[//]: # () -[//]: # (#### spec.podTemplate.spec.nodeSelector) +`spec..podTemplate.spec.nodeSelector` is an optional field that specifies a map of key-value pairs. For the pod to be eligible to run on a node, the node must have each of the indicated key-value pairs as labels (it can have additional labels as well). To learn more, see [here](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector) . -[//]: # () -[//]: # (`spec.podTemplate.spec.nodeSelector` is an optional field that specifies a map of key-value pairs. For the pod to be eligible to run on a node, the node must have each of the indicated key-value pairs as labels (it can have additional labels as well). To learn more, see [here](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector) .) +### spec.serviceTemplates -[//]: # () -[//]: # (#### spec.podTemplate.spec.resources) +You can also provide template for the services created by KubeDB operator for Druid cluster through `spec.serviceTemplates`. This will allow you to set the type and other properties of the services. -[//]: # () -[//]: # (`spec.podTemplate.spec.resources` is an optional field. This can be used to request compute resources required by the database pods. To learn more, visit [here](http://kubernetes.io/docs/user-guide/compute-resources/).) +KubeDB allows following fields to set in `spec.serviceTemplates`: +- `alias` represents the identifier of the service. It has the following possible value: + - `stats` for is used for the `exporter` service identification. -[//]: # () -[//]: # (### spec.serviceTemplate) +Druid comes with four services for `coordinators`, `overlords`, `routers` and `brokers`. There are two options for providing serviceTemplates: + - To provide `serviceTemplates` for a specific service, the `serviceTemplates.ports.port` should be equal to the port of that service and `serviceTemplate` will be used for that particular service only. + - However, to provide a common `serviceTemplates`, `serviceTemplates.ports.port` should be empty. -[//]: # () -[//]: # (KubeDB creates a service for each PgBouncer instance. The service has the same name as the `pgbouncer.name` and points to pgbouncer pods.) +- metadata: + - labels + - annotations +- spec: + - type + - ports + - clusterIP + - externalIPs + - loadBalancerIP + - loadBalancerSourceRanges + - externalTrafficPolicy + - healthCheckNodePort + - sessionAffinityConfig -[//]: # () -[//]: # (You can provide template for this service using `spec.serviceTemplate`. This will allow you to set the type and other properties of the service. If `spec.serviceTemplate` is not provided, KubeDB will create a service of type `ClusterIP` with minimal settings.) +See [here](https://github.com/kmodules/offshoot-api/blob/kubernetes-1.21.1/api/v1/types.go#L237) to understand these fields in detail. -[//]: # () -[//]: # (KubeDB allows the following fields to set in `spec.serviceTemplate`:) -[//]: # () -[//]: # (- metadata:) +#### spec..podTemplate.spec.containers -[//]: # ( - annotations) +The `spec..podTemplate.spec.containers` can be used to provide the list containers and their configurations for to the database pod. some of the fields are described below, -[//]: # (- spec:) +##### spec..podTemplate.spec.containers[].name +The `spec..podTemplate.spec.containers[].name` field used to specify the name of the container specified as a DNS_LABEL. Each container in a pod must have a unique name (DNS_LABEL). Cannot be updated. -[//]: # ( - type) +##### spec..podTemplate.spec.containers[].args +`spec..podTemplate.spec.containers[].args` is an optional field. This can be used to provide additional arguments to database installation. -[//]: # ( - ports) +##### spec..podTemplate.spec.containers[].env -[//]: # ( - clusterIP) +`spec..podTemplate.spec.containers[].env` is an optional field that specifies the environment variables to pass to the Redis containers. -[//]: # ( - externalIPs) +##### spec..podTemplate.spec.containers[].resources -[//]: # ( - loadBalancerIP) +`spec..podTemplate.spec.containers[].resources` is an optional field. This can be used to request compute resources required by containers of the database pods. To learn more, visit [here](http://kubernetes.io/docs/user-guide/compute-resources/). -[//]: # ( - loadBalancerSourceRanges) +### spec.deletionPolicy -[//]: # ( - externalTrafficPolicy) +`deletionPolicy` gives flexibility whether to `nullify`(reject) the delete operation of `Druid` crd or which resources KubeDB should keep or delete when you delete `Druid` crd. KubeDB provides following four deletion policies: -[//]: # ( - healthCheckNodePort) +- DoNotTerminate +- WipeOut +- Halt +- Delete -[//]: # ( - sessionAffinityConfig) +When `deletionPolicy` is `DoNotTerminate`, KubeDB takes advantage of `ValidationWebhook` feature in Kubernetes 1.9.0 or later clusters to implement `DoNotTerminate` feature. If admission webhook is enabled, `DoNotTerminate` prevents users from deleting the database as long as the `spec.deletionPolicy` is set to `DoNotTerminate`. -[//]: # () -[//]: # (See [here](https://github.com/kmodules/offshoot-api/blob/kubernetes-1.16.3/api/v1/types.go#L163) to understand these fields in detail.) +## spec.healthChecker +It defines the attributes for the health checker. +- `spec.healthChecker.periodSeconds` specifies how often to perform the health check. +- `spec.healthChecker.timeoutSeconds` specifies the number of seconds after which the probe times out. +- `spec.healthChecker.failureThreshold` specifies minimum consecutive failures for the healthChecker to be considered failed. +- `spec.healthChecker.disableWriteCheck` specifies whether to disable the writeCheck or not. -[//]: # () -[//]: # (## Next Steps) +Know details about KubeDB Health checking from this [blog post](https://appscode.com/blog/post/kubedb-health-checker/). -[//]: # () -[//]: # (- Learn how to use KubeDB to run a PostgreSQL database [here](/docs/guides/postgres/README.md).) +## Next Steps -[//]: # (- Learn how to how to get started with PgBouncer [here](/docs/guides/pgbouncer/quickstart/quickstart.md).) +- Learn how to use KubeDB to run Apache Druid cluster [here](/docs/guides/druid/README.md). +- Deploy [dedicated topology cluster](/docs/guides/druid/clustering/guide/index.md) for Apache Druid +- Monitor your Druid cluster with KubeDB using [`out-of-the-box` Prometheus operator](/docs/guides/druid/monitoring/using-prometheus-operator.md). +- Detail concepts of [DruidVersion object](/docs/guides/druid/concepts/druidversion.md). -[//]: # (- Want to hack on KubeDB? Check our [contribution guidelines](/docs/CONTRIBUTING.md).) +[//]: # (- Learn to use KubeDB managed Druid objects using [CLIs](/docs/guides/druid/cli/cli.md).) +- Want to hack on KubeDB? Check our [contribution guidelines](/docs/CONTRIBUTING.md). diff --git a/docs/guides/druid/concepts/druidautoscaler.md b/docs/guides/druid/concepts/druidautoscaler.md new file mode 100644 index 0000000000..b22504ce2f --- /dev/null +++ b/docs/guides/druid/concepts/druidautoscaler.md @@ -0,0 +1,132 @@ +--- +title: DruidAutoscaler CRD +menu: + docs_{{ .version }}: + identifier: guides-druid-concepts-druidautoscaler + name: DruidAutoscaler + parent: guides-druid-concepts + weight: 50 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- + +> New to KubeDB? Please start [here](/docs/README.md). + +# DruidAutoscaler + +## What is DruidAutoscaler + +`DruidAutoscaler` is a Kubernetes `Custom Resource Definitions` (CRD). It provides a declarative configuration for autoscaling [Druid](https://druid.apache.org/) compute resources and storage of database components in a Kubernetes native way. + +## DruidAutoscaler CRD Specifications + +Like any official Kubernetes resource, a `DruidAutoscaler` has `TypeMeta`, `ObjectMeta`, `Spec` and `Status` sections. + +Here, some sample `DruidAutoscaler` CROs for autoscaling different components of database is given below: + +**Sample `DruidAutoscaler` for `druid` cluster:** + +```yaml +apiVersion: autoscaling.kubedb.com/v1alpha1 +kind: DruidAutoscaler +metadata: + name: dr-autoscaler + namespace: demo +spec: + databaseRef: + name: druid-prod + opsRequestOptions: + timeout: 3m + apply: IfReady + compute: + coordinators: + trigger: "On" + podLifeTimeThreshold: 24h + minAllowed: + cpu: 200m + memory: 300Mi + maxAllowed: + cpu: 1 + memory: 1Gi + controlledResources: ["cpu", "memory"] + containerControlledValues: "RequestsAndLimits" + resourceDiffPercentage: 10 + brokers: + trigger: "On" + podLifeTimeThreshold: 24h + minAllowed: + cpu: 200m + memory: 300Mi + maxAllowed: + cpu: 1 + memory: 1Gi + controlledResources: ["cpu", "memory"] + containerControlledValues: "RequestsAndLimits" + resourceDiffPercentage: 10 + storage: + historicals: + expansionMode: "Online" + trigger: "On" + usageThreshold: 60 + scalingThreshold: 50 + middleManagers: + expansionMode: "Online" + trigger: "On" + usageThreshold: 60 + scalingThreshold: 50 +``` + +Here, we are going to describe the various sections of a `DruidAutoscaler` crd. + +A `DruidAutoscaler` object has the following fields in the `spec` section. + +### spec.databaseRef + +`spec.databaseRef` is a required field that point to the [Druid](/docs/guides/druid/concepts/druid.md) object for which the autoscaling will be performed. This field consists of the following sub-field: + +- **spec.databaseRef.name :** specifies the name of the [Druid](/docs/guides/druid/concepts/druid.md) object. + +### spec.opsRequestOptions +These are the options to pass in the internally created opsRequest CRO. `opsRequestOptions` has two fields. + +### spec.compute + +`spec.compute` specifies the autoscaling configuration for the compute resources i.e. cpu and memory of the database components. This field consists of the following sub-field: + +- `spec.compute.coordinators` indicates the desired compute autoscaling configuration for coordinators of a topology Druid database. +- `spec.compute.overlords` indicates the desired compute autoscaling configuration for overlords of a topology Druid database. +- `spec.compute.brokers` indicates the desired compute autoscaling configuration for brokers of a topology Druid database. +- `spec.compute.routers` indicates the desired compute autoscaling configuration for routers of a topology Druid database. +- `spec.compute.historicals` indicates the desired compute autoscaling configuration for historicals of a topology Druid database. +- `spec.compute.middleManagers` indicates the desired compute autoscaling configuration for middleManagers of a topology Druid database. + + +All of them has the following sub-fields: + +- `trigger` indicates if compute autoscaling is enabled for this component of the database. If "On" then compute autoscaling is enabled. If "Off" then compute autoscaling is disabled. +- `minAllowed` specifies the minimal amount of resources that will be recommended, default is no minimum. +- `maxAllowed` specifies the maximum amount of resources that will be recommended, default is no maximum. +- `controlledResources` specifies which type of compute resources (cpu and memory) are allowed for autoscaling. Allowed values are "cpu" and "memory". +- `containerControlledValues` specifies which resource values should be controlled. Allowed values are "RequestsAndLimits" and "RequestsOnly". +- `resourceDiffPercentage` specifies the minimum resource difference between recommended value and the current value in percentage. If the difference percentage is greater than this value than autoscaling will be triggered. +- `podLifeTimeThreshold` specifies the minimum pod lifetime of at least one of the pods before triggering autoscaling. + +There are two more fields, those are only specifiable for the percona variant inMemory databases. +- `inMemoryStorage.UsageThresholdPercentage` If db uses more than usageThresholdPercentage of the total memory, memoryStorage should be increased. +- `inMemoryStorage.ScalingFactorPercentage` If db uses more than usageThresholdPercentage of the total memory, memoryStorage should be increased by this given scaling percentage. + +### spec.storage + +`spec.storage` specifies the autoscaling configuration for the storage resources of the database components. This field consists of the following sub-field: + +- `spec.storage.historicals` indicates the desired storage autoscaling configuration for historicals of a topology Druid cluster. +- `spec.storage.middleManagers` indicates the desired storage autoscaling configuration for middleManagers of a topology Druid cluster. + +> `spec.storage` is only supported for druid data nodes i.e. `historicals` and `middleManagers` as they are the only nodes containing volumes. + +All of them has the following sub-fields: + +- `trigger` indicates if storage autoscaling is enabled for this component of the database. If "On" then storage autoscaling is enabled. If "Off" then storage autoscaling is disabled. +- `usageThreshold` indicates usage percentage threshold, if the current storage usage exceeds then storage autoscaling will be triggered. +- `scalingThreshold` indicates the percentage of the current storage that will be scaled. +- `expansionMode` indicates the volume expansion mode. diff --git a/docs/guides/druid/concepts/druidopsrequest.md b/docs/guides/druid/concepts/druidopsrequest.md new file mode 100644 index 0000000000..6a846814f2 --- /dev/null +++ b/docs/guides/druid/concepts/druidopsrequest.md @@ -0,0 +1,473 @@ +--- +title: DruidOpsRequest CRD +menu: + docs_{{ .version }}: + identifier: guides-druid-concepts-druidopsrequest + name: DruidOpsRequest + parent: guides-druid-concepts + weight: 40 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- + + +> New to KubeDB? Please start [here](/docs/README.md). + +# DruidOpsRequest + +## What is DruidOpsRequest + +`DruidOpsRequest` is a Kubernetes `Custom Resource Definitions` (CRD). It provides a declarative configuration for [Druid](https://druid.apache.org/) administrative operations like database version updating, horizontal scaling, vertical scaling etc. in a Kubernetes native way. + +## DruidOpsRequest CRD Specifications + +Like any official Kubernetes resource, a `DruidOpsRequest` has `TypeMeta`, `ObjectMeta`, `Spec` and `Status` sections. + +Here, some sample `DruidOpsRequest` CRs for different administrative operations is given below: + +**Sample `DruidOpsRequest` for updating database:** + +```yaml +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: update-version + namespace: demo +spec: + type: UpdateVersion + databaseRef: + name: druid-prod + updateVersion: + targetVersion: 30.0.1 +status: + conditions: + - lastTransitionTime: "2024-07-25T18:22:38Z" + message: Successfully completed the modification process + observedGeneration: 1 + reason: Successful + status: "True" + type: Successful + observedGeneration: 1 + phase: Successful +``` + +**Sample `DruidOpsRequest` Objects for Horizontal Scaling of different component of the database:** + +```yaml +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: drops-hscale-down + namespace: demo +spec: + type: HorizontalScaling + databaseRef: + name: druid-prod + horizontalScaling: + topology: + coordinators: 2 + historicals: 2 +status: + conditions: + - lastTransitionTime: "2024-07-25T18:22:38Z" + message: Successfully completed the modification process + observedGeneration: 1 + reason: Successful + status: "True" + type: Successful + observedGeneration: 1 + phase: Successful +``` + +**Sample `DruidOpsRequest` Objects for Vertical Scaling of different component of the database:** + +```yaml +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: drops-vscale + namespace: demo +spec: + type: VerticalScaling + databaseRef: + name: druid-prod + verticalScaling: + coordinators: + resources: + requests: + memory: "1.5Gi" + cpu: "0.7" + limits: + memory: "2Gi" + cpu: "1" + historicals: + resources: + requests: + memory: "1.5Gi" + cpu: "0.7" + limits: + memory: "2Gi" + cpu: "1" +status: + conditions: + - lastTransitionTime: "2024-07-25T18:22:38Z" + message: Successfully completed the modification process + observedGeneration: 1 + reason: Successful + status: "True" + type: Successful + observedGeneration: 1 + phase: Successful +``` + +**Sample `DruidOpsRequest` Objects for Reconfiguring different druid mode:** + +```yaml +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: drops-reconfiugre + namespace: demo +spec: + type: Reconfigure + databaseRef: + name: druid-prod + configuration: + applyConfig: + middleManager.properties: | + druid.worker.capacity=5 +status: + conditions: + - lastTransitionTime: "2024-07-25T18:22:38Z" + message: Successfully completed the modification process + observedGeneration: 1 + reason: Successful + status: "True" + type: Successful + observedGeneration: 1 + phase: Successful +``` + +```yaml +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: drops-reconfiugre + namespace: demo +spec: + type: Reconfigure + databaseRef: + name: druid-prod + configuration: + configSecret: + name: new-configsecret +status: + conditions: + - lastTransitionTime: "2024-07-25T18:22:38Z" + message: Successfully completed the modification process + observedGeneration: 1 + reason: Successful + status: "True" + type: Successful + observedGeneration: 1 + phase: Successful +``` + +**Sample `DruidOpsRequest` Objects for Volume Expansion of different database components:** + +```yaml +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: drops-volume-exp + namespace: demo +spec: + type: VolumeExpansion + databaseRef: + name: druid-prod + volumeExpansion: + mode: "Online" + historicals: 2Gi + middleManagers: 2Gi +status: + conditions: + - lastTransitionTime: "2024-07-25T18:22:38Z" + message: Successfully completed the modification process + observedGeneration: 1 + reason: Successful + status: "True" + type: Successful + observedGeneration: 1 + phase: Successful +``` + +**Sample `DruidOpsRequest` Objects for Reconfiguring TLS of the database:** + +```yaml +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: drops-add-tls + namespace: demo +spec: + type: ReconfigureTLS + databaseRef: + name: druid-prod + tls: + issuerRef: + name: dr-issuer + kind: Issuer + apiGroup: "cert-manager.io" + certificates: + - alias: client + emailAddresses: + - abc@appscode.com +``` + +```yaml +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: drops-rotate + namespace: demo +spec: + type: ReconfigureTLS + databaseRef: + name: druid-dev + tls: + rotateCertificates: true +``` + +```yaml +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: drops-change-issuer + namespace: demo +spec: + type: ReconfigureTLS + databaseRef: + name: druid-prod + tls: + issuerRef: + name: dr-new-issuer + kind: Issuer + apiGroup: "cert-manager.io" +``` + +```yaml +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: drops-remove + namespace: demo +spec: + type: ReconfigureTLS + databaseRef: + name: druid-prod + tls: + remove: true +``` + +Here, we are going to describe the various sections of a `DruidOpsRequest` crd. + +A `DruidOpsRequest` object has the following fields in the `spec` section. + +### spec.databaseRef + +`spec.databaseRef` is a required field that point to the [Druid](/docs/guides/druid/concepts/druid.md) object for which the administrative operations will be performed. This field consists of the following sub-field: + +- **spec.databaseRef.name :** specifies the name of the [Druid](/docs/guides/druid/concepts/druid.md) object. + +### spec.type + +`spec.type` specifies the kind of operation that will be applied to the database. Currently, the following types of operations are allowed in `DruidOpsRequest`. + +- `UpdateVersion` +- `HorizontalScaling` +- `VerticalScaling` +- `VolumeExpansion` +- `Reconfigure` +- `ReconfigureTLS` +- `Restart` + +> You can perform only one type of operation on a single `DruidOpsRequest` CR. For example, if you want to update your database and scale up its replica then you have to create two separate `DruidOpsRequest`. At first, you have to create a `DruidOpsRequest` for updating. Once it is completed, then you can create another `DruidOpsRequest` for scaling. + +### spec.updateVersion + +If you want to update you Druid version, you have to specify the `spec.updateVersion` section that specifies the desired version information. This field consists of the following sub-field: + +- `spec.updateVersion.targetVersion` refers to a [DruidVersion](/docs/guides/druid/concepts/druidversion.md) CR that contains the Druid version information where you want to update. + +> You can only update between Druid versions. KubeDB does not support downgrade for Druid. + +### spec.horizontalScaling + +If you want to scale-up or scale-down your Druid cluster or different components of it, you have to specify `spec.horizontalScaling` section. This field consists of the following sub-field: + +- `spec.horizontalScaling.topology` indicates the configuration of topology nodes for Druid topology cluster after scaling. This field consists of the following sub-field: + - `spec.horizontalScaling.topoloy.coordinators` indicates the desired number of coordinators nodes for Druid topology cluster after scaling. + - `spec.horizontalScaling.topology.overlords` indicates the desired number of overlords nodes for Druid topology cluster after scaling. + - `spec.horizontalScaling.topology.brokers` indicates the desired number of brokers nodes for Druid topology cluster after scaling. + - `spec.horizontalScaling.topology.routers` indicates the desired number of routers nodes for Druid topology cluster after scaling. + - `spec.horizontalScaling.topology.historicals` indicates the desired number of historicals nodes for Druid topology cluster after scaling. + - `spec.horizontalScaling.topology.middleManagers` indicates the desired number of middleManagers nodes for Druid topology cluster after scaling. + +### spec.verticalScaling + +`spec.verticalScaling` is a required field specifying the information of `Druid` resources like `cpu`, `memory` etc that will be scaled. This field consists of the following sub-fields: +- `spec.verticalScaling.coordinators` indicates the desired resources for coordinators of Druid topology cluster after scaling. +- `spec.verticalScaling.overlords` indicates the desired resources for overlords of Druid topology cluster after scaling. +- `spec.verticalScaling.brokers` indicates the desired resources for brokers of Druid topology cluster after scaling. +- `spec.verticalScaling.routers` indicates the desired resources for routers of Druid topology cluster after scaling. +- `spec.verticalScaling.historicals` indicates the desired resources for historicals of Druid topology cluster after scaling. +- `spec.verticalScaling.middleManagers` indicates the desired resources for middleManagers of Druid topology cluster after scaling. + +All of them has the below structure: + +```yaml +requests: + memory: "200Mi" + cpu: "0.1" +limits: + memory: "300Mi" + cpu: "0.2" +``` + +Here, when you specify the resource request, the scheduler uses this information to decide which node to place the container of the Pod on and when you specify a resource limit for the container, the `kubelet` enforces those limits so that the running container is not allowed to use more of that resource than the limit you set. You can found more details from [here](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/). + +### spec.volumeExpansion + +> To use the volume expansion feature the storage class must support volume expansion + +If you want to expand the volume of your Druid cluster or different components of it, you have to specify `spec.volumeExpansion` section. This field consists of the following sub-field: + +- `spec.mode` specifies the volume expansion mode. Supported values are `Online` & `Offline`. The default is `Online`. +- `spec.volumeExpansion.historicals` indicates the desired size for the persistent volume for historicals of a Druid topology cluster. +- `spec.volumeExpansion.middleManagers` indicates the desired size for the persistent volume for middleManagers of a Druid topology cluster. + +> It is only possible to expand the data servers ie. `historicals` and `middleManagers` as they only comes with persistent volumes. + +All of them refer to [Quantity](https://v1-22.docs.kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#quantity-resource-core) types of Kubernetes. + +Example usage of this field is given below: + +```yaml +spec: + volumeExpansion: + node: "2Gi" +``` + +This will expand the volume size of all the combined nodes to 2 GB. + +### spec.configuration + +If you want to reconfigure your Running Druid cluster or different components of it with new custom configuration, you have to specify `spec.configuration` section. This field consists of the following sub-field: + +- `spec.configuration.configSecret` points to a secret in the same namespace of a Druid resource, which contains the new custom configurations. If there are any configSecret set before in the database, this secret will replace it. The value of the field `spec.stringData` of the secret like below: +```yaml +common.runtime.properties: | + druid.storage.archiveBucket="my-druid-archive-bucket" +middleManagers.properties: | + druid.worker.capacity=5 +``` +> Similarly, it is possible to provide configs for `coordinators`, `overlords`, `brokers`, `routers` and `historicals` through `coordinators.properties`, `overlords.properties`, `brokers.properties`, `routers.properties` and `historicals.properties` respectively. + +- `applyConfig` contains the new custom config as a string which will be merged with the previous configuration. + +- `applyConfig` is a map where key supports 3 values, namely `server.properties`, `broker.properties`, `controller.properties`. And value represents the corresponding configurations. + +```yaml + applyConfig: + common.runtime.properties: | + druid.storage.archiveBucket="my-druid-archive-bucket" + middleManagers.properties: | + druid.worker.capacity=5 +``` + +- `removeCustomConfig` is a boolean field. Specify this field to true if you want to remove all the custom configuration from the deployed druid cluster. + +### spec.tls + +If you want to reconfigure the TLS configuration of your Druid i.e. add TLS, remove TLS, update issuer/cluster issuer or Certificates and rotate the certificates, you have to specify `spec.tls` section. This field consists of the following sub-field: + +- `spec.tls.issuerRef` specifies the issuer name, kind and api group. +- `spec.tls.certificates` specifies the certificates. You can learn more about this field from [here](/docs/guides/druid/concepts/druid.md#spectls). +- `spec.tls.rotateCertificates` specifies that we want to rotate the certificate of this druid. +- `spec.tls.remove` specifies that we want to remove tls from this druid. + +### spec.timeout +As we internally retry the ops request steps multiple times, This `timeout` field helps the users to specify the timeout for those steps of the ops request (in second). +If a step doesn't finish within the specified timeout, the ops request will result in failure. + +### spec.apply +This field controls the execution of obsRequest depending on the database state. It has two supported values: `Always` & `IfReady`. +Use IfReady, if you want to process the opsRequest only when the database is Ready. And use Always, if you want to process the execution of opsReq irrespective of the Database state. + +### DruidOpsRequest `Status` + +`.status` describes the current state and progress of a `DruidOpsRequest` operation. It has the following fields: + +### status.phase + +`status.phase` indicates the overall phase of the operation for this `DruidOpsRequest`. It can have the following three values: + +| Phase | Meaning | +|-------------|----------------------------------------------------------------------------------| +| Successful | KubeDB has successfully performed the operation requested in the DruidOpsRequest | +| Progressing | KubeDB has started the execution of the applied DruidOpsRequest | +| Failed | KubeDB has failed the operation requested in the DruidOpsRequest | +| Denied | KubeDB has denied the operation requested in the DruidOpsRequest | +| Skipped | KubeDB has skipped the operation requested in the DruidOpsRequest | + +Important: Ops-manager Operator can skip an opsRequest, only if its execution has not been started yet & there is a newer opsRequest applied in the cluster. `spec.type` has to be same as the skipped one, in this case. + +### status.observedGeneration + +`status.observedGeneration` shows the most recent generation observed by the `DruidOpsRequest` controller. + +### status.conditions + +`status.conditions` is an array that specifies the conditions of different steps of `DruidOpsRequest` processing. Each condition entry has the following fields: + +- `types` specifies the type of the condition. DruidOpsRequest has the following types of conditions: + +| Type | Meaning | +|-------------------------------|---------------------------------------------------------------------------| +| `Progressing` | Specifies that the operation is now in the progressing state | +| `Successful` | Specifies such a state that the operation on the database was successful. | +| `HaltDatabase` | Specifies such a state that the database is halted by the operator | +| `ResumeDatabase` | Specifies such a state that the database is resumed by the operator | +| `Failed` | Specifies such a state that the operation on the database failed. | +| `StartingBalancer` | Specifies such a state that the balancer has successfully started | +| `StoppingBalancer` | Specifies such a state that the balancer has successfully stopped | +| `UpdateShardImage` | Specifies such a state that the Shard Images has been updated | +| `UpdateReplicaSetImage` | Specifies such a state that the Replicaset Image has been updated | +| `UpdateConfigServerImage` | Specifies such a state that the ConfigServer Image has been updated | +| `UpdateMongosImage` | Specifies such a state that the Mongos Image has been updated | +| `UpdatePetSetResources` | Specifies such a state that the Petset resources has been updated | +| `UpdateShardResources` | Specifies such a state that the Shard resources has been updated | +| `UpdateReplicaSetResources` | Specifies such a state that the Replicaset resources has been updated | +| `UpdateConfigServerResources` | Specifies such a state that the ConfigServer resources has been updated | +| `UpdateMongosResources` | Specifies such a state that the Mongos resources has been updated | +| `ScaleDownReplicaSet` | Specifies such a state that the scale down operation of replicaset | +| `ScaleUpReplicaSet` | Specifies such a state that the scale up operation of replicaset | +| `ScaleUpShardReplicas` | Specifies such a state that the scale up operation of shard replicas | +| `ScaleDownShardReplicas` | Specifies such a state that the scale down operation of shard replicas | +| `ScaleDownConfigServer` | Specifies such a state that the scale down operation of config server | +| `ScaleUpConfigServer` | Specifies such a state that the scale up operation of config server | +| `ScaleMongos` | Specifies such a state that the scale down operation of replicaset | +| `VolumeExpansion` | Specifies such a state that the volume expansion operaton of the database | +| `ReconfigureReplicaset` | Specifies such a state that the reconfiguration of replicaset nodes | +| `ReconfigureMongos` | Specifies such a state that the reconfiguration of mongos nodes | +| `ReconfigureShard` | Specifies such a state that the reconfiguration of shard nodes | +| `ReconfigureConfigServer` | Specifies such a state that the reconfiguration of config server nodes | + +- The `status` field is a string, with possible values `True`, `False`, and `Unknown`. + - `status` will be `True` if the current transition succeeded. + - `status` will be `False` if the current transition failed. + - `status` will be `Unknown` if the current transition was denied. +- The `message` field is a human-readable message indicating details about the condition. +- The `reason` field is a unique, one-word, CamelCase reason for the condition's last transition. +- The `lastTransitionTime` field provides a timestamp for when the operation last transitioned from one state to another. +- The `observedGeneration` shows the most recent condition transition generation observed by the controller. diff --git a/docs/guides/druid/concepts/druidversion.md b/docs/guides/druid/concepts/druidversion.md new file mode 100644 index 0000000000..74bd7e76f2 --- /dev/null +++ b/docs/guides/druid/concepts/druidversion.md @@ -0,0 +1,102 @@ +--- +title: DruidVersion CRD +menu: + docs_{{ .version }}: + identifier: guides-druid-concepts-druidversion + name: DruidVersion + parent: guides-druid-concepts + weight: 30 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- + +> New to KubeDB? Please start [here](/docs/README.md). + +# DruidVersion + +## What is DruidVersion + +`DruidVersion` is a Kubernetes `Custom Resource Definitions` (CRD). It provides a declarative configuration to specify the docker images to be used for [Druid](https://druid.apache.org) database deployed with KubeDB in a Kubernetes native way. + +When you install KubeDB, a `DruidVersion` custom resource will be created automatically for every supported Druid versions. You have to specify the name of `DruidVersion` CR in `spec.version` field of [Druid](/docs/guides/druid/concepts/druid.md) crd. Then, KubeDB will use the docker images specified in the `DruidVersion` CR to create your expected database. + +Using a separate CRD for specifying respective docker images, and pod security policy names allow us to modify the images, and policies independent of KubeDB operator.This will also allow the users to use a custom image for the database. + +## DruidVersion Spec + +As with all other Kubernetes objects, a DruidVersion needs `apiVersion`, `kind`, and `metadata` fields. It also needs a `.spec` section. + +```yaml +apiVersion: catalog.kubedb.com/v1alpha1 +kind: DruidVersion +metadata: + annotations: + meta.helm.sh/release-name: kubedb + meta.helm.sh/release-namespace: kubedb + creationTimestamp: "2024-10-16T13:10:10Z" + generation: 1 + labels: + app.kubernetes.io/instance: kubedb + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: kubedb-catalog + app.kubernetes.io/version: v2024.9.30 + helm.sh/chart: kubedb-catalog-v2024.9.30 + name: 28.0.1 + resourceVersion: "42125" + uid: e30e23aa-febc-4029-8be7-993afaff1fc6 +spec: + db: + image: ghcr.io/appscode-images/druid:28.0.1 + initContainer: + image: ghcr.io/kubedb/druid-init:28.0.1 + securityContext: + runAsUser: 1000 + version: 28.0.1 +``` + +### metadata.name + +`metadata.name` is a required field that specifies the name of the `DruidVersion` CR. You have to specify this name in `spec.version` field of [Druid](/docs/guides/druid/concepts/druid.md) CR. + +We follow this convention for naming DruidVersion CR: + +- Name format: `{Original Druid image version}-{modification tag}` + +We use official Apache Druid release tar files to build docker images for supporting Druid versions and re-tag the image with v1, v2 etc. modification tag when there's any. An image with higher modification tag will have more features than the images with lower modification tag. Hence, it is recommended to use DruidVersion CR with the highest modification tag to enjoy the latest features. + +### spec.version + +`spec.version` is a required field that specifies the original version of Druid database that has been used to build the docker image specified in `spec.db.image` field. + +### spec.deprecated + +`spec.deprecated` is an optional field that specifies whether the docker images specified here is supported by the current KubeDB operator. + +The default value of this field is `false`. If `spec.deprecated` is set to `true`, KubeDB operator will skip processing this CRD object and will add a event to the CRD object specifying that the DB version is deprecated. + +### spec.db.image + +`spec.db.image` is a required field that specifies the docker image which will be used to create PetSet by KubeDB operator to create expected Druid database. + +### spec.initContainer.image + +`spec.initContainer.image` is a required field that specifies the image which will be used to remove `lost+found` directory and mount an `EmptyDir` data volume. + +### spec.podSecurityPolicies.databasePolicyName + +`spec.podSecurityPolicies.databasePolicyName` is a required field that specifies the name of the pod security policy required to get the database server pod(s) running. + +```bash +helm upgrade -i kubedb oci://ghcr.io/appscode-charts/kubedb \ + --namespace kubedb --create-namespace \ + --set global.featureGates.Druid=true --set global.featureGates.ZooKeeper=true \ + --set additionalPodSecurityPolicies[0]=custom-db-policy \ + --set additionalPodSecurityPolicies[1]=custom-snapshotter-policy \ + --set-file global.license=/path/to/the/license.txt \ + --wait --burst-limit=10000 --debug +``` + +## Next Steps + +- Learn about Druid CRD [here](/docs/guides/druid/concepts/druid.md). +- Deploy your first Druid database with KubeDB by following the guide [here](/docs/guides/druid/quickstart/guide/index.md). diff --git a/docs/guides/druid/configuration/_index.md b/docs/guides/druid/configuration/_index.md new file mode 100644 index 0000000000..4aaebde0ed --- /dev/null +++ b/docs/guides/druid/configuration/_index.md @@ -0,0 +1,10 @@ +--- +title: Run Druid with Custom Configuration +menu: + docs_{{ .version }}: + identifier: guides-druid-configuration + name: Custom Configuration + parent: guides-druid + weight: 40 +menu_name: docs_{{ .version }} +--- diff --git a/docs/guides/druid/configuration/config-file/images/druid-updated-ui.png b/docs/guides/druid/configuration/config-file/images/druid-updated-ui.png new file mode 100644 index 0000000000000000000000000000000000000000..4e53f6bb0037a9ed450111f3e3210143009edcd1 GIT binary patch literal 48477 zcmb@sV{~mz(=MDH?AW$#+qP}n_D-^6d&jozWXHB`+fL4U?&m(|`~JOSoN?BVHF|c} ztT|^_b#>L%SGaTAW0EH6%W0O ztYdX-$?n?c`%m;O=d0B^ST?aup-&agey-X5mhBbJu8Ycxi$(gM<2@hHA%-dt2m}JZfPMgj z0vb4kA5a&V|1|&U`&|&KpEmV!2nIEXHavLp4qjd1=}wiSa#*U?fx2PBg9=!Gn3a`w9f$>8!FAlc`N<5UDWI5 ze`X2rlLIc9#=u=ux!E#%A%$veVl}&H4$#4rY#4>DZD`>3&jyX2|F0xDGW57J8ynj+ z0YU7rF#|^Ncnm%c4u(*+y<*7jF~JNA7OXB7I5_w`SSXmb_PTNjt-r6q zw0y^GuJzf~)zq%TOmV3Q@*_X#JEgg#3e)KacZrOB9_I1Pk1Rgl7@<1;&wlOJ!PWbr zc~4WhEKYOJr;T%0(3VE7$}vHk)jJC9W)5pnFX-j}7#`?Xf#aIZRE5Lagl3@@jyXG4 zmgmr3rsr?;fJ90-ndaAz5`qp6bJs6YT+S1h_R!E!p}djN(Kg@rrz-81xw*Lmr?!@s z7Rv?lAC!Bm4d%2oG&1NskaTpJ4IjR54Bb~AKChf{qfLGC9-3gM9u-ryCAF_wyja?6`G~q6nL%O=6Y(pvW z9o{sx1Dpp$u8H4_E)A}({}ZgCu^5WPDKDqPogl|Zmdg|k+1%r;gIiOp+iN)4T`oQ- z2yAI-iR_-yJ5|8`*x5WB{3r=*bSuT_Z6Z&7I-MG2ZQbC+WLnFxRL*k?%LnT}lP`w= z-X|r5CsV|k3waN5q@j^{e-BMVMMp_rLqSKUTFx?3GFgyjY-mXen{aq^l*4OYjy4?_ zwJ{WOmwCX8%)`q&J~jsMC^0dyq3qv9MMY0fZu6z`fzi>EJzwWNUp?Q?-!kYppyFiA zjB4MrS(EmBoiFd=9rP#`Cey2{tIW*IBT}-dzWM@7u}SaqiHEzUxSY?o9bvhB1B$P&FNsyf z=z-;B^ejt5L&EkAiLqHCnEo7F-ei&{lwj|i2A)I?I!-o{3mmgy zCnvL&^=!^#KK5A)<8wwvR+2rinF|~FoO%x9a7G+Xn8s&j3tw+>a&xNSY$f(|%pvo6 zo9V3KX|2p-YT>~IgDf>u@#b5k(V(C}Vb?sGa@t{inpCigCPTa!m3D6RqBzPX#II_Y zMoQ{-_1c-`r4R?}$Oe*e=3|;FhD@8t__!#od|_hk9QTLBQLt_}744tvuOFHf^Jr>I z9ETsCLi6$I+Quj;B^npUZcjV)A8$!T$*h>ewo{qSJnjsJhKAvIm?*I1>l#{_ysmGR zsG~nG_a`vNnNyZ9B0*+0IlP}XJh9EA zg$4{}Xr^+H;Z(sdDkV9@nnl-q-%!Ys!R9Y1FwzJWDLOkpRG=V(qwv+J|KmGAJK}$* zvdtJoR8fBYh=kr}l5b2ZUy_OWvQ`gbS%*cq;N%BL`piz^Nk+HU}0Icm@ zg#f>`5n3eBYB~3hPj~jOyTeKPt#vM)+<4vsU84A8sUke^A7$m1h5f*Zqb9hZvdceBlzg(C?w=3TSl}|zI0HGr;E!% zX;0`+7sM!BytrA+8VOTV()RR|y>b;QmvkIBa7@m6t42XUL^KD}iU8HRzT6?c#>d6Q zN;@r|IB0cR|4Ht}rPU9rM;AC#{&sYjEU7Pk)ki`&6X~t~_9m`w2Hv?^8P@r>`_+4z zmKL^?oA4Ch{Zwos>mc{OXX3AHRQgvMgM>fVIOi*!;o99%#z z;ntLldiBKi;;eA#u4nC^Eu=d7^|`*e;FU$TH`-8POgr+To-7|rE zv~r$5DDZ+39$`c?S;TO#C5e}vpmzpsQYG^} z3Wy}i!Ir8j+IMBj61iQ(FmDL9zs1Ii=6H$oACMro(Mm#3h!4_lS_e3i$p#D{iq<(n z$AeB;+B_-kdpw;eqYCgcvDEDBm_`Mnc#LC$)yT+5Z9P4)z&D?b;ayVT=thN#cwYza zSNxuyFMECc*N>-(UEpY#yM}4L_nUtB_~k47-;0Z?CZ)x<6M;%)fN&(w0YOPg3D^BTTwO&)Mf0Eoo=_1H^JXoEhKBU0W}d{z`OHmi zJBhlwx&#FUElNfT6>WdW=Gu;#FtHc{^w7<`C4BWUbh939%<=!xUY$+Dj?qk%%i`L z$$To##HuL^R=J1_bS;hi+2sJjl!_cH?TQe|v*TS_h$mj)ezDsoq9_^Moc57iQ#+@*7Ftn~A&LeXR!|j1zicS@h(vwl<91Q{GvBaOn7)WzW>MVz`(#gB7SHpv`doS=j1T@*Vp6YH2>Q6N+yp^u3~3l zVWD&?-R-MSBma;fL$r%VE-$17tx2O*(;LOwB_LACe3n@e`}TM}o+-Ww5U)l@MTrcr zuB~}}zPXajZ}&rjp`8Kj!li+MG0kOVke&^pp~DLcNwKl;Tu4yCcbNj@%_!%e zkEFguh``qM&hI-4Zl2!qh9qXTzC-DH{7l${C`nH=Vot#o%(N)l({;0QWRq;g&HQ95 z3|w=U!_CiXCXZ@Eil;WNLZ>$RzJ~8MQNK)Gm+rFWQ?4}_g%^=BO)imf&ZgYd%TS+8 z5|jlPmglJ@aQ7s7FLYm-s$&(Z-0R4-XS;-pewc{k7Y%%WaB8P%i8c-DzBtu@1ehs1 zqG(=R-m2vKYWzlah75RuST0L*!3zJat+5JTu>gm{gk%w)6AC*R^LyP1)v%fcD&m3? z_TH_rfycZAPSFGGXQa={@d#WmQ&|;j$U2iLVY`5yf`r1aCe|ZLxJSo5k&{3M?q!Cm zz5uxfGQ*K<`K;zfLeRBO9=YTZ)ZYT&j#c4`!0`f+k|Z)%NJiGewsqixN)s^{=~MEOLGEZE%sb#J+I#m6(Hc0UAncXvZd zDeT#TPU%GE5oaBF+{NAV)|SIVR2De}>=;A_Nl85#GJp4q1svhh&6sGzXA=<-DODt` z?P1IZ;a8I{!Q8pCKLre7;Bg6?wDJv%jw*-F*}GKEOh+FQqImJ6S;ScXk}8Ofh;T4u z1aqp=!^g}^UX7!uucc5g?rM<;SA$B9q(tE=Pkws|5Awtl3n*S^G|l^&MVBONYPm=T zeEB!g5@bU&Tc->=gBSwJY%P8|lg(G|pV;zJ_tzmp3ROv4TVGij-7u_gwE62t=hjwt zUS9mc!Gg0|sQ+as4;1G8DYH4E98T)*0g}QUdPfVC?f&_W=4w1hcU4zgY3T|z^e>_S zKHnjve!V4dE`EOe*MoUK1c}^&f`aw6HN6GqJwQ@~B@+1SFf9iDigrn5Ft{8HkXWAu z2v?|3;p5}agKeY7y}!M`<8Nk{fxjb#i&Rxr0g6>ZLPGJ6x7w1Di9%pCgQl&tY4U1{FrzbL8uPshfOG8JvPhMk7 zQ$tJFBbeF8z0(KENN0;c43#T`qf=!xv;hb^b2;ryZrQ@@h5;q%3gwdcF}wjDVV^kh zN^8dyivYj$zL|&KZan!MBBXi2G4GA}{y$LLoTjA9R+l3K6!@{k$jr2GY@(G;zZ}zF zq;b9*wE2uP{W@9q+5JHWQiEgJO*1(jJ(MYcx%x`L9UK_I!EJnCX4){GUtCTp_a$*{ zUJaH9L>cT>R~n$OM%@b#Ye^lU>ZNQ^M$)|Y(axSeMM}O$VCyZ7JmPts4k&Q&@UamQ5gqQ= zdY(wtc)yR1%m8&y-#8f7XceIlC$n-1{Bd~e6g{%VSt1=~v2!efo*`{xL|x6u?6PUY zDxlH?6f+j6>gwt&pDr}V=wRO7@AL9@osJL4#-YfKlqOqZr{a!NIpnw+1*e-_lo~5u zUagtF(RIiF_!!U@nb@(PBy=O=lrpiu+ZxN7;CFOt6iD>N)a>l+1h%%dg?C#2S|bngUjgz&_b`0zIKLOB}MgeS)cI1)5Q4;|E@vo*#0vm-~0@a2F z?_KgBd;VVn!v7n;5%}d01q2NHUohuC2u>ekU(Lry+rO^}gcGm7ssQrej|2kZAnGAn z2mcpL0df!#_$RUhWOp!r3HDvQf&NoQ11@8JK(PGVixZ@d zVxbfNyGoDPc9ZFcc27Wb6W!k-$5f2H^>^%QeQw+KD#ko8vFARhZyF8JI| zf3UU6z(Eizw-ulB#dZZTkadr2?MgJuI-^LMII0xSm~_)-)x?gm=J->%89ec`&U`k# zcK`mzr-5$VJX8b3*n*Ol1w9~S5YuQ$sS_Zhw|d0g;MjDZJu`Vx-qG#rbq|jsCmf&E z+}-4Bbxn%zeOWTr)j6)9?o}rQE51K$VX|^7aL`5f`y`mOKe`tGAj6Gwj-(7R=fDH~ z4gaec^=^5a%K`YhuY}M35t?vI9KdSIfudp5LRP?Zc zboQdYu}?RLm+?8%`l3oD{NU)L2XM4=f8CK|rS+4-O{Le}tXB6no(f&H9I5RViSL8= zT!DSM(xw7|5j59Boo#CuIRutP*VBq{PTRdP9A8Q zqVxgw7S_BdzpR5J%vQ&*&DW%d)0V=TFR`}^`NEE#Ua{rThy!%fFM!R+5wTJyAc;Dt z<0p+e-0L>o9Zi|uQZJCLu!GlPVfO2&zNU%c}L-_oiGJy9j{v9&{n$knN=+ne4d&e^XN)B3_rHsWd@uDZ*1=X)p5S`9% zzr)a*5aCCeXDMXDQ{)y9F;~SL3w}qY2m2mzW&_X^{*RNz#vlBui~fQ z=vOwI_E?PkfO)zgKohqS_s2#@NF_HyJ7Chc@%wBPmvIc zaKbsIwBB#el6pnr?1HpD3#a?0wG-gAryc+KF4Aq&`~Z0Z6xapa_tC~h?h?oU*RWIY zW(LOQkm_{22T5};=PTpo{WWKnGyh|oXLof542Q^m!TYuJBu2b^U@kK-O%91W{nQ8G z!R*j@2x5)(ReGZS@!bi0FStuRVUw4}%-$Xbt&#@?kStWjaiGMz3|LgsLNfRfp;+t( ziFEt}$m3y68c1{G{v-uNA8ATbd6KIe-IlCf>-yfibF${K!@5kJAFkHt=o_7jl9q?Y$m1-<6nteS=GR(AQfXW)RZYI2RUFJM zg3dmgtFK7_+j_#Ep7$jB-J9o|4*stBhV6LfT&Q?#=&^J-<#TP2{1DG5or;{3Lr0BI!w-F2`nNEd2`7^Vi&$ zr}~mv?9reIXMJ`uLv;?1?1-uo=5XuIQD?qD!I+*QHCtnp?6pCIH|TzbhZ^tcp7#;( zB>|;IrY@j}y2R1IIJ=0ySs=SRpp#30Vud-nh2N(QqN>*6U1F4Nzo+zik;MPR>v#a7 zKPU3Gg!6{(T{LTSdz5v3mRmwmeeoQnC`OEdUe=Dcof+)lz&|zgkyYRmUbxH{uB%!v zeD;ror7Lh|k9|T>_Y)E`JU=*FOb%|UUXpXI4e;~G3Luxal9V2~abot?)5Fe051`c} z+M1$NzA1#Nv_n7_&)C3f&!B6u$~8A=Zm?z{cAjNZYLgV+*eqUZ4<2%0)hJml z7rI6H9~T0r;vHrSdm6U?%6eGuLHzi_FWmm*ZuXk&bl^-Ez{gdAVF2~;WM}J?5*rde zG+M^nts4}nco77Jif*ZMmBdeuG+9oWDrp$d?Mke$MxPn@*mD!U2TB)UnnV`0yVmnv zBNZkHU)$&oq$w|LENbxX8x(HyzYSp`2_8d1!gfTNq_ZIc$xUD1HSCNK(Dw~1Q87H} zr1Fm5LG&~+L|Nhq+58w$$vr(Qi}uxZ;7Fu3vsuZ(gPj8`_=Y}W zg4V{)`mJ+2f8)=QDy*^I?wRg3H-kC{MmTcWU?3lDeSlG(`E(&9! zDH}*wk4#hE-_BDINmHHubW(QS^C`NZtF(<3U!{oxX{#wIt}Mt0YHYD`S+KiV5=db8%3B6rt=Tl-O^XB+OqBir|IeP}eCZ}r6CMIg`?o$T-?9#vv#BMq zmYR6Ql*m<$%S_vk&|gbMjz8T()H^R(xl%e}E>gJ$c4#{&X!u#$(ziqVeGyu;7uHkL z@{P|cPbHTeCcCO8vyX@vKAD9+3vmdxQlwuv$Ej>2w^Br0R1-un$fM5Q&R!a<`OpFZ z`Bl%n4p5)>sm+CM8=NoWqvzhE#|!Sd3X5dld^n)nYvscKy-%-e!XC&|Xe&IAy{Ww@ z;Y3tNX{&QxT@`+1agy^Bmfvm!(QfZ@Rz;5&<)n}REcT=x=9O4%36%7ttS;-3whXP1 zh;gkX!ZK-U?UClBW<}L~#k!aO8IT6h;mx zelfkKiScTcgwx7uYws&N`gpiVInBJ$zzQm%#-Iq7PZ?l|dUgRHMfNspX#(~XTVMM4 z`%4Wqafv}40ejj3&h{!tEm9U+Fcx^W?=9mR!h6b+Br?BlO;E*VUom)KJnZ@l{5+fa z(&4UBK-qKcBYr6Ys*EPj(Sw*z<@x{>izX7$Qd%rDbTDD%DByMC1;*87acNLmD=!4W zf{MP;ps^vJNF!yY!L5dmd3IEoGI{tmkoisgh^05AK4$e{g@imNY#*NzHbRB0DYj*S zc$tO&F7*ZqI2yGn&x<5)N;(zth<>jvy0EK5&>h{$hg6Z9BPhfbCWcNZ}&u`P|>vjw<=HaQFqd|ea0kD;u;BK zd5$w3C$TKD=F09ILaor<{Rtd2WQ{R-^OIPoyW4V4$lMtm2~5&O*IPPNFNbQ!S~TRW zxj2TwSIzd=#K=bNc}K-YrC9~>ye}T7$Z-lZ(_A1Hubj~szGn#5)5D8aGbKzX`X+<_ z1Dvfv8Yb%ggX%14sdqQ6FUqGdMCSX?&>LHu!tqXZh24b`MZ(#eI@Mi7Ti?mi7i1Pw zUcD<3djSbgQC(ZHVEN=FzP?>)se0%!OUolw(HoGgrLCr`lBU0*nW5jji=s_(RiVDpbcUJ}X@{ zbv-*-^Jxn$p=PFbw9z!doIdp5bt^S5Y>=@dq?a3l@C0K?;dD6Y+x@I%7Gz^e6XMkQ zZNHBeVO-r|MbGzEZ5Y+H)zml9uoIP+IdQNxRW#?5lakPrSM?M%aFOEI=U7t`6H275 z@UYTlA|xZn>_$f^=E&8Sml_9$P1KuUNe4{GQsJ7}T!Tl5=cT!s6QE%+Ws8DYox%yL za~lY1q^ctBpGe;v)9{}Z|4MU(QN8JZ#qLahzkBRO_T*m7isUN#jVz+IJWVYmt2%=$ zJmJWSNqQR!s``itdrInxxHu|5%Sih=mv-m2my6a!?gu9yAFCuS!4{UJkQ6SfsJN4e zn1eb9t2&~ZCSTq{4wABNa<;*;F50H0k?!SEu*1J9R&JJ$g1f!? zZp3}teBcY@TJqR9fL;F~EPr(21LWI8(cW4-VL`_1Z1i>6qkp*C$;z#~HKqjF?Y5qu zma!JusM!47{1T_UKF~BurnPj|@|c1P_N7lX7qxts?#{Lvf|jD?XpRq-*BNEr*KxOfFK)1muCuPlBC#UOK-bI!fgBM}&+a z&o^kZH>0I$t&6GA`)kA_BrZGWF;FF(j<~~7;aJ!wpN_w;Yi;P_+3#u?(C(L#2-HiU zi6Vab_I$C=HHo)Up~{yL`M!}?9v1;mBB)2(W0B;!{FIMpT!>4(oQ#zlv#hjAU)$7) z4Wq-t#@KtMu&iEtx+P7n14}2Pz}}96n`6T0Jc$UN8^B<{o;g`q8%y84yoCNK>!LWW zBILmmMCpJ|W`^Fv>QZ$j_vr1J=H}(eSwl3ljA!`%Tz3m=oO4k^ zdKN!j5^xNvrM$JgL4|d|7TOycSxMDN z^M2swuZWFDrh@jY);7jYO}+d4;$xIJ_MO;U2ymO0cX7GBM<#ig1+MN=`Q9mvpUI$v zo=|&61BNPk!T2zmnR-XZ5E@$zD_U}K>H|zHUD7dXTU%FzLITL+%9ZY1%Xc)Mhm!|f zwvJ@V01|7ccn@*8{C>s&d-rsW(K*50&Y+2E?1Q^Y>4T^3WENC>%xPYQ{i!NdA|RWA z8Pfm{VJNfXqOG&?wRX30$}4jBGeGtw_W^k+F2Lw0H866Wnyrva#|o({^;r zTT__ZVBg+cqC^fJQiU@kH}P%{^Gyhl) z55?kzr}&wMECa(=AU8N)emlXHZ~9id>zfVL7#&0+k*ck*#M#xV9U!!HC+*h%vJ& zrZIIr4Mi>LRIA|lWH3(EWZQ=Qd20|}VrXu5Y$@u9GjC?)h%OEyTQg-dDMc4CVL!LD z5q-?uv5M<-OM9!t@J8|L0aM`H1|Vqka6h~4&uL=?!v;SP_(_Iq5ZOFvj_$XW%$Tq2 z-lU7QnBLdb)1vIWqQTL!jm+Zm2sB}jOkQe^vQk>ow$j#mV$w1KwhCJ2uFmFeV(Nm8 zprC9lM<2oKfeSVL>4T3uJz-a8H$&&^86Qu-vg_V^Yro&2I~09qp%Oi>F&-2PmMedm zPTjvlTB7!QZwH_^roW>WVbi*`K!JA5VF_ni_(`2=z4Z}_L(P~#JzNN%dIf)Y-4o}Z z_cGsZcM9yc%gnv&@8_Kkteg14oo*dZ$Cw|Sm9^hr^%HmoDjIfuG~x5SvGkONUlMuW ze2L2sYUN3`IouW}V#oW>;)u>WV-p)oKfwj2twx`;_5t|~c*FBO9EM=B_n~5TzaFix z4D1neEm1?c2w~nn9=wn(G0Pu`c8cVV!aROlp(aZR`@Ho-l;dy9%wf%Cm`4yHpTHOz zZOXVhc^N(Gh+9JH7d{_jbKn?yy~~M}rVQ<@%>J$dzj<>#9Qo02t^U^Ztk^LZn}kF#+`3)ynQs=D!;iu#h_w2PQaL29Z>oj#b|y2 z)`D!38ozdiew-GolCA<80)pZeUj{;aoFZ>JZtB5Vo)vZ``w3DO*lJ=>myjSt7OC4Y zx%*Shka^2Pll#qwstdfY^>(RVD(?*Yz@b%HW>{GnW*$YpsfQdMimmwm8B~ZAv(tu- zhzR<@#@0~1RWQw14*Jy|m1tSkDO$oZQz~lWUqk%sBuEP$6-}ZlU2(Qww0c5jAyKgF zZNe_Q>8t%<@x}RWzhI-qT^U(iVMI%k+?(9XL=5Hl6mfZlv0SBmw|$H>c*YgumN|1U zRGApr(&GL^!Y#53^zV@_vb$0Y8oDhA@XJan-~W9WXcfXjOqx;2)ZIBIE@>!ASQ%O> z=W_WGIp^H9G4Nw;to`onrZxSooQqFCNNziu(&;X|^g^Ji(jz74G{BdB8nV%mOgnHH zE}@!Fh?9V=L*9j+P5Zn|02+32@z7POjIXGXp1bMqIPss}cuVHBa;WkGPXox$+H!_PJHub zUIX4D$`jt!n#=0<(h-7t^>f|bpy8%1>`wobQdA<{3F`(+lA1aZ*6DV3;-z1=_3*$Fa|;!;9_UD*gqh#8wXDY|$W3(B>P=*PIAWz}<))#cY} zA-zna2Mq&H+X<8eu|^|x<&1kPJOWu`42dn>9+V4jgXCT;Zz*c3tR|~&tV-|L`l6I<38ikh0cUWa2#cUe!FtA+FV zow~j+ar~fC%+l`eB53*vRVZCfL(~P%!$TAtx`j6#f2Wm|owbXPr{$-RxGSj=X?3@k zk4tfJwY}HAn6FiPC_|gMkFAG?pM{6a9`&TfHX9U+mU{M@tEIU%p~7mn5~plql~*VN zR=isDaB>{r(AOe@+J+boFT6lA2m$FNrEPrNxuU=rn$@%IV=67h4bpK?cs?<5 zlNXuVy2C4(kEg`k&5Dq{Dc9KvfN~a>xLexhFZbWuLa?y;|EM|Xja)-0T+cDWRUS}p zl$p&tBtkmLn(RtTTU;H?+KqujR40wJ$IQ{VxXj4ZUX>4zQYK}Slch^BLuG@thk>7R zb)Br4jtU+?QDud5gQt;!d5|trJT>+8{bVLitauzW)#J-+gWb2S3W~l&R&QY+=nG59 z<6I38X!t}<_cjw3LqC_M9=wZMn<|T+4gSiGuZ>&DyvtsyE^8}_UYU^y=_ee1{mj+I z5rFBGXn$l>bbs5UUx|hfkA?7U3e~_;O;Ow8=V)eOY*}5L8QI5nDi7sa3(e>_W=lbL zO;38udps?B?A=Xni{B;4lgrvz;csMMYgf?Lz$2KhwD+NzQE91Nnyt!9Nddxdqrii7 zQS@;$wjCdtSx{4UOcTjgTjg2f=V0e#%t1<~Q9xb7g<#nfO;ugmoMq?cX0A~eor}rY zfehH{34Ns78N3|AmX*P2yxxQD_mDzm1P))-k_TJU)?8r?%kE7ZeZ8FfC{NlLdTXwm zEqjcp+)GLbxLD8$rmN}dVkhq@t8eac_wdXuP^N?P4X$PdI_<2YPFW-!m^|eX`)0EZt zm>C*Zrx&r2Q?lc>R@WI>nVGWTvd*~~cw5kduRzf+3dg1ZPV+~?-@(~|X&e7%{zCij z$d|ww4w!zx(S}9YuIL{TzG4Ayity#VW&S?9KaTgrCTRl{;F5DT(Qr_TsYB`n{K+&~?e%PcWd}W2Tg_=Z>$WjGh2^8ER z1QPKlBalLGkucmOGzG1diwKF=S5>p(hg>*I3yu`SXeWDabLQJfJyl_HH;nGlad;2M+)%nBw+fyP#$IOhD&}U~Tz9s(15K9g$zoy`J2?hok3uFD{mkN>Sf9Sc4so<>(U+xwNa&$=9VhWMF z7iFXl4brZ}OcgkrRO?xxy9Y;xW{&O5t_W6VTdB(@S1j{~)(MkG%1us6U!D~i)&+~; zuw3Q|Bon2BY-f|YJ}T95BB62V(>FC_^bKCF^hDfI0rR#BwLkoFLA=ES?zoFPLHY7= z{Gvetuj6iq=*DulXXVn;##)Y{bQCl{D-$8_b3j?+meT25kfT#dsQ}IjgXThX$BZW3 zMM#ytyukWRhtBmJB%NneAAW^-a+XKS;Z3o@gZc!+H!dsZim-yy_`=mbrVGDRZw~Q? zZa`FwJD(d0R~OX+YfwD(stF0GoF=cmx+ew$ctcqh2F%|Bc!yEP#9iH#puH2~-5}hopzscv zOxGFen1^E;;YSCXV_hO_LCurH(3QjI@bF0Z85X@oYbLTrTH%9(km`n^N#)ZW3XxT? z_FvUoB7HY;X2~h6Ln0*aPzmMd?MC@Zn;U@&?LwR|TwpHT3PPq_;j=g{Tmw{kB4?%! zffy%AWja{eXMcsHMQzxF8#oNiIZ9}D-6VCfUgJCFSy^DBfbF-ZC|_;0sF$&q6~ z=yo17Q&=cBO{3%(_hv$uLz+du-n%0i+IEi6zh^ppY!qyl;^d?5%(6ol;1m1nCp)h+h{9q>AjpKqa1rER zKYt@$AHrGl0+<^dvlx-^;)wAjx3IDPWAC*zZ!f^Mzo*DU1hO}VxQfHKyDCnHi~n;> z53iTrBmSXM&v7*1g`G&un=Q~I8t2fnyZx8Bg83805kNL@yZ*67Hr9A|pFhC@65(qyVxa2~F?;FiLjjta+xpeLmoDvvB0ZKFD9~pGCq+ShApCq_fT>>PUmjJbXZ%rVQHt)EoU9 zd9;-)7JOP(-B3WCsy3fhqk3p+mFf;B$fPq9$|-OsJ|j;7Kn_T?&9{DR=i=}ffg-nz zv5-LgP!!=>2sKi8=AR-+yvH8d7nXR)Kz=9+A(o!m_nlb`vp6FX0m#5+=k7~uuK<$n z$%(usgF^?<{XEDoe6Xa!3<#F;{dkJ*BgP*);y*|gp{YwsG<)h|%w?aL{?U&yxGa)8 z`w$=?EC!Vc0SCHvNKQX<4X^}xI7on-PqQaHC>Dnz4#WdL_e}tx7ZwSE#i9On6@mp9 zFu?gAK^z2&o!|E&xwzT1=YqKbi6BT8(g3IOX!t*aAi%Jh4ginZnf$jEfD8vv)Au9b z=P!2ne_L`K1T%jj!2!&tEuMc{9J~Lj0P?v1f21r^|BrxjTPq0~wN*c=qzTrv3nfq| z;np7k?(v%sv`SAHYs_zQ*#ZEjv?^(Zg$WchfsJCZp&VVZyho{OLLdFA1mwXgkQ;zJ zMK6<^6(p(MA_+jOTrNTCGx}U81ECH*Q*3K%=@yCEORSIkk%w2Y(&zU&L(w2=Z8F3MCRP z7lx6<%VnaIP6>FY{O(0kvIwOI^Bd}93@CQG{mpbSCVVjz>LG&n3Pw4JqYWO8zD%G> z0s*>fLtY2F$kLY)I#$#$=ps&dNP7Y8VY^i;z$|Jahp;MW!Sy|;a3W-GpQVvakRsCF z4)%>O8gfM9{0w{OAaWG>D{&g|g}h0H@P6WN_umO$FF62m#;pi%$AWgyBdtMX>dj4N zDhG>r99O5y;n-qFSR{8w-kw5tcXLhCY&dBnW2DVF9y1$b?_7xu z5-zBR87^CwwAVB9T>thSDQ+tT*0LGWYF7tR#R;MBEjoZH1Cp`oEqR5n+VpX=nUPi& zY#6dJkd&W0lezoo-Sc|0`!XU^$Q4mCMOTA=c9lglM&)n^L3^h6eW|WbJ5`-*axir0 zif($qlm?95%v8|HPDryhOU%Mo(o|qx-d0Dhf@TH|yU35Orw%wi;VFS!?+|al#{?js z-v>+NfXcAh5t-I2O#r;me*4RyvVfS1iJGg)&g}ka=pso5WACCMcG}MFGSi~e5*963 z@_`f@oxj!j^XOnCOa`fp2~cZCySTuRi?6Wl^BWNXO?esMw`#stuTw8?TV)LqHzPS~>tPRB z(*`05d1IWWT^tYV&T0W-(If2IA;h^$d4=)7>xhLip~XVz&{)RgE3_oLeI^}F zA}C=Lj7%*R-kG@#bo8{ngW|Xlvtu;2W0c0`$B9Pv=ik=(Hf1`ge@_lNi!L z-#wg_?PWxm#&1R8v2ObBpph*=wS}Hk5)UO;mT33#0Px6Zzr93S zDaq+t@b3SysovkUU&d(pIPcCT?yZw4g3@vm{t3=YDhi1@-%`DOcAbNnwpK17U69d) z2+XgjC!JfSqvGGcKYr5;*=c^oxY@As!FS5Oy?dy;@^pEPd=iz#4WDs$zo9drk|L70 z=KJ_owej1fth=(yz1ZErZhvnxExY<s*tfEMlK#Im5?;Jl9Go#1B)SaA; zt;f>C+1c0L!UTXM@JV4~CoHsf`WpMWx!PRqEsm?t=Og7qhq9-nxJY&3>LzSAbFs7J zvL?ycb$TCfKBuBDkJn2>VU@VkZT-p6%}CdbSu8?hpRTOFjE$kS*X?AU+d|8kuWNO5 zwexbduqo;)UYb6ZZMg!XKV${NdY;>nJoM0ETon$cPN+Nc>vW5wi5Nnbl3eB=xble@ zMoYw`pP11Jx;tvIn}Ulj4SJBH6I223E+OfHB`qDS3SZ5-tm?|YNNC*KdOiG%j}K1n z>S(Fnq^Y{f(rNp+s#+HYVZJ|Cx8L&gcXTWAH*vLg?jfo8MK5oUr=zX8g_pCnwc4eU zuKP!asn&NtsOs?X>1y?H(^{8ScW^N%)sA;3f4!B5v6+L5Efp=b*CY)$d@w>SX5t5zERrqQYod}5jRZ!dYfnZf?v zl9`f6XJkgy7z${q6Svq>`q+4yOde6On~hZ!PYqFx-P_S7{1Mrax0u@Uvin%W-9UL} zb$C}(^5tlo?gKl22~U&F%}`e?{iS|}_R98V*Vg*N#V*w%39Ah4g^XN{49(S2^77%5 z?3I2i8xzm=HhXrO7Dn0=?>NxcJ`!DFVEjJpDs!RV=H~8e$xBZexlcol+3n`<9&lY_SX($3HW%_V+B@46+x_+KU@B?h z_HEDKhEEtP!a9<^`i@=~1t5_`;3=q<>3eYbds!Z&+BW~`CDho)7(gBA#|ADD1AKnC5y zOs%(h)zEcFAS7j~u5GUN)Oz11c5shl$=>~4`#im(3nxhGRs2o9m|MtQ=khoYkDrXn z7DJ=o)7Yh+qK$@wa(Yo#hPS4jkq)Ig*a|)nWwU{OZ9#3J*V@`ty^Ikjfc|V#BOCQw zJe6M8hk>1?5GLl~fGpZ}3-kIaNwR;_m&Goj@-Xsxv&+@o(eeGRBWJ6lU3;0){q?P@ zEMWH}jD=qx^>MHs>;nN1OT|$Qte5K+ty{@p<*SCO{RBGk!m0iSD|)!`X3t9i4&M%F z+i;~36W6;Meee6WlB-ad1iuHhW2<#Kn;ZQeyTo&*;N)ZEuBW19u^S~hqn)wG zDjoGr{sD)OjXj6A-FgbUH3snxfJug|u=7T@l;f_c^kSs~h2vIO+Ra~%~? z*y`mP!#-dA>!6=+!+3PEB8F3QAHthrkV(Hpo}T1(2lk6||Unp4sIRap1z7l?#Il z1I56`VS8-r$;I4$a%alW)ZJ8Se=3%Fe&mX|NKGP-yS2>J+TVswlIQ~_BZPeY9ThoS z>EUWOpt`uBcbb`7q}uZArVo7TU|{tlt$B)4#N;B3l>QC3V1YEzo+&IX2H3)Bq?qZ!! zZ>7Kha{7B3b=G_5S6iBVKkIyaESK}Po4i~Fr&<_IzV|j+UOK%ljSQUt$A(i0F-3s| zEVg*G4JJYpO@E55y zrfO!;kFPu9Apv*R7e(lHuOc41AMzQ$>ntqL@peYrav83KZg2RA#IbNNFt*nCc<;}B zoj1N+*lS$IN!{0k8Do4vaMw2=o&7!b8&GnU@$|B+PG(yc8-`p``7F& z4n-t*+0O+6Lwr8VVTbLhRV!YO=Kd+#odLX}^$gw4HrCd{!*6BsnWLAqehtwlPTR=* z@+2K8H!vs)iW+MJ7O%>CYVH%6^ld>vq1!tbx(JoBeN7HzWPfYM^}N240#%|kZnjpO zIts#}C9iZN&yz198n?K8DCw2{a4;$Ga3DHPp_B^P-on|fuC~N`t{mi$ZLmU%)aDFu z02mHxsTf?-+B1*Z5{F4^or*qq`TI5%`jjfe-piLyPbT)$f2KwZ zZM+&{h36MVIqLy#_Gfdaa}L%X`CNL&9_N3SH;7>>4cmo3>Z~L<7`khu`u)7__~jkB zzL^3&+O*DIIaAxqrdAHJPH1r2*~!>r8>+3#km%#imkt4e_Y99qmI2ZTtcu5Xm)noJ z38|;=E3!LW-JMrPrF!>@k45inTIv>71^b!b>ysu5HeGK_sk4uw8TLOZc)15*W72m% zzT@qZZAd$(jxkPJhDl{GZKnv;Xfw3ZOzU2L>E^F8Qd{eLDjmjA3B8q8|ErPWm5$Wd z(ObY#RpD9KsCKz$dnj$8FD)Jv~c*V2K262I*JUmrSklC9}(y9~sIkOJiH&h*;G`yyf|&>OdM6J4?mKL(?}w4nEW%u6EYh zYeQg`;A6Das%WN67{mgf zwMv8jy#7K#rZXg^%5KA6@A|d?I_!pS(q5VMc4CU$*Fq=hfHgILJ}?7k#L-wm9fLhRU5m2A_6{lFKhsEgE7^CgK#6HLl0l z9q7ZPf1Y@|dDLi$k#L6p${*hykgAll_J8`L_s_uojVXq+aP}I+YCv}hQ2OZ|A~9^E zXQa2B3)C@MZGYT+yxro#eb~x~7kx2vu<2^DzA0q)Z?3Irs_}lDu72Ux(c3Cz@IITa zZc62|MUP5i-d_(mclzz<;C?C{;e&&=fHrm$M8{V1b?xQP)#l-2NC z-o@!>ldlG5!>Go7(fyAX6@ZSic$P>%*?Bb@RD@^n_^6h}J}=+xdZ*{v7h4@#twin` zm#f3#qpMNks`b~W*LqJQu>H?LGNCW(dY{AYf4<$Cf1zzYbmA%6?R|23Z+jMS@jNMwjySQfl6B_mzuP+-Jmlzq zGu`d|dRaPz*p?KIGnN~0zDYb^z0&G+asqI6T74T>m+1U_U+$SCOx zdOtkmpo;q6J|M?)t+eih1v*ZQqPV$BjNS&UMj6fzge@l)R`QA1!LTFB`hnpS)pG}7 z?B-biW!6WQ8_03jwxeO2+vCdaW3KPZG|jT7G}m-Ed&lF(vof1OTkznfqKF?Ol*&wAAaWrJO?yBZJjN7WZUo!rBM}Fq!bD@A5C4`dQKX)Tuq>gb~taEhzK_M zuV3G;J#WO)q&ak56;k;^KTv>{*`JT+10GL1J=weOH+p<o(0_Ac)irf2#Z&(Vpg z^9ftW0RP9mPG(2{^PAP?lB4Zn@G3FeY5`*AF1iI@cB{wP%%YxS=j*_1eF@rj{Tzl> z)jWS*O4pqHSwWz~ZAw}I{=U)o0%^Ma8~e3~!M4_%TH{pqh6|qBksaXuy}<`ZHr2(t z?^pQ;k?zl??HHTfdXoJpypxUs3u!FFZs4trxmK)4dTBnzisdYv;>xc4;YB|(KB{a| zBgao(8%`bNgYqcce(I~iX?mVHI-pDNq+ZvZqF$c3qt7192;mpbBG6!Q){uIKCpxNU14r*v#}v^rWDe7=5YE9KF9 z?h@x0|?0f3c^_DDmcKuky%qhUz?ztK!yeO$d=YI1B&C$ii;N#rn1eLyEJ61EYdE3{H4*!#<9;_=L*GLgA!$Y#AI{)pS zMIOB$YaflyubVNr!SX0>?IJV0HC>e*sUpS9xPgj=n` z>(hf`_#WR$HI_nptbg2Ft_?p#(`E3}XRgmwN-_4{+k+>|w>VV%wO1P{&FimjSAzzo z_*aXPvL89JI<8+1NlQYvMtq067Trw5*gTJF)x6Ef1O!QcQVNBIhM|;kVMlidhk7S* z`S}$BIwudw$PMZ}eck+OIm2J-{kLCw4hh=-V%)$gM>NJl{b4$! z`yt+n+Fsbbypm(J3M%yMCloh!Ca+kz=w!UTC$UX)v{FT)9P+M4&D?kYc%|y1^rTPX z$OOE!lj`bu7SLk49MpR4^Kj{&GBr!%lrbFiFmrl8j!G{*za>eEgM*{~OF>t_Rd9hf zxLio6o-3E-%8RJ6P^GLA1NBPV$;)QdpL<<%)KofHEAQOLWEbV1H7RuAIvOQI?h~oGdA%Jo~PLVGm*=@k%r z+f%Wd(32_)JwJjE@%&&CC;;0E>)>138v3~+pfpeuu*^&T3#Z=e6_wRf#J=;{di0rU z>b1M`{FUl`r7J2V%n+~^hTTMn)jMb`hByYEh0H6(#V(WJiI>WsIKrPHwn+b1Y}PAc2I z2IM}I)(IW_)?VlfJGog?bg%_0!gvw_W1MuJBw5yi+um`8yuZ+oJ&meAFHXOTi3=wg zzR-XMbxESK2fokErqdsUlD+On8jyE&hM#%yuTKTPQv^czpuWs{>8b}*;6#k!i-leG z7nF*Kd7iw*)H&B%h%(+&UpI*C21uU=f2Ye%39@QC!)pFKZLhuO3`tYIpLq{Ad1Q{z zHvYC?9jp6V_9$mEb-L-|YrFFz;(#w}6(?ug{n#^3z~wW$|IG!xXot(5LX6yXO|Cv> zg~>P?1erlr72Xx%IS3RwpmierKmaOH2KFg95lqa3k4QmpfR3vHwf4R;?a5x3AK?rq zqEWfw)}zwUtRAL=NXu3U3gc1g$x|Hfad7=Rv70n1ez8=MZ?d+o=txxOjs{%FBUTq! zpg{QwlT6cJLQtXbO+mm1Id#3GV*l4y7@4|us6B_e>Z;ju{0iV*-`wqy6qSq)z9 z-D}2j>;U_@135qb9EIG&udb04P$-g~Y@}R~{___|-dO!{QhZ|t*CksmDHc5c4v8CX z92M3JHUcRJITE)qKkQg0&VM)lIK2hIaZ~;K$Ulw1&G&imRwDoO^PfiF7coST@Bh*W z3l2odyN8|j&yjx`n5gj2)B;k5CCtNn!t1xhBV&xM$F^N{dKJp|G{Nd-Ki}7zL|$3T zh?-~kP%sibOEpG!tLmtkd}?wc>Jq5X#8Z5VTB3~9vOH(?&9SaugwB!ZohumC&kwl1 zGmvtuvEfD5)|YSo$+7LXCRRMZapv9P0Oiz}U&S^6A1|ReFilOHwAWGHSKv@{S763^%z= ztrOd(*dm$?aOLb~O@p;FXajWehBbNf+L1yg5;;hopu`RsPNf3xQv}l3=G;~h($p0r zyHk!3*wGLkq<$M*KY%(6Lp|#hC|Kl)hnD*4JqwYnvzLZzdHnSupIwR5UT{;gX*mx# zP!@bqbzL@H1jsCXga|j;n*{} z6KSoUM!ZPI;K6z)Yaw%${67a=A{{s3T3>RBEAezK%{IN?RHC$fu-cU2E6NcO5%O~v z7J5hopBxhTaO*1b`Be>?yVzq?BMB_bIRHDu9ZQI9^_L2xrRd%3#wlXmwOd>TwD+n8 z;~_?F#jDYtnHsj}_4mAP5~Q~&mG!kvIk7xNS}(OWG6q&ngN=jQ)S{)D2^Oy$vU?4C z3Lk|lk_(CHe^amm3Y6|IrF}#aDxyKmQG@S3U;Y#o&^gUjVbX`1$Wu=5=`IHDG4*x* zHEVSw=nT2Lv<900I&-aBJuY3Y{DQsScK$YR2tinysLrUc7<5z{Iuz~iy9k~CF65ie z0{LX%%W#0&=8X4@MI0M#?>j4H`ov9X_3#QMbmyZkbVh5Eeimv48Y5TQiFrl~DLFRk z1DmvI;%7NBb1I-uAQH!D(Sp)=TRxM|ou7KQ7R+tBzn(f^e&v=26=Gw}4F36LnIcn| z1MH&2+7A74cm5hppRa>~C9kwyo%gAXm~Jo>ULiM>vJb;{iewqe8B4XO*~n_jJ#^PG z5Q*(80UIhhmp|EswZ`HZ%&}8hj6HT0Q4;+V0sIS;tg@ojteEkGN!Pvlw-CWVh>kO? zG$>2QIp!S%4Oe)aN6C+$f1Kq5naD-)xXRjyOX$TeubnDdPU>s4$*P>ZpPM% zwvmMb|NNxgq~bqEoP`d+x1vnb8Oc})Nh_0{GDX1x54iFp_Vp}icX88gEPEY#u?P~% zD{IFXTH5#-Sql(Q$y*K)aK^9}BMc8anNX7+Y@ZV)wefMtw<53rV`-hd>yF+q7uQ`6 zB;wc3L=0y}4VFWS*eEGwXH+AGqPc{EzS%JKPjBbEIW!Ssrb984C#^^#+&4T^!>1BkGL-C6(yu$QEA6LF zo0`FCwJI(lurV2N9cktfg{~2N;k<%t5&cGp`xpo38p}TVq2BI6GrblPqO^Nzk}>}B z!PW8aCRNnOA-s%FIbj3`Q{WvWUA=OiFSLWf7hsi|enNoCOO!cVDI>8`jMOy#m$E;^ zZO8ew+P;6uDu(caA))m{~Do0--I_oNiT+HvsZaG71&gh4K+aB@*giSc2@CFzf2z zS9@x&ieFUhKz8xM4?bp*LYkfd{5*u%*X8O(V?QrthG52Z)CA>}xji}Cm`>a&Etfl6 zl7w&Nt9Fs=N;@nQjN*+g%W3DC2H z$u}Xv&Dwy8$Ex>o?Of#}FNtjIkecb5F)MjFnc{~op}_kitHWQv6V=FSd{97C*qM;u zVmgj-_i9|BU5y^{5q;rlq3d~sI94qDyc`_c*L%n#dE*9knNKbfy;M{(%HKtdROc4H zt_(X{v1Ay#2oY3fu&NgFSP#`x2ouFJTJ&+*xN`o?MwdK%aT>S5xccaTzZO5J!Jzhu zlre{vaJ(wNS7P()?7@Uvtv%^CJVju7yH%r%Pc0s4>Wf&n(plQOtuB(bHMHvPk4Zl6 zO=@i%u}Us2E@oydi6n#i)|9?Ecg@%c53RKtrFOsQ)P}h3RTKXH@`&C0W?s8e*>p>9 z8cGR_rFX~J1sZ!NsaoIe&3&J%k=)$8w2zw!OXrJyiKn-CBM%afMecl8nuxwPm&LOn zzMmg>BlwKrSWSj#OAY)TM9#i@DA%Y}6h{=j4a;$|l!+coK8v#$tuwsc+?)c`GqR*U zPBpR;J)4M?3)3VsTf7fksiQl<_*#Ks*C9N{t*)@h9RZR`4p?LUoI(% z*R>QEDnaWDXhp%wAsAe8@1A=D|BmUnp8`X<>c%L90))7r0!Z9`ruXVBI**)rIvy?i4@_XTl7oF2%Br)KMdqbUyynOZI;kM;h1uO#sN8YW@O4`iW#G=zG zsXFo!9L|#=s7bI|t`an_P!p{;oN!k3|H(;<{FDjwSs z*`RiUVL^u(CU*Pn)(Bz!R|=LDDaI8Nlf`lx{OWL%^FWI>{zaHAuVpHx`X?dglq9RX zhbTN+vXWGh`aFA-?YZqbDR(bxX&zCZ zip_pW{SEm!ulKVQ@zi*BZ)~IIOMJC5b)BeRfY5oOrcj>!sXvqYRVb>nBN{Sylseg> za@#bgJ<`>U>4Y|4XJc=u|GUU}9$j{=ow`kA91UrBdpEO{pgP>qd}0@YSmm?7n=j~L z#KXpw^8|H?ejhbF9v=!0(29Fw4QE;rc~Zja@ceqduI`@D|IHp1CBeKIPI2h^QP(y~ zsVrT9-6~|xy?0{9lk+b5>#(7WNFuOC8-)Kbe@ubih4vOSIZg_!oaO!K!X@#oJzF}L zh)NOZ+bTJRQ3?|g>cNR`?FSqUR^?MqD~gOBR?v}s!#m8u9Cv7ijY}* z{!ghVSzHH1Y2GY(<8eCzBk!i#WlVzzqHVvAN`!{P8<2VtfPmum!IFE2#u?A|?sPe4 z7lC`D9dufZ*_qVYn**$%A5H&CiTROCz*$sjj}en{02jg+uv zDVC#n^}OjK&v&N62JE73S|Dhxr-@mS(b0^Xk`+VJP#{kOY-cSebw+6FG5G6~tvNg>n z=~+&-v{UU~9^r%DoR!0md)z1C(-n4yn>Hd3a>%Hgj(h#kFsk9@Zc{D1`gUL)EHcwK zz;as0rwuEzV*U*gowc}r_xD|TngW^7bsjr&DnDp7eFE!XwJ|i%g1K;$fdZ7U6QQ(y zVj_4B30WmIE7baCmnGQAW|SRED_y_)u5fJ~@tcq-$NRh-BP^?WNvfgJGIoJX_G)Jz zlppy~VDf_X0}H)Kl~ogE_xkM9KY_CukbzOQI`W7a3a_9jWdfABfoap>m7-Om@2-&N z79_b5X-8g4-VCn%8THaOk;KfeMbdV0+)OE7U04#y-TAjTzhy$N4|s}tHN}Sue!?nb zAiG|NZg1a@__FW-N8$umkd<3(nuoN7#$+{)Cs_8%`D-z6Ytx_`Sv6bmu`Y8CSXnF2 zwNqinR)0M@X_q? zB*<|vLuqL44}ZB?umCe8tJhb6Lhne#CROab|0vyr7xJWa+ccJt1M60a@N9e8%7|jr zRg(pU3CHjt8~hb)56}4J&wC;`tj)(7IknXT{7KK*i00dbmPnbxT;ewJx zWcqig*e$}b_R@PuiQf?4=1Rj;(9wuz=p8|ru`0m7ov=jkZU%f>QYj-vwG3&9OsW0+ z-P}^?0WHXFj`)X!LD@`kb^#3-L*il>JCwCk<*rcTIt||L3r68DE!EsC1o?rykFG}* z(xQ4>qqDpjv4#Yobm0gD-7~VQEjO|7&I@TVEtMWobckeKFa81u+UyKt$L zeZSwGgN135M`_!lIU4%Rh3{*{Xv$pHHdCXX&9S`nrG5~FB9ck5%&%xOW>+R}4lQ6J zlV8tq#WW=$69V{&H0c9GSvku`c$Iv48-83v+O$=cU>py5c<*!RF=;p}_0N0iRvtQ2 zFQOEJo>g7rZlm88*Wga2Y!p=U@}kSCU}*GD=q;?>O)PDLKT`gP;tuFu(N!9JNJ;hO z)S0#tlJg1RLjLAKA$2ui_r93!h8`Zo-F{zgKr`oDm2DY#_eZIG>etP=KW2{@K(3`Xa6w7xB~Phmt61Cqo^^no0`23w{uQ zpVzoQ8hnfi7~$Kb4M_LzBvw%TX(nwM#lY=P26X+ls|1Lrlc_FT(8{_+mg7`x!3BK* zCaaT}Nah{l%<7wUuji)y?hEOb13ZptgU^(~f(jTMwIi1Oa%(DzWUhS*3UxDLt1;UV8^z2(d9Ft* zgu>{gsXChwF0u~t(n%%kyy4Yt_VfE__{s*HkJE+ucQx!Bpk?{|>=fu8IZ;`(sdRuT zUB^29Z@jfGtA^ZxW*=&I>~*#|dZ8Wxz!qA+%nZ88rXP7^ap0DAMRZaSDd8_s?xq&x z%>8TC&ur^qFYG6Zh4QXGkFano7iwE8(i!)HS+JrjDa`t5|AYvDeAm`6O-XRL#l}LX zF5^T!u(zm<$G$ln)le&G&6Y|U{fq9|?8mi}vP0x2vgmnpwTdLudF^_jN)EbKBdOYN zr44NY*12JN@-=v)meZ?!Z-iz+5dB+I6Z`(%@;eE4;?xbaPx#;xwJig?@->Y)>vM;P z&>)>%$YipGY3YTEZ@<|&W323tvV6f@Crf0!UWMdjIq^J9<1Tc&Pnfj5TA`rTEey@)gzr!jL}9iy8AE{sPg*VGLszO%Yx&u&upXXsjU(trlWlHr86IVdoMN&eiz3RQ`GR9Po$;OAd7<>H-f8sIlwX zMPVU=Dz|s2Lh8BFGWm&rItZE6XUU%Az9A4sE)ux6so5aT4)l$k`a`wYi3At$;?bB3 zhC`q`W-c8Ui!50q$<*L%a#GO26Ls@C@ga0E0ZX`q9PIkZ4Rq_L%%sE zapnl-Ud>mtl&o(6Q%UMu(i{jU>MF29U*eseZ0yAPxI4s-vGN1MtR$$WdAUG;;Ru@5 z09#|R-q^z>k;l@zWbe5!jZrPImgV?nb}l`>c@B#Ti&%=K|y`)2{JTQ`C%dM zIIw+oi~3L*7t)guOSA|2R+HvGE)B~k2Qx3i4h_qcOG>y0BfzOvF#+}3_+KW?>F@^< zyxjIedPpR%SV@D5s(;Vk50vHM8#w;n>sK>jEamKHnS0-Pp@%ER{-)GveDmx1cW(cq z_j$R>s6!LDLPFT2qrJE$y1x9lV-dR_jbhxvs5vzkA49}`xJp)0@;+PZK>28rTUCdz z-_(RkRJvc~KsT|qiBdtdKU?n;*>4RG_e`z6BN^y=ZufN<=%Wgp^{#8OHf4KD-bcw*IWVE^^pw}us)H|Es?dvApwGhgN zno}#Yp)a(7qAUE+0i|`TQOL1EzH3sdq8I?s4@s{-4W_t+U{ib|DMFXSDjq6pg~DmI zcrgexocDIt*1SLuWzilu!JR|RU`v_u4})O){V74q!glZ?zhQU^b1yjYc#xANDCwm_ z7yuTpUf7a}@j+tCkI@fggH8GEr~?cc+u7l|noyF?kITK*`q<^QFAya|AwgZS4XdsE zXQ0V0BH&_B&T8{MlAv{2<=*rZd|!O_rm~?FUjWeO&1?mVQ0oV!{|^S(#2zg2U!%FAe=re zO~64wfoKqASFlJOYNm%Izi@&-bJDP_tvMoK6Yd)Z4LTMMR6icrCAg@`-FiXGpUFhL z9*`$9kQRIbMu1q8VmVf_Du#sy-#`feB-}$P!JA)c;|| z@~@}31!Q$&Pp#_2IQWcTfle1bZv{VlBxLVI*X*}3FHk?oS1gQ*o}CvtxYe#2)nASw z|4R{g@XlzQC>T$u0~~@?g8Dph!K%%IN9dS7`Uz||b*_tPmYxJ=F2{={OW2gZxVpdQ z$mbv$T0$2`mbWmm$)GzfllW#XYK-*2$^m#Rn53{Wg5s7ISd)-qVm)GqCi-Z0$BA^9 zCr!13VJEMw3mlKwWxe4Kzn#%Z4qZI&SR^_%VgGFXj>Q`kw%;Hy*&CmuAFh5vEPKI@ zm}w3sDMV*&gm%O`6;qaujP9~O@_+?=27j36*1`QpcJOzw!=1q8Z^?Aa=VzLgoWB2* zF+)2=%h~#Yt@)Ei?HH%L2nku-$1rttg(Br7uk3-L?3bvubOy|`F|)918?`cJl!Cte zJE!WnV_Z~;$nS}y=R?vg(vI;F{fO6MZhuddoXwL(b#c!rC>?k=&InZlhNXm#OL}}ZdZM1L%q(sFc|3*+Y z#<$s4cZ-Ock-ui;O-f_F!tLoXwwpPLs%_ECXCsWj`j((;ZbzoO$@T_fi2{2)4(2d_ z#(r{HU+qlI0OgTBrd7Q**+8i-hb~`+gm1=B%q_A>A*He=lWU~=r!lQa3k$UjT;^0) z?~yK*lqgIWq5$QR7NHbVL4wJ^x(uhz%Cgb%BbN`mF?nHZe`J=jVEc$pqh?06kckqQ+ZJ{ z;J^hYj)-qteHTfP1lc~_PNG zFvGHPXVb-z8c~td38lONeQmW0XlBm4;LlafyHDWnx!qF#}X+Uk%6d=8_Fqt2{uXI}pChODHVkMlo zC^lr`k(H9^>nTtX9~>e3Boo4ZjWjjwAunk=Zpq05Wa1LyET2KsF|h>^=kC@lynr@SEWm)*?o$t;cAL6cDH z;+QwYbGntELfO4Eh{Z z)NNNsC$!l%3xuj5Dp9Y?tBZr9#tkr~QJuA>6x3-hK4h`lTw@!14H{1-yufD(2ce?m zXpi7i+=Q12R8ry0QB+lo>lKRgbcP)}bTHDND7J!oo6;3FEikeXT4k!RRKZ`Oxoln2 zR$uDo-V(?Ok?;^i;oM}JoQjPf$myL^3k;h@-uLn_hs`oowE&+61pT{)r;d;TEWC>E3dqGnY%Gamgp9 zL^qhh|IJ_163QUZNtjlR7m+vr@q2!M+bHj%E_1ir|vg79H%>89#|!k)>R9rd+kZkif(Y6vF!6M*x;i7D}%@< z6-xXvm)V!^aewAMM5aVbP`A#XQoQMxexvoH@J(?vzODqX5y>VRMUJn~nrL;(_QeuW zXY$$tIm09w0c>7gg@q&J!)LfTzy6dKE78Abq_liPDa8S>i~79YLWJ`)y&-^>U{p^<|O-AEIUw{F$UB%5T?yG_rk~4 zWdFXR#IUMYp%CvOels8Qiv*W)^tv*ZR%W`m5eayMRNiGgOF{0Eq*KYWiz%Q%*1{Hz&Abi# zp?(N4&iJgByQuNLRL)&FJ;!Yg;D;Kn9Hd=Hm zzFEgls`^qtHD@L`N1h`0DNfoyZjlLBB`Wn!^nqtC8;}Fn2uHf#BHYT`1Eg#bT z;}nTlY0{XEkz4R(<9ZOD#Q5O+x=SUDFw3^qSp+7n79n=EmrP-Kn1{hj@$~BWrGL z9QhpmoW*Fxbg8V0%mhfvlz*|thH1ST+GJ^6JZ{o|cikHzGbSgfDgH@H@3HR*Rb;`? z%Ts)*wR%5F{GG|{Ys)QS76|c7jMSqfN~q zvN((0@^7#gKXn~{2Vs+#DDgiSiHT{I`WBzrkEm|z;>Np>X7lc6Uj`_v5U+K4hw?o9 zkR&ycSvH7w?WrO@UtX=xdIWE zVs6_z{g_(IgMmY1a(X@T*GCPMsc>8yh?D`{!{qWiB~HqV6u(-93Bg5o+a;>H4aRc|4fmvk& z`V5()BtSD)1$23$tKO!R6#J*r9kdn)LyjSasMHj$Az5>ZgHwT_~YzDb7ORIH|`mcB{gb#SFK=PVgZuUkk$SInzjhQ1-Jvby%? z(m8DGUt~#|%iz;VLbsoxAo;lZE#L053s(_sn4^zvu6gP>7t>o5@ z5)<5RGGynqW)@x7%3H~5+cZF^+n`AZc(n*n&A%+Gd}rjAj*c~$)JJsG8~$co2-*A= z6O_w}rh(b{rIIIjMEhfdTlK*5J#F>{~Kuk-)+-{~O4@Id16_XQOi2r7QvT)J@n| zq3Aqp5-+*A8%>@= z9{zLfx_4!w39Yz_4M>p_!uI9;pulI|Ac8ZK46u0=#He7jA)nT}ZeSbVx%iYaj?jQ# zK$gYxR!BeAAt)MVCaoh@#v6`s!1ntP``RAL`JitQ>;86BHX&Q`D6A@)ofga#X$Ivf z_;!#*M-Q%)z+i7>{!{mlvj?_ZyG{R09W!9GQ1auYRwj^VPdJg;&CR)j9Cs~!`VEk2 zYC(p&7$o(B0jrk4DCXJ;4Bg#$LvDq4x+h5XT3Z*&21t~wf43gTmObw2R-j90V&}#* zKatdej5ps)=0*X7uaLrftnp^@4|G2hpxg|uh4pScsmTmNLitI|1(VCeob^ab58@!* zNU(1HyF}xQ3J8Eokj78_+e6|a%zq(2sH3l^Y`WUEus4vRzwo!W);UDU4IdI33Z%Pyigv6XYvPuELbRdU zsdRZbTauxr+j3~EkA~8EIS$`VH|c+TPXBg5k-&7WGI=q9jud0xeqz!h1V1LM`xEke z>QS*yk$b>_G10d;`0CL zrusj!?EF7r>-wKR@;|TUe`o#spE2_P%NVK54BQhJL)`m!f{I0Q`dutQhaP6rR8IxAIeVa0|?C7?#gu%`w`T97#SohX+)7p?+90RzGw-&=bUa9^LQ zL;<@r{^j}9Xe1Q{n%n$WPoP0Q6?H=|EbKQ?>|k-w%U-aRORN>PL zLtp5`ANbqlbD{8F#h+O7Uio10joj++)kf^qM<7q|T0RZQSSs&B+qo2ByaiY^zk5Wl z-c1%xQ_{BNMbPM($q`Ny74|Sv8@cmd?*xVZxjHuR#RY>KmLFvjy|Jp1gT=m@|3uAy zOvgPoFjn&4$;UrY(T4=oQLOv`*D(bPz}iIr%Bue5Nj7f$5r|@}^WT2t;8}E7P&NNw zcv?;7e}4JjBoRVJd?24?D7O+-NXj`CnbnjiNM+%nP(tUPEH%$fz3EUcVo;i`sPFKF`_W=*Am3 zk}bt3*;{7h3Sq!aZVw>p#x%z{I(EK57MH!?;DkwJCBLYDIof1CF)NKF6*H}~w|mrz zaj?ahU83zz+DG2V_#zfOdpL_}6;xQ+RXd)M&$rFk=@#)da^EHaTg0Kym96ePVjOqZ zDYs4a=QgAA33_|*YW98$^|_qSaG--LvEJHC!S30M?WpKWbLuN}ojCvXweNKq@Z5J3 z3g5A#AAf|q1+bkul{s-?UUj%{4{*4@ zKU+GyvcC$~JA2LB?NRPR=-gR$saPe^0o+KjwAb;KfgcxE_R|Ta9?bF`qx!d3kN5eB zy`=u@E>fzmuexorR%SKRt%ZFXuOZiS!D-7reUob-ip;Sp31a2!R`1?V%hFj-dbbvo)7j^Iy6-}r7vw%Y)xum&x{~#3mBNm(hAOpxdLV~q z#UfxnIxG}idjX$`wECF(nz$M{tJucS%GnNCdSK&>>tdP_FE1TY{*JfL&0f+S(+sIQ z&dGf_IR)2=ohm~e87!CpdIClnx!G%moVS}6F#~g+9qV{fZHUA$GA9U2cvfXv~`N@NDi*g92_0qW^SEn z5w21sl<#8c!{r;Xl59Pc<0s!W0F_c@SF+e{l;iC>eIExK)7b|J+iN$R?Cp*q5I`?3 z?no!_ZsENDMu4=rQzR9x{=O_Ffpr^SPwhgabmqPxEg|r`p-|r9o(Gmx2^Y|oxD_(* zV#UpNJu~k`@dSzEI-^|e9x8BWd-^4__kSbm1NkI8g>Riod>Q0QmIQ+8o03NpYyZ?|A zW`>4FuTdT6KtZugf<*`tGiVbD4EhIeu9;AwbND9@#_i43!ki0jyCj{RX2yPc>q||R ziv;6!HFq9Opa5u2cbmUcmSkA{9dAl`)AL3vVmP~g*L4qB)|~wHVsP48yVKrfK26%% zLc3Ne z^}nY2XXo5#a4zo}(W~|7ez(K@c!14)*6T`YuEV}yD)0zb#$#V5*Ee7^^V&oHYuU#| z-*zxx+hZ&~xyJzv)$fup7Mlqwvorn?&xAB|I8?vjl7_D2e({nNjo6)8Z9hd~Tcb!Pa=~NDZH`=lw{I;*n=e zg`msR-TmRlgMB#r*=k2$nQL^cpWs?cmjl3H9WrsnN2xF1={^~RvCqC{C@6qGF?KBE za&p{yF znZA*`BEGL$TDSIFXrSHnl(?XKgA#1=HmCih?uUWLdBp`#u+h`aO>2E{Ft-^@f4Ga=D4??La(~6{|FC!6T($CYoYs9ea10r{sXq(2*$khi zu@!ph`Q{nmWHQg2MBBOx72L<6%3g53Upvujg>J+p-BtlVYmH$izKBHEpMhrMMPH9m z)7V$rZo%vUFBgKQu0yB7cUxNru6+`&ADEc&1YsO7^A0T9$Td_h%AD!D-8hiVt`ku? zWUa0@ZJuk5QRJ0;3*8^S5`jvJ)e|JRqgELT`E_NJ#ia5AI{^WYPdByKLsk0i!hE%J zWEE!u_jC8AL$>(sRV%*dH|@EG?H)eQ{h5XpE%%V|Z66$dtfCpU&%Q4&ardm(ixQse z_fAJk-t>m)qF(s1llLd|)t%P|#osK$Q7rv{$=Xj1o{n&?Vz9_&!-M439%EPTXqU4# zEl^+Less~aW0l3YWbvj^{=CFd#9Js&Fx1TN1sZzA=W#0Ff4ZjZe|0aM#KzlkFmoU6 zIg#DU$tOaqx}zfYy2lrA74Y;F?fZVM&sD8>d}yM}`}ApCc=?uJagFUxY^>}m5k7XS zaJSH?;psWR{(h)>?n?AYeiT*Iwh)B~_1tAaGgesZxBXJx+2y#Nqw>r?w$bAbZ0EAa z!_F>j^5=YZZS3agxE_0Kp3HI6{f(WR9E1ReD_O9)Oi~_KMgY_QwEjk; zHY}|JE;UEjpIwjQUw>6PHrabn`9-9oiatl(`mfx~;NZe?Y6R1ljnH<~X1gx?caMd30bbgu@`ZcUP(oyJ=Bd>B+ z2HtObY5c{lv~VaJCMm7Ji=_>c>q28y{2F9et?pf^Ntlxu) z|F8DGGpfn9S@#tMUJIb2fPkPPf^_K}M4I&8i&CV6^d3-9qy(e{1PoO`N)mb?5fEtt zQbTAVL4nW$K}slrz{&f5-`?L|>#ViUkJJ8qzn+zqJa_U;=AOCcnwfjJX}1U33Mu=z zCW2qgUMUZz`7{G2hnTnN=Y;btBP|S}Tj;{yx z@Vf^wQIw4}wQ}Ocy#zI0;9c+TfW(DaEFTULx#>B<;p|^v$NbfbY7x~^POtR0!e>Lq zo}??Ag@@Eb#CGo+CKlM_6tq3RTV%+k{ImW&XR)cvz@~EaN_Tr)Jjg_DfPSPcIBbN& zmTDX#);u3MT>T!!gAsL9iSdsh{zPNA+e!O&I(XlCp&zFboS;qMvtdbZkDIDA9VILbTwphF#5~|Jwp{x|LD~m+q*@Ur8x|% z>vZJZ*DJ)Pf~W@4_ohi1Xfqe`F}LLM5A38uVY3E(;pts9#Wvrr$Pf7ER)5xyRyeC~+ zMyeG&Wt~STxGz?v_N+S_l8}`9Yes2`I2V2J^>i`6nHwVxznhT{wubuwP@T>>++PAO zgJdr3RZ|UOo@;rBHton5$A=?Bjs(NHtD{WHhd+Pfcy{xd7#W5kSpVe(5S(#SrS2G5 zE#rr~1xuwB_ev}1h+JNJBdlQHfZXkDAHta6^(~<|Y$IUha2aI@{UT@LDABgL(L@Lh z^;M`Pjgrzj&UUfDSik|Q5ZfN%Jh;z1wFQU@I>4O{%=QP<%lOI#ER*S{h6~do7s0xd z^kP^43Md?~v8NT(D56<^%Qt`esAbaLZB;M)e9u5r^N(&6{CCsAGxU+EDM%pMYxAem zt9E_lJ{VU=SlvLxMTTyS?!B1u1~{)2WFq$qKHkdB7`R8BLY#B&QL((Zd`u8_ul$!( zBz#N0HE<+xh$Gag_Hv)+UdB27n0LQ(V&-?aPq(rQDNy_|6^CqC3acCvs4ufmhy2be zA-|=LRrAj;ddYBO+qU+I(G`=!KNN%jbq_KseXs~ZcLAjW?mdSO(3I#>;G^%$0%9d* zBY(K~0=9lN9BHSHz}cUedaX3e3un#dRgY|7>Q*L(!G8Cj$VuR28eg0Zw^i(KC`c*D zYg|a^eQ~fk7wxn{bbfN4N1*JovijjA>LCuz_h)q)e2P7hH!9##e}3G&w;>qMMtOkS zQTP`8vaPHRn_yt4{Bm^zciydBYx3|lX#DrSu)^9eNt?oTbYzQ(qnH8`Fla29?)w3= z+*xX)rGNRczaq3UI4RR{TzKc#NDk>|1wX9g1#2o- z@{g;=mG4q}CDh@6OyxPXE!SH8LX%9C?2u+0lC#$}1Fh~fhSqL)nwkj&7roI~kL|pX zT}g@1opS*SWL=1Q{n9*QCbj@a66e0R!P0VrYy^|?71QcAscG201myjOZo5`0RX!O( zMTS=T5790oU5jf0_qo82?%$9zx)At@tEph&k~fuecO;^7o#{-q?}P-^v&Kl;l!(&~ zUzc^A{Uchqx2VX!x6F%%jX(tq>%Q2RAC$$8Nc28+#m#eOn90RGx_5n>vRI3P(vC{c zwHel0Z)z^m-S7iPV}y$3vlX4Ez(-XwbZ?wizI9J`_1!=i!Q}2)URB}@O#50kVSG>W z(->!Uv7|h=V@jeqAda{E(S?b(ck*5_cTqt{`y-p%5+6zhr23a_5J&DsbYrUMTm0>R z4t42T(1~6Dds7U>F3(`ZnSIatX2s_)q_6zbSfabT9o|eWnkAaU6NmKB9uOe!SPghx5jS zeG-<^jOpa~;(zY1M)1b3V-_Dhl!D59x_*UdA%@aDsZ2tTR>6`sid%{rAN$=HENR9s zCgwfv*toX$wVH;8y~cuCuqH%sJ=N{5NZbX#LVv4+iA&gngusm zZO0OSTFpcqf6EE$sAX&}OK^+K_RHT|m>pfU-{I|F<~pZTRVcnus4Fuy*;6M89Yic4 zzV2Gj#1fy`Mz&14u@?$aCnE#q3QwW~Kd>gCEMw;T>p}uMIGw@X%KxAdk4?tu8uxyiikdMIE>q~TE1JnvOzNzA-n!dXMM0$Zs+Gz>$LW#T1sAf<{pH-JWQuMl$|ZeYO)<{p zbkxT9Difa$Q%j%AXxwzQ+ju>i`QF@%r0;`n0P}BqH1(n&I!g_4H0@8yFJIJ1eKYYQ zQHjoLz(u!c{=?bXK5+x?ulRUFc8C4W_by+qo%h&3X1wc>U$d&cu?NxIH+oDDqUW=> z5J)fb?9h)TRjwU++V6!~IYuF^1NK~-S0qsO-e}gtuSNVxpEe3NU@l4P083%>wA&gn zCHbrsYkH_og7zm4gAVroy@sC0&SV1tCNMNjwD$H)PrMkn8&;>WXJlrP8UR(vmE!2 z3xPby&Oq%d@I%H1_#pR8ylM$pSU+>ET(Bq+nEzr$JQJ!Ar4tqk>+6j$_{eMci7N$; zIx6VnqdYVeX8gLs;O+;ohCmjKkM^B9iBpTM&!Mt^#!tBImkd?(r6hkNmJFFz!iNLY zrr3mE)pDgwwLRXP@oh9qxfojOl!6X={$V&+39vTJ`^E%|y(9DXVAHgQCuf7na?W9l z?W|q9=k{pSSj4@lksDfd>R4j>^>4E2zO?ty?ubH>6qDTMK|#8PI2YgdH*MA+D8FNNRXpQml)d*mJ> znv!oOPvzNPl?S@xJ3O`*`f6h9Z9%KmJf`U9* z^W;O0tA@7oBUZ$7{Mu;pIGTnpqb2&m@T^L_cff zD|O3CA0S!)sN1UeTMHAgsW)aBu&9$xSFlv85H;ow<~0R=tRD-FY%lORGd6!Kx7m1S zZ+yKOD{<*XRkLrr8s=Aa3XS0R>X5V9Kl5e}?fqV68c2=f%WM=td-{;*Ylc+9#k?U9 z@|hV{7~8C)suEmH>sp33z^~_4jg%%@I5=zqJV6i(YxT^wh+{pEk04U;1C-Eu@6TIu zoINeFBbQ4XTWXqMH-a6Y1)y$YgruoguTFOFE`LI#40|E1t!r?Bjzua(s*_q5izmN% z1WnpegZX9ThB(;ble#hh7JiNw7e0+Ej^L5~JNHC~FOZzXqDw2|!aPK>D$=!k!o)3% zCV|7Q((^a{&dZyAWbN@6G6t^n0XwTbeR6O1X4Ek?`INOkGEw0DF+pzKZpjA&N-eXg z*{QVH-ePjVd3j@p4PvrTaHQiD#L2P3P>o8u;>V9Cum#!T4f|$Xq1o^E5O~j z5z>X?6vrO!u}dQ#>yT`%ulymeD#X*F|bZB>(~?zocQRkHjMrE64BfbN27y zN$pq2w1zd+6C;=2yqastt-(nlrZPz|V4qn-;6ty#(4uk9Hj|6)5`VgLR*A|K70T)G ziHzOy78M1&i{EmHXA#KUiucA(L)^jnuf={;jra{iHywDbKW0tXOSYJ14(87b!BtjG zwz`T-QjK^-hbD#tD@SjT=Q+;VuSd^karC9W=7SfcjVvCVi(WuUEa*Y)CmZi>Ni`}H zXdBHq+8*A>lh%4<8ts67aI2p!yP}H(Kk}}g4pX=_&p)eIRp4sUG`s3kHw~9dCQg6G zC=9JzQugK9G77^zGmomZox~izq?WB~HJb#I&7q@Gbe|?7+Z5uvgcZZXgw{%9Q=eJ_ zXE%u7r?ij0SlhEbUHbEYu1m0P7lE~+iyJrfi&Shg;CG{(S}T@w&!8t)&6VesL$aEP zUUiCL+@mB8`$F=GQ&Erw%m7%E-sI}QrY}7Y>Mjmo9ew5L^Sl1N7kK)O8s$xu0mmY2 zP;F{0YHyRgW5rj5?SBdh&(pCe2=@Z*yEaiuu(O*>w(UAdKlCIda2IJ2$b3mh zZPCPJStP;eGgxr8@Z$oY(ur?qX$`$)1qL524U;t4UBD0P(V+H zKhCQL20mT|x7=(EHx?J6?oNVE)(b}4cB78>S!GsA9Sp1JxL9S-gt@ij zli;kXRSGHz5fEffGh`-A#jSZ+gLTOQwwy8wtYtf^mG-0Zmc8;9S5>(FayLD6L3b@a z=45HK1}NvvZ7>G4gRQ+|q&5n9C9pI2ttzy6D|umOZ}zs&&9YoGSt5Oa# z<=evTe!;N%yNiRH1m7Tk=z8M_Rm_uhNQJ%n4`=a3*10gF)E^hVO& z9=%3;3@rixS!3RcRuu$W#*JNu)aUuOGwZ}f;p?%;{uN}|dN?Fpgpj}g+f`)VJkqb* zDIpf%^eUE1Z$1dQ;_AvW$Os~bH-(2pzU+}UW$SNh@FeI#!EkxEwYl%^M$V~|h-|!Z zT|J};Hn3Bp5Mv30Tq5^8BL_FMLP8wPst3)Q^I6J039hivbiLKyw*?W^n)jw`F(xEW z#mI-+4fd+6Dh%$WZ@KA%#3i7?z5*Z*O>7m&rz{wCt4&(Gt>eT7z05=t!E0%dkQ@rx zm(KNc9Za?fJ#ZHgM7^wWFft@yITrol3h_@Iua3qj(y%A2Co`-@-B%IT(R?C`TANLX zxe&QPsh3adt@7}Am{oB!ZYFfFQ5@m$k!4^vsyKQ9#y<8eFzMoRmSkM}@#us2@wnHr zH?uTk@6$J+tkfgcGsG8a?hK{OuPHko<=Q^vAGB+~twT+`3?!S??`VOKFBYO#nA{UG zhC@TPpvXe!l&^XoCRr;z<6k##rfu}Z*Ye*$GKQ{wH#WG@*DE1ethi6VWaayl$*Xr- zdE3HdCL6_f1&7?(j&l^8lbs~q#&mlH#;K?B)J$H>f2L!^E_AH@CV(7GM(Lh z7+)Xv%t)?1#+v;7E|IbEJ!`Al)TU+W%;Qcgh+?vO6LSSy|D2C2SK@kKdsUr>^BK@q zu4@Ph(Vi7xucn^B@Un(oJESzR3d<{dZ!@f(MK1`5VHspL&ZXx;@Xd;gJjj&t`&4i( zWQ!=kcD#}KB=<3Y4cA%t@THx>{qXa%T%I?U-qgT!#_zLLUSQs|3xB}B>r(YRG`T%Y zkZ(BUT&|7`*nzje_tyFG!i^qNh-yu`KP1)ZTkV^r&X%&3#p z82dOx=7}vuQFYu;LwOP{WM_u6$~9ka;gYYzwtTNw(>p=5OL7IS=&o1YNpHiT-xyCl1e?Jm+UG zB~xgapcI!O_~Nc_lanNBmv$*(r8~N|DlL%Md(yRb06Hs8=04c$%s_6(z%ks^TtQt( z2Vbb|m$tC8cgHVb+*>281S&8|xJEkF+Wl>bkMoMzGmSiZ5+l2G>6(ApYPGiZk(e}~ zvA~we4e+vKmix$Mnc|}|+&aHv=y&)l?OTH5@`3G-4(_A_I5jsFOZlg#e5LaJ(mBd5 zQk3q5CTcnMRKmZE8^Uk$VS+fh0 zwXEkDk`+>7d(ZI{`G5Y?{h25YJBt=|EHQOy0UGw{B!yC` z;=Nb&s_jpAD^BYD|I1s~lNnc!4GYOZr-n;ieNNHhyW1IOR~iNv4WGY>J(Y`DNQ0Ap z@pPZPH}rc~NM$DeUa@^HcK<%vHTa=tepGvS)Nx|B%0tJ1XWk;98eBAa8_W}FJj%j1 zd{Edy`cc}VR2K7KHErW{(Xh|K;9|vo?)ljV@eRxx`4JSnioAilu%I@*9U=I7Y<56Guo`y9iFsG9)Ke?B192WoEw=wu1{dTiO=VAwRF6 zGg|>d#?dcC5#LDaP;Q_l_?2hikzs|~ytb1HCq%L7X6in??CmB7fTrbJbiXu@Z*z)oTJego~%6 zDlL~=)kHbb)QDe8HISAlZQmT8^|FfDP@0pNp)}#mB*IgdCsBlq9U^tLmRrHbJ?TRnFHh(Rvn_N~Sq&q&bn2E;? ze(rFIZyF81eUNj0=4n|SsL}i$lr|LQ21iBQk&rGQBzr*WUXneVhF$xu;$&-&2vm$? zZGTB^o&#zKJB>s(C4D*`nw(u0x*gg0BGl_(fLaV!c>3Z|yLMU1)k^%}ZUCvoB0usq z10?(|JK-8VW19DcpgTBo0@dru!m~wfzJOFXp7logJG>?+J2v z-RQnsIW?3jYfkJuUN3c#}cqHG5Xk)PYDRZ>D^0Z;CimNjV*v3>^TUE z{<_tKvswG7dFtV|#EiK!1h$nw>4^+X^-NOPPj#y$FK!#%6)RnENQz)hR39oVV0>%2 zrYDh=Yw$p(_#{HU{atS(->E@N7+8BBiIQoxL*4dBvzV8(T|wh4slv|%wAp*H6loi`d`Z>)vh4viy*3s{rNDzKgA(o>8pFO-~1B&FW2x=`#j z3Xfjfxb8t!TG9nqFb$!Vd(T=K}#OVtDA`ad$0WGm@}fcQ}8FFBg#kz^pkeyvKbSw*mVCWf7PyTiyf0Ifh+`T zAc_blg26q3?dd`NLR1(zO$}OX*ik(|aj$APU5~k0Qa^Ewuy!opjWe>kiSf$=1|y#7 z5!48zmtnjf)%A-0;b@oV?=vkbrc~5RNG|P#Ig^8%GGp&1+Zo&=Kg&5pgZo2F@tZ>= z1xxC*!rPXPsS)|^HDeB^qn^I;17+7n$Bd-X2`l)aos(mAGspRp2fRXL)KspSR2H!; zIdk{~i5OS%XW_y-@}8||C)z8xpOYLn)fM>pY=Q`ch2@nb)H zfFpN%W_&8jx;6nxB7*o00|q=QA`1jkju%-2HtT1Q152|yE3Va%kaa?a?8~DnY=5## z^HbF`_5Tp*UxAZ|(7?Kykwu1LJ<^weGB&uxOyyh9`eOXF4W`y$yiO+hr$#p)qV#qd z;u;$JXq0GW31veKs@sKXVW`v2LsROpr7LBvcSIZ4zum4`9+Ysl8CwzYldGtCefOwR zcij5OK1>OyDxy(8QAi zS=YbTc{9R2%BauJ)b@(Wt@pdug zqci&@y+s}h3MY-%+=1+^e`7Ub{-$TLQmieN&7Cs=`Yb}_ixtL3Run|i4!g|>jIev# z1AU7bSQ`V*Fz%0UcuYR@_fA`6>jb+}5&6aBFgv(hNFRa28TLu&el&Qfd9K*gfivO> z$i*X1N9uJV^ij~@dX>?typqo2yu&W`1UAZl5$hf?>!m@*`hK-$^4y5f^p|>tB3v8B z10HJ_eB_GMifC4_DSfuP0c~oH=WAYwTYEhuyy=S9oTMk!h8h6~GaXR)0&_Lc0Aq zG#4}Fqs@<=c*b-GwVTm z7?$}xFlGNi!dejaoxPou<{D{u%-?w9TO47W{ni)e zzRRv)?H|$2R452o5K)L)#}+71s-{{dZKa{n?Yd+GqA_b&o3 zX*IvbR*-p`p4BWrBDOzyc?i5|v4P}G4q3$998CdnpY7~||D_F6)J%zO5zC;+a`H;u zhtoa4i%LqfN)&X}3j$zI^ejG+bad~#oLP_HuO77eQUL4tDC&^xG{Wk06Ypwm`w#@G zqYM31YSygd3f7Y%El;wJQ~DoU+YXY&sb{wT(rlIldAXIDj1;bhyq)@Gh3`9uP01eN zi}Sg^bGJy>+Lgyc_p!A(yPK=)3%x9zXv10&f`p@0+7e&yq(*R?+?j~w>f7=2{-OR- zGf}YbPm2A81s9D<%+0c0qf6aQ9aYq`@1YtTHpXn?0`-tXLbH zEHKMEVCn!L1nIxTUgR(5DBTue3%-oKmek|gh?a4uR6ZUCY|rR6C=akl^EvIh#=I?OX4s1Ml_rM)PGpPHyx&xe`NJBH*hZTJe0HD~j_gOu)-l!9D3|9r?vH)qrJYOi zc|@5$n5z%hi2kJ8JpN7kWOT7*PUXqVMsb>mAdXR#38h>m0%~E%m+zN+G?_>tD!2Q< zoBM-0Iu6Unton8{hkri+ea3EnnuwC)`q)$7aI{Qi0pkOb9nKWfKOZh`rifLhwfj!4 z&{Aq}bIaXF?xZFoc7e?tFs`Y_4_Lucxe(A8Hs$G4S~rlGX<78DkmaBDBYHVjx`m52 z=olo#04AC=@7sasTW9snx%&cnjBTq)4R+19a)xb5xuQlQ!441c#VFnj0r|d>Adx}_ zdbi?Q^2Eda6~EF%qB}_>*F&l4)OB+ zUV8$W-m(-D@%K3Yvc0NXMdnemIs)L5i9pHZE__jl1`onhZh!v^T!q!LiSD$ccn- z0QbJphc__BFCEAFPHFk^y0WCo%ynu;?le!%Re`4l@q@_N)CZV!moDPzZ-=i`1Oqxv zjw<%qwPf#NT~o(yixr{bhL?h$vL{@p94+TZ`P*%Fm^517A6pylNT28a_6TGns+nnt zCRf&oKDkSp@tI%&eq(uSQ1L0WaK-O@o3fZr#5h+QRBCu)vKoEzz$57QPsM^79NpfV zB5;V7s2~Zoyo7li3KlSkM8UCR$pPU@7u`(`g8lZ?s%r)Zra5j0(dFcNgJbCcbQdK5 z_BW)X^RtzM3S+4p@TZB-;^npCIkQQbjOHX>8IBROT9D7`SgKA)7s-Eqc3ao;1%fMgf%rY=hj>0O&hAJ6mm%`q>~w{ zk)aQtvg+E*cusY6Y4#<9urTKH#S?*%D(y6s?mFA9IPgQ+=p>&|wUiPRj4eOXlhy7N zJB01kNl9iLV}&F*nL9V}LC2}?Z`zLEVjis7B|HnH9K18!)Iip)sS9#e&wl)d&GS(v z5tZd}Fh{XTKfUQ_&zGU0#E|+g$HQzgt=P|X0Joy+I+7_~_R9J-j_5qw$9dAdTb`iG zDNAW610Uv9ZOFzAznqv3h@<@9EZ9Hb2Nh$f6gtDbFOXFNl|2acpzCGf*0wAIr~tfV zrpIi|ksr%k!oN1yR1W88hx>?~iP)IIa>TDyBIvO1GAH#wf&cS(<}dE<|2>NO_qYDv z#;N}wBs|HmdbSHY9d~#CDM8*k+gCZ=iaCN^bhl!m>KKw~_29`3S++?A_phGB^YWy_ zvn&7c&REZg{!M?dY*Qp46id4E}oN!JtCgDw7BDJu!Fqmc&hNT;dsb#PX7eWbhZo&JUd)+D& New to KubeDB? Please start [here](/docs/README.md). + +> New to KubeDB? Please start [here](/docs/README.md). + +# Configure Druid Cluster + +In Druid cluster, there are six nodes available coordinators, overlords, brokers, routers, historicals, middleManagers. In this tutorial, we will see how to configure each node of a druid cluster. + +## Before You Begin + +- At first, you need to have a Kubernetes cluster, and the `kubectl` command-line tool must be configured to communicate with your cluster. If you do not already have a cluster, you can create one by using [kind](https://kind.sigs.k8s.io/docs/user/quick-start/). + +- Now, install KubeDB cli on your workstation and KubeDB operator in your cluster following the steps [here](/docs/setup/README.md) and make sure to include the flags `--set global.featureGates.Druid=true` to ensure **Druid CRD** and `--set global.featureGates.ZooKeeper=true` to ensure **ZooKeeper CRD** as Druid depends on ZooKeeper for external dependency with helm command. + +- To keep things isolated, this tutorial uses a separate namespace called `demo` throughout this tutorial. + +```bash +$ kubectl create namespace demo +namespace/demo created + +$ kubectl get namespace +NAME STATUS AGE +demo Active 9s +``` + +> Note: YAML files used in this tutorial are stored in [here](https://github.com/kubedb/docs/tree/{{< param "info.version" >}}/docs/guides/druid/configuration/yamls) in GitHub repository [kubedb/docs](https://github.com/kubedb/docs). + +## Find Available StorageClass + +We will have to provide `StorageClass` in Druid CR specification. Check available `StorageClass` in your cluster using the following command, + +```bash +$ kubectl get storageclass +NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE +standard (default) rancher.io/local-path Delete WaitForFirstConsumer false 1h +``` + +Here, we have `standard` StorageClass in our cluster from [Local Path Provisioner](https://github.com/rancher/local-path-provisioner). + +Before deploying `Druid` cluster, we need to prepare the external dependencies. + +## Create External Dependency (Deep Storage) + +Before proceeding further, we need to prepare deep storage, which is one of the external dependency of Druid and used for storing the segments. It is a storage mechanism that Apache Druid does not provide. **Amazon S3**, **Google Cloud Storage**, or **Azure Blob Storage**, **S3-compatible storage** (like **Minio**), or **HDFS** are generally convenient options for deep storage. + +In this tutorial, we will run a `minio-server` as deep storage in our local `kind` cluster using `minio-operator` and create a bucket named `druid` in it, which the deployed druid database will use. + +```bash + +$ helm repo add minio https://operator.min.io/ +$ helm repo update minio +$ helm upgrade --install --namespace "minio-operator" --create-namespace "minio-operator" minio/operator --set operator.replicaCount=1 + +$ helm upgrade --install --namespace "demo" --create-namespace druid-minio minio/tenant \ +--set tenant.pools[0].servers=1 \ +--set tenant.pools[0].volumesPerServer=1 \ +--set tenant.pools[0].size=1Gi \ +--set tenant.certificate.requestAutoCert=false \ +--set tenant.buckets[0].name="druid" \ +--set tenant.pools[0].name="default" + +``` + +Now we need to create a `Secret` named `deep-storage-config`. It contains the necessary connection information using which the druid database will connect to the deep storage. + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: deep-storage-config + namespace: demo +stringData: + druid.storage.type: "s3" + druid.storage.bucket: "druid" + druid.storage.baseKey: "druid/segments" + druid.s3.accessKey: "minio" + druid.s3.secretKey: "minio123" + druid.s3.protocol: "http" + druid.s3.enablePathStyleAccess: "true" + druid.s3.endpoint.signingRegion: "us-east-1" + druid.s3.endpoint.url: "http://myminio-hl.demo.svc.cluster.local:9000/" +``` + +Let’s create the `deep-storage-config` Secret shown above: + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/backup/application-level/examples/deep-storage-config.yaml +secret/deep-storage-config created +``` + +## Use Custom Configuration + +Say we want to change the default maximum number of tasks the MiddleManager can accept. Let's create the `middleManagers.properties` file with our desire configurations. + +**middleManagers.properties:** + +```properties +druid.worker.capacity=5 +``` + +and we also want to change the number of processing threads to have available for parallel processing of segments of the historicals nodes. Let's create the `historicals.properties` file with our desire configurations. + +**historicals.properties:** + +```properties +druid.processing.numThreads=3 +``` + +Let's create a k8s secret containing the above configuration where the file name will be the key and the file-content as the value: + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: configsecret + namespace: demo +stringData: + middleManagers.properties: |- + druid.worker.capacity=5 + historicals.properties: |- + druid.processing.numThreads=3 +``` + +```bash +$ kubectl apply -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/configuration/config-file/yamls/config-secret.yaml +secret/config-secret created +``` + +> To provide custom configuration for other nodes add values for the following `key` under `stringData`: +> - Use `common.runtime.properties` for common configurations +> - Use `coordinators.properties` for configurations of coordinators +> - Use `overlords.properties` for configurations of overlords +> - Use `brokers.properties` for configurations of brokers +> - Use `routers.properties` for configurations of routers + +Now that the config secret is created, it needs to be mentioned in the [Druid](/docs/guides/druid/concepts/druid.md) object's yaml: + +```yaml +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-with-config + namespace: demo +spec: + version: 28.0.1 + configSecret: + name: config-secret + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + routers: + replicas: 1 + deletionPolicy: WipeOut +``` + +Now, create the Druid object by the following command: + +```bash +$ kubectl apply -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/configuration/config-file/yamls/druid-with-monitoring.yaml +druid.kubedb.com/druid-with-config created +``` + +Now, wait for the Druid to become ready: + +```bash +$ kubectl get dr -n demo -w +NAME TYPE VERSION STATUS AGE +druid-with-config kubedb.com/v1 3.6.1 Provisioning 5s +druid-with-config kubedb.com/v1 3.6.1 Provisioning 7s +. +. +druid-with-config kubedb.com/v1 3.6.1 Ready 2m +``` + +## Verify Configuration + +Lets exec into one of the druid middleManagers pod that we have created and check the configurations are applied or not: + +Exec into the Druid middleManagers: + +```bash +$ kubectl exec -it -n demo druid-with-config-middleManagers-0 -- bash +Defaulted container "druid" out of: druid, init-druid (init) +bash-5.1$ +``` + +Now, execute the following commands to see the configurations: +```bash +bash-5.1$ cat conf/druid/cluster/data/middleManager/runtime.properties | grep druid.worker.capacity +druid.worker.capacity=5 +``` +Here, we can see that our given configuration is applied to the Druid cluster for all brokers. + +Now, lets exec into one of the druid historicals pod that we have created and check the configurations are applied or not: + +Exec into the Druid historicals: + +```bash +$ kubectl exec -it -n demo druid-with-config-historicals-0 -- bash +Defaulted container "druid" out of: druid, init-druid (init) +bash-5.1$ +``` + +Now, execute the following commands to see the metadata storage directory: +```bash +bash-5.1$ cat conf/druid/cluster/data/historical/runtime.properties | grep druid.processing.numThreads +druid.processing.numThreads=3 +``` + +Here, we can see that our given configuration is applied to the historicals. + +### Verify Configuration Change from Druid UI +You can also see the configuration changes from the druid ui. For that, follow the following steps: + +First port-forward the port `8888` to local machine: + +```bash +$ kubectl port-forward -n demo svc/druid-with-config-routers 8888 +Forwarding from 127.0.0.1:8888 -> 8888 +Forwarding from [::1]:8888 -> 8888 +``` + + +Now hit the `http://localhost:8888` from any browser, and you will be prompted to provide the credential of the druid database. By following the steps discussed below, you can get the credential generated by the KubeDB operator for your Druid database. + +**Connection information:** + +- Username: + + ```bash + $ kubectl get secret -n demo druid-with-config-admin-cred -o jsonpath='{.data.username}' | base64 -d + admin + ``` + +- Password: + + ```bash + $ kubectl get secret -n demo druid-with-config-admin-cred -o jsonpath='{.data.password}' | base64 -d + LzJtVRX5E8MorFaf + ``` + +After providing the credentials correctly, you should be able to access the web console like shown below. + +

+  druid-ui +

+ + +You can see that there are 5 task slots reflecting with our provided custom configuration of `druid.worker.capacity=5`. + +## Cleanup + +To cleanup the Kubernetes resources created by this tutorial, run: + +```bash +$ kubectl delete dr -n demo druid-dev + +$ kubectl delete secret -n demo configsecret-combined + +$ kubectl delete namespace demo +``` + +## Next Steps + +- Detail concepts of [Druid object](/docs/guides/druid/concepts/druid.md). +- Different Druid topology clustering modes [here](/docs/guides/druid/clustering/_index.md). + +[//]: # (- Monitor your Druid database with KubeDB using [out-of-the-box Prometheus operator](/docs/guides/druid/monitoring/using-prometheus-operator.md).) +- Want to hack on KubeDB? Check our [contribution guidelines](/docs/CONTRIBUTING.md). + diff --git a/docs/guides/druid/configuration/config-file/yamls/config-secret.yaml b/docs/guides/druid/configuration/config-file/yamls/config-secret.yaml new file mode 100644 index 0000000000..6067ee7dd2 --- /dev/null +++ b/docs/guides/druid/configuration/config-file/yamls/config-secret.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Secret +metadata: + name: new-config + namespace: demo +stringData: + middleManagers.properties: |- + druid.worker.capacity=5 + historicals.properties: |- + druid.processing.numThreads=3 diff --git a/docs/guides/druid/configuration/config-file/yamls/deep-storage-config.yaml b/docs/guides/druid/configuration/config-file/yamls/deep-storage-config.yaml new file mode 100644 index 0000000000..3612595828 --- /dev/null +++ b/docs/guides/druid/configuration/config-file/yamls/deep-storage-config.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Secret +metadata: + name: deep-storage-config + namespace: demo +stringData: + druid.storage.type: "s3" + druid.storage.bucket: "druid" + druid.storage.baseKey: "druid/segments" + druid.s3.accessKey: "minio" + druid.s3.secretKey: "minio123" + druid.s3.protocol: "http" + druid.s3.enablePathStyleAccess: "true" + druid.s3.endpoint.signingRegion: "us-east-1" + druid.s3.endpoint.url: "http://myminio-hl.demo.svc.cluster.local:9000/" + diff --git a/docs/guides/druid/configuration/config-file/yamls/druid-with-config.yaml b/docs/guides/druid/configuration/config-file/yamls/druid-with-config.yaml new file mode 100644 index 0000000000..b2225f22b1 --- /dev/null +++ b/docs/guides/druid/configuration/config-file/yamls/druid-with-config.yaml @@ -0,0 +1,17 @@ +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-with-config + namespace: demo +spec: + version: 28.0.1 + configSecret: + name: config-secret + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + routers: + replicas: 1 + deletionPolicy: WipeOut diff --git a/docs/guides/druid/configuration/podtemplating/index.md b/docs/guides/druid/configuration/podtemplating/index.md new file mode 100644 index 0000000000..89c4ae2c68 --- /dev/null +++ b/docs/guides/druid/configuration/podtemplating/index.md @@ -0,0 +1,618 @@ +--- +title: Run Druid with Custom PodTemplate +menu: + docs_{{ .version }}: + identifier: guides-druid-configuration-podtemplating + name: Customize PodTemplate + parent: guides-druid-configuration + weight: 15 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- + +> New to KubeDB? Please start [here](/docs/README.md). + +# Run Druid with Custom PodTemplate + +KubeDB supports providing custom configuration for Druid via [PodTemplate](/docs/guides/druid/concepts/druid.md#spec.topology). This tutorial will show you how to use KubeDB to run a Druid database with custom configuration using PodTemplate. + +## Before You Begin + +- At first, you need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. If you do not already have a cluster, you can create one by using [kind](https://kind.sigs.k8s.io/docs/user/quick-start/). + +- Now, install KubeDB cli on your workstation and KubeDB operator in your cluster following the steps [here](/docs/setup/README.md). + +- To keep things isolated, this tutorial uses a separate namespace called `demo` throughout this tutorial. + + ```bash + $ kubectl create ns demo + namespace/demo created + ``` + +> Note: YAML files used in this tutorial are stored in [docs/guides/druid/configuration/podtemplating/yamls](https://github.com/kubedb/docs/tree/{{< param "info.version" >}}/docs/guides/druid/configuration/podtemplating/yamls) folder in GitHub repository [kubedb/docs](https://github.com/kubedb/docs). + +## Overview + +KubeDB allows providing a template for `leaf` and `aggregator` pod through `spec.topology.aggregator.podTemplate` and `spec.topology.leaf.podTemplate`. KubeDB operator will pass the information provided in `spec.topology.aggregator.podTemplate` and `spec.topology.leaf.podTemplate` to the `aggregator` and `leaf` PetSet created for Druid database. +KubeDB allows providing a template for all the druid pods through `spec.topology..podTemplate`. KubeDB operator will pass the information provided in `spec.topology..podTemplate` to the corresponding PetSet created for Druid database. + +KubeDB accept following fields to set in `spec.podTemplate:` + +- metadata: + - annotations (pod's annotation) + - labels (pod's labels) +- controller: + - annotations (statefulset's annotation) + - labels (statefulset's labels) +- spec: + - volumes + - initContainers + - containers + - imagePullSecrets + - nodeSelector + - affinity + - serviceAccountName + - schedulerName + - tolerations + - priorityClassName + - priority + - securityContext + - livenessProbe + - readinessProbe + - lifecycle + +Read about the fields in details in [PodTemplate concept](/docs/guides/druid/concepts/druid.md#spectopology), + + +## Create External Dependency (Deep Storage) + +Before proceeding further, we need to prepare deep storage, which is one of the external dependency of Druid and used for storing the segments. It is a storage mechanism that Apache Druid does not provide. **Amazon S3**, **Google Cloud Storage**, or **Azure Blob Storage**, **S3-compatible storage** (like **Minio**), or **HDFS** are generally convenient options for deep storage. + +In this tutorial, we will run a `minio-server` as deep storage in our local `kind` cluster using `minio-operator` and create a bucket named `druid` in it, which the deployed druid database will use. + +```bash + +$ helm repo add minio https://operator.min.io/ +$ helm repo update minio +$ helm upgrade --install --namespace "minio-operator" --create-namespace "minio-operator" minio/operator --set operator.replicaCount=1 + +$ helm upgrade --install --namespace "demo" --create-namespace druid-minio minio/tenant \ +--set tenant.pools[0].servers=1 \ +--set tenant.pools[0].volumesPerServer=1 \ +--set tenant.pools[0].size=1Gi \ +--set tenant.certificate.requestAutoCert=false \ +--set tenant.buckets[0].name="druid" \ +--set tenant.pools[0].name="default" + +``` + +Now we need to create a `Secret` named `deep-storage-config`. It contains the necessary connection information using which the druid database will connect to the deep storage. + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: deep-storage-config + namespace: demo +stringData: + druid.storage.type: "s3" + druid.storage.bucket: "druid" + druid.storage.baseKey: "druid/segments" + druid.s3.accessKey: "minio" + druid.s3.secretKey: "minio123" + druid.s3.protocol: "http" + druid.s3.enablePathStyleAccess: "true" + druid.s3.endpoint.signingRegion: "us-east-1" + druid.s3.endpoint.url: "http://myminio-hl.demo.svc.cluster.local:9000/" +``` + +Let’s create the `deep-storage-config` Secret shown above: + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/backup/application-level/examples/deep-storage-config.yaml +secret/deep-storage-config created +``` + +## CRD Configuration + +Below is the YAML for the Druid created in this example. Here, [`spec.topology.aggregator/leaf.podTemplate.spec.args`](/docs/guides/mysql/concepts/database/index.md#specpodtemplatespecargs) provides extra arguments. + +```yaml +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-cluster + namespace: demo +spec: + version: 28.0.1 + configSecret: + name: config-secret + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + coordinators: + replicas: 1 + podTemplate: + spec: + containers: + - name: druid + resources: + limits: + memory: "2Gi" + cpu: "600m" + requests: + memory: "2Gi" + cpu: "600m" + brokers: + replicas: 1 + podTemplate: + spec: + containers: + - name: druid + resources: + limits: + memory: "2Gi" + cpu: "600m" + requests: + memory: "2Gi" + cpu: "600m" + routers: + replicas: 1 + deletionPolicy: WipeOut +``` + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/configuration/podtemplating/yamls/druid-cluster.yaml +druid.kubedb.com/druid-cluster created +``` + +Now, wait a few minutes. KubeDB operator will create necessary PVC, petset, services, secret etc. If everything goes well, we will see that `druid-cluster` is in `Ready` state. +```bash +$ kubectl get druid -n demo +NAME TYPE VERSION STATUS AGE +druid-cluster kubedb.com/v1alpha2 28.0.1 Ready 6m5s +``` + +Check that the petset's pod is running + +```bash +$ kubectl get pods -n demo -l app.kubernetes.io/instance=druid-cluster +NAME READY STATUS RESTARTS AGE +druid-cluster-brokers-0 1/1 Running 0 7m2s +druid-cluster-coordinators-0 1/1 Running 0 7m9s +druid-cluster-historicals-0 1/1 Running 0 7m7s +druid-cluster-middlemanagers-0 1/1 Running 0 7m5s +druid-cluster-routers-0 1/1 Running 0 7m +``` + +Now, we will check if the database has started with the custom configuration we have provided. + +```bash +$ kubectl get pod -n demo druid-cluster-coordinators-0 -o json | jq '.spec.containers[].resources' +{ + "limits": { + "cpu": "600m", + "memory": "2Gi" + }, + "requests": { + "cpu": "600m", + "memory": "2Gi" + } +} + +$ kubectl get pod -n demo druid-cluster-brokers-0 -o json | jq '.spec.containers[].resources' +{ + "limits": { + "cpu": "600m", + "memory": "2Gi" + }, + "requests": { + "cpu": "600m", + "memory": "2Gi" + } +} +``` + +Here we can see the containers of the both `coordinators` and `brokers` have the resources we have specified in the manifest. + +## Using Node Selector + +Here in this example we will use [node selector](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/) to schedule our druid pod to a specific node. Applying nodeSelector to the Pod involves several steps. We first need to assign a label to some node that will be later used by the `nodeSelector` . Let’s find what nodes exist in your cluster. To get the name of these nodes, you can run: + +```bash +$ kubectl get nodes --show-labels +NAME STATUS ROLES AGE VERSION LABELS +lke212553-307295-339173d10000 Ready 36m v1.30.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=g6-dedicated-4,beta.kubernetes.io/os=linux,failure-domain.beta.kubernetes.io/region=ap-south,kubernetes.io/arch=amd64,kubernetes.io/hostname=lke212553-307295-339173d10000,kubernetes.io/os=linux,lke.linode.com/pool-id=307295,node.k8s.linode.com/host-uuid=618158120a299c6fd37f00d01d355ca18794c467,node.kubernetes.io/instance-type=g6-dedicated-4,topology.kubernetes.io/region=ap-south,topology.linode.com/region=ap-south +lke212553-307295-5541798e0000 Ready 36m v1.30.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=g6-dedicated-4,beta.kubernetes.io/os=linux,failure-domain.beta.kubernetes.io/region=ap-south,kubernetes.io/arch=amd64,kubernetes.io/hostname=lke212553-307295-5541798e0000,kubernetes.io/os=linux,lke.linode.com/pool-id=307295,node.k8s.linode.com/host-uuid=75cfe3dbbb0380f1727efc53f5192897485e95d5,node.kubernetes.io/instance-type=g6-dedicated-4,topology.kubernetes.io/region=ap-south,topology.linode.com/region=ap-south +lke212553-307295-5b53c5520000 Ready 36m v1.30.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=g6-dedicated-4,beta.kubernetes.io/os=linux,failure-domain.beta.kubernetes.io/region=ap-south,kubernetes.io/arch=amd64,kubernetes.io/hostname=lke212553-307295-5b53c5520000,kubernetes.io/os=linux,lke.linode.com/pool-id=307295,node.k8s.linode.com/host-uuid=792bac078d7ce0e548163b9423416d7d8c88b08f,node.kubernetes.io/instance-type=g6-dedicated-4,topology.kubernetes.io/region=ap-south,topology.linode.com/region=ap-south +``` +As you see, we have three nodes in the cluster: lke212553-307295-339173d10000, lke212553-307295-5541798e0000, and lke212553-307295-5b53c5520000. + +Next, select a node to which you want to add a label. For example, let’s say we want to add a new label with the key `disktype` and value ssd to the `lke212553-307295-5541798e0000` node, which is a node with the SSD storage. To do so, run: +```bash +$ kubectl label nodes lke212553-307295-5541798e0000 disktype=ssd +node/lke212553-307295-5541798e0000 labeled +``` +As you noticed, the command above follows the format `kubectl label nodes =` . +Finally, let’s verify that the new label was added by running: +```bash + $ kubectl get nodes --show-labels +NAME STATUS ROLES AGE VERSION LABELS +lke212553-307295-339173d10000 Ready 41m v1.30.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=g6-dedicated-4,beta.kubernetes.io/os=linux,failure-domain.beta.kubernetes.io/region=ap-south,kubernetes.io/arch=amd64,kubernetes.io/hostname=lke212553-307295-339173d10000,kubernetes.io/os=linux,lke.linode.com/pool-id=307295,node.k8s.linode.com/host-uuid=618158120a299c6fd37f00d01d355ca18794c467,node.kubernetes.io/instance-type=g6-dedicated-4,topology.kubernetes.io/region=ap-south,topology.linode.com/region=ap-south +lke212553-307295-5541798e0000 Ready 41m v1.30.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=g6-dedicated-4,beta.kubernetes.io/os=linux,disktype=ssd,failure-domain.beta.kubernetes.io/region=ap-south,kubernetes.io/arch=amd64,kubernetes.io/hostname=lke212553-307295-5541798e0000,kubernetes.io/os=linux,lke.linode.com/pool-id=307295,node.k8s.linode.com/host-uuid=75cfe3dbbb0380f1727efc53f5192897485e95d5,node.kubernetes.io/instance-type=g6-dedicated-4,topology.kubernetes.io/region=ap-south,topology.linode.com/region=ap-south +lke212553-307295-5b53c5520000 Ready 41m v1.30.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=g6-dedicated-4,beta.kubernetes.io/os=linux,failure-domain.beta.kubernetes.io/region=ap-south,kubernetes.io/arch=amd64,kubernetes.io/hostname=lke212553-307295-5b53c5520000,kubernetes.io/os=linux,lke.linode.com/pool-id=307295,node.k8s.linode.com/host-uuid=792bac078d7ce0e548163b9423416d7d8c88b08f,node.kubernetes.io/instance-type=g6-dedicated-4,topology.kubernetes.io/region=ap-south,topology.linode.com/region=ap-south +``` +As you see, the lke212553-307295-5541798e0000 now has a new label disktype=ssd. To see all labels attached to the node, you can also run: +```bash +$ kubectl describe node "lke212553-307295-5541798e0000" +Name: lke212553-307295-5541798e0000 +Roles: +Labels: beta.kubernetes.io/arch=amd64 + beta.kubernetes.io/instance-type=g6-dedicated-4 + beta.kubernetes.io/os=linux + disktype=ssd + failure-domain.beta.kubernetes.io/region=ap-south + kubernetes.io/arch=amd64 + kubernetes.io/hostname=lke212553-307295-5541798e0000 + kubernetes.io/os=linux + lke.linode.com/pool-id=307295 + node.k8s.linode.com/host-uuid=75cfe3dbbb0380f1727efc53f5192897485e95d5 + node.kubernetes.io/instance-type=g6-dedicated-4 + topology.kubernetes.io/region=ap-south + topology.linode.com/region=ap-south +``` +Along with the `disktype=ssd` label we’ve just added, you can see other labels such as `beta.kubernetes.io/arch` or `kubernetes.io/hostname`. These are all default labels attached to Kubernetes nodes. + +Now let's create a druid with this new label as nodeSelector. Below is the yaml we are going to apply: +```yaml +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-node-selector + namespace: demo +spec: + version: 28.0.1 + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + routers: + replicas: 1 + coordinators: + podTemplate: + spec: + nodeSelector: + disktype: ssd + deletionPolicy: Delete +``` + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/configuration/podtemplating/yamls/druid-node-selector.yaml +druid.kubedb.com/druid-node-selector created +``` +Now, wait a few minutes. KubeDB operator will create necessary petset, services, secret etc. If everything goes well, we will see that the `druid-node-selector` instance is in `Ready` state. + +```bash +$ kubectl get druid -n demo +NAME TYPE VERSION STATUS AGE +druid-node-selector kubedb.com/v1alpha2 28.0.1 Ready 54m +``` +You can verify that by running `kubectl get pods -n demo druid-node-selector-0 -o wide` and looking at the “NODE” to which the Pod was assigned. +```bash +$ kubectl get pods -n demo druid-node-selector-cooridnators-0 -o wide +NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES +druid-node-selector-cooridnators-0 1/1 Running 0 3m19s 10.2.1.7 lke212553-307295-5541798e0000 +``` +We can successfully verify that our pod was scheduled to our desired node. + +## Using Taints and Tolerations + +Here in this example we will use [Taints and Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) to schedule our druid pod to a specific node and also prevent from scheduling to nodes. Applying taints and tolerations to the Pod involves several steps. Let’s find what nodes exist in your cluster. To get the name of these nodes, you can run: + +```bash +$ kubectl get nodes --show-labels +NAME STATUS ROLES AGE VERSION LABELS +lke212553-307295-339173d10000 Ready 36m v1.30.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=g6-dedicated-4,beta.kubernetes.io/os=linux,failure-domain.beta.kubernetes.io/region=ap-south,kubernetes.io/arch=amd64,kubernetes.io/hostname=lke212553-307295-339173d10000,kubernetes.io/os=linux,lke.linode.com/pool-id=307295,node.k8s.linode.com/host-uuid=618158120a299c6fd37f00d01d355ca18794c467,node.kubernetes.io/instance-type=g6-dedicated-4,topology.kubernetes.io/region=ap-south,topology.linode.com/region=ap-south +lke212553-307295-5541798e0000 Ready 36m v1.30.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=g6-dedicated-4,beta.kubernetes.io/os=linux,failure-domain.beta.kubernetes.io/region=ap-south,kubernetes.io/arch=amd64,kubernetes.io/hostname=lke212553-307295-5541798e0000,kubernetes.io/os=linux,lke.linode.com/pool-id=307295,node.k8s.linode.com/host-uuid=75cfe3dbbb0380f1727efc53f5192897485e95d5,node.kubernetes.io/instance-type=g6-dedicated-4,topology.kubernetes.io/region=ap-south,topology.linode.com/region=ap-south +lke212553-307295-5b53c5520000 Ready 36m v1.30.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=g6-dedicated-4,beta.kubernetes.io/os=linux,failure-domain.beta.kubernetes.io/region=ap-south,kubernetes.io/arch=amd64,kubernetes.io/hostname=lke212553-307295-5b53c5520000,kubernetes.io/os=linux,lke.linode.com/pool-id=307295,node.k8s.linode.com/host-uuid=792bac078d7ce0e548163b9423416d7d8c88b08f,node.kubernetes.io/instance-type=g6-dedicated-4,topology.kubernetes.io/region=ap-south,topology.linode.com/region=ap-south +``` +As you see, we have three nodes in the cluster: lke212553-307295-339173d10000, lke212553-307295-5541798e0000, and lke212553-307295-5b53c5520000. + +Next, we are going to taint these nodes. +```bash +$ kubectl taint nodes lke212553-307295-339173d10000 key1=node1:NoSchedule +node/lke212553-307295-339173d10000 tainted + +$ kubectl taint nodes lke212553-307295-5541798e0000 key1=node2:NoSchedule +node/lke212553-307295-5541798e0000 tainted + +$ kubectl taint nodes lke212553-307295-5b53c5520000 key1=node3:NoSchedule +node/lke212553-307295-5b53c5520000 tainted +``` +Let's see our tainted nodes here, +```bash +$ kubectl get nodes -o json | jq -r '.items[] | select(.spec.taints != null) | .metadata.name, .spec.taints' +lke212553-307295-339173d10000 +[ + { + "effect": "NoSchedule", + "key": "key1", + "value": "node1" + } +] +lke212553-307295-5541798e0000 +[ + { + "effect": "NoSchedule", + "key": "key1", + "value": "node2" + } +] +lke212553-307295-5b53c5520000 +[ + { + "effect": "NoSchedule", + "key": "key1", + "value": "node3" + } +] +``` +We can see that our taints were successfully assigned. Now let's try to create a druid without proper tolerations. Here is the yaml of druid we are going to create. +```yaml +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-without-tolerations + namespace: demo +spec: + version: 28.0.1 + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + routers: + replicas: 1 + deletionPolicy: Delete +``` +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/configuration/podtemplating/yamls/druid-without-tolerations.yaml +druid.kubedb.com/druid-without-tolerations created +``` +Now, wait a few minutes. KubeDB operator will create necessary petset, services, secret etc. If everything goes well, we will see that a pod with the name `druid-without-tolerations-0` has been created and running. + +Check that the petset's pod is running or not, +```bash +$ kubectl get pods -n demo -l app.kubernetes.io/instance=druid-without-tolerations +NAME READY STATUS RESTARTS AGE +druid-without-tolerations-brokers-0 0/1 Pending 0 3m35s +druid-without-tolerations-cooridnators-0 0/1 Pending 0 3m35s +druid-without-tolerations-historicals-0 0/1 Pending 0 3m35s +druid-without-tolerations-middlemanager-0 0/1 Pending 0 3m35s +druid-without-tolerations-routers-0 0/1 Pending 0 3m35s +``` +Here we can see that the pod is not running. So let's describe the pod, +```bash +$ kubectl describe pods -n demo druid-without-tolerations-coordinators-0 +Name: druid-without-tolerations-coordinators-0 +Namespace: demo +Priority: 0 +Service Account: default +Node: kind-control-plane/172.18.0.2 +Start Time: Wed, 13 Nov 2024 11:59:06 +0600 +Labels: app.kubernetes.io/component=database + app.kubernetes.io/instance=druid-without-tolerations + app.kubernetes.io/managed-by=kubedb.com + app.kubernetes.io/name=druids.kubedb.com + apps.kubernetes.io/pod-index=0 + controller-revision-hash=druid-without-tolerations-coordinators-65c8c99fc7 + kubedb.com/role=coordinators + statefulset.kubernetes.io/pod-name=druid-without-tolerations-coordinators-0 +Annotations: +Status: Running +IP: 10.244.0.53 +IPs: + IP: 10.244.0.53 +Controlled By: PetSet/druid-without-tolerations-coordinators +Init Containers: + init-druid: + Container ID: containerd://62c9a2053d619dded2085e354cd2c0dfa238761033cc0483c824c1ed8ee4c002 + Image: ghcr.io/kubedb/druid-init:28.0.1@sha256:ed87835bc0f89dea923fa8e3cf1ef209e3e41cb93944a915289322035dcd8a91 + Image ID: ghcr.io/kubedb/druid-init@sha256:ed87835bc0f89dea923fa8e3cf1ef209e3e41cb93944a915289322035dcd8a91 + Port: + Host Port: + State: Terminated + Reason: Completed + Exit Code: 0 + Started: Wed, 13 Nov 2024 11:59:07 +0600 + Finished: Wed, 13 Nov 2024 11:59:07 +0600 + Ready: True + Restart Count: 0 + Limits: + memory: 512Mi + Requests: + cpu: 200m + memory: 512Mi + Environment: + DRUID_METADATA_TLS_ENABLE: false + DRUID_METADATA_STORAGE_TYPE: MySQL + Mounts: + /opt/druid/conf from main-config-volume (rw) + /opt/druid/extensions/mysql-metadata-storage from mysql-metadata-storage (rw) + /tmp/config/custom-config from custom-config (rw) + /tmp/config/operator-config from operator-config-volume (rw) + /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-9t5kp (ro) +Containers: + druid: + Container ID: containerd://3a52f120ca09f90fcdc062c94bf404964add7a5b6ded4a372400267a9d0fd598 + Image: ghcr.io/appscode-images/druid:28.0.1@sha256:d86e424233ec5a120c1e072cf506fa169868fd9572bbb9800a85400f0c879dec + Image ID: ghcr.io/appscode-images/druid@sha256:d86e424233ec5a120c1e072cf506fa169868fd9572bbb9800a85400f0c879dec + Port: 8081/TCP + Host Port: 0/TCP + Command: + /druid.sh + coordinator + State: Running + Started: Wed, 13 Nov 2024 11:59:09 +0600 + Ready: True + Restart Count: 0 + Limits: + cpu: 600m + memory: 2Gi + Requests: + cpu: 600m + memory: 2Gi + Environment: + DRUID_ADMIN_PASSWORD: Optional: false + DRUID_METADATA_STORAGE_PASSWORD: VHJ6!hFuT8WDjcyy + DRUID_ZK_SERVICE_PASSWORD: VHJ6!hFuT8WDjcyy + Mounts: + /opt/druid/conf from main-config-volume (rw) + /opt/druid/extensions/mysql-metadata-storage from mysql-metadata-storage (rw) + /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-9t5kp (ro) + +Conditions: + Type Status + PodReadyToStartContainers True + Initialized True + Ready True + ContainersReady True + PodScheduled True +Volumes: + data: + Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) + ClaimName: data-druid-without-tolerations-0 + ReadOnly: false + init-scripts: + Type: EmptyDir (a temporary directory that shares a pod's lifetime) + Medium: + SizeLimit: + kube-api-access-htm2z: + Type: Projected (a volume that contains injected data from multiple sources) + TokenExpirationSeconds: 3607 + ConfigMapName: kube-root-ca.crt + ConfigMapOptional: + DownwardAPI: true +QoS Class: Burstable +Node-Selectors: +Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s + node.kubernetes.io/unreachable:NoExecute op=Exists for 300s +Topology Spread Constraints: kubernetes.io/hostname:ScheduleAnyway when max skew 1 is exceeded for selector app.kubernetes.io/component=database,app.kubernetes.io/instance=druid-without-tolerations,app.kubernetes.io/managed-by=kubedb.com,app.kubernetes.io/name=druids.kubedb.com,kubedb.com/petset=standalone + topology.kubernetes.io/zone:ScheduleAnyway when max skew 1 is exceeded for selector app.kubernetes.io/component=database,app.kubernetes.io/instance=druid-without-tolerations,app.kubernetes.io/managed-by=kubedb.com,app.kubernetes.io/name=druids.kubedb.com,kubedb.com/petset=standalone +Events: + Type Reason Age From Message + ---- ------ ---- ---- ------- + Warning FailedScheduling 5m20s default-scheduler 0/3 nodes are available: 1 node(s) had untolerated taint {key1: node1}, 1 node(s) had untolerated taint {key1: node2}, 1 node(s) had untolerated taint {key1: node3}. preemption: 0/3 nodes are available: 3 Preemption is not helpful for scheduling. + Warning FailedScheduling 11s default-scheduler 0/3 nodes are available: 1 node(s) had untolerated taint {key1: node1}, 1 node(s) had untolerated taint {key1: node2}, 1 node(s) had untolerated taint {key1: node3}. preemption: 0/3 nodes are available: 3 Preemption is not helpful for scheduling. + Normal NotTriggerScaleUp 13s (x31 over 5m15s) cluster-autoscaler pod didn't trigger scale-up: +``` +Here we can see that the pod has no tolerations for the tainted nodes and because of that the pod is not able to scheduled. + +So, let's add proper tolerations and create another druid. Here is the yaml we are going to apply, +```yaml +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-cluster + namespace: demo +spec: + version: 28.0.1 + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + routers: + podTemplate: + spec: + tolerations: + - key: "key1" + operator: "Equal" + value: "node1" + effect: "NoSchedule" + replicas: 1 + coordinators: + podTemplate: + spec: + tolerations: + - key: "key1" + operator: "Equal" + value: "node1" + effect: "NoSchedule" + replicas: 1 + brokers: + podTemplate: + spec: + tolerations: + - key: "key1" + operator: "Equal" + value: "node1" + effect: "NoSchedule" + replicas: 1 + historicals: + podTemplate: + spec: + tolerations: + - key: "key1" + operator: "Equal" + value: "node1" + effect: "NoSchedule" + replicas: 1 + middleManagers: + podTemplate: + spec: + tolerations: + - key: "key1" + operator: "Equal" + value: "node1" + effect: "NoSchedule" + replicas: 1 + deletionPolicy: Delete +``` + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/configuration/podtemplating/yamls/druid-with-tolerations.yaml +druid.kubedb.com/druid-with-tolerations created +``` +Now, wait a few minutes. KubeDB operator will create necessary petset, services, secret etc. If everything goes well, we will see that a pod with the name `druid-with-tolerations-0` has been created. + +Check that the petset's pod is running + +```bash +$ $ kubectl get pods -n demo -l app.kubernetes.io/instance=druid-cluster + +NAME READY STATUS RESTARTS AGE +druid-with-tolerations-brokers-0 1/1 Running 0 164m +druid-with-tolerations-coordinators-0 1/1 Running 0 164m +druid-with-tolerations-historicals-0 1/1 Running 0 164m +druid-with-tolerations-middlemanagers-0 1/1 Running 0 164m +druid-with-tolerations-routers-0 1/1 Running 0 164m +``` +As we see the pod is running, you can verify that by running `kubectl get pods -n demo druid-with-tolerations-0 -o wide` and looking at the “NODE” to which the Pod was assigned. +```bash +$ kubectl get pods -n demo druid-with-tolerations-coordinators-0 -o wide +NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES +druid-with-tolerations-coordinators-0 1/1 Running 0 3m49s 10.2.0.8 lke212553-307295-339173d10000 +``` +We can successfully verify that our pod was scheduled to the node which it has tolerations. + +## Cleaning up + +To cleanup the Kubernetes resources created by this tutorial, run: + +```bash +kubectl delete druid -n demo druid-with-tolerations + +kubectl delete ns demo +``` + +If you would like to uninstall KubeDB operator, please follow the steps [here](/docs/setup/README.md). + +## Next Steps + +- [Quickstart Druid](/docs/guides/druid/quickstart/guide/index.md) with KubeDB Operator. +- Detail concepts of [Druid object](/docs/guides/druid/concepts/druid.md). +- Want to hack on KubeDB? Check our [contribution guidelines](/docs/CONTRIBUTING.md). diff --git a/docs/guides/druid/configuration/podtemplating/yamls/deep-storage-config.yaml b/docs/guides/druid/configuration/podtemplating/yamls/deep-storage-config.yaml new file mode 100644 index 0000000000..3612595828 --- /dev/null +++ b/docs/guides/druid/configuration/podtemplating/yamls/deep-storage-config.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Secret +metadata: + name: deep-storage-config + namespace: demo +stringData: + druid.storage.type: "s3" + druid.storage.bucket: "druid" + druid.storage.baseKey: "druid/segments" + druid.s3.accessKey: "minio" + druid.s3.secretKey: "minio123" + druid.s3.protocol: "http" + druid.s3.enablePathStyleAccess: "true" + druid.s3.endpoint.signingRegion: "us-east-1" + druid.s3.endpoint.url: "http://myminio-hl.demo.svc.cluster.local:9000/" + diff --git a/docs/guides/druid/configuration/podtemplating/yamls/druid-cluster.yaml b/docs/guides/druid/configuration/podtemplating/yamls/druid-cluster.yaml new file mode 100644 index 0000000000..2004002096 --- /dev/null +++ b/docs/guides/druid/configuration/podtemplating/yamls/druid-cluster.yaml @@ -0,0 +1,43 @@ +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-cluster + namespace: demo +spec: + version: 28.0.1 + configSecret: + name: config-secret + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + coordinators: + replicas: 1 + podTemplate: + spec: + containers: + - name: druid + resources: + limits: + memory: "2Gi" + cpu: "600m" + requests: + memory: "2Gi" + cpu: "600m" + brokers: + replicas: 1 + podTemplate: + spec: + containers: + - name: druid + resources: + limits: + memory: "2Gi" + cpu: "600m" + requests: + memory: "2Gi" + cpu: "600m" + routers: + replicas: 1 + deletionPolicy: WipeOut diff --git a/docs/guides/druid/configuration/podtemplating/yamls/druid-node-selector.yaml b/docs/guides/druid/configuration/podtemplating/yamls/druid-node-selector.yaml new file mode 100644 index 0000000000..7ad2eae717 --- /dev/null +++ b/docs/guides/druid/configuration/podtemplating/yamls/druid-node-selector.yaml @@ -0,0 +1,20 @@ +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-node-selector + namespace: demo +spec: + version: 28.0.1 + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + routers: + replicas: 1 + coordinators: + podTemplate: + spec: + nodeSelector: + disktype: ssd + deletionPolicy: Delete \ No newline at end of file diff --git a/docs/guides/druid/configuration/podtemplating/yamls/druid-with-tolerations.yaml b/docs/guides/druid/configuration/podtemplating/yamls/druid-with-tolerations.yaml new file mode 100644 index 0000000000..4ef158f85a --- /dev/null +++ b/docs/guides/druid/configuration/podtemplating/yamls/druid-with-tolerations.yaml @@ -0,0 +1,58 @@ +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-cluster + namespace: demo +spec: + version: 28.0.1 + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + routers: + podTemplate: + spec: + tolerations: + - key: "key1" + operator: "Equal" + value: "node1" + effect: "NoSchedule" + replicas: 1 + coordinators: + podTemplate: + spec: + tolerations: + - key: "key1" + operator: "Equal" + value: "node1" + effect: "NoSchedule" + replicas: 1 + brokers: + podTemplate: + spec: + tolerations: + - key: "key1" + operator: "Equal" + value: "node1" + effect: "NoSchedule" + replicas: 1 + historicals: + podTemplate: + spec: + tolerations: + - key: "key1" + operator: "Equal" + value: "node1" + effect: "NoSchedule" + replicas: 1 + middleManagers: + podTemplate: + spec: + tolerations: + - key: "key1" + operator: "Equal" + value: "node1" + effect: "NoSchedule" + replicas: 1 + deletionPolicy: Delete diff --git a/docs/guides/druid/configuration/podtemplating/yamls/druid-without-tolerations.yaml b/docs/guides/druid/configuration/podtemplating/yamls/druid-without-tolerations.yaml new file mode 100644 index 0000000000..1098f3d70d --- /dev/null +++ b/docs/guides/druid/configuration/podtemplating/yamls/druid-without-tolerations.yaml @@ -0,0 +1,15 @@ +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-without-tolerations + namespace: demo +spec: + version: 28.0.1 + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + routers: + replicas: 1 + deletionPolicy: Delete diff --git a/docs/guides/druid/monitoring/_index.md b/docs/guides/druid/monitoring/_index.md new file mode 100755 index 0000000000..dd0ffbb60c --- /dev/null +++ b/docs/guides/druid/monitoring/_index.md @@ -0,0 +1,10 @@ +--- +title: Monitor Druid with Prometheus & Grafana +menu: + docs_{{ .version }}: + identifier: guides-druid-monitoring + name: Monitoring + parent: guides-druid + weight: 140 +menu_name: docs_{{ .version }} +--- diff --git a/docs/guides/druid/monitoring/images/druid-monitoring.png b/docs/guides/druid/monitoring/images/druid-monitoring.png new file mode 100644 index 0000000000000000000000000000000000000000..2c609a2b98bb32a5086422495c2c363743710580 GIT binary patch literal 68080 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 z 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
jctF>}CWK}we`&!#?%4qF6BB9!0` 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 New to KubeDB? Please start [here](/docs/README.md). + +# Monitoring Apache Druid with KubeDB + +KubeDB has native support for monitoring via [Prometheus](https://prometheus.io/). You can use builtin [Prometheus](https://github.com/prometheus/prometheus) scraper or [Prometheus operator](https://github.com/prometheus-operator/prometheus-operator) to monitor KubeDB managed databases. This tutorial will show you how database monitoring works with KubeDB and how to configure Database crd to enable monitoring. + +## Overview + +KubeDB uses Prometheus [exporter](https://prometheus.io/docs/instrumenting/exporters/#databases) images to export Prometheus metrics for respective databases. As KubeDB supports Druid versions in KRaft mode, and the officially recognized exporter image doesn't expose metrics for them yet - KubeDB managed Druid instances use [JMX Exporter](https://github.com/prometheus/jmx_exporter) instead. This exporter is intended to be run as a Java Agent inside Druid container, exposing a HTTP server and serving metrics of the local JVM. To Following diagram shows the logical flow of database monitoring with KubeDB. + +

+  Database Monitoring Flow +

+ +When a user creates a Druid crd with `spec.monitor` section configured, KubeDB operator provisions the respective Druid cluster while running the exporter as a Java agent inside the druid containers. It also creates a dedicated stats service with name `{database-crd-name}-stats` for monitoring. Prometheus server can scrape metrics using this stats service. + +## Configure Monitoring + +In order to enable monitoring for a database, you have to configure `spec.monitor` section. KubeDB provides following options to configure `spec.monitor` section: + +| Field | Type | Uses | +|----------------------------------------------------|------------|-----------------------------------------------------------------------------------------------------------------------------------------| +| `spec.monitor.agent` | `Required` | Type of the monitoring agent that will be used to monitor this database. It can be `prometheus.io/builtin` or `prometheus.io/operator`. | +| `spec.monitor.prometheus.exporter.port` | `Optional` | Port number where the exporter side car will serve metrics. | +| `spec.monitor.prometheus.exporter.args` | `Optional` | Arguments to pass to the exporter sidecar. | +| `spec.monitor.prometheus.exporter.env` | `Optional` | List of environment variables to set in the exporter sidecar container. | +| `spec.monitor.prometheus.exporter.resources` | `Optional` | Resources required by exporter sidecar container. | +| `spec.monitor.prometheus.exporter.securityContext` | `Optional` | Security options the exporter should run with. | +| `spec.monitor.prometheus.serviceMonitor.labels` | `Optional` | Labels for `ServiceMonitor` crd. | +| `spec.monitor.prometheus.serviceMonitor.interval` | `Optional` | Interval at which metrics should be scraped. | + +## Sample Configuration + +A sample YAML for TLS secured Druid crd with `spec.monitor` section configured to enable monitoring with [Prometheus operator](https://github.com/prometheus-operator/prometheus-operator) is shown below. + +```yaml +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-with-monitoring + namespace: demo +spec: + version: 28.0.1 + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + routers: + replicas: 1 + monitor: + agent: prometheus.io/operator + prometheus: + serviceMonitor: + labels: + release: prometheus + interval: 10s + deletionPolicy: WipeOut +``` + +### Create External Dependency (Deep Storage) + +Before proceeding further, we need to prepare deep storage, which is one of the external dependency of Druid and used for storing the segments. It is a storage mechanism that Apache Druid does not provide. **Amazon S3**, **Google Cloud Storage**, or **Azure Blob Storage**, **S3-compatible storage** (like **Minio**), or **HDFS** are generally convenient options for deep storage. + +In this tutorial, we will run a `minio-server` as deep storage in our local `kind` cluster using `minio-operator` and create a bucket named `druid` in it, which the deployed druid database will use. + +```bash + +$ helm repo add minio https://operator.min.io/ +$ helm repo update minio +$ helm upgrade --install --namespace "minio-operator" --create-namespace "minio-operator" minio/operator --set operator.replicaCount=1 + +$ helm upgrade --install --namespace "demo" --create-namespace druid-minio minio/tenant \ +--set tenant.pools[0].servers=1 \ +--set tenant.pools[0].volumesPerServer=1 \ +--set tenant.pools[0].size=1Gi \ +--set tenant.certificate.requestAutoCert=false \ +--set tenant.buckets[0].name="druid" \ +--set tenant.pools[0].name="default" + +``` + +Now we need to create a `Secret` named `deep-storage-config`. It contains the necessary connection information using which the druid database will connect to the deep storage. + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: deep-storage-config + namespace: demo +stringData: + druid.storage.type: "s3" + druid.storage.bucket: "druid" + druid.storage.baseKey: "druid/segments" + druid.s3.accessKey: "minio" + druid.s3.secretKey: "minio123" + druid.s3.protocol: "http" + druid.s3.enablePathStyleAccess: "true" + druid.s3.endpoint.signingRegion: "us-east-1" + druid.s3.endpoint.url: "http://myminio-hl.demo.svc.cluster.local:9000/" +``` + +Let’s create the `deep-storage-config` Secret shown above: + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/monitoring/yamls/deep-storage-config.yaml +secret/deep-storage-config created +``` + +Let's deploy the above druid example by the following command: + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/monitoring/yamls/druid-with-monitoring.yaml +druid.kubedb.com/druid created +``` + +Here, we have specified that we are going to monitor this server using Prometheus operator through `spec.monitor.agent: prometheus.io/operator`. KubeDB will create a `ServiceMonitor` crd in databases namespace and this `ServiceMonitor` will have `release: prometheus` label. + +## Next Steps + +- Learn how to use KubeDB to run a Apache Druid cluster [here](/docs/guides/druid/README.md). +- Deploy [dedicated topology cluster](/docs/guides/druid/clustering/overview/index.md) for Apache Druid +- Detail concepts of [DruidVersion object](/docs/guides/druid/concepts/druidversion.md). + +[//]: # (- Learn to use KubeDB managed Druid objects using [CLIs](/docs/guides/druid/cli/cli.md).) +- Want to hack on KubeDB? Check our [contribution guidelines](/docs/CONTRIBUTING.md). \ No newline at end of file diff --git a/docs/guides/druid/monitoring/using-builtin-prometheus.md b/docs/guides/druid/monitoring/using-builtin-prometheus.md new file mode 100644 index 0000000000..69ec2aa62e --- /dev/null +++ b/docs/guides/druid/monitoring/using-builtin-prometheus.md @@ -0,0 +1,372 @@ +--- +title: Monitor Druid using Builtin Prometheus Discovery +menu: + docs_{{ .version }}: + identifier: guides-druid-monitoring-builtin-monitoring + name: Builtin Prometheus + parent: guides-druid-monitoring + weight: 20 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- + +> New to KubeDB? Please start [here](/docs/README.md). + +# Monitoring Druid with builtin Prometheus + +This tutorial will show you how to monitor Druid cluster using builtin [Prometheus](https://github.com/prometheus/prometheus) scraper. + +## Before You Begin + +- At first, you need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. If you do not already have a cluster, you can create one by using [kind](https://kind.sigs.k8s.io/docs/user/quick-start/). + +- Install KubeDB operator in your cluster following the steps [here](/docs/setup/README.md). + +- If you are not familiar with how to configure Prometheus to scrape metrics from various Kubernetes resources, please read the tutorial from [here](https://github.com/appscode/third-party-tools/tree/master/monitoring/prometheus/builtin). + +- To learn how Prometheus monitoring works with KubeDB in general, please visit [here](/docs/guides/druid/monitoring/overview.md). + +- To keep Prometheus resources isolated, we are going to use a separate namespace called `monitoring` to deploy respective monitoring resources. We are going to deploy database in `demo` namespace. + + ```bash + $ kubectl create ns monitoring + namespace/monitoring created + + $ kubectl create ns demo + namespace/demo created + ``` + +> Note: YAML files used in this tutorial are stored in [docs/examples/druid](https://github.com/kubedb/docs/tree/{{< param "info.version" >}}/docs/examples/druid) folder in GitHub repository [kubedb/docs](https://github.com/kubedb/docs). + +## Deploy Druid with Monitoring Enabled + +At first, let's deploy a Druid cluster with monitoring enabled. Below is the Druid object that we are going to create. + +```yaml +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-with-monitoring + namespace: demo +spec: + version: 28.0.1 + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + routers: + replicas: 1 + monitor: + agent: prometheus.io/builtin + prometheus: + exporter: + port: 56790 + serviceMonitor: + labels: + release: prometheus + interval: 10s + deletionPolicy: WipeOut +``` + +Here, + +- `spec.monitor.agent: prometheus.io/builtin` specifies that we are going to monitor this server using builtin Prometheus scraper. +- `spec.monitor.prometheus.exporter.port: 56790` specifies the port where the exporter is running. + +Let's create the Druid crd we have shown above. + +```bash +$ kubectl apply -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/monitoring/yamls/druid-builtin-monitoring.yaml +druid.kubedb.com/druid-with-monitoring created +``` + +Now, wait for the cluster to go into `Ready` state. + +```bash +NAME TYPE VERSION STATUS AGE +druid-with-monitoring kubedb.com/v1alpha2 28.0.1 Ready 31s +``` + +KubeDB will create a separate stats service with name `{Druid crd name}-stats` for monitoring purpose. + +```bash +$ kubectl get svc -n demo --selector="app.kubernetes.io/instance=druid-with-monitoring" +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +druid-with-monitoring-brokers ClusterIP 10.96.28.252 8082/TCP 2m13s +druid-with-monitoring-coordinators ClusterIP 10.96.52.186 8081/TCP 2m13s +druid-with-monitoring-pods ClusterIP None 8081/TCP,8090/TCP,8083/TCP,8091/TCP,8082/TCP,8888/TCP 2m13s +druid-with-monitoring-routers ClusterIP 10.96.134.202 8888/TCP 2m13s +druid-with-monitoring-stats ClusterIP 10.96.222.96 56790/TCP 2m13s +``` + +Here, `druid-with-monitoring-stats` service has been created for monitoring purpose. Let's describe the service. + +```bash +$ kubectl describe svc -n druid-demo builtin-prom-stats +Name: druid-with-monitoring-stats +Namespace: demo +Labels: app.kubernetes.io/component=database + app.kubernetes.io/instance=druid-with-monitoring + app.kubernetes.io/managed-by=kubedb.com + app.kubernetes.io/name=druids.kubedb.com + kubedb.com/role=stats +Annotations: monitoring.appscode.com/agent: prometheus.io/builtin + prometheus.io/path: /metrics + prometheus.io/port: 56790 + prometheus.io/scrape: true +Selector: app.kubernetes.io/instance=druid-with-monitoring,app.kubernetes.io/managed-by=kubedb.com,app.kubernetes.io/name=druids.kubedb.com +Type: ClusterIP +IP Family Policy: SingleStack +IP Families: IPv4 +IP: 10.96.222.96 +IPs: 10.96.222.96 +Port: metrics 56790/TCP +TargetPort: metrics/TCP +Endpoints: 10.244.0.31:56790,10.244.0.33:56790 +Session Affinity: None +Events: +``` + +You can see that the service contains following annotations. + +```bash +prometheus.io/path: /metrics +prometheus.io/port: 56790 +prometheus.io/scrape: true +``` + +The Prometheus server will discover the service endpoint using these specifications and will scrape metrics from the exporter. + +## Configure Prometheus Server + +Now, we have to configure a Prometheus scraping job to scrape the metrics using this service. We are going to configure scraping job similar to this [kubernetes-service-endpoints](https://github.com/appscode/third-party-tools/tree/master/monitoring/prometheus/builtin#kubernetes-service-endpoints) job that scrapes metrics from endpoints of a service. + +Let's configure a Prometheus scraping job to collect metrics from this service. + +```yaml +- job_name: 'kubedb-databases' + honor_labels: true + scheme: http + kubernetes_sd_configs: + - role: endpoints + # by default Prometheus server select all Kubernetes services as possible target. + # relabel_config is used to filter only desired endpoints + relabel_configs: + # keep only those services that has "prometheus.io/scrape","prometheus.io/path" and "prometheus.io/port" anootations + - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape, __meta_kubernetes_service_annotation_prometheus_io_port] + separator: ; + regex: true;(.*) + action: keep + # currently KubeDB supported databases uses only "http" scheme to export metrics. so, drop any service that uses "https" scheme. + - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme] + action: drop + regex: https + # only keep the stats services created by KubeDB for monitoring purpose which has "-stats" suffix + - source_labels: [__meta_kubernetes_service_name] + separator: ; + regex: (.*-stats) + action: keep + # service created by KubeDB will have "app.kubernetes.io/name" and "app.kubernetes.io/instance" annotations. keep only those services that have these annotations. + - source_labels: [__meta_kubernetes_service_label_app_kubernetes_io_name] + separator: ; + regex: (.*) + action: keep + # read the metric path from "prometheus.io/path: " annotation + - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path] + action: replace + target_label: __metrics_path__ + regex: (.+) + # read the port from "prometheus.io/port: " annotation and update scraping address accordingly + - source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port] + action: replace + target_label: __address__ + regex: ([^:]+)(?::\d+)?;(\d+) + replacement: $1:$2 + # add service namespace as label to the scraped metrics + - source_labels: [__meta_kubernetes_namespace] + separator: ; + regex: (.*) + target_label: namespace + replacement: $1 + action: replace + # add service name as a label to the scraped metrics + - source_labels: [__meta_kubernetes_service_name] + separator: ; + regex: (.*) + target_label: service + replacement: $1 + action: replace + # add stats service's labels to the scraped metrics + - action: labelmap + regex: __meta_kubernetes_service_label_(.+) +``` + +### Configure Existing Prometheus Server + +If you already have a Prometheus server running, you have to add above scraping job in the `ConfigMap` used to configure the Prometheus server. Then, you have to restart it for the updated configuration to take effect. + +>If you don't use a persistent volume for Prometheus storage, you will lose your previously scraped data on restart. + +### Deploy New Prometheus Server + +If you don't have any existing Prometheus server running, you have to deploy one. In this section, we are going to deploy a Prometheus server in `monitoring` namespace to collect metrics using this stats service. + +**Create ConfigMap:** + +At first, create a ConfigMap with the scraping configuration. Bellow, the YAML of ConfigMap that we are going to create in this tutorial. + +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: prometheus-config + labels: + app: prometheus-demo + namespace: monitoring +data: + prometheus.yml: |- + global: + scrape_interval: 5s + evaluation_interval: 5s + scrape_configs: + - job_name: 'kubedb-databases' + honor_labels: true + scheme: http + kubernetes_sd_configs: + - role: endpoints + # by default Prometheus server select all Kubernetes services as possible target. + # relabel_config is used to filter only desired endpoints + relabel_configs: + # keep only those services that has "prometheus.io/scrape","prometheus.io/path" and "prometheus.io/port" anootations + - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape, __meta_kubernetes_service_annotation_prometheus_io_port] + separator: ; + regex: true;(.*) + action: keep + # currently KubeDB supported databases uses only "http" scheme to export metrics. so, drop any service that uses "https" scheme. + - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme] + action: drop + regex: https + # only keep the stats services created by KubeDB for monitoring purpose which has "-stats" suffix + - source_labels: [__meta_kubernetes_service_name] + separator: ; + regex: (.*-stats) + action: keep + # service created by KubeDB will have "app.kubernetes.io/name" and "app.kubernetes.io/instance" annotations. keep only those services that have these annotations. + - source_labels: [__meta_kubernetes_service_label_app_kubernetes_io_name] + separator: ; + regex: (.*) + action: keep + # read the metric path from "prometheus.io/path: " annotation + - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path] + action: replace + target_label: __metrics_path__ + regex: (.+) + # read the port from "prometheus.io/port: " annotation and update scraping address accordingly + - source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port] + action: replace + target_label: __address__ + regex: ([^:]+)(?::\d+)?;(\d+) + replacement: $1:$2 + # add service namespace as label to the scraped metrics + - source_labels: [__meta_kubernetes_namespace] + separator: ; + regex: (.*) + target_label: namespace + replacement: $1 + action: replace + # add service name as a label to the scraped metrics + - source_labels: [__meta_kubernetes_service_name] + separator: ; + regex: (.*) + target_label: service + replacement: $1 + action: replace + # add stats service's labels to the scraped metrics + - action: labelmap + regex: __meta_kubernetes_service_label_(.+) +``` + +Let's create above `ConfigMap`, + +```bash +$ kubectl apply -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/examples/monitoring/builtin-prometheus/prom-config.yaml +configmap/prometheus-config created +``` + +**Create RBAC:** + +If you are using an RBAC enabled cluster, you have to give necessary RBAC permissions for Prometheus. Let's create necessary RBAC stuffs for Prometheus, + +```bash +$ kubectl apply -f https://github.com/appscode/third-party-tools/raw/master/monitoring/prometheus/builtin/artifacts/rbac.yaml +clusterrole.rbac.authorization.k8s.io/prometheus created +serviceaccount/prometheus created +clusterrolebinding.rbac.authorization.k8s.io/prometheus created +``` + +>YAML for the RBAC resources created above can be found [here](https://github.com/appscode/third-party-tools/blob/master/monitoring/prometheus/builtin/artifacts/rbac.yaml). + +**Deploy Prometheus:** + +Now, we are ready to deploy Prometheus server. We are going to use following [deployment](https://github.com/appscode/third-party-tools/blob/master/monitoring/prometheus/builtin/artifacts/deployment.yaml) to deploy Prometheus server. + +Let's deploy the Prometheus server. + +```bash +$ kubectl apply -f https://github.com/appscode/third-party-tools/raw/master/monitoring/prometheus/builtin/artifacts/deployment.yaml +deployment.apps/prometheus created +``` + +### Verify Monitoring Metrics + +Prometheus server is listening to port `9090`. We are going to use [port forwarding](https://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster/) to access Prometheus dashboard. + +At first, let's check if the Prometheus pod is in `Running` state. + +```bash +$ kubectl get pod -n monitoring -l=app=prometheus +NAME READY STATUS RESTARTS AGE +prometheus-7bd56c6865-8dlpv 1/1 Running 0 28s +``` + +Now, run following command on a separate terminal to forward 9090 port of `prometheus-7bd56c6865-8dlpv` pod, + +```bash +$ kubectl port-forward -n monitoring prometheus-7bd56c6865-8dlpv 9090 +Forwarding from 127.0.0.1:9090 -> 9090 +Forwarding from [::1]:9090 -> 9090 +``` + +Now, we can access the dashboard at `localhost:9090`. Open [http://localhost:9090](http://localhost:9090) in your browser. You should see the endpoint of `druid-with-monitoring-stats` service as one of the targets. + +

+  Prometheus Target +

+ +Check the labels marked with red rectangle. These labels confirm that the metrics are coming from `Druid` cluster `druid-with-monitoring` through stats service `druid-with-monitoring-stats`. + +Now, you can view the collected metrics and create a graph from homepage of this Prometheus dashboard. You can also use this Prometheus server as data source for [Grafana](https://grafana.com/) and create beautiful dashboard with collected metrics. + +## Cleaning up + +To cleanup the Kubernetes resources created by this tutorial, run following commands + +```bash +kubectl delete -n demo druid/druid-with-monitoring + +kubectl delete -n monitoring deployment.apps/prometheus + +kubectl delete -n monitoring clusterrole.rbac.authorization.k8s.io/prometheus +kubectl delete -n monitoring serviceaccount/prometheus +kubectl delete -n monitoring clusterrolebinding.rbac.authorization.k8s.io/prometheus + +kubectl delete ns demo +kubectl delete ns monitoring +``` + +## Next Steps + +- Learn how to configure [Druid Topology](/docs/guides/druid/clustering/overview/index.md). +- Monitor your Druid database with KubeDB using [`out-of-the-box` Prometheus operator](/docs/guides/druid/monitoring/using-prometheus-operator.md). +- Want to hack on KubeDB? Check our [contribution guidelines](/docs/CONTRIBUTING.md). diff --git a/docs/guides/druid/monitoring/using-prometheus-operator.md b/docs/guides/druid/monitoring/using-prometheus-operator.md new file mode 100644 index 0000000000..abd4bb1ee6 --- /dev/null +++ b/docs/guides/druid/monitoring/using-prometheus-operator.md @@ -0,0 +1,343 @@ +--- +title: Monitor Druid using Prometheus Operator +menu: + docs_{{ .version }}: + identifier: guides-druid-monitoring-operator-monitoring + name: Prometheus Operator + parent: guides-druid-monitoring + weight: 15 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- + +> New to KubeDB? Please start [here](/docs/README.md). + +# Monitoring Druid Using Prometheus operator + +[Prometheus operator](https://github.com/prometheus-operator/prometheus-operator) provides simple and Kubernetes native way to deploy and configure Prometheus server. This tutorial will show you how to use Prometheus operator to monitor Druid database deployed with KubeDB. + +## Before You Begin + +- At first, you need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. If you do not already have a cluster, you can create one locally by using [kind](https://kind.sigs.k8s.io/docs/user/quick-start/). + +- To learn how Prometheus monitoring works with KubeDB in general, please visit [here](/docs/guides/druid/monitoring/overview.md). + +- We need a [Prometheus operator](https://github.com/prometheus-operator/prometheus-operator) instance running. If you don't already have a running instance, you can deploy one using this helm chart [here](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack). + +- To keep Prometheus resources isolated, we are going to use a separate namespace called `monitoring` to deploy the prometheus operator helm chart. Alternatively, you can use `--create-namespace` flag while deploying prometheus. We are going to deploy database in `demo` namespace. + + ```bash + $ kubectl create ns monitoring + namespace/monitoring created + + $ kubectl create ns demo + namespace/demo created + ``` + + + +> Note: YAML files used in this tutorial are stored in [docs/examples/druid](https://github.com/kubedb/docs/tree/{{< param "info.version" >}}/docs/examples/druid) folder in GitHub repository [kubedb/docs](https://github.com/kubedb/docs). + +## Find out required labels for ServiceMonitor + +We need to know the labels used to select `ServiceMonitor` by a `Prometheus` crd. We are going to provide these labels in `spec.monitor.prometheus.serviceMonitor.labels` field of Druid crd so that KubeDB creates `ServiceMonitor` object accordingly. + +At first, let's find out the available Prometheus server in our cluster. + +```bash +$ kubectl get prometheus --all-namespaces +NAMESPACE NAME VERSION DESIRED READY RECONCILED AVAILABLE AGE +monitoring prometheus-kube-prometheus-prometheus v2.42.0 1 1 True True 2d23h +``` + +> If you don't have any Prometheus server running in your cluster, deploy one following the guide specified in **Before You Begin** section. + +Now, let's view the YAML of the available Prometheus server `prometheus` in `monitoring` namespace. + +```bash +$ kubectl get prometheus -n monitoring prometheus-kube-prometheus-prometheus -o yaml +apiVersion: monitoring.coreos.com/v1 +kind: Prometheus +metadata: + annotations: + meta.helm.sh/release-name: prometheus + meta.helm.sh/release-namespace: monitoring + creationTimestamp: "2023-03-27T07:56:04Z" + generation: 1 + labels: + app: kube-prometheus-stack-prometheus + app.kubernetes.io/instance: prometheus + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: kube-prometheus-stack + app.kubernetes.io/version: 45.7.1 + chart: kube-prometheus-stack-45.7.1 + heritage: Helm + release: prometheus + name: prometheus-kube-prometheus-prometheus + namespace: monitoring + resourceVersion: "638797" + uid: 0d1e7b8a-44ae-4794-ab45-95a5d7ae7f91 +spec: + alerting: + alertmanagers: + - apiVersion: v2 + name: prometheus-kube-prometheus-alertmanager + namespace: monitoring + pathPrefix: / + port: http-web + enableAdminAPI: false + evaluationInterval: 30s + externalUrl: http://prometheus-kube-prometheus-prometheus.monitoring:9090 + hostNetwork: false + image: quay.io/prometheus/prometheus:v2.42.0 + listenLocal: false + logFormat: logfmt + logLevel: info + paused: false + podMonitorNamespaceSelector: {} + podMonitorSelector: + matchLabels: + release: prometheus + portName: http-web + probeNamespaceSelector: {} + probeSelector: + matchLabels: + release: prometheus + replicas: 1 + retention: 10d + routePrefix: / + ruleNamespaceSelector: {} + ruleSelector: + matchLabels: + release: prometheus + scrapeInterval: 30s + securityContext: + fsGroup: 2000 + runAsGroup: 2000 + runAsNonRoot: true + runAsUser: 1000 + serviceAccountName: prometheus-kube-prometheus-prometheus + serviceMonitorNamespaceSelector: {} + serviceMonitorSelector: + matchLabels: + release: prometheus + shards: 1 + version: v2.42.0 + walCompression: true +status: + availableReplicas: 1 + conditions: + - lastTransitionTime: "2023-03-27T07:56:23Z" + observedGeneration: 1 + status: "True" + type: Available + - lastTransitionTime: "2023-03-30T03:39:18Z" + observedGeneration: 1 + status: "True" + type: Reconciled + paused: false + replicas: 1 + shardStatuses: + - availableReplicas: 1 + replicas: 1 + shardID: "0" + unavailableReplicas: 0 + updatedReplicas: 1 + unavailableReplicas: 0 + updatedReplicas: 1 +``` + +Notice the `spec.serviceMonitorSelector` section. Here, `release: prometheus` label is used to select `ServiceMonitor` crd. So, we are going to use this label in `spec.monitor.prometheus.serviceMonitor.labels` field of Druid crd. + +## Deploy Druid with Monitoring Enabled + +At first, let's deploy a Druid database with monitoring enabled. Below is the Druid object that we are going to create. + +```yaml +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-with-monitoring + namespace: demo +spec: + version: 28.0.1 + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + routers: + replicas: 1 + monitor: + agent: prometheus.io/operator + prometheus: + serviceMonitor: + labels: + release: prometheus + interval: 10s + deletionPolicy: WipeOut +``` + +Here, + +- `monitor.agent: prometheus.io/operator` indicates that we are going to monitor this server using Prometheus operator. +- `monitor.prometheus.serviceMonitor.labels` specifies that KubeDB should create `ServiceMonitor` with these labels. +- `monitor.prometheus.interval` indicates that the Prometheus server should scrape metrics from this database with 10 seconds interval. + +Let's create the druid object that we have shown above, + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/examples/druid/monitoring/yamls/druid-with-monirtoring.yaml +druids.kubedb.com/druid-with-monitoring created +``` + +Now, wait for the database to go into `Running` state. + +```bash +$ kubectl get dr -n demo druid +NAME TYPE VERSION STATUS AGE +druid-with-monitoring kubedb.com/v1alpha2 3.6.1 Ready 2m24s +``` + +KubeDB will create a separate stats service with name `{Druid crd name}-stats` for monitoring purpose. + +```bash +$ kubectl get svc -n demo --selector="app.kubernetes.io/instance=druid-with-monitoring" +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +druid-with-monitoring-brokers ClusterIP 10.96.28.252 8082/TCP 2m13s +druid-with-monitoring-coordinators ClusterIP 10.96.52.186 8081/TCP 2m13s +druid-with-monitoring-pods ClusterIP None 8081/TCP,8090/TCP,8083/TCP,8091/TCP,8082/TCP,8888/TCP 2m13s +druid-with-monitoring-routers ClusterIP 10.96.134.202 8888/TCP 2m13s +druid-with-monitoring-stats ClusterIP 10.96.222.96 56790/TCP 2m13s +``` + +Here, `druid-with-monitoring-stats` service has been created for monitoring purpose. + +Let's describe this stats service. + +```bash +$ kubectl describe svc -n demo druid-with-monitoring-stats +Name: druid-with-monitoring-stats +Namespace: demo +Labels: app.kubernetes.io/component=database + app.kubernetes.io/instance=druid-with-monitoring + app.kubernetes.io/managed-by=kubedb.com + app.kubernetes.io/name=druids.kubedb.com + kubedb.com/role=stats +Annotations: monitoring.appscode.com/agent: prometheus.io/operator +Selector: app.kubernetes.io/instance=druid-with-monitoring,app.kubernetes.io/managed-by=kubedb.com,app.kubernetes.io/name=druids.kubedb.com +Type: ClusterIP +IP Family Policy: SingleStack +IP Families: IPv4 +IP: 10.96.29.174 +IPs: 10.96.29.174 +Port: metrics 9104/TCP +TargetPort: metrics/TCP +Endpoints: 10.244.0.68:9104,10.244.0.71:9104,10.244.0.72:9104 + 2 more... +Session Affinity: None +Events: +``` + +Notice the `Labels` and `Port` fields. `ServiceMonitor` will use this information to target its endpoints. + +KubeDB will also create a `ServiceMonitor` crd in `demo` namespace that select the endpoints of `druid-with-monitoring-stats` service. Verify that the `ServiceMonitor` crd has been created. + +```bash +$ kubectl get servicemonitor -n demo +NAME AGE +druid-with-monitoring-stats 4m49s +``` + +Let's verify that the `ServiceMonitor` has the label that we had specified in `spec.monitor` section of Druid crd. + +```bash +$ kubectl get servicemonitor -n demo druid-with-monitoring-stats -o yaml +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + creationTimestamp: "2024-11-01T10:25:14Z" + generation: 1 + labels: + app.kubernetes.io/component: database + app.kubernetes.io/instance: druid-with-monitoring + app.kubernetes.io/managed-by: kubedb.com + app.kubernetes.io/name: druids.kubedb.com + release: prometheus + name: druid-with-monitoring-stats + namespace: demo + ownerReferences: + - apiVersion: v1 + blockOwnerDeletion: true + controller: true + kind: Service + name: druid-with-monitoring-stats + uid: b3ae48f3-476e-4cec-95f6-f8e28538b605 + resourceVersion: "597152" + uid: ff385538-eba5-48a3-91c1-1a4b15f3018a +spec: + endpoints: + - honorLabels: true + interval: 10s + path: /metrics + port: metrics + namespaceSelector: + matchNames: + - demo + selector: + matchLabels: + app.kubernetes.io/component: database + app.kubernetes.io/instance: druid-with-monitoring + app.kubernetes.io/managed-by: kubedb.com + app.kubernetes.io/name: druids.kubedb.com + kubedb.com/role: stats +``` + +Notice that the `ServiceMonitor` has label `release: prometheus` that we had specified in Druid crd. + +Also notice that the `ServiceMonitor` has selector which match the labels we have seen in the `druid-with-monitoring-stats` service. It also, target the `metrics` port that we have seen in the stats service. + +## Verify Monitoring Metrics + +At first, let's find out the respective Prometheus pod for `prometheus` Prometheus server. + +```bash +$ kubectl get pod -n monitoring -l=app.kubernetes.io/name=prometheus +NAME READY STATUS RESTARTS AGE +prometheus-prometheus-kube-prometheus-prometheus-0 2/2 Running 8 (4h27m ago) 3d +``` + +Prometheus server is listening to port `9090` of `prometheus-prometheus-kube-prometheus-prometheus-0` pod. We are going to use [port forwarding](https://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster/) to access Prometheus dashboard. + +Run following command on a separate terminal to forward the port 9090 of `prometheus-kube-prometheus-prometheus` service which is pointing to the prometheus pod, + +```bash +$ kubectl port-forward -n monitoring svc/prometheus-kube-prometheus-prometheus 9090 +Forwarding from 127.0.0.1:9090 -> 9090 +Forwarding from [::1]:9090 -> 9090 +``` + +Now, we can access the dashboard at `localhost:9090`. Open [http://localhost:9090](http://localhost:9090) in your browser. You should see `metrics` endpoint of `druid-with-monitoring-stats` service as one of the targets. + +

+  Prometheus Target +

+ +Check the `endpoint` and `service` labels. It verifies that the target is our expected database. Now, you can view the collected metrics and create a graph from homepage of this Prometheus dashboard. You can also use this Prometheus server as data source for [Grafana](https://grafana.com/) and create a beautiful dashboard with collected metrics. + +## Cleaning up + +To clean up the Kubernetes resources created by this tutorial, run following commands + +```bash +kubectl delete -n demo dr/druid-with-monitoring +kubectl delete ns demo +``` + +## Next Steps + +- Learn how to use KubeDB to run Apache Druid cluster [here](/docs/guides/druid/README.md). +- Deploy [dedicated cluster](/docs/guides/druid/clustering/overview/index.md) for Apache Druid +[//]: # (- Deploy [combined cluster](/docs/guides/druid/clustering/combined-cluster/index.md) for Apache Druid) +- Detail concepts of [DruidVersion object](/docs/guides/druid/concepts/druidversion.md). +[//]: # (- Learn to use KubeDB managed Druid objects using [CLIs](/docs/guides/druid/cli/cli.md).) +- Want to hack on KubeDB? Check our [contribution guidelines](/docs/CONTRIBUTING.md). \ No newline at end of file diff --git a/docs/guides/druid/monitoring/yamls/deep-storage-config.yaml b/docs/guides/druid/monitoring/yamls/deep-storage-config.yaml new file mode 100644 index 0000000000..3612595828 --- /dev/null +++ b/docs/guides/druid/monitoring/yamls/deep-storage-config.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Secret +metadata: + name: deep-storage-config + namespace: demo +stringData: + druid.storage.type: "s3" + druid.storage.bucket: "druid" + druid.storage.baseKey: "druid/segments" + druid.s3.accessKey: "minio" + druid.s3.secretKey: "minio123" + druid.s3.protocol: "http" + druid.s3.enablePathStyleAccess: "true" + druid.s3.endpoint.signingRegion: "us-east-1" + druid.s3.endpoint.url: "http://myminio-hl.demo.svc.cluster.local:9000/" + diff --git a/docs/guides/druid/monitoring/yamls/druid-monitoring-builtin.yaml b/docs/guides/druid/monitoring/yamls/druid-monitoring-builtin.yaml new file mode 100644 index 0000000000..4962c3c536 --- /dev/null +++ b/docs/guides/druid/monitoring/yamls/druid-monitoring-builtin.yaml @@ -0,0 +1,24 @@ +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-with-monitoring + namespace: demo +spec: + version: 28.0.1 + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + routers: + replicas: 1 + monitor: + agent: prometheus.io/builtin + prometheus: + exporter: + port: 56790 + serviceMonitor: + labels: + release: prometheus + interval: 10s + deletionPolicy: WipeOut diff --git a/docs/guides/druid/monitoring/yamls/druid-with-monitoring.yaml b/docs/guides/druid/monitoring/yamls/druid-with-monitoring.yaml new file mode 100644 index 0000000000..aa91054f8f --- /dev/null +++ b/docs/guides/druid/monitoring/yamls/druid-with-monitoring.yaml @@ -0,0 +1,23 @@ +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-with-monitoring + namespace: demo +spec: + version: 28.0.1 + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + routers: + replicas: 1 + monitor: + agent: prometheus.io/operator + prometheus: + serviceMonitor: + labels: + release: prometheus + interval: 10s + deletionPolicy: WipeOut + diff --git a/docs/guides/druid/quickstart/_index.md b/docs/guides/druid/quickstart/_index.md index c99d5aad28..1be2a3045b 100644 --- a/docs/guides/druid/quickstart/_index.md +++ b/docs/guides/druid/quickstart/_index.md @@ -5,6 +5,6 @@ menu: identifier: guides-druid-quickstart name: Quickstart parent: guides-druid - weight: 15 + weight: 10 menu_name: docs_{{ .version }} --- diff --git a/docs/guides/druid/quickstart/overview/index.md b/docs/guides/druid/quickstart/guide/index.md similarity index 97% rename from docs/guides/druid/quickstart/overview/index.md rename to docs/guides/druid/quickstart/guide/index.md index ee080604c8..4318742d55 100644 --- a/docs/guides/druid/quickstart/overview/index.md +++ b/docs/guides/druid/quickstart/guide/index.md @@ -2,8 +2,8 @@ title: Druid Quickstart menu: docs_{{ .version }}: - identifier: guides-druid-quickstart-overview - name: Overview + identifier: guides-druid-quickstart-guide + name: Druid Quickstart parent: guides-druid-quickstart weight: 10 menu_name: docs_{{ .version }} @@ -24,7 +24,7 @@ This tutorial will show you how to use KubeDB to run an [Apache Druid](https://d At first, you need to have a Kubernetes cluster, and the `kubectl` command-line tool must be configured to communicate with your cluster. If you do not already have a cluster, you can create one by using [kind](https://kind.sigs.k8s.io/docs/user/quick-start/). -Now, install KubeDB cli on your workstation and KubeDB operator in your cluster following the steps [here](/docs/setup/README.md) and make sure install with helm command including the flags `--set global.featureGates.Druid=true` to ensure **Druid CRD** and `--set global.featureGates.ZooKeeper=true` to ensure **ZooKeeper CRD** as Druid depends on ZooKeeper for external dependency. +Now, install KubeDB cli on your workstation and KubeDB operator in your cluster following the steps [here](/docs/setup/README.md) and make sure to include the flags `--set global.featureGates.Druid=true` to ensure **Druid CRD** and `--set global.featureGates.ZooKeeper=true` to ensure **ZooKeeper CRD** as Druid depends on ZooKeeper for external dependency with helm command. To keep things isolated, this tutorial uses a separate namespace called `demo` throughout this tutorial. @@ -39,7 +39,7 @@ demo Active 9s > Note: YAML files used in this tutorial are stored in [guides/druid/quickstart/overview/yamls](https://github.com/kubedb/docs/tree/{{< param "info.version" >}}/docs/guides/druid/quickstart/overview/yamls) folder in GitHub repository [kubedb/docs](https://github.com/kubedb/docs). -> We have designed this tutorial to demonstrate a production setup of KubeDB managed Apache Druid. If you just want to try out KubeDB, you can bypass some safety features following the tips [here](/docs/guides/druid/quickstart/overview/index.md#tips-for-testing). +> We have designed this tutorial to demonstrate a production setup of KubeDB managed Apache Druid. If you just want to try out KubeDB, you can bypass some safety features following the tips [here](/docs/guides/druid/quickstart/guide/index.md#tips-for-testing). ## Find Available StorageClass @@ -55,7 +55,7 @@ Here, we have `standard` StorageClass in our cluster from [Local Path Provisione ## Find Available DruidVersion -When you install the KubeDB operator, it registers a CRD named [DruidVersion](/docs/guides/druid/concepts/catalog.md). The installation process comes with a set of tested DruidVersion objects. Let's check available DruidVersions by, +When you install the KubeDB operator, it registers a CRD named [DruidVersion](/docs/guides/druid/concepts/druidversion.md). The installation process comes with a set of tested DruidVersion objects. Let's check available DruidVersions by, ```bash $ kubectl get druidversion @@ -194,7 +194,7 @@ Here, Let's create the Druid CR that is shown above: ```bash -$ kubectl apply -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/examples/druid/quickstart/druid-quickstart.yaml +$ kubectl apply -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/examples/druid/quickstart/druid-with-monitoring.yaml druid.kubedb.com/druid-quickstart created ``` diff --git a/docs/guides/druid/reconfigure-tls/_index.md b/docs/guides/druid/reconfigure-tls/_index.md new file mode 100644 index 0000000000..f82762bb13 --- /dev/null +++ b/docs/guides/druid/reconfigure-tls/_index.md @@ -0,0 +1,10 @@ +--- +title: Reconfigure TLS/SSL +menu: + docs_{{ .version }}: + identifier: guides-druid-reconfigure-tls + name: Reconfigure TLS/SSL + parent: guides-druid + weight: 120 +menu_name: docs_{{ .version }} +--- diff --git a/docs/guides/druid/reconfigure-tls/guide.md b/docs/guides/druid/reconfigure-tls/guide.md new file mode 100644 index 0000000000..5cd0080298 --- /dev/null +++ b/docs/guides/druid/reconfigure-tls/guide.md @@ -0,0 +1,1539 @@ +--- +title: Reconfigure Druid TLS/SSL Encryption +menu: + docs_{{ .version }}: + identifier: guides-druid-reconfigure-tls-guide + name: Reconfigure Druid TLS/SSL Encryption + parent: guides-druid-reconfigure-tls + weight: 10 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- + +> New to KubeDB? Please start [here](/docs/README.md). + +# Reconfigure Druid TLS/SSL (Transport Encryption) + +KubeDB supports reconfigure i.e. add, remove, update and rotation of TLS/SSL certificates for existing Druid database via a DruidOpsRequest. This tutorial will show you how to use KubeDB to reconfigure TLS/SSL encryption. + +## Before You Begin + +- At first, you need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. If you do not already have a cluster, you can create one by using [kind](https://kind.sigs.k8s.io/docs/user/quick-start/). + +- Install [`cert-manger`](https://cert-manager.io/docs/installation/) v1.0.0 or later to your cluster to manage your SSL/TLS certificates. + +- Now, install KubeDB cli on your workstation and KubeDB operator in your cluster following the steps [here](/docs/setup/README.md). + +- To keep things isolated, this tutorial uses a separate namespace called `demo` throughout this tutorial. + + ```bash + $ kubectl create ns demo + namespace/demo created + ``` + +> Note: YAML files used in this tutorial are stored in [docs/examples/druid](https://github.com/kubedb/docs/tree/{{< param "info.version" >}}/docs/examples/druid) folder in GitHub repository [kubedb/docs](https://github.com/kubedb/docs). + +## Add TLS to a Druid database + +Here, We are going to create a Druid without TLS and then reconfigure the database to use TLS. + +### Deploy Druid without TLS + +In this section, we are going to deploy a Druid topology cluster without TLS. In the next few sections we will reconfigure TLS using `DruidOpsRequest` CRD. Below is the YAML of the `Druid` CR that we are going to create, + +```yaml +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-cluster + namespace: demo +spec: + version: 28.0.1 + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + routers: + replicas: 1 + deletionPolicy: Delete +``` + +Let's create the `Druid` CR we have shown above, + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/reconfigure-tls/yamls/druid-cluster.yaml +druid.kubedb.com/druid-cluster created +``` + +Now, wait until `druid-cluster` has status `Ready`. i.e, + +```bash +$ kubectl get dr -n demo -w +NAME TYPE VERSION STATUS AGE +druid-cluster kubedb.com/v1alpha2 28.0.1 Provisioning 15s +druid-cluster kubedb.com/v1alpha2 28.0.1 Provisioning 37s +. +. +druid-cluster kubedb.com/v1alpha2 28.0.1 Ready 2m27s +``` + +Now, we can exec one druid broker pod and verify configuration that the TLS is disabled. + +```bash +$ kubectl exec -it -n demo druid-cluster-coordinators-0 -- bash +Defaulted container "druid" out of: druid, init-druid (init) +bash-5.1$ cat conf/druid/cluster/_common/common.runtime.properties +druid.auth.authenticator.basic.authorizerName=basic +druid.auth.authenticator.basic.credentialsValidator.type=metadata +druid.auth.authenticator.basic.initialAdminPassword={"type": "environment", "variable": "DRUID_ADMIN_PASSWORD"} +druid.auth.authenticator.basic.initialInternalClientPassword=***** +druid.auth.authenticator.basic.skipOnFailure=false +druid.auth.authenticator.basic.type=basic +druid.auth.authenticatorChain=["basic"] +druid.auth.authorizer.basic.type=basic +druid.auth.authorizers=["basic"] +druid.emitter.logging.logLevel=info +druid.emitter=noop +druid.escalator.authorizerName=basic +druid.escalator.internalClientPassword=****** +druid.escalator.internalClientUsername=druid_system +druid.escalator.type=basic +druid.expressions.useStrictBooleans=true +druid.extensions.loadList=["druid-avro-extensions", "druid-kafka-indexing-service", "druid-kafka-indexing-service", "druid-datasketches", "druid-multi-stage-query", "druid-basic-security", "mysql-metadata-storage", "druid-s3-extensions"] +druid.global.http.eagerInitialization=false +druid.host=localhost +druid.indexer.logs.directory=var/druid/indexing-logs +druid.indexer.logs.type=file +druid.indexing.doubleStorage=double +druid.lookup.enableLookupSyncOnStartup=false +druid.metadata.storage.connector.connectURI=jdbc:mysql://druid-cluster-mysql-metadata.demo.svc:3306/druid +druid.metadata.storage.connector.createTables=true +druid.metadata.storage.connector.host=localhost +druid.metadata.storage.connector.password={"type": "environment", "variable": "DRUID_METADATA_STORAGE_PASSWORD"} +druid.metadata.storage.connector.port=1527 +druid.metadata.storage.connector.user=root +druid.metadata.storage.type=mysql +druid.monitoring.monitors=["org.apache.druid.java.util.metrics.JvmMonitor", "org.apache.druid.server.metrics.ServiceStatusMonitor"] +druid.s3.accessKey=minio +druid.s3.enablePathStyleAccess=true +druid.s3.endpoint.signingRegion=us-east-1 +druid.s3.endpoint.url=http://myminio-hl.demo.svc.cluster.local:9000/ +druid.s3.protocol=http +druid.s3.secretKey=minio123 +druid.selectors.coordinator.serviceName=druid/coordinator +druid.selectors.indexing.serviceName=druid/overlord +druid.server.hiddenProperties=["druid.s3.accessKey","druid.s3.secretKey","druid.metadata.storage.connector.password", "password", "key", "token", "pwd"] +druid.sql.enable=true +druid.sql.planner.useGroupingSetForExactDistinct=true +druid.startup.logging.logProperties=true +druid.storage.baseKey=druid/segments +druid.storage.bucket=druid +druid.storage.storageDirectory=var/druid/segments +druid.storage.type=s3 +druid.zk.paths.base=/druid +druid.zk.service.host=druid-cluster-zk.demo.svc:2181 +druid.zk.service.pwd={"type": "environment", "variable": "DRUID_ZK_SERVICE_PASSWORD"} +druid.zk.service.user=super +``` + +We can verify from the above output that TLS is disabled for this cluster as there is no TLS/SSL related configs provided for it. + +#### Verify TLS/SSL is disabled using Druid UI + +First port-forward the port `8888` to local machine: + +```bash +$ kubectl port-forward -n demo svc/druid-cluster-routers 8888 +Forwarding from 127.0.0.1:8888 -> 8888 +Forwarding from [::1]:8888 -> 8888 +``` + + +Now hit the `http://localhost:8888` from any browser, and you will be prompted to provide the credential of the druid database. By following the steps discussed below, you can get the credential generated by the KubeDB operator for your Druid database. + +**Connection information:** + +- Username: + + ```bash + $ kubectl get secret -n demo druid-cluster-admin-cred -o jsonpath='{.data.username}' | base64 -d + admin + ``` + +- Password: + + ```bash + $ kubectl get secret -n demo druid-cluster-admin-cred -o jsonpath='{.data.password}' | base64 -d + LzJtVRX5E8MorFaf + ``` + +After providing the credentials correctly, you should be able to access the web console like shown below. + +

+  lifecycle +

+ +From the above screenshot, we can see that the connection is not secure now. In other words, TLS/SSL is disabled for this druid cluster. + +### Create Issuer/ ClusterIssuer + +Now, We are going to create an example `Issuer` that will be used to enable SSL/TLS in Druid. Alternatively, you can follow this [cert-manager tutorial](https://cert-manager.io/docs/configuration/ca/) to create your own `Issuer`. + +- Start off by generating a ca certificates using openssl. + +```bash +$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ./ca.key -out ./ca.crt -subj "/CN=ca/O=kubedb" +Generating a RSA private key +................+++++ +........................+++++ +writing new private key to './ca.key' +----- +``` + +- Now we are going to create a ca-secret using the certificate files that we have just generated. + +```bash +$ kubectl create secret tls druid-ca \ + --cert=ca.crt \ + --key=ca.key \ + --namespace=demo +secret/druid-ca created +``` + +Now, Let's create an `Issuer` using the `druid-ca` secret that we have just created. The `YAML` file looks like this: + +```yaml +apiVersion: cert-manager.io/v1 +kind: Issuer +metadata: + name: druid-ca-issuer + namespace: demo +spec: + ca: + secretName: druid-ca +``` + +Let's apply the `YAML` file: + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/reconfigure-tls/yamls/druid-issuer.yaml +issuer.cert-manager.io/druid-ca-issuer created +``` + +### Create DruidOpsRequest + +In order to add TLS to the druid, we have to create a `DruidOpsRequest` CRO with our created issuer. Below is the YAML of the `DruidOpsRequest` CRO that we are going to create, + +```yaml +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: drops-add-tls + namespace: demo +spec: + type: ReconfigureTLS + databaseRef: + name: druid-cluster + tls: + issuerRef: + name: druid-ca-issuer + kind: Issuer + apiGroup: "cert-manager.io" + certificates: + - alias: client + subject: + organizations: + - druid + organizationalUnits: + - client + timeout: 5m + apply: IfReady +``` + +Here, + +- `spec.databaseRef.name` specifies that we are performing reconfigure TLS operation on `druid-cluster` cluster. +- `spec.type` specifies that we are performing `ReconfigureTLS` on druid. +- `spec.tls.issuerRef` specifies the issuer name, kind and api group. +- `spec.tls.certificates` specifies the certificates. You can learn more about this field from [here](/docs/guides/druid/concepts/druid.md#spectls). + +Let's create the `DruidOpsRequest` CR we have shown above, + +```bash +$ kubectl apply -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/reconfigure-tls/yamls/drops-add-tls.yaml +druidopsrequest.ops.kubedb.com/drops-add-tls created +``` + +#### Verify TLS Enabled Successfully + +Let's wait for `DruidOpsRequest` to be `Successful`. Run the following command to watch `DruidOpsRequest` CRO, + +```bash +$ kubectl get drops -n demo -w +NAME TYPE STATUS AGE +drops-add-tls ReconfigureTLS Progressing 39s +drops-add-tls ReconfigureTLS Progressing 44s +... +... +drops-add-tls ReconfigureTLS Successful 79s +``` + +We can see from the above output that the `DruidOpsRequest` has succeeded. If we describe the `DruidOpsRequest` we will get an overview of the steps that were followed. + +```bash +$ kubectl describe druidopsrequest -n demo drops-add-tls +Name: drops-add-tls +Namespace: demo +Labels: +Annotations: +API Version: ops.kubedb.com/v1alpha1 +Kind: DruidOpsRequest +Metadata: + Creation Timestamp: 2024-10-28T09:43:13Z + Generation: 1 + Managed Fields: + API Version: ops.kubedb.com/v1alpha1 + Fields Type: FieldsV1 + fieldsV1: + f:metadata: + f:annotations: + .: + f:kubectl.kubernetes.io/last-applied-configuration: + f:spec: + .: + f:apply: + f:databaseRef: + f:timeout: + f:tls: + .: + f:certificates: + f:issuerRef: + f:type: + Manager: kubectl-client-side-apply + Operation: Update + Time: 2024-10-28T09:43:13Z + API Version: ops.kubedb.com/v1alpha1 + Fields Type: FieldsV1 + fieldsV1: + f:status: + .: + f:conditions: + f:observedGeneration: + f:phase: + Manager: kubedb-ops-manager + Operation: Update + Subresource: status + Time: 2024-10-28T09:44:32Z + Resource Version: 409889 + UID: b7f563c4-4773-49e9-aba2-17497e66f5f8 +Spec: + Apply: IfReady + Database Ref: + Name: druid-cluster + Timeout: 5m + Tls: + Certificates: + Alias: client + Subject: + Organizational Units: + client + Organizations: + druid + Issuer Ref: + API Group: cert-manager.io + Kind: Issuer + Name: druid-ca-issuer + Type: ReconfigureTLS +Status: + Conditions: + Last Transition Time: 2024-10-28T09:43:13Z + Message: Druid ops-request has started to reconfigure tls for druid nodes + Observed Generation: 1 + Reason: ReconfigureTLS + Status: True + Type: ReconfigureTLS + Last Transition Time: 2024-10-28T09:43:26Z + Message: Successfully synced all certificates + Observed Generation: 1 + Reason: CertificateSynced + Status: True + Type: CertificateSynced + Last Transition Time: 2024-10-28T09:43:21Z + Message: get certificate; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: GetCertificate + Last Transition Time: 2024-10-28T09:43:21Z + Message: check ready condition; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: CheckReadyCondition + Last Transition Time: 2024-10-28T09:43:21Z + Message: issuing condition; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: IssuingCondition + Last Transition Time: 2024-10-28T09:43:31Z + Message: successfully reconciled the Druid with tls configuration + Observed Generation: 1 + Reason: UpdatePetSets + Status: True + Type: UpdatePetSets + Last Transition Time: 2024-10-28T09:44:32Z + Message: Successfully restarted all nodes + Observed Generation: 1 + Reason: RestartNodes + Status: True + Type: RestartNodes + Last Transition Time: 2024-10-28T09:43:37Z + Message: get pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-cluster-historicals-0 + Last Transition Time: 2024-10-28T09:43:37Z + Message: evict pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-cluster-historicals-0 + Last Transition Time: 2024-10-28T09:43:47Z + Message: check pod running; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-cluster-historicals-0 + Last Transition Time: 2024-10-28T09:43:52Z + Message: get pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-cluster-middlemanagers-0 + Last Transition Time: 2024-10-28T09:43:52Z + Message: evict pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-cluster-middlemanagers-0 + Last Transition Time: 2024-10-28T09:43:57Z + Message: check pod running; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-cluster-middlemanagers-0 + Last Transition Time: 2024-10-28T09:44:02Z + Message: get pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-cluster-brokers-0 + Last Transition Time: 2024-10-28T09:44:02Z + Message: evict pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-cluster-brokers-0 + Last Transition Time: 2024-10-28T09:44:07Z + Message: check pod running; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-cluster-brokers-0 + Last Transition Time: 2024-10-28T09:44:12Z + Message: get pod; ConditionStatus:True; PodName:druid-cluster-routers-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-cluster-routers-0 + Last Transition Time: 2024-10-28T09:44:12Z + Message: evict pod; ConditionStatus:True; PodName:druid-cluster-routers-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-cluster-routers-0 + Last Transition Time: 2024-10-28T09:44:17Z + Message: check pod running; ConditionStatus:True; PodName:druid-cluster-routers-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-cluster-routers-0 + Last Transition Time: 2024-10-28T09:44:22Z + Message: get pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-cluster-coordinators-0 + Last Transition Time: 2024-10-28T09:44:22Z + Message: evict pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-cluster-coordinators-0 + Last Transition Time: 2024-10-28T09:44:27Z + Message: check pod running; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-cluster-coordinators-0 + Last Transition Time: 2024-10-28T09:44:32Z + Message: Successfully completed reconfigureTLS for druid. + Observed Generation: 1 + Reason: Successful + Status: True + Type: Successful + Observed Generation: 1 + Phase: Successful +Events: + Type Reason Age From Message + ---- ------ ---- ---- ------- + Normal Starting 103s KubeDB Ops-manager Operator Start processing for DruidOpsRequest: demo/drops-add-tls + Normal Starting 103s KubeDB Ops-manager Operator Pausing Druid databse: demo/druid-cluster + Normal Successful 103s KubeDB Ops-manager Operator Successfully paused Druid database: demo/druid-cluster for DruidOpsRequest: drops-add-tls + Warning get certificate; ConditionStatus:True 95s KubeDB Ops-manager Operator get certificate; ConditionStatus:True + Warning check ready condition; ConditionStatus:True 95s KubeDB Ops-manager Operator check ready condition; ConditionStatus:True + Warning issuing condition; ConditionStatus:True 95s KubeDB Ops-manager Operator issuing condition; ConditionStatus:True + Warning get certificate; ConditionStatus:True 95s KubeDB Ops-manager Operator get certificate; ConditionStatus:True + Warning check ready condition; ConditionStatus:True 95s KubeDB Ops-manager Operator check ready condition; ConditionStatus:True + Warning issuing condition; ConditionStatus:True 95s KubeDB Ops-manager Operator issuing condition; ConditionStatus:True + Normal CertificateSynced 95s KubeDB Ops-manager Operator Successfully synced all certificates + Warning get certificate; ConditionStatus:True 90s KubeDB Ops-manager Operator get certificate; ConditionStatus:True + Warning check ready condition; ConditionStatus:True 90s KubeDB Ops-manager Operator check ready condition; ConditionStatus:True + Warning issuing condition; ConditionStatus:True 90s KubeDB Ops-manager Operator issuing condition; ConditionStatus:True + Warning get certificate; ConditionStatus:True 90s KubeDB Ops-manager Operator get certificate; ConditionStatus:True + Warning check ready condition; ConditionStatus:True 90s KubeDB Ops-manager Operator check ready condition; ConditionStatus:True + Warning issuing condition; ConditionStatus:True 90s KubeDB Ops-manager Operator issuing condition; ConditionStatus:True + Normal CertificateSynced 90s KubeDB Ops-manager Operator Successfully synced all certificates + Normal UpdatePetSets 85s KubeDB Ops-manager Operator successfully reconciled the Druid with tls configuration + Warning get pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 79s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 79s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Warning check pod running; ConditionStatus:False; PodName:druid-cluster-historicals-0 74s KubeDB Ops-manager Operator check pod running; ConditionStatus:False; PodName:druid-cluster-historicals-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-historicals-0 69s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Warning get pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 64s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 64s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 59s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Warning get pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 54s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 54s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-brokers-0 49s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Warning get pod; ConditionStatus:True; PodName:druid-cluster-routers-0 44s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-routers-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-routers-0 44s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-routers-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-routers-0 39s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-routers-0 + Warning get pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 34s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 34s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-coordinators-0 29s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Normal RestartNodes 24s KubeDB Ops-manager Operator Successfully restarted all nodes + Normal Starting 24s KubeDB Ops-manager Operator Resuming Druid database: demo/druid-cluster + Normal Successful 24s KubeDB Ops-manager Operator Successfully resumed Druid database: demo/druid-cluster for DruidOpsRequest: drops-add-tls +``` + +Now, Lets exec into a druid coordinators pod and verify the configuration that the TLS is enabled. + +```bash +$ kubectl exec -it -n demo druid-cluster-coordinators-0 -- bash +Defaulted container "druid" out of: druid, init-druid (init) +bash-5.1$ cat conf/druid/cluster/_common/common.runtime.properties +druid.auth.authenticator.basic.authorizerName=basic +druid.auth.authenticator.basic.credentialsValidator.type=metadata +druid.auth.authenticator.basic.initialAdminPassword={"type": "environment", "variable": "DRUID_ADMIN_PASSWORD"} +druid.auth.authenticator.basic.initialInternalClientPassword=password2 +druid.auth.authenticator.basic.skipOnFailure=false +druid.auth.authenticator.basic.type=basic +druid.auth.authenticatorChain=["basic"] +druid.auth.authorizer.basic.type=basic +druid.auth.authorizers=["basic"] +druid.client.https.trustStorePassword={"type": "environment", "variable": "DRUID_KEY_STORE_PASSWORD"} +druid.client.https.trustStorePath=/opt/druid/ssl/truststore.jks +druid.client.https.trustStoreType=jks +druid.client.https.validateHostnames=false +druid.emitter.logging.logLevel=info +druid.emitter=noop +druid.enablePlaintextPort=false +druid.enableTlsPort=true +druid.escalator.authorizerName=basic +druid.escalator.internalClientPassword=password2 +druid.escalator.internalClientUsername=druid_system +druid.escalator.type=basic +druid.expressions.useStrictBooleans=true +druid.extensions.loadList=["druid-avro-extensions", "druid-kafka-indexing-service", "druid-kafka-indexing-service", "druid-datasketches", "druid-multi-stage-query", "druid-basic-security", "simple-client-sslcontext", "mysql-metadata-storage", "druid-s3-extensions"] +druid.global.http.eagerInitialization=false +druid.host=localhost +druid.indexer.logs.directory=var/druid/indexing-logs +druid.indexer.logs.type=file +druid.indexing.doubleStorage=double +druid.lookup.enableLookupSyncOnStartup=false +druid.metadata.storage.connector.connectURI=jdbc:mysql://druid-cluster-mysql-metadata.demo.svc:3306/druid +druid.metadata.storage.connector.createTables=true +druid.metadata.storage.connector.host=localhost +druid.metadata.storage.connector.password={"type": "environment", "variable": "DRUID_METADATA_STORAGE_PASSWORD"} +druid.metadata.storage.connector.port=1527 +druid.metadata.storage.connector.user=root +druid.metadata.storage.type=mysql +druid.monitoring.monitors=["org.apache.druid.java.util.metrics.JvmMonitor", "org.apache.druid.server.metrics.ServiceStatusMonitor"] +druid.s3.accessKey=minio +druid.s3.enablePathStyleAccess=true +druid.s3.endpoint.signingRegion=us-east-1 +druid.s3.endpoint.url=http://myminio-hl.demo.svc.cluster.local:9000/ +druid.s3.protocol=http +druid.s3.secretKey=minio123 +druid.selectors.coordinator.serviceName=druid/coordinator +druid.selectors.indexing.serviceName=druid/overlord +druid.server.hiddenProperties=["druid.s3.accessKey","druid.s3.secretKey","druid.metadata.storage.connector.password", "password", "key", "token", "pwd"] +druid.server.https.certAlias=druid +druid.server.https.keyStorePassword={"type": "environment", "variable": "DRUID_KEY_STORE_PASSWORD"} +druid.server.https.keyStorePath=/opt/druid/ssl/keystore.jks +druid.server.https.keyStoreType=jks +druid.sql.enable=true +druid.sql.planner.useGroupingSetForExactDistinct=true +druid.startup.logging.logProperties=true +druid.storage.baseKey=druid/segments +druid.storage.bucket=druid +druid.storage.storageDirectory=var/druid/segments +druid.storage.type=s3 +druid.zk.paths.base=/druid +druid.zk.service.host=druid-cluster-zk.demo.svc:2181 +druid.zk.service.pwd={"type": "environment", "variable": "DRUID_ZK_SERVICE_PASSWORD"} +druid.zk.service.user=super + +``` + +We can see from the output above that all TLS related configs are added in the configuration file of the druid database. + +#### Verify TLS/SSL using Druid UI + +To check follow the following steps: + +Druid uses separate ports for TLS/SSL. While the plaintext port for `routers` node is `8888`. For TLS, it is `9088`. Hence, we will use that port to access the UI. + +First port-forward the port `9088` to local machine: + +```bash +$ kubectl port-forward -n demo svc/druid-cluster-tls-routers 9088 +Forwarding from 127.0.0.1:9088 -> 9088 +Forwarding from [::1]:9088 -> 9088 +``` + + +Now hit the `https://localhost:9088/` from any browser. Here you may select `Advance` and then `Proceed to localhost (unsafe)` or you can add the `ca.crt` from the secret `druid-cluster-tls-client-cert` to your browser's Authorities. + +After that you will be prompted to provide the credential of the druid database. By following the steps discussed below, you can get the credential generated by the KubeDB operator for your Druid database. + +**Connection information:** + +- Username: + + ```bash + $ kubectl get secret -n demo druid-cluster-tls-admin-cred -o jsonpath='{.data.username}' | base64 -d + admin + ``` + +- Password: + + ```bash + $ kubectl get secret -n demo druid-cluster-tls-admin-cred -o jsonpath='{.data.password}' | base64 -d + LzJtVRX5E8MorFaf + ``` + +After providing the credentials correctly, you should be able to access the web console like shown below. + +

+  lifecycle +

+ +From the above screenshot, we can see that the connection is secure. + + +## Rotate Certificate + +Now we are going to rotate the certificate of this cluster. First let's check the current expiration date of the certificate. + +```bash +$ kubectl port-forward -n demo svc/druid-cluster-routers 9088 +Forwarding from 127.0.0.1:9088 -> 9088 +Forwarding from [::1]:9088 -> 9088 +Handling connection for 9088 +... + +$ openssl s_client -connect localhost:9088 2>/dev/null | openssl x509 -noout -enddate +notAfter=Jan 26 09:43:16 2025 GMT +``` + +So, the certificate will expire on this time `Jan 26 09:43:16 2025 GMT`. + +### Create DruidOpsRequest + +Now we are going to increase it using a DruidOpsRequest. Below is the yaml of the ops request that we are going to create, + +```yaml +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: druid-recon-tls-rotate + namespace: demo +spec: + type: ReconfigureTLS + databaseRef: + name: druid-cluster + tls: + rotateCertificates: true +``` + +Here, + +- `spec.databaseRef.name` specifies that we are performing reconfigure TLS operation on `druid-cluster`. +- `spec.type` specifies that we are performing `ReconfigureTLS` on our cluster. +- `spec.tls.rotateCertificates` specifies that we want to rotate the certificate of this druid cluster. + +Let's create the `DruidOpsRequest` CR we have shown above, + +```bash +$ kubectl apply -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/reconfigure-tls/yamls/drops-rotate.yaml +druidopsrequest.ops.kubedb.com/drops-rotate created +``` + +#### Verify Certificate Rotated Successfully + +Let's wait for `DruidOpsRequest` to be `Successful`. Run the following command to watch `DruidOpsRequest` CRO, + +```bash +$ kubectl get druidopsrequests -n demo drops-rotate -w +NAME TYPE STATUS AGE +drops-rotate ReconfigureTLS Successful 4m4s +``` + +We can see from the above output that the `DruidOpsRequest` has succeeded. If we describe the `DruidOpsRequest` we will get an overview of the steps that were followed. + +```bash +$ kubectl describe druidopsrequest -n demo drops-rotate +Name: drops-rotate +Namespace: demo +Labels: +Annotations: +API Version: ops.kubedb.com/v1alpha1 +Kind: DruidOpsRequest +Metadata: + Creation Timestamp: 2024-10-28T14:14:50Z + Generation: 1 + Managed Fields: + API Version: ops.kubedb.com/v1alpha1 + Fields Type: FieldsV1 + fieldsV1: + f:metadata: + f:annotations: + .: + f:kubectl.kubernetes.io/last-applied-configuration: + f:spec: + .: + f:apply: + f:databaseRef: + f:tls: + .: + f:rotateCertificates: + f:type: + Manager: kubectl-client-side-apply + Operation: Update + Time: 2024-10-28T14:14:50Z + API Version: ops.kubedb.com/v1alpha1 + Fields Type: FieldsV1 + fieldsV1: + f:status: + .: + f:conditions: + f:observedGeneration: + f:phase: + Manager: kubedb-ops-manager + Operation: Update + Subresource: status + Time: 2024-10-28T14:16:04Z + Resource Version: 440897 + UID: ca3532fc-6e11-4962-bddb-f9cf946d3954 +Spec: + Apply: IfReady + Database Ref: + Name: druid-cluster + Tls: + Rotate Certificates: true + Type: ReconfigureTLS +Status: + Conditions: + Last Transition Time: 2024-10-28T14:14:50Z + Message: Druid ops-request has started to reconfigure tls for druid nodes + Observed Generation: 1 + Reason: ReconfigureTLS + Status: True + Type: ReconfigureTLS + Last Transition Time: 2024-10-28T14:15:04Z + Message: Successfully synced all certificates + Observed Generation: 1 + Reason: CertificateSynced + Status: True + Type: CertificateSynced + Last Transition Time: 2024-10-28T14:14:58Z + Message: get certificate; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: GetCertificate + Last Transition Time: 2024-10-28T14:14:58Z + Message: check ready condition; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: CheckReadyCondition + Last Transition Time: 2024-10-28T14:14:58Z + Message: issuing condition; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: IssuingCondition + Last Transition Time: 2024-10-28T14:15:09Z + Message: successfully reconciled the Druid with tls configuration + Observed Generation: 1 + Reason: UpdatePetSets + Status: True + Type: UpdatePetSets + Last Transition Time: 2024-10-28T14:16:04Z + Message: Successfully restarted all nodes + Observed Generation: 1 + Reason: RestartNodes + Status: True + Type: RestartNodes + Last Transition Time: 2024-10-28T14:15:14Z + Message: get pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-cluster-historicals-0 + Last Transition Time: 2024-10-28T14:15:14Z + Message: evict pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-cluster-historicals-0 + Last Transition Time: 2024-10-28T14:15:19Z + Message: check pod running; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-cluster-historicals-0 + Last Transition Time: 2024-10-28T14:15:24Z + Message: get pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-cluster-middlemanagers-0 + Last Transition Time: 2024-10-28T14:15:24Z + Message: evict pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-cluster-middlemanagers-0 + Last Transition Time: 2024-10-28T14:15:29Z + Message: check pod running; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-cluster-middlemanagers-0 + Last Transition Time: 2024-10-28T14:15:34Z + Message: get pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-cluster-brokers-0 + Last Transition Time: 2024-10-28T14:15:34Z + Message: evict pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-cluster-brokers-0 + Last Transition Time: 2024-10-28T14:15:39Z + Message: check pod running; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-cluster-brokers-0 + Last Transition Time: 2024-10-28T14:15:44Z + Message: get pod; ConditionStatus:True; PodName:druid-cluster-routers-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-cluster-routers-0 + Last Transition Time: 2024-10-28T14:15:44Z + Message: evict pod; ConditionStatus:True; PodName:druid-cluster-routers-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-cluster-routers-0 + Last Transition Time: 2024-10-28T14:15:49Z + Message: check pod running; ConditionStatus:True; PodName:druid-cluster-routers-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-cluster-routers-0 + Last Transition Time: 2024-10-28T14:15:54Z + Message: get pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-cluster-coordinators-0 + Last Transition Time: 2024-10-28T14:15:54Z + Message: evict pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-cluster-coordinators-0 + Last Transition Time: 2024-10-28T14:15:59Z + Message: check pod running; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-cluster-coordinators-0 + Last Transition Time: 2024-10-28T14:16:04Z + Message: Successfully completed reconfigureTLS for druid. + Observed Generation: 1 + Reason: Successful + Status: True + Type: Successful + Observed Generation: 1 + Phase: Successful +Events: + Type Reason Age From Message + ---- ------ ---- ---- ------- + Normal Starting 101s KubeDB Ops-manager Operator Start processing for DruidOpsRequest: demo/drops-rotate + Normal Starting 101s KubeDB Ops-manager Operator Pausing Druid databse: demo/druid-cluster + Normal Successful 101s KubeDB Ops-manager Operator Successfully paused Druid database: demo/druid-cluster for DruidOpsRequest: drops-rotate + Warning get certificate; ConditionStatus:True 93s KubeDB Ops-manager Operator get certificate; ConditionStatus:True + Warning check ready condition; ConditionStatus:True 93s KubeDB Ops-manager Operator check ready condition; ConditionStatus:True + Warning issuing condition; ConditionStatus:True 93s KubeDB Ops-manager Operator issuing condition; ConditionStatus:True + Warning get certificate; ConditionStatus:True 93s KubeDB Ops-manager Operator get certificate; ConditionStatus:True + Warning check ready condition; ConditionStatus:True 93s KubeDB Ops-manager Operator check ready condition; ConditionStatus:True + Warning issuing condition; ConditionStatus:True 93s KubeDB Ops-manager Operator issuing condition; ConditionStatus:True + Normal CertificateSynced 93s KubeDB Ops-manager Operator Successfully synced all certificates + Warning get certificate; ConditionStatus:True 88s KubeDB Ops-manager Operator get certificate; ConditionStatus:True + Warning check ready condition; ConditionStatus:True 88s KubeDB Ops-manager Operator check ready condition; ConditionStatus:True + Warning issuing condition; ConditionStatus:True 88s KubeDB Ops-manager Operator issuing condition; ConditionStatus:True + Warning get certificate; ConditionStatus:True 88s KubeDB Ops-manager Operator get certificate; ConditionStatus:True + Warning check ready condition; ConditionStatus:True 88s KubeDB Ops-manager Operator check ready condition; ConditionStatus:True + Warning issuing condition; ConditionStatus:True 88s KubeDB Ops-manager Operator issuing condition; ConditionStatus:True + Normal CertificateSynced 87s KubeDB Ops-manager Operator Successfully synced all certificates + Normal UpdatePetSets 82s KubeDB Ops-manager Operator successfully reconciled the Druid with tls configuration + Warning get pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 77s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 77s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-historicals-0 72s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Warning get pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 67s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 67s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 62s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Warning get pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 57s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 57s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-brokers-0 52s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Warning get pod; ConditionStatus:True; PodName:druid-cluster-routers-0 47s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-routers-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-routers-0 47s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-routers-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-routers-0 42s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-routers-0 + Warning get pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 37s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 37s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-coordinators-0 32s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Normal RestartNodes 27s KubeDB Ops-manager Operator Successfully restarted all nodes + Normal Starting 27s KubeDB Ops-manager Operator Resuming Druid database: demo/druid-cluster + Normal Successful 27s KubeDB Ops-manager Operator Successfully resumed Druid database: demo/druid-cluster for DruidOpsRequest: drops-rotate +``` + +Now, let's check the expiration date of the certificate. + +```bash +$ kubectl port-forward -n demo svc/druid-cluster-routers 9088 +Forwarding from 127.0.0.1:9088 -> 9088 +Forwarding from [::1]:9088 -> 9088 +Handling connection for 9088 +... + +$ openssl s_client -connect localhost:9088 2>/dev/null | openssl x509 -noout -enddate +notAfter=Jan 26 14:15:46 2025 GMT +``` + +As we can see from the above output, the certificate has been rotated successfully. + +## Change Issuer/ClusterIssuer + +Now, we are going to change the issuer of this database. + +- Let's create a new ca certificate and key using a different subject `CN=ca-update,O=kubedb-updated`. + +```bash +$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ./ca.key -out ./ca.crt -subj "/CN=ca-updated/O=kubedb-updated" +Generating a RSA private key +..............................................................+++++ +......................................................................................+++++ +writing new private key to './ca.key' +----- +``` + +- Now we are going to create a new ca-secret using the certificate files that we have just generated. + +```bash +$ kubectl create secret tls druid-new-ca \ + --cert=ca.crt \ + --key=ca.key \ + --namespace=demo +secret/druid-new-ca created +``` + +Now, Let's create a new `Issuer` using the `mongo-new-ca` secret that we have just created. The `YAML` file looks like this: + +```yaml +apiVersion: cert-manager.io/v1 +kind: Issuer +metadata: + name: dr-new-issuer + namespace: demo +spec: + ca: + secretName: druid-new-ca +``` + +Let's apply the `YAML` file: + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/reconfigure-tls/yamls/druid-new-issuer.yaml +issuer.cert-manager.io/dr-new-issuer created +``` + +### Create DruidOpsRequest + +In order to use the new issuer to issue new certificates, we have to create a `DruidOpsRequest` CRO with the newly created issuer. Below is the YAML of the `DruidOpsRequest` CRO that we are going to create, + +```yaml +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: drops-update-issuer + namespace: demo +spec: + type: ReconfigureTLS + databaseRef: + name: druid-cluster + tls: + issuerRef: + name: dr-new-issuer + kind: Issuer + apiGroup: "cert-manager.io" +``` + +Here, + +- `spec.databaseRef.name` specifies that we are performing reconfigure TLS operation on `druid-cluster` cluster. +- `spec.type` specifies that we are performing `ReconfigureTLS` on our druid. +- `spec.tls.issuerRef` specifies the issuer name, kind and api group. + +Let's create the `DruidOpsRequest` CR we have shown above, + +```bash +$ kubectl apply -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/reconfigure-tls/yamls/druid-update-tls-issuer.yaml +druidpsrequest.ops.kubedb.com/drops-update-issuer created +``` + +#### Verify Issuer is changed successfully + +Let's wait for `DruidOpsRequest` to be `Successful`. Run the following command to watch `DruidOpsRequest` CRO, + +```bash +$ kubectl get druidopsrequests -n demo drops-update-issuer -w +NAME TYPE STATUS AGE +drops-update-issuer ReconfigureTLS Progressing 14s +drops-update-issuer ReconfigureTLS Progressing 18s +... +... +drops-update-issuer ReconfigureTLS Successful 73s +``` + +We can see from the above output that the `DruidOpsRequest` has succeeded. If we describe the `DruidOpsRequest` we will get an overview of the steps that were followed. + +```bash +$ kubectl describe druidopsrequest -n demo drops-update-issuer +Name: drops-update-issuer +Namespace: demo +Labels: +Annotations: +API Version: ops.kubedb.com/v1alpha1 +Kind: DruidOpsRequest +Metadata: + Creation Timestamp: 2024-10-28T14:24:22Z + Generation: 1 + Managed Fields: + API Version: ops.kubedb.com/v1alpha1 + Fields Type: FieldsV1 + fieldsV1: + f:metadata: + f:annotations: + .: + f:kubectl.kubernetes.io/last-applied-configuration: + f:spec: + .: + f:apply: + f:databaseRef: + f:tls: + .: + f:issuerRef: + f:type: + Manager: kubectl-client-side-apply + Operation: Update + Time: 2024-10-28T14:24:22Z + API Version: ops.kubedb.com/v1alpha1 + Fields Type: FieldsV1 + fieldsV1: + f:status: + .: + f:conditions: + f:observedGeneration: + f:phase: + Manager: kubedb-ops-manager + Operation: Update + Subresource: status + Time: 2024-10-28T14:25:35Z + Resource Version: 442332 + UID: 5089e358-2dc2-4d62-8c13-92828de7c557 +Spec: + Apply: IfReady + Database Ref: + Name: druid-cluster + Tls: + Issuer Ref: + API Group: cert-manager.io + Kind: Issuer + Name: dr-new-issuer + Type: ReconfigureTLS +Status: + Conditions: + Last Transition Time: 2024-10-28T14:24:22Z + Message: Druid ops-request has started to reconfigure tls for druid nodes + Observed Generation: 1 + Reason: ReconfigureTLS + Status: True + Type: ReconfigureTLS + Last Transition Time: 2024-10-28T14:24:35Z + Message: Successfully synced all certificates + Observed Generation: 1 + Reason: CertificateSynced + Status: True + Type: CertificateSynced + Last Transition Time: 2024-10-28T14:24:30Z + Message: get certificate; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: GetCertificate + Last Transition Time: 2024-10-28T14:24:30Z + Message: check ready condition; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: CheckReadyCondition + Last Transition Time: 2024-10-28T14:24:30Z + Message: issuing condition; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: IssuingCondition + Last Transition Time: 2024-10-28T14:24:40Z + Message: successfully reconciled the Druid with tls configuration + Observed Generation: 1 + Reason: UpdatePetSets + Status: True + Type: UpdatePetSets + Last Transition Time: 2024-10-28T14:25:35Z + Message: Successfully restarted all nodes + Observed Generation: 1 + Reason: RestartNodes + Status: True + Type: RestartNodes + Last Transition Time: 2024-10-28T14:24:45Z + Message: get pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-cluster-historicals-0 + Last Transition Time: 2024-10-28T14:24:45Z + Message: evict pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-cluster-historicals-0 + Last Transition Time: 2024-10-28T14:24:50Z + Message: check pod running; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-cluster-historicals-0 + Last Transition Time: 2024-10-28T14:24:55Z + Message: get pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-cluster-middlemanagers-0 + Last Transition Time: 2024-10-28T14:24:55Z + Message: evict pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-cluster-middlemanagers-0 + Last Transition Time: 2024-10-28T14:25:00Z + Message: check pod running; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-cluster-middlemanagers-0 + Last Transition Time: 2024-10-28T14:25:05Z + Message: get pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-cluster-brokers-0 + Last Transition Time: 2024-10-28T14:25:05Z + Message: evict pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-cluster-brokers-0 + Last Transition Time: 2024-10-28T14:25:10Z + Message: check pod running; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-cluster-brokers-0 + Last Transition Time: 2024-10-28T14:25:15Z + Message: get pod; ConditionStatus:True; PodName:druid-cluster-routers-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-cluster-routers-0 + Last Transition Time: 2024-10-28T14:25:15Z + Message: evict pod; ConditionStatus:True; PodName:druid-cluster-routers-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-cluster-routers-0 + Last Transition Time: 2024-10-28T14:25:20Z + Message: check pod running; ConditionStatus:True; PodName:druid-cluster-routers-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-cluster-routers-0 + Last Transition Time: 2024-10-28T14:25:25Z + Message: get pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-cluster-coordinators-0 + Last Transition Time: 2024-10-28T14:25:25Z + Message: evict pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-cluster-coordinators-0 + Last Transition Time: 2024-10-28T14:25:30Z + Message: check pod running; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-cluster-coordinators-0 + Last Transition Time: 2024-10-28T14:25:35Z + Message: Successfully completed reconfigureTLS for druid. + Observed Generation: 1 + Reason: Successful + Status: True + Type: Successful + Observed Generation: 1 + Phase: Successful +Events: + Type Reason Age From Message + ---- ------ ---- ---- ------- + Normal Starting 92s KubeDB Ops-manager Operator Start processing for DruidOpsRequest: demo/drops-update-issuer + Normal Starting 92s KubeDB Ops-manager Operator Pausing Druid databse: demo/druid-cluster + Normal Successful 92s KubeDB Ops-manager Operator Successfully paused Druid database: demo/druid-cluster for DruidOpsRequest: drops-update-issuer + Warning get certificate; ConditionStatus:True 84s KubeDB Ops-manager Operator get certificate; ConditionStatus:True + Warning check ready condition; ConditionStatus:True 84s KubeDB Ops-manager Operator check ready condition; ConditionStatus:True + Warning issuing condition; ConditionStatus:True 84s KubeDB Ops-manager Operator issuing condition; ConditionStatus:True + Warning get certificate; ConditionStatus:True 84s KubeDB Ops-manager Operator get certificate; ConditionStatus:True + Warning check ready condition; ConditionStatus:True 84s KubeDB Ops-manager Operator check ready condition; ConditionStatus:True + Warning issuing condition; ConditionStatus:True 84s KubeDB Ops-manager Operator issuing condition; ConditionStatus:True + Normal CertificateSynced 84s KubeDB Ops-manager Operator Successfully synced all certificates + Warning get certificate; ConditionStatus:True 79s KubeDB Ops-manager Operator get certificate; ConditionStatus:True + Warning check ready condition; ConditionStatus:True 79s KubeDB Ops-manager Operator check ready condition; ConditionStatus:True + Warning issuing condition; ConditionStatus:True 79s KubeDB Ops-manager Operator issuing condition; ConditionStatus:True + Warning get certificate; ConditionStatus:True 79s KubeDB Ops-manager Operator get certificate; ConditionStatus:True + Warning check ready condition; ConditionStatus:True 79s KubeDB Ops-manager Operator check ready condition; ConditionStatus:True + Warning issuing condition; ConditionStatus:True 79s KubeDB Ops-manager Operator issuing condition; ConditionStatus:True + Normal CertificateSynced 79s KubeDB Ops-manager Operator Successfully synced all certificates + Normal UpdatePetSets 74s KubeDB Ops-manager Operator successfully reconciled the Druid with tls configuration + Warning get pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 69s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 69s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-historicals-0 64s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Warning get pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 59s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 59s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 54s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Warning get pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 49s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 49s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-brokers-0 44s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Warning get pod; ConditionStatus:True; PodName:druid-cluster-routers-0 39s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-routers-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-routers-0 39s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-routers-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-routers-0 34s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-routers-0 + Warning get pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 29s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 29s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-coordinators-0 24s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Normal RestartNodes 19s KubeDB Ops-manager Operator Successfully restarted all nodes + Normal Starting 19s KubeDB Ops-manager Operator Resuming Druid database: demo/druid-cluster + Normal Successful 19s KubeDB Ops-manager Operator Successfully resumed Druid database: demo/druid-cluster for DruidOpsRequest: drops-update-issuer +``` + +Now, Lets exec into a druid node and find out the ca subject to see if it matches the one we have provided. + +```bash +$ kubectl exec -it druid-cluster-broker-0 -- bash +druid@druid-cluster-broker-0:~$ keytool -list -v -keystore /var/private/ssl/server.keystore.jks -storepass wt6f5pwxpg84 | grep 'Issuer' +Issuer: O=kubedb-updated, CN=ca-updated +Issuer: O=kubedb-updated, CN=ca-updated + +$ kubectl port-forward -n demo svc/druid-cluster-routers 9088 +Forwarding from 127.0.0.1:9088 -> 9088 +Forwarding from [::1]:9088 -> 9088 +Handling connection for 9088 +... + +$ openssl s_client -connect localhost:9088 2>/dev/null | openssl x509 -noout -issuer +issuer=CN = ca-updated, O = kubedb-updated +``` + +We can see from the above output that, the subject name matches the subject name of the new ca certificate that we have created. So, the issuer is changed successfully. + +## Remove TLS from the Database + +Now, we are going to remove TLS from this database using a DruidOpsRequest. + +### Create DruidOpsRequest + +Below is the YAML of the `DruidOpsRequest` CRO that we are going to create, + +```yaml +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: drops-remove + namespace: demo +spec: + type: ReconfigureTLS + databaseRef: + name: druid-cluster + tls: + remove: true +``` + +Here, + +- `spec.databaseRef.name` specifies that we are performing reconfigure TLS operation on `druid-cluster` cluster. +- `spec.type` specifies that we are performing `ReconfigureTLS` on Druid. +- `spec.tls.remove` specifies that we want to remove tls from this cluster. + +Let's create the `DruidOpsRequest` CR we have shown above, + +```bash +$ kubectl apply -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/reconfigure-tls/yamls/drops-remove.yaml +druidopsrequest.ops.kubedb.com/drops-remove created +``` + +#### Verify TLS Removed Successfully + +Let's wait for `DruidOpsRequest` to be `Successful`. Run the following command to watch `DruidOpsRequest` CRO, + +```bash +$ kubectl get druidopsrequest -n demo drops-remove -w +NAME TYPE STATUS AGE +drops-remove ReconfigureTLS Progressing 25s +drops-remove ReconfigureTLS Progressing 29s +... +... +drops-remove ReconfigureTLS Successful 114s + +``` + +We can see from the above output that the `DruidOpsRequest` has succeeded. If we describe the `DruidOpsRequest` we will get an overview of the steps that were followed. + +```bash +$ kubectl describe druidopsrequest -n demo drops-remove +Name: drops-remove +Namespace: demo +Labels: +Annotations: +API Version: ops.kubedb.com/v1alpha1 +Kind: DruidOpsRequest +Metadata: + Creation Timestamp: 2024-10-28T14:31:07Z + Generation: 1 + Managed Fields: + API Version: ops.kubedb.com/v1alpha1 + Fields Type: FieldsV1 + fieldsV1: + f:metadata: + f:annotations: + .: + f:kubectl.kubernetes.io/last-applied-configuration: + f:spec: + .: + f:apply: + f:databaseRef: + f:tls: + .: + f:remove: + f:type: + Manager: kubectl-client-side-apply + Operation: Update + Time: 2024-10-28T14:31:07Z + API Version: ops.kubedb.com/v1alpha1 + Fields Type: FieldsV1 + fieldsV1: + f:status: + .: + f:conditions: + f:observedGeneration: + f:phase: + Manager: kubedb-ops-manager + Operation: Update + Subresource: status + Time: 2024-10-28T14:33:01Z + Resource Version: 443725 + UID: 27234241-c72e-471c-8dd4-16fd485956cc +Spec: + Apply: IfReady + Database Ref: + Name: druid-cluster + Tls: + Remove: true + Type: ReconfigureTLS +Status: + Conditions: + Last Transition Time: 2024-10-28T14:31:07Z + Message: Druid ops-request has started to reconfigure tls for druid nodes + Observed Generation: 1 + Reason: ReconfigureTLS + Status: True + Type: ReconfigureTLS + Last Transition Time: 2024-10-28T14:31:16Z + Message: successfully reconciled the Druid with tls configuration + Observed Generation: 1 + Reason: UpdatePetSets + Status: True + Type: UpdatePetSets + Last Transition Time: 2024-10-28T14:33:01Z + Message: Successfully restarted all nodes + Observed Generation: 1 + Reason: RestartNodes + Status: True + Type: RestartNodes + Last Transition Time: 2024-10-28T14:31:21Z + Message: get pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-cluster-historicals-0 + Last Transition Time: 2024-10-28T14:31:21Z + Message: evict pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-cluster-historicals-0 + Last Transition Time: 2024-10-28T14:31:26Z + Message: check pod running; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-cluster-historicals-0 + Last Transition Time: 2024-10-28T14:31:31Z + Message: get pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-cluster-middlemanagers-0 + Last Transition Time: 2024-10-28T14:31:31Z + Message: evict pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-cluster-middlemanagers-0 + Last Transition Time: 2024-10-28T14:31:36Z + Message: check pod running; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-cluster-middlemanagers-0 + Last Transition Time: 2024-10-28T14:31:41Z + Message: get pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-cluster-brokers-0 + Last Transition Time: 2024-10-28T14:31:41Z + Message: evict pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-cluster-brokers-0 + Last Transition Time: 2024-10-28T14:31:46Z + Message: check pod running; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-cluster-brokers-0 + Last Transition Time: 2024-10-28T14:31:51Z + Message: get pod; ConditionStatus:True; PodName:druid-cluster-routers-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-cluster-routers-0 + Last Transition Time: 2024-10-28T14:31:51Z + Message: evict pod; ConditionStatus:True; PodName:druid-cluster-routers-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-cluster-routers-0 + Last Transition Time: 2024-10-28T14:31:56Z + Message: check pod running; ConditionStatus:True; PodName:druid-cluster-routers-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-cluster-routers-0 + Last Transition Time: 2024-10-28T14:32:01Z + Message: get pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-cluster-coordinators-0 + Last Transition Time: 2024-10-28T14:32:01Z + Message: evict pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-cluster-coordinators-0 + Last Transition Time: 2024-10-28T14:32:06Z + Message: check pod running; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-cluster-coordinators-0 + Last Transition Time: 2024-10-28T14:33:01Z + Message: Successfully completed reconfigureTLS for druid. + Observed Generation: 1 + Reason: Successful + Status: True + Type: Successful + Observed Generation: 1 + Phase: Successful +Events: + Type Reason Age From Message + ---- ------ ---- ---- ------- + Normal Starting 2m12s KubeDB Ops-manager Operator Start processing for DruidOpsRequest: demo/drops-remove + Normal Starting 2m12s KubeDB Ops-manager Operator Pausing Druid databse: demo/druid-cluster + Normal Successful 2m12s KubeDB Ops-manager Operator Successfully paused Druid database: demo/druid-cluster for DruidOpsRequest: drops-remove + Normal UpdatePetSets 2m3s KubeDB Ops-manager Operator successfully reconciled the Druid with tls configuration + Warning get pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 118s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 118s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-historicals-0 113s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Warning get pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 108s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 108s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 103s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Warning get pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 98s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 98s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-brokers-0 93s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Warning get pod; ConditionStatus:True; PodName:druid-cluster-routers-0 88s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-routers-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-routers-0 88s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-routers-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-routers-0 83s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-routers-0 + Warning get pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 78s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 78s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-coordinators-0 73s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Warning get pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 68s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 68s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-historicals-0 63s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Warning get pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 58s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 58s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 53s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Warning get pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 48s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 48s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-brokers-0 43s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Warning get pod; ConditionStatus:True; PodName:druid-cluster-routers-0 38s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-routers-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-routers-0 38s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-routers-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-routers-0 33s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-routers-0 + Warning get pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 28s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 28s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-coordinators-0 23s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Normal RestartNodes 18s KubeDB Ops-manager Operator Successfully restarted all nodes + Normal Starting 18s KubeDB Ops-manager Operator Resuming Druid database: demo/druid-cluster + Normal Successful 18s KubeDB Ops-manager Operator Successfully resumed Druid database: demo/druid-cluster for DruidOpsRequest: drops-remove +``` + +Now, Let's exec into one of the broker node and find out that TLS is disabled or not. + +```bash +$$ kubectl exec -it -n demo druid-cluster-broker-0 -- druid-configs.sh --bootstrap-server localhost:9092 --command-config /opt/druid/config/clientauth.properties --describe --entity-type brokers --all | grep 'ssl.keystore' + ssl.keystore.certificate.chain=null sensitive=true synonyms={} + ssl.keystore.key=null sensitive=true synonyms={} + ssl.keystore.location=null sensitive=false synonyms={} + ssl.keystore.password=null sensitive=true synonyms={} + ssl.keystore.type=JKS sensitive=false synonyms={DEFAULT_CONFIG:ssl.keystore.type=JKS} + ssl.keystore.certificate.chain=null sensitive=true synonyms={} + ssl.keystore.key=null sensitive=true synonyms={} + ssl.keystore.location=null sensitive=false synonyms={} + ssl.keystore.password=null sensitive=true synonyms={} +``` + +So, we can see from the above that, output that tls is disabled successfully. + +## Cleaning up + +To cleanup the Kubernetes resources created by this tutorial, run: + +```bash +kubectl delete opsrequest drops-add-tls drops-remove drops-rotate drops-update-issuer +kubectl delete druid -n demo druid-cluster +kubectl delete issuer -n demo druid-ca-issuer dr-new-issuer +kubectl delete ns demo +``` + +## Next Steps + +- Detail concepts of [Druid object](/docs/guides/druid/concepts/druid.md). +- Different Druid topology clustering modes [here](/docs/guides/druid/clustering/_index.md). +- Monitor your Druid database with KubeDB using [out-of-the-box Prometheus operator](/docs/guides/druid/monitoring/using-prometheus-operator.md). + +[//]: # (- Monitor your Druid database with KubeDB using [out-of-the-box builtin-Prometheus](/docs/guides/druid/monitoring/using-builtin-prometheus.md).) +- Want to hack on KubeDB? Check our [contribution guidelines](/docs/CONTRIBUTING.md). + diff --git a/docs/guides/druid/reconfigure-tls/images/druid-ui.png b/docs/guides/druid/reconfigure-tls/images/druid-ui.png new file mode 100644 index 0000000000000000000000000000000000000000..f81925c59cb7bf238315c7de992eaf0092caeb9c GIT binary patch literal 46148 zcma%?Wmp_R^WYbPYw+M9xVviz?(P!YA-G#`53bANF2QYqKyY_=cXz$b``-UP-E+^) zr{0h7A}o~r6!M<^*sq9PF>0RRA0X(=%k0N}$P005c@0UC0rQCNuq00;m`i+xq| zFgRJg*Cd?p5PrF)7Px=bS8N%-f39#0u!+I$6BV7W9_rd|vK+)xDbZ ze|&f_gY&0Aj z8#~bC_!x6{*5)skPi%eeb1=NY8!z%;$u)_kfF$%gI0JLZ25F7tav`6+6ISa9&;>8#{X)N&AF12Tbp9d%lp@>)9#7 z1iUvd50B5o=Gl>u+lepc;N05Unh~|6!#mDvXuRzj|6RxJ9Z&GY&zCjp&;MHf<1pvF z40W#D>}^-Q?h-)dP`o4jb{Pajc@1-q^L?O(4*kOZRx9qH1eW+v$qo0f3V>(l?c$6y z;?tqy@_~)d>)Zzpuf?Us_V>3ieqY`Ti52&?Z|CkJ?g;;61IXcfTin;ZK_WdT>mpuM z-vZV=7nk{8B1C-77oPn+?icu%@d^G(0*H9eUp5!o&R;KI?}aHA7r+sX`#?OH1CT+Z zo7<;Q-v_eIS9Bq)A~DUvIP8p^Z>xo>#wWl>-Trtp3j$1|Gg)C?EXIge$6yU zhW+0g7i^zJKK!Tn8~tO>f29`S5hnio^yCAK<$p_eP|zIzEjm_5 zoSbF7@n^?8sjt=vVQD)9EBrYB6_uQ$hqW}8p)|5jWN|RNgLZsCsWF2YuA)Xnq0kJx zt)C;xT4bX6p^NHIQkMDWO#3ivk4cQwOz^&3>P4JR7%jIhWxl> z@oQRBd1}S7^!_FcNxQtQSyi&|V5H2j@fTZ|8rw9+j_^2>t$s6oEq>_fR#NC0-k~FO zqDddBA$j9+-utEJK~X=$T;mrDQ_H@5r@gNX2*`&z?c~43;2wnfa)o?bcA8aAokL-7%kcph4 z5kr|`RO9JEEuz`A+*kkzXd3o|<{&2;wh@&QB_Gs}PLKSZG-MIQ+~;yw0KhT$z{eKh zN*$hPLqXb`jV@+1KP!tlFagU}&*5%l|JB!~|D#Nw{hCTy`RBCKYgDz|=;K3r|COxh zwPtVGNuGlk#Qs)J3PVBMXF^WPN;82=1L!FOP-@r2dj8Aad4QivImE6dhi!o%Rp@Xn*gt zNiDzm1&(DZi$w}Sz8+L&1VCz>+iJ;j5Dz~AnAx`zzoVu1|NhiDXhz2VdqA$@ znL;`_n0rnq?qXmJmT1J>-I^#$zbB2AAW7V z0ZbR2@rs5y-7I>#-p2UGjJ~EMO>Ne+{LGVZ`AEm;ATP&cWlu;`X_@aGUS`vFLRyHA z1k}`;IyoaR^o}e)ZY9p*jpeBN!cbEWu59ovX{{PIWdi%|f2GlVXXD)Kg67z~?xcQs z^%q9JyrF!-+?h^Xm=;3`RHk4jBWlbzxw*c+%gFuk!x-Q1hnGP4`a6G()h7o#-#KNZ zLMY+v$>Er~Y81O~Sk9h&)I)1ZTezR_cbHeOm~CkU2z>oP?{e_y6Etj3^fd>zTO-
{yjnPE+`Z}Fi1=a*gChoeRmxdp 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

*(5D{^Y!StGY zz`JXH`!+G+V>bpCkFP%8zbewaODzd!3};H0+x|$)(fP_kFc`KVb|-xTmb>0aI^Aje zGMK44G-bK?ux&{~qa$1{p_D8GrdLnb9w)#L-(mB*D zSLhiFkToGAr3&JsBNdOaS=>CeuLlgmw7+ZgoBA^AG?64fKM5Z1Q`NF&)h2%)h|%e? z?u9CoO{*ntpqpWt{JZmhDBkwU1)9xIy&WLbqmos+1R_z|JJTsV+K++!f=|0z7pf?| zzZdssN7a*>yT0_9*+-EAg+&@%MRfLh*CUx5Z!Qwfz5E$3Bb;0!N%tw@;v_;_XA3#h z#nSCs&3ub2xjtNDm5yrcORPPd(&CKpX50}LZ}FaXqgLwLHdCZ<-zVHA5B2uZMk1=$ zs*pxnNps8_L^w1y~e~Nha0Tx@-WbkMXgq?nw7b7kn+z{4H2e7>_ z??M+P;QhK1Bum8#uwV`N!eBT2F}_t43O_HUQ%c|~rty^n(wM_iWMyNGT2NoOZ6xY^ zxJ~V*+YG={QQ0ajRJ3*DAG;&DeC+R9XfIZLtaF7($afy{If~EXvvNA_O;UTfQ+wD% zc2p5q-eMeox}z+l1Q#y4v{b~dzlXzXl}s#}x1PE*t&vo(k#&wFgV$|RXV1@!hI_0I z=XL4Ep^2LH$G^tm$O77B_5KHeN2a{A^X?)GNAC0+va=ZIbZulxnV~E!YO(aGAeuF9 zQC}vRW@{xry1&rw*pce&k)u*228~g{5N8N|a@&%JyVB>2*Psi2??YL5fgX}nPJLmv zS|08_m7J!Lhq5q{v2C0FFcvAfE^9#&6Yez(Pm}PrV`mNAJ$v;+xp>Js!KA{!h2(=k z;BJyI)!fZYfBOvzMyKB+=+pD|EK&;*enN*~uyFC$ed{zEwfCIOdcNOYMK@YsC#?K#X}bD4`hmma_7s2Q*fA; zY0WD1+J58}IcSBdoRS^&-f_fx5t`A^;4`8{kxV5eJq@8#XtC%!P; zepOd6^&={herVM7?x+6wScS@p0KKm15%vthm+=x0l0OU&fAn#?8{ynko_+0Ty(8N# zusS$StxBvTyMlUmk!(gzm{eCw^p@pWvK$ooK zSOc+$l&UB1PC`h4qWyb5PQwdw0NHt61~O(bZYR(Am)NnliJB#-`!|yYM(t&$>4M zfE>mQkGlIh0oBUH#_WUx)dxVbGklPqng?5jzRDnYy)umuaQ9|oQ1>mXpA|mW4WdL{ zhcjN3Nk=o#2x-FXG2>A$Sqg|pK8@A8>p~-LIGOgPRDNpKeQ@-ZHJ~C5Nc4|87JJCE z_9QUON~n%O&Tgt9w&)P@N!nQIht!zAzUW&??}YD%eHxJoPRAJyY;0;Huf^V77p%Bz zJN2q_K?2<2C&wcE=C3kZYc4x2S^!20&h3)y`n8GmS8Q;2xa~Lmb57y>(@8QcJAC`| za1MIvo@-8m6}c!=2r0TKwr1HX+N`{-t5xt0Trvl|QAZ@#{Lp;7OGga?Wi);m{!+1- z|1H;Q!kkI%8}88tb)9}+9aH}V9_wT0ED&91p_SiW#;;YgqS4 zAPr%yY1=ORprN@$0~JQII-nMsrb1+c2kh#4k4LfNqApH>$6AKHK8?sysqQv5vfn8}FK{2zv1n-VnG9qP;B%$uqRhQZff= zr_+8`>#-q7ZOEu-C^Uva!rSyoXp@dYIzxknvt+6cZk_#a2SJ_c=f(tiNpTR{I94}j_Ooj@`7U$R< z>8wg;$ocQJ&P%hVJ@EgKslfH36B>c=Dhj6jJsMUZMqV%8VbTc^PZRUt#)d1-NBI^M zN=*CfJHW3}vq?vDiigxvtJ4&o$(iiOdvu1Bxcyww)CNqWRH?a;h11pAqC@SKdP8-w zsxX==#?qyd(rliGkesY@Oia|U4PWm4M_e2+w~>nDSt8O9MrzG*Q!cxg0mXwu0*5uq zM=ylJuMXGRM{6-nnWGH5ldD9{>^~>r#@&9u-WgUQ3yoplYhIgZZLcD%*^ofgYbHqR z&T=t3#8&37PGr{vr94O6ZFJl4A#TR=%epBn^~bpD`R?3SDt`WYse6zYCB#`LV>D0s+rP>Iq}f% z{)AzNB#LW#9_+$St5Bb}Y}pT_ARJGA8FmN387tJ&I%n;c?y=4+RhDCp#lP*s;ROe>Rj@>D%z8pfuwcq9#$~^O;w>c?=bp#h1Z{YQ${&^ZLlh8b?Nr7rmGtM2svl=JcZU{%5U8u%Jq$t<*`APC3y+{ zb_VZWT2!UOzI=56?XTYqf*&%N*}GgthXt+0ki&Ae>pAMjThmcKliPp|VE3n1#s zAim@Jrd3LBd^e>I&bvN|{JP)%>S=n#M_Nz5!k7(m0R};?KyYD%_Hohd?MRkLE1Ypg zMK%LqKyCccf~fiW0&hyk10D>Mlql!-1lRTsLorp|8ee`f$;>XnS;w|d*U`fLjJ2-y zt&WG>EQG4VdCzLT;Qwo z(~b?xox!o^Xeo^CtD8HXDO?s$Wsuq%G|U)>R#+`rQ+tjfM1O7o)1+&sjoBo&>``<3 zFU+I3r6nT{Vt0SO)0d!T82so_00WfMCJSfI{?1M~^&^dA=pF>ptgT=!pK?~bbqG|0YF=#7=nV7)I9+}$ExHtxo+z-cg{Q_1-Z zQh{3$Y;wJuG!D*LE+9RS&EWEG(H&@$wAmfE^X8gp>?SX2UG_~YK$26knd#w5EbuYA zx&W-%yFKq1yPER!KeQ=H0#OlXPs(oFLG{<&^ncJdC}Tc*x%+k6F2% zPF1{r6RJ~_;V~RijF7`7y(w{N5P1QkpR6l;)4$}t$caSRq8`WEb(vqDwA1B|gpucx z>HFj93Z;dv9VSxe=vMpqjn(^@Cm%uJvg`D1vm@cWPel}NSUyh)izri1D-f9Mn5|}& zZ;zDT;ZISpfJz4cTw>D0sS66L5gl@54me(EvOuS+P!(y5uQ*=!+XUore!UQ5;+w+& zFb0R+^7$lK##y*lglso}K5uJ0Z@tW7fxug2MjcX#Qik&^So6|4J-%yaO@VxmplcKg zs0bzpD?2`r-hPYK*`S?O32M&;J)z&&lMGv~yF=zhD>pegF*}{%`$RAB=;x!MAN+TP zg|43j4(kN|NV*V2XnKKX9qC6={fP*j+0&4E{u=LuEZEXswf(XvF?iG0HWbQsZa!$0 zEc6%h7a4n4I+n8hX$+cem5$CY$SsB2VMsgIy_lzJAx2ael$4{I_3LY5)28>w9FJov zyDsJp^|UjNXcr^{-mH|&1l$hIy(o(wx!Npsbz+RRG=J@yis{%+keEaC@YuF==v#8A zx5oV<>gs$U*_L?7F<3CQO-WLYdb*Ovu>^jWrGAM|5p17eS+Sw5via#{KYzxIGiR@k zm})81g!5IfGq9q+<<-MD@1?nl4Oyr&DrptJyEnM=QN${g;cE2ng+gJYsxhID@neU9 zO}sx(913KD0FP70vPx-SUl_xyj&BPKXL?qR~n21EghI4d!??OIQH39{ z+vu~~e4F3mJsWjQzGWci!qTQ{OJ&YEU;esQ%R`^`I`jK)H=dW#-qp}@->AJMYJbrU zQtyx#czH*N*<7X9q%ca+v5EP`yr5AXad3H`@@OXt@}^^n0b<)#;Uh^&PPbFI$$hI& zvZZ2DJ-ndzlNq7979;{N3ptR^x&AM**uN5p7P?wWIi7 zNVx+)W-7E`G_!`ayO3bT@Vj=SF{q4&@1l|FJ(-l0-)$TS_eW`C^;yC^?8yT_`4}Og zH1gRS(49M7KkEy{X)XONHCU`L$(l^bodZf&+t@y5E5u9tF^U!bWee+S+2hNw4;9 z)T0h)OGk;Dta_Ypeq!V6=*^lc6D8QY`;P9GVpSx&WcS2^{_bCOj}etHT8E(m(-ss&~06-~v z)1FguM6uK4@$Q$trC2*$OxnF@VZV!OdbpU|w0MGFk@xGjP7gftG6ytwfBvNAT7wvV z&f{8|ZOEL<3`NR&C$e2KV10#)Y-MCpGpvl9P1U=B34fqwlO{IGJecApQc`gtyduhU z@q#y(JW!v?RdV##rzhS*dOqEBbkZp)J-<*FXzL=W?hWiL@RX7`UeZyEc_+D1Fdcs5 z?c$*3;^GeyjJGzgX$#r{?x5c`+*~>@_C!>x65cUInHP_YyYBgxt;3AD?I)1#Y1p}i z3rc-y>Z{)!WL2dH<+bvMI8KHxE}ByU0u0a5*mQbWn}`#mtJ`ukh8_m$oS&GoHDA1S z4~UX}*W@L}_@U(vSpmC$K(}==X-W$I3hy3T$Scq} ze>hkJD7rL|T(6cl=`tLc{qR4L_wHJWlf*GC*F|a8pGtc>@tZ|hJr<7+$doe7C@jq> z$@v(XddYBmBd`L|p293yH*DR$J1-IVA($xw;ai(IEJ3xB;HYRuyx@JUNcXkYcpmLR zT-dpeF3qP8=p)3Lql?2s*9o`5??78)Lwr&SqI-wXw4VOnh1l@nlyvy0>*>v07ni(; zri^Q*xFajwGiM-Bzd-O@YX#{k70%ks%Q1gZXCttzD6$co&$Z|N>^nTXi+Qze#W5$( zoszO%Q=t10=Zhxq#-HlFs=;=pjLV+JWg(LaII}i3)>X)In{@SBUOmAU`FDGUj*~D?SAstB%imZ8)X#EX!LHE&6?0P5KpP; zxz)IA@XYRf^U}c2MVStdh$=glox<2DgZ7z)y4$l3=v^gi*9pxkAbal6+Ojc5O=K&} zl3=KB`+!VI0X6KJIt5ZER>Q4i+87yOuud) z`l+`po$}XUkvpS$BJ7a;`l!d}Bkw3${>*O8H|o7yzLqa$MrmLx@m!(k0S@5r=dQx9 zn|xSu)A_;9z}=To9Oxk4Mc##ZH@Cd)N0P+G*w2U7nd^O6mm&%85>ym6=mzVt{9TB) zr0+&c_2{qFl*+ispSJ@-z8&j*G_n7-`dU1<(@Qlo{pPe)`yzv=NRaFGDbhB>=D7yu zbW&?&i%`g+G)K|a^iRls_lL?SeO82vdEhUanVH?Y zVRlZiL>LMWgHN9ABO+MwfU7wNzF)4rVK%qu#jJzAL%W845&j2*ZnO3Ovu>!a&YbSM zdxBBozsg0=P^N>6Y8Y}=^}~mvx*gO>gzB0n56=EOJKQ&ZDgK?&{&!X+7Np7^_;;%6 zWe#d@^T}!zIoEUjPjf6XH@5lj8~^>6kP`RLnST@G;r~5q2s-~}Af&tAamFJ46hY&njkb|Uvis^aLPLsOR2KG%_+%(b z&WeNpQf%E8+D2!p?6Pq(`-9;O0~x7m8SqF2miqr>rkwAQMVjn@_}EO}+v$`iHde(k zDzFHfB)|^mo-z08SyE%R@K_Omn;bbREw|KlqO(z-9G>57TV&U&1^#Sh<$e8f*;^!K zGwiyO55^P=#kuE|bBY2t04R4FfQ^kAF@Or=SUy^#{-1flq{vQ=L_WTvqo=}#Ik;VN zcEM)^dm&U+Bg58B*$pD!aWBUv3#R>i2QZX~hGivPm=UeaU6{A1q2u zDt3kyBeb^IIIS2G<=S$9iYyX0`GsCLxm?dRh&Hy{6y>&g8n`Z|wUjNm)Q%Wa#3Bb1 zHl>2{vroh%)4qi@zbLxXp4zr=5kyva`!p*YgMM-6Cnbm;gIVw0EH9*r;g~F;#vSFd zQWM8Om%;g6@j8xI=R@E-QqRfiqN$FBayVyoImSw*m2s=wM{Wy5MvOv&)%ef~k@tP{ zsn@8nI%QOZKTvY(9_r%gL0K*Z;nxJ7(;#Kq_hDJpJi z&1#u>au%PU%q}@u`t@5Ot&OLAk4-K)l(|Iz*>A)3+Myl8jp*Pa99UuZoPa484?N?~g59eC zn-_fj6GG3ngA7OFvv)Uv(I(|I50GNA`JTsu8B}U9ckw6ZpTA>X8{O}z=DbO_u%bGr z>Fqq#Q#PHH9zAGIJbmd+00AHwYs<*Y_qleIE`)`>!2cy_fhQpvNa&)W6XOFHr5VI~ z``&{45iV{|yDC@;vL1z2FngXCRo!$joc$?km#zfJuNfUh0#YRjCisq2@yz%`{Az!d zk)&IhlB?R2$>kSRl!jLxOr_jxmT$k+gKQNs7$N+1p5sAKtLeML4Pg<-Qf!G$X;qaC zSY)FKYQxeCDK)5EnR{|OZ5R7kX*(s;id4w{WV^wYnX+=pq`q?FXV0fKe6=UYCXkVY zWrH=<0XA6cL`zrb5T~-nePuXq)Ex@)F>Cw6#5uApNQW}cZj>oLgQ4nMg1a1#nwlC< zE_(0kGkU2cY^IYqvPw`^%1|j!G}o&wW0?S0GBDO743tcLf56h>^H35wl@gqPd1PuN z$sNu&AvSFbOLTDc~s0nUFHOs7>?;MbXMtREA3yz)vQp; zGBv+P;(M0#d`wKL8}TowAh6@6PK>QA(QVGn+R5cPzAaPW?X|DCTdi2=1!%3^2a{t~C zFQP^`-T1e1ZWhmVT~BK)Te%96yeIa?3ugma01e11FzqtVW(JN_%^gWbTIPh7_s(t` zt>Jf9J$3t2Po4uMAhR*6x*&3OYoT#-|JC(3BMDX-PCe@lQI`F1lb$x3zT-`{vZ3{S zsNxnP8HP45n2DKKiMAnRj&B~M6br8MBmZk)2p&B%GRTA&viy|^hiU(vgar0xrRr>|wm*d9b+VqR6n82h?eZJoLo#5#d;t32r z9+?f=?q4PE_F*FZjJp)u;PDg?s$knvCF;V)*1V1c?!Bbe_z^#{S>kISm_)TT6d{X9 zMaJsX9hY_G_~;%s&H$wP8fv(^sgXO{7ax7xn*)pxW}_>Qe;42u*P!q|E5Imur#IPj z?xEr(<8uVkMXQ!!D1FG` zB}tfF4sYUiM&jN!+X|vIkPYjZUov*WhB%r=#_m)JG|A3ntjeNdtop5OCO6o#JOZ`# zDI4}SBN`N@jl{~|bO@j38wgD7Ah#hpHm7H~p4g92qJ1mjL{Z*+f^iV4@og=g2I6|HQ*b*g19E#BpF1 zHPBP!a%x39Y#?!>2&hS$-eUq{H2y}wyQY8ym$>x?poi-YQEGS4OYgXKQ^*+oq}J*$ z14fi=S`AoK^XqiNrG0%ZY5)6SaE*UXcfXg( z>HfVYqYgLFd`=P)d)7P2fcumR=PrVX`h|H($9nsw z?)Z5Q+-&hCydQ;u#~ljf5&BVz-O0d8m+mA_!bz;)xy|u}{?RylPBd2rD=foqWqB6S z_p!|*PdLv|dDR;vi6V^rzLT4yeVt5zacchLB9oCo`~R57_AJJ62Gz?W6pJ3+z;v-8bpsXvFr4UX{5Ygs86YI1HS~ zXXIju>Q$ldRM}6;2T=9CR?*Mnrc^MxQqH>BM+5Se+KT4Y=$@P&MSveQAbJ17cKdS#dwU<#OJx^adrS+-2kQZA$CoWX^o+iLvOX!v>Efc=^+PC#*6n3 z?0Pd*_7A{;uBx)Rc&)t#&F)zJ$B7$7$TO0=c3cUp!`hQyKYLQ<1(E^UfI+~6YwVvN zb64hXtdP|lLu!NPn~8w6UMX$=2dIz{&X9C~f~Qr|)scm%o&Rt<$y zMG&vB9^*Qc4&sd~A&uUyv(sejDqHJnOb~C(eiG)>7`qw*ju|)E?wN!t6Bp`Y?H-k* zrMQFw*p{Qqc>2lecs!D_(r%Rewbh?HgfJD8chHvOz2Dv!)&gyS#(p+HWxj~YN*F*x z3c!Ah?AmN_tvDSZ3;XHz4`R8AO1G}=$_@$UWy!cx(qzB=1!MK^TynPEr1sPWqlmC=448&k&=P>BDVQizH=fr|-T z3BW|2lst7M4%E_i{h_kMTvvSG-r8saXEeW>Hioz zc?Oh!+!VORLLe0qb@&@DOUH~-`dBY9g~c_X^SuI~beY{B?F-*JDAi>M#y?J;8Ika) zbm9^e3W&)a?$%1nyyVfhhHMf(kw1^(usbG5aud82OL5Pu9sL1em=u6iDK=y!Ut{?l zSfko$Hg0LKfA44Vs>W+bY z5|!DLNXddj?+hao&~t#YP*KaaCJ(K3={Sq*%PYo(##mPI)ILmAPOb>?c&&d8C%c*j z|3m3JWJ8>ZXCN;sPhHK+`+?klEdfQw2=C)7x5h!)FMw zf}W`2!IJnHiA*C(KTSPBE|E&>Th^S<# zlarn=X{5x^3#=cPW2gC6rdlY1en4GCTRUy$uGPwjcrTE9#3;SpPu2E*H#Jmom3OcR zXnjKqS}VM(fHBqBz|Phq;EFYWS~7MPY5N zjF7Q+Xy)SUU}+<>LV)Y6MDx2StXWj%(wO&in`fb38)P?VXh5ju zht+PjhUFZgx4D!QyB#i)_SJYC83>q(f)Dh`f~20Xr9taT$yT#X+RwDJh}Yn0uk_ZL z(Vo96*aWCiKlWG)uvWW^)KuAW1lQAG;9YEusWm`u=%UYjN9Yf!saQ@HHJ;=+{an#7 zoXd~~$j!XAZ9cq_Nb?n=k4 zP|pOF!pyC~wo-*kb|t(Ix|9BLC0?a}JPRFq(+}Hr zP~(}L)G9q#nIe+COAfR{syA+=#IKe;az)F2oOr;BOiwnMOC42G)|HG_(m_sVL=I-I z9j({wyNWXu9IVtd)L8D%PkS1U#-rl5%AM3Ubd%6)E;aey?m*BHp%hVF_+-$bIR%Td z*H{YxN3l$$4hrBbu>dD}(1k)ZlHuFHTxq_@+?=5;{{CrC_x89fwU7u7w2+_jXDUpIDvXKhM&FR9a?sRiec^(U;q@70e} zYTl5eCpNV2#ma_-%9qyf_&yp0paXanu2D=bdZKo7%J`MElItyx%+}?TIK6s*y$*er zkk$4V_KW32Q2;u9A9jL3!3+KRy!$#q*%6foHN#KCY?$zW(>G z*QPK21SVv^^*r7G!;fr@e2q%zbZChsEs;(~J*$nHj@!$LR?Q~^BMIeGMGvmG>}{Qn zhlY*#22=0jXET;krahhpbseuAb(yTXko?ILcR&M%by_<*1P_U_rTQg?0xB1oNSxp* zZ=!Hb!#4WQnB{rq)-O;{JZdE0>ASbf>rj%HG)=YXdp{8g@q}(c-OE=5O5o5RTLU;_ zNq3d#C2JnI9)uh6E;T8OMw_XzSCUC8ezavn=~xHLg}HL}Oc_Qpky{m>0iHnppQ#Kv z^+%L*7LyLzn5Kcas7ODzzS4fZ##+7=oXhVAhTU$n9Fb&8AnUAgTnb%1My?$152ZJC z5I2vH`$d7=XAj(oJ>!*3T=VACQTFBpKyEZl$NedgX~P|iltHbiHuD=n@di$ zy^{p1qlyLT@N|c*CeLlwjr{TC6{2T}F@$n;P}QR2`D3;ND|oShb^k(;CH}O;*U^vF z@Tufrizrzs64pRAK#`_u(WXgB!`i(KM`By74%s3JsP5L4xu~FhCi2$?BgI8r-X!s* zC9Z}BWo(PbIF&p1Ry62ZZPC+PsgK&k*_%*r|L)7%;tqvZH1lPm5HXj4-~^kR!${Am zn2Fp>z5SkVKgeK45Kd!tYs+Qzz$!Z`e|pzT z@a_21!OxJ!#;OPXtb~BOLW7D$P2!CwSjXv1-eWC=BwprY78VqguiV=TRjAU9*lR8F zlnT&Ttrp6y$k6eRwuZMfCGk!Q$1No&|uDthh~vP^A7? zjthn3ahBF^9j9WVB%>{790XS83xkA)4AP>yAp-z_aUZN4S}Ww_K^Txa8pql(&O)7J zfq+D16aV;r%nA@q@Hkt90^Rk`F{Rj5VmWGSw>H((8+It zAmFg~b8RX6{FsAq%xDv#13oA0q&w6;G|uqbUl{JZuH=P3^&}3*>){5_?)b5C*l{kn zr%hXFU(R74>!pzcL$g(`{c8OvEiChcA6}9fzYRuZpmDgo2{CRJ)-BZ&OtRKS)1h}V z%bIlN@oGFSzp~*8oK(VXcN`!wAp^;0B9F$1n=8|}VXTsOgB6*mMmnJJtB|$Rt0zA% z@EJ;P8j5lb6owN^xX0ZMBp}lFVE`h&pa#7jvLU&8y_F@rw1+om zNYl$#YV7Hs>G&g|TV%aG``C-Sax34U(#EpD$;CytT7c;NHn5rx0sOspIBJu397SYC z*2s3Nb19klYkaBqad9#|g0u&dSmhI z$(0-CF%t*#C-K~Gz-i4SO5FzVE6eEc#}aTmJAv>4`n2b;C4|= zN59J&s~c>5FS@KKR&UG1-f>8G-@)>Ui#=P%9w0LjxSl4x#;=^>V}QT7$zCW8Jtx_H zCc9OpwdL`Fh*@3r4Ihb-fWfUUhrYNsGg{oHsSdAbj)y@OW zN-hEcTqnq>wBU|ZUw?2Nz(uz5k&60O-)fEg(8*@F<4mB?lZgR%#>jRC>oKRN3o1dE z|8O+f$pDl|*;4n&!-ms^t>s4;a<1H}zkyv+Y$l#%2A5B8z*(A&PIyAo^i2k#1_?=h z?&ySrz3kBpOH)Ah73(#^)dJ`Wi$tB({xoYXG!Z$}r6S?+;px}Nq z=JlhYg!EtVl0Zb?F600uDCuEiWH!^*+$f62NxoCV255;RB=gFr>+CPD_osSy-@*I0 z$R@Vsm<>dHPealz$=m7{7gCE@PX8#xjlZ^6y!_1UH`vUFZ-08^op?e`bTp%rktDFB5OVk%Av)fsCAZsx^-er&_dt0Oe$F zkvZM-qOBH0hOh9gyYs2E864VM*QS-1sG`KL+J9>H*oGT2?W+@=`c{32449bJFTBz_ z?iu0Dn2B56Q~czwAfCGv@93&Mu65%2ft^LwUT*T&;1BmctP%;a8~Da!J78;i#%Ka; z(U)uKjIP25@Elkw zo=IpgFgu-!dU^KE1!6I79JuouKO+lGG?_|QYdCr4ik8;HhE(f-VSq3NW9Z7-Xq;s7 z>KX|@pMq4u<}UlJsH%i^9Pl)~{iEnv&J=x3kC&R8;Rbwx#YntyDN;z_G`NK5uFy=> z*`tB0$#gnlH|uhwZnZ~JgD@$vcG#+n;wYK8Lgw+EPg8a)3$(q-PMXFEUT`UhxI#na z?s2k530N$};Ap&M056&E3#rMbA+w8XW%z+#T+V~s;STfsY3IiO1($(Ih{dc^vJq}~ zIp|f%n3xF0)PR}=(?O%j%6v+rdjb2BD&19$_ziRAKo(RQ^wdCwXt^c2r<>W^dQ9|e z+4qNRNO-!@jIY-%kGWLta!c+bYXu(P$dCoBdl4%%Zc&rj?>cj)z;2H`S7)0|jr94k z;xaL);b7;ZK55@;%9A@XwH6Mffhw-hpsf~4mZu8VzA#}3hWeBm)*BTLEPM#)5;tDE z*+p|TfqG@EBL; zjtI~gerC>x_s%xNF}HMiFJ;Qcp$<8=U^Y3G7PDi&L_5C(c(-jX@8ppKh>^e~6_|B? zoy=PEV)f*VuF73mG0AS@6Oi%joUEBflY)9)WeF!=RdZut?%MY=F4iiNz3kVw)gmhQ zXsmN^zrq`R>eGT4U@*(IjOC`xwKC4$R8Jg4=@=>7^Vu)ZFF$Tf=C{Vm{Gp@dX=Dk= z+-Rt&8Gt#M7!ku|l^9D4B+khW8qnFe=z2PK4>5zj0yIiwKF^TB$J2gJsvCB-6WYGw!xSg=3Mz7VVK@20;)mPl`7BE3%c)*&F+V3JOl3YHmpo(Y+oiO-_6?7zfCpC0JE}-SKO-yqs0` z{y=K0$qFXVbuzgqpijMU(!T^fi)p^y3*|rc30YwWQ&UCidoAp~PO}+0eiwC{qO5bR zc}dC0C@zQJt9PekERt7cJuWNjhSejv;NW!z(e9Er$3voM8ypO76UGxLo4P(TvYWpF zJ33lDU5>o4#=@{?m?i_D2{>LWNv{$`ophIq`U(M{T>mFg?x7&t0}8`AoplC^)|cxp zSn}+6{+}=x!#!C7w{lYfgQ}La=F>TC>uXkWHW*SN>Q4C9~giU9>vi&&o2Ldrh8kvzxfCF zh)CC*yk#SA!AjA}9krHuHmS+S|IFz5PuKp($N2yB^8dR+B>HNuRE8Xod>VUp#^(3m zZvI~ZN=>P=)U@xvX*T>3i)#x14V6Oiq~m{a2j@^clBl|I*8ElMW3y;##45$@khDM8 z)@#)lD2D}mu|M}xxTe$Mkyo^@24Cu;m@OLbR8}j!G%9Z;cVfh>sOHX_w`Zam#WQmwirI7ocGrC z*^L&Yq4@fg>qufdhwqI9g|n`9IT^IGxEknki*1nNQPGo$?-F;;yc&vmZ}x*Gu1R1P z(6=FII!tu?HO2hpTAlPV<0bwd1%);gv)1-iH04_nN?u-My;zg!P)2@I_Lac$aZ6}J zmqxgr=%JfYoX2?Ipwu&pT5EJsVt>9j=)k`GnJ`%Y1gY8i)tN> z0VteBC(n??F7mK%(xIHPoo6+w_Q!P|2g;wGckQPdlR2w!m_D|b*DdL_*E2FQ;=kBl zH62#ih;sONo1(_B^w5lq;aGq5CYq-JbFZ&t&)gUr%HIp}zua2tQ;NMoVfrxFAdupf zPO{~136UZuWqWk-@qBB9xtlIuhgeyONTw{PMiE*&Y}-sW$c1dG^Nb;r^rQ2!lwL}6ujdLPE_u}*X&V_m6Y^Y$>u`N2<+&D&>U5IV zs1R=x4(pXA);&M>+Hum|q&@uZc%*@>(!8W~0_IMh_s~wrr>v~uniR(4!{ZczXLUm7 zS_g%zAykv!>La4_U8C{C*bi}RzF-(0?!R9l~R2Jb$=yeyWNt@q7p+U!#+E~{T6%txSTiSA9 zN|_LzI&e8U!=KRih20b~h&-+9@{H<@%^moklCmG3KA`fXkRdZE{URASrTDD)8)(GEv@Y5E8yS)Q zg$fjw9>s=DH)K2pX2JVU(lTgUD4@LB4YvaIimx_vf&_pK*#UKU)Q5Yu}*E5Tm*Vx=%m zvNb0kH7w*w?pZb5ob0}^+lJW*9$o?}m?)O_hpbuvMg0I2*=k~Uao18E=RTTnF}?wQ z+54kp9x;<|dzOJzmzwvfoEN1}=I+P_DI_gd8gn(VE#*2>9Nn&8J*aYy@?-ac=l z`3Kl<-BSAvlrywTL&sv3xLC20{)C>-;deDgmK5yHwdS`a=Gj9U2UncN|J1U*pGo|M z3$4@NksPr;C_q`NF7+!=L>pb8&=m=Ztxp!FJ^IuA+nMC6((HGDZNDyROGN8Qwuw-< zT4^^yF>g+8{_BztYg5uq@#WY3^zbS2RNIDBssQxZOY>u_hREU?i{>e*xy+T%@ zojtGiilgwErs;xt-e41odmH%Ap~FpohTX|=&{SAvHHP7sxzMU+?fGX^&nw6(wO%tD z6d%!Bjz~LKo5&CM4f*?qSDXigDZ^`E1w!IWiW{xn+0N~3AOF?FO>P>G#5>p?#9bXV z33^H~Y2JPXR~hob`0QQpHEv~L_}+-NMa${hKe%++w4`{o=KQ~!B(gA0=*RSE?kl0^ zj(*(w{f7|u5BMI@AOCH$-LHhNgRHyO?Rhv#2gU;bAf{J+xV|CL1_{!fzqp9}vZBma=+kMNKyFa8mV ze}v+XEIfMpkEZy0QjiOZ{!yfVlj0wt`2Uf9{0=6vkqA3Dnal6N0pKG!;!&9FYBcEp z-hzw$TO3HH#F*tyOyErl(r;o1_$c~VR^t?Ptii3m3MC$sj+$sF|6F)P`4E5pG?chP z!h^Mm$s}&@>5?n~8TKbKr8o`VQ8jsw`UMUol2$rf2&5LA*}tCu{N-5#=?FvOBONZH zK$wod8;C)Tw*oa*v*BgSeVs4_o)Co&&a874HwpCS=Qf$~e~cCgOjJQ@tPFHI)Ol^0 ztCP4CJRZ|G<3&)$c(YCQ%$5uXlfYA^t(JF4DW6N}fasX2nRDKccixY8-g57K-@W%c_mu~D4XsEh(kpH-&2{tm1?VWi@;{~v%(!wC@OR5q>KE@8bNV(G)z3=o`F;gAtfzTq36lt6Qmr~h6D7VP*h@}JS+(kyH+DK>E3V;a2~vuJ@b0jTatu`M zBu;bcz3_W)e}fCA&U~@2vTmyB1+Iy)@Dv6W!XxI`c#a(R)-*RFuW{kDe5iO?tiQ0A znnf;-dcZhZSv^(`C$BGDXk2(LwVY)Cw1GeC#uOvMeF+w%zZ-31c`hH@*~RvI@}`rcYnqD98b3{8EY5?K5jjS8(RC`sPZo{ z%}iK6F^&<>IS%KNhljsUcogL|tdY@C=iVr z0$st3I{H^eo=gLH4KLys6!NP{FEaY$F7@2$Lh>|e^w~7rQ3Tl*AYBh@K=elJM~Nle z9}jwKal5}kP!gObMk=micM~i}yPr<|w6in2;urszIFAdILBiW7fa5j8S9Pz*%0WMR z8lk=GUGtBXi5HtWx%quMbkFRPbZ|v-e@>AMsQ=-MeQ!w9$3}R6J7qS&rUlX)0IC$~ zoBvt`)^GUHDafrxY;{8kHc4NQSaB4H3P#0mA!}ZCV(HWzTx-NRZ%_Hj{j1i~3)HRd z*^W%KWM;~&4@L9+9ETw?|(3z}wS&IA?-{J*;uT5|;6?aXSmovJh zxj3J-Sx)_>(Z~F`gS=qT$Uhw{IBKg*W3#Nso*veWh7zPcwhF$Q@4+(>(-0bp3R%;b(qz1a`Qat`eK7yinVER0xTZRJU{@o{DN*CzX zIL(QLrA^8jmiNVzHVxAXQ855)A4S( zzr#5xD>xaYXj0~WF#E8&S4w)ahYLfOWM0vS6_^vGNNYsF2YTV4*u_j)QVFS#R}mR) zx2zx9(1(-EtS#9B{PI^<6dIBgzxx&@ia8kvlu-m7{s6+K6Znm{(R|mBl08W+G^bIF1I2*{Fa!?o_PuKoDTqSj#GaR>;Z z(&(}n8tPH_N)x9WU!*exKOtMFm&`78eH`DqN5X-g9j+zw4`dqplb;Sy^?tB!xK0vz z&qPn<+cfleJoaHkv%+Ux-k!>@TwnB@a&1C}j_&`n!xLhd!zEkz7b2hom0{}9Hw|9Q z^Ig4JOZw8&|DdK%`KJ#PmSQ^tbqS8+*ShzLxt?pci}uaEtZ;s%0p{UT5F;XVzfm_N zR~%b88n=>q@-yvvmvC~V|0Q`nLZ}5Y(_xnmRlydrU0kOur48 zQpnuK!!{-(azK4P&iGuF!ly2xqw7;5dnal8Hus18zhCLgryzMkqH(0nToTiu+#AyF z1}Q#dLAus&o*j1$mukR5&CFqW>+C@YJ`){ddz3`Hdx3fPFjfHT*ix%a$oT8MFju_m zndFO#`m`x?;amnUK^oAW71a=*(Yo$iFN9S~tDwbw%R1S^5XCkicmG`(T>wL_m{23& z02#VkbN6XO-f_9@QR}>;G%TgArezH6PppcO?ZBPH6tE3sklGv5TZ7IPS3QMYl~lL% zGe)D3`RnCi7)q$E6`LO>%4#{p5?0sBr#;%Q`(9l_jy`r=%m^pV5Rum#!R3~{kN1^+ ztfW8`Z)aV5x12ru<`79;-QJ8^Vorpapr5c783p2Fpn9P1b|5N&CVK6($|~%^`HY2& zj822G>MW@YtVUxw_9dW5J*c{ct3BYW8Vo6BTO9~b_|o`w%lc;k%4}Hg2HGj0pYP-z z*|zkBrczPY^SSGaIm=GbNI>t>7Ls?oqfc-teTnF+oH2APF&nCeY%oXbM8q}%5V166 zkjmlF^|P@JTm5PU{~$@Y;3cfQKpX_OXGx_&Vx2ugPl5K;Yqrx>YP1=N0m`r?4wEgq zQAsMekipKS77i~@mu9B-tE3M{C2VK$q0TDyCrBbcZa=ksg`@NGhxp3G1A%bCK;JfF z*`Malt(c2YKPXCF82&La?iFa}FMP@)e%H?9?#Wl}Id!BgY*<%B_ygV?nPmmWc-S$( zr$OO679=|ld1ndofJf8Z1?`)~>y!JQKwYbEzjg0^w{R;Wt}&y+Roogb@b>6ZpC2i1 z>QJ}wI70YwED!L1;N%RbQPlA0X*7BxL?Xk-*lvPYlZ;yYNl`=|Dm3nY>HzIpw!3$| zvio8*&7V)YNW2MdxQi7S!rm3OfP1@TB^`T(AWu(XjSGOVh2)-CX%#juF17_JXtCD5 zn0+AQwLl)kN%unLd2JmWjpo(#{PqG!ayxL8Bw=??RQe0d!fgbgpQC~lX*1lzh&6wh z)kr`W)HyocK@Vg>*b9uZJ2E{_NwLM#R~zY}eEu8k=TtPa<-^=zR0TR(U`wAgBNK&> zvc5$_a;^a;jXTtg6NJI?YjUSWJaeQK=6se*4&6w|c zp|7EkUMM6-ItX{1Hz{LH3+y{;un#D$4i(+_2rz&16QVkni;U!;18b)0D<4-xQ^tVf ztMQ&o#Gru2h_G8Vh9ts$9EK$DdOCE9QOGw0BL@g{(U{E{~PV^!r6!B^~2QdECM}cuH^gpcnDEy;*zW8vffC z*uz-m;M2xei6E_A28&v5IFA*?)VTLmIg|d9MTe%+Bt5@n)-S_#^3pr0pD(2eMD1=~ zmJU(g_(QBVk*1w7KTAOmLm$ZJV9)2ogabISDuGoT-ssF3(j6N`G|-c7gQ+^8y)cxr zu{u6pnjNT?hq;a8@dUGUx6d>?z9Kr_eW!4dge!=$!01D%1*C(fn3jC&C&L7dShz@; z)7x4eMS@K7g(vY60>KLX8H$PNIM6(f`=*@I#tRf{eP~VLBn*_HWK*WRZBJo~)g-{q z+S2+jVrs0HhZAPO{kNxUBW6r89tBxMlH5P+P*(Xvnc2h%-}&5+;(g?PBvvY8@qv12 zp!fFmqR5M=y*?bUB2={#|Ay|bD1W#cG*2mk1_+Bot@%OhPtnkT&P)hf^K~zqgo?-a zW+l*k8q>MdEyZPWG@kHD9EI?aQaF=C9)0{$es83+`Wg(7du8+a(5%PP) zQZ^;2pW>7XJTTepJFLR+izwiotK^=nvflZlRipqz7SJ#)jzImphEgSTxC4sz;8f#l zw!N4K7kk?Rlv%B%D&{rJ1}RO~+MZ!48i5ya^G+KorgQ_O++wt=Na+M;LhVVdSiL_H z#%#+B#$0`-KRCOeh4q7J-F}^*sv zM9)KBXG#ta&o!+BL`gxMf~)J`byvmaLvHNxpye@)+fh>7GBG=+dB2wHUL-N=SiH5C z?ARs?@Vjd;4-XIa1#V`F5x62gsSV^gy|L5YxIBmR*pprhyxapyU!va>xemd>RM(z) z=;zSVu}FLQ32}5Zba&W0G>YsyCD}2`GN8*tDAX%3D}1{2QFNzVgva>jnXCM2KWX}2_v-Ravg?Mn1;dl~f_!?islB{;Fntz`8$D9j0G%sWs9)5{e;9QqBr0ep zsWI&(kxDaoAa34QI)h^Rng(;oJ#5N!ASQpPEmIyKRo*Rs`v>PZHcE&*c20CU-V()q zITj>*S@xM_b4-9bJZsGER~Hjn0pg?hI#)#`>-OA^-DUmRQh+bO+)?UF?_*X0R~Is;Zjmd!qDYhA-1f=)6AxDaQ9x$^9MkRcadw_#I6 zr4H}WL%&vX!jE?|_N7DrO12>Eb|kCH@hS=2@hYlV&{hUMx+NhJ)z1kFqh?`-bEMMtTT zN-Tg=9`2UJH(-L-$};?aO5UG&#}!69MI{_{A+dbA{nX=0^1o2L2!;WWQ;Lt%J!o2~ z?KIt8H^2?oF3f9+M}PYpN*Z(i)&~7K{DDaJirgOLN2jfbqVV2rR8%6uSBbnZ-1a4_ zI^1UUYfyju?AiWIM@p~OX&jJ(uPe>zNcSn`Ur`8aTqL>b%I;kqI);ME9_Up+?)~9% zv#cc4l^8E7D~%$jLxn^E^6Eiw1?l6lu-_l%mgaiLB;#o=uXJYm!LdPC;?mpVlh$zcbAeWtHco?ddr3+9Ytr&)v@}bsC~i(TlJO=k|a&va3i-)`{o-Rn7F5`k}Yoe;yeL6tdk3C z>}*he?G-Ab+Q7XZlg6Bt0A=SVK}}}G{_cj#aR5**)HIax1jUS>i4osn*8CL*PdW|z z_zq*=@<|YLHLTZM-Z5@c*DW9FRZ5(bpVd|PGPwUGrxS~BA=I^wcfU#Y!a?uIIG+@J08<)yM-nIxsSqv`Nc;{RjOT%zS}4zr4_xn=mC6ofv# zPXd4_4-xKh+p6h7sg2v)RZ!UZdGCaDYs9$rcbePL`ur3OP+Fcjjm5X`-KS0rwB_(R z8%(!1m_5+z{<`503yQdq02^cpW#AJm?i=rRu^=}rPB;c+f&oYJ$D^P;?- z=)A(r;vRwOR&nT?$E3A2vLQI5-&+x7w0Kk$X%vOr6o$whIJo+R_RRZm(%6Iz^YIt1 z9^4;dwhtyD3>*5jT_nH_3m1<0>Pqe5UBj*5g!a*bX6Mfm^_CK zFr^HMa3aumi|X1HR`^(3-cTk+$lrZPVXyEUS=wSYE%~Y!KI@= z|I5+q2Y=iC0JRZms#;|9b1Q<0T628uD3}kGoLY|UWA`QM*S%2n`$zql$;&6`L({?# zgPG{cdDmm&-aSed!aXE3)z(btFB)G3kkVY<9{mirIf+UYy-1Z6CL)T6;4LngO+~pa zuDaj;9D=yAjk>8@S(ZYEyT%{@dJY>7;Y16mZeAG({S_G+NrA^H%h`Ep^A9X*4K>eF zUT2n7vQ-0pP;iu~XhV<29`0O?aW7r2&EPIGP#rs)+%@w5AAXv)K`{RG zy?%9FZ2~JPY|~PN`5`5SIpgnsHG)`Mzw=j`cC)7i?yR94Bnz&UEy5u7Fu`#Zc3E)E zE-*IZpwoV2TddS!1)fQif1}D^iiyWNK)SdQ^jV0-AVr3gZvZr>@;v7!b@*zK_ILQd zS}u^+_WnZFOoj+*=+8Ow^29f_z@yna&Ahqo^srJt=0rT_ZX8A1xKbCXO%RhH75?>O zaHk%^&MTaIfHIi$L8o=;(M;k2juY3_2VE)@cB9zKV7qgk{yBdM!im3C*H3%I>z+fl zPgH)1#YNjabWykzYX}0jr1m+O+i7NJo}N&42Pb8Nd2}a1IGac{VV&b>u)2`j-52eM zO)hfYCoH<*Bbpma$;21y_qx>9DbpVj)zoEL)I8kIQK_X5`@08oNuD2hYqfQX+PXhm zv0G-%D|^7T&M4UMN2J48weZP-)2$#EmpMWX+20!NgBy*o^m^YLSgY!fp9xA z*&$WdIKEQP4CqpExEBz9o2;5N@ikd%yEGxE<^QNFzy9v(to`AfRQqiQoYyJe#EL%6 z%G5zR^mvboqf7drIoiqnBW?M4gryRC@nFs;ZSMM2vMkm#5#L~Q$$8Bs5v~M&}^Nx-w#a}bBHGKLvF-R0{5N52KtAbUy3bhAJpD{Kaz42@~5Fc IeD)vz3tjT>3;+NC literal 0 HcmV?d00001 diff --git a/docs/guides/druid/reconfigure-tls/images/druid-without-tls.png b/docs/guides/druid/reconfigure-tls/images/druid-without-tls.png new file mode 100644 index 0000000000000000000000000000000000000000..07aacd32a0fae485d1d55a8151eaaedab9c368e0 GIT binary patch literal 114409 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∋iINQ2Um)1sc|nrv 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

D3m?9b7o~O5+4UuIpuXy)k%!I#% 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 literal 0 HcmV?d00001 diff --git a/docs/guides/druid/reconfigure-tls/images/reconfigure-tls.png b/docs/guides/druid/reconfigure-tls/images/reconfigure-tls.png new file mode 100644 index 0000000000000000000000000000000000000000..316d1a0aa5205216be4643b758eaa68cf96ec07c GIT binary patch literal 37055 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 U~!XWbt|Jej-R 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 literal 0 HcmV?d00001 diff --git a/docs/guides/druid/reconfigure-tls/overview.md b/docs/guides/druid/reconfigure-tls/overview.md new file mode 100644 index 0000000000..5b55da583f --- /dev/null +++ b/docs/guides/druid/reconfigure-tls/overview.md @@ -0,0 +1,54 @@ +--- +title: Reconfiguring TLS/SSL +menu: + docs_{{ .version }}: + identifier: guides-druid-reconfigure-tls-overview + name: Overview + parent: guides-druid-reconfigure-tls + weight: 10 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- + +> New to KubeDB? Please start [here](/docs/README.md). + +# Reconfiguring TLS of Druid + +This guide will give an overview on how KubeDB Ops-manager operator reconfigures TLS configuration i.e. add TLS, remove TLS, update issuer/cluster issuer or Certificates and rotate the certificates of `Druid`. + +## Before You Begin + +- You should be familiar with the following `KubeDB` concepts: + - [Druid](/docs/guides/druid/concepts/druid.md) + - [DruidOpsRequest](/docs/guides/druid/concepts/druidopsrequest.md) + +## How Reconfiguring Druid TLS Configuration Process Works + +The following diagram shows how KubeDB Ops-manager operator reconfigures TLS of a `Druid`. Open the image in a new tab to see the enlarged version. + +

+  Reconfiguring TLS process of Druid +
Fig: Reconfiguring TLS process of Druid
+
+ +The Reconfiguring Druid TLS process consists of the following steps: + +1. At first, a user creates a `Druid` Custom Resource Object (CRO). + +2. `KubeDB` Provisioner operator watches the `Druid` CRO. + +3. When the operator finds a `Druid` CR, it creates required number of `PetSets` and related necessary stuff like secrets, services, etc. + +4. Then, in order to reconfigure the TLS configuration of the `Druid` database the user creates a `DruidOpsRequest` CR with desired information. + +5. `KubeDB` Ops-manager operator watches the `DruidOpsRequest` CR. + +6. When it finds a `DruidOpsRequest` CR, it pauses the `Druid` object which is referred from the `DruidOpsRequest`. So, the `KubeDB` Provisioner operator doesn't perform any operations on the `Druid` object during the reconfiguring TLS process. + +7. Then the `KubeDB` Ops-manager operator will add, remove, update or rotate TLS configuration based on the Ops Request yaml. + +8. Then the `KubeDB` Ops-manager operator will restart all the Pods of the database so that they restart with the new TLS configuration defined in the `DruidOpsRequest` CR. + +9. After the successful reconfiguring of the `Druid` TLS, the `KubeDB` Ops-manager operator resumes the `Druid` object so that the `KubeDB` Provisioner operator resumes its usual operations. + +In the next docs, we are going to show a step by step guide on reconfiguring TLS configuration of a Druid database using `DruidOpsRequest` CRD. \ No newline at end of file diff --git a/docs/guides/druid/reconfigure-tls/yamls/deep-storage-config.yaml b/docs/guides/druid/reconfigure-tls/yamls/deep-storage-config.yaml new file mode 100644 index 0000000000..3612595828 --- /dev/null +++ b/docs/guides/druid/reconfigure-tls/yamls/deep-storage-config.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Secret +metadata: + name: deep-storage-config + namespace: demo +stringData: + druid.storage.type: "s3" + druid.storage.bucket: "druid" + druid.storage.baseKey: "druid/segments" + druid.s3.accessKey: "minio" + druid.s3.secretKey: "minio123" + druid.s3.protocol: "http" + druid.s3.enablePathStyleAccess: "true" + druid.s3.endpoint.signingRegion: "us-east-1" + druid.s3.endpoint.url: "http://myminio-hl.demo.svc.cluster.local:9000/" + diff --git a/docs/guides/druid/reconfigure-tls/yamls/drops-add-tls.yaml b/docs/guides/druid/reconfigure-tls/yamls/drops-add-tls.yaml new file mode 100644 index 0000000000..dd3654967b --- /dev/null +++ b/docs/guides/druid/reconfigure-tls/yamls/drops-add-tls.yaml @@ -0,0 +1,23 @@ +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: drops-add-tls + namespace: demo +spec: + type: ReconfigureTLS + databaseRef: + name: druid-cluster + tls: + issuerRef: + name: druid-ca-issuer + kind: Issuer + apiGroup: "cert-manager.io" + certificates: + - alias: client + subject: + organizations: + - druid + organizationalUnits: + - client + timeout: 5m + apply: IfReady diff --git a/docs/guides/druid/reconfigure-tls/yamls/drops-remove.yaml b/docs/guides/druid/reconfigure-tls/yamls/drops-remove.yaml new file mode 100644 index 0000000000..af42b8d00d --- /dev/null +++ b/docs/guides/druid/reconfigure-tls/yamls/drops-remove.yaml @@ -0,0 +1,11 @@ +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: drops-remove + namespace: demo +spec: + type: ReconfigureTLS + databaseRef: + name: druid-cluster + tls: + remove: true diff --git a/docs/guides/druid/reconfigure-tls/yamls/drops-rotate.yaml b/docs/guides/druid/reconfigure-tls/yamls/drops-rotate.yaml new file mode 100644 index 0000000000..f0be918f6f --- /dev/null +++ b/docs/guides/druid/reconfigure-tls/yamls/drops-rotate.yaml @@ -0,0 +1,11 @@ +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: druid-recon-tls-rotate + namespace: demo +spec: + type: ReconfigureTLS + databaseRef: + name: druid-cluster + tls: + rotateCertificates: true diff --git a/docs/guides/druid/reconfigure-tls/yamls/druid-ca-issuer.yaml b/docs/guides/druid/reconfigure-tls/yamls/druid-ca-issuer.yaml new file mode 100644 index 0000000000..d6298c972c --- /dev/null +++ b/docs/guides/druid/reconfigure-tls/yamls/druid-ca-issuer.yaml @@ -0,0 +1,8 @@ +apiVersion: cert-manager.io/v1 +kind: Issuer +metadata: + name: druid-ca-issuer + namespace: demo +spec: + ca: + secretName: druid-ca diff --git a/docs/guides/druid/reconfigure-tls/yamls/druid-cluster.yaml b/docs/guides/druid/reconfigure-tls/yamls/druid-cluster.yaml new file mode 100644 index 0000000000..6351c2ddda --- /dev/null +++ b/docs/guides/druid/reconfigure-tls/yamls/druid-cluster.yaml @@ -0,0 +1,16 @@ +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-cluster + namespace: demo +spec: + version: 28.0.1 + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + routers: + replicas: 1 + deletionPolicy: Delete + diff --git a/docs/guides/druid/reconfigure-tls/yamls/druid-new-issuer.yaml b/docs/guides/druid/reconfigure-tls/yamls/druid-new-issuer.yaml new file mode 100644 index 0000000000..ede5d5177c --- /dev/null +++ b/docs/guides/druid/reconfigure-tls/yamls/druid-new-issuer.yaml @@ -0,0 +1,8 @@ +apiVersion: cert-manager.io/v1 +kind: Issuer +metadata: + name: dr-new-issuer + namespace: demo +spec: + ca: + secretName: druid-new-ca \ No newline at end of file diff --git a/docs/guides/druid/reconfigure-tls/yamls/druid-update-tls-issuer.yaml b/docs/guides/druid/reconfigure-tls/yamls/druid-update-tls-issuer.yaml new file mode 100644 index 0000000000..e876f4c3b8 --- /dev/null +++ b/docs/guides/druid/reconfigure-tls/yamls/druid-update-tls-issuer.yaml @@ -0,0 +1,14 @@ +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: drops-update-issuer + namespace: demo +spec: + type: ReconfigureTLS + databaseRef: + name: druid-cluster + tls: + issuerRef: + name: dr-new-issuer + kind: Issuer + apiGroup: "cert-manager.io" diff --git a/docs/guides/druid/reconfigure/_index.md b/docs/guides/druid/reconfigure/_index.md new file mode 100644 index 0000000000..4c3cfdfe58 --- /dev/null +++ b/docs/guides/druid/reconfigure/_index.md @@ -0,0 +1,10 @@ +--- +title: Reconfigure +menu: + docs_{{ .version }}: + identifier: guides-druid-reconfigure + name: Reconfigure + parent: guides-druid + weight: 110 +menu_name: docs_{{ .version }} +--- \ No newline at end of file diff --git a/docs/guides/druid/reconfigure/guide.md b/docs/guides/druid/reconfigure/guide.md new file mode 100644 index 0000000000..cf85960a9c --- /dev/null +++ b/docs/guides/druid/reconfigure/guide.md @@ -0,0 +1,704 @@ +--- +title: Reconfigure Druid Topology +menu: + docs_{{ .version }}: + identifier: guides-druid-reconfigure-guide + name: Reconfigure Druid + parent: guides-druid-reconfigure + weight: 30 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- + +> New to KubeDB? Please start [here](/docs/README.md). + +# Reconfigure Druid Cluster + +This guide will show you how to use `KubeDB` Ops-manager operator to reconfigure a Druid Topology cluster. + +## Before You Begin + +- At first, you need to have a Kubernetes cluster, and the `kubectl` command-line tool must be configured to communicate with your cluster. + +- Install `KubeDB` Provisioner and Ops-manager operator in your cluster following the steps [here](/docs/setup/README.md). + +- You should be familiar with the following `KubeDB` concepts: + - [Druid](/docs/guides/druid/concepts/druid.md) + - [Topology](/docs/guides/druid/clustering/overview/index.md) + - [DruidOpsRequest](/docs/guides/druid/concepts/druidopsrequest.md) + - [Reconfigure Overview](/docs/guides/druid/reconfigure/overview.md) + +To keep everything isolated, we are going to use a separate namespace called `demo` throughout this tutorial. + +```bash +$ kubectl create ns demo +namespace/demo created +``` + +> **Note:** YAML files used in this tutorial are stored in [/docs/guides/druid/reconfigure/yamls](/docs/guides/druid/reconfigure/yamls) directory of [kubedb/docs](https://github.com/kubedb/docs) repository. + +Now, we are going to deploy a `Druid` cluster using a supported version by `KubeDB` operator. Then we are going to apply `DruidOpsRequest` to reconfigure its configuration. + +### Prepare Druid Cluster + +Now, we are going to deploy a `Druid` topology cluster with version `28.0.1`. + +#### Create External Dependency (Deep Storage) + +Before proceeding further, we need to prepare deep storage, which is one of the external dependency of Druid and used for storing the segments. It is a storage mechanism that Apache Druid does not provide. **Amazon S3**, **Google Cloud Storage**, or **Azure Blob Storage**, **S3-compatible storage** (like **Minio**), or **HDFS** are generally convenient options for deep storage. + +In this tutorial, we will run a `minio-server` as deep storage in our local `kind` cluster using `minio-operator` and create a bucket named `druid` in it, which the deployed druid database will use. + +```bash + +$ helm repo add minio https://operator.min.io/ +$ helm repo update minio +$ helm upgrade --install --namespace "minio-operator" --create-namespace "minio-operator" minio/operator --set operator.replicaCount=1 + +$ helm upgrade --install --namespace "demo" --create-namespace druid-minio minio/tenant \ +--set tenant.pools[0].servers=1 \ +--set tenant.pools[0].volumesPerServer=1 \ +--set tenant.pools[0].size=1Gi \ +--set tenant.certificate.requestAutoCert=false \ +--set tenant.buckets[0].name="druid" \ +--set tenant.pools[0].name="default" + +``` + +Now we need to create a `Secret` named `deep-storage-config`. It contains the necessary connection information using which the druid database will connect to the deep storage. + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: deep-storage-config + namespace: demo +stringData: + druid.storage.type: "s3" + druid.storage.bucket: "druid" + druid.storage.baseKey: "druid/segments" + druid.s3.accessKey: "minio" + druid.s3.secretKey: "minio123" + druid.s3.protocol: "http" + druid.s3.enablePathStyleAccess: "true" + druid.s3.endpoint.signingRegion: "us-east-1" + druid.s3.endpoint.url: "http://myminio-hl.demo.svc.cluster.local:9000/" +``` + +Let’s create the `deep-storage-config` Secret shown above: + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/restart/yamls/deep-storage-config.yaml +secret/deep-storage-config created +``` + +Now, lets go ahead and create a druid database. + +```yaml +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-cluster + namespace: demo +spec: + version: 28.0.1 + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + routers: + replicas: 1 + deletionPolicy: Delete +``` + +Let's create the `Druid` CR we have shown above, + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/update-version/yamls/druid-cluster.yaml +druid.kubedb.com/druid-cluster created +``` + +### Reconfigure using config secret + +Say we want to change the default maximum number of tasks the MiddleManager can accept. Let's create the `middleManagers.properties` file with our desire configurations. + +**middleManagers.properties:** + +```properties +druid.worker.capacity=5 +``` + +**historicals.properties:** + +```properties +druid.processing.numThreads=3 +``` + +Then, we will create a new secret with this configuration file. + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: config-secret + namespace: demo +stringData: + middleManagers.properties: |- + druid.worker.capacity=5 + historicals.properties: |- + druid.processing.numThreads=3 +``` + +```bash +$ kubectl apply -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/update-version/yamls/config-secret.yaml +secret/new-config created +``` + +### Check Current Configuration + +Before creating the druidOpsRequest, first +Lets exec into one of the druid middleManagers pod that we have created and check the default configuration: + +Exec into the Druid middleManagers: + +```bash +$ kubectl exec -it -n demo druid-cluster-middleManagers-0 -- bash +Defaulted container "druid" out of: druid, init-druid (init) +bash-5.1$ +``` + +Now, execute the following commands to see the configurations: +```bash +bash-5.1$ cat conf/druid/cluster/data/middleManager/runtime.properties | grep druid.worker.capacity +druid.worker.capacity=2 +``` +Here, we can see that our given configuration is applied to the Druid cluster for all brokers. + +Now, lets exec into one of the druid historicals pod that we have created and check the configurations are applied or not: + +Exec into the Druid historicals: + +```bash +$ kubectl exec -it -n demo druid-cluster-historicals-0 -- bash +Defaulted container "druid" out of: druid, init-druid (init) +bash-5.1$ +``` + +Now, execute the following commands to see the metadata storage directory: +```bash +bash-5.1$ cat conf/druid/cluster/data/historical/runtime.properties | grep druid.processing.numThreads +druid.processing.numThreads=2 +``` + +Here, we can see that our given configuration is applied to the historicals. + +### Check Configuration from Druid UI + +You can also see the configuration changes from the druid ui. For that, follow the following steps: + +First port-forward the port `8888` to local machine: + +```bash +$ kubectl port-forward -n demo svc/druid-cluster-routers 8888 +Forwarding from 127.0.0.1:8888 -> 8888 +Forwarding from [::1]:8888 -> 8888 +``` + + +Now hit the `http://localhost:8888` from any browser, and you will be prompted to provide the credential of the druid database. By following the steps discussed below, you can get the credential generated by the KubeDB operator for your Druid database. + +**Connection information:** + +- Username: + + ```bash + $ kubectl get secret -n demo druid-cluster-auth -o jsonpath='{.data.username}' | base64 -d + admin + ``` + +- Password: + + ```bash + $ kubectl get secret -n demo druid-cluster-auth -o jsonpath='{.data.password}' | base64 -d + LzJtVRX5E8MorFaf + ``` + +After providing the credentials correctly, you should be able to access the web console like shown below. + +

+  lifecycle +

+ +You can see that there are 2 task slots reflecting with the configuration `druid.worker.capacity=2`. + + +#### Create DruidOpsRequest + +Now, we will use this secret to replace the previous secret using a `DruidOpsRequest` CR. The `DruidOpsRequest` yaml is given below, + +```yaml +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: reconfigure-drops + namespace: demo +spec: + type: Reconfigure + databaseRef: + name: druid-cluster + configuration: + configSecret: + name: new-config +``` + +Here, + +- `spec.databaseRef.name` specifies that we are reconfiguring `druid-prod` database. +- `spec.type` specifies that we are performing `Reconfigure` on our database. +- `spec.configSecret.name` specifies the name of the new secret. + +Let's create the `DruidOpsRequest` CR we have shown above, + +```bash +$ kubectl apply -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/reconfigure/yamls/reconfigure-druid-ops.yaml +druidopsrequest.ops.kubedb.com/reconfigure-drops created +``` + +#### Check new configuration + +If everything goes well, `KubeDB` Ops-manager operator will update the `configSecret` of `Druid` object. + +Let's wait for `DruidOpsRequest` to be `Successful`. Run the following command to watch `DruidOpsRequest` CR, + +```bash +$ kubectl get druidopsrequests -n demo +NAME TYPE STATUS AGE +reconfigure-drops Reconfigure Successful 4m55s +``` + +We can see from the above output that the `DruidOpsRequest` has succeeded. If we describe the `DruidOpsRequest` we will get an overview of the steps that were followed to reconfigure the database. + +```bash +$ kubectl describe druidopsrequest -n demo reconfigure-drops +Name: reconfigure-drops +Namespace: demo +Labels: +Annotations: +API Version: ops.kubedb.com/v1alpha1 +Kind: DruidOpsRequest +Metadata: + Creation Timestamp: 2024-08-02T05:08:37Z + Generation: 1 + Resource Version: 332491 + UID: b6e8cb1b-d29f-445e-bb01-60d29012c7eb +Spec: + Apply: IfReady + Configuration: + Config Secret: + Name: new-kf-topology-custom-config + Database Ref: + Name: druid-prod + Timeout: 5m + Type: Reconfigure +Status: + Conditions: + Last Transition Time: 2024-08-02T05:08:37Z + Message: Druid ops-request has started to reconfigure druid nodes + Observed Generation: 1 + Reason: Reconfigure + Status: True + Type: Reconfigure + Last Transition Time: 2024-08-02T05:08:45Z + Message: check reconcile; ConditionStatus:False + Observed Generation: 1 + Status: False + Type: CheckReconcile + Last Transition Time: 2024-08-02T05:09:42Z + Message: successfully reconciled the Druid with new configure + Observed Generation: 1 + Reason: UpdatePetSets + Status: True + Type: UpdatePetSets + Last Transition Time: 2024-08-02T05:09:47Z + Message: get pod; ConditionStatus:True; PodName:druid-prod-historicals-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-prod-historicals-0 + Last Transition Time: 2024-08-02T05:09:47Z + Message: evict pod; ConditionStatus:True; PodName:druid-prod-historicals-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-prod-historicals-0 + Last Transition Time: 2024-08-02T05:10:02Z + Message: check pod running; ConditionStatus:True; PodName:druid-prod-historicals-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-prod-historicals-0 + Last Transition Time: 2024-08-02T05:10:07Z + Message: get pod; ConditionStatus:True; PodName:druid-prod-historicals-1 + Observed Generation: 1 + Status: True + Type: GetPod--druid-prod-historicals-1 + Last Transition Time: 2024-08-02T05:10:07Z + Message: evict pod; ConditionStatus:True; PodName:druid-prod-historicals-1 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-prod-historicals-1 + Last Transition Time: 2024-08-02T05:10:22Z + Message: check pod running; ConditionStatus:True; PodName:druid-prod-historicals-1 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-prod-historicals-1 + Last Transition Time: 2024-08-02T05:10:27Z + Message: get pod; ConditionStatus:True; PodName:druid-prod-middleManagers-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-prod-middleManagers-0 + Last Transition Time: 2024-08-02T05:10:27Z + Message: evict pod; ConditionStatus:True; PodName:druid-prod-middleManagers-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-prod-middleManagers-0 + Last Transition Time: 2024-08-02T05:11:12Z + Message: check pod running; ConditionStatus:True; PodName:druid-prod-middleManagers-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-prod-middleManagers-0 + Last Transition Time: 2024-08-02T05:11:17Z + Message: get pod; ConditionStatus:True; PodName:druid-prod-middleManagers-1 + Observed Generation: 1 + Status: True + Type: GetPod--druid-prod-middleManagers-1 + Last Transition Time: 2024-08-02T05:11:17Z + Message: evict pod; ConditionStatus:True; PodName:druid-prod-middleManagers-1 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-prod-middleManagers-1 + Last Transition Time: 2024-08-02T05:11:32Z + Message: check pod running; ConditionStatus:True; PodName:druid-prod-middleManagers-1 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-prod-middleManagers-1 + Last Transition Time: 2024-08-02T05:11:37Z + Message: Successfully restarted all nodes + Observed Generation: 1 + Reason: RestartNodes + Status: True + Type: RestartNodes + Last Transition Time: 2024-08-02T05:11:39Z + Message: Successfully completed reconfigure druid + Observed Generation: 1 + Reason: Successful + Status: True + Type: Successful + Observed Generation: 1 + Phase: Successful +Events: + Type Reason Age From Message + ---- ------ ---- ---- ------- + Normal Starting 3m7s KubeDB Ops-manager Operator Start processing for DruidOpsRequest: demo/reconfigure-drops + Normal Starting 3m7s KubeDB Ops-manager Operator Pausing Druid databse: demo/druid-prod + Normal Successful 3m7s KubeDB Ops-manager Operator Successfully paused Druid database: demo/druid-prod for DruidOpsRequest: reconfigure-drops + Warning check reconcile; ConditionStatus:False 2m59s KubeDB Ops-manager Operator check reconcile; ConditionStatus:False + Normal UpdatePetSets 2m2s KubeDB Ops-manager Operator successfully reconciled the Druid with new configure + Warning get pod; ConditionStatus:True; PodName:druid-prod-historicals-0 117s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-prod-historicals-0 + Warning evict pod; ConditionStatus:True; PodName:druid-prod-historicals-0 117s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-prod-historicals-0 + Warning check pod running; ConditionStatus:False; PodName:druid-prod-historicals-0 112s KubeDB Ops-manager Operator check pod running; ConditionStatus:False; PodName:druid-prod-historicals-0 + Warning check pod running; ConditionStatus:True; PodName:druid-prod-historicals-0 102s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-prod-historicals-0 + Warning get pod; ConditionStatus:True; PodName:druid-prod-historicals-1 97s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-prod-historicals-1 + Warning evict pod; ConditionStatus:True; PodName:druid-prod-historicals-1 97s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-prod-historicals-1 + Warning check pod running; ConditionStatus:False; PodName:druid-prod-historicals-1 92s KubeDB Ops-manager Operator check pod running; ConditionStatus:False; PodName:druid-prod-historicals-1 + Warning check pod running; ConditionStatus:True; PodName:druid-prod-historicals-1 82s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-prod-historicals-1 + Warning get pod; ConditionStatus:True; PodName:druid-prod-middleManagers-0 77s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-prod-middleManagers-0 + Warning evict pod; ConditionStatus:True; PodName:druid-prod-middleManagers-0 77s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-prod-middleManagers-0 + Warning check pod running; ConditionStatus:False; PodName:druid-prod-middleManagers-0 72s KubeDB Ops-manager Operator check pod running; ConditionStatus:False; PodName:druid-prod-middleManagers-0 + Warning check pod running; ConditionStatus:True; PodName:druid-prod-middleManagers-0 32s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-prod-middleManagers-0 + Warning get pod; ConditionStatus:True; PodName:druid-prod-middleManagers-1 27s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-prod-middleManagers-1 + Warning evict pod; ConditionStatus:True; PodName:druid-prod-middleManagers-1 27s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-prod-middleManagers-1 + Warning check pod running; ConditionStatus:False; PodName:druid-prod-middleManagers-1 22s KubeDB Ops-manager Operator check pod running; ConditionStatus:False; PodName:druid-prod-middleManagers-1 + Warning check pod running; ConditionStatus:True; PodName:druid-prod-middleManagers-1 12s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-prod-middleManagers-1 + Normal RestartNodes 7s KubeDB Ops-manager Operator Successfully restarted all nodes + Normal Starting 5s KubeDB Ops-manager Operator Resuming Druid database: demo/druid-prod + Normal Successful 5s KubeDB Ops-manager Operator Successfully resumed Druid database: demo/druid-prod for DruidOpsRequest: reconfigure-drops +``` + +Now let's exec one of the instance and run a druid-configs.sh command to check the new configuration we have provided. + +```bash +$ kubectl exec -it -n demo druid-prod-middleManagers-0 -- druid-configs.sh --bootstrap-server localhost:9092 --command-config /opt/druid/config/clientauth.properties --describe --entity-type middleManagerss --all | grep 'log.retention.hours' + log.retention.hours=125 sensitive=false synonyms={STATIC_BROKER_CONFIG:log.retention.hours=125, DEFAULT_CONFIG:log.retention.hours=168} + log.retention.hours=125 sensitive=false synonyms={STATIC_BROKER_CONFIG:log.retention.hours=125, DEFAULT_CONFIG:log.retention.hours=168} +``` + +As we can see from the configuration of ready druid, the value of `log.retention.hours` has been changed from `100` to `125`. So the reconfiguration of the cluster is successful. + + +### Reconfigure using apply config + +Now we will reconfigure this cluster again to set `log.retention.hours` to `150`. This time we won't use a new secret. We will use the `applyConfig` field of the `DruidOpsRequest`. This will merge the new config in the existing secret. + +#### Create DruidOpsRequest + +Now, we will use the new configuration in the `applyConfig` field in the `DruidOpsRequest` CR. The `DruidOpsRequest` yaml is given below, + +```yaml +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: kfops-reconfigure-apply-topology + namespace: demo +spec: + type: Reconfigure + databaseRef: + name: druid-prod + configuration: + applyConfig: + middleManagers.properties: |- + log.retention.hours=150 + historicals.properties: |- + historicals.quorum.election.timeout.ms=4000 + historicals.quorum.fetch.timeout.ms=5000 + timeout: 5m + apply: IfReady +``` + +Here, + +- `spec.databaseRef.name` specifies that we are reconfiguring `druid-prod` cluster. +- `spec.type` specifies that we are performing `Reconfigure` on druid. +- `spec.configuration.applyConfig` specifies the new configuration that will be merged in the existing secret. + +Let's create the `DruidOpsRequest` CR we have shown above, + +```bash +$ kubectl apply -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/examples/druid/reconfigure/druid-reconfigure-apply-topology.yaml +druidopsrequest.ops.kubedb.com/kfops-reconfigure-apply-topology created +``` + +#### Verify new configuration + +If everything goes well, `KubeDB` Ops-manager operator will merge this new config with the existing configuration. + +Let's wait for `DruidOpsRequest` to be `Successful`. Run the following command to watch `DruidOpsRequest` CR, + +```bash +$ kubectl get druidopsrequests -n demo kfops-reconfigure-apply-topology +NAME TYPE STATUS AGE +kfops-reconfigure-apply-topology Reconfigure Successful 55s +``` + +We can see from the above output that the `DruidOpsRequest` has succeeded. If we describe the `DruidOpsRequest` we will get an overview of the steps that were followed to reconfigure the cluster. + +```bash +$ kubectl describe druidopsrequest -n demo kfops-reconfigure-apply-topology +Name: kfops-reconfigure-apply-topology +Namespace: demo +Labels: +Annotations: +API Version: ops.kubedb.com/v1alpha1 +Kind: DruidOpsRequest +Metadata: + Creation Timestamp: 2024-08-02T05:14:42Z + Generation: 1 + Resource Version: 332996 + UID: 551d2c92-9431-47a7-a699-8f8115131b49 +Spec: + Apply: IfReady + Configuration: + Apply Config: + middleManagers.properties: log.retention.hours=150 + historicals.properties: historicals.quorum.election.timeout.ms=4000 +historicals.quorum.fetch.timeout.ms=5000 + Database Ref: + Name: druid-prod + Timeout: 5m + Type: Reconfigure +Status: + Conditions: + Last Transition Time: 2024-08-02T05:14:42Z + Message: Druid ops-request has started to reconfigure druid nodes + Observed Generation: 1 + Reason: Reconfigure + Status: True + Type: Reconfigure + Last Transition Time: 2024-08-02T05:14:45Z + Message: Successfully prepared user provided custom config secret + Observed Generation: 1 + Reason: PrepareCustomConfig + Status: True + Type: PrepareCustomConfig + Last Transition Time: 2024-08-02T05:14:52Z + Message: successfully reconciled the Druid with new configure + Observed Generation: 1 + Reason: UpdatePetSets + Status: True + Type: UpdatePetSets + Last Transition Time: 2024-08-02T05:14:57Z + Message: get pod; ConditionStatus:True; PodName:druid-prod-historicals-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-prod-historicals-0 + Last Transition Time: 2024-08-02T05:14:57Z + Message: evict pod; ConditionStatus:True; PodName:druid-prod-historicals-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-prod-historicals-0 + Last Transition Time: 2024-08-02T05:15:07Z + Message: check pod running; ConditionStatus:True; PodName:druid-prod-historicals-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-prod-historicals-0 + Last Transition Time: 2024-08-02T05:15:12Z + Message: get pod; ConditionStatus:True; PodName:druid-prod-historicals-1 + Observed Generation: 1 + Status: True + Type: GetPod--druid-prod-historicals-1 + Last Transition Time: 2024-08-02T05:15:12Z + Message: evict pod; ConditionStatus:True; PodName:druid-prod-historicals-1 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-prod-historicals-1 + Last Transition Time: 2024-08-02T05:15:27Z + Message: check pod running; ConditionStatus:True; PodName:druid-prod-historicals-1 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-prod-historicals-1 + Last Transition Time: 2024-08-02T05:15:32Z + Message: get pod; ConditionStatus:True; PodName:druid-prod-middleManagers-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-prod-middleManagers-0 + Last Transition Time: 2024-08-02T05:15:32Z + Message: evict pod; ConditionStatus:True; PodName:druid-prod-middleManagers-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-prod-middleManagers-0 + Last Transition Time: 2024-08-02T05:16:07Z + Message: check pod running; ConditionStatus:True; PodName:druid-prod-middleManagers-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-prod-middleManagers-0 + Last Transition Time: 2024-08-02T05:16:12Z + Message: get pod; ConditionStatus:True; PodName:druid-prod-middleManagers-1 + Observed Generation: 1 + Status: True + Type: GetPod--druid-prod-middleManagers-1 + Last Transition Time: 2024-08-02T05:16:12Z + Message: evict pod; ConditionStatus:True; PodName:druid-prod-middleManagers-1 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-prod-middleManagers-1 + Last Transition Time: 2024-08-02T05:16:27Z + Message: check pod running; ConditionStatus:True; PodName:druid-prod-middleManagers-1 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-prod-middleManagers-1 + Last Transition Time: 2024-08-02T05:16:32Z + Message: Successfully restarted all nodes + Observed Generation: 1 + Reason: RestartNodes + Status: True + Type: RestartNodes + Last Transition Time: 2024-08-02T05:16:35Z + Message: Successfully completed reconfigure druid + Observed Generation: 1 + Reason: Successful + Status: True + Type: Successful + Observed Generation: 1 + Phase: Successful +Events: + Type Reason Age From Message + ---- ------ ---- ---- ------- + Normal Starting 2m6s KubeDB Ops-manager Operator Start processing for DruidOpsRequest: demo/kfops-reconfigure-apply-topology + Normal Starting 2m6s KubeDB Ops-manager Operator Pausing Druid databse: demo/druid-prod + Normal Successful 2m6s KubeDB Ops-manager Operator Successfully paused Druid database: demo/druid-prod for DruidOpsRequest: kfops-reconfigure-apply-topology + Normal UpdatePetSets 116s KubeDB Ops-manager Operator successfully reconciled the Druid with new configure + Warning get pod; ConditionStatus:True; PodName:druid-prod-historicals-0 111s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-prod-historicals-0 + Warning evict pod; ConditionStatus:True; PodName:druid-prod-historicals-0 111s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-prod-historicals-0 + Warning check pod running; ConditionStatus:False; PodName:druid-prod-historicals-0 106s KubeDB Ops-manager Operator check pod running; ConditionStatus:False; PodName:druid-prod-historicals-0 + Warning check pod running; ConditionStatus:True; PodName:druid-prod-historicals-0 101s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-prod-historicals-0 + Warning get pod; ConditionStatus:True; PodName:druid-prod-historicals-1 96s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-prod-historicals-1 + Warning evict pod; ConditionStatus:True; PodName:druid-prod-historicals-1 96s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-prod-historicals-1 + Warning check pod running; ConditionStatus:False; PodName:druid-prod-historicals-1 91s KubeDB Ops-manager Operator check pod running; ConditionStatus:False; PodName:druid-prod-historicals-1 + Warning check pod running; ConditionStatus:True; PodName:druid-prod-historicals-1 81s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-prod-historicals-1 + Warning get pod; ConditionStatus:True; PodName:druid-prod-middleManagers-0 76s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-prod-middleManagers-0 + Warning evict pod; ConditionStatus:True; PodName:druid-prod-middleManagers-0 76s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-prod-middleManagers-0 + Warning check pod running; ConditionStatus:False; PodName:druid-prod-middleManagers-0 71s KubeDB Ops-manager Operator check pod running; ConditionStatus:False; PodName:druid-prod-middleManagers-0 + Warning check pod running; ConditionStatus:True; PodName:druid-prod-middleManagers-0 41s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-prod-middleManagers-0 + Warning get pod; ConditionStatus:True; PodName:druid-prod-middleManagers-1 36s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-prod-middleManagers-1 + Warning evict pod; ConditionStatus:True; PodName:druid-prod-middleManagers-1 36s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-prod-middleManagers-1 + Warning check pod running; ConditionStatus:False; PodName:druid-prod-middleManagers-1 31s KubeDB Ops-manager Operator check pod running; ConditionStatus:False; PodName:druid-prod-middleManagers-1 + Warning check pod running; ConditionStatus:True; PodName:druid-prod-middleManagers-1 21s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-prod-middleManagers-1 + Normal RestartNodes 15s KubeDB Ops-manager Operator Successfully restarted all nodes + Normal Starting 14s KubeDB Ops-manager Operator Resuming Druid database: demo/druid-prod + Normal Successful 14s KubeDB Ops-manager Operator Successfully resumed Druid database: demo/druid-prod for DruidOpsRequest: kfops-reconfigure-apply-topology +``` + +Lets exec into one of the druid middleManagers pod that have updated and check the new configurations are applied or not: + +Exec into the Druid middleManagers: + +```bash +$ kubectl exec -it -n demo druid-with-config-middleManagers-0 -- bash +Defaulted container "druid" out of: druid, init-druid (init) +bash-5.1$ +``` + +Now, execute the following commands to see the configurations: +```bash +bash-5.1$ cat conf/druid/cluster/data/middleManager/runtime.properties | grep druid.worker.capacity +druid.worker.capacity=5 +``` +Here, we can see that our given configuration is applied to the Druid cluster for all brokers. + +Now, lets exec into one of the druid historicals pod that have updated and check the new configurations are applied or not: + +Exec into the Druid historicals: + +```bash +$ kubectl exec -it -n demo druid-with-config-historicals-0 -- bash +Defaulted container "druid" out of: druid, init-druid (init) +bash-5.1$ +``` + +Now, execute the following commands to see the metadata storage directory: +```bash +bash-5.1$ cat conf/druid/cluster/data/historical/runtime.properties | grep druid.processing.numThreads +druid.processing.numThreads=3 +``` + +Here, we can see that our given configuration is applied to the historicals. + +### Verify Configuration Change from Druid UI + +You can access the UI similarly by doing port-forward as mentioned in [Check Configuration from Druid UI](/docs/guides/druid/reconfigure/#CheckConfigurationfromDruidUI) + +You should be able to see the following changes in the UI: + +

+  lifecycle +

+ +You can see that there are 5 task slots reflecting with our provided custom configuration of `druid.worker.capacity=5`. + +## Cleaning Up + +To clean up the Kubernetes resources created by this tutorial, run: + +```bash +kubectl delete kf -n demo druid-cluster +kubectl delete druidopsrequest -n demo reconfigure-drops +kubectl delete secret -n demo new-config +kubectl delete ns demo +``` + +## Next Steps + +- Detail concepts of [Druid object](/docs/guides/druid/concepts/druid.md). +- Different Druid topology clustering modes [here](/docs/guides/druid/clustering/_index.md). +- Monitor your Druid database with KubeDB using [out-of-the-box Prometheus operator](/docs/guides/druid/monitoring/using-prometheus-operator.md). + +[//]: # (- Monitor your Druid database with KubeDB using [out-of-the-box builtin-Prometheus](/docs/guides/druid/monitoring/using-builtin-prometheus.md).) +- Want to hack on KubeDB? Check our [contribution guidelines](/docs/CONTRIBUTING.md). diff --git a/docs/guides/druid/reconfigure/images/druid-ui.png b/docs/guides/druid/reconfigure/images/druid-ui.png new file mode 100644 index 0000000000000000000000000000000000000000..af798ee7b4500b849f698decb06b9abde3dfba0e GIT binary patch literal 47241 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� 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/guides/druid/reconfigure/overview.md b/docs/guides/druid/reconfigure/overview.md new file mode 100644 index 0000000000..e2ea2b268e --- /dev/null +++ b/docs/guides/druid/reconfigure/overview.md @@ -0,0 +1,54 @@ +--- +title: Reconfiguring Druid +menu: + docs_{{ .version }}: + identifier: guides-druid-reconfigure-overview + name: Overview + parent: guides-druid-reconfigure + weight: 10 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- + +> New to KubeDB? Please start [here](/docs/README.md). + +# Reconfiguring Druid + +This guide will give an overview on how KubeDB Ops-manager operator reconfigures `Druid` components such as Combined, Broker, Controller, etc. + +## Before You Begin + +- You should be familiar with the following `KubeDB` concepts: + - [Druid](/docs/guides/kafka/concepts/kafka.md) + - [DruidOpsRequest](/docs/guides/kafka/concepts/kafkaopsrequest.md) + +## How Reconfiguring Druid Process Works + +The following diagram shows how KubeDB Ops-manager operator reconfigures `Druid` components. Open the image in a new tab to see the enlarged version. + +

+  Reconfiguring process of Druid +
Fig: Reconfiguring process of Druid
+
+ +The Reconfiguring Druid process consists of the following steps: + +1. At first, a user creates a `Druid` Custom Resource (CR). + +2. `KubeDB` Provisioner operator watches the `Druid` CR. + +3. When the operator finds a `Druid` CR, it creates required number of `PetSets` and related necessary stuff like secrets, services, etc. + +4. Then, in order to reconfigure the various components (ie. Coordinators, Overlords, Historicals, MiddleManagers, Brokers, Routers) of the `Druid`, the user creates a `DruidOpsRequest` CR with desired information. + +5. `KubeDB` Ops-manager operator watches the `DruidOpsRequest` CR. + +6. When it finds a `DruidOpsRequest` CR, it halts the `Druid` object which is referred from the `DruidOpsRequest`. So, the `KubeDB` Provisioner operator doesn't perform any operations on the `Druid` object during the reconfiguring process. + +7. Then the `KubeDB` Ops-manager operator will replace the existing configuration with the new configuration provided or merge the new configuration with the existing configuration according to the `MogoDBOpsRequest` CR. + +8. Then the `KubeDB` Ops-manager operator will restart the related PetSet Pods so that they restart with the new configuration defined in the `DruidOpsRequest` CR. + +9. After the successful reconfiguring of the `Druid` components, the `KubeDB` Ops-manager operator resumes the `Druid` object so that the `KubeDB` Provisioner operator resumes its usual operations. + +In the next docs, we are going to show a step-by-step guide on reconfiguring Druid components using `DruidOpsRequest` CRD. \ No newline at end of file diff --git a/docs/guides/druid/reconfigure/yamls/config-secret.yaml b/docs/guides/druid/reconfigure/yamls/config-secret.yaml new file mode 100644 index 0000000000..6067ee7dd2 --- /dev/null +++ b/docs/guides/druid/reconfigure/yamls/config-secret.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Secret +metadata: + name: new-config + namespace: demo +stringData: + middleManagers.properties: |- + druid.worker.capacity=5 + historicals.properties: |- + druid.processing.numThreads=3 diff --git a/docs/guides/druid/reconfigure/yamls/deep-storage-config.yaml b/docs/guides/druid/reconfigure/yamls/deep-storage-config.yaml new file mode 100644 index 0000000000..3612595828 --- /dev/null +++ b/docs/guides/druid/reconfigure/yamls/deep-storage-config.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Secret +metadata: + name: deep-storage-config + namespace: demo +stringData: + druid.storage.type: "s3" + druid.storage.bucket: "druid" + druid.storage.baseKey: "druid/segments" + druid.s3.accessKey: "minio" + druid.s3.secretKey: "minio123" + druid.s3.protocol: "http" + druid.s3.enablePathStyleAccess: "true" + druid.s3.endpoint.signingRegion: "us-east-1" + druid.s3.endpoint.url: "http://myminio-hl.demo.svc.cluster.local:9000/" + diff --git a/docs/guides/druid/reconfigure/yamls/druid-cluster.yaml b/docs/guides/druid/reconfigure/yamls/druid-cluster.yaml new file mode 100644 index 0000000000..f7a695b062 --- /dev/null +++ b/docs/guides/druid/reconfigure/yamls/druid-cluster.yaml @@ -0,0 +1,15 @@ +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-cluster + namespace: demo +spec: + version: 28.0.1 + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + routers: + replicas: 1 + deletionPolicy: WipeOut diff --git a/docs/guides/druid/reconfigure/yamls/reconfigure-druid-ops.yaml b/docs/guides/druid/reconfigure/yamls/reconfigure-druid-ops.yaml new file mode 100644 index 0000000000..cc5f789a54 --- /dev/null +++ b/docs/guides/druid/reconfigure/yamls/reconfigure-druid-ops.yaml @@ -0,0 +1,12 @@ +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: reconfigure-drops + namespace: demo +spec: + type: Reconfigure + databaseRef: + name: druid-cluster + configuration: + configSecret: + name: new-config \ No newline at end of file diff --git a/docs/guides/druid/restart/_index.md b/docs/guides/druid/restart/_index.md new file mode 100644 index 0000000000..7d23da5218 --- /dev/null +++ b/docs/guides/druid/restart/_index.md @@ -0,0 +1,10 @@ +--- +title: Restart Druid +menu: + docs_{{ .version }}: + identifier: guides-druid-restart + name: Restart + parent: guides-druid + weight: 130 +menu_name: docs_{{ .version }} +--- \ No newline at end of file diff --git a/docs/guides/druid/restart/guide.md b/docs/guides/druid/restart/guide.md new file mode 100644 index 0000000000..b172825913 --- /dev/null +++ b/docs/guides/druid/restart/guide.md @@ -0,0 +1,283 @@ +--- +title: Restart Druid +menu: + docs_{{ .version }}: + identifier: guides-druid-restart-guide + name: Restart Druid + parent: guides-druid-restart + weight: 10 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- + +> New to KubeDB? Please start [here](/docs/README.md). + +# Restart Druid + +KubeDB supports restarting the Druid database via a DruidOpsRequest. Restarting is useful if some pods are got stuck in some phase, or they are not working correctly. This tutorial will show you how to use that. + +## Before You Begin + +- At first, you need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. If you do not already have a cluster, you can create one by using [kind](https://kind.sigs.k8s.io/docs/user/quick-start/). + +- Now, install KubeDB cli on your workstation and KubeDB operator in your cluster following the steps [here](/docs/setup/README.md). + +- To keep things isolated, this tutorial uses a separate namespace called `demo` throughout this tutorial. + +```bash + $ kubectl create ns demo + namespace/demo created + ``` + +> Note: YAML files used in this tutorial are stored in [docs/examples/druid](https://github.com/kubedb/docs/tree/{{< param "info.version" >}}/docs/examples/druid) folder in GitHub repository [kubedb/docs](https://github.com/kubedb/docs). + +## Deploy Druid + +In this section, we are going to deploy a Druid database using KubeDB. + +### Create External Dependency (Deep Storage) + +Before proceeding further, we need to prepare deep storage, which is one of the external dependency of Druid and used for storing the segments. It is a storage mechanism that Apache Druid does not provide. **Amazon S3**, **Google Cloud Storage**, or **Azure Blob Storage**, **S3-compatible storage** (like **Minio**), or **HDFS** are generally convenient options for deep storage. + +In this tutorial, we will run a `minio-server` as deep storage in our local `kind` cluster using `minio-operator` and create a bucket named `druid` in it, which the deployed druid database will use. + +```bash + +$ helm repo add minio https://operator.min.io/ +$ helm repo update minio +$ helm upgrade --install --namespace "minio-operator" --create-namespace "minio-operator" minio/operator --set operator.replicaCount=1 + +$ helm upgrade --install --namespace "demo" --create-namespace druid-minio minio/tenant \ +--set tenant.pools[0].servers=1 \ +--set tenant.pools[0].volumesPerServer=1 \ +--set tenant.pools[0].size=1Gi \ +--set tenant.certificate.requestAutoCert=false \ +--set tenant.buckets[0].name="druid" \ +--set tenant.pools[0].name="default" + +``` + +Now we need to create a `Secret` named `deep-storage-config`. It contains the necessary connection information using which the druid database will connect to the deep storage. + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: deep-storage-config + namespace: demo +stringData: + druid.storage.type: "s3" + druid.storage.bucket: "druid" + druid.storage.baseKey: "druid/segments" + druid.s3.accessKey: "minio" + druid.s3.secretKey: "minio123" + druid.s3.protocol: "http" + druid.s3.enablePathStyleAccess: "true" + druid.s3.endpoint.signingRegion: "us-east-1" + druid.s3.endpoint.url: "http://myminio-hl.demo.svc.cluster.local:9000/" +``` + +Let’s create the `deep-storage-config` Secret shown above: + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/restart/yamls/deep-storage-config.yaml +secret/deep-storage-config created +``` + +Now, lets go ahead and create a druid database. + +```yaml +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-cluster + namespace: demo +spec: + version: 28.0.1 + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + routers: + replicas: 1 + deletionPolicy: Delete +``` + +Let's create the `Druid` CR we have shown above, + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/update-version/yamls/druid-cluster.yaml +druid.kubedb.com/druid-cluster created +``` + +## Apply Restart opsRequest + +```yaml +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: restart + namespace: demo +spec: + type: Restart + databaseRef: + name: druid-cluster + timeout: 5m + apply: Always +``` + +- `spec.type` specifies the Type of the ops Request +- `spec.databaseRef` holds the name of the Druid CR. It should be available in the same namespace as the opsRequest +- The meaning of `spec.timeout` & `spec.apply` fields will be found [here](/docs/guides/druid/concepts/druidopsrequest.md#spectimeout) + +Let's create the `DruidOpsRequest` CR we have shown above, + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/restart/restart.yaml +druidopsrequest.ops.kubedb.com/restart created +``` + +Now the Ops-manager operator will first restart the controller pods, then broker of the referenced druid. + +```shell +$ kubectl get drops -n demo +NAME TYPE STATUS AGE +restart Restart Successful 2m11s + +$ kubectl get drops -n demo restart -oyaml +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + annotations: + kubectl.kubernetes.io/last-applied-configuration: | + {"apiVersion":"ops.kubedb.com/v1alpha1","kind":"DruidOpsRequest","metadata":{"annotations":{},"name":"restart","namespace":"demo"},"spec":{"apply":"Always","databaseRef":{"name":"druid-cluster"},"timeout":"5m","type":"Restart"}} + creationTimestamp: "2024-10-21T10:30:53Z" + generation: 1 + name: restart + namespace: demo + resourceVersion: "83200" + uid: 0fcbc7d4-593f-45f7-8631-7483805efe1e +spec: + apply: Always + databaseRef: + name: druid-cluster + timeout: 5m + type: Restart +status: + conditions: + - lastTransitionTime: "2024-10-21T10:30:53Z" + message: Druid ops-request has started to restart druid nodes + observedGeneration: 1 + reason: Restart + status: "True" + type: Restart + - lastTransitionTime: "2024-10-21T10:31:51Z" + message: Successfully Restarted Druid nodes + observedGeneration: 1 + reason: RestartNodes + status: "True" + type: RestartNodes + - lastTransitionTime: "2024-10-21T10:31:01Z" + message: get pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 + observedGeneration: 1 + status: "True" + type: GetPod--druid-cluster-historicals-0 + - lastTransitionTime: "2024-10-21T10:31:01Z" + message: evict pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 + observedGeneration: 1 + status: "True" + type: EvictPod--druid-cluster-historicals-0 + - lastTransitionTime: "2024-10-21T10:31:06Z" + message: check pod running; ConditionStatus:True; PodName:druid-cluster-historicals-0 + observedGeneration: 1 + status: "True" + type: CheckPodRunning--druid-cluster-historicals-0 + - lastTransitionTime: "2024-10-21T10:31:11Z" + message: get pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + observedGeneration: 1 + status: "True" + type: GetPod--druid-cluster-middlemanagers-0 + - lastTransitionTime: "2024-10-21T10:31:11Z" + message: evict pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + observedGeneration: 1 + status: "True" + type: EvictPod--druid-cluster-middlemanagers-0 + - lastTransitionTime: "2024-10-21T10:31:16Z" + message: check pod running; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + observedGeneration: 1 + status: "True" + type: CheckPodRunning--druid-cluster-middlemanagers-0 + - lastTransitionTime: "2024-10-21T10:31:21Z" + message: get pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 + observedGeneration: 1 + status: "True" + type: GetPod--druid-cluster-brokers-0 + - lastTransitionTime: "2024-10-21T10:31:21Z" + message: evict pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 + observedGeneration: 1 + status: "True" + type: EvictPod--druid-cluster-brokers-0 + - lastTransitionTime: "2024-10-21T10:31:26Z" + message: check pod running; ConditionStatus:True; PodName:druid-cluster-brokers-0 + observedGeneration: 1 + status: "True" + type: CheckPodRunning--druid-cluster-brokers-0 + - lastTransitionTime: "2024-10-21T10:31:31Z" + message: get pod; ConditionStatus:True; PodName:druid-cluster-routers-0 + observedGeneration: 1 + status: "True" + type: GetPod--druid-cluster-routers-0 + - lastTransitionTime: "2024-10-21T10:31:31Z" + message: evict pod; ConditionStatus:True; PodName:druid-cluster-routers-0 + observedGeneration: 1 + status: "True" + type: EvictPod--druid-cluster-routers-0 + - lastTransitionTime: "2024-10-21T10:31:36Z" + message: check pod running; ConditionStatus:True; PodName:druid-cluster-routers-0 + observedGeneration: 1 + status: "True" + type: CheckPodRunning--druid-cluster-routers-0 + - lastTransitionTime: "2024-10-21T10:31:41Z" + message: get pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + observedGeneration: 1 + status: "True" + type: GetPod--druid-cluster-coordinators-0 + - lastTransitionTime: "2024-10-21T10:31:41Z" + message: evict pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + observedGeneration: 1 + status: "True" + type: EvictPod--druid-cluster-coordinators-0 + - lastTransitionTime: "2024-10-21T10:31:46Z" + message: check pod running; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + observedGeneration: 1 + status: "True" + type: CheckPodRunning--druid-cluster-coordinators-0 + - lastTransitionTime: "2024-10-21T10:31:51Z" + message: Controller has successfully restart the Druid replicas + observedGeneration: 1 + reason: Successful + status: "True" + type: Successful + observedGeneration: 1 + phase: Successful +``` + +## Cleaning up + +To cleanup the Kubernetes resources created by this tutorial, run: + +```bash +kubectl delete druidopsrequest -n demo restart +kubectl delete druid -n demo druid-cluster +kubectl delete ns demo +``` + +## Next Steps + +- Detail concepts of [Druid object](/docs/guides/druid/concepts/druid.md). +- Different Druid topology clustering modes [here](/docs/guides/druid/clustering/_index.md). +- Monitor your Druid database with KubeDB using [out-of-the-box Prometheus operator](/docs/guides/druid/monitoring/using-prometheus-operator.md). + +[//]: # (- Monitor your Druid database with KubeDB using [out-of-the-box builtin-Prometheus](/docs/guides/druid/monitoring/using-builtin-prometheus.md).) +- Want to hack on KubeDB? Check our [contribution guidelines](/docs/CONTRIBUTING.md). diff --git a/docs/guides/druid/restart/yamls/deep-storage-config.yaml b/docs/guides/druid/restart/yamls/deep-storage-config.yaml new file mode 100644 index 0000000000..3612595828 --- /dev/null +++ b/docs/guides/druid/restart/yamls/deep-storage-config.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Secret +metadata: + name: deep-storage-config + namespace: demo +stringData: + druid.storage.type: "s3" + druid.storage.bucket: "druid" + druid.storage.baseKey: "druid/segments" + druid.s3.accessKey: "minio" + druid.s3.secretKey: "minio123" + druid.s3.protocol: "http" + druid.s3.enablePathStyleAccess: "true" + druid.s3.endpoint.signingRegion: "us-east-1" + druid.s3.endpoint.url: "http://myminio-hl.demo.svc.cluster.local:9000/" + diff --git a/docs/guides/druid/restart/yamls/druid-cluster.yaml b/docs/guides/druid/restart/yamls/druid-cluster.yaml new file mode 100644 index 0000000000..6351c2ddda --- /dev/null +++ b/docs/guides/druid/restart/yamls/druid-cluster.yaml @@ -0,0 +1,16 @@ +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-cluster + namespace: demo +spec: + version: 28.0.1 + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + routers: + replicas: 1 + deletionPolicy: Delete + diff --git a/docs/guides/druid/restart/yamls/restart.yaml b/docs/guides/druid/restart/yamls/restart.yaml new file mode 100644 index 0000000000..7130c4c865 --- /dev/null +++ b/docs/guides/druid/restart/yamls/restart.yaml @@ -0,0 +1,11 @@ +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: restart + namespace: demo +spec: + type: Restart + databaseRef: + name: druid-cluster + timeout: 5m + apply: Always diff --git a/docs/guides/druid/scaling/_index.md b/docs/guides/druid/scaling/_index.md new file mode 100644 index 0000000000..b5da417adc --- /dev/null +++ b/docs/guides/druid/scaling/_index.md @@ -0,0 +1,10 @@ +--- +title: Scaling Druid +menu: + docs_{{ .version }}: + identifier: guides-druid-scaling + name: Scaling + parent: guides-druid + weight: 70 +menu_name: docs_{{ .version }} +--- \ No newline at end of file diff --git a/docs/guides/druid/scaling/horizontal-scaling/_index.md b/docs/guides/druid/scaling/horizontal-scaling/_index.md new file mode 100644 index 0000000000..73d3017f6d --- /dev/null +++ b/docs/guides/druid/scaling/horizontal-scaling/_index.md @@ -0,0 +1,10 @@ +--- +title: Horizontal Scaling +menu: + docs_{{ .version }}: + identifier: guides-druid-scaling-horizontal-scaling + name: Horizontal Scaling + parent: guides-druid-scaling + weight: 10 +menu_name: docs_{{ .version }} +--- diff --git a/docs/guides/druid/scaling/horizontal-scaling/guide.md b/docs/guides/druid/scaling/horizontal-scaling/guide.md new file mode 100644 index 0000000000..6e6648b4f8 --- /dev/null +++ b/docs/guides/druid/scaling/horizontal-scaling/guide.md @@ -0,0 +1,603 @@ +--- +title: Horizontal Scaling Druid Cluster +menu: + docs_{{ .version }}: + identifier: guides-druid-scaling-horizontal-scaling-guide + name: Druid Horizontal Scaling + parent: guides-druid-scaling-horizontal-scaling + weight: 20 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- + +> New to KubeDB? Please start [here](/docs/README.md). + +# Horizontal Scale Druid Topology Cluster + +This guide will show you how to use `KubeDB` Ops-manager operator to scale the Druid topology cluster. + +## Before You Begin + +- At first, you need to have a Kubernetes cluster, and the `kubectl` command-line tool must be configured to communicate with your cluster. If you do not already have a cluster, you can create one by using [kind](https://kind.sigs.k8s.io/docs/user/quick-start/). + +- Install `KubeDB` Provisioner and Ops-manager operator in your cluster following the steps [here](/docs/setup/README.md). + +- You should be familiar with the following `KubeDB` concepts: + - [Druid](/docs/guides/druid/concepts/druid.md) + - [Topology](/docs/guides/druid/clustering/overview/index.md) + - [DruidOpsRequest](/docs/guides/druid/concepts/druidopsrequest.md) + - [Horizontal Scaling Overview](/docs/guides/druid/scaling/horizontal-scaling/overview.md) + +To keep everything isolated, we are going to use a separate namespace called `demo` throughout this tutorial. + +```bash +$ kubectl create ns demo +namespace/demo created +``` + +> **Note:** YAML files used in this tutorial are stored in [docs/examples/druid](/docs/examples/druid) directory of [kubedb/docs](https://github.com/kubedb/docs) repository. + +## Apply Horizontal Scaling on Druid Cluster + +Here, we are going to deploy a `Druid` cluster using a supported version by `KubeDB` operator. Then we are going to apply horizontal scaling on it. + +### Prepare Druid Topology cluster + +Now, we are going to deploy a `Druid` topology cluster with version `28.0.1`. + +### Create External Dependency (Deep Storage) + +Before proceeding further, we need to prepare deep storage, which is one of the external dependency of Druid and used for storing the segments. It is a storage mechanism that Apache Druid does not provide. **Amazon S3**, **Google Cloud Storage**, or **Azure Blob Storage**, **S3-compatible storage** (like **Minio**), or **HDFS** are generally convenient options for deep storage. + +In this tutorial, we will run a `minio-server` as deep storage in our local `kind` cluster using `minio-operator` and create a bucket named `druid` in it, which the deployed druid database will use. + +```bash + +$ helm repo add minio https://operator.min.io/ +$ helm repo update minio +$ helm upgrade --install --namespace "minio-operator" --create-namespace "minio-operator" minio/operator --set operator.replicaCount=1 + +$ helm upgrade --install --namespace "demo" --create-namespace druid-minio minio/tenant \ +--set tenant.pools[0].servers=1 \ +--set tenant.pools[0].volumesPerServer=1 \ +--set tenant.pools[0].size=1Gi \ +--set tenant.certificate.requestAutoCert=false \ +--set tenant.buckets[0].name="druid" \ +--set tenant.pools[0].name="default" + +``` + +Now we need to create a `Secret` named `deep-storage-config`. It contains the necessary connection information using which the druid database will connect to the deep storage. + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: deep-storage-config + namespace: demo +stringData: + druid.storage.type: "s3" + druid.storage.bucket: "druid" + druid.storage.baseKey: "druid/segments" + druid.s3.accessKey: "minio" + druid.s3.secretKey: "minio123" + druid.s3.protocol: "http" + druid.s3.enablePathStyleAccess: "true" + druid.s3.endpoint.signingRegion: "us-east-1" + druid.s3.endpoint.url: "http://myminio-hl.demo.svc.cluster.local:9000/" +``` + +Let’s create the `deep-storage-config` Secret shown above: + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/scaling/horizontal-scaling/yamls/deep-storage-config.yaml +secret/deep-storage-config created +``` + +### Deploy Druid topology cluster + +In this section, we are going to deploy a Druid topology cluster. Then, in the next section we will scale the cluster using `DruidOpsRequest` CRD. Below is the YAML of the `Druid` CR that we are going to create, + + +```yaml +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-cluster + namespace: demo +spec: + version: 28.0.1 + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + routers: + replicas: 1 + deletionPolicy: Delete +``` + +Let's create the `Druid` CR we have shown above, + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/examples/druid/scaling/horizontal-scaling/yamls/druid-topology.yaml +druid.kubedb.com/druid-cluster created +``` + +Now, wait until `druid-cluster` has status `Ready`. i.e, + +```bash +$ kubectl get dr -n demo -w +NAME TYPE VERSION STATUS AGE +druid-cluster kubedb.com/v1aplha2 28.0.1 Provisioning 0s +druid-cluster kubedb.com/v1aplha2 28.0.1 Provisioning 24s +. +. +druid-cluster kubedb.com/v1aplha2 28.0.1 Ready 92s +``` + +Let's check the number of replicas has from druid object, number of pods the petset have, + +**Coordinators Replicas** + +```bash +$ kubectl get druid -n demo druid-cluster -o json | jq '.spec.topology.coordinators.replicas' +1 + +$ kubectl get petset -n demo druid-cluster-coordinators -o json | jq '.spec.replicas' +1 +``` + +**Historicals Replicas** + +```bash +$ kubectl get druid -n demo druid-cluster -o json | jq '.spec.topology.historicals.replicas' +1 + +$ kubectl get petset -n demo druid-cluster-historicals -o json | jq '.spec.replicas' +1 +``` + +We can see from commands that the cluster has 1 replicas for both coordinators and historicals. + +### Check Replica Count from Druid UI + +You can also see the replica count of each node from the druid ui. For that, follow the following steps: + +First port-forward the port `8888` to local machine: + +```bash +$ kubectl port-forward -n demo svc/druid-cluster-routers 8888 +Forwarding from 127.0.0.1:8888 -> 8888 +Forwarding from [::1]:8888 -> 8888 +``` + + +Now hit the `http://localhost:8888` from any browser, and you will be prompted to provide the credential of the druid database. By following the steps discussed below, you can get the credential generated by the KubeDB operator for your Druid database. + +**Connection information:** + +- Username: + + ```bash + $ kubectl get secret -n demo druid-cluster-admin-cred -o jsonpath='{.data.username}' | base64 -d + admin + ``` + +- Password: + + ```bash + $ kubectl get secret -n demo druid-cluster-admin-cred -o jsonpath='{.data.password}' | base64 -d + LzJtVRX5E8MorFaf + ``` + +After providing the credentials correctly, you should be able to access the web console like shown below. + +

+  lifecycle +

+ + +Here, we can see that there is 1 replica of each node including `coordinators` and `historicals`. + +We are now ready to apply the `DruidOpsRequest` CR to scale this cluster. + +## Scale Up Replicas + +Here, we are going to scale up the replicas of the topology cluster to meet the desired number of replicas after scaling. + +### Create DruidOpsRequest + +In order to scale up the replicas of the topology cluster, we have to create a `DruidOpsRequest` CR with our desired replicas. Below is the YAML of the `DruidOpsRequest` CR that we are going to create, + +```yaml +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: druid-hscale-up + namespace: demo +spec: + type: HorizontalScaling + databaseRef: + name: druid-cluster + horizontalScaling: + topology: + coordinators: 2 + historicals: 2 +``` + +Here, + +- `spec.databaseRef.name` specifies that we are performing horizontal scaling operation on `druid-cluster` cluster. +- `spec.type` specifies that we are performing `HorizontalScaling` on druid. +- `spec.horizontalScaling.topology.coordinators` specifies the desired replicas after scaling for coordinators. +- `spec.horizontalScaling.topology.historicals` specifies the desired replicas after scaling for historicals. + +> **Note:** Similarly you can scale other druid nodes horizontally by specifying the following fields: + > - For `overlords` use `spec.horizontalScaling.topology.overlords`. + > - For `brokers` use `spec.horizontalScaling.topology.brokers`. + > - For `middleManagers` use `spec.horizontalScaling.topology.middleManagers`. + > - For `routers` use `spec.horizontalScaling.topology.routers`. + +Let's create the `DruidOpsRequest` CR we have shown above, + +```bash +$ kubectl apply -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/scaling/horizontal-scaling/yamls/druid-hscale-up.yaml +druidopsrequest.ops.kubedb.com/druid-hscale-up created +``` + +### Verify Topology cluster replicas scaled up successfully + +If everything goes well, `KubeDB` Ops-manager operator will update the replicas of `Druid` object and related `PetSets` and `Pods`. + +Let's wait for `DruidOpsRequest` to be `Successful`. Run the following command to watch `DruidOpsRequest` CR, + +```bash +$ watch kubectl get druidopsrequest -n demo +NAME TYPE STATUS AGE +druid-hscale-up HorizontalScaling Successful 106s +``` + +We can see from the above output that the `DruidOpsRequest` has succeeded. If we describe the `DruidOpsRequest` we will get an overview of the steps that were followed to scale the cluster. + +```bash +$ kubectl describe druidopsrequests -n demo druid-hscale-up +Name: druid-hscale-up +Namespace: demo +Labels: +Annotations: +API Version: ops.kubedb.com/v1alpha1 +Kind: DruidOpsRequest +Metadata: + Creation Timestamp: 2024-10-21T11:32:51Z + Generation: 1 + Managed Fields: + API Version: ops.kubedb.com/v1alpha1 + Fields Type: FieldsV1 + fieldsV1: + f:metadata: + f:annotations: + .: + f:kubectl.kubernetes.io/last-applied-configuration: + f:spec: + .: + f:apply: + f:databaseRef: + f:horizontalScaling: + .: + f:topology: + .: + f:coordinators: + f:historicals: + f:type: + Manager: kubectl-client-side-apply + Operation: Update + Time: 2024-10-21T11:32:51Z + API Version: ops.kubedb.com/v1alpha1 + Fields Type: FieldsV1 + fieldsV1: + f:status: + .: + f:conditions: + f:observedGeneration: + f:phase: + Manager: kubedb-ops-manager + Operation: Update + Subresource: status + Time: 2024-10-21T11:34:02Z + Resource Version: 91877 + UID: 824356ca-eafc-4266-8af1-c372b27f6ce7 +Spec: + Apply: IfReady + Database Ref: + Name: druid-cluster + Horizontal Scaling: + Topology: + Coordinators: 2 + Historicals: 2 + Type: HorizontalScaling +Status: + Conditions: + Last Transition Time: 2024-10-21T11:32:51Z + Message: Druid ops-request has started to horizontally scaling the nodes + Observed Generation: 1 + Reason: HorizontalScaling + Status: True + Type: HorizontalScaling + Last Transition Time: 2024-10-21T11:33:17Z + Message: Successfully Scaled Up Broker + Observed Generation: 1 + Reason: ScaleUpCoordinators + Status: True + Type: ScaleUpCoordinators + Last Transition Time: 2024-10-21T11:33:02Z + Message: patch pet setdruid-cluster-coordinators; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: PatchPetSetdruid-cluster-coordinators + Last Transition Time: 2024-10-21T11:33:57Z + Message: node in cluster; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: NodeInCluster + Last Transition Time: 2024-10-21T11:34:02Z + Message: Successfully Scaled Up Broker + Observed Generation: 1 + Reason: ScaleUpHistoricals + Status: True + Type: ScaleUpHistoricals + Last Transition Time: 2024-10-21T11:33:22Z + Message: patch pet setdruid-cluster-historicals; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: PatchPetSetdruid-cluster-historicals + Last Transition Time: 2024-10-21T11:34:02Z + Message: Successfully completed horizontally scale druid cluster + Observed Generation: 1 + Reason: Successful + Status: True + Type: Successful + Observed Generation: 1 + Phase: Successful +Events: + Type Reason Age From Message + ---- ------ ---- ---- ------- + Normal Starting 95s KubeDB Ops-manager Operator Start processing for DruidOpsRequest: demo/druid-hscale-up + Normal Starting 95s KubeDB Ops-manager Operator Pausing Druid databse: demo/druid-cluster + Normal Successful 95s KubeDB Ops-manager Operator Successfully paused Druid database: demo/druid-cluster for DruidOpsRequest: druid-hscale-up + Warning patch pet setdruid-cluster-coordinators; ConditionStatus:True 84s KubeDB Ops-manager Operator patch pet setdruid-cluster-coordinators; ConditionStatus:True + Warning node in cluster; ConditionStatus:False 76s KubeDB Ops-manager Operator node in cluster; ConditionStatus:False + Warning node in cluster; ConditionStatus:True 74s KubeDB Ops-manager Operator node in cluster; ConditionStatus:True + Normal ScaleUpCoordinators 69s KubeDB Ops-manager Operator Successfully Scaled Up Broker + Warning patch pet setdruid-cluster-historicals; ConditionStatus:True 64s KubeDB Ops-manager Operator patch pet setdruid-cluster-historicals; ConditionStatus:True + Warning node in cluster; ConditionStatus:False 56s KubeDB Ops-manager Operator node in cluster; ConditionStatus:False + Warning node in cluster; ConditionStatus:True 29s KubeDB Ops-manager Operator node in cluster; ConditionStatus:True + Normal ScaleUpHistoricals 24s KubeDB Ops-manager Operator Successfully Scaled Up Broker + Normal Starting 24s KubeDB Ops-manager Operator Resuming Druid database: demo/druid-cluster + Normal Successful 24s KubeDB Ops-manager Operator Successfully resumed Druid database: demo/druid-cluster for DruidOpsRequest: druid-hscale-up +``` + + +Now, we are going to verify the number of replicas this cluster has from the Druid object, number of pods the petset have, + +**Coordinators Replicas** + +```bash +$ kubectl get druid -n demo druid-cluster -o json | jq '.spec.topology.coordinators.replicas' +2 + +$ kubectl get petset -n demo druid-cluster-coordinators -o json | jq '.spec.replicas' +2 +``` + +**Historicals Replicas** + +```bash +$ kubectl get druid -n demo druid-cluster -o json | jq '.spec.topology.historicals.replicas' +2 + +$ kubectl get petset -n demo druid-cluster-historicals -o json | jq '.spec.replicas' +2 +``` + +Now, we are going to verify the number of replicas this cluster has from the Druid UI. + +### Verify Replica Count from Druid UI + +Verify the scaled replica count of nodes from the druid ui. To access the UI follow the steps described in the first part of this guide. [(Check Replica Count from Druid UI)](/docs/guides/druid/scaling/horizontal-scaling/#Check-Replica-Count-from-Druid-UI) + +If you follow the steps properly, you should be able to see that the replica count of both `coordinators` and `historicals` has become 2. Also as the `coordinators` is serving as the `overlords`, the count of `overlords` has also become 2. + +

+  lifecycle +

+ +## Scale Down Replicas + +Here, we are going to scale down the replicas of the druid topology cluster to meet the desired number of replicas after scaling. + +### Create DruidOpsRequest + +In order to scale down the replicas of the druid topology cluster, we have to create a `DruidOpsRequest` CR with our desired replicas. Below is the YAML of the `DruidOpsRequest` CR that we are going to create, + +```yaml +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: druid-hscale-down + namespace: demo +spec: + type: HorizontalScaling + databaseRef: + name: druid-cluster + horizontalScaling: + topology: + coordinators: 1 + historicals: 1 +``` + +Here, + +- `spec.databaseRef.name` specifies that we are performing horizontal scaling down operation on `druid-cluster` cluster. +- `spec.type` specifies that we are performing `HorizontalScaling` on druid. +- `spec.horizontalScaling.topology.coordinators` specifies the desired replicas after scaling for the coordinators nodes. +- `spec.horizontalScaling.topology.historicals` specifies the desired replicas after scaling for the historicals nodes. + +> **Note:** Similarly you can scale other druid nodes by specifying the following fields: +> - For `overlords` use `spec.horizontalScaling.topology.overlords`. +> - For `brokers` use `spec.horizontalScaling.topology.brokers`. +> - For `middleManagers` use `spec.horizontalScaling.topology.middleManagers`. +> - For `routers` use `spec.horizontalScaling.topology.routers`. + +Let's create the `DruidOpsRequest` CR we have shown above, + +```bash +$ kubectl apply -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/examples/druid/scaling/horizontal-scaling/druid-hscale-down-topology.yaml +druidopsrequest.ops.kubedb.com/druid-hscale-down created +``` + +#### Verify Topology cluster replicas scaled down successfully + +If everything goes well, `KubeDB` Ops-manager operator will update the replicas of `Druid` object and related `PetSets` and `Pods`. + +Let's wait for `DruidOpsRequest` to be `Successful`. Run the following command to watch `DruidOpsRequest` CR, + +```bash +$ watch kubectl get druidopsrequest -n demo +NAME TYPE STATUS AGE +druid-hscale-down HorizontalScaling Successful 2m32s +``` + +We can see from the above output that the `DruidOpsRequest` has succeeded. If we describe the `DruidOpsRequest` we will get an overview of the steps that were followed to scale the cluster. + +```bash +$ kubectl get druidopsrequest -n demo druid-hscale-down -oyaml +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + annotations: + kubectl.kubernetes.io/last-applied-configuration: | + {"apiVersion":"ops.kubedb.com/v1alpha1","kind":"DruidOpsRequest","metadata":{"annotations":{},"name":"druid-hscale-down","namespace":"demo"},"spec":{"databaseRef":{"name":"druid-cluster"},"horizontalScaling":{"topology":{"coordinators":1,"historicals":1}},"type":"HorizontalScaling"}} + creationTimestamp: "2024-10-21T12:42:09Z" + generation: 1 + name: druid-hscale-down + namespace: demo + resourceVersion: "99500" + uid: b3a81d07-be44-4adf-a8a7-36bb825f26a8 +spec: + apply: IfReady + databaseRef: + name: druid-cluster + horizontalScaling: + topology: + coordinators: 1 + historicals: 1 + type: HorizontalScaling +status: + conditions: + - lastTransitionTime: "2024-10-21T12:42:09Z" + message: Druid ops-request has started to horizontally scaling the nodes + observedGeneration: 1 + reason: HorizontalScaling + status: "True" + type: HorizontalScaling + - lastTransitionTime: "2024-10-21T12:42:33Z" + message: Successfully Scaled Down Broker + observedGeneration: 1 + reason: ScaleDownCoordinators + status: "True" + type: ScaleDownCoordinators + - lastTransitionTime: "2024-10-21T12:42:23Z" + message: reassign partitions; ConditionStatus:True + observedGeneration: 1 + status: "True" + type: ReassignPartitions + - lastTransitionTime: "2024-10-21T12:42:23Z" + message: is pet set patched; ConditionStatus:True + observedGeneration: 1 + status: "True" + type: IsPetSetPatched + - lastTransitionTime: "2024-10-21T12:42:28Z" + message: get pod; ConditionStatus:True + observedGeneration: 1 + status: "True" + type: GetPod + - lastTransitionTime: "2024-10-21T12:42:53Z" + message: Successfully Scaled Down Broker + observedGeneration: 1 + reason: ScaleDownHistoricals + status: "True" + type: ScaleDownHistoricals + - lastTransitionTime: "2024-10-21T12:42:43Z" + message: delete pvc; ConditionStatus:True + observedGeneration: 1 + status: "True" + type: DeletePvc + - lastTransitionTime: "2024-10-21T12:42:43Z" + message: get pvc; ConditionStatus:False + observedGeneration: 1 + status: "False" + type: GetPvc + - lastTransitionTime: "2024-10-21T12:42:53Z" + message: Successfully completed horizontally scale druid cluster + observedGeneration: 1 + reason: Successful + status: "True" + type: Successful + observedGeneration: 1 + phase: Successful +``` + +Now, we are going to verify the number of replicas this cluster has from the Druid object, number of pods the petset have, + +**Coordinators Replicas** + +```bash +$ kubectl get druid -n demo druid-cluster -o json | jq '.spec.topology.coordinators.replicas' +1 + +$ kubectl get petset -n demo druid-cluster-coordinators -o json | jq '.spec.replicas' +1 +``` + +**Historicals Replicas** + +```bash +$ kubectl get druid -n demo druid-cluster -o json | jq '.spec.topology.historicals.replicas' +1 + +$ kubectl get petset -n demo druid-cluster-historicals -o json | jq '.spec.replicas' +1 +``` + +Now, we are going to verify the number of replicas this cluster has from the Druid UI. + +### Verify Replica Count from Druid UI + +Verify the scaled replica count of nodes from the druid ui. To access the UI follow the steps described in the first part of this guide. [(Check Replica Count from Druid UI)](/docs/guides/druid/scaling/horizontal-scaling/#Check-Replica-Count-from-Druid-UI) + +If you follow the steps properly, you should be able to see that the replica count of both `coordinators` and `historicals` has become 1. Also as the `coordinators` is serving as the `overlords`, the count of `overlords` has also become 1. + +

+  lifecycle +

+ + +## Cleaning Up + +To clean up the Kubernetes resources created by this tutorial, run: + +```bash +kubectl delete dr -n demo druid-cluster +kubectl delete druidopsrequest -n demo druid-hscale-up druid-hscale-down +kubectl delete ns demo +``` + +## Next Steps + +- Detail concepts of [Druid object](/docs/guides/druid/concepts/druid.md). +- Different Druid topology clustering modes [here](/docs/guides/druid/clustering/_index.md). +- Monitor your Druid with KubeDB using [out-of-the-box Prometheus operator](/docs/guides/druid/monitoring/using-prometheus-operator.md). + +[//]: # (- Monitor your Druid with KubeDB using [out-of-the-box builtin-Prometheus](/docs/guides/druid/monitoring/using-builtin-prometheus.md).) +- Want to hack on KubeDB? Check our [contribution guidelines](/docs/CONTRIBUTING.md). diff --git a/docs/guides/druid/scaling/horizontal-scaling/images/dr-horizontal-scaling.png b/docs/guides/druid/scaling/horizontal-scaling/images/dr-horizontal-scaling.png new file mode 100644 index 0000000000000000000000000000000000000000..83615ee58fc221744b151c07b9f3425af22ee216 GIT binary patch literal 68725 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�jH|Z3$pd8M$zdt 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
k>&P5tRU0$hn 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 TFW3WU@`B1M&6gDlZ{Gh8E0sSm literal 0 HcmV?d00001 diff --git a/docs/guides/druid/scaling/horizontal-scaling/images/druid-ui.png b/docs/guides/druid/scaling/horizontal-scaling/images/druid-ui.png new file mode 100644 index 0000000000000000000000000000000000000000..f81925c59cb7bf238315c7de992eaf0092caeb9c GIT binary patch literal 46148 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 New to KubeDB? Please start [here](/docs/README.md). + +# Druid Horizontal Scaling + +This guide will give an overview on how KubeDB Ops-manager operator scales up or down `Druid` cluster replicas of various component such as Coordinators, Overlords, Historicals, MiddleManager, Brokers and Routers. + +## Before You Begin + +- You should be familiar with the following `KubeDB` concepts: + - [Druid](/docs/guides/druid/concepts/druid.md) + - [DruidOpsRequest](/docs/guides/druid/concepts/druidopsrequest.md) + +## How Horizontal Scaling Process Works + +The following diagram shows how KubeDB Ops-manager operator scales up or down `Druid` database components. Open the image in a new tab to see the enlarged version. + +
+ Horizontal scaling process of Druid +
Fig: Horizontal scaling process of Druid
+
+ +The Horizontal scaling process consists of the following steps: + +1. At first, a user creates a `Druid` Custom Resource (CR). + +2. `KubeDB` Provisioner operator watches the `Druid` CR. + +3. When the operator finds a `Druid` CR, it creates required number of `PetSets` and related necessary stuff like secrets, services, etc. + +4. Then, in order to scale the various components (i.e. Coordinators, Overlords, Historicals, MiddleManagers, Brokers, Routers) of the `Druid` cluster, the user creates a `DruidOpsRequest` CR with desired information. + +5. `KubeDB` Ops-manager operator watches the `DruidOpsRequest` CR. + +6. When it finds a `DruidOpsRequest` CR, it halts the `Druid` object which is referred from the `DruidOpsRequest`. So, the `KubeDB` Provisioner operator doesn't perform any operations on the `Druid` object during the horizontal scaling process. + +7. Then the `KubeDB` Ops-manager operator will scale the related PetSet Pods to reach the expected number of replicas defined in the `DruidOpsRequest` CR. + +8. After the successfully scaling the replicas of the related PetSet Pods, the `KubeDB` Ops-manager operator updates the number of replicas in the `Druid` object to reflect the updated state. + +9. After the successful scaling of the `Druid` replicas, the `KubeDB` Ops-manager operator resumes the `Druid` object so that the `KubeDB` Provisioner operator resumes its usual operations. + +In the next docs, we are going to show a step-by-step guide on horizontal scaling of Druid cluster using `DruidOpsRequest` CRD. \ No newline at end of file diff --git a/docs/guides/druid/scaling/horizontal-scaling/yamls/deep-storage-config.yaml b/docs/guides/druid/scaling/horizontal-scaling/yamls/deep-storage-config.yaml new file mode 100644 index 0000000000..3612595828 --- /dev/null +++ b/docs/guides/druid/scaling/horizontal-scaling/yamls/deep-storage-config.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Secret +metadata: + name: deep-storage-config + namespace: demo +stringData: + druid.storage.type: "s3" + druid.storage.bucket: "druid" + druid.storage.baseKey: "druid/segments" + druid.s3.accessKey: "minio" + druid.s3.secretKey: "minio123" + druid.s3.protocol: "http" + druid.s3.enablePathStyleAccess: "true" + druid.s3.endpoint.signingRegion: "us-east-1" + druid.s3.endpoint.url: "http://myminio-hl.demo.svc.cluster.local:9000/" + diff --git a/docs/guides/druid/scaling/horizontal-scaling/yamls/druid-cluster.yaml b/docs/guides/druid/scaling/horizontal-scaling/yamls/druid-cluster.yaml new file mode 100644 index 0000000000..6351c2ddda --- /dev/null +++ b/docs/guides/druid/scaling/horizontal-scaling/yamls/druid-cluster.yaml @@ -0,0 +1,16 @@ +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-cluster + namespace: demo +spec: + version: 28.0.1 + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + routers: + replicas: 1 + deletionPolicy: Delete + diff --git a/docs/guides/druid/scaling/horizontal-scaling/yamls/druid-hscale-down.yaml b/docs/guides/druid/scaling/horizontal-scaling/yamls/druid-hscale-down.yaml new file mode 100644 index 0000000000..4cfa3f715d --- /dev/null +++ b/docs/guides/druid/scaling/horizontal-scaling/yamls/druid-hscale-down.yaml @@ -0,0 +1,13 @@ +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: druid-hscale-down + namespace: demo +spec: + type: HorizontalScaling + databaseRef: + name: druid-cluster + horizontalScaling: + topology: + coordinators: 1 + historicals: 1 \ No newline at end of file diff --git a/docs/guides/druid/scaling/horizontal-scaling/yamls/druid-hscale-up.yaml b/docs/guides/druid/scaling/horizontal-scaling/yamls/druid-hscale-up.yaml new file mode 100644 index 0000000000..8063b37fb1 --- /dev/null +++ b/docs/guides/druid/scaling/horizontal-scaling/yamls/druid-hscale-up.yaml @@ -0,0 +1,13 @@ +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: druid-hscale-up + namespace: demo +spec: + type: HorizontalScaling + databaseRef: + name: druid-cluster + horizontalScaling: + topology: + coordinators: 2 + historicals: 2 \ No newline at end of file diff --git a/docs/guides/druid/scaling/vertical-scaling/_index.md b/docs/guides/druid/scaling/vertical-scaling/_index.md new file mode 100644 index 0000000000..8a9a5727c0 --- /dev/null +++ b/docs/guides/druid/scaling/vertical-scaling/_index.md @@ -0,0 +1,10 @@ +--- +title: Vertical Scaling +menu: + docs_{{ .version }}: + identifier: guides-druid-scaling-vertical-scaling + name: Vertical Scaling + parent: guides-druid-scaling + weight: 20 +menu_name: docs_{{ .version }} +--- diff --git a/docs/guides/druid/scaling/vertical-scaling/guide.md b/docs/guides/druid/scaling/vertical-scaling/guide.md new file mode 100644 index 0000000000..cedf35b076 --- /dev/null +++ b/docs/guides/druid/scaling/vertical-scaling/guide.md @@ -0,0 +1,454 @@ +--- +title: Vertical Scaling Druid Cluster +menu: + docs_{{ .version }}: + identifier: guides-druid-scaling-vertical-scaling-guide + name: Druid Vertical Scaling + parent: guides-druid-scaling-vertical-scaling + weight: 30 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- + +> New to KubeDB? Please start [here](/docs/README.md). + +# Vertical Scale Druid Topology Cluster + +This guide will show you how to use `KubeDB` Ops-manager operator to update the resources of a Druid topology cluster. + +## Before You Begin + +- At first, you need to have a Kubernetes cluster, and the `kubectl` command-line tool must be configured to communicate with your cluster. If you do not already have a cluster, you can create one by using [kind](https://kind.sigs.k8s.io/docs/user/quick-start/). + +- Install `KubeDB` Provisioner and Ops-manager operator in your cluster following the steps [here](/docs/setup/README.md). + +- You should be familiar with the following `KubeDB` concepts: + - [Druid](/docs/guides/druid/concepts/druid.md) + - [Topology](/docs/guides/druid/clustering/overview/index.md) + - [DruidOpsRequest](/docs/guides/druid/concepts/druidopsrequest.md) + - [Vertical Scaling Overview](/docs/guides/druid/scaling/vertical-scaling/overview.md) + +To keep everything isolated, we are going to use a separate namespace called `demo` throughout this tutorial. + +```bash +$ kubectl create ns demo +namespace/demo created +``` + +> **Note:** YAML files used in this tutorial are stored in [docs/examples/druid](/docs/examples/druid) directory of [kubedb/docs](https://github.com/kubedb/docs) repository. + +## Apply Vertical Scaling on Topology Cluster + +Here, we are going to deploy a `Druid` topology cluster using a supported version by `KubeDB` operator. Then we are going to apply vertical scaling on it. + +### Prepare Druid Topology Cluster + +Now, we are going to deploy a `Druid` topology cluster database with version `28.0.1`. + +### Create External Dependency (Deep Storage) + +Before proceeding further, we need to prepare deep storage, which is one of the external dependency of Druid and used for storing the segments. It is a storage mechanism that Apache Druid does not provide. **Amazon S3**, **Google Cloud Storage**, or **Azure Blob Storage**, **S3-compatible storage** (like **Minio**), or **HDFS** are generally convenient options for deep storage. + +In this tutorial, we will run a `minio-server` as deep storage in our local `kind` cluster using `minio-operator` and create a bucket named `druid` in it, which the deployed druid database will use. + +```bash + +$ helm repo add minio https://operator.min.io/ +$ helm repo update minio +$ helm upgrade --install --namespace "minio-operator" --create-namespace "minio-operator" minio/operator --set operator.replicaCount=1 + +$ helm upgrade --install --namespace "demo" --create-namespace druid-minio minio/tenant \ +--set tenant.pools[0].servers=1 \ +--set tenant.pools[0].volumesPerServer=1 \ +--set tenant.pools[0].size=1Gi \ +--set tenant.certificate.requestAutoCert=false \ +--set tenant.buckets[0].name="druid" \ +--set tenant.pools[0].name="default" + +``` + +Now we need to create a `Secret` named `deep-storage-config`. It contains the necessary connection information using which the druid database will connect to the deep storage. + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: deep-storage-config + namespace: demo +stringData: + druid.storage.type: "s3" + druid.storage.bucket: "druid" + druid.storage.baseKey: "druid/segments" + druid.s3.accessKey: "minio" + druid.s3.secretKey: "minio123" + druid.s3.protocol: "http" + druid.s3.enablePathStyleAccess: "true" + druid.s3.endpoint.signingRegion: "us-east-1" + druid.s3.endpoint.url: "http://myminio-hl.demo.svc.cluster.local:9000/" +``` + +Let’s create the `deep-storage-config` Secret shown above: + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/scaling/vertical-scaling/yamls/deep-storage-config.yaml +secret/deep-storage-config created +``` + +### Deploy Druid Cluster + +In this section, we are going to deploy a Druid topology cluster. Then, in the next section we will update the resources of the database using `DruidOpsRequest` CRD. Below is the YAML of the `Druid` CR that we are going to create, + +```yaml +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-cluster + namespace: demo +spec: + version: 28.0.1 + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + routers: + replicas: 1 + deletionPolicy: Delete +``` + +Let's create the `Druid` CR we have shown above, + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/examples/druid/scaling/vertical-scaling/yamls/druid-cluster.yaml +druid.kubedb.com/druid-cluster created +``` + +Now, wait until `druid-cluster` has status `Ready`. i.e, + +```bash +$ kubectl get dr -n demo -w +NAME TYPE VERSION STATUS AGE +druid-cluster kubedb.com/v1aplha2 28.0.1 Provisioning 0s +druid-cluster kubedb.com/v1aplha2 28.0.1 Provisioning 24s +. +. +druid-cluster kubedb.com/v1aplha2 28.0.1 Ready 92s +``` + +Let's check the Pod containers resources for both `coordinators` and `historicals` of the Druid topology cluster. Run the following command to get the resources of the `coordinators` and `historicals` containers of the Druid topology cluster + +```bash +$ kubectl get pod -n demo druid-cluster-coordinators-0 -o json | jq '.spec.containers[].resources' +{ + "limits": { + "memory": "1Gi" + }, + "requests": { + "cpu": "500m", + "memory": "1Gi" + } +} +``` + +```bash +$ kubectl get pod -n demo druid-cluster-historicals-0 -o json | jq '.spec.containers[].resources' +{ + "limits": { + "memory": "1Gi" + }, + "requests": { + "cpu": "500m", + "memory": "1Gi" + } +} +``` +This is the default resources of the Druid topology cluster set by the `KubeDB` operator. + +We are now ready to apply the `DruidOpsRequest` CR to update the resources of this database. + +### Vertical Scaling + +Here, we are going to update the resources of the topology cluster to meet the desired resources after scaling. + +#### Create DruidOpsRequest + +In order to update the resources of the database, we have to create a `DruidOpsRequest` CR with our desired resources. Below is the YAML of the `DruidOpsRequest` CR that we are going to create, + +```yaml +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: druid-vscale + namespace: demo +spec: + type: VerticalScaling + databaseRef: + name: druid-cluster + verticalScaling: + coordinators: + resources: + requests: + memory: "1.2Gi" + cpu: "0.6" + limits: + memory: "1.2Gi" + cpu: "0.6" + historicals: + resources: + requests: + memory: "1.1Gi" + cpu: "0.6" + limits: + memory: "1.1Gi" + cpu: "0.6" + timeout: 5m + apply: IfReady +``` + +Here, + +- `spec.databaseRef.name` specifies that we are performing vertical scaling operation on `druid-cluster` cluster. +- `spec.type` specifies that we are performing `VerticalScaling` on druid. +- `spec.VerticalScaling.coordinators` specifies the desired resources of `coordinators` node after scaling. +- `spec.VerticalScaling.historicals` specifies the desired resources of `historicals` node after scaling. + +> **Note:** Similarly you can scale other druid nodes vertically by specifying the following fields: +> - For `overlords` use `spec.verticalScaling.overlords`. +> - For `brokers` use `spec.verticalScaling.brokers`. +> - For `middleManagers` use `spec.verticalScaling.middleManagers`. +> - For `routers` use `spec.verticalScaling.routers`. + +Let's create the `DruidOpsRequest` CR we have shown above, + +```bash +$ kubectl apply -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/scaling/vertical-scaling/yamls/druid-vscale.yaml +druidopsrequest.ops.kubedb.com/druid-vscale created +``` + +#### Verify Druid cluster resources have been updated successfully + +If everything goes well, `KubeDB` Ops-manager operator will update the resources of `Druid` object and related `PetSets` and `Pods`. + +Let's wait for `DruidOpsRequest` to be `Successful`. Run the following command to watch `DruidOpsRequest` CR, + +```bash +$ kubectl get druidopsrequest -n demo +NAME TYPE STATUS AGE +druid-vscale VerticalScaling Successful 3m56s +``` + +We can see from the above output that the `DruidOpsRequest` has succeeded. If we describe the `DruidOpsRequest` we will get an overview of the steps that were followed to scale the cluster. + +```bash +$ kubectl describe druidopsrequest -n demo druid-vscale +Name: druid-vscale +Namespace: demo +Labels: +Annotations: +API Version: ops.kubedb.com/v1alpha1 +Kind: DruidOpsRequest +Metadata: + Creation Timestamp: 2024-10-21T12:53:55Z + Generation: 1 + Managed Fields: + API Version: ops.kubedb.com/v1alpha1 + Fields Type: FieldsV1 + fieldsV1: + f:metadata: + f:annotations: + .: + f:kubectl.kubernetes.io/last-applied-configuration: + f:spec: + .: + f:apply: + f:databaseRef: + f:timeout: + f:type: + f:verticalScaling: + .: + f:coordinators: + .: + f:resources: + .: + f:limits: + .: + f:cpu: + f:memory: + f:requests: + .: + f:cpu: + f:memory: + f:historicals: + .: + f:resources: + .: + f:limits: + .: + f:cpu: + f:memory: + f:requests: + .: + f:cpu: + f:memory: + Manager: kubectl-client-side-apply + Operation: Update + Time: 2024-10-21T12:53:55Z + API Version: ops.kubedb.com/v1alpha1 + Fields Type: FieldsV1 + fieldsV1: + f:status: + .: + f:conditions: + f:observedGeneration: + f:phase: + Manager: kubedb-ops-manager + Operation: Update + Subresource: status + Time: 2024-10-21T12:54:23Z + Resource Version: 102002 + UID: fe8bb22f-02e8-4a10-9a78-fc211371d581 +Spec: + Apply: IfReady + Database Ref: + Name: druid-cluster + Timeout: 5m + Type: VerticalScaling + Vertical Scaling: + Coordinators: + Resources: + Limits: + Cpu: 0.6 + Memory: 1.2Gi + Requests: + Cpu: 0.6 + Memory: 1.2Gi + Historicals: + Resources: + Limits: + Cpu: 0.6 + Memory: 1.1Gi + Requests: + Cpu: 0.6 + Memory: 1.1Gi +Status: + Conditions: + Last Transition Time: 2024-10-21T12:53:55Z + Message: Druid ops-request has started to vertically scale the Druid nodes + Observed Generation: 1 + Reason: VerticalScaling + Status: True + Type: VerticalScaling + Last Transition Time: 2024-10-21T12:53:58Z + Message: Successfully updated PetSets Resources + Observed Generation: 1 + Reason: UpdatePetSets + Status: True + Type: UpdatePetSets + Last Transition Time: 2024-10-21T12:54:23Z + Message: Successfully Restarted Pods With Resources + Observed Generation: 1 + Reason: RestartPods + Status: True + Type: RestartPods + Last Transition Time: 2024-10-21T12:54:03Z + Message: get pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-cluster-coordinators-0 + Last Transition Time: 2024-10-21T12:54:03Z + Message: evict pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-cluster-coordinators-0 + Last Transition Time: 2024-10-21T12:54:08Z + Message: check pod running; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-cluster-coordinators-0 + Last Transition Time: 2024-10-21T12:54:13Z + Message: get pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-cluster-historicals-0 + Last Transition Time: 2024-10-21T12:54:13Z + Message: evict pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-cluster-historicals-0 + Last Transition Time: 2024-10-21T12:54:18Z + Message: check pod running; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-cluster-historicals-0 + Last Transition Time: 2024-10-21T12:54:23Z + Message: Successfully completed the vertical scaling for RabbitMQ + Observed Generation: 1 + Reason: Successful + Status: True + Type: Successful + Observed Generation: 1 + Phase: Successful +Events: + Type Reason Age From Message + ---- ------ ---- ---- ------- + Normal Starting 67s KubeDB Ops-manager Operator Start processing for DruidOpsRequest: demo/druid-vscale + Normal Starting 67s KubeDB Ops-manager Operator Pausing Druid databse: demo/druid-cluster + Normal Successful 67s KubeDB Ops-manager Operator Successfully paused Druid database: demo/druid-cluster for DruidOpsRequest: druid-vscale + Normal UpdatePetSets 64s KubeDB Ops-manager Operator Successfully updated PetSets Resources + Warning get pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 59s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 59s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-coordinators-0 54s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Warning get pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 49s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 49s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-historicals-0 44s KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Normal RestartPods 39s KubeDB Ops-manager Operator Successfully Restarted Pods With Resources + Normal Starting 39s KubeDB Ops-manager Operator Resuming Druid database: demo/druid-cluster + Normal Successful 39s KubeDB Ops-manager Operator Successfully resumed Druid database: demo/druid-cluster for DruidOpsRequest: druid-vscale +``` +Now, we are going to verify from one of the Pod yaml whether the resources of the topology cluster has updated to meet up the desired state, Let's check, + +```bash +$ kubectl get pod -n demo druid-cluster-coordinators-0 -o json | jq '.spec.containers[].resources' +{ + "limits": { + "cpu": "600m", + "memory": "1288490188800m" + }, + "requests": { + "cpu": "600m", + "memory": "1288490188800m" + } +} +$ kubectl get pod -n demo druid-cluster-historicals-1 -o json | jq '.spec.containers[].resources' +{ + "limits": { + "cpu": "600m", + "memory": "1181116006400m" + }, + "requests": { + "cpu": "600m", + "memory": "1181116006400m" + } +} +``` + +The above output verifies that we have successfully scaled up the resources of the Druid topology cluster. + +## Cleaning Up + +To clean up the Kubernetes resources created by this tutorial, run: + +```bash +kubectl delete dr -n demo druid-cluster +kubectl delete druidopsrequest -n demo druid-vscale +kubectl delete ns demo +``` + +## Next Steps + +- Detail concepts of [Druid object](/docs/guides/druid/concepts/druid.md). +- Different Druid topology clustering modes [here](/docs/guides/druid/clustering/_index.md). +- Monitor your Druid database with KubeDB using [out-of-the-box Prometheus operator](/docs/guides/druid/monitoring/using-prometheus-operator.md). + +[//]: # (- Monitor your Druid database with KubeDB using [out-of-the-box builtin-Prometheus](/docs/guides/druid/monitoring/using-builtin-prometheus.md).) +- Want to hack on KubeDB? Check our [contribution guidelines](/docs/CONTRIBUTING.md). diff --git a/docs/guides/druid/scaling/vertical-scaling/images/dr-vertical-scaling.png b/docs/guides/druid/scaling/vertical-scaling/images/dr-vertical-scaling.png new file mode 100644 index 0000000000000000000000000000000000000000..552bb0fb3028df843939c1b6f5512f09022c1812 GIT binary patch literal 73609 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 FzX40LUPJ%@ literal 0 HcmV?d00001 diff --git a/docs/guides/druid/scaling/vertical-scaling/overview.md b/docs/guides/druid/scaling/vertical-scaling/overview.md new file mode 100644 index 0000000000..2ddd690601 --- /dev/null +++ b/docs/guides/druid/scaling/vertical-scaling/overview.md @@ -0,0 +1,54 @@ +--- +title: Druid Vertical Scaling Overview +menu: + docs_{{ .version }}: + identifier: guides-druid-scaling-vertical-scaling-overview + name: Overview + parent: guides-druid-scaling-vertical-scaling + weight: 10 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- + +> New to KubeDB? Please start [here](/docs/README.md). + +# Druid Vertical Scaling + +This guide will give an overview on how KubeDB Ops-manager operator updates the resources(for example CPU and Memory etc.) of the `Druid`. + +## Before You Begin + +- You should be familiar with the following `KubeDB` concepts: + - [Druid](/docs/guides/kafka/concepts/kafka.md) + - [DruidOpsRequest](/docs/guides/kafka/concepts/kafkaopsrequest.md) + +## How Vertical Scaling Process Works + +The following diagram shows how KubeDB Ops-manager operator updates the resources of the `Druid`. Open the image in a new tab to see the enlarged version. + +

+  Vertical scaling process of Druid +
Fig: Vertical scaling process of Druid
+
+ +The vertical scaling process consists of the following steps: + +1. At first, a user creates a `Druid` Custom Resource (CR). + +2. `KubeDB` Provisioner operator watches the `Druid` CR. + +3. When the operator finds a `Druid` CR, it creates required number of `PetSets` and related necessary stuff like secrets, services, etc. + +4. Then, in order to update the resources(for example `CPU`, `Memory` etc.) of the `Druid` cluster, the user creates a `DruidOpsRequest` CR with desired information. + +5. `KubeDB` Ops-manager operator watches the `DruidOpsRequest` CR. + +6. When it finds a `DruidOpsRequest` CR, it halts the `Druid` object which is referred from the `DruidOpsRequest`. So, the `KubeDB` Provisioner operator doesn't perform any operations on the `Druid` object during the vertical scaling process. + +7. Then the `KubeDB` Ops-manager operator will update resources of the PetSet Pods to reach desired state. + +8. After the successful update of the resources of the PetSet's replica, the `KubeDB` Ops-manager operator updates the `Druid` object to reflect the updated state. + +9. After the successful update of the `Druid` resources, the `KubeDB` Ops-manager operator resumes the `Druid` object so that the `KubeDB` Provisioner operator resumes its usual operations. + +In the next docs, we are going to show a step by step guide on updating resources of Druid database using `DruidOpsRequest` CRD. \ No newline at end of file diff --git a/docs/guides/druid/scaling/vertical-scaling/yamls/deep-storage-config.yaml b/docs/guides/druid/scaling/vertical-scaling/yamls/deep-storage-config.yaml new file mode 100644 index 0000000000..3612595828 --- /dev/null +++ b/docs/guides/druid/scaling/vertical-scaling/yamls/deep-storage-config.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Secret +metadata: + name: deep-storage-config + namespace: demo +stringData: + druid.storage.type: "s3" + druid.storage.bucket: "druid" + druid.storage.baseKey: "druid/segments" + druid.s3.accessKey: "minio" + druid.s3.secretKey: "minio123" + druid.s3.protocol: "http" + druid.s3.enablePathStyleAccess: "true" + druid.s3.endpoint.signingRegion: "us-east-1" + druid.s3.endpoint.url: "http://myminio-hl.demo.svc.cluster.local:9000/" + diff --git a/docs/guides/druid/scaling/vertical-scaling/yamls/druid-cluster.yaml b/docs/guides/druid/scaling/vertical-scaling/yamls/druid-cluster.yaml new file mode 100644 index 0000000000..7a89d0dc91 --- /dev/null +++ b/docs/guides/druid/scaling/vertical-scaling/yamls/druid-cluster.yaml @@ -0,0 +1,15 @@ +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-cluster + namespace: demo +spec: + version: 28.0.1 + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + routers: + replicas: 1 + deletionPolicy: Delete diff --git a/docs/guides/druid/scaling/vertical-scaling/yamls/druid-vscale.yaml b/docs/guides/druid/scaling/vertical-scaling/yamls/druid-vscale.yaml new file mode 100644 index 0000000000..38cf25d3ca --- /dev/null +++ b/docs/guides/druid/scaling/vertical-scaling/yamls/druid-vscale.yaml @@ -0,0 +1,28 @@ +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: druid-vscale + namespace: demo +spec: + type: VerticalScaling + databaseRef: + name: druid-cluster + verticalScaling: + coordinators: + resources: + requests: + memory: "1.2Gi" + cpu: "0.6" + limits: + memory: "1.2Gi" + cpu: "0.6" + historicals: + resources: + requests: + memory: "1.1Gi" + cpu: "0.6" + limits: + memory: "1.1Gi" + cpu: "0.6" + timeout: 5m + apply: IfReady diff --git a/docs/guides/druid/tls/_index.md b/docs/guides/druid/tls/_index.md new file mode 100755 index 0000000000..2bf445ceea --- /dev/null +++ b/docs/guides/druid/tls/_index.md @@ -0,0 +1,10 @@ +--- +title: Run Druid with TLS +menu: + docs_{{ .version }}: + identifier: guides-druid-tls + name: TLS/SSL Encryption + parent: guides-druid + weight: 90 +menu_name: docs_{{ .version }} +--- diff --git a/docs/guides/druid/tls/guide.md b/docs/guides/druid/tls/guide.md new file mode 100644 index 0000000000..ead99ecbd5 --- /dev/null +++ b/docs/guides/druid/tls/guide.md @@ -0,0 +1,307 @@ +--- +title: Druid Combined TLS/SSL Encryption +menu: + docs_{{ .version }}: + identifier: guides-druid-tls-guide + name: Druid TLS/SSL + parent: guides-druid-tls + weight: 30 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- + +> New to KubeDB? Please start [here](/docs/README.md). + +# Run Druid with TLS/SSL (Transport Encryption) + +KubeDB supports providing TLS/SSL encryption for Druid. This tutorial will show you how to use KubeDB to run a Druid cluster with TLS/SSL encryption. + +## Before You Begin + +- At first, you need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. If you do not already have a cluster, you can create one by using [kind](https://kind.sigs.k8s.io/docs/user/quick-start/). + +- Install [`cert-manger`](https://cert-manager.io/docs/installation/) v1.0.0 or later to your cluster to manage your SSL/TLS certificates. + +- Now, install KubeDB cli on your workstation and KubeDB operator in your cluster following the steps [here](/docs/setup/README.md). + +- To keep things isolated, this tutorial uses a separate namespace called `demo` throughout this tutorial. + + ```bash + $ kubectl create ns demo + namespace/demo created + ``` + +> Note: YAML files used in this tutorial are stored in [docs/examples/druid](https://github.com/kubedb/docs/tree/{{< param "info.version" >}}/docs/examples/druid) folder in GitHub repository [kubedb/docs](https://github.com/kubedb/docs). + +## Overview + +KubeDB uses following crd fields to enable SSL/TLS encryption in Druid. + +- `spec:` + - `enableSSL` + - `tls:` + - `issuerRef` + - `certificate` + +Read about the fields in details in [druid concept](/docs/guides/druid/concepts/druid.md), + +`tls` is applicable for all types of Druid (i.e., `combined` and `topology`). + +Users must specify the `tls.issuerRef` field. KubeDB uses the `issuer` or `clusterIssuer` referenced in the `tls.issuerRef` field, and the certificate specs provided in `tls.certificate` to generate certificate secrets. These certificate secrets are then used to generate required certificates including `ca.crt`, `tls.crt`, `tls.key`, `keystore.jks` and `truststore.jks`. + +## Create Issuer/ ClusterIssuer + +We are going to create an example `Issuer` that will be used throughout the duration of this tutorial to enable SSL/TLS in Druid. Alternatively, you can follow this [cert-manager tutorial](https://cert-manager.io/docs/configuration/ca/) to create your own `Issuer`. + +- Start off by generating you ca certificates using openssl. + +```bash +openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ./ca.key -out ./ca.crt -subj "/CN=druid/O=kubedb" +``` + +- Now create a ca-secret using the certificate files you have just generated. + +```bash +kubectl create secret tls druid-ca \ + --cert=ca.crt \ + --key=ca.key \ + --namespace=demo +``` + +Now, create an `Issuer` using the `ca-secret` you have just created. The `YAML` file looks like this: + +```yaml +apiVersion: cert-manager.io/v1 +kind: Issuer +metadata: + name: druid-ca-issuer + namespace: demo +spec: + ca: + secretName: druid-ca +``` + +Apply the `YAML` file: + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/tls/yamls/druid-ca-issuer.yaml +issuer.cert-manager.io/druid-ca-issuer created +``` + +## TLS/SSL encryption in Druid Cluster + +### Create External Dependency (Deep Storage) + +Before proceeding further, we need to prepare deep storage, which is one of the external dependency of Druid and used for storing the segments. It is a storage mechanism that Apache Druid does not provide. **Amazon S3**, **Google Cloud Storage**, or **Azure Blob Storage**, **S3-compatible storage** (like **Minio**), or **HDFS** are generally convenient options for deep storage. + +In this tutorial, we will run a `minio-server` as deep storage in our local `kind` cluster using `minio-operator` and create a bucket named `druid` in it, which the deployed druid database will use. + +```bash + +$ helm repo add minio https://operator.min.io/ +$ helm repo update minio +$ helm upgrade --install --namespace "minio-operator" --create-namespace "minio-operator" minio/operator --set operator.replicaCount=1 + +$ helm upgrade --install --namespace "demo" --create-namespace druid-minio minio/tenant \ +--set tenant.pools[0].servers=1 \ +--set tenant.pools[0].volumesPerServer=1 \ +--set tenant.pools[0].size=1Gi \ +--set tenant.certificate.requestAutoCert=false \ +--set tenant.buckets[0].name="druid" \ +--set tenant.pools[0].name="default" + +``` + +Now we need to create a `Secret` named `deep-storage-config`. It contains the necessary connection information using which the druid database will connect to the deep storage. + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: deep-storage-config + namespace: demo +stringData: + druid.storage.type: "s3" + druid.storage.bucket: "druid" + druid.storage.baseKey: "druid/segments" + druid.s3.accessKey: "minio" + druid.s3.secretKey: "minio123" + druid.s3.protocol: "http" + druid.s3.enablePathStyleAccess: "true" + druid.s3.endpoint.signingRegion: "us-east-1" + druid.s3.endpoint.url: "http://myminio-hl.demo.svc.cluster.local:9000/" +``` + +Let’s create the `deep-storage-config` Secret shown above: + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/tls/yamls/deep-storage-config.yaml +secret/deep-storage-config created +``` + +Now, lets go ahead and create a druid database. + +```yaml +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-cluster-tls + namespace: demo +spec: + version: 28.0.1 + enableSSL: true + tls: + issuerRef: + apiGroup: "cert-manager.io" + kind: Issuer + name: druid-ca-issuer + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + routers: + replicas: 1 + deletionPolicy: Delete +``` + +### Deploy Druid Topology Cluster with TLS/SSL + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/tls/yamls/druid-cluster-tls.yaml +druid.kubedb.com/druid-cluster-tls created +``` + +Now, wait until `druid-cluster-tls created` has status `Ready`. i.e, + +```bash +$ kubectl get druid -n demo -w + +Every 2.0s: kubectl get druid -n demo aadee: Fri Sep 6 12:34:51 2024 +NAME TYPE VERSION STATUS AGE +druid-cluster-tls kubedb.com/v1alpha2 28.0.1 Ready 20s +druid-cluster-tls kubedb.com/v1alpha2 28.0.1 Provisioning 1m +... +... +druid-cluster-tls kubedb.com/v1alpha2 28.0.1 Ready 38m +``` + +### Verify TLS/SSL in Druid Cluster + +```bash +$ kubectl describe secret druid-cluster-tls-client-cert -n demo +Name: druid-cluster-tls-client-cert +Namespace: demo +Labels: app.kubernetes.io/component=database + app.kubernetes.io/instance=druid-cluster-tls + app.kubernetes.io/managed-by=kubedb.com + app.kubernetes.io/name=druids.kubedb.com + controller.cert-manager.io/fao=true +Annotations: cert-manager.io/alt-names: + *.druid-cluster-tls-pods.demo.svc.cluster.local,druid-cluster-tls-brokers-0.druid-cluster-tls-pods.demo.svc.cluster.local:8282,druid-clust... + cert-manager.io/certificate-name: druid-cluster-tls-client-cert + cert-manager.io/common-name: druid-cluster-tls-pods.demo.svc + cert-manager.io/ip-sans: 127.0.0.1 + cert-manager.io/issuer-group: cert-manager.io + cert-manager.io/issuer-kind: Issuer + cert-manager.io/issuer-name: druid-ca-issuer + cert-manager.io/uri-sans: + +Type: kubernetes.io/tls + +Data +==== +ca.crt: 1147 bytes +keystore.jks: 3720 bytes +tls-combined.pem: 3835 bytes +tls.crt: 2126 bytes +tls.key: 1708 bytes +truststore.jks: 865 bytes +``` + +Now, Lets exec into a druid coordinators pod and verify the configuration that the TLS is enabled. + +```bash +$ kubectl exec -it -n demo druid-cluster-tls-coordinators-0 -- bash +Defaulted container "druid" out of: druid, init-druid (init) +bash-5.1$ cat conf/druid/cluster/_common/common.runtime.properties +druid.client.https.trustStorePassword={"type": "environment", "variable": "DRUID_KEY_STORE_PASSWORD"} +druid.client.https.trustStorePath=/opt/druid/ssl/truststore.jks +druid.client.https.trustStoreType=jks +druid.emitter=noop +druid.enablePlaintextPort=false +druid.enableTlsPort=true +druid.metadata.mysql.ssl.clientCertificateKeyStorePassword=password +druid.metadata.mysql.ssl.clientCertificateKeyStoreType=JKS +druid.metadata.mysql.ssl.clientCertificateKeyStoreUrl=/opt/druid/ssl/metadata/keystore.jks +druid.metadata.mysql.ssl.useSSL=true +druid.server.https.certAlias=druid +druid.server.https.keyStorePassword={"type": "environment", "variable": "DRUID_KEY_STORE_PASSWORD"} +druid.server.https.keyStorePath=/opt/druid/ssl/keystore.jks +druid.server.https.keyStoreType=jks +``` + +We can see from the above output that, all the TLS related configuration is added. Here the `MySQL` and `ZooKeeper` deployed with Druid is also TLS secure and their connection configs are added as well. + +#### Verify TLS/SSL using Druid UI + +To check follow the following steps: + +Druid uses separate ports for TLS/SSL. While the plaintext port for `routers` node is `8888`. For TLS, it is `9088`. Hence, we will use that port to access the UI. + +First port-forward the port `9088` to local machine: + +```bash +$ kubectl port-forward -n demo svc/druid-cluster-tls-routers 9088 +Forwarding from 127.0.0.1:9088 -> 9088 +Forwarding from [::1]:9088 -> 9088 +``` + + +Now hit the `https://localhost:9088/` from any browser. Here you may select `Advance` and then `Proceed to localhost (unsafe)` or you can add the `ca.crt` from the secret `druid-cluster-tls-client-cert` to your browser's Authorities. + +After that you will be prompted to provide the credential of the druid database. By following the steps discussed below, you can get the credential generated by the KubeDB operator for your Druid database. + +**Connection information:** + +- Username: + + ```bash + $ kubectl get secret -n demo druid-cluster-tls-admin-cred -o jsonpath='{.data.username}' | base64 -d + admin + ``` + +- Password: + + ```bash + $ kubectl get secret -n demo druid-cluster-tls-admin-cred -o jsonpath='{.data.password}' | base64 -d + LzJtVRX5E8MorFaf + ``` + +After providing the credentials correctly, you should be able to access the web console like shown below. + +

+  lifecycle +

+ +From the above output, we can see that the connection is secure. + +## Cleaning up + +To cleanup the Kubernetes resources created by this tutorial, run: + +```bash +kubectl delete druid -n demo druid-cluster-tls +kubectl delete issuer -n demo druid-ca-issuer +kubectl delete ns demo +``` + +## Next Steps + +- Detail concepts of [Druid object](/docs/guides/druid/concepts/druid.md). +- Monitor your Druid cluster with KubeDB using [out-of-the-box Prometheus operator](/docs/guides/druid/monitoring/using-prometheus-operator.md). +- Monitor your Druid cluster with KubeDB using [out-of-the-box builtin-Prometheus](/docs/guides/druid/monitoring/using-builtin-prometheus.md). + +[//]: # (- Use [kubedb cli](/docs/guides/druid/cli/cli.md) to manage databases like kubectl for Kubernetes.) +- Detail concepts of [Druid object](/docs/guides/druid/concepts/druid.md). +- Want to hack on KubeDB? Check our [contribution guidelines](/docs/CONTRIBUTING.md). diff --git a/docs/guides/druid/tls/images/druid-ui.png b/docs/guides/druid/tls/images/druid-ui.png new file mode 100644 index 0000000000000000000000000000000000000000..9f173c38c2d03c2ebe86cb9453506478e86eb9bd GIT binary patch literal 99499 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

OARi)?=J8#vuzjj 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

*(5D{^Y!StGY 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 IeD)vz3tjT>3;+NC literal 0 HcmV?d00001 diff --git a/docs/guides/druid/tls/images/tls.png b/docs/guides/druid/tls/images/tls.png new file mode 100644 index 0000000000000000000000000000000000000000..7f21589742423303355ef6edc0755a7c24459cc8 GIT binary patch literal 41254 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
Fp?PS5iRix@K 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 literal 0 HcmV?d00001 diff --git a/docs/guides/druid/tls/overview.md b/docs/guides/druid/tls/overview.md new file mode 100644 index 0000000000..2022e51955 --- /dev/null +++ b/docs/guides/druid/tls/overview.md @@ -0,0 +1,70 @@ +--- +title: Druid TLS/SSL Encryption Overview +menu: + docs_{{ .version }}: + identifier: guides-druid-tls-overview + name: Overview + parent: guides-druid-tls + weight: 10 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- + +> New to KubeDB? Please start [here](/docs/README.md). + +# Druid TLS/SSL Encryption + +**Prerequisite :** To configure TLS/SSL in `Druid`, `KubeDB` uses `cert-manager` to issue certificates. So first you have to make sure that the cluster has `cert-manager` installed. To install `cert-manager` in your cluster following steps [here](https://cert-manager.io/docs/installation/kubernetes/). + +To issue a certificate, the following crd of `cert-manager` is used: + +- `Issuer/ClusterIssuer`: Issuers, and ClusterIssuers represent certificate authorities (CAs) that are able to generate signed certificates by honoring certificate signing requests. All cert-manager certificates require a referenced issuer that is in a ready condition to attempt to honor the request. You can learn more details [here](https://cert-manager.io/docs/concepts/issuer/). + +- `Certificate`: `cert-manager` has the concept of Certificates that define a desired x509 certificate which will be renewed and kept up to date. You can learn more details [here](https://cert-manager.io/docs/concepts/certificate/). + +**Druid CRD Specification :** + +KubeDB uses following crd fields to enable SSL/TLS encryption in `Druid`. + +- `spec:` + - `enableSSL` + - `tls:` + - `issuerRef` + - `certificates` + +Read about the fields in details from [druid concept](/docs/guides/druid/concepts/druid.md), + +When, `enableSSL` is set to `true`, the users must specify the `tls.issuerRef` field. `KubeDB` uses the `issuer` or `clusterIssuer` referenced in the `tls.issuerRef` field, and the certificate specs provided in `tls.certificate` to generate certificate secrets using `Issuer/ClusterIssuers` specification. These certificates secrets including `ca.crt`, `tls.crt` and `tls.key` etc. are used to configure `druid` server and clients. + +## How TLS/SSL configures in Druid + +The following figure shows how `KubeDB` enterprise used to configure TLS/SSL in Druid. Open the image in a new tab to see the enlarged version. + +
+Deploy Druid with TLS/SSL +
Fig: Deploy Druid with TLS/SSL
+
+ +Deploying Druid with TLS/SSL configuration process consists of the following steps: + +1. At first, a user creates a `Issuer/ClusterIssuer` cr. + +2. Then the user creates a `Druid` CR which refers to the `Issuer/ClusterIssuer` CR that the user created in the previous step. + +3. `KubeDB` Provisioner operator watches for the `Druid` cr. + +4. When it finds one, it creates `Secret`, `Service`, etc. for the `Druid` cluster. + +5. `KubeDB` Ops-manager operator watches for `Druid`(5c), `Issuer/ClusterIssuer`(5b), `Secret` and `Service`(5a). + +6. When it finds all the resources(`Druid`, `Issuer/ClusterIssuer`, `Secret`, `Service`), it creates `Certificates` by using `tls.issuerRef` and `tls.certificates` field specification from `Druid` cr. + +7. `cert-manager` watches for certificates. + +8. When it finds one, it creates certificate secrets `tls-secrets`(server, client, exporter secrets etc.) that holds the actual certificate signed by the CA. + +9. `KubeDB` Provisioner operator watches for the Certificate secrets `tls-secrets`. + +10. When it finds all the tls-secret, it creates the related `PetSets` so that Druid database can be configured with TLS/SSL. + +In the next doc, we are going to show a step-by-step guide on how to configure a `Druid` cluster with TLS/SSL. \ No newline at end of file diff --git a/docs/guides/druid/tls/yamls/deep-storage-config.yaml b/docs/guides/druid/tls/yamls/deep-storage-config.yaml new file mode 100644 index 0000000000..3612595828 --- /dev/null +++ b/docs/guides/druid/tls/yamls/deep-storage-config.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Secret +metadata: + name: deep-storage-config + namespace: demo +stringData: + druid.storage.type: "s3" + druid.storage.bucket: "druid" + druid.storage.baseKey: "druid/segments" + druid.s3.accessKey: "minio" + druid.s3.secretKey: "minio123" + druid.s3.protocol: "http" + druid.s3.enablePathStyleAccess: "true" + druid.s3.endpoint.signingRegion: "us-east-1" + druid.s3.endpoint.url: "http://myminio-hl.demo.svc.cluster.local:9000/" + diff --git a/docs/guides/druid/tls/yamls/druid-ca-issuer.yaml b/docs/guides/druid/tls/yamls/druid-ca-issuer.yaml new file mode 100644 index 0000000000..d6298c972c --- /dev/null +++ b/docs/guides/druid/tls/yamls/druid-ca-issuer.yaml @@ -0,0 +1,8 @@ +apiVersion: cert-manager.io/v1 +kind: Issuer +metadata: + name: druid-ca-issuer + namespace: demo +spec: + ca: + secretName: druid-ca diff --git a/docs/guides/druid/tls/yamls/druid-cluster-tls.yaml b/docs/guides/druid/tls/yamls/druid-cluster-tls.yaml new file mode 100644 index 0000000000..902b5b36d4 --- /dev/null +++ b/docs/guides/druid/tls/yamls/druid-cluster-tls.yaml @@ -0,0 +1,21 @@ +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-cluster-tls + namespace: demo +spec: + version: 28.0.1 + enableSSL: true + tls: + issuerRef: + apiGroup: "cert-manager.io" + kind: Issuer + name: druid-ca-issuer + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + routers: + replicas: 1 + deletionPolicy: Delete diff --git a/docs/guides/druid/update-version/_index.md b/docs/guides/druid/update-version/_index.md new file mode 100644 index 0000000000..26c6ab4da1 --- /dev/null +++ b/docs/guides/druid/update-version/_index.md @@ -0,0 +1,10 @@ +--- +title: Update Version +menu: + docs_{{ .version }}: + identifier: guides-druid-update-version + name: Update Version + parent: guides-druid + weight: 60 +menu_name: docs_{{ .version }} +--- \ No newline at end of file diff --git a/docs/guides/druid/update-version/guide.md b/docs/guides/druid/update-version/guide.md new file mode 100644 index 0000000000..f5c31ca64d --- /dev/null +++ b/docs/guides/druid/update-version/guide.md @@ -0,0 +1,448 @@ +--- +title: Update Version of Druid +menu: + docs_{{ .version }}: + identifier: guides-druid-update-version-guide + name: Update Druid Version + parent: guides-druid-update-version + weight: 20 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- +> New to KubeDB? Please start [here](/docs/README.md). + +# Update version of Druid + +This guide will show you how to use `KubeDB` Ops-manager operator to update the version of `Druid` Combined or Topology. + +## Before You Begin + +- At first, you need to have a Kubernetes cluster, and the `kubectl` command-line tool must be configured to communicate with your cluster. If you do not already have a cluster, you can create one by using [kind](https://kind.sigs.k8s.io/docs/user/quick-start/). + +- Install `KubeDB` Provisioner and Ops-manager operator in your cluster following the steps [here](/docs/setup/README.md). + +- You should be familiar with the following `KubeDB` concepts: + - [Druid](/docs/guides/druid/concepts/druid.md) + - [DruidOpsRequest](/docs/guides/druid/concepts/druidopsrequest.md) + - [Updating Overview](/docs/guides/druid/update-version/overview.md) + +To keep everything isolated, we are going to use a separate namespace called `demo` throughout this tutorial. + +```bash +$ kubectl create ns demo +namespace/demo created +``` + +> **Note:** YAML files used in this tutorial are stored in [docs/examples/druid](/docs/examples/druid) directory of [kubedb/docs](https://github.com/kube/docs) repository. + +## Prepare Druid + +Now, we are going to deploy a `Druid` cluster with version `28.0.1`. + +### Create External Dependency (Deep Storage) + +Before proceeding further, we need to prepare deep storage, which is one of the external dependency of Druid and used for storing the segments. It is a storage mechanism that Apache Druid does not provide. **Amazon S3**, **Google Cloud Storage**, or **Azure Blob Storage**, **S3-compatible storage** (like **Minio**), or **HDFS** are generally convenient options for deep storage. + +In this tutorial, we will run a `minio-server` as deep storage in our local `kind` cluster using `minio-operator` and create a bucket named `druid` in it, which the deployed druid database will use. + +```bash + +$ helm repo add minio https://operator.min.io/ +$ helm repo update minio +$ helm upgrade --install --namespace "minio-operator" --create-namespace "minio-operator" minio/operator --set operator.replicaCount=1 + +$ helm upgrade --install --namespace "demo" --create-namespace druid-minio minio/tenant \ +--set tenant.pools[0].servers=1 \ +--set tenant.pools[0].volumesPerServer=1 \ +--set tenant.pools[0].size=1Gi \ +--set tenant.certificate.requestAutoCert=false \ +--set tenant.buckets[0].name="druid" \ +--set tenant.pools[0].name="default" + +``` + +Now we need to create a `Secret` named `deep-storage-config`. It contains the necessary connection information using which the druid database will connect to the deep storage. + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: deep-storage-config + namespace: demo +stringData: + druid.storage.type: "s3" + druid.storage.bucket: "druid" + druid.storage.baseKey: "druid/segments" + druid.s3.accessKey: "minio" + druid.s3.secretKey: "minio123" + druid.s3.protocol: "http" + druid.s3.enablePathStyleAccess: "true" + druid.s3.endpoint.signingRegion: "us-east-1" + druid.s3.endpoint.url: "http://myminio-hl.demo.svc.cluster.local:9000/" +``` + +Let’s create the `deep-storage-config` Secret shown above: + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/update-version/yamls/deep-storage-config.yaml +secret/deep-storage-config created +``` + +### Deploy Druid + +In this section, we are going to deploy a Druid topology cluster. Then, in the next section we will update the version using `DruidOpsRequest` CRD. Below is the YAML of the `Druid` CR that we are going to create, + +```yaml +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-quickstart + namespace: demo +spec: + version: 28.0.1 + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + routers: + replicas: 1 + deletionPolicy: Delete +``` + +Let's create the `Druid` CR we have shown above, + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/update-version/yamls/druid-cluster.yaml +druid.kubedb.com/druid-cluster created +``` + +Now, wait until `druid-cluster` created has status `Ready`. i.e, + +```bash +$ kubectl get dr -n demo -w +NAME TYPE VERSION STATUS AGE +druid-cluster kubedb.com/v1aplha2 28.0.1 Provisioning 0s +druid-cluster kubedb.com/v1aplha2 28.0.1 Provisioning 55s +. +. +druid-cluster kubedb.com/v1aplha2 28.0.1 Ready 119s +``` + +We are now ready to apply the `DruidOpsRequest` CR to update. + +#### Check Druid Version from UI: + +You can also see the version of druid cluster from the druid ui. For that, follow the following steps: + +First, port-forward the port `8888` to local machine: + +```bash +$ kubectl port-forward -n demo svc/druid-cluster-routers 8888 +Forwarding from 127.0.0.1:8888 -> 8888 +Forwarding from [::1]:8888 -> 8888 +``` + +Now hit the `http://localhost:8888` from any browser, and you will be prompted to provide the credential of the druid database. By following the steps discussed below, you can get the credential generated by the KubeDB operator for your Druid database. + +**Connection information:** + +- Username: + + ```bash + $ kubectl get secret -n demo druid-cluster-admin-cred -o jsonpath='{.data.username}' | base64 -d + admin + ``` + +- Password: + + ```bash + $ kubectl get secret -n demo druid-cluster-admin-cred -o jsonpath='{.data.password}' | base64 -d + LzJtVRX5E8MorFaf + ``` + +After providing the credentials correctly, you should be able to access the web console like shown below. + +

+  lifecycle +

+ + +Here, we can see that the version of the druid cluster is `28.0.1`. + +### Update Druid Version + +Here, we are going to update `Druid` from `28.0.1` to `30.0.0`. + +#### Create DruidOpsRequest: + +In order to update the version, we have to create a `DruidOpsRequest` CR with your desired version that is supported by `KubeDB`. Below is the YAML of the `DruidOpsRequest` CR that we are going to create, + +```yaml +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: druid-update-version + namespace: demo +spec: + type: UpdateVersion + databaseRef: + name: druid-cluster + updateVersion: + targetVersion: 30.0.0 + timeout: 5m + apply: IfReady +``` + +Here, + +- `spec.databaseRef.name` specifies that we are performing operation on `druid-cluster` Druid. +- `spec.type` specifies that we are going to perform `UpdateVersion` on our database. +- `spec.updateVersion.targetVersion` specifies the expected version of the database `30.0.0`. + +Let's create the `DruidOpsRequest` CR we have shown above, + +```bash +$ kubectl apply -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/update-version/yamls/druid-hscale-up.yaml +druidopsrequest.ops.kubedb.com/druid-update-version created +``` + +#### Verify Druid version updated successfully + +If everything goes well, `KubeDB` Ops-manager operator will update the image of `Druid` object and related `PetSets` and `Pods`. + +Let's wait for `DruidOpsRequest` to be `Successful`. Run the following command to watch `DruidOpsRequest` CR, + +```bash +$ watch kubectl get druidopsrequest -n demo +NAME TYPE STATUS AGE +druid-update-version UpdateVersion Successful 2m6s +``` + +We can see from the above output that the `DruidOpsRequest` has succeeded. If we describe the `DruidOpsRequest` we will get an overview of the steps that were followed to update the database version. + +```bash +$ kubectl describe druidopsrequest -n demo druid-update-version +Name: druid-update-version +Namespace: demo +Labels: +Annotations: +API Version: ops.kubedb.com/v1alpha1 +Kind: DruidOpsRequest +Metadata: + Creation Timestamp: 2024-10-21T13:04:51Z + Generation: 1 + Managed Fields: + API Version: ops.kubedb.com/v1alpha1 + Fields Type: FieldsV1 + fieldsV1: + f:metadata: + f:annotations: + .: + f:kubectl.kubernetes.io/last-applied-configuration: + f:spec: + .: + f:apply: + f:databaseRef: + f:timeout: + f:type: + f:updateVersion: + .: + f:targetVersion: + Manager: kubectl-client-side-apply + Operation: Update + Time: 2024-10-21T13:04:51Z + API Version: ops.kubedb.com/v1alpha1 + Fields Type: FieldsV1 + fieldsV1: + f:status: + .: + f:conditions: + f:observedGeneration: + f:phase: + Manager: kubedb-ops-manager + Operation: Update + Subresource: status + Time: 2024-10-21T13:08:46Z + Resource Version: 103855 + UID: 5d470e24-37fd-4e16-b7a3-33040dcefe3d +Spec: + Apply: IfReady + Database Ref: + Name: druid-cluster + Timeout: 5m + Type: UpdateVersion + Update Version: + Target Version: 30.0.0 +Status: + Conditions: + Last Transition Time: 2024-10-21T13:04:51Z + Message: Druid ops-request has started to update version + Observed Generation: 1 + Reason: UpdateVersion + Status: True + Type: UpdateVersion + Last Transition Time: 2024-10-21T13:04:56Z + Message: successfully reconciled the Druid with updated version + Observed Generation: 1 + Reason: UpdatePetSets + Status: True + Type: UpdatePetSets + Last Transition Time: 2024-10-21T13:08:46Z + Message: Successfully Restarted Druid nodes + Observed Generation: 1 + Reason: RestartPods + Status: True + Type: RestartPods + Last Transition Time: 2024-10-21T13:05:01Z + Message: get pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-cluster-historicals-0 + Last Transition Time: 2024-10-21T13:05:01Z + Message: evict pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-cluster-historicals-0 + Last Transition Time: 2024-10-21T13:08:01Z + Message: check pod running; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-cluster-historicals-0 + Last Transition Time: 2024-10-21T13:08:06Z + Message: get pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-cluster-middlemanagers-0 + Last Transition Time: 2024-10-21T13:08:06Z + Message: evict pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-cluster-middlemanagers-0 + Last Transition Time: 2024-10-21T13:08:11Z + Message: check pod running; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-cluster-middlemanagers-0 + Last Transition Time: 2024-10-21T13:08:16Z + Message: get pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-cluster-brokers-0 + Last Transition Time: 2024-10-21T13:08:16Z + Message: evict pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-cluster-brokers-0 + Last Transition Time: 2024-10-21T13:08:21Z + Message: check pod running; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-cluster-brokers-0 + Last Transition Time: 2024-10-21T13:08:26Z + Message: get pod; ConditionStatus:True; PodName:druid-cluster-routers-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-cluster-routers-0 + Last Transition Time: 2024-10-21T13:08:26Z + Message: evict pod; ConditionStatus:True; PodName:druid-cluster-routers-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-cluster-routers-0 + Last Transition Time: 2024-10-21T13:08:31Z + Message: check pod running; ConditionStatus:True; PodName:druid-cluster-routers-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-cluster-routers-0 + Last Transition Time: 2024-10-21T13:08:36Z + Message: get pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Observed Generation: 1 + Status: True + Type: GetPod--druid-cluster-coordinators-0 + Last Transition Time: 2024-10-21T13:08:36Z + Message: evict pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Observed Generation: 1 + Status: True + Type: EvictPod--druid-cluster-coordinators-0 + Last Transition Time: 2024-10-21T13:08:41Z + Message: check pod running; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Observed Generation: 1 + Status: True + Type: CheckPodRunning--druid-cluster-coordinators-0 + Last Transition Time: 2024-10-21T13:08:46Z + Message: Successfully completed update druid version + Observed Generation: 1 + Reason: Successful + Status: True + Type: Successful + Observed Generation: 1 + Phase: Successful +Events: + Type Reason Age From Message + ---- ------ ---- ---- ------- + Normal Starting 21m KubeDB Ops-manager Operator Start processing for DruidOpsRequest: demo/druid-update-version + Normal UpdatePetSets 21m KubeDB Ops-manager Operator successfully reconciled the Druid with updated version + Warning get pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 21m KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 21m KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Warning check pod running; ConditionStatus:False; PodName:druid-cluster-historicals-0 21m KubeDB Ops-manager Operator check pod running; ConditionStatus:False; PodName:druid-cluster-historicals-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-historicals-0 18m KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-historicals-0 + Warning get pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 18m KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 18m KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 18m KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-middlemanagers-0 + Warning get pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 17m KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 17m KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-brokers-0 17m KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-brokers-0 + Warning get pod; ConditionStatus:True; PodName:druid-cluster-routers-0 17m KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-routers-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-routers-0 17m KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-routers-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-routers-0 17m KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-routers-0 + Warning get pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 17m KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Warning evict pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 17m KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Warning check pod running; ConditionStatus:True; PodName:druid-cluster-coordinators-0 17m KubeDB Ops-manager Operator check pod running; ConditionStatus:True; PodName:druid-cluster-coordinators-0 + Normal RestartPods 17m KubeDB Ops-manager Operator Successfully Restarted Druid nodes + Normal Starting 17m KubeDB Ops-manager Operator Resuming Druid database: demo/druid-cluster + Normal Successful 17m KubeDB Ops-manager Operator Successfully resumed Druid database: demo/druid-cluster for DruidOpsRequest: druid-update-version +``` + +Now, we are going to verify whether the `Druid` and the related `PetSets` and their `Pods` have the new version image. Let's check, + +```bash +$ kubectl get dr -n demo druid-cluster -o=jsonpath='{.spec.version}{"\n"}' +30.0.0 + +$ kubectl get petset -n demo druid-cluster-brokers -o=jsonpath='{.spec.template.spec.containers[0].image}{"\n"}' +ghcr.io/appscode-images/druid:30.0.0@sha256:4cd60a1dc6a124e27e91ec52ca39e2b9ca6809df915ae2dd712a2dd7462626d7 + +$ kubectl get pods -n demo druid-cluster-brokers-0 -o=jsonpath='{.spec.containers[0].image}{"\n"}' +ghcr.io/appscode-images/druid:30.0.0 +``` + +You can see from above, our `Druid` has been updated with the new version. So, the updateVersion process is successfully completed. + +#### Verify updated Druid Version from UI: + +You can also see the version of druid cluster from the druid ui by following the steps described previously in this tutorial. [Check Druid Version from UI](/docs/guides/druid/update-version/guide.md/#Check-Druid-Version-from-UI) + +If you follow the steps properly, you should be able to see that the version is upgraded to `30.0.0` from the druid console as shown below. + +

+  lifecycle +

+ +## Cleaning Up + +To clean up the Kubernetes resources created by this tutorial, run: + +```bash +kubectl delete druidopsrequest -n demo druid-update-version +kubectl delete dr -n demo druid-cluster +kubectl delete ns demo +``` + +## Next Steps + +- Detail concepts of [Druid object](/docs/guides/druid/concepts/druid.md). +- Different Druid topology clustering modes [here](/docs/guides/druid/clustering/_index.md). +- Monitor your Druid database with KubeDB using [out-of-the-box Prometheus operator](/docs/guides/druid/monitoring/using-prometheus-operator.md). + +[//]: # (- Monitor your Druid database with KubeDB using [out-of-the-box builtin-Prometheus](/docs/guides/druid/monitoring/using-builtin-prometheus.md).) +- Want to hack on KubeDB? Check our [contribution guidelines](/docs/CONTRIBUTING.md). diff --git a/docs/guides/druid/update-version/images/dr-update-version.png b/docs/guides/druid/update-version/images/dr-update-version.png new file mode 100644 index 0000000000000000000000000000000000000000..b61db35bc0c38e7510cca5058116418082965f47 GIT binary patch literal 73376 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≪2QOj{~2U`McDf#V2Ow=sqAb5r_~t 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 KMb*U{N&f*F)3GA} literal 0 HcmV?d00001 diff --git a/docs/guides/druid/update-version/images/druid-ui-28.png b/docs/guides/druid/update-version/images/druid-ui-28.png new file mode 100644 index 0000000000000000000000000000000000000000..d5c74a4ad26a8775f6325261da016fc7b6115e8b GIT binary patch literal 46732 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 literal 0 HcmV?d00001 diff --git a/docs/guides/druid/update-version/images/druid-ui-30.png b/docs/guides/druid/update-version/images/druid-ui-30.png new file mode 100644 index 0000000000000000000000000000000000000000..f1da2d8ef12c591105765e6520d0ac532d62f52d GIT binary patch literal 48517 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�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

    4k2>!W!f;5D~QsAVr%81sqC+j*6n6WJQdo)6y&K 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 New to KubeDB? Please start [here](/docs/README.md). + +# Druid Update Version Overview + +This guide will give you an overview on how KubeDB Ops-manager operator update the version of `Druid`. + +## Before You Begin + +- You should be familiar with the following `KubeDB` concepts: + - [Druid](/docs/guides/druid/concepts/druid.md) + - [DruidOpsRequest](/docs/guides/druid/concepts/druidopsrequest.md) + +## How update version Process Works + +The following diagram shows how KubeDB Ops-manager operator used to update the version of `Druid`. Open the image in a new tab to see the enlarged version. + +
    +  updating Process of Druid +
    Fig: updating Process of Druid
    +
    + +The updating process consists of the following steps: + +1. At first, a user creates a `Druid` Custom Resource (CR). + +2. `KubeDB` Provisioner operator watches the `Druid` CR. + +3. When the operator finds a `Druid` CR, it creates required number of `PetSets` and related necessary stuff like secrets, services, etc. + +4. Then, in order to update the version of the `Druid` database the user creates a `DruidOpsRequest` CR with the desired version. + +5. `KubeDB` Ops-manager operator watches the `DruidOpsRequest` CR. + +6. When it finds a `DruidOpsRequest` CR, it halts the `Druid` object which is referred from the `DruidOpsRequest`. So, the `KubeDB` Provisioner operator doesn't perform any operations on the `Druid` object during the updating process. + +7. By looking at the target version from `DruidOpsRequest` CR, `KubeDB` Ops-manager operator updates the images of all the `PetSets`. + +8. After successfully updating the `PetSets` and their `Pods` images, the `KubeDB` Ops-manager operator updates the image of the `Druid` object to reflect the updated state of the database. + +9. After successfully updating of `Druid` object, the `KubeDB` Ops-manager operator resumes the `Druid` object so that the `KubeDB` Provisioner operator can resume its usual operations. + +In the next doc, we are going to show a step by step guide on updating of a Druid database using updateVersion operation. \ No newline at end of file diff --git a/docs/guides/druid/update-version/yamls/deep-storage-config.yaml b/docs/guides/druid/update-version/yamls/deep-storage-config.yaml new file mode 100644 index 0000000000..3612595828 --- /dev/null +++ b/docs/guides/druid/update-version/yamls/deep-storage-config.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Secret +metadata: + name: deep-storage-config + namespace: demo +stringData: + druid.storage.type: "s3" + druid.storage.bucket: "druid" + druid.storage.baseKey: "druid/segments" + druid.s3.accessKey: "minio" + druid.s3.secretKey: "minio123" + druid.s3.protocol: "http" + druid.s3.enablePathStyleAccess: "true" + druid.s3.endpoint.signingRegion: "us-east-1" + druid.s3.endpoint.url: "http://myminio-hl.demo.svc.cluster.local:9000/" + diff --git a/docs/guides/druid/update-version/yamls/druid-cluster.yaml b/docs/guides/druid/update-version/yamls/druid-cluster.yaml new file mode 100644 index 0000000000..7a89d0dc91 --- /dev/null +++ b/docs/guides/druid/update-version/yamls/druid-cluster.yaml @@ -0,0 +1,15 @@ +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-cluster + namespace: demo +spec: + version: 28.0.1 + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + routers: + replicas: 1 + deletionPolicy: Delete diff --git a/docs/guides/druid/update-version/yamls/update-version-ops.yaml b/docs/guides/druid/update-version/yamls/update-version-ops.yaml new file mode 100644 index 0000000000..a6aaa91063 --- /dev/null +++ b/docs/guides/druid/update-version/yamls/update-version-ops.yaml @@ -0,0 +1,13 @@ +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: druid-update-version + namespace: demo +spec: + type: UpdateVersion + databaseRef: + name: druid-cluster + updateVersion: + targetVersion: 30.0.0 + timeout: 5m + apply: IfReady \ No newline at end of file diff --git a/docs/guides/druid/volume-expansion/_index.md b/docs/guides/druid/volume-expansion/_index.md new file mode 100644 index 0000000000..50632cd875 --- /dev/null +++ b/docs/guides/druid/volume-expansion/_index.md @@ -0,0 +1,10 @@ +--- +title: Volume Expansion +menu: + docs_{{ .version }}: + identifier: guides-druid-volume-expansion + name: Volume Expansion + parent: guides-druid + weight: 80 +menu_name: docs_{{ .version }} +--- \ No newline at end of file diff --git a/docs/guides/druid/volume-expansion/guide.md b/docs/guides/druid/volume-expansion/guide.md new file mode 100644 index 0000000000..d9a110aa18 --- /dev/null +++ b/docs/guides/druid/volume-expansion/guide.md @@ -0,0 +1,498 @@ +--- +title: Druid Topology Volume Expansion +menu: + docs_{{ .version }}: + identifier: guides-druid-volume-expansion-guide + name: Druid Volume Expansion + parent: guides-druid-volume-expansion + weight: 30 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- + +> New to KubeDB? Please start [here](/docs/README.md). + +# Druid Topology Volume Expansion + +This guide will show you how to use `KubeDB` Ops-manager operator to expand the volume of a Druid Topology Cluster. + +## Before You Begin + +- At first, you need to have a Kubernetes cluster, and the `kubectl` command-line tool must be configured to communicate with your cluster. + +- You must have a `StorageClass` that supports volume expansion. + +- Install `KubeDB` Provisioner and Ops-manager operator in your cluster following the steps [here](/docs/setup/README.md). + +- You should be familiar with the following `KubeDB` concepts: + - [Druid](/docs/guides/druid/concepts/druid.md) + - [Topology](/docs/guides/druid/clustering/overview/index.md) + - [DruidOpsRequest](/docs/guides/druid/concepts/druidopsrequest.md) + - [Volume Expansion Overview](/docs/guides/druid/volume-expansion/overview.md) + +To keep everything isolated, we are going to use a separate namespace called `demo` throughout this tutorial. + +```bash +$ kubectl create ns demo +namespace/demo created +``` + +> Note: The yaml files used in this tutorial are stored in [docs/examples/druid](https://github.com/kubedb/docs/tree/{{< param "info.version" >}}/docs/examples/druid) folder in GitHub repository [kubedb/docs](https://github.com/kubedb/docs). + +## Expand Volume of Topology Druid Cluster + +Here, we are going to deploy a `Druid` topology using a supported version by `KubeDB` operator. Then we are going to apply `DruidOpsRequest` to expand its volume. + +### Prepare Druid Topology Cluster + +At first verify that your cluster has a storage class, that supports volume expansion. Let's check, + +```bash +$ kubectl get storageclass +NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE +local-path (default) rancher.io/local-path Delete WaitForFirstConsumer false 28h +longhorn (default) driver.longhorn.io Delete Immediate true 27h +longhorn-static driver.longhorn.io Delete Immediate true 27h +``` + +We can see from the output the `longhorn` storage class has `ALLOWVOLUMEEXPANSION` field as true. So, this storage class supports volume expansion. We can use it. + +### Create External Dependency (Deep Storage) + +Before proceeding further, we need to prepare deep storage, which is one of the external dependency of Druid and used for storing the segments. It is a storage mechanism that Apache Druid does not provide. **Amazon S3**, **Google Cloud Storage**, or **Azure Blob Storage**, **S3-compatible storage** (like **Minio**), or **HDFS** are generally convenient options for deep storage. + +In this tutorial, we will run a `minio-server` as deep storage in our local `kind` cluster using `minio-operator` and create a bucket named `druid` in it, which the deployed druid database will use. + +```bash +$ helm repo add minio https://operator.min.io/ +$ helm repo update minio +$ helm upgrade --install --namespace "minio-operator" --create-namespace "minio-operator" minio/operator --set operator.replicaCount=1 + +$ helm upgrade --install --namespace "demo" --create-namespace druid-minio minio/tenant \ +--set tenant.pools[0].servers=1 \ +--set tenant.pools[0].volumesPerServer=1 \ +--set tenant.pools[0].size=1Gi \ +--set tenant.certificate.requestAutoCert=false \ +--set tenant.buckets[0].name="druid" \ +--set tenant.pools[0].name="default" + +``` + +Now we need to create a `Secret` named `deep-storage-config`. It contains the necessary connection information using which the druid database will connect to the deep storage. + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: deep-storage-config + namespace: demo +stringData: + druid.storage.type: "s3" + druid.storage.bucket: "druid" + druid.storage.baseKey: "druid/segments" + druid.s3.accessKey: "minio" + druid.s3.secretKey: "minio123" + druid.s3.protocol: "http" + druid.s3.enablePathStyleAccess: "true" + druid.s3.endpoint.signingRegion: "us-east-1" + druid.s3.endpoint.url: "http://myminio-hl.demo.svc.cluster.local:9000/" +``` + +Let’s create the `deep-storage-config` Secret shown above: + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/volume-expansion/yamls/deep-storage-config.yaml +secret/deep-storage-config created +``` + +Now, we are going to deploy a `Druid` combined cluster with version `28.0.1`. + +### Deploy Druid + +In this section, we are going to deploy a Druid topology cluster for historicals and middleManagers with 1GB volume. Then, in the next section we will expand its volume to 2GB using `DruidOpsRequest` CRD. Below is the YAML of the `Druid` CR that we are going to create, + +```yaml +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-cluster + namespace: demo +spec: + version: 28.0.1 + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + historicals: + replicas: 1 + storage: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi + storageType: Durable + middleManagers: + replicas: 1 + storage: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi + storageType: Durable + routers: + replicas: 1 + deletionPolicy: Delete +``` + +Let's create the `Druid` CR we have shown above, + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/volume-expansion/yamls/druid-topology.yaml +druid.kubedb.com/druid-cluster created +``` + +Now, wait until `druid-cluster` has status `Ready`. i.e, + +```bash +$ kubectl get dr -n demo -w +NAME TYPE VERSION STATUS AGE +druid-cluster kubedb.com/v1alpha2 28.0.1 Provisioning 0s +druid-cluster kubedb.com/v1alpha2 28.0.1 Provisioning 9s +. +. +druid-cluster kubedb.com/v1alpha2 28.0.1 Ready 3m26s +``` + +Let's check volume size from petset, and from the persistent volume, + +```bash +$ kubectl get petset -n demo druid-cluster-historicals -o json | jq '.spec.volumeClaimTemplates[].spec.resources.requests.storage' +"1Gi" + +$ kubectl get petset -n demo druid-cluster-middleManagers -o json | jq '.spec.volumeClaimTemplates[].spec.resources.requests.storage' +"1Gi" + +$ kubectl get pv -n demo +NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE +pvc-0bf49077-1c7a-4943-bb17-1dffd1626dcd 1Gi RWO Delete Bound demo/druid-cluster-segment-cache-druid-cluster-historicals-0 longhorn 10m +pvc-59ed4914-53b3-4f18-a6aa-7699c2b738e2 1Gi RWO Delete Bound demo/druid-cluster-base-task-dir-druid-cluster-middlemanagers-0 longhorn 10m +``` + +You can see the petsets have 1GB storage, and the capacity of all the persistent volumes are also 1GB. + +We are now ready to apply the `DruidOpsRequest` CR to expand the volume of this database. + +### Volume Expansion + +Here, we are going to expand the volume of the druid topology cluster. + +#### Create DruidOpsRequest + +In order to expand the volume of the database, we have to create a `DruidOpsRequest` CR with our desired volume size. Below is the YAML of the `DruidOpsRequest` CR that we are going to create, + +```yaml +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: dr-volume-exp + namespace: demo +spec: + type: VolumeExpansion + databaseRef: + name: druid-cluster + volumeExpansion: + historicals: 2Gi + middleManagers: 2Gi + mode: Offline +``` + +Here, + +- `spec.databaseRef.name` specifies that we are performing volume expansion operation on `druid-cluster`. +- `spec.type` specifies that we are performing `VolumeExpansion` on our database. +- `spec.volumeExpansion.historicals` specifies the desired volume size for historicals node. +- `spec.volumeExpansion.middleManagers` specifies the desired volume size for middleManagers node. +- `spec.volumeExpansion.mode` specifies the desired volume expansion mode(`Online` or `Offline`). + +During `Online` VolumeExpansion KubeDB expands volume without pausing database object, it directly updates the underlying PVC. And for `Offline` volume expansion, the database is paused. The Pods are deleted and PVC is updated. Then the database Pods are recreated with updated PVC. + +> If you want to expand the volume of only one node, you can specify the desired volume size for that node only. + +Let's create the `DruidOpsRequest` CR we have shown above, + +```bash +$ kubectl apply -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/druid/volume-expansion/yamls/druid-volume-expansion-topology.yaml +druidopsrequest.ops.kubedb.com/dr-volume-exp created +``` + +#### Verify Druid Topology volume expanded successfully + +If everything goes well, `KubeDB` Ops-manager operator will update the volume size of `Druid` object and related `PetSets` and `Persistent Volumes`. + +Let's wait for `DruidOpsRequest` to be `Successful`. Run the following command to watch `DruidOpsRequest` CR, + +```bash +$ kubectl get druidopsrequest -n demo +NAME TYPE STATUS AGE +dr-volume-exp VolumeExpansion Successful 3m1s +``` + +We can see from the above output that the `DruidOpsRequest` has succeeded. If we describe the `DruidOpsRequest` we will get an overview of the steps that were followed to expand the volume of druid. + +```bash +$ kubectl describe druidopsrequest -n demo dr-volume-exp +Name: dr-volume-exp +Namespace: demo +Labels: +Annotations: +API Version: ops.kubedb.com/v1alpha1 +Kind: DruidOpsRequest +Metadata: + Creation Timestamp: 2024-10-25T09:22:02Z + Generation: 1 + Managed Fields: + API Version: ops.kubedb.com/v1alpha1 + Fields Type: FieldsV1 + fieldsV1: + f:metadata: + f:annotations: + .: + f:kubectl.kubernetes.io/last-applied-configuration: + f:spec: + .: + f:apply: + f:databaseRef: + f:type: + f:volumeExpansion: + .: + f:historicals: + f:middleManagers: + f:mode: + Manager: kubectl-client-side-apply + Operation: Update + Time: 2024-10-25T09:22:02Z + API Version: ops.kubedb.com/v1alpha1 + Fields Type: FieldsV1 + fieldsV1: + f:status: + .: + f:conditions: + f:observedGeneration: + f:phase: + Manager: kubedb-ops-manager + Operation: Update + Subresource: status + Time: 2024-10-25T09:24:35Z + Resource Version: 221378 + UID: 2407cfa7-8d3b-463e-abf7-1910249009bd +Spec: + Apply: IfReady + Database Ref: + Name: druid-cluster + Type: VolumeExpansion + Volume Expansion: + Historicals: 2Gi + Middle Managers: 2Gi + Mode: Offline +Status: + Conditions: + Last Transition Time: 2024-10-25T09:22:02Z + Message: Druid ops-request has started to expand volume of druid nodes. + Observed Generation: 1 + Reason: VolumeExpansion + Status: True + Type: VolumeExpansion + Last Transition Time: 2024-10-25T09:22:10Z + Message: get pet set; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: GetPetSet + Last Transition Time: 2024-10-25T09:22:10Z + Message: is pet set deleted; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: IsPetSetDeleted + Last Transition Time: 2024-10-25T09:22:30Z + Message: successfully deleted the petSets with orphan propagation policy + Observed Generation: 1 + Reason: OrphanPetSetPods + Status: True + Type: OrphanPetSetPods + Last Transition Time: 2024-10-25T09:22:35Z + Message: get pod; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: GetPod + Last Transition Time: 2024-10-25T09:22:35Z + Message: is ops req patched; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: IsOpsReqPatched + Last Transition Time: 2024-10-25T09:22:35Z + Message: create pod; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: CreatePod + Last Transition Time: 2024-10-25T09:22:40Z + Message: get pvc; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: GetPvc + Last Transition Time: 2024-10-25T09:22:40Z + Message: is pvc patched; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: IsPvcPatched + Last Transition Time: 2024-10-25T09:23:50Z + Message: compare storage; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: CompareStorage + Last Transition Time: 2024-10-25T09:23:00Z + Message: create; ConditionStatus:True + Observed Generation: 1 + Status: True + Type: Create + Last Transition Time: 2024-10-25T09:23:08Z + Message: is druid running; ConditionStatus:False + Observed Generation: 1 + Status: False + Type: IsDruidRunning + Last Transition Time: 2024-10-25T09:23:20Z + Message: successfully updated middleManagers node PVC sizes + Observed Generation: 1 + Reason: UpdateMiddleManagersNodePVCs + Status: True + Type: UpdateMiddleManagersNodePVCs + Last Transition Time: 2024-10-25T09:24:15Z + Message: successfully updated historicals node PVC sizes + Observed Generation: 1 + Reason: UpdateHistoricalsNodePVCs + Status: True + Type: UpdateHistoricalsNodePVCs + Last Transition Time: 2024-10-25T09:24:30Z + Message: successfully reconciled the Druid resources + Observed Generation: 1 + Reason: UpdatePetSets + Status: True + Type: UpdatePetSets + Last Transition Time: 2024-10-25T09:24:35Z + Message: PetSet is recreated + Observed Generation: 1 + Reason: ReadyPetSets + Status: True + Type: ReadyPetSets + Last Transition Time: 2024-10-25T09:24:35Z + Message: Successfully completed volumeExpansion for Druid + Observed Generation: 1 + Reason: Successful + Status: True + Type: Successful + Observed Generation: 1 + Phase: Successful +Events: + Type Reason Age From Message + ---- ------ ---- ---- ------- + Normal Starting 10m KubeDB Ops-manager Operator Start processing for DruidOpsRequest: demo/dr-volume-exp + Normal Starting 10m KubeDB Ops-manager Operator Pausing Druid databse: demo/druid-cluster + Normal Successful 10m KubeDB Ops-manager Operator Successfully paused Druid database: demo/druid-cluster for DruidOpsRequest: dr-volume-exp + Warning get pet set; ConditionStatus:True 10m KubeDB Ops-manager Operator get pet set; ConditionStatus:True + Warning is pet set deleted; ConditionStatus:True 10m KubeDB Ops-manager Operator is pet set deleted; ConditionStatus:True + Warning get pet set; ConditionStatus:True 10m KubeDB Ops-manager Operator get pet set; ConditionStatus:True + Warning get pet set; ConditionStatus:True 10m KubeDB Ops-manager Operator get pet set; ConditionStatus:True + Warning is pet set deleted; ConditionStatus:True 10m KubeDB Ops-manager Operator is pet set deleted; ConditionStatus:True + Warning get pet set; ConditionStatus:True 10m KubeDB Ops-manager Operator get pet set; ConditionStatus:True + Normal OrphanPetSetPods 9m59s KubeDB Ops-manager Operator successfully deleted the petSets with orphan propagation policy + Warning get pod; ConditionStatus:True 9m54s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning is ops req patched; ConditionStatus:True 9m54s KubeDB Ops-manager Operator is ops req patched; ConditionStatus:True + Warning create pod; ConditionStatus:True 9m54s KubeDB Ops-manager Operator create pod; ConditionStatus:True + Warning get pod; ConditionStatus:True 9m49s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 9m49s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning is pvc patched; ConditionStatus:True 9m49s KubeDB Ops-manager Operator is pvc patched; ConditionStatus:True + Warning compare storage; ConditionStatus:False 9m49s KubeDB Ops-manager Operator compare storage; ConditionStatus:False + Warning get pod; ConditionStatus:True 9m44s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 9m44s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 9m39s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 9m39s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 9m34s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 9m34s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 9m29s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 9m29s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning compare storage; ConditionStatus:True 9m29s KubeDB Ops-manager Operator compare storage; ConditionStatus:True + Warning create; ConditionStatus:True 9m29s KubeDB Ops-manager Operator create; ConditionStatus:True + Warning is ops req patched; ConditionStatus:True 9m29s KubeDB Ops-manager Operator is ops req patched; ConditionStatus:True + Warning get pod; ConditionStatus:True 9m24s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning is druid running; ConditionStatus:False 9m21s KubeDB Ops-manager Operator is druid running; ConditionStatus:False + Warning get pod; ConditionStatus:True 9m19s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pod; ConditionStatus:True 9m14s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Normal UpdateMiddleManagersNodePVCs 9m9s KubeDB Ops-manager Operator successfully updated middleManagers node PVC sizes + Warning get pod; ConditionStatus:True 9m4s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning is ops req patched; ConditionStatus:True 9m4s KubeDB Ops-manager Operator is ops req patched; ConditionStatus:True + Warning create pod; ConditionStatus:True 9m4s KubeDB Ops-manager Operator create pod; ConditionStatus:True + Warning get pod; ConditionStatus:True 8m59s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 8m59s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning is pvc patched; ConditionStatus:True 8m59s KubeDB Ops-manager Operator is pvc patched; ConditionStatus:True + Warning compare storage; ConditionStatus:False 8m59s KubeDB Ops-manager Operator compare storage; ConditionStatus:False + Warning get pod; ConditionStatus:True 8m54s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 8m54s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 8m49s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 8m49s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 8m44s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 8m44s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning get pod; ConditionStatus:True 8m39s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pvc; ConditionStatus:True 8m39s KubeDB Ops-manager Operator get pvc; ConditionStatus:True + Warning compare storage; ConditionStatus:True 8m39s KubeDB Ops-manager Operator compare storage; ConditionStatus:True + Warning create; ConditionStatus:True 8m39s KubeDB Ops-manager Operator create; ConditionStatus:True + Warning is ops req patched; ConditionStatus:True 8m39s KubeDB Ops-manager Operator is ops req patched; ConditionStatus:True + Warning get pod; ConditionStatus:True 8m34s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning is druid running; ConditionStatus:False 8m31s KubeDB Ops-manager Operator is druid running; ConditionStatus:False + Warning get pod; ConditionStatus:True 8m29s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pod; ConditionStatus:True 8m24s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Warning get pod; ConditionStatus:True 8m19s KubeDB Ops-manager Operator get pod; ConditionStatus:True + Normal UpdateHistoricalsNodePVCs 8m14s KubeDB Ops-manager Operator successfully updated historicals node PVC sizes + Normal UpdatePetSets 7m59s KubeDB Ops-manager Operator successfully reconciled the Druid resources + Warning get pet set; ConditionStatus:True 7m54s KubeDB Ops-manager Operator get pet set; ConditionStatus:True + Warning get pet set; ConditionStatus:True 7m54s KubeDB Ops-manager Operator get pet set; ConditionStatus:True + Normal ReadyPetSets 7m54s KubeDB Ops-manager Operator PetSet is recreated + Normal Starting 7m54s KubeDB Ops-manager Operator Resuming Druid database: demo/druid-cluster + Normal Successful 7m54s KubeDB Ops-manager Operator Successfully resumed Druid database: demo/druid-cluster for DruidOpsRequest: dr-volume-exp +``` + +Now, we are going to verify from the `Petset`, and the `Persistent Volumes` whether the volume of the database has expanded to meet the desired state, Let's check, + +```bash +$ kubectl get petset -n demo druid-cluster-historicals -o json | jq '.spec.volumeClaimTemplates[].spec.resources.requests.storage' +"3Gi" + +$ kubectl get petset -n demo druid-cluster-middleManagers -o json | jq '.spec.volumeClaimTemplates[].spec.resources.requests.storage' +"2Gi" + +$ kubectl get pv -n demo +NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE +pvc-0bf49077-1c7a-4943-bb17-1dffd1626dcd 2Gi RWO Delete Bound demo/druid-cluster-segment-cache-druid-cluster-historicals-0 longhorn 23m +pvc-59ed4914-53b3-4f18-a6aa-7699c2b738e2 2Gi RWO Delete Bound demo/druid-cluster-base-task-dir-druid-cluster-middlemanagers-0 longhorn 23m +``` + +The above output verifies that we have successfully expanded the volume of the Druid. + +## Cleaning Up + +To clean up the Kubernetes resources created by this tutorial, run: + +```bash +kubectl delete druidopsrequest -n demo dr-volume-exp +kubectl delete dr -n demo druid-cluster +kubectl delete ns demo +``` + +## Next Steps + +- Detail concepts of [Druid object](/docs/guides/druid/concepts/druid.md). +- Different Druid topology clustering modes [here](/docs/guides/druid/clustering/_index.md). +- Monitor your Druid database with KubeDB using [out-of-the-box Prometheus operator](/docs/guides/druid/monitoring/using-prometheus-operator.md). +- +[//]: # (- Monitor your Druid database with KubeDB using [out-of-the-box builtin-Prometheus](/docs/guides/druid/monitoring/using-builtin-prometheus.md).) +- Want to hack on KubeDB? Check our [contribution guidelines](/docs/CONTRIBUTING.md). diff --git a/docs/guides/druid/volume-expansion/images/druid-volume-expansion.png b/docs/guides/druid/volume-expansion/images/druid-volume-expansion.png new file mode 100644 index 0000000000000000000000000000000000000000..9e2b77d6cd9edc45ff038b11937d7807c2191418 GIT binary patch literal 76116 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�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
    Aeq1&&aX8EBqZF8#lcr=guT|4A*D%dkG zi#77{(_{f&&HUr@;;W}3IBFmHD-z@={|5HnY#L47bZB}l_velY5iDa2Dl`fLpjyQD z_J*NhKgUPB_mX8@PeY~rvCJQhPXZn-v|RrFd#|r%#Ij%Ds4{S4!+4?yn-&Z2d?q3! zT^L(+X*IzcM%vncA*glldY5tU;Jx0ip;uEv4!X^Ih0jATMk+K(Z@NHPx?9@*lmj`bX#-iCx&5@Hfm`B1$=@YTCt7*aM1s;el}2|hm9%bVb-^4iBVq@dFr+&B`um}?|dPuZfKQOV?L*=qvFWVs0o|#xyAx2)+&f7Fg#CMhn z)D}pzZl&EufN9(lz7JRQ`1BRV!9LezS+3ipbolQU{5eNJIZc;ew^P%Pxg`*d9#8NpK z1G=7UFWxz;Gj@Kw+8W=*sCq4fa^jN+O1Mzi>t704l<+r>p&Y3CF)Kxxw=8;V!fN%6 zTnFFwVSCqJ$o(kSvT$(`5q)u!T3g~2&SxH29NQO1qb5?hSADAoBF=Mnv@4BcJwn15 zf$0A@cDqjtx7t~6a{ZOR$% z)G*f9E`81jH&6Ss$==h+M{y!iW|JB|nCZ(W-j5|v4nJpEIyA@!YPz#mTDA{QQu(x} zcRNL<$0Ad@upd5N!?KLcf#n%GIaOw;@uX|=sOBh9OnHXCR+WwM+5gUJBwaz>1-yKg z*wyglV|<9spZ^m`D(_f%)C=q~XlC{_-Y9m6tNjh1jE+Q&(t2%c*iXXJ2c!3|u0ONI zjOSi`%hRpNVB1Vw0B>kKKF2BUVLR^WWM7BdzGW8uY8~GJ%eg-!LB#+37x|^bwZl?? zkf=>o3|s2;uE3?sIfL)vdT|l+J7szEBp})&oA)n_QM};w@K36dg22Me$*0YT%Guh7 z6}{GjSUp_QV0xdsvIn=u6Ws0p2vH@$rx1$kE1Vyz=Dd*pEu7d9Ab2IjfJt zqg_qi)ww4>St@DJz8XI|Jgn~(tx`L-_`ALBF}nJ?Af8%0D%!C6>PIq%Ldwpx`1wY- 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 JDlv3?^* New to KubeDB? Please start [here](/docs/README.md). + +# Druid Volume Expansion + +This guide will give an overview on how KubeDB Ops-manager operator expand the volume of various component of `Druid` like:. (Combined and Topology). + +## Before You Begin + +- You should be familiar with the following `KubeDB` concepts: + - [Druid](/docs/guides/druid/concepts/druid.md) + - [DruidOpsRequest](/docs/guides/druid/concepts/druidopsrequest.md) + +## How Volume Expansion Process Works + +The following diagram shows how KubeDB Ops-manager operator expand the volumes of `Druid` database components. Open the image in a new tab to see the enlarged version. + +
    +  Volume Expansion process of Druid +
    Fig: Volume Expansion process of Druid
    +
    + +The Volume Expansion process consists of the following steps: + +1. At first, a user creates a `Druid` Custom Resource (CR). + +2. `KubeDB` Provisioner operator watches the `Druid` CR. + +3. When the operator finds a `Druid` CR, it creates required number of `PetSets` and related necessary stuff like secrets, services, etc. + +4. Each PetSet creates a Persistent Volume according to the Volume Claim Template provided in the petset configuration. This Persistent Volume will be expanded by the `KubeDB` Ops-manager operator. + +5. Then, in order to expand the volume of the druid data components (ie. Historicals, MiddleManagers) of the `Druid`, the user creates a `DruidOpsRequest` CR with desired information. + +6. `KubeDB` Ops-manager operator watches the `DruidOpsRequest` CR. + +7. When it finds a `DruidOpsRequest` CR, it halts the `Druid` object which is referred from the `DruidOpsRequest`. So, the `KubeDB` Provisioner operator doesn't perform any operations on the `Druid` object during the volume expansion process. + +8. Then the `KubeDB` Ops-manager operator will expand the persistent volume to reach the expected size defined in the `DruidOpsRequest` CR. + +9. After the successful Volume Expansion of the related PetSet Pods, the `KubeDB` Ops-manager operator updates the new volume size in the `Druid` object to reflect the updated state. + +10. After the successful Volume Expansion of the `Druid` components, the `KubeDB` Ops-manager operator resumes the `Druid` object so that the `KubeDB` Provisioner operator resumes its usual operations. + +In the next docs, we are going to show a step-by-step guide on Volume Expansion of various Druid database components using `DruidOpsRequest` CRD. diff --git a/docs/guides/druid/volume-expansion/yamls/deep-storage-config.yaml b/docs/guides/druid/volume-expansion/yamls/deep-storage-config.yaml new file mode 100644 index 0000000000..3612595828 --- /dev/null +++ b/docs/guides/druid/volume-expansion/yamls/deep-storage-config.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Secret +metadata: + name: deep-storage-config + namespace: demo +stringData: + druid.storage.type: "s3" + druid.storage.bucket: "druid" + druid.storage.baseKey: "druid/segments" + druid.s3.accessKey: "minio" + druid.s3.secretKey: "minio123" + druid.s3.protocol: "http" + druid.s3.enablePathStyleAccess: "true" + druid.s3.endpoint.signingRegion: "us-east-1" + druid.s3.endpoint.url: "http://myminio-hl.demo.svc.cluster.local:9000/" + diff --git a/docs/guides/druid/volume-expansion/yamls/druid-cluster.yaml b/docs/guides/druid/volume-expansion/yamls/druid-cluster.yaml new file mode 100644 index 0000000000..cb8e321237 --- /dev/null +++ b/docs/guides/druid/volume-expansion/yamls/druid-cluster.yaml @@ -0,0 +1,34 @@ +apiVersion: kubedb.com/v1alpha2 +kind: Druid +metadata: + name: druid-cluster + namespace: demo +spec: + version: 28.0.1 + deepStorage: + type: s3 + configSecret: + name: deep-storage-config + topology: + historicals: + replicas: 1 + storage: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi + storageType: Durable + middleManagers: + replicas: 1 + storage: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi + storageType: Durable + routers: + replicas: 1 + deletionPolicy: Delete + diff --git a/docs/guides/druid/volume-expansion/yamls/volume-expansion-ops.yaml b/docs/guides/druid/volume-expansion/yamls/volume-expansion-ops.yaml new file mode 100644 index 0000000000..b5ad80546b --- /dev/null +++ b/docs/guides/druid/volume-expansion/yamls/volume-expansion-ops.yaml @@ -0,0 +1,13 @@ +apiVersion: ops.kubedb.com/v1alpha1 +kind: DruidOpsRequest +metadata: + name: dr-volume-exp + namespace: demo +spec: + type: VolumeExpansion + databaseRef: + name: druid-cluster + volumeExpansion: + historicals: 2Gi + middleManagers: 2Gi + mode: Offline \ No newline at end of file

OARi)?=J8#vuzjj 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