Merge pull request #312 from zalando-incubator/feature/doc-clone
Add an example of clone feature
This commit is contained in:
		
						commit
						681656cbb7
					
				
							
								
								
									
										77
									
								
								docs/user.md
								
								
								
								
							
							
						
						
									
										77
									
								
								docs/user.md
								
								
								
								
							|  | @ -34,13 +34,13 @@ spec: | ||||||
| ## Create a new Spilo cluster | ## Create a new Spilo cluster | ||||||
| 
 | 
 | ||||||
| ```bash | ```bash | ||||||
|     $ kubectl create -f manifests/minimal-postgres-manifest.yaml | $ kubectl create -f manifests/minimal-postgres-manifest.yaml | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| ## Watch pods being created | ## Watch pods being created | ||||||
| 
 | 
 | ||||||
| ```bash | ```bash | ||||||
|     $ kubectl get pods -w --show-labels | $ kubectl get pods -w --show-labels | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| ## Connect to PostgreSQL | ## Connect to PostgreSQL | ||||||
|  | @ -48,10 +48,10 @@ spec: | ||||||
| We can use the generated secret of the `postgres` robot user to connect to our `acid-minimal-cluster` master running in Minikube: | We can use the generated secret of the `postgres` robot user to connect to our `acid-minimal-cluster` master running in Minikube: | ||||||
| 
 | 
 | ||||||
