805 lines
31 KiB
YAML
805 lines
31 KiB
YAML
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
|