From ac3024cb8cd06ce75eceed7e62b5230990378fb9 Mon Sep 17 00:00:00 2001 From: Bonusree Date: Thu, 18 Sep 2025 16:58:14 +0600 Subject: [PATCH 01/15] started oracle Signed-off-by: Bonusree --- docs/guides/oracle/README.md | 3 + docs/guides/oracle/_index.md | 10 + docs/guides/oracle/quickstart/index.md | 262 +++++++++++++++++++++++++ 3 files changed, 275 insertions(+) create mode 100644 docs/guides/oracle/README.md create mode 100644 docs/guides/oracle/_index.md create mode 100644 docs/guides/oracle/quickstart/index.md diff --git a/docs/guides/oracle/README.md b/docs/guides/oracle/README.md new file mode 100644 index 000000000..5258e0e07 --- /dev/null +++ b/docs/guides/oracle/README.md @@ -0,0 +1,3 @@ +hello +hi +hi hello bad dao, bn \ No newline at end of file diff --git a/docs/guides/oracle/_index.md b/docs/guides/oracle/_index.md new file mode 100644 index 000000000..531d03a8a --- /dev/null +++ b/docs/guides/oracle/_index.md @@ -0,0 +1,10 @@ +--- +title: Oracle +menu: + docs_{{ .version }}: + identifier: guides-oracle + name: Oracle + parent: guides + weight: 10 +menu_name: docs_{{ .version }} +--- diff --git a/docs/guides/oracle/quickstart/index.md b/docs/guides/oracle/quickstart/index.md new file mode 100644 index 000000000..f89248e1d --- /dev/null +++ b/docs/guides/oracle/quickstart/index.md @@ -0,0 +1,262 @@ +--- +title: Oracle Quickstart +menu: + docs_{{ .version }}: + identifier: guides-oracle-quickstart + name: Quickstart + parent: guides-oracle + weight: 15 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- + +> New to KubeDB? Please start [here](/docs/README.md). + + +# Oracle QuickStart + +This tutorial will show you how to use KubeDB to run an Oracle database. + +

  lifecycle

