Document cluster manifests. (#320)
Document cluster manifests options. Review by @erthalion and @zerg-junior.
This commit is contained in:
		
							parent
							
								
									9cb48e0889
								
							
						
					
					
						commit
						b518a31d0c
					
				| 
						 | 
					@ -0,0 +1,218 @@
 | 
				
			||||||
 | 
					Postgres Cluster Manifest
 | 
				
			||||||
 | 
					=========================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Individual postgres clusters are described by the Kubernetes *cluster manifest*
 | 
				
			||||||
 | 
					that has the structure defined by the `postgres CRD` (custom resource
 | 
				
			||||||
 | 
					definition). The following section describes the structure of the manifest and
 | 
				
			||||||
 | 
					the purpose of individual keys. You can take a look at the examples of the
 | 
				
			||||||
 | 
					[minimal](https://github.com/zalando-incubator/postgres-operator/blob/master/manifests/minimal-postgres-manifest.yaml)
 | 
				
			||||||
 | 
					and the
 | 
				
			||||||
 | 
					[complete](https://github.com/zalando-incubator/postgres-operator/blob/master/manifests/complete-postgres-manifest.yaml)
 | 
				
			||||||
 | 
					cluster manifests.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					When Kubernetes resources, such as memory, CPU or volumes, are configured,
 | 
				
			||||||
 | 
					their amount is usually described as a string together with the units of
 | 
				
			||||||
 | 
					measurements. Please, refer to the [Kubernetes
 | 
				
			||||||
 | 
					documentation](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/)
 | 
				
			||||||
 | 
					for the possible values of those.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Manifest structure
 | 
				
			||||||
 | 
					------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					A postgres manifest is a `YAML` document. On the top level both individual
 | 
				
			||||||
 | 
					parameters and parameter groups can be defined. Parameter names are written
 | 
				
			||||||
 | 
					in camelCase.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Cluster metadata
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Those parameters are grouped under the `metadata` top-level key.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* **name**
 | 
				
			||||||
 | 
					  the name of the cluster. Must start with the `teamId` followed by a dash.
 | 
				
			||||||
 | 
					  Changing it after the cluster creation is not supported. Required field.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* **namespace**
 | 
				
			||||||
 | 
					  the namespace where the operator creates Kubernetes objects (i.e. pods,
 | 
				
			||||||
 | 
					  services, secrets) for the cluster. Changing it after the cluster creation
 | 
				
			||||||
 | 
					  results in deploying or updating a completely separate cluster in the target
 | 
				
			||||||
 | 
					  namespace. Optional (if present, should match the namespace where the
 | 
				
			||||||
 | 
					  manifest is applied). 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Top-level parameters
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Those are parameters grouped directly under  the `spec` key in the manifest.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* **teamId**
 | 
				
			||||||
 | 
					  name of the team the cluster belongs to. Changing it after the cluster
 | 
				
			||||||
 | 
					  creation is not supported. Required field.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* **dockerImage**
 | 
				
			||||||
 | 
					  custom docker image that overrides the **docker_image** operator parameter.
 | 
				
			||||||
 | 
					  It should be a [Spilo](https://github.com/zalando/spilo) image.  Optional.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* **enableMasterLoadBalancer**
 | 
				
			||||||
 | 
					  boolean flag to override the operator defaults (set by the
 | 
				
			||||||
 | 
					  `enable_master_load_balancer` parameter) to define whether to enable the load
 | 
				
			||||||
 | 
					  balancer pointing to the postgres primary. Optional.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* **enableReplicaLoadBalancer**
 | 
				
			||||||
 | 
					  boolean flag to override the operator defaults (set by the
 | 
				
			||||||
 | 
					  `enable_replica_load_balancer` parameter) to define whether to enable the
 | 
				
			||||||
 | 
					  load balancer pointing to the postgres standby instances. Optional.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* **allowedSourceRanges**
 | 
				
			||||||
 | 
					  when one or more load balancers are enabled for the cluster, this parameter
 | 
				
			||||||
 | 
					  defines the comma-separated range of IP networks (in CIDR-notation). The
 | 
				
			||||||
 | 
					  corresponding load balancer is accessible only to the networks defined by
 | 
				
			||||||
 | 
					  this parameter. Optional, when empty the load balancer service becomes
 | 
				
			||||||
 | 
					  inaccessible from outside of the Kubernetes cluster.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* **numberOfInstances**
 | 
				
			||||||
 | 
					  total number of  instances for a given cluster. The operator parameters
 | 
				
			||||||
 | 
					  `max_instances` and `min_instances` may also adjust this number.  Required
 | 
				
			||||||
 | 
					  field.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* **users**
 | 
				
			||||||
 | 
					  a map of usernames to user flags for the users that should be created in the
 | 
				
			||||||
 | 
					  cluster by the operator. User flags are a list, allowed elements are
 | 
				
			||||||
 | 
					  `SUPERUSER` `REPLICATION` `INHERIT`, `LOGIN`, `NOLOGIN`, `CREATEROLE`,
 | 
				
			||||||
 | 
					  `CREATEDB`, `BYPASSURL`. A login user is created by default unless NOLOGIN is
 | 
				
			||||||
 | 
					  specified, in which case the operator creates a role. One can specify empty
 | 
				
			||||||
 | 
					  flags by providing a JSON empty array '*[]*'. Optional.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* **databases**
 | 
				
			||||||
 | 
					  a map of database names to database owners for the databases that should be
 | 
				
			||||||
 | 
					  created by the operator. The owner users should already exist on the cluster
 | 
				
			||||||
 | 
					  (i.e. mentioned in the `user` parameter). Optional.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* **tolerations**
 | 
				
			||||||
 | 
					  a list of tolerations that apply to the cluster pods. Each element of that
 | 
				
			||||||
 | 
					  list is a dictionary with the following fields: `key`, `operator`, `value`,
 | 
				
			||||||
 | 
					  `effect` and `tolerationSeconds`. Each field is optional. See [Kubernetes
 | 
				
			||||||
 | 
					  examples](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/)
 | 
				
			||||||
 | 
					  for details on tolerations and possible values of those keys. When set, this
 | 
				
			||||||
 | 
					  value overrides the `pod_toleration` setting from the operator. Optional.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Postgres parameters
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Those parameters are grouped under the `postgresql` top-level key.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* **version**
 | 
				
			||||||
 | 
					  the postgres major version of the cluster. Looks at the [Spilo
 | 
				
			||||||
 | 
					  project](https://github.com/zalando/spilo/releases) for the list of supported
 | 
				
			||||||
 | 
					  versions. Changing the cluster version once the cluster has been bootstrapped
 | 
				
			||||||
 | 
					  is not supported. Required field.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* **parameters**
 | 
				
			||||||
 | 
					  a dictionary of postgres parameter names and values to apply to the resulting
 | 
				
			||||||
 | 
					  cluster. Optional (Spilo automatically sets reasonable defaults for
 | 
				
			||||||
 | 
					  parameters like work_mem or max_connections).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Patroni parameters
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Those parameters are grouped under the `patroni` top-level key. See the [patroni
 | 
				
			||||||
 | 
					documentation](https://patroni.readthedocs.io/en/latest/SETTINGS.html) for the
 | 
				
			||||||
 | 
					explanation of `ttl` and `loop_wait` parameters.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* **initdb**
 | 
				
			||||||
 | 
					  a map of key-value pairs describing initdb parameters. For `data-checksum`,
 | 
				
			||||||
 | 
					  `debug`, `no-locale`, `noclean`, `nosync` and `sync-only` parameters use
 | 
				
			||||||
 | 
					  `true` as the value if you want to set them. Changes to this option do not
 | 
				
			||||||
 | 
					  affect the already initialized clusters. Optional. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* **pg_hba**
 | 
				
			||||||
 | 
					  list of custom `pg_hba` lines to replace default ones. Note that the default
 | 
				
			||||||
 | 
					  ones include
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ```
 | 
				
			||||||
 | 
					  hostsll all +pamrole all pam
 | 
				
			||||||
 | 
					  ```
 | 
				
			||||||
 | 
					  , where pamrole is the name of the role for the pam authentication; any
 | 
				
			||||||
 | 
					    custom `pg_hba` should include the pam line to avoid breaking pam
 | 
				
			||||||
 | 
					    authentication. Optional.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* **ttl**
 | 
				
			||||||
 | 
					  patroni `ttl` parameter value, optional. The default is set by the Spilo
 | 
				
			||||||
 | 
					  docker image. Optional.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* **loop_wait**
 | 
				
			||||||
 | 
					  patroni `loop_wait` parameter value, optional. The default is set by the
 | 
				
			||||||
 | 
					  Spilo docker image. Optional.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* **retry_timeout**
 | 
				
			||||||
 | 
					  patroni `retry_timeout` parameter value, optional. The default is set by the
 | 
				
			||||||
 | 
					  Spilo docker image. Optional.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* **maximum_lag_on_failover**
 | 
				
			||||||
 | 
					  patroni `maximum_lag_on_failover` parameter value, optional. The default is
 | 
				
			||||||
 | 
					  set by the Spilo docker image. Optional.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Postgres container resources
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Those parameters define [CPU and memory requests and
 | 
				
			||||||
 | 
					limits](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/)
 | 
				
			||||||
 | 
					for the postgres container. They are grouped under the `resources` top-level
 | 
				
			||||||
 | 
					key. There are two subgroups, `requests` and `limits`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### Requests
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CPU and memory requests for the postgres container.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* **cpu**
 | 
				
			||||||
 | 
					  CPU requests for the postgres container. Optional, overrides the
 | 
				
			||||||
 | 
					  `default_cpu_requests` operator configuration parameter. Optional.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* **memory**
 | 
				
			||||||
 | 
					  memory requests for the postgres container. Optional, overrides the
 | 
				
			||||||
 | 
					  `default_memory_request` operator configuration parameter. Optional.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### Limits
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CPU and memory limits for the postgres container.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* **cpu**
 | 
				
			||||||
 | 
					  CPU limits for the postgres container. Optional, overrides the
 | 
				
			||||||
 | 
					  `default_cpu_limits` operator configuration parameter. Optional.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* **memory**
 | 
				
			||||||
 | 
					  memory limits for the postgres container. Optional, overrides the
 | 
				
			||||||
 | 
					  `default_memory_limits` operator configuration parameter. Optional.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Parameters defining how to clone the cluster from another one
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Those parameters are applied when the cluster should be a clone of another one
 | 
				
			||||||
 | 
					that is either already running or has a basebackup on S3. They are grouped
 | 
				
			||||||
 | 
					under the `clone` top-level key and do not affect the already running cluster.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* **cluster**
 | 
				
			||||||
 | 
					  name of the cluster to clone from. Translated to either the service name or
 | 
				
			||||||
 | 
					  the key inside the S3 bucket containing base backups. Required when the
 | 
				
			||||||
 | 
					  `clone` section is present.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* **uid**
 | 
				
			||||||
 | 
					  Kubernetes UID of the cluster to clone from. Since cluster name is not a
 | 
				
			||||||
 | 
					  unique identifier of the cluster (as identically named clusters may exist in
 | 
				
			||||||
 | 
					  different namespaces) , the operator uses UID in the S3 bucket name in order
 | 
				
			||||||
 | 
					  to guarantee uniqueness. Has no effect when cloning from the running
 | 
				
			||||||
 | 
					  clusters. Optional.
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					* **timestamp**
 | 
				
			||||||
 | 
					  the timestamp up to which the recovery should proceed. The operator always
 | 
				
			||||||
 | 
					  configures non-inclusive recovery target, stopping right before the given
 | 
				
			||||||
 | 
					  timestamp. When this parameter is set the operator will not consider cloning
 | 
				
			||||||
 | 
					  from the live cluster, even if it is running, and instead goes to S3. Optional.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### EBS volume resizing
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Those parameters are grouped under the `volume` top-level key and define the
 | 
				
			||||||
 | 
					properties of the persistent storage that stores postgres data.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* **size**
 | 
				
			||||||
 | 
					  the size of the target EBS volume. Usual Kubernetes size modifiers, i.e. `Gi`
 | 
				
			||||||
 | 
					  or `Mi`, apply. Required.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* **storageClass**
 | 
				
			||||||
 | 
					  the name of the Kubernetes storage class to draw the persistent volume from.
 | 
				
			||||||
 | 
					  See [Kubernetes
 | 
				
			||||||
 | 
					  documentation](https://kubernetes.io/docs/concepts/storage/storage-classes/)
 | 
				
			||||||
 | 
					  for the details on storage classes. Optional. 
 | 
				
			||||||
		Loading…
	
		Reference in New Issue