From 714f26e9dbbebd23f13454cea1393b6d7e721d66 Mon Sep 17 00:00:00 2001 From: Josh Heyer Date: Fri, 12 Nov 2021 06:12:35 +0000 Subject: [PATCH 1/5] cnp demo: update kubernetes & cnp Switch to k3d for updated Kubernetes version Update output to match CNP 1.10 --- .../interactive_demo.mdx | 166 +++++++++++------- .../interactive_demo.mdx | 166 +++++++++++------- 2 files changed, 208 insertions(+), 124 deletions(-) diff --git a/advocacy_docs/kubernetes/cloud_native_postgresql/interactive_demo.mdx b/advocacy_docs/kubernetes/cloud_native_postgresql/interactive_demo.mdx index 233edcfdba0..49dc2ee7979 100644 --- a/advocacy_docs/kubernetes/cloud_native_postgresql/interactive_demo.mdx +++ b/advocacy_docs/kubernetes/cloud_native_postgresql/interactive_demo.mdx @@ -1,6 +1,6 @@ --- title: "Installation, Configuration and Deployment Demo" -description: "Walk through the process of installing, configuring and deploying the Cloud Native PostgreSQL Operator via a browser-hosted Minikube console" +description: "Walk through the process of installing, configuring and deploying the Cloud Native PostgreSQL Operator via a browser-hosted Kubernetes environment" navTitle: Install, Configure, Deploy product: 'Cloud Native Operator' platform: ubuntu @@ -8,10 +8,11 @@ tags: - postgresql - cloud-native-postgresql-operator - kubernetes - - minikube + - k3d - live-demo katacodaPanel: - scenario: minikube + scenario: ubuntu:2004 + initializeCommand: clear; echo -e \\\\033[1mPreparing k3d and kubectl...\\\\n\\\\033[0m; snap install kubectl --classic; wget -q -O - https://raw.githubusercontent.com/rancher/k3d/main/install.sh | bash; clear; echo -e \\\\033[2mk3d is ready\\ - enjoy Kubernetes\\!\\\\033[0m; codelanguages: shell, yaml showInteractiveBadge: true --- @@ -30,22 +31,34 @@ It will take roughly 5-10 minutes to work through. -[Minikube](https://kubernetes.io/docs/setup/learning-environment/minikube/) is already installed in this environment; we just need to start the cluster: +Once [k3d](https://k3d.io/) is ready, we need to start a cluster: ```shell -minikube start +k3d cluster create __OUTPUT__ -* minikube v1.8.1 on Ubuntu 18.04 -* Using the none driver based on user configuration -* Running on localhost (CPUs=2, Memory=2460MB, Disk=145651MB) ... -* OS release is Ubuntu 18.04.4 LTS -* Preparing Kubernetes v1.17.3 on Docker 19.03.6 ... - - kubelet.resolv-conf=/run/systemd/resolve/resolv.conf -* Launching Kubernetes ... -* Enabling addons: default-storageclass, storage-provisioner -* Configuring local host environment ... -* Waiting for cluster to come online ... -* Done! kubectl is now configured to use "minikube" +INFO[0000] Prep: Network +INFO[0000] Created network 'k3d-k3s-default' +INFO[0000] Created volume 'k3d-k3s-default-images' +INFO[0000] Starting new tools node... +INFO[0000] Pulling image 'docker.io/rancher/k3d-tools:5.1.0' +INFO[0001] Creating node 'k3d-k3s-default-server-0' +INFO[0001] Pulling image 'docker.io/rancher/k3s:v1.21.5-k3s2' +INFO[0002] Starting Node 'k3d-k3s-default-tools' +INFO[0006] Creating LoadBalancer 'k3d-k3s-default-serverlb' +INFO[0007] Pulling image 'docker.io/rancher/k3d-proxy:5.1.0' +INFO[0011] Using the k3d-tools node to gather environment information +INFO[0011] HostIP: using network gateway... +INFO[0011] Starting cluster 'k3s-default' +INFO[0011] Starting servers... +INFO[0011] Starting Node 'k3d-k3s-default-server-0' +INFO[0018] Starting agents... +INFO[0018] Starting helpers... +INFO[0018] Starting Node 'k3d-k3s-default-serverlb' +INFO[0024] Injecting '172.19.0.1 host.k3d.internal' into /etc/hosts of all nodes... +INFO[0024] Injecting records for host.k3d.internal and for 2 network members into CoreDNS configmap... +INFO[0025] Cluster 'k3s-default' created successfully! +INFO[0025] You can now use it like this: +kubectl cluster-info ``` This will create the Kubernetes cluster, and you will be ready to use it. @@ -54,29 +67,30 @@ Verify that it works with the following command: ```shell kubectl get nodes __OUTPUT__ -NAME STATUS ROLES AGE VERSION -minikube Ready master 66s v1.17.3 +NAME STATUS ROLES AGE VERSION +k3d-k3s-default-server-0 Ready control-plane,master 16s v1.21.5+k3s2 ``` -You will see one node called `minikube`. If the status isn't yet "Ready", wait for a few seconds and run the command above again. +You will see one node called `k3d-k3s-default-server-0`. If the status isn't yet "Ready", wait for a few seconds and run the command above again. ## Install Cloud Native PostgreSQL -Now that the Minikube cluster is running, you can proceed with Cloud Native PostgreSQL installation as described in the ["Installation"](installation_upgrade.md) section: +Now that the Kubernetes cluster is running, you can proceed with Cloud Native PostgreSQL installation as described in the ["Installation and upgrades"](installation_upgrade.md) section: ```shell -kubectl apply -f https://get.enterprisedb.io/cnp/postgresql-operator-1.9.1.yaml +kubectl apply -f https://get.enterprisedb.io/cnp/postgresql-operator-1.10.0.yaml __OUTPUT__ namespace/postgresql-operator-system created customresourcedefinition.apiextensions.k8s.io/backups.postgresql.k8s.enterprisedb.io created customresourcedefinition.apiextensions.k8s.io/clusters.postgresql.k8s.enterprisedb.io created +customresourcedefinition.apiextensions.k8s.io/poolers.postgresql.k8s.enterprisedb.io created customresourcedefinition.apiextensions.k8s.io/scheduledbackups.postgresql.k8s.enterprisedb.io created -mutatingwebhookconfiguration.admissionregistration.k8s.io/postgresql-operator-mutating-webhook-configuration created serviceaccount/postgresql-operator-manager created clusterrole.rbac.authorization.k8s.io/postgresql-operator-manager created clusterrolebinding.rbac.authorization.k8s.io/postgresql-operator-manager-rolebinding created service/postgresql-operator-webhook-service created deployment.apps/postgresql-operator-controller-manager created +mutatingwebhookconfiguration.admissionregistration.k8s.io/postgresql-operator-mutating-webhook-configuration created validatingwebhookconfiguration.admissionregistration.k8s.io/postgresql-operator-validating-webhook-configuration created ``` @@ -166,13 +180,12 @@ metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"postgresql.k8s.enterprisedb.io/v1","kind":"Cluster","metadata":{"annotations":{},"name":"cluster-example","namespace":"default"},"spec":{"instances":3,"primaryUpdateStrategy":"unsupervised","storage":{"size":"1Gi"}}} - creationTimestamp: "2021-09-30T19:52:07Z" + creationTimestamp: "2021-11-12T05:56:37Z" generation: 1 name: cluster-example namespace: default - resourceVersion: "2292" - selfLink: /apis/postgresql.k8s.enterprisedb.io/v1/namespaces/default/clusters/cluster-example - uid: af696791-b82a-45a9-a1c2-6e4577128d0e + resourceVersion: "2005" + uid: 621d46bc-8a3b-4039-a9f3-6f21ab4ef68d spec: affinity: podAntiAffinityType: preferred @@ -180,10 +193,19 @@ spec: bootstrap: initdb: database: app + encoding: UTF8 + localeCType: C + localeCollate: C owner: app - imageName: quay.io/enterprisedb/postgresql:14.0 + enableSuperuserAccess: true + imageName: quay.io/enterprisedb/postgresql:14.1 + imagePullPolicy: IfNotPresent instances: 3 logLevel: info + maxSyncReplicas: 0 + minSyncReplicas: 0 + postgresGID: 26 + postgresUID: 26 postgresql: parameters: log_destination: csvlog @@ -200,15 +222,18 @@ spec: wal_keep_size: 512MB primaryUpdateStrategy: unsupervised resources: {} + startDelay: 30 + stopDelay: 30 storage: + resizeInUseVolumes: true size: 1Gi status: certificates: clientCASecret: cluster-example-ca expirations: - cluster-example-ca: 2021-12-29 19:47:07 +0000 UTC - cluster-example-replication: 2021-12-29 19:47:07 +0000 UTC - cluster-example-server: 2021-12-29 19:47:07 +0000 UTC + cluster-example-ca: 2022-02-10 05:51:37 +0000 UTC + cluster-example-replication: 2022-02-10 05:51:37 +0000 UTC + cluster-example-server: 2022-02-10 05:51:37 +0000 UTC replicationTLSSecret: cluster-example-replication serverAltDNSNames: - cluster-example-rw @@ -222,9 +247,11 @@ status: - cluster-example-ro.default.svc serverCASecret: cluster-example-ca serverTLSSecret: cluster-example-server - cloudNativePostgresqlCommitHash: c88bd8a + cloudNativePostgresqlCommitHash: f616a0d + cloudNativePostgresqlOperatorHash: 02abbad9215f5118906c0c91d61bfbdb33278939861d2e8ea21978ce48f37421 configMapResourceVersion: {} currentPrimary: cluster-example-1 + currentPrimaryTimestamp: "2021-11-12T05:57:15Z" healthyPVC: - cluster-example-1 - cluster-example-2 @@ -239,22 +266,25 @@ status: licenseStatus: isImplicit: true isTrial: true - licenseExpiration: "2021-10-30T19:52:07Z" + licenseExpiration: "2021-12-12T05:56:37Z" licenseStatus: Implicit trial license repositoryAccess: false valid: true phase: Cluster in healthy state + poolerIntegrations: + pgBouncerIntegration: {} pvcCount: 3 readService: cluster-example-r readyInstances: 3 secretsResourceVersion: - applicationSecretVersion: "884" - clientCaSecretVersion: "880" - replicationSecretVersion: "882" - serverCaSecretVersion: "880" - serverSecretVersion: "881" - superuserSecretVersion: "883" + applicationSecretVersion: "934" + clientCaSecretVersion: "930" + replicationSecretVersion: "932" + serverCaSecretVersion: "930" + serverSecretVersion: "931" + superuserSecretVersion: "933" targetPrimary: cluster-example-1 + targetPrimaryTimestamp: "2021-11-12T05:56:38Z" writeService: cluster-example-rw ``` @@ -273,7 +303,7 @@ status: ## Install the kubectl-cnp plugin -Cloud Native PostgreSQL provides a plugin for kubectl to manage a cluster in Kubernetes, along with a script to install it: +Cloud Native PostgreSQL provides [a plugin for kubectl](cnp-plugin) to manage a cluster in Kubernetes, along with a script to install it: ```shell curl -sSfL \ @@ -281,7 +311,7 @@ curl -sSfL \ sudo sh -s -- -b /usr/local/bin __OUTPUT__ EnterpriseDB/kubectl-cnp info checking GitHub for latest tag -EnterpriseDB/kubectl-cnp info found version: 1.9.1 for v1.9.1/linux/x86_64 +EnterpriseDB/kubectl-cnp info found version: 1.10.0 for v1.10.0/linux/x86_64 EnterpriseDB/kubectl-cnp info installed /usr/local/bin/kubectl-cnp ``` @@ -293,17 +323,22 @@ __OUTPUT__ Cluster in healthy state Name: cluster-example Namespace: default -PostgreSQL Image: quay.io/enterprisedb/postgresql:14.0 +PostgreSQL Image: quay.io/enterprisedb/postgresql:14.1 Primary instance: cluster-example-1 Instances: 3 Ready instances: 3 +Current Timeline: 1 +Current WAL file: 000000010000000000000005 + +Continuous Backup status +Not configured Instances status -Pod name Current LSN Received LSN Replay LSN System ID Primary Replicating Replay paused Pending restart Status --------- ----------- ------------ ---------- --------- ------- ----------- ------------- --------------- ------ -cluster-example-1 0/5000060 7013817246676054032 ✓ ✗ ✗ ✗ OK -cluster-example-2 0/5000060 0/5000060 7013817246676054032 ✗ ✓ ✗ ✗ OK -cluster-example-3 0/5000060 0/5000060 7013817246676054032 ✗ ✓ ✗ ✗ OK +Manager Version Pod name Current LSN Received LSN Replay LSN System ID Primary Replicating Replay paused Pending restart Status +--------------- -------- ----------- ------------ ---------- --------- ------- ----------- ------------- --------------- ------ +1.10.0 cluster-example-1 0/5000060 7029558504442904594 ✓ ✗ ✗ ✗ OK +1.10.0 cluster-example-2 0/5000060 0/5000060 7029558504442904594 ✗ ✓ ✗ ✗ OK +1.10.0 cluster-example-3 0/5000060 0/5000060 7029558504442904594 ✗ ✓ ✗ ✗ OK ``` !!! Note "There's more" @@ -326,20 +361,24 @@ Now if we check the status... kubectl cnp status cluster-example __OUTPUT__ Failing over Failing over to cluster-example-2 -Switchover in progress Name: cluster-example Namespace: default -PostgreSQL Image: quay.io/enterprisedb/postgresql:14.0 -Primary instance: cluster-example-1 (switching to cluster-example-2) +PostgreSQL Image: quay.io/enterprisedb/postgresql:14.1 +Primary instance: cluster-example-2 Instances: 3 Ready instances: 2 +Current Timeline: 2 +Current WAL file: 000000020000000000000006 + +Continuous Backup status +Not configured Instances status -Pod name Current LSN Received LSN Replay LSN System ID Primary Replicating Replay paused Pending restart Status --------- ----------- ------------ ---------- --------- ------- ----------- ------------- --------------- ------ -cluster-example-1 - - - - - - - - pod not available -cluster-example-2 0/60010F0 7013817246676054032 ✓ ✗ ✗ ✗ OK -cluster-example-3 0/60000A0 0/60000A0 7013817246676054032 ✗ ✗ ✗ ✗ OK +Manager Version Pod name Current LSN Received LSN Replay LSN System ID Primary Replicating Replay paused Pending restart Status +--------------- -------- ----------- ------------ ---------- --------- ------- ----------- ------------- --------------- ------ +1.10.0 cluster-example-3 0/60000A0 0/60000A0 7029558504442904594 ✗ ✗ ✗ ✗ OK +45 cluster-example-1 - - - - - - - - pod not available +1.10.0 cluster-example-2 0/6000F58 7029558504442904594 ✓ ✗ ✗ ✗ OK ``` ...the failover process has begun, with the second pod promoted to primary. Once the failed pod has restarted, it will become a replica of the new primary: @@ -350,17 +389,22 @@ __OUTPUT__ Cluster in healthy state Name: cluster-example Namespace: default -PostgreSQL Image: quay.io/enterprisedb/postgresql:14.0 +PostgreSQL Image: quay.io/enterprisedb/postgresql:14.1 Primary instance: cluster-example-2 Instances: 3 Ready instances: 3 +Current Timeline: 2 +Current WAL file: 000000020000000000000006 + +Continuous Backup status +Not configured Instances status -Pod name Current LSN Received LSN Replay LSN System ID Primary Replicating Replay paused Pending restart Status --------- ----------- ------------ ---------- --------- ------- ----------- ------------- --------------- ------ -cluster-example-1 0/6004E70 0/6004E70 7013817246676054032 ✗ ✓ ✗ ✗ OK -cluster-example-2 0/6004E70 7013817246676054032 ✓ ✗ ✗ ✗ OK -cluster-example-3 0/6004E70 0/6004E70 7013817246676054032 ✗ ✓ ✗ ✗ OK +Manager Version Pod name Current LSN Received LSN Replay LSN System ID Primary Replicating Replay paused Pending restart Status +--------------- -------- ----------- ------------ ---------- --------- ------- ----------- ------------- --------------- ------ +1.10.0 cluster-example-3 0/60000A0 0/60000A0 7029558504442904594 ✗ ✗ ✗ ✗ OK +1.10.0 cluster-example-2 0/6004CA0 7029558504442904594 ✓ ✗ ✗ ✗ OK +1.10.0 cluster-example-1 0/6004CA0 0/6004CA0 7029558504442904594 ✗ ✓ ✗ ✗ OK ``` @@ -368,8 +412,6 @@ cluster-example-3 0/6004E70 0/6004E70 7013817246676054032 This is all it takes to get a PostgreSQL cluster up and running, but of course there's a lot more possible - and certainly much more that is prudent before you should ever deploy in a production environment! -- Deploying on public cloud platforms: see the [Cloud Setup](cloud_setup/) section. - - Design goals and possibilities offered by the Cloud Native PostgreSQL Operator: check out the [Architecture](architecture/) and [Use cases](use_cases/) sections. - Configuring a secure and reliable system: read through the [Security](security/), [Failure Modes](failure_modes/) and [Backup and Recovery](backup_recovery/) sections. diff --git a/merge_sources/kubernetes/cloud_native_postgresql/interactive_demo.mdx b/merge_sources/kubernetes/cloud_native_postgresql/interactive_demo.mdx index 233edcfdba0..49dc2ee7979 100644 --- a/merge_sources/kubernetes/cloud_native_postgresql/interactive_demo.mdx +++ b/merge_sources/kubernetes/cloud_native_postgresql/interactive_demo.mdx @@ -1,6 +1,6 @@ --- title: "Installation, Configuration and Deployment Demo" -description: "Walk through the process of installing, configuring and deploying the Cloud Native PostgreSQL Operator via a browser-hosted Minikube console" +description: "Walk through the process of installing, configuring and deploying the Cloud Native PostgreSQL Operator via a browser-hosted Kubernetes environment" navTitle: Install, Configure, Deploy product: 'Cloud Native Operator' platform: ubuntu @@ -8,10 +8,11 @@ tags: - postgresql - cloud-native-postgresql-operator - kubernetes - - minikube + - k3d - live-demo katacodaPanel: - scenario: minikube + scenario: ubuntu:2004 + initializeCommand: clear; echo -e \\\\033[1mPreparing k3d and kubectl...\\\\n\\\\033[0m; snap install kubectl --classic; wget -q -O - https://raw.githubusercontent.com/rancher/k3d/main/install.sh | bash; clear; echo -e \\\\033[2mk3d is ready\\ - enjoy Kubernetes\\!\\\\033[0m; codelanguages: shell, yaml showInteractiveBadge: true --- @@ -30,22 +31,34 @@ It will take roughly 5-10 minutes to work through. -[Minikube](https://kubernetes.io/docs/setup/learning-environment/minikube/) is already installed in this environment; we just need to start the cluster: +Once [k3d](https://k3d.io/) is ready, we need to start a cluster: ```shell -minikube start +k3d cluster create __OUTPUT__ -* minikube v1.8.1 on Ubuntu 18.04 -* Using the none driver based on user configuration -* Running on localhost (CPUs=2, Memory=2460MB, Disk=145651MB) ... -* OS release is Ubuntu 18.04.4 LTS -* Preparing Kubernetes v1.17.3 on Docker 19.03.6 ... - - kubelet.resolv-conf=/run/systemd/resolve/resolv.conf -* Launching Kubernetes ... -* Enabling addons: default-storageclass, storage-provisioner -* Configuring local host environment ... -* Waiting for cluster to come online ... -* Done! kubectl is now configured to use "minikube" +INFO[0000] Prep: Network +INFO[0000] Created network 'k3d-k3s-default' +INFO[0000] Created volume 'k3d-k3s-default-images' +INFO[0000] Starting new tools node... +INFO[0000] Pulling image 'docker.io/rancher/k3d-tools:5.1.0' +INFO[0001] Creating node 'k3d-k3s-default-server-0' +INFO[0001] Pulling image 'docker.io/rancher/k3s:v1.21.5-k3s2' +INFO[0002] Starting Node 'k3d-k3s-default-tools' +INFO[0006] Creating LoadBalancer 'k3d-k3s-default-serverlb' +INFO[0007] Pulling image 'docker.io/rancher/k3d-proxy:5.1.0' +INFO[0011] Using the k3d-tools node to gather environment information +INFO[0011] HostIP: using network gateway... +INFO[0011] Starting cluster 'k3s-default' +INFO[0011] Starting servers... +INFO[0011] Starting Node 'k3d-k3s-default-server-0' +INFO[0018] Starting agents... +INFO[0018] Starting helpers... +INFO[0018] Starting Node 'k3d-k3s-default-serverlb' +INFO[0024] Injecting '172.19.0.1 host.k3d.internal' into /etc/hosts of all nodes... +INFO[0024] Injecting records for host.k3d.internal and for 2 network members into CoreDNS configmap... +INFO[0025] Cluster 'k3s-default' created successfully! +INFO[0025] You can now use it like this: +kubectl cluster-info ``` This will create the Kubernetes cluster, and you will be ready to use it. @@ -54,29 +67,30 @@ Verify that it works with the following command: ```shell kubectl get nodes __OUTPUT__ -NAME STATUS ROLES AGE VERSION -minikube Ready master 66s v1.17.3 +NAME STATUS ROLES AGE VERSION +k3d-k3s-default-server-0 Ready control-plane,master 16s v1.21.5+k3s2 ``` -You will see one node called `minikube`. If the status isn't yet "Ready", wait for a few seconds and run the command above again. +You will see one node called `k3d-k3s-default-server-0`. If the status isn't yet "Ready", wait for a few seconds and run the command above again. ## Install Cloud Native PostgreSQL -Now that the Minikube cluster is running, you can proceed with Cloud Native PostgreSQL installation as described in the ["Installation"](installation_upgrade.md) section: +Now that the Kubernetes cluster is running, you can proceed with Cloud Native PostgreSQL installation as described in the ["Installation and upgrades"](installation_upgrade.md) section: ```shell -kubectl apply -f https://get.enterprisedb.io/cnp/postgresql-operator-1.9.1.yaml +kubectl apply -f https://get.enterprisedb.io/cnp/postgresql-operator-1.10.0.yaml __OUTPUT__ namespace/postgresql-operator-system created customresourcedefinition.apiextensions.k8s.io/backups.postgresql.k8s.enterprisedb.io created customresourcedefinition.apiextensions.k8s.io/clusters.postgresql.k8s.enterprisedb.io created +customresourcedefinition.apiextensions.k8s.io/poolers.postgresql.k8s.enterprisedb.io created customresourcedefinition.apiextensions.k8s.io/scheduledbackups.postgresql.k8s.enterprisedb.io created -mutatingwebhookconfiguration.admissionregistration.k8s.io/postgresql-operator-mutating-webhook-configuration created serviceaccount/postgresql-operator-manager created clusterrole.rbac.authorization.k8s.io/postgresql-operator-manager created clusterrolebinding.rbac.authorization.k8s.io/postgresql-operator-manager-rolebinding created service/postgresql-operator-webhook-service created deployment.apps/postgresql-operator-controller-manager created +mutatingwebhookconfiguration.admissionregistration.k8s.io/postgresql-operator-mutating-webhook-configuration created validatingwebhookconfiguration.admissionregistration.k8s.io/postgresql-operator-validating-webhook-configuration created ``` @@ -166,13 +180,12 @@ metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"postgresql.k8s.enterprisedb.io/v1","kind":"Cluster","metadata":{"annotations":{},"name":"cluster-example","namespace":"default"},"spec":{"instances":3,"primaryUpdateStrategy":"unsupervised","storage":{"size":"1Gi"}}} - creationTimestamp: "2021-09-30T19:52:07Z" + creationTimestamp: "2021-11-12T05:56:37Z" generation: 1 name: cluster-example namespace: default - resourceVersion: "2292" - selfLink: /apis/postgresql.k8s.enterprisedb.io/v1/namespaces/default/clusters/cluster-example - uid: af696791-b82a-45a9-a1c2-6e4577128d0e + resourceVersion: "2005" + uid: 621d46bc-8a3b-4039-a9f3-6f21ab4ef68d spec: affinity: podAntiAffinityType: preferred @@ -180,10 +193,19 @@ spec: bootstrap: initdb: database: app + encoding: UTF8 + localeCType: C + localeCollate: C owner: app - imageName: quay.io/enterprisedb/postgresql:14.0 + enableSuperuserAccess: true + imageName: quay.io/enterprisedb/postgresql:14.1 + imagePullPolicy: IfNotPresent instances: 3 logLevel: info + maxSyncReplicas: 0 + minSyncReplicas: 0 + postgresGID: 26 + postgresUID: 26 postgresql: parameters: log_destination: csvlog @@ -200,15 +222,18 @@ spec: wal_keep_size: 512MB primaryUpdateStrategy: unsupervised resources: {} + startDelay: 30 + stopDelay: 30 storage: + resizeInUseVolumes: true size: 1Gi status: certificates: clientCASecret: cluster-example-ca expirations: - cluster-example-ca: 2021-12-29 19:47:07 +0000 UTC - cluster-example-replication: 2021-12-29 19:47:07 +0000 UTC - cluster-example-server: 2021-12-29 19:47:07 +0000 UTC + cluster-example-ca: 2022-02-10 05:51:37 +0000 UTC + cluster-example-replication: 2022-02-10 05:51:37 +0000 UTC + cluster-example-server: 2022-02-10 05:51:37 +0000 UTC replicationTLSSecret: cluster-example-replication serverAltDNSNames: - cluster-example-rw @@ -222,9 +247,11 @@ status: - cluster-example-ro.default.svc serverCASecret: cluster-example-ca serverTLSSecret: cluster-example-server - cloudNativePostgresqlCommitHash: c88bd8a + cloudNativePostgresqlCommitHash: f616a0d + cloudNativePostgresqlOperatorHash: 02abbad9215f5118906c0c91d61bfbdb33278939861d2e8ea21978ce48f37421 configMapResourceVersion: {} currentPrimary: cluster-example-1 + currentPrimaryTimestamp: "2021-11-12T05:57:15Z" healthyPVC: - cluster-example-1 - cluster-example-2 @@ -239,22 +266,25 @@ status: licenseStatus: isImplicit: true isTrial: true - licenseExpiration: "2021-10-30T19:52:07Z" + licenseExpiration: "2021-12-12T05:56:37Z" licenseStatus: Implicit trial license repositoryAccess: false valid: true phase: Cluster in healthy state + poolerIntegrations: + pgBouncerIntegration: {} pvcCount: 3 readService: cluster-example-r readyInstances: 3 secretsResourceVersion: - applicationSecretVersion: "884" - clientCaSecretVersion: "880" - replicationSecretVersion: "882" - serverCaSecretVersion: "880" - serverSecretVersion: "881" - superuserSecretVersion: "883" + applicationSecretVersion: "934" + clientCaSecretVersion: "930" + replicationSecretVersion: "932" + serverCaSecretVersion: "930" + serverSecretVersion: "931" + superuserSecretVersion: "933" targetPrimary: cluster-example-1 + targetPrimaryTimestamp: "2021-11-12T05:56:38Z" writeService: cluster-example-rw ``` @@ -273,7 +303,7 @@ status: ## Install the kubectl-cnp plugin -Cloud Native PostgreSQL provides a plugin for kubectl to manage a cluster in Kubernetes, along with a script to install it: +Cloud Native PostgreSQL provides [a plugin for kubectl](cnp-plugin) to manage a cluster in Kubernetes, along with a script to install it: ```shell curl -sSfL \ @@ -281,7 +311,7 @@ curl -sSfL \ sudo sh -s -- -b /usr/local/bin __OUTPUT__ EnterpriseDB/kubectl-cnp info checking GitHub for latest tag -EnterpriseDB/kubectl-cnp info found version: 1.9.1 for v1.9.1/linux/x86_64 +EnterpriseDB/kubectl-cnp info found version: 1.10.0 for v1.10.0/linux/x86_64 EnterpriseDB/kubectl-cnp info installed /usr/local/bin/kubectl-cnp ``` @@ -293,17 +323,22 @@ __OUTPUT__ Cluster in healthy state Name: cluster-example Namespace: default -PostgreSQL Image: quay.io/enterprisedb/postgresql:14.0 +PostgreSQL Image: quay.io/enterprisedb/postgresql:14.1 Primary instance: cluster-example-1 Instances: 3 Ready instances: 3 +Current Timeline: 1 +Current WAL file: 000000010000000000000005 + +Continuous Backup status +Not configured Instances status -Pod name Current LSN Received LSN Replay LSN System ID Primary Replicating Replay paused Pending restart Status --------- ----------- ------------ ---------- --------- ------- ----------- ------------- --------------- ------ -cluster-example-1 0/5000060 7013817246676054032 ✓ ✗ ✗ ✗ OK -cluster-example-2 0/5000060 0/5000060 7013817246676054032 ✗ ✓ ✗ ✗ OK -cluster-example-3 0/5000060 0/5000060 7013817246676054032 ✗ ✓ ✗ ✗ OK +Manager Version Pod name Current LSN Received LSN Replay LSN System ID Primary Replicating Replay paused Pending restart Status +--------------- -------- ----------- ------------ ---------- --------- ------- ----------- ------------- --------------- ------ +1.10.0 cluster-example-1 0/5000060 7029558504442904594 ✓ ✗ ✗ ✗ OK +1.10.0 cluster-example-2 0/5000060 0/5000060 7029558504442904594 ✗ ✓ ✗ ✗ OK +1.10.0 cluster-example-3 0/5000060 0/5000060 7029558504442904594 ✗ ✓ ✗ ✗ OK ``` !!! Note "There's more" @@ -326,20 +361,24 @@ Now if we check the status... kubectl cnp status cluster-example __OUTPUT__ Failing over Failing over to cluster-example-2 -Switchover in progress Name: cluster-example Namespace: default -PostgreSQL Image: quay.io/enterprisedb/postgresql:14.0 -Primary instance: cluster-example-1 (switching to cluster-example-2) +PostgreSQL Image: quay.io/enterprisedb/postgresql:14.1 +Primary instance: cluster-example-2 Instances: 3 Ready instances: 2 +Current Timeline: 2 +Current WAL file: 000000020000000000000006 + +Continuous Backup status +Not configured Instances status -Pod name Current LSN Received LSN Replay LSN System ID Primary Replicating Replay paused Pending restart Status --------- ----------- ------------ ---------- --------- ------- ----------- ------------- --------------- ------ -cluster-example-1 - - - - - - - - pod not available -cluster-example-2 0/60010F0 7013817246676054032 ✓ ✗ ✗ ✗ OK -cluster-example-3 0/60000A0 0/60000A0 7013817246676054032 ✗ ✗ ✗ ✗ OK +Manager Version Pod name Current LSN Received LSN Replay LSN System ID Primary Replicating Replay paused Pending restart Status +--------------- -------- ----------- ------------ ---------- --------- ------- ----------- ------------- --------------- ------ +1.10.0 cluster-example-3 0/60000A0 0/60000A0 7029558504442904594 ✗ ✗ ✗ ✗ OK +45 cluster-example-1 - - - - - - - - pod not available +1.10.0 cluster-example-2 0/6000F58 7029558504442904594 ✓ ✗ ✗ ✗ OK ``` ...the failover process has begun, with the second pod promoted to primary. Once the failed pod has restarted, it will become a replica of the new primary: @@ -350,17 +389,22 @@ __OUTPUT__ Cluster in healthy state Name: cluster-example Namespace: default -PostgreSQL Image: quay.io/enterprisedb/postgresql:14.0 +PostgreSQL Image: quay.io/enterprisedb/postgresql:14.1 Primary instance: cluster-example-2 Instances: 3 Ready instances: 3 +Current Timeline: 2 +Current WAL file: 000000020000000000000006 + +Continuous Backup status +Not configured Instances status -Pod name Current LSN Received LSN Replay LSN System ID Primary Replicating Replay paused Pending restart Status --------- ----------- ------------ ---------- --------- ------- ----------- ------------- --------------- ------ -cluster-example-1 0/6004E70 0/6004E70 7013817246676054032 ✗ ✓ ✗ ✗ OK -cluster-example-2 0/6004E70 7013817246676054032 ✓ ✗ ✗ ✗ OK -cluster-example-3 0/6004E70 0/6004E70 7013817246676054032 ✗ ✓ ✗ ✗ OK +Manager Version Pod name Current LSN Received LSN Replay LSN System ID Primary Replicating Replay paused Pending restart Status +--------------- -------- ----------- ------------ ---------- --------- ------- ----------- ------------- --------------- ------ +1.10.0 cluster-example-3 0/60000A0 0/60000A0 7029558504442904594 ✗ ✗ ✗ ✗ OK +1.10.0 cluster-example-2 0/6004CA0 7029558504442904594 ✓ ✗ ✗ ✗ OK +1.10.0 cluster-example-1 0/6004CA0 0/6004CA0 7029558504442904594 ✗ ✓ ✗ ✗ OK ``` @@ -368,8 +412,6 @@ cluster-example-3 0/6004E70 0/6004E70 7013817246676054032 This is all it takes to get a PostgreSQL cluster up and running, but of course there's a lot more possible - and certainly much more that is prudent before you should ever deploy in a production environment! -- Deploying on public cloud platforms: see the [Cloud Setup](cloud_setup/) section. - - Design goals and possibilities offered by the Cloud Native PostgreSQL Operator: check out the [Architecture](architecture/) and [Use cases](use_cases/) sections. - Configuring a secure and reliable system: read through the [Security](security/), [Failure Modes](failure_modes/) and [Backup and Recovery](backup_recovery/) sections. From 5c0b0db5d86afc0b2da1aa28b44d237dae2b8116 Mon Sep 17 00:00:00 2001 From: drothery-edb Date: Tue, 9 Nov 2021 06:00:51 -0500 Subject: [PATCH 2/5] changed download CLI link per UPM-3163 --- product_docs/docs/biganimal/release/reference/cli.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/product_docs/docs/biganimal/release/reference/cli.mdx b/product_docs/docs/biganimal/release/reference/cli.mdx index fe224155e28..5a8b5b2810c 100644 --- a/product_docs/docs/biganimal/release/reference/cli.mdx +++ b/product_docs/docs/biganimal/release/reference/cli.mdx @@ -14,7 +14,7 @@ The CLI is available for Linux, MacOS, and Windows operating systems. - For Linux operating systems, use the following command to get the latest version of the binary executable: ``` - curl -LO "https://cli.biganimal.com/download/latest/$(uname -s)/$(uname -m)/biganimal" + curl -LO https://cli.biganimal.com/download/$(uname -s)/$(uname -m)/latest/biganimal ``` - For all operating systems, download the executable binary [here](http://cli.biganimal.com/). @@ -25,7 +25,7 @@ The CLI is available for Linux, MacOS, and Windows operating systems. - For Linux operating systems, including Linux running from MacOS platforms: 1. Download the `checksum` file with following command: ``` - curl -L0 "https://cli.biganimal.com/download/latest/$(uname -s)/$(uname -m)/biganimal.sha256" + curl -L0 "https://cli.biganimal.com/download/$(uname -s)/$(uname -m)/latest/biganimal".sha256" ``` 1. From a shell, validate the binary executable file against the `checksum` file: ``` From b66e90b3cb6b4ed6a2a36a2963165914b62e62e9 Mon Sep 17 00:00:00 2001 From: drothery-edb Date: Thu, 11 Nov 2021 09:59:56 -0500 Subject: [PATCH 3/5] fixed quotation mark placement --- product_docs/docs/biganimal/release/reference/cli.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/product_docs/docs/biganimal/release/reference/cli.mdx b/product_docs/docs/biganimal/release/reference/cli.mdx index 5a8b5b2810c..e1f16169559 100644 --- a/product_docs/docs/biganimal/release/reference/cli.mdx +++ b/product_docs/docs/biganimal/release/reference/cli.mdx @@ -14,7 +14,7 @@ The CLI is available for Linux, MacOS, and Windows operating systems. - For Linux operating systems, use the following command to get the latest version of the binary executable: ``` - curl -LO https://cli.biganimal.com/download/$(uname -s)/$(uname -m)/latest/biganimal + curl -LO "https://cli.biganimal.com/download/$(uname -s)/$(uname -m)/latest/biganimal" ``` - For all operating systems, download the executable binary [here](http://cli.biganimal.com/). @@ -25,7 +25,7 @@ The CLI is available for Linux, MacOS, and Windows operating systems. - For Linux operating systems, including Linux running from MacOS platforms: 1. Download the `checksum` file with following command: ``` - curl -L0 "https://cli.biganimal.com/download/$(uname -s)/$(uname -m)/latest/biganimal".sha256" + curl -L0 "https://cli.biganimal.com/download/$(uname -s)/$(uname -m)/latest/biganimal.sha256" ``` 1. From a shell, validate the binary executable file against the `checksum` file: ``` From 88f579c393c6e421a2e3070e95bfc8dfc48f217c Mon Sep 17 00:00:00 2001 From: drothery-edb Date: Fri, 12 Nov 2021 05:26:29 -0500 Subject: [PATCH 4/5] addressing typo --- .../creating_a_cluster/01_cluster_networking.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/product_docs/docs/biganimal/release/getting_started/creating_a_cluster/01_cluster_networking.mdx b/product_docs/docs/biganimal/release/getting_started/creating_a_cluster/01_cluster_networking.mdx index a893a407e74..491d94c8778 100644 --- a/product_docs/docs/biganimal/release/getting_started/creating_a_cluster/01_cluster_networking.mdx +++ b/product_docs/docs/biganimal/release/getting_started/creating_a_cluster/01_cluster_networking.mdx @@ -32,7 +32,7 @@ additional IP addresses to the existing load balancer. ## Private cluster load balancing -When a cluster is created with public network access, an Azure +When a cluster is created with private network access, an Azure Standard SKU Load Balancer is created and configured with an IP address that always routes to the leader of your cluster. Once assigned, this IP address does not change unless you change the From 9b9d47931bbf9f994f5e840e5f36ebdb8a571d2e Mon Sep 17 00:00:00 2001 From: vinit-edb <77259227+vinit-edb@users.noreply.github.com> Date: Wed, 13 Oct 2021 09:33:21 +0530 Subject: [PATCH 5/5] Update 05_efm_pgbouncer.mdx https://enterprisedb.atlassian.net/browse/HL-8 The script needs to be updated in the documentation. Extra if section validates the primary node info. --- .../efm/4/efm_pgpool_ha_guide/05_efm_pgbouncer.mdx | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/product_docs/docs/efm/4/efm_pgpool_ha_guide/05_efm_pgbouncer.mdx b/product_docs/docs/efm/4/efm_pgpool_ha_guide/05_efm_pgbouncer.mdx index 670e91ba782..e4b71dcd2f1 100644 --- a/product_docs/docs/efm/4/efm_pgpool_ha_guide/05_efm_pgbouncer.mdx +++ b/product_docs/docs/efm/4/efm_pgpool_ha_guide/05_efm_pgbouncer.mdx @@ -74,20 +74,22 @@ executable by the `efm` user, and should have the following contents: ``` text - #!/bin/bash + #!/bin/bash -x set -e - IFS=', ' read -r -a PGB_HOSTS <<< "$3" + IFS=', ' read -r -a PGB_HOSTS <<< "$4" FAILED_PGB_HOST='' for PGB_HOST in "${PGB_HOSTS[@]}"; do - echo "redirecting to '$2' on enterprisedb@${PGB_HOST}" - ssh "enterprisedb@${PGB_HOST}" /usr/edb/pgbouncer1.15/bin/redirect.sh "$2" || FAILED_PGB_HOST="$FAILED_PGB_HOST $PGB_HOST" < /dev/null + echo "redirecting to '$2' on enterprisedb@${PGB_HOST}" + if [ "$3" == "p" ]; then + ssh "enterprisedb@${PGB_HOST}" /usr/edb/pgbouncer1.15/bin/redirect.sh "$2" || FAILED_PGB_HOST="$FAILED_PGB_HOST $PGB_HOST" < /dev/null + fi done # return exit code to inform EFM agent about failure. The agent would send a failure # notification accordingly for manual intervention if [ ! -z "$FAILED_PGB_HOST" ]; then - echo "Failed to redirect to '$2' on '$FAILED_PGB_HOST'" - exit 1 + echo "Failed to redirect to '$2' on '$FAILED_PGB_HOST'" + exit 1 fi ```