+ +Note: The YAML files used in this tutorial are stored in [docs/guides/oracle/quickstart/yamls](https://github.com/kubedb/docs/tree/{{ +< param "info.version" >}}/docs/guides/oracle/quickstart/yamls) folder in the GitHub repository kubedb/docs +. + +## Before You Begin + +- You need a Kubernetes cluster and kubectl configured to communicate with it. If you do not have a cluster, +you can create one using kind +- install the KubeDB CLI on your workstation and the KubeDB operator in your cluster following the +instructions here + +- check available StorageClass in your cluster: + +```shell +ubectl get storageclasses +NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE +standard (default) rancher.io/local-path Delete WaitForFirstConsumer false 28d + +``` +Use a separate namespace for isolation: +```shell +$ kubectl create ns demo +namespace/demo created +``` +## Find Available Oracle Versions + +KubeDB maintains an OracleVersion CRD with all supported Oracle versions: +```shell +$ kubectl get oracleversions +NAME VERSION DISTRIBUTION DB_IMAGE DEPRECATED AGE +21.3.0 21.3.0 ghcr.io/kubedb/oracle-ee:21.3.0 28d + +``` + +## Create an Oracle Database + +KubeDB implements an Oracle CRD to define Oracle database specifications. Below is an example: + +```shell +apiVersion: kubedb.com/v1alpha2 +kind: Oracle +metadata: + name: oracle + namespace: demo +spec: + deletionPolicy: Delete + edition: enterprise + mode: Standalone + podTemplate: + spec: + containers: + - name: oracle + resources: + limits: + cpu: "4" + memory: 10Gi + requests: + cpu: "2" + memory: 3Gi + initContainers: + - name: oracle-init + resources: + limits: + memory: 512Mi + requests: + cpu: 200m + memory: 256Mi + securityContext: + fsGroup: 54321 + runAsGroup: 54321 + runAsUser: 54321 + replicas: 1 + storage: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 30Gi + storageType: Durable + version: 21.3.0 +``` +```shell +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/oracle/quickstart/yamls/oracle-quickstart.yaml +oracle.kubedb.com/oracle created + +``` +Here, +- `spec.version`: Refers to the `OracleVersion CRD` specifying the docker image. + +- `spec.edition`: Database edition (`enterprise` in this example). + +- `spec.mode`: Deployment mode (`Standalone` or `DataGuard`). + +- `spec.storageType`: Can be `Durable` (uses PVC) or `Ephemeral` (uses EmptyDir). + +- `spec.storage`: Defines PVC size and access mode. + +- `spec.podTemplate`: Customize resource requests/limits, init containers, and security context. + +- `spec.replicas`: Number of database pods (1 for standalone, ≥2 for DataGuard). + +- `spec.deletionPolicy`: Controls behavior when deleting the Oracle CRD (`Delete`, `Halt`, `WipeOut`). + +`KubeDB` operator watches for `Oracle` objects using Kubernetes api. When a `Oracle` object is created, +KubeDB operator will create a new PetSet and a Service with the matching Oracle object name. `KubeDB` +operator will also create a governing service for PetSets with the name `kubedb`, if one is not already +present. +If we describe the `Oracle` CRD we will get an overview of the steps that were followed. +```shell +kubectl describe oracle -n demo oracle + +Name: oracle +Namespace: demo +Labels: +Annotations: +API Version: kubedb.com/v1alpha2 +Kind: Oracle +Metadata: + Creation Timestamp: 2025-09-17T09:19:12Z + Finalizers: + kubedb.com/oracle + Generation: 2 + Resource Version: 54974 + UID: 46afbf62-caab-4649-a475-64025c319eba +Spec: + Auth Secret: + Name: oracle-auth + Auto Ops: + Deletion Policy: Delete + Edition: enterprise + Health Checker: + Failure Threshold: 1 + Period Seconds: 10 + Timeout Seconds: 10 + Listener: + Port: 1521 + Protocol: TCP + Service: ORCL + Mode: Standalone + Pod Template: + Controller: + Metadata: + Spec: + Containers: + Name: oracle + Resources: + Limits: + Cpu: 4 + Memory: 10Gi + Requests: + Cpu: 2 + Memory: 3Gi + Security Context: + Name: oracle-coordinator + Resources: + Limits: + Memory: 256Mi + Requests: + Cpu: 200m + Memory: 256Mi + Security Context: + Init Containers: + Name: oracle-init + Resources: + Limits: + Memory: 512Mi + Requests: + Cpu: 200m + Memory: 256Mi + Security Context: + Pod Placement Policy: + Name: default + Security Context: + Fs Group: 54321 + Run As Group: 54321 + Run As User: 54321 + Service Account Name: oracle + Replicas: 1 + Storage: + Access Modes: + ReadWriteOnce + Resources: + Requests: + Storage: 30Gi + Storage Type: Durable + Version: 21.3.0 +Status: + Conditions: + Last Transition Time: 2025-09-17T09:19:12Z + Message: The KubeDB operator has started the provisioning of Oracle: demo/oracle + Observed Generation: 1 + Reason: DatabaseProvisioningStartedSuccessfully + Status: True + Type: ProvisioningStarted + Last Transition Time: 2025-09-17T09:19:26Z + Message: All replicas are ready + Observed Generation: 2 + Reason: AllReplicasReady + Status: True + Type: ReplicaReady + Last Transition Time: 2025-09-17T09:27:58Z + Message: The Oracle: demo/oracle is accepting connection + Observed Generation: 2 + Reason: AcceptingConnection + Status: True + Type: AcceptingConnection + Last Transition Time: 2025-09-17T09:27:58Z + Message: DB is ready because of server getting Online and Running state + Observed Generation: 2 + Reason: AllReplicasReady + Status: True + Type: Ready + Last Transition Time: 2025-09-17T09:21:11Z + Message: The Oracle: demo/oracle is successfully provisioned. + Observed Generation: 2 + Reason: DatabaseSuccessfullyProvisioned + Status: True + Type: Provisioned + Phase: Ready +Events: + +``` +Check resources created by KubeDB operator: +```shell +$ kubectl get oracle,pods,pvc,services -n demo +NAME VERSION MODE STATUS AGE +oracle.kubedb.com/oracle 21.3.0 Standalone Ready 109m + +NAME READY STATUS RESTARTS AGE +pod/oracle-0 1/1 Running 0 109m + +NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE +persistentvolumeclaim/data-oracle-0 Bound pvc-66385705-e0f3-4658-abcb-78dbacbfc3d7 30Gi RWO local-path 109m + +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +service/oracle ClusterIP 10.43.170.95 1521/TCP 109m +service/oracle-pods ClusterIP None 1521/TCP 109m + +``` + +## Connect to Oracle Database \ No newline at end of file From 2cd42e9267558af0da810d2c9ae140a8c283158c Mon Sep 17 00:00:00 2001 From: Bonusree Date: Wed, 24 Sep 2025 10:47:16 +0600 Subject: [PATCH 02/15] oracle doc is started Signed-off-by: Bonusree --- .../oracle/quickstart/standalone.yaml | 41 ++++++++++++++++++ docs/guides/oracle/failover/_index.md | 0 docs/guides/oracle/failover/overview.md | 0 docs/guides/oracle/quickstart/Monitoring.png | Bin 0 -> 83986 bytes docs/guides/oracle/quickstart/_index.md | 11 +++++ .../oracle/quickstart/{index.md => guide.md} | 22 +++++----- 6 files changed, 63 insertions(+), 11 deletions(-) create mode 100644 docs/examples/oracle/quickstart/standalone.yaml create mode 100644 docs/guides/oracle/failover/_index.md create mode 100644 docs/guides/oracle/failover/overview.md create mode 100644 docs/guides/oracle/quickstart/Monitoring.png create mode 100644 docs/guides/oracle/quickstart/_index.md rename docs/guides/oracle/quickstart/{index.md => guide.md} (93%) diff --git a/docs/examples/oracle/quickstart/standalone.yaml b/docs/examples/oracle/quickstart/standalone.yaml new file mode 100644 index 000000000..0f9637de8 --- /dev/null +++ b/docs/examples/oracle/quickstart/standalone.yaml @@ -0,0 +1,41 @@ +apiVersion: kubedb.com/v1alpha2 +kind: Oracle +metadata: + name: oracle + namespace: demo +spec: + deletionPolicy: Delete + edition: enterprise + mode: Standalone + podTemplate: + spec: + containers: + - name: oracle + resources: + limits: + cpu: "4" + memory: 10Gi + requests: + cpu: "2" + memory: 3Gi + initContainers: + - name: oracle-init + resources: + limits: + memory: 512Mi + requests: + cpu: 200m + memory: 256Mi + securityContext: + fsGroup: 54321 + runAsGroup: 54321 + runAsUser: 54321 + replicas: 1 + storage: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 30Gi + storageType: Durable + version: 21.3.0 \ No newline at end of file diff --git a/docs/guides/oracle/failover/_index.md b/docs/guides/oracle/failover/_index.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/guides/oracle/failover/overview.md b/docs/guides/oracle/failover/overview.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/guides/oracle/quickstart/Monitoring.png b/docs/guides/oracle/quickstart/Monitoring.png new file mode 100644 index 0000000000000000000000000000000000000000..1b01a2ec3244afd79cb1f6d90a50e1588206ad3e GIT binary patch literal 83986 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 rUi_BP;LurFS<9cF-9%np9Cd@d_4U)qru}j! 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

fL@@=$PPSqt!{aJ!wW(Nr9%l5q!73b5U+{ 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%0DwziS6w#PwK(kg!QodYubbM6ZMy8Q#u!* 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 literal 0 HcmV?d00001 diff --git a/docs/guides/oracle/quickstart/_index.md b/docs/guides/oracle/quickstart/_index.md new file mode 100644 index 000000000..2935e568a --- /dev/null +++ b/docs/guides/oracle/quickstart/_index.md @@ -0,0 +1,11 @@ +--- +title: Oracle Quickstart +menu: + docs_{{ .version }}: + identifier: guides-oracle-quickstart + name: Quickstart + parent: guides-oracle + weight: 15 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- \ No newline at end of file diff --git a/docs/guides/oracle/quickstart/index.md b/docs/guides/oracle/quickstart/guide.md similarity index 93% rename from docs/guides/oracle/quickstart/index.md rename to docs/guides/oracle/quickstart/guide.md index f89248e1d..1c1e3e307 100644 --- a/docs/guides/oracle/quickstart/index.md +++ b/docs/guides/oracle/quickstart/guide.md @@ -17,18 +17,18 @@ section_menu_id: guides This tutorial will show you how to use KubeDB to run an Oracle database. -

  lifecycle

+

  lifecycle

-Note: The YAML files used in this tutorial are stored in [docs/guides/oracle/quickstart/yamls](https://github.com/kubedb/docs/tree/{{ -< param "info.version" >}}/docs/guides/oracle/quickstart/yamls) folder in the GitHub repository kubedb/docs +>Note: The YAML files used in this tutorial are stored in [docs/examples/oracle/quickstart](https://github.com/kubedb/docs/tree/{{ +< param "info.version" >}}/docs/examples/oracle/quickstart/yamls) folder in the GitHub repository kubedb/docs . ## Before You Begin - You need a Kubernetes cluster and kubectl configured to communicate with it. If you do not have a cluster, -you can create one using kind -- install the KubeDB CLI on your workstation and the KubeDB operator in your cluster following the -instructions here + you can create one using kind +- install the KubeDB CLI on your workstation and the KubeDB operator in your cluster following the + instructions here - check available StorageClass in your cluster: @@ -105,7 +105,7 @@ $ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" oracle.kubedb.com/oracle created ``` -Here, +Here, - `spec.version`: Refers to the `OracleVersion CRD` specifying the docker image. - `spec.edition`: Database edition (`enterprise` in this example). @@ -122,9 +122,9 @@ Here, - `spec.deletionPolicy`: Controls behavior when deleting the Oracle CRD (`Delete`, `Halt`, `WipeOut`). -`KubeDB` operator watches for `Oracle` objects using Kubernetes api. When a `Oracle` object is created, -KubeDB operator will create a new PetSet and a Service with the matching Oracle object name. `KubeDB` -operator will also create a governing service for PetSets with the name `kubedb`, if one is not already +`KubeDB` operator watches for `Oracle` objects using Kubernetes api. When a `Oracle` object is created, +KubeDB operator will create a new PetSet and a Service with the matching Oracle object name. `KubeDB` +operator will also create a governing service for PetSets with the name `kubedb`, if one is not already present. If we describe the `Oracle` CRD we will get an overview of the steps that were followed. ```shell @@ -241,7 +241,7 @@ Status: Events: ``` -Check resources created by KubeDB operator: +## Check Resources Created by KubeDB operator: ```shell $ kubectl get oracle,pods,pvc,services -n demo NAME VERSION MODE STATUS AGE From 049bd8e684c0a84fc656c9c9457d7722c4731b93 Mon Sep 17 00:00:00 2001 From: Bonusree Date: Wed, 24 Sep 2025 14:24:22 +0600 Subject: [PATCH 03/15] readme.md added Signed-off-by: Bonusree --- docs/guides/oracle/README.md | 106 ++++++++++++++++++++++++- docs/guides/oracle/quickstart/guide.md | 35 +++++++- 2 files changed, 136 insertions(+), 5 deletions(-) diff --git a/docs/guides/oracle/README.md b/docs/guides/oracle/README.md index 5258e0e07..3f15fda67 100644 --- a/docs/guides/oracle/README.md +++ b/docs/guides/oracle/README.md @@ -1,3 +1,103 @@ -hello -hi -hi hello bad dao, bn \ No newline at end of file +--- +title: Postgres +menu: + docs_{{ .version }}: + identifier: pg-readme-postgres + name: Postgres + parent: pg-postgres-guides + weight: 10 +menu_name: docs_{{ .version }} +section_menu_id: guides +url: /docs/{{ .version }}/guides/postgres/ +aliases: + - /docs/{{ .version }}/guides/postgres/README/ +--- + +> New to KubeDB? Please start [here](/docs/README.md). + +## Supported PostgreSQL Features + +| Features | Availability | +|------------------------------------|:------------:| +| Clustering | ✓ | +| Warm Standby | ✓ | +| Hot Standby | ✓ | +| Synchronous Replication | ✓ | +| Streaming Replication | ✓ | +| Automatic Failover | ✓ | +| Continuous Archiving using `wal-g` | ✓ | +| Initialization from WAL archive | ✓ | +| Persistent Volume | ✓ | +| Instant Backup | ✓ | +| Scheduled Backup | ✓ | +| Initialization from Snapshot | ✓ | +| Initialization using Script | ✓ | +| Builtin Prometheus Discovery | ✓ | +| Using Prometheus operator | ✓ | +| Custom Configuration | ✓ | +| Using Custom docker image | ✓ | + +## Life Cycle of a PostgreSQL Object + +

+ lifecycle +

+ +## User Guide + +- [Quickstart PostgreSQL](/docs/guides/postgres/quickstart/quickstart.md) with KubeDB Operator. +- How to [Backup & Restore](/docs/guides/postgres/backup/stash/overview/index.md) PostgreSQL database using Stash. +- Initialize [PostgreSQL with Script](/docs/guides/postgres/initialization/script_source.md). +- [PostgreSQL Clustering](/docs/guides/postgres/clustering/ha_cluster.md) supported by KubeDB Postgres. +- [Streaming Replication](/docs/guides/postgres/clustering/streaming_replication.md) for PostgreSQL clustering. +- Monitor your PostgreSQL database with KubeDB using [`out-of-the-box` builtin-Prometheus](/docs/guides/postgres/monitoring/using-builtin-prometheus.md). +- Monitor your PostgreSQL database with KubeDB using [`out-of-the-box` Prometheus operator](/docs/guides/postgres/monitoring/using-prometheus-operator.md). +- Use [private Docker registry](/docs/guides/postgres/private-registry/using-private-registry.md) to deploy PostgreSQL with KubeDB. +- Detail concepts of [Postgres object](/docs/guides/postgres/concepts/postgres.md). +- Want to hack on KubeDB? Check our [contribution guidelines](/docs/CONTRIBUTING.md). + + +## A Guide to Postgres Ops Requests + +A `PostgresOpsRequest` lets you manage various database operational and day-2 features. For example, managing Database TLS, custom configuration, version upgrade, scaling, and so on. + +### Managing Postgresql database TLS + +If you want to use encrypted connection or certificate-based authentication for clients, you can use `PostgresOpsRequest`. Based on your requirements, you can add, remove or rotate tls certificates. For more information, please follow the documentation section [link1](/docs/guides/postgres/tls/overview), [link2](/docs/guides/postgres/reconfigure-tls/overview.md). + +### Upgrade Postgresql Version + +Upgrading a Postgresql version can be a nightmare for the DBA's. We make this process a lot easier. You can apply a `PostgresOpsRequest` and your database will be upgraded to your desired versions. For more information, check [this](/docs/guides/postgres/update-version/overview/index.md) section of documentation. + +> **Note**: Before Upgrading, make sure your current version and the version you want to upgrade to, has the same base image. Also do not try to make a major jump where the major version difference is greater than one. + +### Scaling Postgresql Database + +Being able to scale the database both horizontally and vertically is a blessing for database to handle more incoming loads. But sadly, just increasing the database replica should not work for most of the databases. Because the databases need to join the cluster and perform a few other database-specific tasks before joining the cluster. Don't worry, we take care of those for you. You simply need to create a `PostgresOpsRequest`, and the scaling will be handled automatically. + +#### Horizontal Scaling + +For scaling Horizontally, follow [this](/docs/guides/postgres/scaling/horizontal-scaling/overview/index.md) section of the documentation. + +#### Vertical Scaling + +For vertical scaling, follow [this](/docs/guides/postgres/scaling/vertical-scaling/_index.md) section. + +#### Auto Scaling + +We also support autoscaling! You can configure auto-scaling your database and forget about the loads that your system might face during peak hours! To set up and configure, visit [here](/docs/guides/postgres/autoscaler/compute/overview.md) for compute autoscaling and [here](/docs/guides/postgres/autoscaler/storage/overview.md) for storage. + +### VolumeExpansion of Postgresql Database + +For volume expansion, follow [this](/docs/guides/postgres/volume-expansion/Overview/overview.md) section. + +### Re-configure Postgresql configuration parameters + +Do you need to update your PostgreSQL `shared_buffers`, `max_connections`, or other parameters? You can use our Reconfigure `PostgresOpsRequest`. Follow [here](/docs/guides/postgres/reconfigure/overview.md) + +### Remote Replica Support + +Do you want to have a backup data center where you want to run your postgresql database to recover from a data center failure as soon as possible? + +Follow [here](/docs/guides/postgres/remote-replica/remotereplica.md). + diff --git a/docs/guides/oracle/quickstart/guide.md b/docs/guides/oracle/quickstart/guide.md index 1c1e3e307..2a97367eb 100644 --- a/docs/guides/oracle/quickstart/guide.md +++ b/docs/guides/oracle/quickstart/guide.md @@ -128,7 +128,7 @@ operator will also create a governing service for PetSets with the name `kubedb` present. If we describe the `Oracle` CRD we will get an overview of the steps that were followed. ```shell -kubectl describe oracle -n demo oracle +$ kubectl describe oracle -n demo oracle Name: oracle Namespace: demo @@ -258,5 +258,36 @@ service/oracle ClusterIP 10.43.170.95 1521/TCP 109m service/oracle-pods ClusterIP None 1521/TCP 109m ``` +🔹Status: (What the operator reports now) -## Connect to Oracle Database \ No newline at end of file + Conditions: + - ProvisioningStarted → operator started creating the DB. + - ReplicaReady → all pods are running. + - AcceptingConnection → DB listener is online at port 1521. + - Ready → fully ready for queries. + - Provisioned → provisioning completed successfully. + Phase: + - Ready → Database is online, healthy, and serving connections. + + + +## Connect to Oracle Database +```shell + kubectl exec -it -n demo oracle-0 -- bash +Defaulted container "oracle" out of: oracle, oracle-init (init) +bash-4.2$ sqlplus / as sysdba + +SQL*Plus: Release 21.0.0.0.0 - Production on Wed Sep 24 05:11:41 2025 +Version 21.3.0.0.0 + +Copyright (c) 1982, 2021, Oracle. All rights reserved. + +Connected to: +Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production +Version 21.3.0.0.0 + +SQL> exit +Disconnected from Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production +Version 21.3.0.0.0 + +``` From 125c66ab936b06579f897f3ea697d566cc717924 Mon Sep 17 00:00:00 2001 From: Bonusree Date: Wed, 24 Sep 2025 14:35:47 +0600 Subject: [PATCH 04/15] readme is ready Signed-off-by: Bonusree --- docs/guides/oracle/README.md | 64 +----------------------------------- 1 file changed, 1 insertion(+), 63 deletions(-) diff --git a/docs/guides/oracle/README.md b/docs/guides/oracle/README.md index 3f15fda67..0554ee9db 100644 --- a/docs/guides/oracle/README.md +++ b/docs/guides/oracle/README.md @@ -20,21 +20,12 @@ aliases: | Features | Availability | |------------------------------------|:------------:| | Clustering | ✓ | -| Warm Standby | ✓ | -| Hot Standby | ✓ | +| Data Guard | ✓ | | Synchronous Replication | ✓ | | Streaming Replication | ✓ | | Automatic Failover | ✓ | -| Continuous Archiving using `wal-g` | ✓ | -| Initialization from WAL archive | ✓ | | Persistent Volume | ✓ | -| Instant Backup | ✓ | -| Scheduled Backup | ✓ | -| Initialization from Snapshot | ✓ | | Initialization using Script | ✓ | -| Builtin Prometheus Discovery | ✓ | -| Using Prometheus operator | ✓ | -| Custom Configuration | ✓ | | Using Custom docker image | ✓ | ## Life Cycle of a PostgreSQL Object @@ -46,58 +37,5 @@ aliases: ## User Guide - [Quickstart PostgreSQL](/docs/guides/postgres/quickstart/quickstart.md) with KubeDB Operator. -- How to [Backup & Restore](/docs/guides/postgres/backup/stash/overview/index.md) PostgreSQL database using Stash. -- Initialize [PostgreSQL with Script](/docs/guides/postgres/initialization/script_source.md). -- [PostgreSQL Clustering](/docs/guides/postgres/clustering/ha_cluster.md) supported by KubeDB Postgres. -- [Streaming Replication](/docs/guides/postgres/clustering/streaming_replication.md) for PostgreSQL clustering. -- Monitor your PostgreSQL database with KubeDB using [`out-of-the-box` builtin-Prometheus](/docs/guides/postgres/monitoring/using-builtin-prometheus.md). -- Monitor your PostgreSQL database with KubeDB using [`out-of-the-box` Prometheus operator](/docs/guides/postgres/monitoring/using-prometheus-operator.md). -- Use [private Docker registry](/docs/guides/postgres/private-registry/using-private-registry.md) to deploy PostgreSQL with KubeDB. -- Detail concepts of [Postgres object](/docs/guides/postgres/concepts/postgres.md). -- Want to hack on KubeDB? Check our [contribution guidelines](/docs/CONTRIBUTING.md). -## A Guide to Postgres Ops Requests - -A `PostgresOpsRequest` lets you manage various database operational and day-2 features. For example, managing Database TLS, custom configuration, version upgrade, scaling, and so on. - -### Managing Postgresql database TLS - -If you want to use encrypted connection or certificate-based authentication for clients, you can use `PostgresOpsRequest`. Based on your requirements, you can add, remove or rotate tls certificates. For more information, please follow the documentation section [link1](/docs/guides/postgres/tls/overview), [link2](/docs/guides/postgres/reconfigure-tls/overview.md). - -### Upgrade Postgresql Version - -Upgrading a Postgresql version can be a nightmare for the DBA's. We make this process a lot easier. You can apply a `PostgresOpsRequest` and your database will be upgraded to your desired versions. For more information, check [this](/docs/guides/postgres/update-version/overview/index.md) section of documentation. - -> **Note**: Before Upgrading, make sure your current version and the version you want to upgrade to, has the same base image. Also do not try to make a major jump where the major version difference is greater than one. - -### Scaling Postgresql Database - -Being able to scale the database both horizontally and vertically is a blessing for database to handle more incoming loads. But sadly, just increasing the database replica should not work for most of the databases. Because the databases need to join the cluster and perform a few other database-specific tasks before joining the cluster. Don't worry, we take care of those for you. You simply need to create a `PostgresOpsRequest`, and the scaling will be handled automatically. - -#### Horizontal Scaling - -For scaling Horizontally, follow [this](/docs/guides/postgres/scaling/horizontal-scaling/overview/index.md) section of the documentation. - -#### Vertical Scaling - -For vertical scaling, follow [this](/docs/guides/postgres/scaling/vertical-scaling/_index.md) section. - -#### Auto Scaling - -We also support autoscaling! You can configure auto-scaling your database and forget about the loads that your system might face during peak hours! To set up and configure, visit [here](/docs/guides/postgres/autoscaler/compute/overview.md) for compute autoscaling and [here](/docs/guides/postgres/autoscaler/storage/overview.md) for storage. - -### VolumeExpansion of Postgresql Database - -For volume expansion, follow [this](/docs/guides/postgres/volume-expansion/Overview/overview.md) section. - -### Re-configure Postgresql configuration parameters - -Do you need to update your PostgreSQL `shared_buffers`, `max_connections`, or other parameters? You can use our Reconfigure `PostgresOpsRequest`. Follow [here](/docs/guides/postgres/reconfigure/overview.md) - -### Remote Replica Support - -Do you want to have a backup data center where you want to run your postgresql database to recover from a data center failure as soon as possible? - -Follow [here](/docs/guides/postgres/remote-replica/remotereplica.md). - From 6e209c117ec796a0c0e28593d6d3cfcd3698172a Mon Sep 17 00:00:00 2001 From: Bonusree Date: Wed, 24 Sep 2025 18:08:30 +0600 Subject: [PATCH 05/15] concepts of oracle Signed-off-by: Bonusree --- docs/guides/oracle/_index.md | 2 +- docs/guides/oracle/concepts/oracle.md | 229 ++++++++++++++++++++++++ docs/guides/oracle/failover/_index.md | 11 ++ docs/guides/oracle/failover/overview.md | 11 ++ docs/guides/oracle/quickstart/guide.md | 2 +- 5 files changed, 253 insertions(+), 2 deletions(-) create mode 100644 docs/guides/oracle/concepts/oracle.md diff --git a/docs/guides/oracle/_index.md b/docs/guides/oracle/_index.md index 531d03a8a..6f765658b 100644 --- a/docs/guides/oracle/_index.md +++ b/docs/guides/oracle/_index.md @@ -5,6 +5,6 @@ menu: identifier: guides-oracle name: Oracle parent: guides - weight: 10 + weight: 1 menu_name: docs_{{ .version }} --- diff --git a/docs/guides/oracle/concepts/oracle.md b/docs/guides/oracle/concepts/oracle.md new file mode 100644 index 000000000..473885868 --- /dev/null +++ b/docs/guides/oracle/concepts/oracle.md @@ -0,0 +1,229 @@ +--- +title: Oracle CRD +menu: + docs_{{ .version }}: + identifier: orc-concepts + name: Oracle + parent: orc-concepts-oracle + weight: 10 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- + +# Oracle CRD + +## What is Oracle CRD? + +`Oracle` is a Kubernetes Custom Resource Definition (CRD) maintained by KubeDB. It provides a declarative configuration for Oracle database instances in your Kubernetes cluster, enabling you to manage Oracle databases using native Kubernetes tools and practices. + +## Key Features + +- **Native Kubernetes Integration**: Manage Oracle databases using kubectl and Kubernetes APIs +- **Flexible Deployment Modes**: Support for both Standalone and DataGuard configurations +- **High Availability**: Built-in support for Oracle DataGuard for disaster recovery +- **Resource Management**: Fine-grained control over CPU, memory, and storage resources +- **Security Controls**: Built-in security context configuration for enhanced security +- **Automated Operations**: Simplified deployment and management of complex Oracle setups + +## Deployment Modes + +KubeDB Oracle supports two primary deployment modes: + +### 1. Standalone Mode +- Single instance Oracle database deployment +- Suitable for development and testing environments +- Simplified configuration and management + +### 2. DataGuard Mode +- High availability configuration with primary and standby databases +- Built-in disaster recovery capabilities +- Support for synchronous and asynchronous replication +- Observer process for automated failover + +## Oracle CRD Specification + +Like any official Kubernetes resource, an `Oracle` object has standard fields: +- `apiVersion`: Specifies the API version (kubedb.com/v1alpha2) +- `kind`: Defines the resource type (Oracle) +- `metadata`: Contains name, namespace, and other metadata +- `spec`: Defines the desired state of your Oracle instance + +### Sample Oracle Configuration + +#### 1. Standalone Mode Configuration + +```yaml +apiVersion: kubedb.com/v1alpha2 +kind: Oracle +metadata: + name: oracle + namespace: demo +spec: + version: 21.3.0 + mode: Standalone + edition: enterprise + replicas: 1 + storageType: Durable + storage: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 30Gi + podTemplate: + spec: + securityContext: + fsGroup: 54321 + runAsGroup: 54321 + runAsUser: 54321 + containers: + - name: oracle + resources: + limits: + cpu: "4" + memory: 10Gi + requests: + cpu: "2" + memory: 3Gi + deletionPolicy: Delete +``` + +#### 2. DataGuard Mode Configuration + +```yaml +apiVersion: kubedb.com/v1alpha2 +kind: Oracle +metadata: + name: oracle-sample + namespace: demo +spec: + version: 21.3.0 + mode: DataGuard + edition: enterprise + replicas: 3 + + # DataGuard Specific Configuration + dataGuard: + protectionMode: MaximumProtection + standbyType: PHYSICAL + syncMode: SYNC + applyLagThreshold: 0 + transportLagThreshold: 0 + fastStartFailover: + fastStartFailoverThreshold: 15 + observer: + podTemplate: + spec: + containers: + - name: observer + resources: + limits: + cpu: "1" + memory: 2Gi + requests: + cpu: 500m + memory: 2Gi + storage: + resources: + requests: + storage: 1Gi + + # Storage Configuration + storageType: Durable + storage: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 30Gi + + # Pod Configuration + podTemplate: + spec: + securityContext: + fsGroup: 54321 + runAsGroup: 54321 + runAsUser: 54321 + serviceAccountName: oracle-sample + containers: + - name: oracle + resources: + limits: + cpu: "4" + memory: 10Gi + requests: + cpu: "1500m" + memory: 4Gi + - name: oracle-coordinator + resources: + limits: + memory: 256Mi + requests: + cpu: 200m + memory: 256Mi + + deletionPolicy: Delete +``` + +### Configuration Parameters Explained + +#### Core Parameters +- `version`: Oracle database version (e.g., 21.3.0) +- `mode`: Deployment mode (Standalone or DataGuard) +- `edition`: Oracle edition (enterprise, standard) +- `replicas`: Number of database instances + +#### DataGuard Specific Parameters +- `protectionMode`: Defines the data protection mode (MaximumProtection, MaximumAvailability, MaximumPerformance) +- `standbyType`: Type of standby database (PHYSICAL) +- `syncMode`: Synchronization mode between primary and standby (SYNC, ASYNC) +- `applyLagThreshold`: Maximum acceptable lag in applying changes +- `transportLagThreshold`: Maximum acceptable transport lag +- `fastStartFailover`: Configuration for automated failover +- `observer`: Configuration for the DataGuard observer process + +#### Storage Configuration +- `storageType`: Type of storage (Durable for persistent storage) +- `storage`: Kubernetes PVC configuration + - `accessModes`: Volume mount access modes + - `resources`: Storage resource requests and limits + +#### Pod Configuration +- `podTemplate`: Pod customization options + - `securityContext`: Security settings + - `containers`: Resource configurations for various containers + - `serviceAccountName`: Kubernetes service account to use + +#### Lifecycle Management +- `deletionPolicy`: Resource cleanup policy on deletion + +## Best Practices + +1. **Deployment Mode Selection**: + - Use Standalone mode for development/testing + - Choose DataGuard mode for production environments requiring high availability + +2. **Resource Planning**: + - Allocate sufficient resources based on workload + - Consider overhead for DataGuard synchronization + - Plan observer resources carefully + +3. **Storage Configuration**: + - Use enterprise-grade storage for production + - Configure appropriate storage class + - Plan for backup storage + +4. **Security**: + - Implement proper security contexts + - Use service accounts with minimum required permissions + - Regular security patches and updates + +5. **Monitoring and Maintenance**: + - Monitor replication lag in DataGuard setups + - Regular backup testing + - Keep track of resource usage patterns + +6. **High Availability**: + - Configure appropriate FastStart Failover thresholds + - Regular failover testing + - Monitor observer health diff --git a/docs/guides/oracle/failover/_index.md b/docs/guides/oracle/failover/_index.md index e69de29bb..ea09eb3f4 100644 --- a/docs/guides/oracle/failover/_index.md +++ b/docs/guides/oracle/failover/_index.md @@ -0,0 +1,11 @@ +--- +title: Oracle Fdr +menu: + docs_{{ .version }}: + identifier: guides-oracle-fdr + name: Failover and Disaster Recovery + parent: guides-oracle + weight: 5 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- \ No newline at end of file diff --git a/docs/guides/oracle/failover/overview.md b/docs/guides/oracle/failover/overview.md index e69de29bb..21c65cc4b 100644 --- a/docs/guides/oracle/failover/overview.md +++ b/docs/guides/oracle/failover/overview.md @@ -0,0 +1,11 @@ +--- +title: Oracle Failover and Disaster Recovery +menu: + docs_{{ .version }}: + identifier: guides-oracle-overview + name: Overview + parent: guides-oracle-fdr + weight: 10 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- diff --git a/docs/guides/oracle/quickstart/guide.md b/docs/guides/oracle/quickstart/guide.md index 2a97367eb..705a146c9 100644 --- a/docs/guides/oracle/quickstart/guide.md +++ b/docs/guides/oracle/quickstart/guide.md @@ -120,7 +120,7 @@ Here, - `spec.replicas`: Number of database pods (1 for standalone, ≥2 for DataGuard). -- `spec.deletionPolicy`: Controls behavior when deleting the Oracle CRD (`Delete`, `Halt`, `WipeOut`). +- `spec.deletionPolicy`: Controls behavior when deleting the Oracle CRD (`Delete`, `Halt`, `WipeOut`). For more details, see [here](https://kubedb.com/docs/raw/{{< param "info.version" >}}/guides/oracle/management/#deletion-policy). `KubeDB` operator watches for `Oracle` objects using Kubernetes api. When a `Oracle` object is created, KubeDB operator will create a new PetSet and a Service with the matching Oracle object name. `KubeDB` From 3324ba9b090192afaf15b342582fffb324d014df Mon Sep 17 00:00:00 2001 From: Bonusree Date: Mon, 29 Sep 2025 18:00:44 +0600 Subject: [PATCH 06/15] oracle failover initiate Signed-off-by: Bonusree --- docs/guides/oracle/failover/overview.md | 296 +++++++++++++++++++++++- tandby | 165 +++++++++++++ 2 files changed, 455 insertions(+), 6 deletions(-) create mode 100644 tandby diff --git a/docs/guides/oracle/failover/overview.md b/docs/guides/oracle/failover/overview.md index 21c65cc4b..7eca4244d 100644 --- a/docs/guides/oracle/failover/overview.md +++ b/docs/guides/oracle/failover/overview.md @@ -1,11 +1,295 @@ --- -title: Oracle Failover and Disaster Recovery + +title: Oracle Failover and DR Scenarios menu: - docs_{{ .version }}: - identifier: guides-oracle-overview - name: Overview - parent: guides-oracle-fdr - weight: 10 +docs_{{ .version }}: +identifier: guides-oracle-failure-and-disaster-recovery-overview +name: Guide +parent: guides-oracle-failure-and-disaster-recovery +weight: 20 menu_name: docs_{{ .version }} section_menu_id: guides +----------------------- + +> New to KubeDB? Please start [here](/docs/README.md). + +# Maximizing Oracle Uptime and Reliability + +## A Guide to KubeDB's Data Guard Based High Availability and Auto-Failover + +For mission-critical workloads, Oracle databases are often deployed with `Data Guard`, Oracle’s proven +technology for disaster recovery and failover. KubeDB extends this capability by natively supporting Data +Guard based replication and automatic failover within Kubernetes clusters. + +When the `primary database` becomes unavailable, `KubeDB` together with `Oracle Data Guard` and its `observer process` +ensures a healthy standby is automatically promoted to primary. This guarantees minimal downtime, strict data +consistency, and seamless recovery from failures without manual intervention. + +This guide demonstrates how to set up an `Oracle HA cluster` with `Data Guard` enabled in `KubeDB`, and how failover works in different scenarios. + --- + +### Before You Start + +* A running Kubernetes cluster with `kubectl` configured. +* KubeDB operator and CLI installed ([instructions](/setup/README.md)). +* A valid `StorageClass` available for persistent volumes. + +Check StorageClasses: + +```bash +$ kubectl get storageclasses +NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE +local-path (default) rancher.io/local-path Delete WaitForFirstConsumer false 13d + +``` + +* We’ll use the `demo` namespace for isolation: + +```bash +$ kubectl create ns demo +``` + +--- + +### Step 1: Deploy Oracle with Data Guard Enabled + +Save the following YAML as `oracle-dataguard.yaml`: + +```yaml +apiVersion: kubedb.com/v1alpha2 +kind: Oracle +metadata: + name: oracle-sample + namespace: demo +spec: + version: 21.3.0 + edition: enterprise + mode: DataGuard + replicas: 3 + storageType: Durable + storage: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 30Gi + deletionPolicy: Delete + + dataGuard: + protectionMode: MaximumProtection + standbyType: PHYSICAL + syncMode: SYNC + applyLagThreshold: 0 + transportLagThreshold: 0 + fastStartFailover: + fastStartFailoverThreshold: 15 + observer: + podTemplate: + spec: + containers: + - name: observer + resources: + requests: + cpu: 500m + memory: 2Gi + limits: + cpu: "1" + memory: 2Gi + initContainers: + - name: observer-init + resources: + requests: + cpu: 200m + memory: 256Mi + limits: + memory: 512Mi + + podTemplate: + spec: + serviceAccountName: oracle-sample + securityContext: + runAsUser: 54321 + runAsGroup: 54321 + fsGroup: 54321 + containers: + - name: oracle + resources: + requests: + cpu: "1500m" + memory: 4Gi + limits: + cpu: "4" + memory: 10Gi + - name: oracle-coordinator + resources: + requests: + cpu: 200m + memory: 256Mi + limits: + memory: 256Mi + initContainers: + - name: oracle-init + resources: + requests: + cpu: 200m + memory: 256Mi + limits: + memory: 512Mi +``` + +Apply the manifest: + +```bash +$ kubectl apply -f oracle-dataguard.yaml +``` + +Monitor status until all pods are ready: + +```bash +$ watch kubectl get oracle -n demo +NAME VERSION MODE STATUS AGE +oracle-sample 21.3.0 DataGuard Ready 25m + +``` + +--- + +### Step 2: Understanding Oracle Data Guard Failover + +Oracle Data Guard in KubeDB works by maintaining **synchronous replication** between a `primary` and `standby` +databases. Key concepts: + +* **Primary**: Accepts all writes. +* **Physical Standby**: Exact replica kept in sync with redo logs (WAL-like mechanism). +* **Observer**: External monitoring process that detects failures and triggers `Fast-Start Failover (FSFO)`. +* **Maximum Protection mode**: Ensures **zero data loss** by requiring at least one synchronous standby to acknowledge transactions before commit. +* **FastStartFailoverThreshold**: Defines how quickly failover should happen (e.g., 15 seconds). + +When failure is detected, the observer promotes a standby to primary. The cluster is then automatically reconfigured so all remaining replicas realign under the new primary. + + + +### Step 3: Simulating Failover Scenarios + +You can check current roles: + +```bash +$ kubectl get pods -n demo --show-labels | grep role +oracle-sample-0 2/2 Running 0 49m app.kubernetes.io/component=database,app.kubernetes.io/instance=oracle-sample,app.kubernetes.io/managed-by=kubedb.com,app.kubernetes.io/name=oracles.kubedb.com,apps.kubernetes.io/pod-index=0,controller-revision-hash=oracle-sample-6d6fdb69ff,kubedb.com/role=primary,oracle.db/role=instance,statefulset.kubernetes.io/pod-name=oracle-sample-0 +oracle-sample-1 2/2 Running 0 49m app.kubernetes.io/component=database,app.kubernetes.io/instance=oracle-sample,app.kubernetes.io/managed-by=kubedb.com,app.kubernetes.io/name=oracles.kubedb.com,apps.kubernetes.io/pod-index=1,controller-revision-hash=oracle-sample-6d6fdb69ff,kubedb.com/role=standby,oracle.db/role=instance,statefulset.kubernetes.io/pod-name=oracle-sample-1 +oracle-sample-2 2/2 Running 0 48m app.kubernetes.io/component=database,app.kubernetes.io/instance=oracle-sample,app.kubernetes.io/managed-by=kubedb.com,app.kubernetes.io/name=oracles.kubedb.com,apps.kubernetes.io/pod-index=2,controller-revision-hash=oracle-sample-6d6fdb69ff,kubedb.com/role=standby,oracle.db/role=instance,statefulset.kubernetes.io/pod-name=oracle-sample-2 +oracle-sample-observer-0 1/1 Running 0 49m app.kubernetes.io/component=database,app.kubernetes.io/instance=oracle-sample,app.kubernetes.io/managed-by=kubedb.com,app.kubernetes.io/name=oracles.kubedb.com,apps.kubernetes.io/pod-index=0,controller-revision-hash=oracle-sample-observer-68648c7957,oracle.db/role=observer,statefulset.kubernetes.io/pod-name=oracle-sample-observer-0 + +``` + +Typical output: + +```shell +$ watch -n 2 "kubectl get pods -n demo -o jsonpath='{range .items[*]}{.metadata.name} {.metadata.labels.kubedb\\.com/role}{\"\\n\"}{end}'" +``` + +```bash +oracle-sample-0 primary +oracle-sample-1 standby +oracle-sample-2 standby +oracle-sample-observer-0 +``` + +--- + +#### Case 1: Delete the Primary + +```bash +$ kubectl delete pod -n demo oracle-sample-0 +``` + +Within ~15 seconds (defined by `fastStartFailoverThreshold`), a standby is promoted: + +``` +oracle-sample-1 kubedb.com/role=primary +oracle-sample-2 kubedb.com/role=standby +``` + +The deleted pod comes back as a **standby** and automatically resynchronizes. + +--- + +#### Case 2: Delete Primary and One Standby + +```bash +kubectl delete pod -n demo oracle-sample-0 oracle-sample-1 +``` + +The remaining standby (`oracle-sample-2`) is promoted to primary. The deleted pods return and rejoin as standbys. + +--- + +#### Case 3: Delete All Standbys + +```bash +kubectl delete pod -n demo oracle-sample-1 oracle-sample-2 +``` + +The primary (`oracle-sample-0`) continues serving traffic. Once the standbys are recreated, they rejoin the Data Guard configuration and catch up from archived redo logs. + +--- + +#### Case 4: Delete All Pods + +```bash +kubectl delete pod -n demo oracle-sample-0 oracle-sample-1 oracle-sample-2 +``` + +After restart, the cluster automatically re-establishes Data Guard roles: + +``` +oracle-sample-0 kubedb.com/role=primary +oracle-sample-1 kubedb.com/role=standby +oracle-sample-2 kubedb.com/role=standby +``` + +--- + +### Step 4: Disaster Recovery with Volume Expansion + +If storage becomes full, the database enters a `Not Ready` state. KubeDB allows recovery via **VolumeExpansion OpsRequest**: + +```yaml +apiVersion: ops.kubedb.com/v1alpha1 +kind: OracleOpsRequest +metadata: + name: oracle-volume-expansion + namespace: demo +spec: + type: VolumeExpansion + databaseRef: + name: oracle-sample + volumeExpansion: + mode: "Offline" + oracle: 50Gi +``` + +Apply the manifest: + +```bash +kubectl apply -f oracle-volume-expansion.yaml +``` + +KubeDB expands the volume and recovers the database automatically. + +> **Note:** Use `Online` mode if your storage class supports it; otherwise choose `Offline`. + +--- + +### CleanUp + +To delete resources: + +```bash +kubectl delete oracle -n demo oracle-sample +kubectl delete ns demo +``` + +--- + diff --git a/tandby b/tandby new file mode 100644 index 000000000..1e3a5466f --- /dev/null +++ b/tandby @@ -0,0 +1,165 @@ +* add-oracle + mariadb-failover + master + mssql-failover + rotateauth + remotes/origin/HEAD -> origin/master + remotes/origin/add-oracle + remotes/origin/add-singlestore + remotes/origin/clickhouse + remotes/origin/concepts-pg-archiver + remotes/origin/deletionpolicy + remotes/origin/dist-mariadb + remotes/origin/draft-appplication-level-es + remotes/origin/druid-failover + remotes/origin/es-ops + remotes/origin/failover + remotes/origin/ferret-failover + remotes/origin/fix-md-version + remotes/origin/fix-menu + remotes/origin/hazelcast + remotes/origin/ignite + remotes/origin/kafka-doc + remotes/origin/kubedb/cli@196a75ca + remotes/origin/kubedb/cli@2b95f75c + remotes/origin/kubedb/cli@3b6a62ec + remotes/origin/kubedb/cli@41139e49 + remotes/origin/kubedb/cli@6980c711 + remotes/origin/kubedb/cli@6adaa37f + remotes/origin/kubedb/cli@73976008 + remotes/origin/kubedb/cli@7aeaa861 + remotes/origin/kubedb/cli@8ff0608c + remotes/origin/kubedb/cli@9953efb7 + remotes/origin/kubedb/cli@bbe4b2ef + remotes/origin/kubedb/cli@be1a1198 + remotes/origin/kubedb/cli@ceb2bda4 + remotes/origin/kubedb/cli@cf49e9aa + remotes/origin/kubedb/cli@da20a307 + remotes/origin/kubedb/cli@f9be578b + remotes/origin/kubedb/provisioner@1998ae5f + remotes/origin/kubedb/provisioner@55454b8e + remotes/origin/kubedb/provisioner@5a184337 + remotes/origin/kubedb/provisioner@77942092 + remotes/origin/kubedb/provisioner@c1442971 + remotes/origin/kubedb/provisioner@c2f93ed2 + remotes/origin/kubedb/provisioner@c3c82f4f + remotes/origin/kubedb/provisioner@ddc05af4 + remotes/origin/kubedb/provisioner@f3804631 + remotes/origin/kubedb/webhook-server@26e96671 + remotes/origin/kubedb/webhook-server@3c0d0c2e + remotes/origin/kubedb/webhook-server@4eab5c8e + remotes/origin/kubedb/webhook-server@7bfab0c6 + remotes/origin/kubedb/webhook-server@cb7d5c65 + remotes/origin/lv808 + remotes/origin/master + remotes/origin/memcached + remotes/origin/mg-archiver + remotes/origin/mg-failover + remotes/origin/mssql-failover + remotes/origin/mysql-failover + remotes/origin/pg-doc + remotes/origin/pgbouncerDocs + remotes/origin/proxysql-doc-2 + remotes/origin/recommendation + remotes/origin/release-0.1 + remotes/origin/release-0.10 + remotes/origin/release-0.11 + remotes/origin/release-0.12 + remotes/origin/release-0.13 + remotes/origin/release-0.2 + remotes/origin/release-0.3 + remotes/origin/release-0.4 + remotes/origin/release-0.5 + remotes/origin/release-0.6 + remotes/origin/release-0.7 + remotes/origin/release-0.8 + remotes/origin/release-0.9 + remotes/origin/release-v2020.07.10-beta.0 + remotes/origin/release-v2020.09.04-beta.0 + remotes/origin/release-v2020.10.24-beta.0 + remotes/origin/release-v2020.10.26-beta.0 + remotes/origin/release-v2020.10.27-rc.0 + remotes/origin/release-v2020.10.27-rc.1 + remotes/origin/release-v2020.10.27-rc.2 + remotes/origin/release-v2020.10.28 + remotes/origin/release-v2020.11.08 + remotes/origin/release-v2020.11.11 + remotes/origin/release-v2020.11.12 + remotes/origin/release-v2020.12.10 + remotes/origin/release-v2021.01.02-rc.0 + remotes/origin/release-v2021.01.14 + remotes/origin/release-v2021.01.15 + remotes/origin/release-v2021.01.26 + remotes/origin/release-v2021.03.11 + remotes/origin/release-v2021.03.17 + remotes/origin/release-v2021.04.16 + remotes/origin/release-v2021.06.21-rc.0 + remotes/origin/release-v2021.06.23 + remotes/origin/release-v2021.08.23 + remotes/origin/release-v2021.09.09 + remotes/origin/release-v2021.09.30 + remotes/origin/release-v2021.11.18 + remotes/origin/release-v2021.11.24 + remotes/origin/release-v2021.12.21 + remotes/origin/release-v2022.02.22 + remotes/origin/release-v2022.03.28 + remotes/origin/release-v2022.05.24 + remotes/origin/release-v2022.08.02-rc.0 + remotes/origin/release-v2022.08.04-rc.1 + remotes/origin/release-v2022.08.08 + remotes/origin/release-v2022.10.12-rc.0 + remotes/origin/release-v2022.10.18 + remotes/origin/release-v2022.12.13-rc.0 + remotes/origin/release-v2022.12.24-rc.1 + remotes/origin/release-v2022.12.28 + remotes/origin/release-v2023.01.17 + remotes/origin/release-v2023.01.31 + remotes/origin/release-v2023.02.28 + remotes/origin/release-v2023.04.10 + remotes/origin/release-v2023.06.13-rc.0 + remotes/origin/release-v2023.06.19 + remotes/origin/release-v2023.08.18 + remotes/origin/release-v2023.10.9 + remotes/origin/release-v2023.11.2 + remotes/origin/release-v2023.11.29-rc.0 + remotes/origin/release-v2023.12.1-rc.1 + remotes/origin/release-v2023.12.11 + remotes/origin/release-v2023.12.21 + remotes/origin/release-v2023.12.28 + remotes/origin/release-v2024.1.19-beta.1 + remotes/origin/release-v2024.1.26-rc.0 + remotes/origin/release-v2024.1.28-rc.1 + remotes/origin/release-v2024.1.31 + remotes/origin/release-v2024.1.7-beta.0 + remotes/origin/release-v2024.11.18 + remotes/origin/release-v2024.11.8-rc.0 + remotes/origin/release-v2024.12.18 + remotes/origin/release-v2024.2.14 + remotes/origin/release-v2024.3.16 + remotes/origin/release-v2024.3.9-rc.0 + remotes/origin/release-v2024.4.27 + remotes/origin/release-v2024.6.4 + remotes/origin/release-v2024.7.11-rc.1 + remotes/origin/release-v2024.7.3-rc.0 + remotes/origin/release-v2024.8.14-rc.3 + remotes/origin/release-v2024.8.2-rc.2 + remotes/origin/release-v2024.8.21 + remotes/origin/release-v2024.9.30 + remotes/origin/release-v2025.1.9 + remotes/origin/release-v2025.2.19 + remotes/origin/release-v2025.2.6-rc.0 + remotes/origin/release-v2025.3.20-rc.1 + remotes/origin/release-v2025.3.24 + remotes/origin/release-v2025.4.30 + remotes/origin/release-v2025.5.30 + remotes/origin/release-v2025.6.30 + remotes/origin/release-v2025.7.30-rc.0 + remotes/origin/release-v2025.7.31 + remotes/origin/release-v2025.8.31 + remotes/origin/remote-replica.bac + remotes/origin/rotateauth + remotes/origin/secret-kind + remotes/origin/sync + remotes/origin/update-dbgate + remotes/origin/update-kafka + remotes/origin/update-mg-docs From 923fe2630b64c8da7f1ad81329c9510ddd2aec7a Mon Sep 17 00:00:00 2001 From: Bonusree Date: Mon, 29 Sep 2025 18:10:08 +0600 Subject: [PATCH 07/15] dataguard yaml Signed-off-by: Bonusree --- docs/examples/oracle/dataguard/dataguard.yaml | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 docs/examples/oracle/dataguard/dataguard.yaml diff --git a/docs/examples/oracle/dataguard/dataguard.yaml b/docs/examples/oracle/dataguard/dataguard.yaml new file mode 100644 index 000000000..7f3d469f5 --- /dev/null +++ b/docs/examples/oracle/dataguard/dataguard.yaml @@ -0,0 +1,85 @@ +apiVersion: kubedb.com/v1alpha2 +kind: Oracle +metadata: + name: oracle-sample + namespace: demo +spec: + dataGuard: + applyLagThreshold: 0 + fastStartFailover: + fastStartFailoverThreshold: 15 + observer: + podTemplate: + spec: + containers: + - name: observer + resources: + limits: + cpu: "1" + memory: 2Gi + requests: + cpu: 500m + memory: 2Gi + initContainers: + - name: observer-init + resources: + limits: + memory: 512Mi + requests: + cpu: 200m + memory: 256Mi + podPlacementPolicy: + name: default + storage: + resources: + requests: + storage: 1Gi + protectionMode: MaximumProtection + standbyType: PHYSICAL + syncMode: SYNC + transportLagThreshold: 0 + deletionPolicy: Delete + edition: enterprise + mode: DataGuard + podTemplate: + spec: + containers: + - name: oracle + resources: + limits: + cpu: "4" + memory: 10Gi + requests: + cpu: "1500m" + memory: 4Gi + - name: oracle-coordinator + resources: + limits: + memory: 256Mi + requests: + cpu: 200m + memory: 256Mi + initContainers: + - name: oracle-init + resources: + limits: + memory: 512Mi + requests: + cpu: 200m + memory: 256Mi + podPlacementPolicy: + name: default + securityContext: + fsGroup: 54321 + runAsGroup: 54321 + runAsUser: 54321 + serviceAccountName: oracle-sample + replicas: 3 + storage: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 30Gi + storageType: Durable + version: 21.3.0 \ No newline at end of file From 79aa242a9bc4f551a0c32895a7531f111200bd76 Mon Sep 17 00:00:00 2001 From: Bonusree Date: Wed, 1 Oct 2025 12:44:30 +0600 Subject: [PATCH 08/15] oracle failover Signed-off-by: Bonusree --- .../failure-and-disaster-recovery/overview.md | 4 +- docs/guides/oracle/failover/overview.md | 325 +++++++++++++++--- docs/guides/oracle/quickstart/guide.md | 35 +- 3 files changed, 299 insertions(+), 65 deletions(-) diff --git a/docs/guides/mysql/failure-and-disaster-recovery/overview.md b/docs/guides/mysql/failure-and-disaster-recovery/overview.md index 2e44ce981..a0380240a 100644 --- a/docs/guides/mysql/failure-and-disaster-recovery/overview.md +++ b/docs/guides/mysql/failure-and-disaster-recovery/overview.md @@ -133,7 +133,7 @@ ha-mysql-2 2/2 Running 0 34m app.kubernetes.io/component=data The pod having `kubedb.com/role=primary` is the primary and `kubedb.com/role=standby` are the standby's. -Lets create a table in the primary. +Let's create a table in the primary. ```shell # find the primary pod @@ -239,7 +239,7 @@ ha-mysql-2 standby #### Case 1: Delete the current primary -Lets delete the current primary and see how the role change happens almost immediately. +Let's delete the current primary and see how the role change happens almost immediately. ```shell $ kubectl delete pods -n demo ha-mysql-0 diff --git a/docs/guides/oracle/failover/overview.md b/docs/guides/oracle/failover/overview.md index 7eca4244d..b06d7c63a 100644 --- a/docs/guides/oracle/failover/overview.md +++ b/docs/guides/oracle/failover/overview.md @@ -137,6 +137,19 @@ spec: limits: memory: 512Mi ``` +Here, +- `dataGuard.protectionMode` sets the Data Guard protection level. MaximumProtection ensures zero data loss by requiring standby acknowledgment before commit. + +- `dataGuard.standbyType` defines the standby as `PHYSICAL`, a block-for-block replica of the primary. + +- `dataGuard.syncMode` determines redo log transport. SYNC mode waits for standby confirmation before committing. + +- `dataGuard.applyLagThreshold` and `dataGuard.transportLagThreshold` define maximum allowable lag for redo application and transport; 0 enforces immediate synchronization. + +- `dataGuard.fastStartFailover.fastStartFailoverThreshold` sets the FSFO trigger time in seconds; here, 15 means automatic failover if the primary is unresponsive for 15s. + +- `dataGuard.observer.podTemplate` configures the observer pod, which monitors the primary and triggers FSFO, with CPU and memory resources specified. + Apply the manifest: @@ -160,14 +173,40 @@ oracle-sample 21.3.0 DataGuard Ready 25m Oracle Data Guard in KubeDB works by maintaining **synchronous replication** between a `primary` and `standby` databases. Key concepts: -* **Primary**: Accepts all writes. -* **Physical Standby**: Exact replica kept in sync with redo logs (WAL-like mechanism). -* **Observer**: External monitoring process that detects failures and triggers `Fast-Start Failover (FSFO)`. -* **Maximum Protection mode**: Ensures **zero data loss** by requiring at least one synchronous standby to acknowledge transactions before commit. -* **FastStartFailoverThreshold**: Defines how quickly failover should happen (e.g., 15 seconds). +* **Primary**: Accepts all writes (read/write). +* **Physical Standby**: Exact replica kept in sync by continuously applying **redo logs**. +* **Redo Logs**: Every change in Oracle (INSERT/UPDATE/DELETE) generates redo entries. These are written + to the primary’s redo logs, then shipped and applied to the standby. This ensures durability and that + the standby is always consistent with the primary. +* **Observer**: External monitoring process that detects failures and coordinates **Fast-Start Failover (FSFO)**. +* **Maximum Protection mode**: Ensures **zero data loss** by requiring at least one synchronous standby to + acknowledge receipt of redo logs before a transaction is committed. +* **FastStartFailover (FSFO)**: Automates failover by monitoring the primary. If the primary is unavailable + beyond the configured `fastStartFailoverThreshold` (e.g., 15s), the observer promotes a healthy standby + to primary without human intervention. + +--- + +### How Redo Logs Work (Oracle’s Write-Ahead Mechanism) + +1. When a transaction is issued on the primary (e.g., an `INSERT`), Oracle writes the changes into `redo logs`. +2. The `redo logs` are then transported to `standby` databases. + * **SYNC mode** → Primary waits for standby confirmation before commit (`zero data loss`). + * **ASYNC mode** → Primary does not wait; minimal latency but potential small data loss. +3. The standby continuously applies redo logs so its data stays in sync with the primary. +4. During failover, the new primary already has all the applied redo logs and can immediately continue serving traffic. + +--- + +### How FSFO(FastStartFailover) Works -When failure is detected, the observer promotes a standby to primary. The cluster is then automatically reconfigured so all remaining replicas realign under the new primary. +* `Observer process` continuously monitors the primary and standbys. +* If the primary is unavailable for longer than `fastStartFailoverThreshold`, FSFO triggers an `automatic failover`. +* A `standby` with the most recent redo logs is promoted to `primary`. +* The failed primary, once recovered, rejoins as a `standby` and `resynchronizes`. +Together, **Redo Logs** and **FSFO** guarantee that Oracle databases deployed with KubeDB remain highly available, +consistent, and resilient against node or pod failures. ### Step 3: Simulating Failover Scenarios @@ -182,7 +221,105 @@ oracle-sample-2 2/2 Running 0 48m app.kubernetes.io/ oracle-sample-observer-0 1/1 Running 0 49m app.kubernetes.io/component=database,app.kubernetes.io/instance=oracle-sample,app.kubernetes.io/managed-by=kubedb.com,app.kubernetes.io/name=oracles.kubedb.com,apps.kubernetes.io/pod-index=0,controller-revision-hash=oracle-sample-observer-68648c7957,oracle.db/role=observer,statefulset.kubernetes.io/pod-name=oracle-sample-observer-0 ``` +The pod having `kubedb.com/role=primary` is the primary, `kubedb.com/role=standby` are the standby's and +`oracle-sample-observer-0` is the observer. + + +Let's create a table in the primary. +```shell +kubectl exec -it -n demo oracle-sample-0 -- bash +Defaulted container "oracle" out of: oracle, oracle-coordinator, oracle-init (init) +bash-4.2$ sqlplus / as sysdba + +SQL*Plus: Release 21.0.0.0.0 - Production on Tue Sep 30 06:02:05 2025 +Version 21.3.0.0.0 + +Copyright (c) 1982, 2021, Oracle. All rights reserved. + + +Connected to: +Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production +Version 21.3.0.0.0 + +SQL> CREATE TABLE kathak ( + id NUMBER PRIMARY KEY, + name VARCHAR2(100), + age NUMBER +); + 2 3 4 5 +Table created. + +SQL> INSERT INTO kathak (id, name, age) VALUES (1, 'Radha', 25); +1 row created. + +SQL> INSERT INTO kathak (id, name, age) VALUES (2, 'Gopal', 28); + +1 row created. + +SQL> commit; + +Commit complete. + +# The following commands help format the table for better readability. +SQL> COLUMN id FORMAT 9999 +COLUMN name FORMAT A20 +COLUMN age FORMAT 999 + +SQL> SELECT * FROM kathak; + + ID NAME AGE +----- -------------------- ---- + 1 Radha 25 + 2 Gopal 28 + + +SQL> exit +Disconnected from Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production +Version 21.3.0.0.0 +bash-4.2$ exit +exit + +``` +Verify that the table has been created on the standby nodes. Note that standby pods have read-only access, +so you won't be able to perform any write operations. +```shell +kubectl exec -it -n demo oracle-sample-0 -- bash +Defaulted container "oracle" out of: oracle, oracle-coordinator, oracle-init (init) +bash-4.2$ sqlplus / as sysdba + +SQL*Plus: Release 21.0.0.0.0 - Production on Tue Sep 30 06:50:32 2025 +Version 21.3.0.0.0 + +Copyright (c) 1982, 2021, Oracle. All rights reserved. + + +Connected to: +Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production +Version 21.3.0.0.0 + +SQL> COLUMN id FORMAT 9999 +COLUMN name FORMAT A20 +COLUMN age FORMAT 999 +SQL> SELECT database_role, open_mode FROM v$database; + +DATABASE_ROLE OPEN_MODE +---------------- -------------------- +PHYSICAL STANDBY MOUNTED + +SQL> ALTER DATABASE OPEN READ ONLY; + +Database altered. + +SQL> SELECT * FROM kathak; + + ID NAME AGE +----- -------------------- ---- + 1 Radha 25 + 2 Gopal 28 + + +``` Typical output: ```shell @@ -204,92 +341,178 @@ oracle-sample-observer-0 $ kubectl delete pod -n demo oracle-sample-0 ``` -Within ~15 seconds (defined by `fastStartFailoverThreshold`), a standby is promoted: +Within few minutes (defined by `fastStartFailoverThreshold`), a standby is promoted: ``` -oracle-sample-1 kubedb.com/role=primary -oracle-sample-2 kubedb.com/role=standby +oracle-sample-0 standby +oracle-sample-1 primary +oracle-sample-2 standby +oracle-sample-observer-0 + ``` The deleted pod comes back as a **standby** and automatically resynchronizes. +Now we know how failover is done, let's check if the new primary is working. +```shell +kubectl exec -it -n demo oracle-sample-1 -- bash +Defaulted container "oracle" out of: oracle, oracle-coordinator, oracle-init (init) +bash-4.2$ sqlplus / as sysdba ---- +SQL*Plus: Release 21.0.0.0.0 - Production on Tue Sep 30 06:46:31 2025 +Version 21.3.0.0.0 -#### Case 2: Delete Primary and One Standby +Copyright (c) 1982, 2021, Oracle. All rights reserved. -```bash -kubectl delete pod -n demo oracle-sample-0 oracle-sample-1 -``` -The remaining standby (`oracle-sample-2`) is promoted to primary. The deleted pods return and rejoin as standbys. +Connected to: +Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production +Version 21.3.0.0.0 ---- -#### Case 3: Delete All Standbys +SQL> COLUMN id FORMAT 9999 +COLUMN name FORMAT A20 +COLUMN age FORMAT 999 +SQL> SQL> SQL> +SQL> SELECT * FROM kathak; + + ID NAME AGE +----- -------------------- ---- + 1 Radha 25 + 2 Gopal 28 + +SQL> INSERT INTO kathak (id, name, age) VALUES (3, 'Mohan', 30); + +1 row created. + +SQL> commit; + +Commit complete. + +SQL> SELECT * FROM kathak; + + ID NAME AGE +----- -------------------- ---- + 1 Radha 25 + 2 Gopal 28 + 3 Mohan 30 + +SQL> exit +Disconnected from Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production +Version 21.3.0.0.0 +bash-4.2$ exit -```bash -kubectl delete pod -n demo oracle-sample-1 oracle-sample-2 ``` -The primary (`oracle-sample-0`) continues serving traffic. Once the standbys are recreated, they rejoin the Data Guard configuration and catch up from archived redo logs. +Let's verify the new `standby` is working perfectly +```shell +kubectl exec -it -n demo oracle-sample-0 -- bash +Defaulted container "oracle" out of: oracle, oracle-coordinator, oracle-init (init) +bash-4.2$ sqlplus / as sysdba ---- +SQL*Plus: Release 21.0.0.0.0 - Production on Tue Sep 30 06:50:32 2025 +Version 21.3.0.0.0 -#### Case 4: Delete All Pods +Copyright (c) 1982, 2021, Oracle. All rights reserved. + + +Connected to: +Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production +Version 21.3.0.0.0 + +SQL> COLUMN id FORMAT 9999 +COLUMN name FORMAT A20 +COLUMN age FORMAT 999 + +SQL> SELECT database_role, open_mode FROM v$database; + +DATABASE_ROLE OPEN_MODE +---------------- -------------------- +PHYSICAL STANDBY MOUNTED + +SQL> ALTER DATABASE OPEN READ ONLY; + +Database altered. + +SQL> SELECT * FROM kathak; + + ID NAME AGE +----- -------------------- ---- + 1 Radha 25 + 3 Gopal 28 + 2 Mohan 30 + +SQL> exit +Disconnected from Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production +Version 21.3.0.0.0 +bash-4.2$ command terminated with exit code 137 -```bash -kubectl delete pod -n demo oracle-sample-0 oracle-sample-1 oracle-sample-2 ``` +#### Case 2: Delete Primary and One Standby -After restart, the cluster automatically re-establishes Data Guard roles: +```bash +$ kubectl delete pod -n demo oracle-sample-0 oracle-sample-1 +pod "oracle-sample-0" deleted +pod "oracle-sample-1" deleted ``` -oracle-sample-0 kubedb.com/role=primary -oracle-sample-1 kubedb.com/role=standby -oracle-sample-2 kubedb.com/role=standby + +The remaining standby (`oracle-sample-2`) is promoted to primary. The deleted pods return and rejoin as standbys. + +```shell +oracle-sample-0 primary +oracle-sample-1 standby +oracle-sample-2 standby +oracle-sample-observer-0 + ``` ---- +#### Case 3: Delete All Standbys -### Step 4: Disaster Recovery with Volume Expansion +```bash +$ kubectl delete pod -n demo oracle-sample-1 oracle-sample-2 +``` -If storage becomes full, the database enters a `Not Ready` state. KubeDB allows recovery via **VolumeExpansion OpsRequest**: +The primary (`oracle-sample-0`) continues serving traffic. Once the standbys are recreated, they rejoin the Data Guard configuration and catch up from archived redo logs. + +```bash +oracle-sample-0 primary +oracle-sample-1 standby +oracle-sample-2 standby +oracle-sample-observer-0 -```yaml -apiVersion: ops.kubedb.com/v1alpha1 -kind: OracleOpsRequest -metadata: - name: oracle-volume-expansion - namespace: demo -spec: - type: VolumeExpansion - databaseRef: - name: oracle-sample - volumeExpansion: - mode: "Offline" - oracle: 50Gi ``` -Apply the manifest: +#### Case 4: Delete All Pods ```bash -kubectl apply -f oracle-volume-expansion.yaml +$ kubectl delete pod -n demo oracle-sample-0 oracle-sample-1 oracle-sample-2 +pod "oracle-sample-0" deleted +pod "oracle-sample-1" deleted +pod "oracle-sample-2" deleted +``` +```shell +oracle-sample-0 +oracle-sample-1 +oracle-sample-observer-0 ``` +After restart, the cluster automatically re-establishes Data Guard roles: -KubeDB expands the volume and recovers the database automatically. +```bash +oracle-sample-0 primary +oracle-sample-1 standby +oracle-sample-2 standby +oracle-sample-observer-0 -> **Note:** Use `Online` mode if your storage class supports it; otherwise choose `Offline`. +``` ---- ### CleanUp -To delete resources: +To delete resources run: ```bash kubectl delete oracle -n demo oracle-sample kubectl delete ns demo ``` ---- diff --git a/docs/guides/oracle/quickstart/guide.md b/docs/guides/oracle/quickstart/guide.md index 705a146c9..3a54faacc 100644 --- a/docs/guides/oracle/quickstart/guide.md +++ b/docs/guides/oracle/quickstart/guide.md @@ -241,6 +241,20 @@ Status: Events: ``` + +🔹Status: (What the operator reports now) + + Conditions: + - ProvisioningStarted → operator started creating the DB. + - ReplicaReady → all pods are running. + - AcceptingConnection → DB listener is online at port 1521. + - Ready → fully ready for queries. + - Provisioned → provisioning completed successfully. + Phase: + - Ready → Database is online, healthy, and serving connections. + + + ## Check Resources Created by KubeDB operator: ```shell $ kubectl get oracle,pods,pvc,services -n demo @@ -258,18 +272,6 @@ service/oracle ClusterIP 10.43.170.95 1521/TCP 109m service/oracle-pods ClusterIP None 1521/TCP 109m ``` -🔹Status: (What the operator reports now) - - Conditions: - - ProvisioningStarted → operator started creating the DB. - - ReplicaReady → all pods are running. - - AcceptingConnection → DB listener is online at port 1521. - - Ready → fully ready for queries. - - Provisioned → provisioning completed successfully. - Phase: - - Ready → Database is online, healthy, and serving connections. - - ## Connect to Oracle Database ```shell @@ -291,3 +293,12 @@ Disconnected from Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Pr Version 21.3.0.0.0 ``` +## Cleaning up + +To clean up the Kubernetes resources created by this tutorial, run: + +```bash +kubectl patch -n demo oracle/oracle -p '{"spec":{"deletionPolicy":"WipeOut"}}' --type="merge" +kubectl delete oracle -n demo oracle +kubectl delete ns demo +``` From 2ffd3622b3769a2710217bebbe00a55b7572fd3f Mon Sep 17 00:00:00 2001 From: Bonusree Date: Wed, 1 Oct 2025 13:08:32 +0600 Subject: [PATCH 09/15] url fix Signed-off-by: Bonusree --- docs/guides/oracle/concepts/oracle.md | 4 ++++ docs/guides/oracle/failover/overview.md | 5 +++++ docs/guides/oracle/quickstart/guide.md | 14 +++++++------- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/docs/guides/oracle/concepts/oracle.md b/docs/guides/oracle/concepts/oracle.md index 473885868..e8338cda3 100644 --- a/docs/guides/oracle/concepts/oracle.md +++ b/docs/guides/oracle/concepts/oracle.md @@ -87,7 +87,11 @@ spec: memory: 3Gi deletionPolicy: Delete ``` +```shell +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/examples/oracle/quickstart/standalone.yaml +oracle.kubedb.com/oracle created +``` #### 2. DataGuard Mode Configuration ```yaml diff --git a/docs/guides/oracle/failover/overview.md b/docs/guides/oracle/failover/overview.md index b06d7c63a..8f543a247 100644 --- a/docs/guides/oracle/failover/overview.md +++ b/docs/guides/oracle/failover/overview.md @@ -157,6 +157,11 @@ Apply the manifest: $ kubectl apply -f oracle-dataguard.yaml ``` +```shell +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/examples/oracle/dataguard/dataguard.yaml +oracle.kubedb.com/oracle created + +``` Monitor status until all pods are ready: ```bash diff --git a/docs/guides/oracle/quickstart/guide.md b/docs/guides/oracle/quickstart/guide.md index 3a54faacc..f84b6a484 100644 --- a/docs/guides/oracle/quickstart/guide.md +++ b/docs/guides/oracle/quickstart/guide.md @@ -17,10 +17,10 @@ section_menu_id: guides This tutorial will show you how to use KubeDB to run an Oracle database. -

  lifecycle

+

  lifecycle

>Note: The YAML files used in this tutorial are stored in [docs/examples/oracle/quickstart](https://github.com/kubedb/docs/tree/{{ -< param "info.version" >}}/docs/examples/oracle/quickstart/yamls) folder in the GitHub repository kubedb/docs +< param "info.version" >}}/docs/examples/oracle/quickstart) folder in the GitHub repository kubedb/docs . ## Before You Begin @@ -101,7 +101,7 @@ spec: version: 21.3.0 ``` ```shell -$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/guides/oracle/quickstart/yamls/oracle-quickstart.yaml +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/examples/oracle/quickstart/standalone.yaml oracle.kubedb.com/oracle created ``` @@ -275,7 +275,7 @@ service/oracle-pods ClusterIP None 1521/TCP 109m ## Connect to Oracle Database ```shell - kubectl exec -it -n demo oracle-0 -- bash +$ kubectl exec -it -n demo oracle-0 -- bash Defaulted container "oracle" out of: oracle, oracle-init (init) bash-4.2$ sqlplus / as sysdba @@ -298,7 +298,7 @@ Version 21.3.0.0.0 To clean up the Kubernetes resources created by this tutorial, run: ```bash -kubectl patch -n demo oracle/oracle -p '{"spec":{"deletionPolicy":"WipeOut"}}' --type="merge" -kubectl delete oracle -n demo oracle -kubectl delete ns demo +$ kubectl patch -n demo oracle/oracle -p '{"spec":{"deletionPolicy":"WipeOut"}}' --type="merge" +$ kubectl delete oracle -n demo oracle +$ kubectl delete ns demo ``` From 0ea2e9f6daa29d72590d596fb747f6e06dac3858 Mon Sep 17 00:00:00 2001 From: Bonusree Date: Mon, 6 Oct 2025 17:20:28 +0600 Subject: [PATCH 10/15] url changed Signed-off-by: Bonusree --- docs/guides/oracle/quickstart/guide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guides/oracle/quickstart/guide.md b/docs/guides/oracle/quickstart/guide.md index f84b6a484..6d7b7dfce 100644 --- a/docs/guides/oracle/quickstart/guide.md +++ b/docs/guides/oracle/quickstart/guide.md @@ -120,7 +120,7 @@ Here, - `spec.replicas`: Number of database pods (1 for standalone, ≥2 for DataGuard). -- `spec.deletionPolicy`: Controls behavior when deleting the Oracle CRD (`Delete`, `Halt`, `WipeOut`). For more details, see [here](https://kubedb.com/docs/raw/{{< param "info.version" >}}/guides/oracle/management/#deletion-policy). +- `spec.deletionPolicy`: Controls behavior when deleting the Oracle CRD (`Delete`, `Halt`, `WipeOut`). For more details, see [here](https://appscode.com/blog/post/deletion-policy/). `KubeDB` operator watches for `Oracle` objects using Kubernetes api. When a `Oracle` object is created, KubeDB operator will create a new PetSet and a Service with the matching Oracle object name. `KubeDB` From f1c94d0ec5be07d5b2c10bf0c9163b6efa2d6381 Mon Sep 17 00:00:00 2001 From: Bonusree Date: Tue, 7 Oct 2025 17:44:12 +0600 Subject: [PATCH 11/15] fixede url Signed-off-by: Bonusree --- docs/guides/oracle/failover/overview.md | 4 ++-- docs/guides/oracle/quickstart/guide.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/guides/oracle/failover/overview.md b/docs/guides/oracle/failover/overview.md index 8f543a247..6a1616f91 100644 --- a/docs/guides/oracle/failover/overview.md +++ b/docs/guides/oracle/failover/overview.md @@ -11,7 +11,7 @@ menu_name: docs_{{ .version }} section_menu_id: guides ----------------------- -> New to KubeDB? Please start [here](/docs/README.md). +> New to KubeDB? Please start [here](/docs/setup/README.md). # Maximizing Oracle Uptime and Reliability @@ -32,7 +32,7 @@ This guide demonstrates how to set up an `Oracle HA cluster` with `Data Guard` e ### Before You Start * A running Kubernetes cluster with `kubectl` configured. -* KubeDB operator and CLI installed ([instructions](/setup/README.md)). +* KubeDB operator and CLI installed ([instructions](/docs/setup/README.md)). * A valid `StorageClass` available for persistent volumes. Check StorageClasses: diff --git a/docs/guides/oracle/quickstart/guide.md b/docs/guides/oracle/quickstart/guide.md index 6d7b7dfce..180ca94cc 100644 --- a/docs/guides/oracle/quickstart/guide.md +++ b/docs/guides/oracle/quickstart/guide.md @@ -17,7 +17,7 @@ section_menu_id: guides This tutorial will show you how to use KubeDB to run an Oracle database. -

  lifecycle

+

  lifecycle

>Note: The YAML files used in this tutorial are stored in [docs/examples/oracle/quickstart](https://github.com/kubedb/docs/tree/{{ < param "info.version" >}}/docs/examples/oracle/quickstart) folder in the GitHub repository kubedb/docs From d13c4c743766e553a813b4f475340eacdbec110b Mon Sep 17 00:00:00 2001 From: Bonusree Date: Thu, 23 Oct 2025 15:10:51 +0600 Subject: [PATCH 12/15] oracle Signed-off-by: Bonusree --- docs/guides/oracle/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/guides/oracle/README.md b/docs/guides/oracle/README.md index 0554ee9db..a2cba691f 100644 --- a/docs/guides/oracle/README.md +++ b/docs/guides/oracle/README.md @@ -1,16 +1,16 @@ --- -title: Postgres +title: Oracle menu: docs_{{ .version }}: - identifier: pg-readme-postgres - name: Postgres - parent: pg-postgres-guides + identifier: oracle-readme + name: Oracle + parent: guides-oracle weight: 10 menu_name: docs_{{ .version }} section_menu_id: guides -url: /docs/{{ .version }}/guides/postgres/ +url: /docs/{{ .version }}/guides/oracle/ aliases: - - /docs/{{ .version }}/guides/postgres/README/ + - /docs/{{ .version }}/guides/oracle/README/ --- > New to KubeDB? Please start [here](/docs/README.md). From c7f95585bf36856b5e79460243515836deece0be Mon Sep 17 00:00:00 2001 From: Bonusree Date: Mon, 15 Dec 2025 13:10:26 +0600 Subject: [PATCH 13/15] review and some error fix Signed-off-by: Bonusree --- docs/guides/oracle/README.md | 6 +++--- docs/guides/oracle/_index.md | 2 +- docs/guides/oracle/concepts/_index.md | 11 +++++++++++ docs/guides/oracle/concepts/oracle.md | 4 ++-- docs/guides/oracle/failover/_index.md | 2 +- docs/guides/oracle/failover/overview.md | 15 +++++++-------- 6 files changed, 25 insertions(+), 15 deletions(-) create mode 100644 docs/guides/oracle/concepts/_index.md diff --git a/docs/guides/oracle/README.md b/docs/guides/oracle/README.md index a2cba691f..b4667c66d 100644 --- a/docs/guides/oracle/README.md +++ b/docs/guides/oracle/README.md @@ -15,7 +15,7 @@ aliases: > New to KubeDB? Please start [here](/docs/README.md). -## Supported PostgreSQL Features +## Supported Oracle Features | Features | Availability | |------------------------------------|:------------:| @@ -28,7 +28,7 @@ aliases: | Initialization using Script | ✓ | | Using Custom docker image | ✓ | -## Life Cycle of a PostgreSQL Object +## Life Cycle of a Oracle Object

lifecycle @@ -36,6 +36,6 @@ aliases: ## User Guide -- [Quickstart PostgreSQL](/docs/guides/postgres/quickstart/quickstart.md) with KubeDB Operator. +- [Quickstart Oracle](/docs/guides/oracle/quickstart/guide.md) with KubeDB Operator. diff --git a/docs/guides/oracle/_index.md b/docs/guides/oracle/_index.md index 6f765658b..f00231509 100644 --- a/docs/guides/oracle/_index.md +++ b/docs/guides/oracle/_index.md @@ -5,6 +5,6 @@ menu: identifier: guides-oracle name: Oracle parent: guides - weight: 1 + weight: 11 menu_name: docs_{{ .version }} --- diff --git a/docs/guides/oracle/concepts/_index.md b/docs/guides/oracle/concepts/_index.md new file mode 100644 index 000000000..c0e7c8797 --- /dev/null +++ b/docs/guides/oracle/concepts/_index.md @@ -0,0 +1,11 @@ +--- +title: Oracle Concepts +menu: + docs_{{ .version }}: + identifier: guides-oracle-concepts + name: Concepts + parent: guides-oracle + weight: 25 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- \ No newline at end of file diff --git a/docs/guides/oracle/concepts/oracle.md b/docs/guides/oracle/concepts/oracle.md index e8338cda3..3b85df3d3 100644 --- a/docs/guides/oracle/concepts/oracle.md +++ b/docs/guides/oracle/concepts/oracle.md @@ -2,9 +2,9 @@ title: Oracle CRD menu: docs_{{ .version }}: - identifier: orc-concepts + identifier: guides-oracle-oracle name: Oracle - parent: orc-concepts-oracle + parent: guides-oracle-concepts weight: 10 menu_name: docs_{{ .version }} section_menu_id: guides diff --git a/docs/guides/oracle/failover/_index.md b/docs/guides/oracle/failover/_index.md index ea09eb3f4..fa2fe202f 100644 --- a/docs/guides/oracle/failover/_index.md +++ b/docs/guides/oracle/failover/_index.md @@ -5,7 +5,7 @@ menu: identifier: guides-oracle-fdr name: Failover and Disaster Recovery parent: guides-oracle - weight: 5 + weight: 35 menu_name: docs_{{ .version }} section_menu_id: guides --- \ No newline at end of file diff --git a/docs/guides/oracle/failover/overview.md b/docs/guides/oracle/failover/overview.md index 6a1616f91..a237b882e 100644 --- a/docs/guides/oracle/failover/overview.md +++ b/docs/guides/oracle/failover/overview.md @@ -1,15 +1,14 @@ --- - -title: Oracle Failover and DR Scenarios +title: Oracle Faoilover and Disaster Recovery menu: -docs_{{ .version }}: -identifier: guides-oracle-failure-and-disaster-recovery-overview -name: Guide -parent: guides-oracle-failure-and-disaster-recovery -weight: 20 + docs_{{ .version }}: + identifier: guides-oracle-fdr-overview + name: Overview + parent: guides-oracle-fdr + weight: 10 menu_name: docs_{{ .version }} section_menu_id: guides ------------------------ +--- > New to KubeDB? Please start [here](/docs/setup/README.md). From 9c76f8ad02af7ccabc5daacca12ef6207149acde Mon Sep 17 00:00:00 2001 From: Bonusree Date: Mon, 15 Dec 2025 13:12:09 +0600 Subject: [PATCH 14/15] kubectl spelling fix Signed-off-by: Bonusree --- docs/guides/oracle/quickstart/guide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guides/oracle/quickstart/guide.md b/docs/guides/oracle/quickstart/guide.md index 180ca94cc..731da0820 100644 --- a/docs/guides/oracle/quickstart/guide.md +++ b/docs/guides/oracle/quickstart/guide.md @@ -33,7 +33,7 @@ This tutorial will show you how to use KubeDB to run an Oracle database. - check available StorageClass in your cluster: ```shell -ubectl get storageclasses +$ kubectl get storageclasses NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE standard (default) rancher.io/local-path Delete WaitForFirstConsumer false 28d From f033d671693bc96fa983670dc33e0dc8cf7b708a Mon Sep 17 00:00:00 2001 From: Bonusree Date: Mon, 15 Dec 2025 16:54:25 +0600 Subject: [PATCH 15/15] image added Signed-off-by: Bonusree --- docs/guides/oracle/README.md | 2 +- docs/guides/oracle/quickstart/guide.md | 2 +- docs/images/oracle/oracle_lifecycle.png | Bin 0 -> 83986 bytes 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 docs/images/oracle/oracle_lifecycle.png diff --git a/docs/guides/oracle/README.md b/docs/guides/oracle/README.md index b4667c66d..e6952f370 100644 --- a/docs/guides/oracle/README.md +++ b/docs/guides/oracle/README.md @@ -31,7 +31,7 @@ aliases: ## Life Cycle of a Oracle Object

- lifecycle + lifecycle

## User Guide diff --git a/docs/guides/oracle/quickstart/guide.md b/docs/guides/oracle/quickstart/guide.md index 731da0820..fa5839aeb 100644 --- a/docs/guides/oracle/quickstart/guide.md +++ b/docs/guides/oracle/quickstart/guide.md @@ -17,7 +17,7 @@ section_menu_id: guides This tutorial will show you how to use KubeDB to run an Oracle database. -

  lifecycle

+

  lifecycle

>Note: The YAML files used in this tutorial are stored in [docs/examples/oracle/quickstart](https://github.com/kubedb/docs/tree/{{ < param "info.version" >}}/docs/examples/oracle/quickstart) folder in the GitHub repository kubedb/docs diff --git a/docs/images/oracle/oracle_lifecycle.png b/docs/images/oracle/oracle_lifecycle.png new file mode 100644 index 0000000000000000000000000000000000000000..1b01a2ec3244afd79cb1f6d90a50e1588206ad3e GIT binary patch literal 83986 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 rUi_BP;LurFS<9cF-9%np9Cd@d_4U)qru}j! z0h2wHKV(8lH44W2Bw;2j)~7O{F9UTH@;I8HIhrEKAbxmU*Rj8;l*1(B+;-Kz*=xN0 zW8its-8_!2ixX)G zrLbiMbl^NdVhUO#o`OEOAu1wETW`(0Mc&nGj+E^kji~H+4`H7nkQ%+0N@L zByd`{RfS| zbQ)^(^o&Egzw$LfKl(Yfi*&I|c6PSeLX$U-)3%o4>dvU_Z`qk91b}g)ez~4OQHBvX z{vT$*avfq&{|uLgnFzp6!2s6+BTxX#Muja9Rw23|tIg97>$Kk+Z|VpIoV{-kySW~f z`BrhZ_EOr`)6ux?duynlnf^4Qvnfqr2HZjo#llFwI-A4&(*cF4pBiNhhkw8oD+p0;gdJ@{=O zyHcneLp3yt@o(^8Q1%C-Ef1r&h^nqymrEmp(t^#3JL2ed@R=2fUEU^XAGPpoXflcYk78-#KXbqT#%v z%9{0ux7)y>$-*Xi;N2=i7V{t_YZBP0&4fJ=KCQOYtNS2-x-*@pCYivlt(NAxD^!@f z+vOz6VIxk3*4|YlSabv|tA-rW)xOSYhwb~X(xqQ{X)_3)&?GazXCyrF1jQ5`>)ZxyM9>dbx%#OndtBEo5Wmbi zB$t|-9rvHs9~Y5UgWC@%rN(nOyiU68PT(p$qV5Q%Tr;cB{X7e-1caJ*p2~nQjO(-< z`4*LndH5OzC8KE!@DFBfUO@5Xb!V z=~GR`h3$5dN1ES|H={&CSC|o1Ln-|--2ZOmA$?q|ww`8`3cx;WyuDV%NX?Q7eQIM7 zLfN6*gb0K>A%}p0Dn_Gcz?mXUhZ;H>oy+C%-em9JKyDFamM)9_WbhQ?Y9o-})c(YC zyzgxlohry{3x9T`QK*T5yOkp3kQ*YwZqQIqC=^a95dSJ)ZPF$U1YUU%{LR+-QmfB; zaqprU2GUKY<;45nkxy8PnxN>{!wfdKxL8ZKO~%zv14@0fTYsb?pTLfwFfmzzzSDFxf<}7(Vy8Zcs-I-T>D zJ7aaq3)3AGyRKHO$q|3jdN-k@;0p+Lpe1^~EImP@@W!JS`4%A_91;?(`@>!yL{v9N zq<(t)cYejS-nCyuT*@)kr_0SkiP>JsS=W^p0!NjZy1o{#WY-cqE44yCzG5Ie6gQm>=)kHA$LD+}|Q zg_|F(_VO6FqEi5LWHnJLvBRaBCi26yH%a3r=2k?%-*Gh0%V-J zkwOlu-+l=wCU9y9h+qFb(U7};+Bk8C$aeY~7BaO06E##MQC#SoCcN{bIGDYTgY|Iq(;;YY*M* zJ}(;z&oMjMEg>hncQ-en&t&M_)Tk{SlU}ILmlfDyT~q5VusZtMK!eW0S>iLV6RneR zJjm|_QXaQ>UAnL^W_f#?r_6VvCoH zEnM@Dxta68CQ!j6RKhDSjooPj8!j_>4jAn3xnOeN=feQNBEQ1F834xY2wnS9Cq0> z3^xa#H$^A~0HPCk)0V_-q}uD(_M3vu2uHtK0V zSqi>)v4=CD*Q=bBovnf74MB3y+G7CTNLa*MVcJFiao)YA^6g+t`487JBM?~-8tqp? zAmHh=H^%{NB{qrgeE~jS9#&iUFllL?CnFBIV0K`S%LR+;Q&TRmG5D#$e=HWb$Y(Jo zKS!mBZ)dE0b~f+X9YXSGd4KV@{l(#mV4lC@V0XY>L=Z_pP|0s=l7Wmm3G0eHuI$<%Yr4$ z_t+UKVd$g+E)prP@3*t7$HB%td2i z*jsSkD5)m7bxCg`A^w{8xx@laQT%x{s-elQyFZ@a7qDTstv?9(j3znqZnS`@^EUOV z<2#3k{sWk8%IE_k_89PbO6(GGqa^}Y*q486;R|AuL{KG9bE^Zm{V;hv5P+-Gv7R(h z9ctHYZknhV7FC4+Y>H(7xnqpmLK2^|b;dum@j+S5-0U3i-4^K_`p;C-0w>bMy++H;`CpNOI-mo6?WB9;|R361H4d)j>?tO2)yQGAM_{sJOZCMCEz&F;f zO1`bTz+wbp#uCm+oaKGtr3WE&f>L4r?kBV}?tpx04kXX8mcR zhg~e`U-+#1tCuWcOXi!z0yfnu`zBKK-Z<0ak1tjB*PZX?Xau1@LLk^Sn#>=D=enNl z)|eu+|A+uMC>plZp3nH^VX}a2{NnFG^_d`aAf3;PIr1^4Ah+|t;L@R=3@e;KrCk=o ze|a~R=72sU7-JQ%-1%iX1#MD68mhwMCxK+k$?hckjc8O%|4WtDQv@OVIeI_X5Fg!9)BV{ z=IkS1i$iGZ1bh4l_btu}2bcBw)q|)Pluw@_M>JU>5jD`1Bw1}yTFI>q3tl@X-mHV>o#!Hd;KsW-j^f|Z%qry<21eiH)^ zco!b_01GkUAMCUSM2T=Uptd_T0d3;#_)Ys!8_sWLDxP;#v&NnzeY}{f9~`CzF8Pns zz3HN7_#Q~2B|tfxZm&3ptX6Y5=#DlzmL+_dlWmG8L`0<#)+ z&dSn&2N=}vKJk2Paepvit|pTk*)P2%O-uZl=2XKT)_OZ zRnH~|3mNQVYK1(mYT0$Fl>m>xBDhE3KRIMGrwt%4H{Krhanr;Pf-pF9BwziBYhi2n zsH;o8%%o_xUZY9X;hZ5N$+v+3Z*-xfOGB$50%L;ug~mu}3)vohM-18#B>}fsxNHL3 z7ApNhY_0aMPgTUMYSKfX#@)j&Yj2~G+D1uI6}+7Tv3jXJTx@!KzR}>*@j4w;gS{%! zddXwjNqY+h0NC~GwMaR2AA+b5e~-p(fL})qLMibPpdf1APEzp^qVa{d^O^rNqivqR zmqd3OIYFy+XpiD!o51?2x@2^qk^*Ng-^F@lu?3D%YUn*uqBs3f%c4ifm_xVT8TKe| z_eV9r-&dC7#X7IkTvjP8hd@tKmR$5xC8!FeeK1TEzcI1e5GoAljq5Pk6uleQJFXW> z`j3kt;imCp2X&TV*6}YRO>h(W&y>;WBV(vd@td~RKSo2$YgGp6YPsa+ZZzP-6yw>o z-LmVP53-b!`IR+`-?aG(n@nxirIx)R6=Sm;&eb>w0P+84G1-+Tz(&i*8^fd#3uC#g zHda#BiqADU42$25lRh+>3ofz#u;nkr`C3JFod3At$B-N1y{|EyzHnw*S%TYt0Okoy=#ylq(YPGAC7db5M_!8%*#bJz|`#(Tp3pDwHVS-jpIyU=jQW;K&{HRQ9Y@`pcV9o>F38iP5L|#6ry>|6lPham3{#t2K{;R zGtUMHMg#7o_;e;k)K$~t`sB6C?e*D8SqF6t1uv2O)lZ9wup7)@GDD;K>5hVbKLFdTOa^_DI|L9^ zowcx~WsqYNAPNqEa3%o3oIdRQ5Nna0NfB{T17M4#!n`;7(d&|PZ0{lhKtt8qZrQm}gm7iQ?#-3DE7wyDf7rxl!dS<* zQ-BIg&9UzWT%gd10hFQwAO%P5JVBih_ktFrexA1jw5dS&sii~$Hf2<8;X3R_eS-h4 zB~%fytqCcXtK9M_uPbyx2XoSGK2D^kEi!qy7%^VBz>skwgrNFox#4p6r}Y=X!(~tt z$G_Hhk+HxeP-n4f?JYCuh_$~4H(FUA%zk&I(Q`O%;5lio6+$`vVtOb_Bb4URRGSB{ z^W$qQe#sVJ?P@D+myNFp%Zq_D)&9u|!h==eHlkb=`pFr`lN10Y?6uL^N+k+u^+qtx_*+PgZl`YS^r=`+nr zESN8ze=ej)L2l4=8fQ86Dk3g*l!FH$Z3A%HkAw|Fd z*2lG@J*r6=Qh*WZe~!PqwtsC`s&EZpQ&;#I7JT;rT79h#Odg5m1w{p-DMPDwt!7BF zJDBiF{W!-ew@BRwUj;^~U}YThkUt;|lmKmNYh5wV-;I2ubN_oB1s0mTp{0wUWR(R} zJtrXkDt>wL3XixqeAq(0PZ>c;&TZ`H1`3Q#D$IJAatw3$jQiQ_P=*9D;AhALZqR(l zTlXCOLRC^}>r6+{nSs|z$i2z%$CBLUyfEaWEQ)9{W2Guds3jkgipqE|Cw^e|>UvSqc|m1Vl-J z%BxqghX@p3&3lu|?G`0Tkp9lO?&afY1W~h3!IVQuIYutjZgvj={^%|>`aNPyeG<8! zZ9QGRi3gDmwxJK&bqYZw$$z!C*Kk>KbNaIzL>emIm{4l^?`(#qLA<QF@M+s|Yr5t;#H*V*NO-R| zBT@7tdIa*A_mIaW(1e;hdqp!TGUE%=xF1Iys?}etCcmRQZzD6114El5Rrp-aTfb~( zpMsr26t*JX6F3DP7={TZQp_>_li0;)JlhlQ@4(W!0iW%lQ~zYH#VBop@$Z<9EtB&* zu*jj=guI;z^*eDW^1zdy@}E=#+6SQXtkbGCCiBM2U168w!ROYQ&G*I@s!-{$j}lzqflxUA~!U{;bAp?)~jj+-6vp$MfB z2ueO$>sQQ_^nX>`1Ey(S1!0Tu<742Xe-=3mvi;(mOYOXXxH0$Z=V4CG-6Qiy z{y(zB>V=)9?)6ii|GN3R)qs=t?D{ySiFqHhdCR|%K)>34MWI<613wZy?vM-3z>g2& z&&Nui)DH$4${3TP>-d%6Pzkc{Q?u58JG<{NZA5h2X=zCn4oooU8_5we| z?-wVy68eHnGvGc(zk?aV^CtfqR3!8>QAwCFsWZ!hW3w18RrQuZK8a# z9?#NK5mhZ>2Gj1%toM|&pKg}gB*~2N7Ck4@5eLb>ErepHv!Y^=z6#ZyIPakGe8umt zSNcs>ixUOg3iCU@G<(DOLb&hacMu6dhRA=!g^Ef1V$r|$`G9$ksKB|gzXesW&Vq}t zR+}godgs#8!=n}P)B0fYj9^#7uBqh#^=IFEcm>=G)co1&Q?fPsZYFQ)oy!h87f_o) zE5nwEyG*Zeskha!6Cva}2OZ1(Wc2mub>rJXddD|HBDoMD-fQCRi?8CBBDrtE9q>X> zZ@P6QwT=4m1O?JA2!|SQ%sClny8|^wer}6^Yow}72Hg*vD4T(eEQnBgUvNN5qpa@{ zA3@SLRQ~c<;#aFUvG`((|LDhu-O5M+PUNblm$c}@A7z>bVxE|1)?&n^2!H1_IUt(u zDS9hV{c1pVUhB$GA{aILKoTKTseUxPFhkTYD-+D~+Ht5T1-xz1@f>NU-}Ah^Og|*d zblY#fHhStPbgFH4)+ zZjHW=fV#%5m%&|(v~?f7Ifj@w(~GWk;2CL!tap%4Ai6$75QiRK1|3qaQX)M-)F)Me zreyf2wYK~GLt%I3;N6bGg-J?(&MDbWKS3C_5EpV`&PQ&WyQuA3T>8D^p|jC`H&^2~ zZ27nI&Zh!a6LyOB4}c0z!x$oHu-Ik__uKEI_A~nNwWg>qF5ICG+MkDKj0i~QVeJ*B zHD5YD8gxWFaG%eca1HSlCXmEbeJW{OmJkOqg#-cz6ePA>ps8b7Nahdzf{U8Bg7g`8 zzSbZoso?n$z&C&Ed?T9!>E;$FL-m#twDyg;11uP;k!-!nGD4JR$j1!_!+-JP3!VGQ z2+wggJ9w2S!?fi6bF0 zl8H;yYJpRXT;nYU6NU*86)nt4o?Ez~o}o)#87kg_=XHsWC<343WoCd@;>&&t5g%`T z#!Wk(><9>?o3v|9$et4ct2XRLZ7CrL2K-PqN%};88MmW8->N9grkE`caGC#cuFLMvYY!T6FYWi8 z9zA{f#(zXS$nd2f-nuvoE0}w}y7aC&(-ep7Z8scuDp?DxLB{9TkyvM2-RoE^#v-! z#o%ns&IoktcANZ?BX$qwZhmi}>^(j8PSm&q)Dy5pA@MIXB4+yvi!z9(P2yH4OT8!z z&PRsR=a^~k^-WDTY`27A*2b>wFoTxv0DN+17=Cro8ihW8{S#QhIuxl@!qcxmg?g#O z(bD6ze$x{oVR-BlVqMZ4u+zIf)PG95oczxSoeTYslbzp_>PWmrXsFy_gQ&XdJeoTY zOj%UhOifz@K(YYjSTSY5YqLlp70l(a@Lb!CGSs(k>r;V5N!`pkd$qRAK zG*--K22CwQ-gs8Emt`*}wY-*)DfKCc!w9gX7><$#KSya`XR65QS(`(^{g+{Tz%r)u zZ#I*P8x+FoaBY>MfkD`$$>a9=W0esp7A<=${-dy(x}e_YVa9+Y zm1H4V1~XX_NDeNJ|CJ^;Kc$I8_%FfEb{{;odJ3QC_a=M8K%W0`yIJ^sqyY(?9OJ#hv6Zz#ZIrUd-EQ+fVpkm>i3FzTg^VVj^Sga! za#xWTc$bP-OXrJa%~_O}lBM{8az2l!EyK&w5x6*MOG-Z@Vi1P?mg}vTf*iHq(@HMI zOGZR%0Y|sT$DjQ)Yau)(Dj(ON2%mal8pTGod2f)^53@WH%&_8Ty`|*xc#O-yn>whk z1Vg?wJ_w6MN9QqtS^NE=n5_FC>Lq7{*^Kf%`Bw5lGQ8{~`oU7?A2ZoIH#u+jtK2B1 z)JGFnYGtqexcGqgRF*ETrbK|KpN@Zzk^(inx-1ZL(Z|`GfEtWb4_4t!g>R(#2Q_1% zJ0ls<-1@lNpPN{`^7Fifl2io6+5KsBPb8IKN?&%dP{8cCPXBnjs48|&5fEP6tnqO`n$dV)sM|7^5Mxbp6W>fde_fC{eR5&fb+!7sEbZq>WM037o&- zpWfTMM_P~n2p^$S)_>bnmS516<#)fcLtq;xY0`O*?-?fLSX4Wi@#DzaX2AsF#a>M34@Z?v|DYk)9G$>6Y$2rfaQl?~{G>9=tzcF#aQ+xbAzb*T0@eh)!l6qd1jq z`XqALBF#Rrjun0^wVhVGBVOQ@^`D?OkI#ON35OnkK{8%?P11qd12K;jRoEh=kCJ?W zRAxTM7W~{fsc;4<8`@%=MFbiyfqeh`67$toYQ89k$=$A|8K1W5amViUC>;#hbA zYyFEV;lHFLrnX+~2+!p$q+b?umE`;Tm`oWq0W^@d^<=X0+w{sLUKw{pI8Eh;d|<}z zlV%e(>-fJTl!r)yP~c)=zr7UD~>>^%Y4Xh6dYk{y_$(sW(y`^|;f=khLzJ7Y99usGJEtR+`kZ zRu4w7Ly_BE*@4v`O_0H94Qr56!GCk;HEvVh!l|wGIa9tS9Iz zFK7d)POks&_kjAzm!-xiMeoahVaU45Xm0%stWxAP@xo261QsQ~;&?eB`V6)SIy&U8 zY#scRfOxAN37|~`u&e+EXmZzHEMm9e=MA z(hdey{$;t}mkbd-Kxu@+Ydp5dl@+dR?%hIE3@&uxMWJbBoQrNa4-Cd?0@w(h$T_Z{ z*pbV@>gRzZorB0P6#E}DVe5EN$n)Y|*uTP2%9nQ3f0y{-ho^GCU&E_b?zxm|=Z6xW z%8!NK=YWb4=oHF$1#97i$jroCSyjHh^B|wseLJ_!!Ek!o_uWw-yK3B4x>@gV)7!(b zTz|5YCt)mQ2No8jC?wTmzYo@0#`3`4e$~Wl(e-M?$4a%{WO97q%NxtX#L7Ar-)eGE zuh+7#KXV9am8Gx`J!IVStm5r={#m>s6v*Q<{EEvxp)e+BL2{}r?wcCS4h zpm;xOVKEy4O^e_-B0ek=!JYh9`q;e_*zf6?OfgbEhmZ^U$$kzxZ@u%mD=${dlLD#( zrXbN}#j3dP_s0ITN}v2+Q;wvF&}M;}ZDuz3BbBcLTi|EwZVpg{B8gu*k6Ya*&b}}` zaUogul>HVm6A6bWq)GFP?CrU~$cq!yU2WL1jiI*qXa|o9mMuQlpXkn?+O9JeC;p2b zXEpwRyh68d~!O)IKz*M;K=cK3hVY}dkm zWOBf^Gvl2lMqtYM7BN&0cRKQ|ykj+CJl0M?{V&l{kMdJ9nylMz=`U+jYW`Ipxu2gr zrGM)EaJ|*{-j9iZM+ah&$ECSB>oc;IdqOOrpGc81;$Ajf``%ER#QK|kvJ8CGyFo@1 zm-1f(YN7=%6c_#%z`l;j+5UZNu@+C zGCtDCuz3mTqOhvxdoFlk&!QHEXXZu$X|PbRBHx^-qhaV1AWSMw$ydF9V|^G&3a)@M zUPno9RBydidhj68CVqfg?Zue0@E%Al=arH^DQhbH3A!Ams=2<)JCmSkmN@`4SK(*` zh}P@>pTUvEQ(|y;2nBxipkq$y{x}!9l&2^6nzN=a^c|1o{l)CdIF+R-ic7_E{+}mL zTFfKKBP8H*CoKV%&0~cJR!BeJ!}hifj9z&ANW`N3{j2TDoNA=?F7oU}%;Xk|&T8yP zX>1Pd%#hMd`%&5(rC;Cg{%|_UI=p55{RpAg&$G4N6$NB3hklbo%9l6QgUcLFiXuGn z>X0lut0A(PYkZaO)c3@edtMMh|Mvq%@Io&(U&Hf=JYcV5i96ae3H`oK zA;;aKQIiwqNxLB{jIihUN+wQRCm3c zZ7!^m+Oj(g9^2x)XRepuzvSwdAKymQCOG8%sGvh(rd#(V=FnEm!WWH@2}s+)undP1Ct%(YN46(B@g8tK9;haG@$~p1M5Drv zwTX?0p=ct2cbg+h`PoJ`fK`|VqZ$ygK~7&9OU5hWa-jCYqK{O_{kpC?(_=VI=?H(r zpOS(VGx%-=Ku+nPkE1v3Kjo+iK};B%1!9kuB~fy6v@EG7>$a<3b1OOogkG#L3%!_* zGe_4YAbYvM)Q^=~v;7fA*43Q$4%K-C%tY^I6z~dYb>A8Rz%lXqT!zIiHv+tp<@7q<2(`DVfe`^^J#0g_z1t(& zBXp_4N<|0N6ghw@+syGg+n3F>Xq+?!Z0zb>*Mzkv*4Mm(=*kM_MdFYPQUlO1Q{wSX zE20!22Z|3@zi~q9B5L&7JSt%At|qJm=pg^kCJ#WYVpw_pgL3{Ofv|ohu$d0@xIS)Q zA%K^xY%(x8@+o{3!&a~Ip7Gqt{`RgU4j9tN3?~aGK(ZOW-0}N%Sl&nda0wkyIaFK4 z`Mer1E{v#S-0TLxQ40`pvDiw2`Y}Ba=_kYA0HhDEcsgwRiTRd`##F_DYaKd8k7WkL2KY1Q%v z+}sIeXy;#QO^&QtRaWkb7kjEa6=1MZ){gSRu2es7>N&fy&1U=6tv|HayH7=npwE7s-2g#+{ifV~m# zEdd1Od$G^V*?E=<2)Xkn8d`tHgLwsU)cnRs>*O%sQ-e=mDKWg~2;O^=AMo zz{c45wG51KXe*)+>BqvxeMQoJb%BHLrH*=}0TFEBZcb-YH+uWp>&?W&G2>C*;<`f) z(w-GMcC10Sd4eDEU2!q*}0p zP8ICTAOFDDF7t|-4U;6acFqyR`-7OYWwGGq-0PnXb+A$U!|F}eQ=$KuOew*U5ymc@ ztxB9tm;BcU^pP~{EEHyzaY|nPAsQh}C-0+6u_kKzsGQWq`3NMvyGH((xg1tlRm0I`V3 zpZy37x4SXho=H_=tpSys4GhcamE0Gb1#%_IP2{O8wwgk24;^fa%}T!2MjTie5W3%= ze>PZ50K`C(qhl-2ZzA;~%rPCxsB3mutR;&`gr;J$3xh9=%-u`5F8K? zb1MEqs{a$U9nd`fMKcldqFYsZ*hC|G0i1m$&Z}LTWvUd+p!Z5GW;7Ox%lE&-c1Y1R ztm$1>@j*7T9~>O2DryF}_=}O~7jE7r)MS-=0*x{M zc1#1fLGh7YC4q4cQVAEPtrf&nQcG=v9&hOV#_J3PB_d>pHlN0~e=i?8>u#!7kt9S6 zm7fY^VZzr^JI#?pIG=MGrk@RK$+zye0(+j6i28^uRPB9Cf}$2Q3oPgR6-8IAE-y+w zF^i<;;8)*l!hF(j$PyiIWxh3k#|s|k(+a=$=yV~qh{qV;jiO9qH=wSO z42XZZO2q(fKm`^ISnx1q1Xya{f#Q|VF6vE2ZdBpM!p@AFVJnx@`!wrG#q%z)jj?#7 zRAH78zBGPA2)R&@>KwT+wH)WiOBH;kIm*QMYL6?l)^EGFKMd;&0pT9&&eCerKU(Qx zS+iNr&{djj7r(JP@6i2={^SEm&CnINq7?x2kW{xt7EYMG1lS{`9d1}p}Grf}7-zFh>OaQwKO zaJkmnW!T&Rfe4X*Do{Z>_x?Sf-DnX5WqOu~q$|6LV;0J$2lPr8@d0o7_uTl9!3vH9(#!OvUEd3v%=oWhgks=418zGtII z!zSvGC}Cr-%UR*%u9@o8?d*(sc=<2M)AyUDW}jPzxdOw#eqMbQYuP1Tr$$ak_Q{E6 zQLE(j>B0HT3x)TBwH-Q#rb?TiB!U7n*ek)Q+}tP;c<22tbPohr<_fE|e2T8-WOn+( zAZ_mBG}0d<)_e{!enZJ9UR0xWYWTLM+TCl_sWl&0N%()m3Z?++)#&IM=q4a;QiabG z_!@JO;29l9v{OZGHAUK0)Q!PB{iN!Ao|ET9gEV8EF7mvab2QKY^*wOz`-$dbbEv(z z`qexXnS6eLS+h79#2`9{-H#8;pJ8kbi_T|yz-HGJI|H<&MtBZ}mIR&%Tm1;8*jtkI zf}^OBe$AB&@^A1JRX*X8bwmVD@O;*a(p8X*f&q}=cFq8ItY#!O#b@jj-VxA;M6x$< zXfFqi@;~D_Z>(8f&f4>P6dR`qTUD^a9}C>}ud*|DO=U#tJ_xM6kzsUR!+epKI`*{Nh%U%Y!{Fa7nQ*ojK zr>D%RQt37$(3!#5PDbvD!+-UknLr~I<;0ek+#;E+AgG}OM$RaGKV%a~8DQ2#K=Gv! z&qI;&3WM{k7JGa4OJ?09KuG9;km^UBgQC$C1p^kf%|Czh(t5ACAad`cm@Fhj4T7%0<+NP zS)41GM!pKb3WW})kOe%!7aZX)u~jWSabaMgv#ME2#dWuYl=sHPFsgijKtt7RsCo>l zL4gU$gDarEN(j(%=Ch}c6Ko5L2LJiG^vdwUh#&t#V2B4PpB+62yUwxPfojW+(+BVu z#oi}mC^odBjv)BheH`cb9@}I&sXCk`oB&*-SXtUBkZG_)UD&L_;i0 zg|zLUZb9f3*CgL@%CT&->ojGbGJMaWrsRGLefJi0u z7K6$R?6P*twE3q3R@mQ+Az6z~fC2ossrCf{y7C;L0$Yxmu;>r~>x?jpBDPi*#()6N zgM^VHlu4ud=X1ROV*wmW0LH@-4tD@Opd11JTnFokjq3@G(&E-ER6<<8Gs5JVJ@z zi+=mHL;jBI*ZuCnE>F_|;8~7@`;fr(#sH&Wf41;69$10x-U&JR!HVI>n)U8m6T3W1 zOx}@`xguq>@8bc3DzyOQ+U6`-v=sXCc_MX+w@Yf@fkwgN+g4ghV5{Pf`{78bg zhZH$Wi#^rSi|naEWdea`^0S;}N{t3SvqA!@K&)GenhIL)m#d#|VMUAM_XGliWuF4= za;6GeTzhZkE^KF^a+h(Nq;>M%EpO6ky z7sn9YQ6fnp$1Q;HT{WWFv?r{&OZSZSbVTeD@|!^5a>cLuhJvU~SNZoApg}*c7G1@W zMI%R}bSMmlw0YkqA-w^4kPc(!yS=#z`@saVvOI-2m^P}N?>Z3af-M;AZk{O;joZKB<>iv0V4BRGs;gWy5vylN1()kKf?7k31i%q z+%`4F=@R5RM8a^|+?{VsID{8o5c!EKfLej1_6T1a+A5`N78q%b;}3Fzz2&wS{Vbxq zEt%L9!o~aXLek$t%E;~t!wFd37h0=b!kc|l8Ue}5vs9r*fNabAEhQGB&l$#!U- z4wO3OGS530WEWy>dDBw8FJq%jDt86dtcb1DI37X9P8r70-JRor=4LX=eiz?>l?1 z3lNI9oo#C{pe7WWll`1Eltl4E0F=cP(I)y4c{n<{_~|h}PM#R5$Rm8yl|k>a@4i@n zC&Dt+cY&@69*4R&lbWap55v@dqA-Bo;U$!aJk_D!4@E>mWOol1uv1TEMID-1|R{+Btldrc1UlMW>cD(%;BpKyO3^{VbU^XLu8ee#{`r}1$ z_f6%e1tDWLvb_|=v9e;XEZ5q5#@y6yt^R@{Zh6*|sAB&m!A2+eGVJve4l#}Mj1Ohm#CgJT<-e$LV@c*ng3 ztu?>wlFj8tG5@#oe#fgpzNN(;H2^-k0!bh$xn41$OZj;2VOzx#dk4i>>WeIy(DBMxiN`5&z#<(<%CSR8l89la}BW1u%u zHxo1IXyA=oD^u!D)03!57plfiwophN>G?fW>^(o{=JMC!`ec&*ht2U5q2nFp`Zk^t z3Q(3?;VGlngVLw+xv@_yU^46G-1Zp{e58;r zZ#*YNyx)%nn>fe?4DuYoW~lh0D7fdcA;d_x?_O6MRT4?)9!vK7gZ@r4SEL*w2F-pw z*V5n1^n5o5#{ohCZZWyYmXJ)eTm2epxeMa`jT6peWRu?(26<%h#49w9@U94)SU2Cq z>DXFMK9Z5KX%PDnAG`J83S3EqZ}(t?xWm`1_2rTMJYB6J`OZHm2#QCj+`(HINGmMS z0`c$ud{0sQNz*^cbUbB(=McULeLN{a;lQQA&1A}Yj<3BP`Q{rdHqGxKPhz5JRC5qs z7dz5)_XINi%LzrMys=z=KmH0A^bIG4>PhyT#vk!exSsCUPk!Daz7$p*3x^-{j=iJu z+k&HznH@Nh*y(&pjaCq`;+M8kLPt^j22Y|m8oe+&8dV;T&7+u(B4s7+Om#aM7akEc z8TZGY*CAVu>Wg-f`udG7cTspB_tk)Ift=jOj@v`_H>wM06II*qoW#j~Ob+PM<-ny!X!i@OsKR-xBW8it*@*5-#-fLa7?FRDFzR9 zEh%wd-8?sZuZ9oe-UO(BgdXxlkxpY{b(Rz~R}+#J6VZEgYcZ9!O=AyF6-Y-kx1Om> zu z)?pRM)HUf+s|u&tcX2cX^iLyqN4uPu!by_ZHrsG%lq<8w&sr-Jmb_|lrar869*w@2 z^<+AMi^)4%k2*W*kEV1{XqawGepW~i%ot#R1OTm#4zU&!o2x-9FP6T{}hi1`j z2)?~KF9MqX5|&O>+vesMng@e1Yi(sJ>5pW$7T$>IgaSLZ>RDX5=Cg0UTy8wN?0Q}- z>M^@74RSv36Zllt1;OJ>w16_w3*)mo84f+HNs1==V<=%@5PG`3Y%d&`?)H#r=~U8r zKElc_JWb5$*gUh$nkaV-Uc7Q#o;?RdL{!)IJ_ z&Sg8veB+;kBGxZRoBJ;rL-%%g>O3_A%!%+k3a75DTS%@HmYt_qlK!L_a~#L zqEQSh&TQ-N4|<2bk^>ND@1V;WKqH;qgGcdCoXOwabaN} zrR^Q{@m=dLHJ3CzeVm+omg0?qucd;`g3U-!clDS zaF#4%JeU45nsRP?oL21HbPnr{+3TpU8&*p5pIEQqre?jm#Qosi#P0r_4Jfsvp3S{S zM9w7`uF{alkMV4q-1&-Gg30Kr7B#TrfY{knc1+}(T(EEQbDNmT8-1fN%3`UN zT0_#*=1fS#+Nela!y>Nf+s+fZ7&2kbv=#8FWGNVBMOf&^m`vd#RHv=8D4~s5N=5M+ z9xbWjm+2`9ub!ZZ;cIxvM)zZh^-qVFD_|+vxtAn zm6NN2U&I@PZ|4y-btG<wLP5-H;m$gUng2+Tj$R>XeUp1#ZTMkt0%QT*j4dIT5g?#;%a8f>?Gf()*I z;(=orz=|mSv6azPy&b{WxnDdf9N@`Jo{)$0Gsg3eZpBlS%R;~VLF6~1jAgC6Y)xe5 z)}H!`YrtkEAXVs3ie{{4tOojN(JxV7bNM|<`w}M);CTfR!sykSwei&t*M9PQ%V7g>@TO@ zFI-sP;%Xp@Vz1vIS7yfGPVTNA`=cD2q?s39IF780!TtEnOw;z;4v$2GW@N~~8eKaczjuSh9Wx|+MNuwH<-w_cux&|@(8bL$T>xf{KMrA8h?tn{%M2TbO3xMX+LO(%UY+6O2fL`3P|nD`;t zAF8a)=4GoUn|D(A;GT8cASN<^T~9Ab5TEpx9)uS}Ins(8YW zMkYjHg{60_RHamZ7G%7Z^{Dez-0jJkbxFrGgX=%``e8i&9N-VBwA!RfnzFrC71*!BX_tVhw5Nvv!ky{NW?>cndg z`D%l434=CD`y|SK0sHqM4_`fI^dQROUij|Sc|!w-2%TU48~44c zvvVBYR6bd6SZiP{a!O~2-nA*N?ou@iLoY0;hG)+vSbS#YO84B*(qZ)cxX-v_(qx3=btmy8e-fV4+2Z#{-J7ZFT&9iTk7CmX&>b1MD|&MOHWPTeWT7q z%J(h&e@?}s7l;&J0__{5*py=J9EfrlEIPa!uy47H`gf8#w(#&7 zPX4g2|!h?F}y@bt@| zvgF=w;|omb?4OF*M;Oxbj~`dK75cGAlvNdaR^;FW&jeA`is(!oO+%zqIc)Tc1wo|r zijt&U%T80+q7i8I3SLWtqDusCP5Pzruku5rgMD6`DM=>J;-o>SELHlsNF*3;CcLWo zVo2*%z?JO1YP8&FM({!uEr|15vAkTmSZ=uhkY>rgR$XofJxZj|IE6aIL=}n zGoHF4WQvEw@(ygwFY4CuyDb{DaEcphwvWIWE*jLgha*4qtDNJPxa{U3wRM%^}g47etfXBQLa;m$?t#7j=nKE36x_K$z4j|!0lM$I^ z2ei{w^QWK(5}3=?Xat+59%LJ&+M;2SQ% zmg{G(k*%34sL@Z^J0gAc@fA?;>$}*T=w+Pd2Gj8cfQEPoG@I)QcS;6Ov9XEj%GeEB z)SDVw!T(GC&mqoOdA))JDbj6E2SlT#v`?IH4l$_A2;e2Lq_`E zL2Xw&N7@W?zX`8>lkjcJZLgInRx1e+oXT8spEQ>JLBBVhRe&BOnr1kl9~XQebv!j; zxfLK(V{>wXwBQLiuOObMd?_Io;2r$ZjJGY|C46BZ8g+P1_WOuHPWf^y!9YD>nj?

fL@@=$PPSqt!{aJ!wW(Nr9%l5q!73b5U+{ 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%0DwziS6w#PwK(kg!QodYubbM6ZMy8Q#u!* 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 literal 0 HcmV?d00001