fix typos, headings and code alignment in docs
This commit is contained in:
parent
7db4ce67ae
commit
82adf956ee
|
|
@ -40,7 +40,7 @@ There is a browser-friendly version of this documentation at
|
||||||
|
|
||||||
The Postgres Operator made it to the [Google Summer of Code 2019](https://summerofcode.withgoogle.com/)!
|
The Postgres Operator made it to the [Google Summer of Code 2019](https://summerofcode.withgoogle.com/)!
|
||||||
As a brand new mentoring organization, we are now looking for our first mentees.
|
As a brand new mentoring organization, we are now looking for our first mentees.
|
||||||
Check [our ideas](https://github.com/zalando/postgres-operator/blob/master/docs/gsoc-2019/ideas.md#google-summer-of-code-2019)
|
Check [our ideas](docs/gsoc-2019/ideas.md#google-summer-of-code-2019)
|
||||||
and start discussion in [the issue tracker](https://github.com/zalando/postgres-operator/issues).
|
and start discussion in [the issue tracker](https://github.com/zalando/postgres-operator/issues).
|
||||||
And don't forget to spread a word about our GSoC participation to attract even
|
And don't forget to spread a word about our GSoC participation to attract even
|
||||||
more students.
|
more students.
|
||||||
|
|
|
||||||
|
|
@ -16,5 +16,5 @@ maintainers:
|
||||||
- name: kimxogus
|
- name: kimxogus
|
||||||
email: kgyoo8232@gmail.com
|
email: kgyoo8232@gmail.com
|
||||||
sources:
|
sources:
|
||||||
- https://github.com/zalando-incubator/postgres-operator
|
- https://github.com/zalando/postgres-operator
|
||||||
engine: gotpl
|
engine: gotpl
|
||||||
|
|
|
||||||
|
|
@ -12,8 +12,8 @@ the `test` namespace, run the following before deploying the operator's
|
||||||
manifests:
|
manifests:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ kubectl create namespace test
|
kubectl create namespace test
|
||||||
$ kubectl config set-context $(kubectl config current-context) --namespace=test
|
kubectl config set-context $(kubectl config current-context) --namespace=test
|
||||||
```
|
```
|
||||||
|
|
||||||
All subsequent `kubectl` commands will work with the `test` namespace. The
|
All subsequent `kubectl` commands will work with the `test` namespace. The
|
||||||
|
|
@ -24,16 +24,15 @@ needs to be adjusted to the non-default value.
|
||||||
|
|
||||||
### Specify the namespace to watch
|
### Specify the namespace to watch
|
||||||
|
|
||||||
Watching a namespace for an operator means tracking requests to change
|
Watching a namespace for an operator means tracking requests to change Postgres
|
||||||
Postgresql clusters in the namespace such as "increase the number of Postgresql
|
clusters in the namespace such as "increase the number of Postgres replicas to
|
||||||
replicas to 5" and reacting to the requests, in this example by actually
|
5" and reacting to the requests, in this example by actually scaling up.
|
||||||
scaling up.
|
|
||||||
|
|
||||||
By default, the operator watches the namespace it is deployed to. You can
|
By default, the operator watches the namespace it is deployed to. You can
|
||||||
change this by setting the `WATCHED_NAMESPACE` var in the `env` section of the
|
change this by setting the `WATCHED_NAMESPACE` var in the `env` section of the
|
||||||
[operator deployment](../manifests/postgres-operator.yaml) manifest or by
|
[operator deployment](../manifests/postgres-operator.yaml) manifest or by
|
||||||
altering the `watched_namespace` field in the operator
|
altering the `watched_namespace` field in the operator
|
||||||
[ConfigMap](../manifests/configmap.yaml#L6).
|
[ConfigMap](../manifests/configmap.yaml#L79).
|
||||||
In the case both are set, the env var takes the precedence. To make the
|
In the case both are set, the env var takes the precedence. To make the
|
||||||
operator listen to all namespaces, explicitly set the field/env var to "`*`".
|
operator listen to all namespaces, explicitly set the field/env var to "`*`".
|
||||||
|
|
||||||
|
|
@ -80,10 +79,10 @@ to function under access control restrictions. To deploy the operator with this
|
||||||
RBAC policy use:
|
RBAC policy use:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ kubectl create -f manifests/configmap.yaml
|
kubectl create -f manifests/configmap.yaml
|
||||||
$ kubectl create -f manifests/operator-service-account-rbac.yaml
|
kubectl create -f manifests/operator-service-account-rbac.yaml
|
||||||
$ kubectl create -f manifests/postgres-operator.yaml
|
kubectl create -f manifests/postgres-operator.yaml
|
||||||
$ kubectl create -f manifests/minimal-postgres-manifest.yaml
|
kubectl create -f manifests/minimal-postgres-manifest.yaml
|
||||||
```
|
```
|
||||||
|
|
||||||
Note that the service account is named `zalando-postgres-operator`. You may have
|
Note that the service account is named `zalando-postgres-operator`. You may have
|
||||||
|
|
@ -103,10 +102,10 @@ operator's ConfigMap to run Postgres clusters.
|
||||||
|
|
||||||
By default `postgresql` custom resources can only by listed and changed by
|
By default `postgresql` custom resources can only by listed and changed by
|
||||||
cluster admins. To allow read and/or write access to other human users apply
|
cluster admins. To allow read and/or write access to other human users apply
|
||||||
the `ùser-facing-clusterrole` manifest:
|
the `user-facing-clusterrole` manifest:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ kubectl create -f manifests/user-facing-clusterroles.yaml
|
kubectl create -f manifests/user-facing-clusterroles.yaml
|
||||||
```
|
```
|
||||||
|
|
||||||
It creates zalando-postgres-operator:user:view, :edit and :admin clusterroles
|
It creates zalando-postgres-operator:user:view, :edit and :admin clusterroles
|
||||||
|
|
@ -121,7 +120,7 @@ and configure the required toleration in the operator ConfigMap.
|
||||||
As an example you can set following node taint:
|
As an example you can set following node taint:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ kubectl taint nodes <nodeName> postgres=:NoSchedule
|
kubectl taint nodes <nodeName> postgres=:NoSchedule
|
||||||
```
|
```
|
||||||
|
|
||||||
And configure the toleration for the Postgres pods by adding following line
|
And configure the toleration for the Postgres pods by adding following line
|
||||||
|
|
@ -191,7 +190,8 @@ The PDB is only relaxed in two scenarios:
|
||||||
The PDB is still in place having `MinAvailable` set to `0`. If enabled it will
|
The PDB is still in place having `MinAvailable` set to `0`. If enabled it will
|
||||||
be automatically set to `1` on scale up. Disabling PDBs helps avoiding blocking
|
be automatically set to `1` on scale up. Disabling PDBs helps avoiding blocking
|
||||||
Kubernetes upgrades in managed K8s environments at the cost of prolonged DB
|
Kubernetes upgrades in managed K8s environments at the cost of prolonged DB
|
||||||
downtime. See PR #384 for the use case.
|
downtime. See PR [#384](https://github.com/zalando/postgres-operator/pull/384)
|
||||||
|
for the use case.
|
||||||
|
|
||||||
## Add cluster-specific labels
|
## Add cluster-specific labels
|
||||||
|
|
||||||
|
|
@ -294,7 +294,7 @@ instances. By default, both parameters are set to `-1`.
|
||||||
|
|
||||||
## Load balancers and allowed IP ranges
|
## Load balancers and allowed IP ranges
|
||||||
|
|
||||||
For any Postgresql/Spilo cluster, the operator creates two separate K8s
|
For any Postgres/Spilo cluster, the operator creates two separate K8s
|
||||||
services: one for the master pod and one for replica pods. To expose these
|
services: one for the master pod and one for replica pods. To expose these
|
||||||
services to an outer network, one can attach load balancers to them by setting
|
services to an outer network, one can attach load balancers to them by setting
|
||||||
`enableMasterLoadBalancer` and/or `enableReplicaLoadBalancer` to `true` in the
|
`enableMasterLoadBalancer` and/or `enableReplicaLoadBalancer` to `true` in the
|
||||||
|
|
@ -303,7 +303,7 @@ manifest, the operator configmap's settings `enable_master_load_balancer` and
|
||||||
`enable_replica_load_balancer` apply. Note that the operator settings affect
|
`enable_replica_load_balancer` apply. Note that the operator settings affect
|
||||||
all Postgresql services running in all namespaces watched by the operator.
|
all Postgresql services running in all namespaces watched by the operator.
|
||||||
|
|
||||||
To limit the range of IP adresses that can reach a load balancer, specify the
|
To limit the range of IP addresses that can reach a load balancer, specify the
|
||||||
desired ranges in the `allowedSourceRanges` field (applies to both master and
|
desired ranges in the `allowedSourceRanges` field (applies to both master and
|
||||||
replica load balancers). To prevent exposing load balancers to the entire
|
replica load balancers). To prevent exposing load balancers to the entire
|
||||||
Internet, this field is set at cluster creation time to `127.0.0.1/32` unless
|
Internet, this field is set at cluster creation time to `127.0.0.1/32` unless
|
||||||
|
|
@ -393,14 +393,14 @@ of the backup cron job.
|
||||||
`cronjobs` resource from the `batch` API group for the operator service account.
|
`cronjobs` resource from the `batch` API group for the operator service account.
|
||||||
See [example RBAC](../manifests/operator-service-account-rbac.yaml)
|
See [example RBAC](../manifests/operator-service-account-rbac.yaml)
|
||||||
|
|
||||||
## Access to cloud resources from clusters in non cloud environment
|
## Access to cloud resources from clusters in non-cloud environment
|
||||||
|
|
||||||
To access cloud resources like S3 from a cluster in a bare metal setup you can
|
To access cloud resources like S3 from a cluster in a bare metal setup you can
|
||||||
use `additional_secret_mount` and `additional_secret_mount_path` configuration
|
use `additional_secret_mount` and `additional_secret_mount_path` configuration
|
||||||
parameters. With this you can provision cloud credentials to the containers in
|
parameters. With this you can provision cloud credentials to the containers in
|
||||||
the pods of the StatefulSet. This works this way that it mounts a volume from
|
the pods of the StatefulSet. This works this way that it mounts a volume from
|
||||||
the given secret in the pod and this can then accessed in the container over the
|
the given secret in the pod and this can then accessed in the container over the
|
||||||
configured mount path. Via [Custum Pod Environment Variables](#custom-pod-environment-variables)
|
configured mount path. Via [Custom Pod Environment Variables](#custom-pod-environment-variables)
|
||||||
you can then point the different cloud SDK's (AWS, GCP etc.) to this mounted
|
you can then point the different cloud SDK's (AWS, GCP etc.) to this mounted
|
||||||
secret. With this credentials the cloud SDK can then access cloud resources to
|
secret. With this credentials the cloud SDK can then access cloud resources to
|
||||||
upload logs etc.
|
upload logs etc.
|
||||||
|
|
@ -410,4 +410,4 @@ A secret can be pre-provisioned in different ways:
|
||||||
* Generic secret created via `kubectl create secret generic some-cloud-creds --from-file=some-cloud-credentials-file.json`
|
* Generic secret created via `kubectl create secret generic some-cloud-creds --from-file=some-cloud-credentials-file.json`
|
||||||
* Automatically provisioned via a Controller like [kube-aws-iam-controller](https://github.com/mikkeloscar/kube-aws-iam-controller).
|
* Automatically provisioned via a Controller like [kube-aws-iam-controller](https://github.com/mikkeloscar/kube-aws-iam-controller).
|
||||||
This controller would then also rotate the credentials. Please visit the
|
This controller would then also rotate the credentials. Please visit the
|
||||||
documention for more information.
|
documentation for more information.
|
||||||
|
|
|
||||||
|
|
@ -12,17 +12,17 @@ with Go older than 1.7. We recommend installing [the latest one](https://golang.
|
||||||
Go projects expect their source code and all the dependencies to be located
|
Go projects expect their source code and all the dependencies to be located
|
||||||
under the [GOPATH](https://github.com/golang/go/wiki/GOPATH). Normally, one
|
under the [GOPATH](https://github.com/golang/go/wiki/GOPATH). Normally, one
|
||||||
would create a directory for the GOPATH (i.e. ~/go) and place the source code
|
would create a directory for the GOPATH (i.e. ~/go) and place the source code
|
||||||
under the ~/go/src subdirectories.
|
under the ~/go/src sub directories.
|
||||||
|
|
||||||
Given the schema above, the Postgres Operator source code located at
|
Given the schema above, the Postgres Operator source code located at
|
||||||
`github.com/zalando/postgres-operator` should be put at
|
`github.com/zalando/postgres-operator` should be put at
|
||||||
-`~/go/src/github.com/zalando/postgres-operator`.
|
-`~/go/src/github.com/zalando/postgres-operator`.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ export GOPATH=~/go
|
export GOPATH=~/go
|
||||||
$ mkdir -p ${GOPATH}/src/github.com/zalando/
|
mkdir -p ${GOPATH}/src/github.com/zalando/
|
||||||
$ cd ${GOPATH}/src/github.com/zalando/
|
cd ${GOPATH}/src/github.com/zalando/
|
||||||
$ git clone https://github.com/zalando/postgres-operator.git
|
git clone https://github.com/zalando/postgres-operator.git
|
||||||
```
|
```
|
||||||
|
|
||||||
## Building the operator
|
## Building the operator
|
||||||
|
|
@ -30,33 +30,33 @@ Given the schema above, the Postgres Operator source code located at
|
||||||
You need Glide to fetch all dependencies. Install it with:
|
You need Glide to fetch all dependencies. Install it with:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ make tools
|
make tools
|
||||||
```
|
```
|
||||||
|
|
||||||
Next, install dependencies with glide by issuing:
|
Next, install dependencies with glide by issuing:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ make deps
|
make deps
|
||||||
```
|
```
|
||||||
|
|
||||||
This would take a while to complete. You have to redo `make deps` every time
|
This would take a while to complete. You have to redo `make deps` every time
|
||||||
you dependencies list changes, i.e. after adding a new library dependency.
|
you dependencies list changes, i.e. after adding a new library dependency.
|
||||||
|
|
||||||
Build the operator docker image and pushing it to Pier One:
|
Build the operator with the `make docker` command. You may define the TAG
|
||||||
|
variable to assign an explicit tag to your docker image and the IMAGE to set
|
||||||
|
the image name. By default, the tag is computed with
|
||||||
|
`git describe --tags --always --dirty` and the image is
|
||||||
|
`registry.opensource.zalan.do/acid/postgres-operator`
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ make docker push
|
export TAG=$(git describe --tags --always --dirty)
|
||||||
|
make docker
|
||||||
```
|
```
|
||||||
|
|
||||||
You may define the TAG variable to assign an explicit tag to your docker image
|
|
||||||
and the IMAGE to set the image name. By default, the tag is computed with
|
|
||||||
`git describe --tags --always --dirty` and the image is
|
|
||||||
`pierone.stups.zalan.do/acid/postgres-operator`
|
|
||||||
|
|
||||||
Building the operator binary (for testing the out-of-cluster option):
|
Building the operator binary (for testing the out-of-cluster option):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ make
|
make
|
||||||
```
|
```
|
||||||
|
|
||||||
The binary will be placed into the build directory.
|
The binary will be placed into the build directory.
|
||||||
|
|
@ -64,20 +64,18 @@ The binary will be placed into the build directory.
|
||||||
## Deploying self build image
|
## Deploying self build image
|
||||||
|
|
||||||
The fastest way to run and test your docker image locally is to reuse the docker
|
The fastest way to run and test your docker image locally is to reuse the docker
|
||||||
from [minikube]((https://github.com/kubernetes/minikube/releases)) or use the
|
from [minikube](https://github.com/kubernetes/minikube/releases) or use the
|
||||||
`load docker-image` from [kind](https://kind.sigs.k8s.io/). The following steps
|
`load docker-image` from [kind](https://kind.sigs.k8s.io/). The following steps
|
||||||
will get you the docker image built and deployed.
|
will get you the docker image built and deployed.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# minikube
|
# minikube
|
||||||
$ eval $(minikube docker-env)
|
eval $(minikube docker-env)
|
||||||
$ export TAG=$(git describe --tags --always --dirty)
|
make docker
|
||||||
$ make docker
|
|
||||||
|
|
||||||
# kind
|
# kind
|
||||||
$ export TAG=$(git describe --tags --always --dirty)
|
make docker
|
||||||
$ make docker
|
kind load docker-image <image> --name <kind-cluster-name>
|
||||||
$ kind load docker-image <image> --name <kind-cluster-name>
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Then create a new Postgres Operator deployment. You can reuse the provided
|
Then create a new Postgres Operator deployment. You can reuse the provided
|
||||||
|
|
@ -85,12 +83,12 @@ manifest but replace the version and tag. Don't forget to also apply
|
||||||
configuration and RBAC manifests first, e.g.:
|
configuration and RBAC manifests first, e.g.:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ kubectl create -f manifests/configmap.yaml
|
kubectl create -f manifests/configmap.yaml
|
||||||
$ kubectl create -f manifests/operator-service-account-rbac.yaml
|
kubectl create -f manifests/operator-service-account-rbac.yaml
|
||||||
$ sed -e "s/\(image\:.*\:\).*$/\1$TAG/" manifests/postgres-operator.yaml | kubectl create -f -
|
sed -e "s/\(image\:.*\:\).*$/\1$TAG/" manifests/postgres-operator.yaml | kubectl create -f -
|
||||||
|
|
||||||
# check if the operator is coming up
|
# check if the operator is coming up
|
||||||
$ kubectl get pod -l name=postgres-operator
|
kubectl get pod -l name=postgres-operator
|
||||||
```
|
```
|
||||||
|
|
||||||
## Code generation
|
## Code generation
|
||||||
|
|
@ -124,15 +122,17 @@ the developer's laptop (and not in a docker container).
|
||||||
|
|
||||||
There is a web interface in the operator to observe its internal state. The
|
There is a web interface in the operator to observe its internal state. The
|
||||||
operator listens on port 8080. It is possible to expose it to the
|
operator listens on port 8080. It is possible to expose it to the
|
||||||
localhost:8080 by doing:
|
`localhost:8080` by doing:
|
||||||
|
|
||||||
$ kubectl --context minikube port-forward $(kubectl --context minikube get pod -l name=postgres-operator -o jsonpath={.items..metadata.name}) 8080:8080
|
```bash
|
||||||
|
kubectl --context minikube port-forward $(kubectl --context minikube get pod -l name=postgres-operator -o jsonpath={.items..metadata.name}) 8080:8080
|
||||||
|
```
|
||||||
|
|
||||||
The inner 'query' gets the name of the Postgres Operator pod, and the outer
|
The inner query gets the name of the Postgres Operator pod, and the outer one
|
||||||
enables port forwarding. Afterwards, you can access the operator API with:
|
enables port forwarding. Afterwards, you can access the operator API with:
|
||||||
|
|
||||||
```
|
```bash
|
||||||
$ curl --location http://127.0.0.1:8080/$endpoint | jq .
|
curl --location http://127.0.0.1:8080/$endpoint | jq .
|
||||||
```
|
```
|
||||||
|
|
||||||
The available endpoints are listed below. Note that the worker ID is an integer
|
The available endpoints are listed below. Note that the worker ID is an integer
|
||||||
|
|
@ -165,15 +165,15 @@ The operator also supports pprof endpoints listed at the
|
||||||
* /debug/pprof/trace
|
* /debug/pprof/trace
|
||||||
|
|
||||||
It's possible to attach a debugger to troubleshoot postgres-operator inside a
|
It's possible to attach a debugger to troubleshoot postgres-operator inside a
|
||||||
docker container. It's possible with gdb and
|
docker container. It's possible with [gdb](https://www.gnu.org/software/gdb/)
|
||||||
[delve](https://github.com/derekparker/delve). Since the latter one is a
|
and [delve](https://github.com/derekparker/delve). Since the latter one is a
|
||||||
specialized debugger for golang, we will use it as an example. To use it you
|
specialized debugger for golang, we will use it as an example. To use it you
|
||||||
need:
|
need:
|
||||||
|
|
||||||
* Install delve locally
|
* Install delve locally
|
||||||
|
|
||||||
```
|
```bash
|
||||||
$ go get -u github.com/derekparker/delve/cmd/dlv
|
go get -u github.com/derekparker/delve/cmd/dlv
|
||||||
```
|
```
|
||||||
|
|
||||||
* Add following dependencies to the `Dockerfile`
|
* Add following dependencies to the `Dockerfile`
|
||||||
|
|
@ -184,7 +184,8 @@ RUN go get github.com/derekparker/delve/cmd/dlv
|
||||||
```
|
```
|
||||||
|
|
||||||
* Update the `Makefile` to build the project with debugging symbols. For that
|
* Update the `Makefile` to build the project with debugging symbols. For that
|
||||||
you need to add `gcflags` to a build target for corresponding OS (e.g. linux)
|
you need to add `gcflags` to a build target for corresponding OS (e.g.
|
||||||
|
GNU/Linux)
|
||||||
|
|
||||||
```
|
```
|
||||||
-gcflags "-N -l"
|
-gcflags "-N -l"
|
||||||
|
|
@ -199,50 +200,50 @@ CMD ["/root/go/bin/dlv", "--listen=:DLV_PORT", "--headless=true", "--api-version
|
||||||
|
|
||||||
* Forward the listening port
|
* Forward the listening port
|
||||||
|
|
||||||
```
|
```bash
|
||||||
$ kubectl port-forward POD_NAME DLV_PORT:DLV_PORT
|
kubectl port-forward POD_NAME DLV_PORT:DLV_PORT
|
||||||
```
|
```
|
||||||
|
|
||||||
* Attach to it
|
* Attach to it
|
||||||
|
|
||||||
```
|
```bash
|
||||||
$ dlv connect 127.0.0.1:DLV_PORT
|
dlv connect 127.0.0.1:DLV_PORT
|
||||||
```
|
```
|
||||||
|
|
||||||
## Unit tests
|
## Unit tests
|
||||||
|
|
||||||
To run all unit tests, you can simply do:
|
To run all unit tests, you can simply do:
|
||||||
|
|
||||||
```
|
```bash
|
||||||
$ go test ./...
|
go test ./...
|
||||||
```
|
```
|
||||||
|
|
||||||
For go 1.9 `vendor` directory would be excluded automatically. For previous
|
For go 1.9 `vendor` directory would be excluded automatically. For previous
|
||||||
versions you can exclude it manually:
|
versions you can exclude it manually:
|
||||||
|
|
||||||
```
|
```bash
|
||||||
$ go test $(glide novendor)
|
go test $(glide novendor)
|
||||||
```
|
```
|
||||||
|
|
||||||
In case if you need to debug your unit test, it's possible to use delve:
|
In case if you need to debug your unit test, it's possible to use delve:
|
||||||
|
|
||||||
```
|
```bash
|
||||||
$ dlv test ./pkg/util/retryutil/
|
dlv test ./pkg/util/retryutil/
|
||||||
Type 'help' for list of commands.
|
Type 'help' for list of commands.
|
||||||
(dlv) c
|
(dlv) c
|
||||||
PASS
|
PASS
|
||||||
```
|
```
|
||||||
|
|
||||||
To test the multinamespace setup, you can use
|
To test the multi-namespace setup, you can use
|
||||||
|
|
||||||
```
|
```bash
|
||||||
$ ./run_operator_locally.sh --rebuild-operator
|
./run_operator_locally.sh --rebuild-operator
|
||||||
```
|
```
|
||||||
It will automatically create an `acid-minimal-cluster` in the namespace `test`.
|
It will automatically create an `acid-minimal-cluster` in the namespace `test`.
|
||||||
Then you can for example check the Patroni logs:
|
Then you can for example check the Patroni logs:
|
||||||
|
|
||||||
```
|
```bash
|
||||||
$ kubectl logs acid-minimal-cluster-0
|
kubectl logs acid-minimal-cluster-0
|
||||||
```
|
```
|
||||||
|
|
||||||
## End-to-end tests
|
## End-to-end tests
|
||||||
|
|
@ -259,11 +260,11 @@ configuration files. The kind cluster is deleted if tests complete successfully.
|
||||||
End-to-end tests are executed automatically during builds:
|
End-to-end tests are executed automatically during builds:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# invoke them from the project's top directory
|
# invoke them from the project's top directory
|
||||||
$ make e2e-run
|
make e2e-run
|
||||||
|
|
||||||
# install kind and build test image before first run
|
# install kind and build test image before first run
|
||||||
$ make e2e-tools e2e-build
|
make e2e-tools e2e-build
|
||||||
```
|
```
|
||||||
|
|
||||||
End-to-end tests are written in Python and use `flake8` for code quality.
|
End-to-end tests are written in Python and use `flake8` for code quality.
|
||||||
|
|
@ -287,10 +288,7 @@ Note: If one option is defined in the operator configuration and in the cluster
|
||||||
[manifest](../manifests/complete-postgres-manifest.yaml), the latter takes
|
[manifest](../manifests/complete-postgres-manifest.yaml), the latter takes
|
||||||
precedence.
|
precedence.
|
||||||
|
|
||||||
So, first define the parameters in:
|
### Go code
|
||||||
* the [ConfigMap](../manifests/configmap.yaml) manifest
|
|
||||||
* the CR's [default configuration](../manifests/postgresql-operator-default-configuration.yaml)
|
|
||||||
* the Helm chart [values](../charts/postgres-operator/values.yaml)
|
|
||||||
|
|
||||||
Update the following Go files that obtain the configuration parameter from the
|
Update the following Go files that obtain the configuration parameter from the
|
||||||
manifest files:
|
manifest files:
|
||||||
|
|
@ -298,12 +296,30 @@ manifest files:
|
||||||
* [operator_config.go](../pkg/controller/operator_config.go)
|
* [operator_config.go](../pkg/controller/operator_config.go)
|
||||||
* [config.go](../pkg/util/config/config.go)
|
* [config.go](../pkg/util/config/config.go)
|
||||||
|
|
||||||
|
Postgres manifest parameters are defined in the [api package](../pkg/apis/acid.zalan.do/v1/postgresql_type.go).
|
||||||
The operator behavior has to be implemented at least in [k8sres.go](../pkg/cluster/k8sres.go).
|
The operator behavior has to be implemented at least in [k8sres.go](../pkg/cluster/k8sres.go).
|
||||||
Please, reflect your changes in tests, for example in:
|
Please, reflect your changes in tests, for example in:
|
||||||
* [config_test.go](../pkg/util/config/config_test.go)
|
* [config_test.go](../pkg/util/config/config_test.go)
|
||||||
* [k8sres_test.go](../pkg/cluster/k8sres_test.go)
|
* [k8sres_test.go](../pkg/cluster/k8sres_test.go)
|
||||||
* [util_test.go](../pkg/apis/acid.zalan.do/v1/util_test.go)
|
* [util_test.go](../pkg/apis/acid.zalan.do/v1/util_test.go)
|
||||||
|
|
||||||
Finally, document the new configuration option(s) for the operator in its
|
### Updating manifest files
|
||||||
[reference](reference/operator_parameters.md) document and explain the feature
|
|
||||||
in the [administrator docs](administrator.md).
|
For the CRD-based configuration, please update the following files:
|
||||||
|
* the default [OperatorConfiguration](../manifests/postgresql-operator-default-configuration.yaml)
|
||||||
|
* the Helm chart's [values-crd file](../charts/postgres-operator/values.yaml)
|
||||||
|
|
||||||
|
Reflect the changes in the ConfigMap configuration as well (note that numeric
|
||||||
|
and boolean parameters have to use double quotes here):
|
||||||
|
* [ConfigMap](../manifests/configmap.yaml) manifest
|
||||||
|
* the Helm chart's default [values file](../charts/postgres-operator/values.yaml)
|
||||||
|
|
||||||
|
### Updating documentation
|
||||||
|
|
||||||
|
Finally, add a section for each new configuration option and/or cluster manifest
|
||||||
|
parameter in the reference documents:
|
||||||
|
* [config reference](reference/operator_parameters.md)
|
||||||
|
* [manifest reference](reference/cluster_manifest.md)
|
||||||
|
|
||||||
|
It also helps users to explain new features with examples in the
|
||||||
|
[administrator docs](administrator.md).
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# Introduction
|
# Concepts
|
||||||
|
|
||||||
The Postgres [operator](https://coreos.com/blog/introducing-operators.html)
|
The Postgres [operator](https://coreos.com/blog/introducing-operators.html)
|
||||||
manages PostgreSQL clusters on Kubernetes (K8s):
|
manages PostgreSQL clusters on Kubernetes (K8s):
|
||||||
|
|
@ -8,10 +8,10 @@ manages PostgreSQL clusters on Kubernetes (K8s):
|
||||||
user submits a new manifest, the operator fetches that manifest and spawns a
|
user submits a new manifest, the operator fetches that manifest and spawns a
|
||||||
new Postgres cluster along with all necessary entities such as K8s
|
new Postgres cluster along with all necessary entities such as K8s
|
||||||
StatefulSets and Postgres roles. See this
|
StatefulSets and Postgres roles. See this
|
||||||
[Postgres cluster manifest](https://github.com/zalando/postgres-operator/blob/master/manifests/complete-postgres-manifest.yaml)
|
[Postgres cluster manifest](../manifests/complete-postgres-manifest.yaml)
|
||||||
for settings that a manifest may contain.
|
for settings that a manifest may contain.
|
||||||
|
|
||||||
2. The operator also watches updates to [its own configuration](https://github.com/zalando/postgres-operator/blob/master/manifests/configmap.yaml)
|
2. The operator also watches updates to [its own configuration](../manifests/configmap.yaml)
|
||||||
and alters running Postgres clusters if necessary. For instance, if a pod
|
and alters running Postgres clusters if necessary. For instance, if a pod
|
||||||
docker image is changed, the operator carries out the rolling update. That
|
docker image is changed, the operator carries out the rolling update. That
|
||||||
is, the operator re-spawns one-by-one pods of each StatefulSet it manages
|
is, the operator re-spawns one-by-one pods of each StatefulSet it manages
|
||||||
|
|
@ -24,9 +24,7 @@ manages PostgreSQL clusters on Kubernetes (K8s):
|
||||||
manifests and its own config. This enables easy integration in automated
|
manifests and its own config. This enables easy integration in automated
|
||||||
deploy pipelines with no access to K8s directly.
|
deploy pipelines with no access to K8s directly.
|
||||||
|
|
||||||
## Concepts
|
## Scope
|
||||||
|
|
||||||
### Scope
|
|
||||||
|
|
||||||
The scope of the Postgres Operator is on provisioning, modifying configuration
|
The scope of the Postgres Operator is on provisioning, modifying configuration
|
||||||
and cleaning up Postgres clusters that use Patroni, basically to make it easy
|
and cleaning up Postgres clusters that use Patroni, basically to make it easy
|
||||||
|
|
@ -56,8 +54,7 @@ cluster pod, so let's zoom in:
|
||||||
These two diagrams should help you to understand the basics of what kind of
|
These two diagrams should help you to understand the basics of what kind of
|
||||||
functionality the operator provides.
|
functionality the operator provides.
|
||||||
|
|
||||||
|
## Status
|
||||||
### Status
|
|
||||||
|
|
||||||
This project is currently in active development. It is however already
|
This project is currently in active development. It is however already
|
||||||
[used internally by Zalando](https://jobs.zalando.com/tech/blog/postgresql-in-a-time-of-kubernetes/)
|
[used internally by Zalando](https://jobs.zalando.com/tech/blog/postgresql-in-a-time-of-kubernetes/)
|
||||||
|
|
@ -79,4 +76,4 @@ Please, report any issues discovered to https://github.com/zalando/postgres-oper
|
||||||
|
|
||||||
4. "Blue elephant on-demand: Postgres + Kubernetes" talk by Oleksii Kliukin and Jan Mussler, FOSDEM 2018: [video](https://fosdem.org/2018/schedule/event/blue_elephant_on_demand_postgres_kubernetes/) | [slides (pdf)](https://www.postgresql.eu/events/fosdem2018/sessions/session/1735/slides/59/FOSDEM%202018_%20Blue_Elephant_On_Demand.pdf)
|
4. "Blue elephant on-demand: Postgres + Kubernetes" talk by Oleksii Kliukin and Jan Mussler, FOSDEM 2018: [video](https://fosdem.org/2018/schedule/event/blue_elephant_on_demand_postgres_kubernetes/) | [slides (pdf)](https://www.postgresql.eu/events/fosdem2018/sessions/session/1735/slides/59/FOSDEM%202018_%20Blue_Elephant_On_Demand.pdf)
|
||||||
|
|
||||||
3. "Kube-Native Postgres" talk by Josh Berkus, KubeCon 2017: [video](https://www.youtube.com/watch?v=Zn1vd7sQ_bc)
|
5. "Kube-Native Postgres" talk by Josh Berkus, KubeCon 2017: [video](https://www.youtube.com/watch?v=Zn1vd7sQ_bc)
|
||||||
|
|
|
||||||
|
|
@ -15,21 +15,19 @@ For local tests we recommend to use one of the following solutions:
|
||||||
|
|
||||||
To interact with the K8s infrastructure install it's CLI runtime [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-binary-via-curl).
|
To interact with the K8s infrastructure install it's CLI runtime [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-binary-via-curl).
|
||||||
|
|
||||||
This quickstart assumes that you haved started minikube or created a local kind
|
This quickstart assumes that you have started minikube or created a local kind
|
||||||
cluster. Note that you can also use built-in K8s support in the Docker
|
cluster. Note that you can also use built-in K8s support in the Docker Desktop
|
||||||
Desktop for Mac to follow the steps of this tutorial. You would have to replace
|
for Mac to follow the steps of this tutorial. You would have to replace
|
||||||
`minikube start` and `minikube delete` with your launch actions for the Docker
|
`minikube start` and `minikube delete` with your launch actions for the Docker
|
||||||
built-in K8s support.
|
built-in K8s support.
|
||||||
|
|
||||||
|
|
||||||
## Configuration Options
|
## Configuration Options
|
||||||
|
|
||||||
If you want to configure the Postgres Operator it must happen before deploying a
|
If you want to configure the Postgres Operator it must happen before deploying
|
||||||
Postgres cluster. This can happen in two ways: Via a ConfigMap or a custom
|
a Postgres cluster. This can work in two ways: Via a ConfigMap or a custom
|
||||||
`OperatorConfiguration` object. More details on configuration can be found
|
`OperatorConfiguration` object. More details on configuration can be found
|
||||||
[here](reference/operator_parameters.md).
|
[here](reference/operator_parameters.md).
|
||||||
|
|
||||||
|
|
||||||
## Deployment options
|
## Deployment options
|
||||||
|
|
||||||
The Postgres Operator can be deployed in different ways:
|
The Postgres Operator can be deployed in different ways:
|
||||||
|
|
@ -55,9 +53,14 @@ kubectl create -f manifests/operator-service-account-rbac.yaml # identity and p
|
||||||
kubectl create -f manifests/postgres-operator.yaml # deployment
|
kubectl create -f manifests/postgres-operator.yaml # deployment
|
||||||
```
|
```
|
||||||
|
|
||||||
For convenience, we have automated starting the operator and submitting the
|
When using kubectl 1.14 or newer the mentioned manifests could be also be
|
||||||
`acid-minimal-cluster`. From inside the cloned repository execute the
|
bundled in a [Kustomization](https://github.com/kubernetes-sigs/kustomize) so
|
||||||
`run_operator_locally` shell script.
|
that one command is enough.
|
||||||
|
|
||||||
|
For convenience, we have automated starting the operator with minikube and
|
||||||
|
submitting the [`acid-minimal-cluster`](../manifests/minimal-postgres-manifest).
|
||||||
|
From inside the cloned repository execute the `run_operator_locally` shell
|
||||||
|
script.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
./run_operator_locally.sh
|
./run_operator_locally.sh
|
||||||
|
|
@ -96,7 +99,6 @@ kubectl create -f https://operatorhub.io/install/postgres-operator.yaml
|
||||||
This installs the operator in the `operators` namespace. More information can be
|
This installs the operator in the `operators` namespace. More information can be
|
||||||
found on [operatorhub.io](https://operatorhub.io/operator/postgres-operator).
|
found on [operatorhub.io](https://operatorhub.io/operator/postgres-operator).
|
||||||
|
|
||||||
|
|
||||||
## Create a Postgres cluster
|
## Create a Postgres cluster
|
||||||
|
|
||||||
Starting the operator may take a few seconds. Check if the operator pod is
|
Starting the operator may take a few seconds. Check if the operator pod is
|
||||||
|
|
@ -134,7 +136,6 @@ kubectl get pods -l application=spilo -L spilo-role
|
||||||
kubectl get svc -l application=spilo -L spilo-role
|
kubectl get svc -l application=spilo -L spilo-role
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## Connect to the Postgres cluster via psql
|
## Connect to the Postgres cluster via psql
|
||||||
|
|
||||||
You can create a port-forward on a database pod to connect to Postgres. See the
|
You can create a port-forward on a database pod to connect to Postgres. See the
|
||||||
|
|
@ -155,7 +156,6 @@ export PGPASSWORD=$(kubectl get secret postgres.acid-minimal-cluster.credentials
|
||||||
psql -U postgres
|
psql -U postgres
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## Delete a Postgres cluster
|
## Delete a Postgres cluster
|
||||||
|
|
||||||
To delete a Postgres cluster simply delete the `postgresql` custom resource.
|
To delete a Postgres cluster simply delete the `postgresql` custom resource.
|
||||||
|
|
|
||||||
|
|
@ -4,9 +4,9 @@ Individual Postgres clusters are described by the Kubernetes *cluster manifest*
|
||||||
that has the structure defined by the `postgresql` CRD (custom resource
|
that has the structure defined by the `postgresql` CRD (custom resource
|
||||||
definition). The following section describes the structure of the manifest and
|
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
|
the purpose of individual keys. You can take a look at the examples of the
|
||||||
[minimal](https://github.com/zalando/postgres-operator/blob/master/manifests/minimal-postgres-manifest.yaml)
|
[minimal](../manifests/minimal-postgres-manifest.yaml)
|
||||||
and the
|
and the
|
||||||
[complete](https://github.com/zalando/postgres-operator/blob/master/manifests/complete-postgres-manifest.yaml)
|
[complete](../manifests/complete-postgres-manifest.yaml)
|
||||||
cluster manifests.
|
cluster manifests.
|
||||||
|
|
||||||
When Kubernetes resources, such as memory, CPU or volumes, are configured,
|
When Kubernetes resources, such as memory, CPU or volumes, are configured,
|
||||||
|
|
|
||||||
|
|
@ -10,12 +10,12 @@ configuration.
|
||||||
maps. String values containing ':' should be enclosed in quotes. The
|
maps. String values containing ':' should be enclosed in quotes. The
|
||||||
configuration is flat, parameter group names below are not reflected in the
|
configuration is flat, parameter group names below are not reflected in the
|
||||||
configuration structure. There is an
|
configuration structure. There is an
|
||||||
[example](https://github.com/zalando/postgres-operator/blob/master/manifests/configmap.yaml)
|
[example](../manifests/configmap.yaml)
|
||||||
|
|
||||||
* CRD-based configuration. The configuration is stored in a custom YAML
|
* CRD-based configuration. The configuration is stored in a custom YAML
|
||||||
manifest. The manifest is an instance of the custom resource definition (CRD)
|
manifest. The manifest is an instance of the custom resource definition (CRD)
|
||||||
called `OperatorConfiguration`. The operator registers this CRD during the
|
called `OperatorConfiguration`. The operator registers this CRD during the
|
||||||
start and uses it for configuration if the [operator deployment manifest ](https://github.com/zalando/postgres-operator/blob/master/manifests/postgres-operator.yaml#L21)
|
start and uses it for configuration if the [operator deployment manifest](../manifests/postgres-operator.yaml#L36)
|
||||||
sets the `POSTGRES_OPERATOR_CONFIGURATION_OBJECT` env variable to a non-empty
|
sets the `POSTGRES_OPERATOR_CONFIGURATION_OBJECT` env variable to a non-empty
|
||||||
value. The variable should point to the `postgresql-operator-configuration`
|
value. The variable should point to the `postgresql-operator-configuration`
|
||||||
object in the operator's namespace.
|
object in the operator's namespace.
|
||||||
|
|
@ -24,7 +24,7 @@ configuration.
|
||||||
simply represented in the usual YAML way. There are no default values built-in
|
simply represented in the usual YAML way. There are no default values built-in
|
||||||
in the operator, each parameter that is not supplied in the configuration
|
in the operator, each parameter that is not supplied in the configuration
|
||||||
receives an empty value. In order to create your own configuration just copy
|
receives an empty value. In order to create your own configuration just copy
|
||||||
the [default one](https://github.com/zalando/postgres-operator/blob/master/manifests/postgresql-operator-default-configuration.yaml)
|
the [default one](../manifests/postgresql-operator-default-configuration.yaml)
|
||||||
and change it.
|
and change it.
|
||||||
|
|
||||||
To test the CRD-based configuration locally, use the following
|
To test the CRD-based configuration locally, use the following
|
||||||
|
|
@ -58,11 +58,11 @@ parameters, those parameters have no effect and are replaced by the
|
||||||
`CRD_READY_WAIT_INTERVAL` and `CRD_READY_WAIT_TIMEOUT` environment variables.
|
`CRD_READY_WAIT_INTERVAL` and `CRD_READY_WAIT_TIMEOUT` environment variables.
|
||||||
They will be deprecated and removed in the future.
|
They will be deprecated and removed in the future.
|
||||||
|
|
||||||
For the configmap operator configuration, the [default parameter values](https://github.com/zalando-incubator/postgres-operator/blob/master/pkg/util/config/config.go#L14)
|
For the configmap configuration, the [default parameter values](../pkg/util/config/config.go#L14)
|
||||||
mentioned here are likely to be overwritten in your local operator installation
|
mentioned here are likely to be overwritten in your local operator installation
|
||||||
via your local version of the operator configmap. In the case you use the
|
via your local version of the operator configmap. In the case you use the
|
||||||
operator CRD, all the CRD defaults are provided in the
|
operator CRD, all the CRD defaults are provided in the
|
||||||
[operator's default configuration manifest](https://github.com/zalando-incubator/postgres-operator/blob/master/manifests/postgresql-operator-default-configuration.yaml)
|
[operator's default configuration manifest](../manifests/postgresql-operator-default-configuration.yaml)
|
||||||
|
|
||||||
Variable names are underscore-separated words.
|
Variable names are underscore-separated words.
|
||||||
|
|
||||||
|
|
@ -122,7 +122,7 @@ Those are top-level keys, containing both leaf keys and groups.
|
||||||
containers with high memory limits due to the lack of memory on Kubernetes
|
containers with high memory limits due to the lack of memory on Kubernetes
|
||||||
cluster nodes. This affects all containers created by the operator (Postgres,
|
cluster nodes. This affects all containers created by the operator (Postgres,
|
||||||
Scalyr sidecar, and other sidecars); to set resources for the operator's own
|
Scalyr sidecar, and other sidecars); to set resources for the operator's own
|
||||||
container, change the [operator deployment manually](https://github.com/zalando/postgres-operator/blob/master/manifests/postgres-operator.yaml#L13).
|
container, change the [operator deployment manually](../manifests/postgres-operator.yaml#L20).
|
||||||
The default is `false`.
|
The default is `false`.
|
||||||
|
|
||||||
## Postgres users
|
## Postgres users
|
||||||
|
|
|
||||||
40
docs/user.md
40
docs/user.md
|
|
@ -5,7 +5,7 @@ Learn how to work with the Postgres Operator in a Kubernetes (K8s) environment.
|
||||||
## Create a manifest for a new PostgreSQL cluster
|
## Create a manifest for a new PostgreSQL cluster
|
||||||
|
|
||||||
Make sure you have [set up](quickstart.md) the operator. Then you can create a
|
Make sure you have [set up](quickstart.md) the operator. Then you can create a
|
||||||
new Postgres cluster by applying manifest like this [minimal example](https://github.com/zalando/postgres-operator/blob/master/manifests/minimal-postgres-manifest.yaml):
|
new Postgres cluster by applying manifest like this [minimal example](../manifests/minimal-postgres-manifest.yaml):
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
apiVersion: "acid.zalan.do/v1"
|
apiVersion: "acid.zalan.do/v1"
|
||||||
|
|
@ -37,13 +37,13 @@ If you have clone the Postgres Operator [repository](https://github.com/zalando/
|
||||||
you can find this example also in the manifests folder:
|
you can find this example also in the manifests folder:
|
||||||
|
|
||||||
```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
|
||||||
|
|
@ -65,11 +65,11 @@ Open another CLI and connect to the database. Use the generated secret of the
|
||||||
in Minikube:
|
in Minikube:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ 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 -p 6432
|
psql -U postgres -p 6432
|
||||||
```
|
```
|
||||||
|
|
||||||
# Defining database roles in the operator
|
## Defining database roles in the operator
|
||||||
|
|
||||||
Postgres Operator allows defining roles to be created in the resulting database
|
Postgres Operator allows defining roles to be created in the resulting database
|
||||||
cluster. It covers three use-cases:
|
cluster. It covers three use-cases:
|
||||||
|
|
@ -84,10 +84,10 @@ owning the database cluster.
|
||||||
|
|
||||||
In the next sections, we will cover those use cases in more details.
|
In the next sections, we will cover those use cases in more details.
|
||||||
|
|
||||||
## Manifest roles
|
### Manifest roles
|
||||||
|
|
||||||
Manifest roles are defined directly in the cluster manifest. See
|
Manifest roles are defined directly in the cluster manifest. See
|
||||||
[minimal postgres manifest](https://github.com/zalando/postgres-operator/blob/master/manifests/minimal-postgres-manifest.yaml)
|
[minimal postgres manifest](../manifests/minimal-postgres-manifest.yaml)
|
||||||
for an example of `zalando` role, defined with `superuser` and `createdb` flags.
|
for an example of `zalando` role, defined with `superuser` and `createdb` flags.
|
||||||
|
|
||||||
Manifest roles are defined as a dictionary, with a role name as a key and a
|
Manifest roles are defined as a dictionary, with a role name as a key and a
|
||||||
|
|
@ -113,7 +113,7 @@ from the secret, without ever sharing it outside of the cluster.
|
||||||
At the moment it is not possible to define membership of the manifest role in
|
At the moment it is not possible to define membership of the manifest role in
|
||||||
other roles.
|
other roles.
|
||||||
|
|
||||||
## Infrastructure roles
|
### Infrastructure roles
|
||||||
|
|
||||||
An infrastructure role is a role that should be present on every PostgreSQL
|
An infrastructure role is a role that should be present on every PostgreSQL
|
||||||
cluster managed by the operator. An example of such a role is a monitoring
|
cluster managed by the operator. An example of such a role is a monitoring
|
||||||
|
|
@ -122,7 +122,7 @@ user. There are two ways to define them:
|
||||||
* With the infrastructure roles secret only
|
* With the infrastructure roles secret only
|
||||||
* With both the the secret and the infrastructure role ConfigMap.
|
* With both the the secret and the infrastructure role ConfigMap.
|
||||||
|
|
||||||
### Infrastructure roles secret
|
#### Infrastructure roles secret
|
||||||
|
|
||||||
The infrastructure roles secret is specified by the `infrastructure_roles_secret_name`
|
The infrastructure roles secret is specified by the `infrastructure_roles_secret_name`
|
||||||
parameter. The role definition looks like this (values are base64 encoded):
|
parameter. The role definition looks like this (values are base64 encoded):
|
||||||
|
|
@ -142,7 +142,7 @@ Note that with definitions that solely use the infrastructure roles secret
|
||||||
there is no way to specify role options (like superuser or nologin) or role
|
there is no way to specify role options (like superuser or nologin) or role
|
||||||
memberships. This is where the ConfigMap comes into play.
|
memberships. This is where the ConfigMap comes into play.
|
||||||
|
|
||||||
### Secret plus ConfigMap
|
#### Secret plus ConfigMap
|
||||||
|
|
||||||
A [ConfigMap](https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/)
|
A [ConfigMap](https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/)
|
||||||
allows for defining more details regarding the infrastructure roles. Therefore,
|
allows for defining more details regarding the infrastructure roles. Therefore,
|
||||||
|
|
@ -178,8 +178,9 @@ Since an infrastructure role is created uniformly on all clusters managed by
|
||||||
the operator, it makes no sense to define it without the password. Such
|
the operator, it makes no sense to define it without the password. Such
|
||||||
definitions will be ignored with a prior warning.
|
definitions will be ignored with a prior warning.
|
||||||
|
|
||||||
See [infrastructure roles secret](https://github.com/zalando/postgres-operator/blob/master/manifests/infrastructure-roles.yaml)
|
See [infrastructure roles secret](../manifests/infrastructure-roles.yaml)
|
||||||
and [infrastructure roles configmap](https://github.com/zalando/postgres-operator/blob/master/manifests/infrastructure-roles-configmap.yaml) for the examples.
|
and [infrastructure roles configmap](../manifests/infrastructure-roles-configmap.yaml)
|
||||||
|
for the examples.
|
||||||
|
|
||||||
## Use taints and tolerations for dedicated PostgreSQL nodes
|
## Use taints and tolerations for dedicated PostgreSQL nodes
|
||||||
|
|
||||||
|
|
@ -206,7 +207,6 @@ 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:
|
section in the spec. There are two options here:
|
||||||
|
|
||||||
* Clone directly from a source cluster using `pg_basebackup`
|
* Clone directly from a source cluster using `pg_basebackup`
|
||||||
|
|
||||||
* Clone from an S3 bucket
|
* Clone from an S3 bucket
|
||||||
|
|
||||||
### Clone directly
|
### Clone directly
|
||||||
|
|
@ -351,7 +351,6 @@ variables are always passed to sidecars:
|
||||||
The PostgreSQL volume is shared with sidecars and is mounted at
|
The PostgreSQL volume is shared with sidecars and is mounted at
|
||||||
`/home/postgres/pgdata`.
|
`/home/postgres/pgdata`.
|
||||||
|
|
||||||
|
|
||||||
## InitContainers Support
|
## InitContainers Support
|
||||||
|
|
||||||
Each cluster can specify arbitrary init containers to run. These containers can
|
Each cluster can specify arbitrary init containers to run. These containers can
|
||||||
|
|
@ -376,7 +375,6 @@ spec:
|
||||||
|
|
||||||
`initContainers` accepts full `v1.Container` definition.
|
`initContainers` accepts full `v1.Container` definition.
|
||||||
|
|
||||||
|
|
||||||
## Increase volume size
|
## Increase volume size
|
||||||
|
|
||||||
PostgreSQL operator supports statefulset volume resize if you're using the
|
PostgreSQL operator supports statefulset volume resize if you're using the
|
||||||
|
|
@ -414,13 +412,15 @@ size of volumes that correspond to the previously running pods is not changed.
|
||||||
|
|
||||||
## Logical backups
|
## Logical backups
|
||||||
|
|
||||||
If you add
|
You can enable logical backups from the cluster manifest by adding the following
|
||||||
|
parameter in the spec section:
|
||||||
|
|
||||||
```
|
```
|
||||||
enableLogicalBackup: true
|
enableLogicalBackup: true
|
||||||
```
|
```
|
||||||
to the cluster manifest, the operator will create and sync a k8s cron job to do
|
|
||||||
periodic logical backups of this particular Postgres cluster. Due to the
|
The operator will create and sync a K8s cron job to do periodic logical backups
|
||||||
[limitation of K8s cron jobs](https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/#cron-job-limitations)
|
of this particular Postgres cluster. Due to the [limitation of K8s cron jobs](https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/#cron-job-limitations)
|
||||||
it is highly advisable to set up additional monitoring for this feature; such
|
it is highly advisable to set up additional monitoring for this feature; such
|
||||||
monitoring is outside of the scope of operator responsibilities. See
|
monitoring is outside of the scope of operator responsibilities. See
|
||||||
[configuration reference](reference/cluster_manifest.md) and
|
[configuration reference](reference/cluster_manifest.md) and
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue