| Filename | Latest commit message | Latest commit date |
|---|---|---|
Bumps [github.com/pulumi/pulumi/sdk/v3](https://github.com/pulumi/pulumi) from 3.255.0 to 3.257.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/pulumi/pulumi/releases">github.com/pulumi/pulumi/sdk/v3's releases</a>.</em></p> <blockquote> <h2>v3.257.0</h2> <h2>3.257.0 (2026-08-13)</h2> <h3>Features</h3> <ul> <li>[cli] Offer to create a first project after logging in to an account with no stacks <a href="https://redirect.github.com/pulumi/pulumi/pull/24133">#24133</a></li> <li>[cli/do] Auto-assign identifiers to existing stack resources in <code>pulumi do</code> input expressions, and add <code>pulumi do show-resources</code> to list them <a href="https://redirect.github.com/pulumi/pulumi/pull/24184">#24184</a></li> <li>[cli/do] Make "<code>pulumi do <pkg> <resource> patch <name></code> work in stateful mode, overlaying the supplied inputs onto the existing snippet" <a href="https://redirect.github.com/pulumi/pulumi/pull/24295">#24295</a></li> <li>[cli/state] Implement <code>pulumi state get</code> to show individual resources <a href="https://redirect.github.com/pulumi/pulumi/pull/24191">#24191</a></li> <li>[cli/do] Fall back to an auto-created project and stack under PULUMI_HOME when <code>pulumi do</code> is invoked outside of a Pulumi project <a href="https://redirect.github.com/pulumi/pulumi/pull/24231">#24231</a></li> </ul> <h3>Bug Fixes</h3> <ul> <li>[sdkgen/go] Generated output-form invokes pass their arguments to the core SDK without resolving them first, so invoke dependencies can be inferred from arguments; generated SDKs now require pulumi SDK v3.255.0 or later <a href="https://redirect.github.com/pulumi/pulumi/pull/24060">#24060</a></li> <li>[cli] Make '<code>pulumi stack history events --summary</code> report the program errors from the language host <a href="https://redirect.github.com/pulumi/pulumi/pull/24111">#24111</a></li> <li>[cli/cloud] <code>pulumi api</code>: repeated <code>-H</code>/<code>--header</code> values for the same header name now all reach the wire, instead of each one silently overwriting the last <a href="https://redirect.github.com/pulumi/pulumi/pull/24180">#24180</a></li> <li>[cli/package] Maintain <code>--server</code> when adding to the packages section of Pulumi.yaml <a href="https://redirect.github.com/pulumi/pulumi/pull/24189">#24189</a></li> <li>[sdk/go] Fix panics in hooks to not crash the entire process <a href="https://redirect.github.com/pulumi/pulumi/pull/24218">#24218</a></li> <li>[programgen/go] <code>for</code> expressions are now generated as Go loops <a href="https://redirect.github.com/pulumi/pulumi/pull/24228">#24228</a></li> <li>[programgen/go] Fix invalid <code>_ := index</code> statement emitted for resources with a numeric <code>range</code> whose value variable is unused <a href="https://redirect.github.com/pulumi/pulumi/pull/24227">#24227</a></li> <li>[sdk/python] Report an error instead of hanging when a Python resource depends on its own parent <a href="https://redirect.github.com/pulumi/pulumi/pull/24230">#24230</a></li> <li>[sdkgen/go] Generate the missing Go input types for resource input properties that are deeply nested collections of object types <a href="https://redirect.github.com/pulumi/pulumi/pull/24236">#24236</a></li> <li>[programgen/go] Rename properties that collide with reserved names (e.g. <code>elementType</code>) the same way SDK codegen does, instead of emitting uncompilable code <a href="https://redirect.github.com/pulumi/pulumi/pull/24235">#24235</a></li> <li>[cli/display] Show the value being added when a refresh or provider diff reports an added property <a href="https://redirect.github.com/pulumi/pulumi/pull/24245">#24245</a></li> <li>[cli/plugin] Track when a plugin was last run so <code>pulumi plugin ls</code> reports an accurate last-used time on all platforms <a href="https://redirect.github.com/pulumi/pulumi/pull/24251">#24251</a></li> <li>[engine] Show secrets in diff display when <code>--show-secrets</code> is passed <a href="https://redirect.github.com/pulumi/pulumi/pull/24253">#24253</a></li> <li>[cli] Exit promptly when a command is cancelled while an HTTP request is being retried <a href="https://redirect.github.com/pulumi/pulumi/pull/24276">#24276</a></li> </ul> <h3>Improvements</h3> <ul> <li>[sdk/nodejs] Improve error message when resource registrations are still pending when pulumi exits <a href="https://redirect.github.com/pulumi/pulumi/pull/24082">#24082</a></li> <li>[cli] Pass the invoked command (e.g. <code>pulumi new</code>) to the browser-based login/signup flow so Pulumi Cloud can attribute signups to the command that triggered them <a href="https://redirect.github.com/pulumi/pulumi/pull/24192">#24192</a></li> </ul> <h3>Miscellaneous</h3> <ul> <li>[sdkgen] Extension-parameterized packages now namespace their resource and function tokens under their own package name rather than the base provider's <a href="https://redirect.github.com/pulumi/pulumi/pull/24143">#24143</a></li> <li>[java] Upgrade java to v1.35.0 <a href="https://redirect.github.com/pulumi/pulumi/pull/24202">#24202</a></li> <li>[backend/diy] The deprecation warning is now an error. PULUMI_DIY_BACKEND_IGNORE_DEPRECATION_WARNING is now PULUMI_DIY_BACKEND_IGNORE_DEPRECATION_ERROR. <a href="https://redirect.github.com/pulumi/pulumi/pull/24216">#24216</a></li> <li>[java] Upgrade java to v1.36.0 <a href="https://redirect.github.com/pulumi/pulumi/pull/24243">#24243</a></li> <li>[sdk/dotnet] Upgrade dotnet to v3.111.1 <a href="https://redirect.github.com/pulumi/pulumi/pull/24249">#24249</a></li> </ul> <h2>v3.256.0</h2> <h2>3.256.0 (2026-08-04)</h2> <h3>Features</h3> <ul> <li>[cli] Add <code>--ignore-protect</code> flag to <code>pulumi up</code>, <code>pulumi preview</code> and <code>pulumi destroy</code> to allow deleting protected resources without unprotecting them in the state first <a href="https://redirect.github.com/pulumi/pulumi/pull/24053">#24053</a></li> <li>[cli/env] Add an optional <code>--export-env-vars</code> flag to the <code>env provider {aws,azure,gcp}-login</code> commands to also set the standard SDK environment variables referencing the login outputs <a href="https://redirect.github.com/pulumi/pulumi/pull/24055">#24055</a></li> <li>[cli] Add a <code>--server</code> flag to <code>pulumi package add</code>, <code>publish</code>, <code>get-schema</code>, <code>get-mapping</code>, <code>gen-sdk</code>, <code>info</code> and <code>pulumi schema check</code> that skips package resolution and uses the given URL as the plugin download URL <a href="https://redirect.github.com/pulumi/pulumi/pull/24107">#24107</a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/pulumi/pulumi/blob/master/CHANGELOG.md">github.com/pulumi/pulumi/sdk/v3's changelog</a>.</em></p> <blockquote> <h2>3.257.0 (2026-08-13)</h2> <h3>Features</h3> <ul> <li>[cli] Offer to create a first project after logging in to an account with no stacks <a href="https://redirect.github.com/pulumi/pulumi/pull/24133">#24133</a></li> <li>[cli/do] Auto-assign identifiers to existing stack resources in <code>pulumi do</code> input expressions, and add <code>pulumi do show-resources</code> to list them <a href="https://redirect.github.com/pulumi/pulumi/pull/24184">#24184</a></li> <li>[cli/do] Make "<code>pulumi do <pkg> <resource> patch <name></code> work in stateful mode, overlaying the supplied inputs onto the existing snippet" <a href="https://redirect.github.com/pulumi/pulumi/pull/24295">#24295</a></li> <li>[cli/state] Implement <code>pulumi state get</code> to show individual resources <a href="https://redirect.github.com/pulumi/pulumi/pull/24191">#24191</a></li> <li>[cli/do] Fall back to an auto-created project and stack under PULUMI_HOME when <code>pulumi do</code> is invoked outside of a Pulumi project <a href="https://redirect.github.com/pulumi/pulumi/pull/24231">#24231</a></li> </ul> <h3>Bug Fixes</h3> <ul> <li>[sdkgen/go] Generated output-form invokes pass their arguments to the core SDK without resolving them first, so invoke dependencies can be inferred from arguments; generated SDKs now require pulumi SDK v3.255.0 or later <a href="https://redirect.github.com/pulumi/pulumi/pull/24060">#24060</a></li> <li>[cli] Make '<code>pulumi stack history events --summary</code> report the program errors from the language host <a href="https://redirect.github.com/pulumi/pulumi/pull/24111">#24111</a></li> <li>[cli/cloud] <code>pulumi api</code>: repeated <code>-H</code>/<code>--header</code> values for the same header name now all reach the wire, instead of each one silently overwriting the last <a href="https://redirect.github.com/pulumi/pulumi/pull/24180">#24180</a></li> <li>[cli/package] Maintain <code>--server</code> when adding to the packages section of Pulumi.yaml <a href="https://redirect.github.com/pulumi/pulumi/pull/24189">#24189</a></li> <li>[sdk/go] Fix panics in hooks to not crash the entire process <a href="https://redirect.github.com/pulumi/pulumi/pull/24218">#24218</a></li> <li>[programgen/go] <code>for</code> expressions are now generated as Go loops <a href="https://redirect.github.com/pulumi/pulumi/pull/24228">#24228</a></li> <li>[programgen/go] Fix invalid <code>_ := index</code> statement emitted for resources with a numeric <code>range</code> whose value variable is unused <a href="https://redirect.github.com/pulumi/pulumi/pull/24227">#24227</a></li> <li>[sdk/python] Report an error instead of hanging when a Python resource depends on its own parent <a href="https://redirect.github.com/pulumi/pulumi/pull/24230">#24230</a></li> <li>[sdkgen/go] Generate the missing Go input types for resource input properties that are deeply nested collections of object types <a href="https://redirect.github.com/pulumi/pulumi/pull/24236">#24236</a></li> <li>[programgen/go] Rename properties that collide with reserved names (e.g. <code>elementType</code>) the same way SDK codegen does, instead of emitting uncompilable code <a href="https://redirect.github.com/pulumi/pulumi/pull/24235">#24235</a></li> <li>[cli/display] Show the value being added when a refresh or provider diff reports an added property <a href="https://redirect.github.com/pulumi/pulumi/pull/24245">#24245</a></li> <li>[cli/plugin] Track when a plugin was last run so <code>pulumi plugin ls</code> reports an accurate last-used time on all platforms <a href="https://redirect.github.com/pulumi/pulumi/pull/24251">#24251</a></li> <li>[engine] Show secrets in diff display when <code>--show-secrets</code> is passed <a href="https://redirect.github.com/pulumi/pulumi/pull/24253">#24253</a></li> <li>[cli] Exit promptly when a command is cancelled while an HTTP request is being retried <a href="https://redirect.github.com/pulumi/pulumi/pull/24276">#24276</a></li> </ul> <h3>Improvements</h3> <ul> <li>[sdk/nodejs] Improve error message when resource registrations are still pending when pulumi exits <a href="https://redirect.github.com/pulumi/pulumi/pull/24082">#24082</a></li> <li>[cli] Pass the invoked command (e.g. <code>pulumi new</code>) to the browser-based login/signup flow so Pulumi Cloud can attribute signups to the command that triggered them <a href="https://redirect.github.com/pulumi/pulumi/pull/24192">#24192</a></li> </ul> <h3>Miscellaneous</h3> <ul> <li>[sdkgen] Extension-parameterized packages now namespace their resource and function tokens under their own package name rather than the base provider's <a href="https://redirect.github.com/pulumi/pulumi/pull/24143">#24143</a></li> <li>[java] Upgrade java to v1.35.0 <a href="https://redirect.github.com/pulumi/pulumi/pull/24202">#24202</a></li> <li>[backend/diy] The deprecation warning is now an error. PULUMI_DIY_BACKEND_IGNORE_DEPRECATION_WARNING is now PULUMI_DIY_BACKEND_IGNORE_DEPRECATION_ERROR. <a href="https://redirect.github.com/pulumi/pulumi/pull/24216">#24216</a></li> <li>[java] Upgrade java to v1.36.0 <a href="https://redirect.github.com/pulumi/pulumi/pull/24243">#24243</a></li> <li>[sdk/dotnet] Upgrade dotnet to v3.111.1 <a href="https://redirect.github.com/pulumi/pulumi/pull/24249">#24249</a></li> </ul> <h2>3.256.0 (2026-08-04)</h2> <h3>Features</h3> <ul> <li>[cli] Add <code>--ignore-protect</code> flag to <code>pulumi up</code>, <code>pulumi preview</code> and <code>pulumi destroy</code> to allow deleting protected resources without unprotecting them in the state first <a href="https://redirect.github.com/pulumi/pulumi/pull/24053">#24053</a></li> <li>[cli/env] Add an optional <code>--export-env-vars</code> flag to the <code>env provider {aws,azure,gcp}-login</code> commands to also set the standard SDK environment variables referencing the login outputs <a href="https://redirect.github.com/pulumi/pulumi/pull/24055">#24055</a></li> <li>[cli] Add a <code>--server</code> flag to <code>pulumi package add</code>, <code>publish</code>, <code>get-schema</code>, <code>get-mapping</code>, <code>gen-sdk</code>, <code>info</code> and <code>pulumi schema check</code> that skips package resolution and uses the given URL as the plugin download URL <a href="https://redirect.github.com/pulumi/pulumi/pull/24107">#24107</a></li> </ul> <h3>Bug Fixes</h3> <ul> <li>[backend/service] Fix <code>pulumi login --insecure</code> not being reflected in the stack's service secrets manager state, which caused TLS verification failures against self-hosted backends using self-signed certificates <a href="https://redirect.github.com/pulumi/pulumi/pull/24134">#24134</a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
| .. | ||
| pkg | ||
| .gitignore | ||
| go.mod | ||
| go.sum | ||
| main.go | ||
| Makefile | ||
| Pulumi.gcpProd.yaml | ||
| Pulumi.gcpStaging.yaml | ||
| Pulumi.local.yaml | ||
| Pulumi.yaml | ||
| README.md | ||
MCP Registry Kubernetes Deployment
This directory contains Pulumi infrastructure code to deploy the MCP Registry service to a Kubernetes cluster. It supports deploying the infrastructure locally (using an existing kubeconfig, e.g. with minikube) or to Google Cloud Platform (GCP).
Quick Start
Local Development
Pre-requisites:
- Pulumi CLI installed
- Access to a Kubernetes cluster via kubeconfig. You can run a cluster locally with minikube.
- Ensure your kubeconfig is configured at the cluster you want to use. For minikube, run
minikube start && minikube tunnel. - Run
make local-upto deploy the stack. - Access the repository via the ingress load balancer. You can find its external IP with
kubectl get svc ingress-nginx-controller -n ingress-nginx. Then runcurl -H "Host: local.registry.modelcontextprotocol.io" -k https://<EXTERNAL-IP>/v0/pingto check that the service is up.
To change config
The stack is configured out of the box for local development. But if you want to make changes, run commands like:
PULUMI_CONFIG_PASSPHRASE="" pulumi config set mcp-registry:environment local
PULUMI_CONFIG_PASSPHRASE="" pulumi config set mcp-registry:githubClientSecret --secret <some-secret-value>
To delete the stack
make local-destroy and deleting the cluster (with minikube: minikube delete) will reset you back to a clean state.
Production Deployment (GCP)
Note: Deployments are automatically handled by GitHub Actions with separate workflows for staging and production:
-
Staging: All merges to the
mainbranch automatically build and deploy the latest code to thestagingenvironment via deploy-staging.yml. Staging always uses the:mainDocker image tag. -
Production: Deployment requires explicit configuration of the Docker image tag in
Pulumi.gcpProd.yamland is triggered automatically via deploy-production.yml when this config file is pushed tomain. This GitOps-style approach provides manual control and an audit trail for production versions.
To deploy a specific version to production:
-
Cut a release (if deploying a new version):
# Via GitHub UI: https://github.com/modelcontextprotocol/registry/releases # Or via gh CLI: gh release create v1.2.3 --generate-notesThis builds Docker images tagged as
1.2.3andlatest(note: image tags do not include the 'v' prefix) -
Update the production image tag in
Pulumi.gcpProd.yaml:# Edit deploy/Pulumi.gcpProd.yaml # Change line: mcp-registry:imageTag: 1.2.3 (note: no 'v' prefix for Docker image tags) git add deploy/Pulumi.gcpProd.yaml git commit -m "Deploy version 1.2.3 to production" git push -
The production deployment workflow will automatically trigger and deploy the specified version
Manual Override: The steps below are preserved if a manual deployment override is needed.
Pre-requisites:
- Pulumi CLI installed
- A Google Cloud Platform (GCP) account
- A GCP Service Account with appropriate permissions
- Create a project:
gcloud projects create mcp-registry-prod - Set the project:
gcloud config set project mcp-registry-prod - Enable the bootstrap APIs needed before Pulumi can run. The remaining APIs
(
cloudresourcemanager,compute,container,logging,monitoring) are adopted as Pulumi-managedprojects.Serviceresources byensureRequiredAPIsinpkg/providers/gcp/provider.go, so they self-heal against drift but still need to be reachable on the very first deploy:gcloud services enable storage.googleapis.com # for the Pulumi state bucket below gcloud services enable cloudresourcemanager.googleapis.com # for the IAM bindings Pulumi creates gcloud services enable container.googleapis.com # for the GKE cluster - Create the Pulumi service account and grant it the roles required to manage
the deploy.
projectIamAdminis needed because the deploy creates IAM bindings on the project (for the default compute SA). The other four are general resource management:gcloud iam service-accounts create pulumi-svc sleep 10 gcloud projects add-iam-policy-binding mcp-registry-prod --member="serviceAccount:pulumi-svc@mcp-registry-prod.iam.gserviceaccount.com" --role="roles/container.admin" gcloud projects add-iam-policy-binding mcp-registry-prod --member="serviceAccount:pulumi-svc@mcp-registry-prod.iam.gserviceaccount.com" --role="roles/compute.admin" gcloud projects add-iam-policy-binding mcp-registry-prod --member="serviceAccount:pulumi-svc@mcp-registry-prod.iam.gserviceaccount.com" --role="roles/storage.admin" gcloud projects add-iam-policy-binding mcp-registry-prod --member="serviceAccount:pulumi-svc@mcp-registry-prod.iam.gserviceaccount.com" --role="roles/storage.hmacKeyAdmin" gcloud projects add-iam-policy-binding mcp-registry-prod --member="serviceAccount:pulumi-svc@mcp-registry-prod.iam.gserviceaccount.com" --role="roles/resourcemanager.projectIamAdmin" gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe mcp-registry-prod --format="value(projectNumber)")-compute@developer.gserviceaccount.com --member="serviceAccount:pulumi-svc@mcp-registry-prod.iam.gserviceaccount.com" --role="roles/iam.serviceAccountUser" gcloud iam service-accounts keys create sa-key.json --iam-account=pulumi-svc@mcp-registry-prod.iam.gserviceaccount.com - Create a GCS bucket for Pulumi state:
gsutil mb gs://mcp-registry-prod-pulumi-state - Set Pulumi's backend to GCS:
pulumi login gs://mcp-registry-prod-pulumi-state - Get the passphrase file
passphrase.prod.txtfrom the registry maintainers - Init the GCP stack:
PULUMI_CONFIG_PASSPHRASE_FILE=passphrase.prod.txt pulumi stack init gcpProd - Set the GCP credentials in Pulumi config:
# Base64 encode the service account key and set it pulumi config set --secret gcp:credentials "$(base64 < sa-key.json)" - Deploy:
make prod-up - Access the repository via the ingress load balancer. You can find its external IP with:
kubectl get svc ingress-nginx-controller -n ingress-nginx. Then runcurl -H "Host: prod.registry.modelcontextprotocol.io" -k https://<EXTERNAL-IP>/v0/pingto check that the service is up.
Structure
├── main.go # Pulumi program entry point
├── Pulumi.yaml # Project configuration
├── Pulumi.local.yaml # Local stack configuration
├── Pulumi.gcpProd.yaml # GCP production stack configuration
├── Pulumi.gcpStaging.yaml # GCP staging stack configuration
├── Makefile # Build and deployment targets
├── go.mod # Go module dependencies
├── go.sum # Go module checksums
└── pkg/ # Infrastructure packages
├── k8s/ # Kubernetes deployment components
│ ├── backup.go # Database backup configuration
│ ├── cert_manager.go # SSL certificate management
│ ├── deploy.go # Deployment orchestration
│ ├── ingress.go # Ingress controller setup
│ ├── monitoring.go # Metrics and monitoring setup
│ ├── postgres.go # PostgreSQL database deployment
│ └── registry.go # MCP Registry deployment
└── providers/ # Kubernetes cluster providers
├── types.go # Provider interface definitions
├── gcp/ # Google Kubernetes Engine provider
└── local/ # Local kubeconfig provider
Architecture Overview
Deployment Flow
- Pulumi program starts in
main.go - Configuration is loaded from Pulumi config files
- Provider factory creates appropriate cluster provider (GCP or local)
- Cluster provider sets up Kubernetes access
k8s.DeployAll()orchestrates complete deployment:- Certificate manager for SSL/TLS
- Ingress controller for external access
- Database for data persistence
- Backup infrastructure for database
- Monitoring and metrics collection
- MCP Registry application
Configuration
Configuration keys are namespaced. Set them with pulumi config set <key> [--secret].
| Parameter | Description | Required |
|---|---|---|
mcp-registry:environment |
Deployment environment (local/staging/prod) | Yes |
mcp-registry:provider |
Kubernetes provider (local/gcp) | No (default: local) |
mcp-registry:githubClientId |
GitHub OAuth Client ID | Yes |
mcp-registry:githubClientSecret |
GitHub OAuth Client Secret | Yes (secret) |
mcp-registry:jwtPrivateKey |
Ed25519 seed used to sign registry JWTs | Yes (secret) |
mcp-registry:googleOauthClientSecret |
Google OAuth client secret for Grafana login | Yes (secret) |
mcp-registry:imageTag |
Docker image tag for production environment | Yes (prod only) |
gcp:project |
GCP Project ID | Yes when provider=gcp |
gcp:region |
GCP Region | No (default: us-central1) |
gcp:credentials |
GCP service account credentials JSON | No (secret; set in staging/prod) |
Database Backups
The deployment uses K8up (a Kubernetes backup operator) that uses Restic under the hood.
When running locally they are stored in a Minio bucket. In staging and production, backups are stored in a GCS bucket.
Accessing Backup Files
Local Development (MinIO)
# Expose MinIO web console
kubectl port-forward -n minio svc/minio 9000:9000 9001:9001
Then open localhost:9001, login with username minioadmin and password minioadmin, and navigate to the k8up-backups bucket.
Staging and Production (GCS)
Decrypting and Restoring Backups
Backups are encrypted using Restic. To access the backup data:
- Download the backup files from the bucket:
# Local (MinIO) - ensure port-forward is active: kubectl port-forward -n minio svc/minio 9000:9000 9001:9001 AWS_ACCESS_KEY_ID=minioadmin AWS_SECRET_ACCESS_KEY=minioadmin \ aws --endpoint-url http://localhost:9000 s3 sync s3://k8up-backups/ ./backup-files/ # GCS (staging/production) gsutil -m cp -r gs://mcp-registry-{staging|prod}-backups/* ./backup-files/ - Install Restic
- Restore the backup:
PostgreSQL data will be inRESTIC_PASSWORD=password restic -r ./backup-files restore latest --target ./restored-files./restored-files/data/registry-pg-1/pgdata/
Troubleshooting
To configure kubectl to access an existing GKE cluster:
# Login
gcloud auth login
gcloud auth application-default login
# For production
gcloud container clusters get-credentials mcp-registry-prod --zone us-central1-b --project mcp-registry-prod
# For staging
gcloud container clusters get-credentials mcp-registry-staging --zone us-central1-b --project mcp-registry-staging
Check Status
kubectl get pods
kubectl get deployment
kubectl get svc
kubectl get ingress
kubectl get svc -n ingress-nginx
View Logs
kubectl logs -l app=mcp-registry
kubectl logs -l app=postgres
Check Backup Status
kubectl describe schedule.k8up.io
kubectl get backup