--- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: sgconfigs.stackgres.io spec: group: stackgres.io names: kind: SGConfig listKind: SGConfigList plural: sgconfigs singular: sgconfig scope: Namespaced versions: - name: v1 served: true storage: true subresources: status: {} additionalPrinterColumns: - jsonPath: .metadata.annotations.stackgres\.io/lockPod name: operator-pod type: string - jsonPath: .status.version name: operator-version type: string schema: openAPIV3Schema: type: object description: | SGConfig stores the configuration of the StackGres Operator > **WARNING**: Creating more than one SGConfig is forbidden in order to avoid misbehaviours. The single SGConfig should be created automatically during installation. properties: apiVersion: description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' type: string kind: description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string metadata: type: object spec: description: Spec defines the desired state of SGConfig type: object x-kubernetes-preserve-unknown-fields: true properties: containerRegistry: type: string default: quay.io description: The container registry host (and port) where the images will be pulled from. imagePullPolicy: type: string default: "IfNotPresent" description: Image pull policy used for images loaded by the Operator serviceAccount: type: object description: Section to configure Operator Installation ServiceAccount properties: create: type: boolean default: true description: If `true` the Operator Installation ServiceAccount will be created annotations: type: object x-kubernetes-preserve-unknown-fields: true description: Section to configure Installation ServiceAccount annotations repoCredentials: type: array description: Repositories credentials Secret names items: type: string description: Repository credentials Secret name operator: type: object description: Section to configure Operator Pod properties: image: type: object description: Section to configure Operator image properties: name: type: string default: "stackgres/operator" description: Operator image name tag: type: string description: Operator image tag pullPolicy: type: string default: "IfNotPresent" description: Operator image pull policy annotations: type: object description: Operator Pod annotations x-kubernetes-preserve-unknown-fields: true resources: type: object description: Operator Pod resources. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#resourcerequirements-v1-core x-kubernetes-preserve-unknown-fields: true nodeSelector: type: object x-kubernetes-preserve-unknown-fields: true description: Operator Pod node selector tolerations: type: array description: Operator Pod tolerations. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#toleration-v1-core items: type: object x-kubernetes-preserve-unknown-fields: true affinity: type: object x-kubernetes-preserve-unknown-fields: true description: Operator Pod affinity. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#affinity-v1-core serviceAccount: type: object description: Section to configure Operator ServiceAccount properties: annotations: type: object x-kubernetes-preserve-unknown-fields: true description: Section to configure Operator ServiceAccount annotations repoCredentials: type: array description: Repositories credentials Secret names items: type: string description: Repository credentials Secret name service: type: object description: Section to configure Operator Service properties: annotations: type: object x-kubernetes-preserve-unknown-fields: true description: Section to configure Operator Service annotations restapi: type: object description: Section to configure REST API Pod properties: name: type: string default: stackgres-restapi description: REST API container name image: type: object description: Section to configure REST API image properties: name: type: string default: "stackgres/restapi" description: REST API image name tag: type: string description: REST API image tag pullPolicy: type: string default: "IfNotPresent" description: REST API image pull policy annotations: type: object x-kubernetes-preserve-unknown-fields: true description: REST API Pod annotations resources: type: object x-kubernetes-preserve-unknown-fields: true description: REST API Pod resources. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#resourcerequirements-v1-core nodeSelector: type: object x-kubernetes-preserve-unknown-fields: true description: REST API Pod node selector tolerations: type: array description: REST API Pod tolerations. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#toleration-v1-core items: type: object x-kubernetes-preserve-unknown-fields: true affinity: type: object x-kubernetes-preserve-unknown-fields: true description: REST API Pod affinity. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#affinity-v1-core serviceAccount: type: object description: Section to configure REST API ServiceAccount properties: annotations: type: object x-kubernetes-preserve-unknown-fields: true description: REST API ServiceAccount annotations repoCredentials: type: array description: Repositories credentials Secret names items: type: string description: Repository credentials Secret name service: type: object description: Section to configure REST API Service properties: annotations: type: object x-kubernetes-preserve-unknown-fields: true description: REST API Service annotations adminui: type: object description: Section to configure Web Console container properties: image: type: object description: Section to configure Web Console image properties: name: type: string default: "stackgres/admin-ui" description: Web Console image name tag: type: string description: Web Console image tag pullPolicy: type: string default: "IfNotPresent" description: Web Console image pull policy resources: type: object x-kubernetes-preserve-unknown-fields: true description: Web Console resources. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#resourcerequirements-v1-core service: type: object description: Section to configure Web Console service. properties: exposeHTTP: type: boolean default: false description: When set to `true` the HTTP port will be exposed in the Web Console Service type: type: string default: ClusterIP description: | The type used for the service of the UI: * Set to LoadBalancer to create a load balancer (if supported by the kubernetes cluster) to allow connect from Internet to the UI. Note that enabling this feature will probably incurr in some fee that depend on the host of the kubernetes cluster (for example this is true for EKS, GKE and AKS). * Set to NodePort to expose admin UI from kubernetes nodes. loadBalancerIP: type: string description: | LoadBalancer will get created with the IP specified in this field. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature. loadBalancerSourceRanges: type: array description: | If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature. More info: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/ items: type: string nodePort: type: integer description: The HTTPS port used to expose the Service on Kubernetes nodes nodePortHTTP: type: integer description: The HTTP port used to expose the Service on Kubernetes nodes jobs: type: object description: Section to configure Operator Installation Jobs properties: image: type: object description: Section to configure Operator Installation Jobs image properties: name: type: string default: "stackgres/jobs" description: Operator Installation Jobs image name tag: type: string description: Operator Installation Jobs image tag pullPolicy: type: string default: "IfNotPresent" description: Operator Installation Jobs image pull policy annotations: type: object x-kubernetes-preserve-unknown-fields: true description: Operator Installation Jobs annotations resources: type: object x-kubernetes-preserve-unknown-fields: true description: Operator Installation Jobs resources. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#resourcerequirements-v1-core nodeSelector: type: object x-kubernetes-preserve-unknown-fields: true description: Operator Installation Jobs node selector tolerations: type: array description: Operator Installation Jobs tolerations. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#toleration-v1-core items: type: object x-kubernetes-preserve-unknown-fields: true affinity: type: object x-kubernetes-preserve-unknown-fields: true description: Operator Installation Jobs affinity. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#affinity-v1-core serviceAccount: type: object description: Section to configure Jobs ServiceAccount properties: annotations: type: object x-kubernetes-preserve-unknown-fields: true description: Jobs ServiceAccount annotations repoCredentials: type: array description: Repositories credentials Secret names items: type: string description: Repository credentials Secret name deploy: type: object description: Section to configure deployment aspects. properties: operator: type: boolean default: true description: When set to `true` the Operator will be deployed. restapi: type: boolean default: true description: When set to `true` the Web Console / REST API will be deployed. cert: type: object description: Section to configure the Operator, REST API and Web Console certificates and JWT RSA key-pair. properties: autoapprove: type: boolean default: true description: | If set to `true` the CertificateSigningRequest used to generate the certificate used by Webhooks will be approved by the Operator Installation Job. createForOperator: type: boolean default: true description: When set to `true` the Operator certificate will be created. createForWebApi: type: boolean default: true description: When set to `true` the Web Console / REST API certificate will be created. secretName: type: string description: | The Secret name with the Operator Webhooks certificate issued by the Kubernetes cluster CA of type kubernetes.io/tls. See https://kubernetes.io/docs/concepts/configuration/secret/#tls-secrets regenerateCert: type: boolean description: | When set to `true` the Operator certificates will be regenerated if `createForOperator` is set to `true`, and the certificate is expired or invalid. default: true certDuration: type: integer description: | The duration in days of the generated certificate for the Operator after which it will expire and be regenerated. If not specified it will be set to 730 (2 years) by default. webSecretName: type: string description: | The Secret name with the Web Console / REST API certificate of type kubernetes.io/tls. See https://kubernetes.io/docs/concepts/configuration/secret/#tls-secrets regenerateWebCert: type: boolean description: | When set to `true` the Web Console / REST API certificates will be regenerated if `createForWebApi` is set to `true`, and the certificate is expired or invalid. default: true regenerateWebRsa: type: boolean description: | When set to `true` the Web Console / REST API RSA key pair will be regenerated if `createForWebApi` is set to `true`, and the certificate is expired or invalid. default: true webCertDuration: type: integer description: | The duration in days of the generated certificate for the Web Console / REST API after which it will expire and be regenerated. If not specified it will be set to 730 (2 years) by default. webRsaDuration: type: integer description: | The duration in days of the generated RSA key pair for the Web Console / REST API after which it will expire and be regenerated. If not specified it will be set to 730 (2 years) by default. certManager: type: object description: Section to configure cert-manager integration to generate Operator certificates properties: autoConfigure: type: boolean default: false description: | When set to `true` then Issuer and Certificate for Operator and Web Console / REST API Pods will be generated duration: type: string default: "2160h" description: The requested duration (i.e. lifetime) of the Certificates. See https://cert-manager.io/docs/reference/api-docs/#cert-manager.io%2fv1 renewBefore: type: string default: "360h" description: How long before the currently issued certificate’s expiry cert-manager should renew the certificate. See https://cert-manager.io/docs/reference/api-docs/#cert-manager.io%2fv1 encoding: type: string default: PKCS1 description: The private key cryptography standards (PKCS) encoding for this certificate’s private key to be encoded in. See https://cert-manager.io/docs/reference/api-docs/#cert-manager.io/v1.CertificatePrivateKey size: type: integer default: 2048 description: Size is the key bit size of the corresponding private key for this certificate. See https://cert-manager.io/docs/reference/api-docs/#cert-manager.io/v1.CertificatePrivateKey rbac: type: object description: Section to configure RBAC for Web Console admin user properties: create: type: boolean default: true description: | When set to `true` the admin user is assigned the `cluster-admin` ClusterRole by creating ClusterRoleBinding. authentication: type: object description: Section to configure Web Console authentication properties: type: type: string default: jwt description: | Specify the authentication mechanism to use. By default is `jwt`, see https://stackgres.io/doc/latest/api/rbac#local-secret-mechanism. If set to `oidc` then see https://stackgres.io/doc/latest/api/rbac/#openid-connect-provider-mechanism. createAdminSecret: type: boolean description: | When `true` will create the secret used to store the admin user credentials to access the UI. default: true user: type: string default: admin description: | The admin username that will be created for the Web Console Operator bundle installation can not change the default value of this field. password: type: string description: | The admin password that will be created for the Web Console. If not specified a random password will be generated. secretRef: type: object description: | Allow to specify a reference to a Secret with the admin user credentials for the Web Console. In order to assign properly permissions. Make sure the `user` field match the value of the `k8sUsername` key in the referenced Secret. properties: name: description: The name of the Secret. type: string oidc: type: object description: Section to configure Web Console OIDC authentication properties: tlsVerification: type: string description: Can be one of `required`, `certificate-validation` or `none` authServerUrl: type: string clientId: type: string credentialsSecret: type: string clientIdSecretRef: type: object properties: name: type: string key: type: string credentialsSecretSecretRef: type: object properties: name: type: string key: type: string prometheus: type: object description: Section to configure Prometheus integration. properties: allowAutobind: type: boolean default: true description: | If set to false disable automatic bind to Prometheus created using the [Prometheus Operator](https://github.com/prometheus-operator/prometheus-operator). If disabled the cluster will not be binded to Prometheus automatically and will require manual intervention by the Kubernetes cluster administrator. grafana: type: object description: Section to configure Grafana integration properties: autoEmbed: type: boolean default: false description: | When set to `true` embed automatically Grafana into the Web Console by creating the StackGres dashboard and the read-only role used to read it from the Web Console schema: type: string default: http description: | The schema to access Grafana. By default http. (used to embed manually and automatically grafana) webHost: type: string description: | The service host name to access grafana (used to embed manually and automatically Grafana). The parameter value should point to the grafana service following the [DNS reference](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/) `svc_name.namespace` datasourceName: type: string default: Prometheus description: The datasource name used to create the StackGres Dashboard into Grafana user: type: string default: admin description: | The username to access Grafana. By default admin. (used to embed automatically Grafana) password: type: string default: prom-operator description: | The password to access Grafana. By default prom-operator (the default in for kube-prometheus-stack helm chart). (used to embed automatically Grafana) secretNamespace: type: string description: | The namespace of secret with credentials to access Grafana. (used to embed automatically Grafana, alternative to use `user` and `password`) secretName: type: string description: | The name of secret with credentials to access Grafana. (used to embed automatically Grafana, alternative to use `user` and `password`) secretUserKey: type: string description: | The key of secret with username used to access Grafana. (used to embed automatically Grafana, alternative to use `user` and `password`) secretPasswordKey: type: string description: | The key of secret with password used to access Grafana. (used to embed automatically Grafana, alternative to use `user` and `password`) dashboardConfigMap: type: string description: | The ConfigMap name with the dashboard JSON in the key `grafana-dashboard.json` that will be created in Grafana. If not set the default dashboardId: type: string description: | The dashboard id that will be create in Grafana (see https://grafana.com/grafana/dashboards). By default 9628. (used to embed automatically Grafana) Manual Steps: Create grafana dashboard for postgres exporter and copy/paste share URL: - Grafana > Create > Import > Grafana.com Dashboard 9628 Copy/paste grafana dashboard URL for postgres exporter: - Grafana > Dashboard > Manage > Select postgres exporter dashboard > Copy URL url: type: string description: | The URL of the PostgreSQL dashboard created in Grafana (used to embed manually Grafana) token: type: string description: | The Grafana API token to access the PostgreSQL dashboard created in Grafana (used to embed manually Grafana) Manual Steps: Create and copy/paste grafana API token: - Grafana > Configuration > API Keys > Add API key (for viewer) > Copy key value extensions: type: object description: Section to configure extensions properties: repositoryUrls: type: array default: - https://extensions.stackgres.io/postgres/repository description: | A list of extensions repository URLs used to retrieve extensions To set a proxy for extensions repository add parameter proxyUrl to the URL: `https://extensions.stackgres.io/postgres/repository?proxyUrl=%3A%2F%2F[%3A]` (URL encoded) Other URL parameters are: * `skipHostnameVerification`: set it to `true` in order to use a server or a proxy with a self signed certificate * `retry`: set it to `[:]` in order to retry a request on failure * `setHttpScheme`: set it to `true` in order to force using HTTP scheme items: type: string cache: type: object description: | Section to configure extensions cache (experimental). This feature is in beta and may cause failures, please use with caution and report any error to https://gitlab.com/ongresinc/stackgres/-/issues/new properties: enabled: type: boolean default: false description: | When set to `true` enable the extensions cache. This feature is in beta and may cause failures, please use with caution and report any error to https://gitlab.com/ongresinc/stackgres/-/issues/new preloadedExtensions: type: array default: - x86_64/linux/timescaledb-1\.7\.4-pg12 description: An array of extensions pattern used to pre-loaded estensions into the extensions cache items: type: string description: An extension pattern used to pre-loaded estensions into the extensions cache persistentVolume: type: object description: Section to configure the extensions cache PersistentVolume properties: size: type: string default: 1Gi description: | The PersistentVolume size for the extensions cache Only use whole numbers (e.g. not 1e6) and K/Ki/M/Mi/G/Gi as units storageClass: type: string description: | If defined set storage class If set to "-" (equivalent to storageClass: "" in a PV spec) disables dynamic provisioning If undefined (the default) or set to null, no storageClass spec is set, choosing the default provisioner. (gp2 on AWS, standard on GKE, AWS & OpenStack) hostPath: type: string description: | If set, will use a host path volume with the specified path for the extensions cache instead of a PersistentVolume shardingSphere: type: object description: Section to configure integration with ShardingSphere operator properties: serviceAccount: type: object description: | Section to configure ServiceAccount used by ShardingSphere operator. You may configure a specific value for a sharded cluster under section `SGShardedCluster.speccoordinator.configurations.shardingSphere.serviceAccount`. required: [namespace,name] properties: namespace: type: string description: The namespace of the ServiceAccount used by ShardingSphere operator name: type: string description: The name of the ServiceAccount used by ShardingSphere operator developer: type: object x-kubernetes-preserve-unknown-fields: true description: | Section to configure developer options. Following options are for developers only, but can also be useful in some cases ;) properties: version: type: string description: Set the operator version (used for testing) logLevel: type: string description: Set `quarkus.log.level`. See https://quarkus.io/guides/logging#root-logger-configuration showDebug: type: boolean default: false description: If set to `true` add extra debug to any script controlled by the reconciliation cycle of the operator configuration showStackTraces: type: boolean default: false description: Set `quarkus.log.console.format` to `%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c{4.}] (%t) %s%e%n`. See https://quarkus.io/guides/logging#logging-format useJvmImages: type: boolean default: false description: | The operator will use JVM version of the images enableJvmDebug: type: boolean default: false description: | Only work with JVM version and allow connect on port 8000 of operator Pod with jdb or similar enableJvmDebugSuspend: type: boolean default: false description: | Only work with JVM version and if `enableJvmDebug` is `true` suspend the JVM until a debugger session is started externalOperatorIp: type: string description: Set the external Operator IP externalOperatorPort: type: integer description: Set the external Operator port externalRestApiIp: type: string description: Set the external REST API IP externalRestApiPort: type: integer description: Set the external REST API port allowPullExtensionsFromImageRepository: type: boolean default: false description: | If set to `true` and `extensions.cache.enabled` is also `true` it will try to download extensions from images (experimental) disableArbitraryUser: type: boolean default: false description: | It set to `true` disable arbitrary user that is set for OpenShift clusters patches: type: object description: | Section to define patches for some StackGres Pods properties: operator: type: object description: | Section to define volumes to be used by the operator container properties: volumes: type: array description: Pod volumes. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#volume-v1-core items: type: object x-kubernetes-preserve-unknown-fields: true volumeMounts: type: array description: Pod's container volume mounts. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#volumemount-v1-core items: type: object x-kubernetes-preserve-unknown-fields: true restapi: type: object description: | Section to define volumes to be used by the restapi container properties: volumes: type: array description: Pod volumes. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#volume-v1-core items: type: object x-kubernetes-preserve-unknown-fields: true volumeMounts: type: array description: Pod's container volume mounts. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#volumemount-v1-core items: type: object x-kubernetes-preserve-unknown-fields: true adminui: type: object description: | Section to define volumes to be used by the adminui container properties: volumes: type: array description: Pod volumes. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#volume-v1-core items: type: object x-kubernetes-preserve-unknown-fields: true volumeMounts: type: array description: Pod's container volume mounts. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#volumemount-v1-core items: type: object x-kubernetes-preserve-unknown-fields: true jobs: type: object description: | Section to define volumes to be used by the jobs container properties: volumes: type: array description: Pod volumes. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#volume-v1-core items: type: object x-kubernetes-preserve-unknown-fields: true volumeMounts: type: array description: Pod's container volume mounts. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#volumemount-v1-core items: type: object x-kubernetes-preserve-unknown-fields: true clusterController: type: object description: | Section to define volumes to be used by the cluster controller container properties: volumes: type: array description: Pod volumes. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#volume-v1-core items: type: object x-kubernetes-preserve-unknown-fields: true volumeMounts: type: array description: Pod's container volume mounts. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#volumemount-v1-core items: type: object x-kubernetes-preserve-unknown-fields: true distributedlogsController: type: object description: | Section to define volumes to be used by the distributedlogs controller container properties: volumes: type: array description: Pod volumes. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#volume-v1-core items: type: object x-kubernetes-preserve-unknown-fields: true volumeMounts: type: array description: Pod's container volume mounts. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#volumemount-v1-core items: type: object x-kubernetes-preserve-unknown-fields: true status: type: object description: Status defines the observed state of SGConfig x-kubernetes-preserve-unknown-fields: true properties: conditions: type: array items: type: object properties: lastTransitionTime: description: Last time the condition transitioned from one status to another. type: string message: description: A human readable message indicating details about the transition. type: string reason: description: The reason for the condition's last transition. type: string status: description: Status of the condition, one of True, False, Unknown. type: string type: description: Type of deployment condition. type: string version: type: string description: Latest version of the operator used to check for updates removeOldOperatorBundleResources: type: boolean description: Indicate when the old operator bundle resources has been removed grafana: type: object properties: urls: description: Grafana URLs to StackGres dashboards type: array items: type: string description: Grafana URL to StackGres dashboards preceded by the dashboard name and a semicolon `:` token: description: Grafana Token that allow to access dashboards type: string configHash: description: Grafana configuration hash type: string