apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: postgresqls.acid.zalan.do spec: group: acid.zalan.do names: kind: postgresql listKind: postgresqlList plural: postgresqls singular: postgresql shortNames: - pg categories: - all scope: Namespaced versions: - name: v1 served: true storage: true subresources: status: {} additionalPrinterColumns: - name: Team type: string description: Team responsible for Postgres cluster jsonPath: .spec.teamId - name: Version type: string description: PostgreSQL version jsonPath: .spec.postgresql.version - name: Pods type: integer description: Number of Pods per Postgres cluster jsonPath: .spec.numberOfInstances - name: Volume type: string description: Size of the bound volume jsonPath: .spec.volume.size - name: CPU-Request type: string description: Requested CPU for Postgres containers jsonPath: .spec.resources.requests.cpu - name: Memory-Request type: string description: Requested memory for Postgres containers jsonPath: .spec.resources.requests.memory - name: Age type: date jsonPath: .metadata.creationTimestamp - name: Status type: string description: Current sync status of postgresql resource jsonPath: .status.PostgresClusterStatus schema: openAPIV3Schema: type: object required: - kind - apiVersion - spec properties: kind: type: string enum: - postgresql apiVersion: type: string enum: - acid.zalan.do/v1 spec: type: object required: - numberOfInstances - teamId - postgresql - volume properties: additionalVolumes: type: array items: type: object required: - name - mountPath - volumeSource properties: name: type: string mountPath: type: string targetContainers: type: array nullable: true items: type: string volumeSource: type: object x-kubernetes-preserve-unknown-fields: true subPath: type: string allowedSourceRanges: type: array nullable: true items: type: string pattern: '^(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\/(\d|[1-2]\d|3[0-2])$' clone: type: object required: - cluster properties: cluster: type: string s3_endpoint: type: string s3_access_key_id: type: string s3_secret_access_key: type: string s3_force_path_style: type: boolean s3_wal_path: type: string timestamp: type: string pattern: '^([0-9]+)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])[Tt]([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)(\.[0-9]+)?(([+-]([01][0-9]|2[0-3]):[0-5][0-9]))$' # The regexp matches the date-time format (RFC 3339 Section 5.6) that specifies a timezone as an offset relative to UTC # Example: 1996-12-19T16:39:57-08:00 # Note: this field requires a timezone uid: format: uuid type: string connectionPooler: type: object properties: dockerImage: type: string maxDBConnections: type: integer mode: type: string enum: - "session" - "transaction" numberOfInstances: type: integer minimum: 1 resources: type: object properties: limits: type: object properties: cpu: type: string pattern: '^(\d+m|\d+(\.\d{1,3})?)$' memory: type: string pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' requests: type: object properties: cpu: type: string pattern: '^(\d+m|\d+(\.\d{1,3})?)$' memory: type: string pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' schema: type: string user: type: string databases: type: object additionalProperties: type: string # Note: usernames specified here as database owners must be declared in the users key of the spec key. dockerImage: type: string enableConnectionPooler: type: boolean enableReplicaConnectionPooler: type: boolean enableLogicalBackup: type: boolean enableMasterLoadBalancer: type: boolean enableMasterPoolerLoadBalancer: type: boolean enableReplicaLoadBalancer: type: boolean enableReplicaPoolerLoadBalancer: type: boolean enableShmVolume: type: boolean env: type: array nullable: true items: type: object x-kubernetes-preserve-unknown-fields: true livenessProbe: description: 'Periodic probe of container liveness. Container will be restarted if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' properties: exec: description: One and only one of the following should be specified. Exec specifies the action to take. properties: command: description: Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. items: type: string type: array type: object failureThreshold: description: Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1. format: int32 type: integer httpGet: description: HTTPGet specifies the http request to perform. properties: host: description: Host name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead. type: string httpHeaders: description: Custom headers to set in the request. HTTP allows repeated headers. items: description: HTTPHeader describes a custom header to be used in HTTP probes properties: name: description: The header field name type: string value: description: The header field value type: string required: - name - value type: object type: array path: description: Path to access on the HTTP server. type: string port: anyOf: - type: integer - type: string description: Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. x-kubernetes-int-or-string: true scheme: description: Scheme to use for connecting to the host. Defaults to HTTP. type: string required: - port type: object initialDelaySeconds: description: 'Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' format: int32 type: integer periodSeconds: description: How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1. format: int32 type: integer successThreshold: description: Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1. format: int32 type: integer tcpSocket: description: 'TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported TODO: implement a realistic TCP lifecycle hook' properties: host: description: 'Optional: Host name to connect to, defaults to the pod IP.' type: string port: anyOf: - type: integer - type: string description: Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. x-kubernetes-int-or-string: true required: - port type: object terminationGracePeriodSeconds: description: Optional duration in seconds the pod needs to terminate gracefully upon probe failure. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. If this value is nil, the pod's terminationGracePeriodSeconds will be used. Otherwise, this value overrides the value provided by the pod spec. Value must be non-negative integer. The value zero indicates stop immediately via the kill signal (no opportunity to shut down). This is a beta field and requires enabling ProbeTerminationGracePeriod feature gate. Minimum value is 1. spec.terminationGracePeriodSeconds is used if unset. format: int64 type: integer timeoutSeconds: description: 'Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' format: int32 type: integer type: object init_containers: type: array description: deprecated nullable: true items: type: object x-kubernetes-preserve-unknown-fields: true initContainers: type: array nullable: true items: type: object x-kubernetes-preserve-unknown-fields: true logicalBackupSchedule: type: string pattern: '^(\d+|\*)(/\d+)?(\s+(\d+|\*)(/\d+)?){4}$' maintenanceWindows: type: array items: type: string pattern: '^\ *((Mon|Tue|Wed|Thu|Fri|Sat|Sun):(2[0-3]|[01]?\d):([0-5]?\d)|(2[0-3]|[01]?\d):([0-5]?\d))-((Mon|Tue|Wed|Thu|Fri|Sat|Sun):(2[0-3]|[01]?\d):([0-5]?\d)|(2[0-3]|[01]?\d):([0-5]?\d))\ *$' masterServiceAnnotations: type: object additionalProperties: type: string nodeAffinity: type: object properties: preferredDuringSchedulingIgnoredDuringExecution: type: array items: type: object required: - preference - weight properties: preference: type: object properties: matchExpressions: type: array items: type: object required: - key - operator properties: key: type: string operator: type: string values: type: array items: type: string matchFields: type: array items: type: object required: - key - operator properties: key: type: string operator: type: string values: type: array items: type: string weight: format: int32 type: integer requiredDuringSchedulingIgnoredDuringExecution: type: object required: - nodeSelectorTerms properties: nodeSelectorTerms: type: array items: type: object properties: matchExpressions: type: array items: type: object required: - key - operator properties: key: type: string operator: type: string values: type: array items: type: string matchFields: type: array items: type: object required: - key - operator properties: key: type: string operator: type: string values: type: array items: type: string numberOfInstances: type: integer minimum: 0 patroni: type: object properties: failsafe_mode: type: boolean initdb: type: object additionalProperties: type: string loop_wait: type: integer maximum_lag_on_failover: type: integer pg_hba: type: array items: type: string retry_timeout: type: integer slots: type: object additionalProperties: type: object additionalProperties: type: string synchronous_mode: type: boolean synchronous_mode_strict: type: boolean synchronous_node_count: type: integer ttl: type: integer podAnnotations: type: object additionalProperties: type: string pod_priority_class_name: type: string description: deprecated podPriorityClassName: type: string postgresql: type: object required: - version properties: version: type: string enum: - "10" - "11" - "12" - "13" - "14" - "15" parameters: type: object additionalProperties: type: string preparedDatabases: type: object additionalProperties: type: object properties: defaultUsers: type: boolean extensions: type: object additionalProperties: type: string schemas: type: object additionalProperties: type: object properties: defaultUsers: type: boolean defaultRoles: type: boolean secretNamespace: type: string replicaLoadBalancer: type: boolean description: deprecated replicaServiceAnnotations: type: object additionalProperties: type: string resources: type: object properties: limits: type: object properties: cpu: type: string # Decimal natural followed by m, or decimal natural followed by # dot followed by up to three decimal digits. # # This is because the Kubernetes CPU resource has millis as the # maximum precision. The actual values are checked in code # because the regular expression would be huge and horrible and # not very helpful in validation error messages; this one checks # only the format of the given number. # # https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#meaning-of-cpu pattern: '^(\d+m|\d+(\.\d{1,3})?)$' # Note: the value specified here must not be zero or be lower # than the corresponding request. memory: type: string # You can express memory as a plain integer or as a fixed-point # integer using one of these suffixes: E, P, T, G, M, k. You can # also use the power-of-two equivalents: Ei, Pi, Ti, Gi, Mi, Ki # # https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#meaning-of-memory pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' # Note: the value specified here must not be zero or be higher # than the corresponding limit. hugepages-2Mi: type: string pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' hugepages-1Gi: type: string pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' requests: type: object properties: cpu: type: string pattern: '^(\d+m|\d+(\.\d{1,3})?)$' memory: type: string pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' hugepages-2Mi: type: string pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' hugepages-1Gi: type: string pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' schedulerName: type: string serviceAnnotations: type: object additionalProperties: type: string sidecars: type: array nullable: true items: type: object x-kubernetes-preserve-unknown-fields: true spiloRunAsUser: type: integer spiloRunAsGroup: type: integer spiloFSGroup: type: integer standby: type: object properties: s3_wal_path: type: string gs_wal_path: type: string standby_host: type: string standby_port: type: string oneOf: - required: - s3_wal_path - required: - gs_wal_path - required: - standby_host streams: type: array items: type: object required: - applicationId - database - tables properties: applicationId: type: string batchSize: type: integer database: type: string enableRecovery: type: boolean filter: type: object additionalProperties: type: string tables: type: object additionalProperties: type: object required: - eventType properties: eventType: type: string idColumn: type: string payloadColumn: type: string recoveryEventType: type: string teamId: type: string tls: type: object required: - secretName properties: secretName: type: string certificateFile: type: string privateKeyFile: type: string caFile: type: string caSecretName: type: string tolerations: type: array items: type: object properties: key: type: string operator: type: string enum: - Equal - Exists value: type: string effect: type: string enum: - NoExecute - NoSchedule - PreferNoSchedule tolerationSeconds: type: integer useLoadBalancer: type: boolean description: deprecated users: type: object additionalProperties: type: array nullable: true items: type: string enum: - bypassrls - BYPASSRLS - nobypassrls - NOBYPASSRLS - createdb - CREATEDB - nocreatedb - NOCREATEDB - createrole - CREATEROLE - nocreaterole - NOCREATEROLE - inherit - INHERIT - noinherit - NOINHERIT - login - LOGIN - nologin - NOLOGIN - replication - REPLICATION - noreplication - NOREPLICATION - superuser - SUPERUSER - nosuperuser - NOSUPERUSER usersWithInPlaceSecretRotation: type: array nullable: true items: type: string usersWithSecretRotation: type: array nullable: true items: type: string volume: type: object required: - size properties: iops: type: integer selector: type: object properties: matchExpressions: type: array items: type: object required: - key - operator properties: key: type: string operator: type: string enum: - DoesNotExist - Exists - In - NotIn values: type: array items: type: string matchLabels: type: object x-kubernetes-preserve-unknown-fields: true size: type: string pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$' # Note: the value specified here must not be zero. storageClass: type: string subPath: type: string throughput: type: integer status: type: object additionalProperties: type: string