| ```bash | ```bash | ||||||
|     $ export PGHOST=db_host | $ export PGHOST=db_host | ||||||
|     $ export PGPORT=db_port | $ export PGPORT=db_port | ||||||
|     $ export PGPASSWORD=$(kubectl get secret postgres.acid-minimal-cluster.credentials -o 'jsonpath={.data.password}' | base64 -d) | $ export PGPASSWORD=$(kubectl get secret postgres.acid-minimal-cluster.credentials -o 'jsonpath={.data.password}' | base64 -d) | ||||||
|     $ psql -U postgres | $ psql -U postgres | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| # Defining database roles in the operator | # Defining database roles in the operator | ||||||
|  | @ -162,14 +162,14 @@ definitions will be ignored with a prior warning. | ||||||
| See [infrastructure roles secret](https://github.com/zalando-incubator/postgres-operator/blob/master/manifests/infrastructure-roles.yaml) | See [infrastructure roles secret](https://github.com/zalando-incubator/postgres-operator/blob/master/manifests/infrastructure-roles.yaml) | ||||||
| and [infrastructure roles configmap](https://github.com/zalando-incubator/postgres-operator/blob/master/manifests/infrastructure-roles-configmap.yaml) for the examples. | and [infrastructure roles configmap](https://github.com/zalando-incubator/postgres-operator/blob/master/manifests/infrastructure-roles-configmap.yaml) for the examples. | ||||||
| 
 | 
 | ||||||
| #### Use taints and tolerations for dedicated PostgreSQL nodes | ## Use taints and tolerations for dedicated PostgreSQL nodes | ||||||
| 
 | 
 | ||||||
| To ensure Postgres pods are running on nodes without any other application | To ensure Postgres pods are running on nodes without any other application | ||||||
| pods, you can use | pods, you can use | ||||||
| [taints and tolerations](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) | [taints and tolerations](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) | ||||||
| and configure the required toleration in the manifest. | and configure the required toleration in the manifest. | ||||||
| 
 | 
 | ||||||
| ``` | ```yaml | ||||||
| apiVersion: "acid.zalan.do/v1" | apiVersion: "acid.zalan.do/v1" | ||||||
| kind: postgresql | kind: postgresql | ||||||
| metadata: | metadata: | ||||||
|  | @ -181,3 +181,64 @@ spec: | ||||||
|     operator: Exists |     operator: Exists | ||||||
|     effect: NoSchedule |     effect: NoSchedule | ||||||
| ``` | ``` | ||||||
|  | 
 | ||||||
|  | ## How to clone an existing PostgreSQL cluster | ||||||
|  | 
 | ||||||
|  | You can spin up a new cluster as a clone of the existing one, using a clone | ||||||
|  | section in the spec. There are two options here: | ||||||
|  | 
 | ||||||
|  | * Clone directly from a source cluster using `pg_basebackup` | ||||||
|  | 
 | ||||||
|  | * Clone from an S3 bucket | ||||||
|  | 
 | ||||||
|  | ### Clone directly | ||||||
|  | 
 | ||||||
|  | ```yaml | ||||||
|  | apiVersion: "acid.zalan.do/v1" | ||||||
|  | kind: postgresql | ||||||
|  | 
 | ||||||
|  | metadata: | ||||||
|  |   name: acid-test-cluster | ||||||
|  | spec: | ||||||
|  |   clone: | ||||||
|  |     cluster: "acid-batman" | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | Here `cluster` is a name of a source cluster that is going to be cloned. The | ||||||
|  | cluster to clone is assumed to be running and the clone procedure invokes | ||||||
|  | `pg_basebackup` from it. The operator will connect to the service by name (if | ||||||
|  | the cluster is called test, then the connection string will look like host=test | ||||||
|  | port=5432), which means that you can clone only from clusters running in the | ||||||
|  | default namespace. | ||||||
|  | 
 | ||||||
|  | ### Clone from S3 | ||||||
|  | 
 | ||||||
|  | ```yaml | ||||||
|  | apiVersion: "acid.zalan.do/v1" | ||||||
|  | kind: postgresql | ||||||
|  | 
 | ||||||
|  | metadata: | ||||||
|  |   name: acid-test-cluster | ||||||
|  | spec: | ||||||
|  |   clone: | ||||||
|  |     uid: "efd12e58-5786-11e8-b5a7-06148230260c" | ||||||
|  |     cluster: "acid-batman" | ||||||
|  |     timestamp: "2017-12-19T12:40:33+01:00" | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | Here `cluster` is a name of a source cluster that is going to be cloned. A new | ||||||
|  | cluster will be cloned from S3, using the latest backup before the | ||||||
|  | `timestamp`. In this case, `uid` field is also mandatory - operator will use it | ||||||
|  | to find a correct key inside an S3 bucket. You can find this field from | ||||||
|  | metadata of a source cluster: | ||||||
|  | 
 | ||||||
|  | ```yaml | ||||||
|  | apiVersion: acid.zalan.do/v1 | ||||||
|  | kind: postgresql | ||||||
|  | metadata: | ||||||
|  |   name: acid-test-cluster | ||||||
|  |   uid: efd12e58-5786-11e8-b5a7-06148230260c | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | Note that timezone required for `timestamp` (offset relative to UTC, see RFC | ||||||
|  | 3339 section 5.6) | ||||||
|  |  | ||||||
|  | @ -48,6 +48,7 @@ spec: | ||||||
|   # with a non-empty timestamp, clone from an S3 bucket using the latest backup before the timestamp |   # with a non-empty timestamp, clone from an S3 bucket using the latest backup before the timestamp | ||||||
|   # with an empty/absent timestamp, clone from an existing alive cluster using pg_basebackup |   # with an empty/absent timestamp, clone from an existing alive cluster using pg_basebackup | ||||||
|   # clone: |   # clone: | ||||||
|  |   #  uid: "efd12e58-5786-11e8-b5a7-06148230260c" | ||||||
|   #  cluster: "acid-batman" |   #  cluster: "acid-batman" | ||||||
|   #  timestamp: "2017-12-19T12:40:33+01:00" # timezone required (offset relative to UTC, see RFC 3339 section 5.6) |   #  timestamp: "2017-12-19T12:40:33+01:00" # timezone required (offset relative to UTC, see RFC 3339 section 5.6) | ||||||
|   maintenanceWindows: |   maintenanceWindows: | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue