From 7bdf31f452054caba6a5011c18346c2cb17c4b29 Mon Sep 17 00:00:00 2001 From: MobarakHsn Date: Thu, 2 May 2024 16:12:18 +0600 Subject: [PATCH] Add Pgpool quickstart Signed-off-by: MobarakHsn --- .../pgpool/quickstart/quick-pgpool.yaml | 15 + .../pgpool/quickstart/quick-postgres.yaml | 19 + docs/examples/pgpool/quickstart/user.conf | 1 + docs/guides/pgpool/README.md | 41 ++ docs/guides/pgpool/_index.md | 10 + docs/guides/pgpool/concepts/_index.md | 10 + docs/guides/pgpool/concepts/appbinding.md | 146 ++++++ docs/guides/pgpool/concepts/catalog.md | 74 +++ docs/guides/pgpool/concepts/pgpool.md | 15 + docs/guides/pgpool/custom-versions/_index.md | 10 + docs/guides/pgpool/custom-versions/setup.md | 69 +++ docs/guides/pgpool/quickstart/_index.md | 10 + docs/guides/pgpool/quickstart/quickstart.md | 468 ++++++++++++++++++ docs/images/pgpool/quickstart/lifecycle.png | Bin 0 -> 83653 bytes 14 files changed, 888 insertions(+) create mode 100644 docs/examples/pgpool/quickstart/quick-pgpool.yaml create mode 100644 docs/examples/pgpool/quickstart/quick-postgres.yaml create mode 100644 docs/examples/pgpool/quickstart/user.conf create mode 100644 docs/guides/pgpool/README.md create mode 100644 docs/guides/pgpool/_index.md create mode 100755 docs/guides/pgpool/concepts/_index.md create mode 100644 docs/guides/pgpool/concepts/appbinding.md create mode 100644 docs/guides/pgpool/concepts/catalog.md create mode 100644 docs/guides/pgpool/concepts/pgpool.md create mode 100644 docs/guides/pgpool/custom-versions/_index.md create mode 100644 docs/guides/pgpool/custom-versions/setup.md create mode 100755 docs/guides/pgpool/quickstart/_index.md create mode 100644 docs/guides/pgpool/quickstart/quickstart.md create mode 100644 docs/images/pgpool/quickstart/lifecycle.png diff --git a/docs/examples/pgpool/quickstart/quick-pgpool.yaml b/docs/examples/pgpool/quickstart/quick-pgpool.yaml new file mode 100644 index 0000000000..0012a59905 --- /dev/null +++ b/docs/examples/pgpool/quickstart/quick-pgpool.yaml @@ -0,0 +1,15 @@ +apiVersion: kubedb.com/v1alpha2 +kind: Pgpool +metadata: + name: quick-pgpool + namespace: pool +spec: + version: "4.5.0" + replicas: 1 + postgresRef: + name: quick-postgres + namespace: demo + sslMode: disable + clientAuthMode: md5 + syncUsers: true + terminationPolicy: WipeOut \ No newline at end of file diff --git a/docs/examples/pgpool/quickstart/quick-postgres.yaml b/docs/examples/pgpool/quickstart/quick-postgres.yaml new file mode 100644 index 0000000000..098a9cf7c1 --- /dev/null +++ b/docs/examples/pgpool/quickstart/quick-postgres.yaml @@ -0,0 +1,19 @@ +apiVersion: kubedb.com/v1alpha2 +kind: Postgres +metadata: + name: quick-postgres + namespace: demo +spec: + replicas: 1 + version: "13.13" + configSecret: + name: pg-configuration + storageType: Durable + storage: + storageClassName: "standard" + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 50Mi + terminationPolicy: WipeOut diff --git a/docs/examples/pgpool/quickstart/user.conf b/docs/examples/pgpool/quickstart/user.conf new file mode 100644 index 0000000000..0cf5cc581c --- /dev/null +++ b/docs/examples/pgpool/quickstart/user.conf @@ -0,0 +1 @@ +max_connections=400 diff --git a/docs/guides/pgpool/README.md b/docs/guides/pgpool/README.md new file mode 100644 index 0000000000..006542bd6d --- /dev/null +++ b/docs/guides/pgpool/README.md @@ -0,0 +1,41 @@ +--- +title: Pgpool +menu: + docs_{{ .version }}: + identifier: pp-readme-pgpool + name: Pgpool + parent: pp-pgpool-guides + weight: 10 +menu_name: docs_{{ .version }} +section_menu_id: guides +url: /docs/{{ .version }}/guides/pgpool/ +aliases: + - /docs/{{ .version }}/guides/pgpool/README/ +--- + +> New to KubeDB? Please start [here](/docs/README.md). + +# Overview + +[Pgpool](https://pgpool.net/) is a versatile proxy solution positioned between PostgreSQL servers and database clients. It offers essential functionalities such as Connection Pooling, Load Balancing, In-Memory Query Cache and many more. Pgpool enhances the performance, scalability, and reliability of PostgreSQL database systems. + +KubeDB operator now comes bundled with Pgpool crd to manage all the essential features of Pgpool. + +## Pgpool Features + +| Features | Availability | +|-------------------------------| :----------: | +| Clustering | ✓ | +| Multiple Pgpool Versions | ✓ | +| Custom Configuration | ✓ | +| Sync Postgres Users to Pgpool | ✓ | +| Custom docker images | ✓ | +| Enabling TLS | ✓ | +| Builtin Prometheus Discovery | ✓ | +| Using Prometheus operator | ✓ | + +## User Guide + +- [Quickstart Pgpool](/docs/guides/pgpool/quickstart/quickstart.md) with KubeDB Operator. +- Detail concepts of [Pgpool object](/docs/guides/pgpool/concepts/pgpool.md). +- Want to hack on KubeDB? Check our [contribution guidelines](/docs/CONTRIBUTING.md). diff --git a/docs/guides/pgpool/_index.md b/docs/guides/pgpool/_index.md new file mode 100644 index 0000000000..e5e7894ee0 --- /dev/null +++ b/docs/guides/pgpool/_index.md @@ -0,0 +1,10 @@ +--- +title: Pgpool +menu: + docs_{{ .version }}: + identifier: pp-pgpool-guides + name: Pgpool + parent: guides + weight: 10 +menu_name: docs_{{ .version }} +--- diff --git a/docs/guides/pgpool/concepts/_index.md b/docs/guides/pgpool/concepts/_index.md new file mode 100755 index 0000000000..6fecb2eb44 --- /dev/null +++ b/docs/guides/pgpool/concepts/_index.md @@ -0,0 +1,10 @@ +--- +title: Pgpool Concepts +menu: + docs_{{ .version }}: + identifier: pp-concepts-pgpool + name: Concepts + parent: pp-pgpool-guides + weight: 20 +menu_name: docs_{{ .version }} +--- diff --git a/docs/guides/pgpool/concepts/appbinding.md b/docs/guides/pgpool/concepts/appbinding.md new file mode 100644 index 0000000000..638309463e --- /dev/null +++ b/docs/guides/pgpool/concepts/appbinding.md @@ -0,0 +1,146 @@ +--- +title: AppBinding CRD +menu: + docs_{{ .version }}: + identifier: pp-appbinding-concepts + name: AppBinding + parent: pp-concepts-pgpool + weight: 20 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- + +> New to KubeDB? Please start [here](/docs/README.md). + +# AppBinding + +## What is AppBinding + +An `AppBinding` is a Kubernetes `CustomResourceDefinition`(CRD) which points to an application using either its URL (usually for a non-Kubernetes resident service instance) or a Kubernetes service object (if self-hosted in a Kubernetes cluster), some optional parameters and a credential secret. To learn more about AppBinding and the problems it solves, please read this blog post: [The case for AppBinding](https://appscode.com/blog/post/the-case-for-appbinding). + +If you deploy a database using [KubeDB](https://kubedb.com/docs/0.11.0/concepts/), `AppBinding` object will be created automatically for it. Otherwise, you have to create an `AppBinding` object manually pointing to your desired database. + +KubeDB uses [Stash](https://appscode.com/products/stash/) to perform backup/recovery of databases. Stash needs to know how to connect with a target database and the credentials necessary to access it. This is done via an `AppBinding`. + +## AppBinding CRD Specification + +Like any official Kubernetes resource, an `AppBinding` has `TypeMeta`, `ObjectMeta` and `Spec` sections. However, unlike other Kubernetes resources, it does not have a `Status` section. + +An `AppBinding` object created by `KubeDB` for PostgreSQL database is shown below, + +```yaml +apiVersion: appcatalog.appscode.com/v1alpha1 +kind: AppBinding +metadata: + labels: + app.kubernetes.io/component: database + app.kubernetes.io/instance: quick-postgres + app.kubernetes.io/managed-by: kubedb.com + app.kubernetes.io/name: postgreses.kubedb.com + name: quick-postgres + namespace: demo +spec: + appRef: + apiGroup: kubedb.com + kind: Postgres + name: quick-postgres + namespace: demo + clientConfig: + service: + name: quick-postgres + path: / + port: 5432 + query: sslmode=disable + scheme: postgresql + secret: + name: quick-postgres-auth + type: kubedb.com/postgres + version: "13.13" +``` + +Here, we are going to describe the sections of an `AppBinding` crd. + +### AppBinding `Spec` + +An `AppBinding` object has the following fields in the `spec` section: + +#### spec.type + +`spec.type` is an optional field that indicates the type of the app that this `AppBinding` is pointing to. Stash uses this field to resolve the values of `TARGET_APP_TYPE`, `TARGET_APP_GROUP` and `TARGET_APP_RESOURCE` variables of [BackupBlueprint](https://appscode.com/products/stash/latest/concepts/crds/backupblueprint/) object. + +This field follows the following format: `/`. The above AppBinding is pointing to a `postgres` resource under `kubedb.com` group. + +Here, the variables are parsed as follows: + +| Variable | Usage | +| --------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| `TARGET_APP_GROUP` | Represents the application group where the respective app belongs (i.e: `kubedb.com`). | +| `TARGET_APP_RESOURCE` | Represents the resource under that application group that this appbinding represents (i.e: `postgres`). | +| `TARGET_APP_TYPE` | Represents the complete type of the application. It's simply `TARGET_APP_GROUP/TARGET_APP_RESOURCE` (i.e: `kubedb.com/postgres`). | + +#### spec.secret + +`spec.secret` specifies the name of the secret which contains the credentials that are required to access the database. This secret must be in the same namespace as the `AppBinding`. + +This secret must contain the following keys: + +PostgreSQL : + +| Key | Usage | +|------------|------------------------------------------------| +| `username` | Username of the target database. | +| `password` | Password for the user specified by `username`. | + +MySQL : + +| Key | Usage | +| ---------- | ---------------------------------------------- | +| `username` | Username of the target database. | +| `password` | Password for the user specified by `username`. | + +MongoDB : + +| Key | Usage | +| ---------- | ---------------------------------------------- | +| `username` | Username of the target database. | +| `password` | Password for the user specified by `username`. | + +Elasticsearch: + +| Key | Usage | +| ---------------- | ----------------------- | +| `ADMIN_USERNAME` | Admin username | +| `ADMIN_PASSWORD` | Password for admin user | + +#### spec.clientConfig + +`spec.clientConfig` defines how to communicate with the target database. You can use either an URL or a Kubernetes service to connect with the database. You don't have to specify both of them. + +You can configure following fields in `spec.clientConfig` section: + +- **spec.clientConfig.url** + + `spec.clientConfig.url` gives the location of the database, in standard URL form (i.e. `[scheme://]host:port/[path]`). This is particularly useful when the target database is running outside of the Kubernetes cluster. If your database is running inside the cluster, use `spec.clientConfig.service` section instead. + + > Note that, attempting to use a user or basic auth (e.g. `user:password@host:port`) is not allowed. Stash will insert them automatically from the respective secret. Fragments ("#...") and query parameters ("?...") are not allowed either. + +- **spec.clientConfig.service** + + If you are running the database inside the Kubernetes cluster, you can use Kubernetes service to connect with the database. You have to specify the following fields in `spec.clientConfig.service` section if you manually create an `AppBinding` object. + + - **name :** `name` indicates the name of the service that connects with the target database. + - **scheme :** `scheme` specifies the scheme (i.e. http, https) to use to connect with the database. + - **port :** `port` specifies the port where the target database is running. + +- **spec.clientConfig.insecureSkipTLSVerify** + + `spec.clientConfig.insecureSkipTLSVerify` is used to disable TLS certificate verification while connecting with the database. We strongly discourage to disable TLS verification during backup. You should provide the respective CA bundle through `spec.clientConfig.caBundle` field instead. + +- **spec.clientConfig.caBundle** + + `spec.clientConfig.caBundle` is a PEM encoded CA bundle which will be used to validate the serving certificate of the database. + +## Next Steps + +- Learn how to use KubeDB to manage various databases [here](/docs/guides/README.md). +- Want to hack on KubeDB? Check our [contribution guidelines](/docs/CONTRIBUTING.md). diff --git a/docs/guides/pgpool/concepts/catalog.md b/docs/guides/pgpool/concepts/catalog.md new file mode 100644 index 0000000000..8a168500c7 --- /dev/null +++ b/docs/guides/pgpool/concepts/catalog.md @@ -0,0 +1,74 @@ +--- +title: PgpoolVersion CRD +menu: + docs_{{ .version }}: + identifier: pp-catalog-concepts + name: PgpoolVersion + parent: pp-concepts-pgpool + weight: 15 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- + +> New to KubeDB? Please start [here](/docs/README.md). + +# PgpoolVersion + +## What is PgpoolVersion + +`PgpoolVersion` is a Kubernetes `Custom Resource Definitions` (CRD). It provides a declarative configuration to specify the docker images to be used for [Pgpool](https://pgpool.net/) server deployed with KubeDB in a Kubernetes native way. + +When you install KubeDB, a `PgpoolVersion` custom resource will be created automatically for every supported Pgpool release versions. You have to specify the name of `PgpoolVersion` crd in `spec.version` field of [Pgpool](/docs/guides/pgpool/concepts/pgpool.md) crd. Then, KubeDB will use the docker images specified in the `PgpoolVersion` crd to create your expected Pgpool instance. + +Using a separate crd for specifying respective docker image names allow us to modify the images independent of KubeDB operator. This will also allow the users to use a custom Pgpool image for their server. For more details about how to use custom image with Pgpool in KubeDB, please visit [here](/docs/guides/pgpool/custom-versions/setup.md). + +## PgpoolVersion Specification + +As with all other Kubernetes objects, a PgpoolVersion needs `apiVersion`, `kind`, and `metadata` fields. It also needs a `.spec` section. + +```yaml +apiVersion: catalog.kubedb.com/v1alpha1 +kind: PgpoolVersion +metadata: + name: 4.5.0 +spec: + exporter: + image: ghcr.io/appscode-images/pgpool2_exporter:v1.2.2 + pgpool: + image: ghcr.io/appscode-images/pgpool2:4.5.0 + version: 4.5.0 + deprecated: false +``` + +### metadata.name + +`metadata.name` is a required field that specifies the name of the `PgpoolVersion` crd. You have to specify this name in `spec.version` field of [Pgpool](/docs/guides/pgpool/concepts/pgpool.md) crd. + +We follow this convention for naming PgpoolVersion crd: + +- Name format: `{Original pgpool image version}-{modification tag}` + +We plan to modify original Pgpool docker images to support additional features. Re-tagging the image with v1, v2 etc. modification tag help separating newer iterations from the older ones. An image with higher modification tag will have more features than the images with lower modification tag. Hence, it is recommended to use PgpoolVersion crd with higher modification tag to take advantage of the latest features. + +### spec.version + +`spec.version` is a required field that specifies the original version of Pgpool that has been used to build the docker image specified in `spec.server.image` field. + +### spec.deprecated + +`spec.deprecated` is an optional field that specifies whether the docker images specified here is supported by the current KubeDB operator. + +The default value of this field is `false`. If `spec.deprecated` is set `true`, KubeDB operator will not create the server and other respective resources for this version. + +### spec.pgpool.image + +`spec.pgpool.image` is a required field that specifies the docker image which will be used to create PetSet by KubeDB operator to create expected Pgpool server. + +### spec.exporter.image + +`spec.exporter.image` is a required field that specifies the image which will be used to export Prometheus metrics. + +## Next Steps + +- Learn about Pgpool crd [here](/docs/guides/pgpool/concepts/catalog.md). +- Deploy your first Pgpool server with KubeDB by following the guide [here](/docs/guides/pgpool/quickstart/quickstart.md). \ No newline at end of file diff --git a/docs/guides/pgpool/concepts/pgpool.md b/docs/guides/pgpool/concepts/pgpool.md new file mode 100644 index 0000000000..8ba04b4fe1 --- /dev/null +++ b/docs/guides/pgpool/concepts/pgpool.md @@ -0,0 +1,15 @@ +--- +title: Pgpool CRD +menu: + docs_{{ .version }}: + identifier: pp-pgpool-concepts + name: Pgpool + parent: pp-concepts-pgpool + weight: 10 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- + +> New to KubeDB? Please start [here](/docs/README.md). + +# Pgpool \ No newline at end of file diff --git a/docs/guides/pgpool/custom-versions/_index.md b/docs/guides/pgpool/custom-versions/_index.md new file mode 100644 index 0000000000..4f63de9cc6 --- /dev/null +++ b/docs/guides/pgpool/custom-versions/_index.md @@ -0,0 +1,10 @@ +--- +title: Pgpool Custom Versions +menu: + docs_{{ .version }}: + identifier: pp-custom-versions-pgpool + name: Custom Versions + parent: pp-pgpool-guides + weight: 36 +menu_name: docs_{{ .version }} +--- diff --git a/docs/guides/pgpool/custom-versions/setup.md b/docs/guides/pgpool/custom-versions/setup.md new file mode 100644 index 0000000000..bb21377332 --- /dev/null +++ b/docs/guides/pgpool/custom-versions/setup.md @@ -0,0 +1,69 @@ +--- +title: Setup Custom PgpoolVersions +menu: + docs_{{ .version }}: + identifier: pp-custom-versions-setup-pgpool + name: Overview + parent: pp-custom-versions-pgpool + weight: 10 +menu_name: docs_{{ .version }}s +section_menu_id: guides +--- + +> New to KubeDB? Please start [here](/docs/README.md). + +## Setting up Custom PgpoolVersions + +PgpoolVersions are KubeDB crds that define the docker images KubeDB will use when deploying a pgpool server. For more details about PgpoolVersion crd, please visit [here](/docs/guides/pgpool/concepts/catalog.md). + +## Creating a Custom Pgpool Image for KubeDB + +If you want to create a custom image of pgpool with additional features, the best way is to build on top of the existing kubedb image. + +```docker +FROM ghcr.io/appscode-images/pgpool2:4.5.0 + +ENV SOME_VERSION_VAR 0.9.1 + +RUN set -ex \ + && apk add --no-cache --virtual .fetch-deps \ + ca-certificates \ + curl \ + bash +``` + +From there, we would define a PgpoolVersion that contains this new image. Let's say we tagged it as `myco/pgpool:custom-4.5.0`. You can also build exporter image yourself using [pgpool_exporter](https://github.com/appscode-images/pgpool2_exporter/) repository. + +```yaml +apiVersion: catalog.kubedb.com/v1alpha1 +kind: PgpoolVersion +metadata: + name: 4.5.0 +spec: + exporter: + image: ghcr.io/appscode-images/pgpool2_exporter:v1.2.2 + pgpool: + image: ghcr.io/appscode-images/pgpool2:4.5.0 + version: 4.5.0 + deprecated: false +``` + +Once we add this PgpoolVersion we can use it in a new Pgpool like: + +```yaml +apiVersion: kubedb.com/v1alpha2 +kind: Pgpool +metadata: + name: quick-pgpool + namespace: pool +spec: + version: "4.5.0" + replicas: 1 + postgresRef: + name: quick-postgres + namespace: demo + sslMode: disable + clientAuthMode: md5 + syncUsers: true + terminationPolicy: WipeOut +``` diff --git a/docs/guides/pgpool/quickstart/_index.md b/docs/guides/pgpool/quickstart/_index.md new file mode 100755 index 0000000000..78827c9d53 --- /dev/null +++ b/docs/guides/pgpool/quickstart/_index.md @@ -0,0 +1,10 @@ +--- +title: Pgpool Quickstart +menu: + docs_{{ .version }}: + identifier: pp-quickstart-pgpool + name: Quickstart + parent: pp-pgpool-guides + weight: 15 +menu_name: docs_{{ .version }} +--- diff --git a/docs/guides/pgpool/quickstart/quickstart.md b/docs/guides/pgpool/quickstart/quickstart.md new file mode 100644 index 0000000000..aa93889202 --- /dev/null +++ b/docs/guides/pgpool/quickstart/quickstart.md @@ -0,0 +1,468 @@ +--- +bastitle: Pgpool Quickstart +menu: + docs_{{ .version }}: + identifier: pp-quickstart-quickstart + name: Overview + parent: pp-quickstart-pgpool + weight: 10 +menu_name: docs_{{ .version }} +section_menu_id: guides +--- + +> New to KubeDB? Please start [here](/docs/README.md). + +# Running Pgpool + +This tutorial will show you how to use KubeDB to run a Pgpool. + +

+ lifecycle +

+ +## Before You Begin + +At first, you need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. If you do not already have a cluster, you can create one by using [kind](https://kind.sigs.k8s.io/docs/user/quick-start/). + +Now, install KubeDB cli on your workstation and KubeDB operator in your cluster following the steps [here](/docs/setup/README.md). + +To keep things isolated, this tutorial uses two separate namespaces called `demo` for deploying PostgreSQL and `pool` for Pgpool, throughout this tutorial. + +```bash +$ kubectl create ns demo +namespace/demo created +``` + +```bash +$ kubectl create ns pool +namespace/pool created +``` + +> Note: YAML files used in this tutorial are stored in [docs/examples/pgpool](https://github.com/kubedb/docs/tree/{{< param "info.version" >}}/docs/examples/pgpool) folder in GitHub repository [kubedb/docs](https://github.com/kubedb/docs). + +> We have designed this tutorial to demonstrate a production setup of KubeDB managed Pgpool. If you just want to try out KubeDB, you can bypass some of the safety features following the tips [here](/docs/guides/pgpool/quickstart/quickstart.md#tips-for-testing). + +## Find Available PgpoolVersion + +When you have installed KubeDB, it has created `PgpoolVersion` crd for all supported Pgpool versions. Let's check available PgpoolVersion by, + +```bash +$ kubectl get pgpoolversions + + NAME VERSION PGPOOL_IMAGE DEPRECATED AGE + 4.4.5 4.4.5 ghcr.io/appscode-images/pgpool2:4.4.5 2d17h + 4.5.0 4.5.0 ghcr.io/appscode-images/pgpool2:4.5.0 2d17h +``` + +Notice the `DEPRECATED` column. Here, `true` means that this PgpoolVersion is deprecated for current KubeDB version. KubeDB will not work for deprecated PgpoolVersion. + +In this tutorial, we will use `4.5.0` PgpoolVersion crd to create Pgpool. To know more about what `PgpoolVersion` crd is, please visit [here](/docs/guides/pgpool/concepts/catalog.md). You can also see supported PgpoolVersion [here](/docs/guides/pgpool/README.md#supported-pgpoolversion-crd). + +## Get PostgreSQL Server ready + +Pgpool is a middleware for PostgreSQL. Therefore you will need to have a PostgreSQL server up and running for Pgpool to connect to. + +Luckily PostgreSQL is readily available in KubeDB as crd and can easily be deployed using this guide [here](/docs/guides/postgres/quickstart/quickstart.md). But by default this will create a PostgreSQL server with `max_connections=100`, but we need more than 100 connections for our Pgpool to work as expected. + +Pgpool requires at least `2*num_init_children*max_pool*spec.replicas` connections in PostgreSQL server. So use [this](https://kubedb.com/docs/v2024.4.27/guides/postgres/configuration/using-config-file/) to create a PostgreSQL server with custom `max_connections`. + +In this tutorial, we will use a PostgreSQL named `quick-postgres` in the `demo` namespace. +Let's first create a secret for PostgreSQL custom configuration. At first, let’s create `user.conf` file setting `max_connections` parameter. +```bash +$ cat user.conf +max_connections=400 +``` +> Note that config file name must be `user.conf` + +Now, create a Secret with this configuration file. + +```bash +$ kubectl create secret generic -n demo pg-configuration --from-literal=user.conf="$(curl -fsSL https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/examples/pgpool/quickstart/user.conf)" +secret/pg-configuration created +``` + +Now, create PostgreSQL crd specifying spec.configSecret field. +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/examples/pgpool/quickstart/quick-postgres.yaml +postgres.kubedb.com/quick-postgres created +``` + +KubeDB creates all the necessary resources including services, secrets, and appbindings to get this server up and running. A default database `postgres` is created in `quick-postgres`. Database secret `quick-postgres-auth` holds this user's username and password. Following is the yaml file for it. + +```bash +$ kubectl get secrets -n demo quick-postgres-auth -o yaml +``` +```yaml +apiVersion: v1 +data: + password: M21ufmFwM0ltTmpNUTI1ag== + username: cG9zdGdyZXM= +kind: Secret +metadata: + creationTimestamp: "2024-05-02T09:37:01Z" + labels: + app.kubernetes.io/component: database + app.kubernetes.io/instance: quick-postgres + app.kubernetes.io/managed-by: kubedb.com + app.kubernetes.io/name: postgreses.kubedb.com + name: quick-postgres-auth + namespace: demo + resourceVersion: "103369" + uid: ce5462e8-f480-4f8c-827a-66505b3d197b +type: kubernetes.io/basic-auth +``` + +For the purpose of this tutorial, we will need to extract the username and password from database secret `quick-postgres-auth`. + +```bash +$ kubectl get secrets -n demo quick-postgres-auth -o jsonpath='{.data.\password}' | base64 -d +3mn~ap3ImNjMQ25j⏎ + +$ kubectl get secrets -n demo quick-postgres-auth -o jsonpath='{.data.\username}' | base64 -d +postgres⏎ +``` + +Now, to test connection with this database using the credentials obtained above, we will expose the service port associated with `quick-postgres` to localhost. + +```bash +$ kubectl port-forward -n demo svc/quick-postgres 5432 +Forwarding from 127.0.0.1:5432 -> 5432 +Forwarding from [::1]:5432 -> 5432 +``` + +With that done, we should now be able to connect to `postgres` database using username `postgres`, and password `3mn~ap3ImNjMQ25j`. + +```bash +$ export PGPASSWORD='3mn~ap3ImNjMQ25j' +$ psql --host=localhost --port=5432 --username=postgres postgres +psql (16.2 (Ubuntu 16.2-1.pgdg22.04+1), server 13.13) +Type "help" for help. + +postgres=# +``` + +After establishing connection successfully, we will create a table in `postgres` database and populate it with data. + +```bash +postgres=# CREATE TABLE COMPANY( NAME TEXT NOT NULL, EMPLOYEE INT NOT NULL); +CREATE TABLE +postgres=# INSERT INTO COMPANY (name, employee) VALUES ('Apple',10); +INSERT 0 1 +postgres=# INSERT INTO COMPANY (name, employee) VALUES ('Google',15); +INSERT 0 1 +``` + +After data insertion, we need to verify that our data have been inserted successfully. + +```bash +postgres=# SELECT * FROM company ORDER BY name; + name | employee +--------+---------- + Apple | 10 + Google | 15 +(2 rows) +postgres=# \q +``` + +If no error occurs, `quick-postgres` is ready to be used by Pgpool. + +You can also use any other externally managed PostgreSQL server and create a database `postgres` for user `postgres`. + +If you choose not to use KubeDB to deploy Postgres, create AppBinding to point Pgpool to your PostgreSQL server. Click [here](/docs/guides/pgpool/concepts/appbinding.md) for detailed instructions on how to manually create AppBindings for Postgres. + +## Create a Pgpool Server + +KubeDB implements a Pgpool crd to define the specifications of a Pgpool. + +Below is the Pgpool object created in this tutorial. + +```yaml +apiVersion: kubedb.com/v1alpha2 +kind: Pgpool +metadata: + name: quick-pgpool + namespace: pool +spec: + version: "4.5.0" + replicas: 1 + postgresRef: + name: quick-postgres + namespace: demo + sslMode: disable + clientAuthMode: md5 + syncUsers: true + terminationPolicy: WipeOut +``` + +Here, + +- `spec.version` is name of the PgpoolVersion crd where the docker images are specified. In this tutorial, a Pgpool with base image version `4.5.0` is created. +- `spec.replicas` specifies the number of replica pgpool server pods to be created for the Pgpool object. +- `spec.postgresRef` specifies the name and the namespace of the appbinding that points to the PostgreSQL server. +- `spec.sslMode` specifies ssl mode for clients. +- `spec.clientAuthMode` specifies the authentication method that will be used for clients. +- `spec.syncUsers` specifies whether user want to sync additional users to Pgpool. +- `spec.terminationPolicy` specifies what policy to apply while deletion. + +Now that we've been introduced to the pgpool crd, let's create it, + +```bash +$ kubectl create -f https://github.com/kubedb/docs/raw/{{< param "info.version" >}}/docs/examples/pgpool/quickstart/pgpool-server.yaml +pgpool.kubedb.com/quick-pgpool created +``` + +## Connect via Pgpool + +To connect via pgpool we have to expose its service to localhost. + +```bash +$ kubectl port-forward -n pool svc/quick-pgpool 9999 +Forwarding from 127.0.0.1:9999 -> 9999 +``` + +Now, let's connect to `postgres` database via Pgpool using psql. + +``` bash +$ export PGPASSWORD='3mn~ap3ImNjMQ25j' +$ psql --host=localhost --port=9999 --username=postgres postgres +psql (16.2 (Ubuntu 16.2-1.pgdg22.04+1), server 13.13) +Type "help" for help. + +postgres=# +``` + +If everything goes well, we'll be connected to the `postgres` database and be able to execute commands. Let's confirm if the company data we inserted in the `postgres` database before are available via Pgpool: + +```bash +$ psql --host=localhost --port=9999 --username=postgres postgres --command='SELECT * FROM company ORDER BY name;' + name | employee +--------+---------- + Apple | 10 + Google | 15 +(2 rows) +``` + +KubeDB operator watches for Pgpool objects using Kubernetes api. When a Pgpool object is created, KubeDB operator will create a new PetSet and a Service with the matching name. KubeDB operator will also create a governing service for PetSet, if one is not already present. + +KubeDB operator sets the `status.phase` to `Ready` once Pgpool is ready after all checks. + +```bash +$ kubectl get pp -n pool quick-pgpool -o wide +NAME TYPE VERSION STATUS AGE +quick-pgpool kubedb.com/v1alpha2 4.5.0 Ready 63m + +``` + +Let's describe Pgpool object `quick-pgpool` + +```bash +$ kubectl dba describe pp -n pool quick-pgpool +Name: quick-pgpool +Namespace: pool +Labels: +Annotations: +API Version: kubedb.com/v1alpha2 +Kind: Pgpool +Metadata: + Creation Timestamp: 2024-05-02T10:39:44Z + Finalizers: + kubedb.com + Generation: 2 + Managed Fields: + API Version: kubedb.com/v1alpha2 + Fields Type: FieldsV1 + fieldsV1: + f:metadata: + f:annotations: + .: + f:kubectl.kubernetes.io/last-applied-configuration: + f:spec: + .: + f:clientAuthMode: + f:healthChecker: + .: + f:failureThreshold: + f:periodSeconds: + f:timeoutSeconds: + f:podPlacementPolicy: + f:postgresRef: + .: + f:name: + f:namespace: + f:replicas: + f:sslMode: + f:syncUsers: + f:terminationPolicy: + f:version: + Manager: kubectl-client-side-apply + Operation: Update + Time: 2024-05-02T10:39:44Z + API Version: kubedb.com/v1alpha2 + Fields Type: FieldsV1 + fieldsV1: + f:metadata: + f:finalizers: + .: + v:"kubedb.com": + f:spec: + f:authSecret: + Manager: pgpool-operator + Operation: Update + Time: 2024-05-02T10:39:44Z + API Version: kubedb.com/v1alpha2 + Fields Type: FieldsV1 + fieldsV1: + f:status: + .: + f:conditions: + f:phase: + Manager: pgpool-operator + Operation: Update + Subresource: status + Time: 2024-05-02T10:40:41Z + Resource Version: 109413 + UID: f742442c-50e6-4aa7-92a2-bf423efdabb0 +Spec: + Auth Secret: + Name: quick-pgpool-auth + Client Auth Mode: md5 + Health Checker: + Failure Threshold: 1 + Period Seconds: 10 + Timeout Seconds: 10 + Pod Placement Policy: + Name: default + Pod Template: + Controller: + Metadata: + Spec: + Containers: + Name: pgpool + Resources: + Limits: + Memory: 1Gi + Requests: + Cpu: 500m + Memory: 1Gi + Security Context: + Allow Privilege Escalation: false + Capabilities: + Drop: + ALL + Run As Group: 70 + Run As Non Root: true + Run As User: 70 + Seccomp Profile: + Type: RuntimeDefault + Security Context: + Fs Group: 70 + Postgres Ref: + Name: quick-postgres + Namespace: demo + Replicas: 1 + Ssl Mode: disable + Sync Users: true + Termination Policy: WipeOut + Version: 4.5.0 +Status: + Conditions: + Last Transition Time: 2024-05-02T10:39:44Z + Message: The KubeDB operator has started the provisioning of Pgpool: pool/quick-pgpool + Observed Generation: 1 + Reason: DatabaseProvisioningStartedSuccessfully + Status: True + Type: ProvisioningStarted + Last Transition Time: 2024-05-02T10:40:28Z + Message: All replicas are ready for Pgpool pool/quick-pgpool + Observed Generation: 2 + Reason: AllReplicasReady + Status: True + Type: ReplicaReady + Last Transition Time: 2024-05-02T10:40:39Z + Message: pgpool pool/quick-pgpool is accepting connection + Observed Generation: 2 + Reason: AcceptingConnection + Status: True + Type: AcceptingConnection + Last Transition Time: 2024-05-02T10:40:39Z + Message: pgpool pool/quick-pgpool is ready + Observed Generation: 2 + Reason: AllReplicasReady + Status: True + Type: Ready + Last Transition Time: 2024-05-02T10:40:39Z + Message: The Pgpool: pool/quick-pgpool is successfully provisioned. + Observed Generation: 2 + Reason: DatabaseSuccessfullyProvisioned + Status: True + Type: Provisioned + Phase: Ready +Events: + +``` + +KubeDB has created a services for the Pgpool object. + +```bash +$ `kubectl get service -n pool --selector=app.kubernetes.io/name=pgpools.kubedb.com,app.kubernetes.io/instance=quick-pgpool` +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +quick-pgpool ClusterIP 10.96.33.221 9999/TCP 67m +quick-pgpool-pods ClusterIP None 9999/TCP 67m +``` + +Here, Service *`quick-pgpool`* targets random pods to carry out any operation that are made through this service. + +## Cleaning up + +If you don't set the terminationPolicy, then the kubeDB set the TerminationPolicy to `Delete` by-default. + +### Delete +If you want to delete the existing pgpool, but want to keep the secrets intact then you might want to set the pgpool object terminationPolicy to Delete. In this setting, PetSet and the services will be deleted. + +When the TerminationPolicy is set to Delete and the pgpool object is deleted, the KubeDB operator will delete the PetSet and its pods along with the services but leaves the secrets intact. + +```bash +$ kubectl patch -n pool pp/quick-pgpool -p '{"spec":{"terminationPolicy":"Delete"}}' --type="merge" +pgpool.kubedb.com/quick-pgpool patched + +$ kubectl delete -n pool pp/quick-pgpool +pgpool.kubedb.com "quick-pgpool" deleted + +$ kubectl get pp,petset,svc,secret -n pool +NAME TYPE DATA AGE +secret/quick-pgpool-auth kubernetes.io/basic-auth 2 3h22m +secret/quick-pgpool-config Opaque 2 3h22m + +$ kubectl delete ns pool +namespace "pool" deleted + +$ kubectl delete -n demo pg/quick-postgres +pgpool.kubedb.com "quick-postgres" deleted +``` + +### WipeOut +But if you want to cleanup each of the Kubernetes resources created by this tutorial, run: + +```bash +$ kubectl patch -n pool pp/quick-pgpool -p '{"spec":{"terminationPolicy":"WipeOut"}}' --type="merge" + +$ kubectl delete -n pool pp/quick-pgpool +pgpool.kubedb.com "quick-pgpool" deleted + +$ kubectl get pp,petset,svc,secret -n pool +No resources found in pool namespace. + +$ kubectl delete ns pool +namespace "pool" deleted + +$ kubectl delete -n demo pg/quick-postgres +pgpool.kubedb.com "quick-postgres" deleted +``` + +## Next Steps + +- Detail concepts of [Pgpool object](/docs/guides/pgpool/concepts/pgpool.md). +- Detail concepts of [PgpoolVersion object](/docs/guides/pgpool/concepts/catalog.md). +- Want to hack on KubeDB? Check our [contribution guidelines](/docs/CONTRIBUTING.md). +``` + diff --git a/docs/images/pgpool/quickstart/lifecycle.png b/docs/images/pgpool/quickstart/lifecycle.png new file mode 100644 index 0000000000000000000000000000000000000000..c8e76aa06f27315d99425de7b509bdc71a048248 GIT binary patch literal 83653 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∈aJix)49X<^rR3tMd;3H~b-=LD{$R60!s10T>E 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

&a5KHKHZ7OMh+}@YJk{ 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 P0SG)@{an^LB{Ts5p(hT8 literal 0 HcmV?d00001