feat(charts):完成第一版helm charts

This commit is contained in:
Yu Sun
2022-10-03 19:40:37 +08:00
parent 8b878b603a
commit fbe6bda621
14 changed files with 925 additions and 0 deletions

134
charts/admin-guide.md Normal file
View File

@@ -0,0 +1,134 @@
<!---
This file and its contents are licensed under the Apache License 2.0.
Please see the included NOTICE for copyright information and LICENSE for a copy of the license.
-->
# TimescaleDB Single Administrator Guide
##### Table of Contents
- [Configuration](#configuration)
- [Backups](#backups)
- [Cleanup](#cleanup)
- [Troubleshooting](#troubleshooting)
## Configuration
The following table lists the configurable parameters of the TimescaleDB Helm chart and their default values.
| Parameter | Description | Default |
|-----------------------------------|---------------------------------------------|-----------------------------------------------------|
| `nameOverride` | Override the name of the chart | `timescaledb` |
| `fullnameOverride` | Override the fullname of the chart | `nil` |
| `replicaCount` | Amount of pods to spawn | `3` |
| `image.repository` | The image to pull | `timescale/timescaledb-ha` |
| `image.tag` | The version of the image to pull | `pg12.5-ts2.0.0-p0`
| `image.pullPolicy` | The pull policy | `IfNotPresent` |
| `credentials.accessNode.superuser`| Password of the superuser for the Access Node | `tea` |
| `credentials.dataNode.superuser` | Password of the superuser for the Data Nodes | `coffee` |
| `env` | Extra custom environment variables, expressed as [EnvVar](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.16/#envvarsource-v1-core) | `PGDATA` and some language settings |
| `resources` | Any resources you wish to assign to the pod | `{}` |
| `nodeSelector` | Node label to use for scheduling | `{}` |
| `tolerations` | List of node taints to tolerate | `[]` |
| `affinityTemplate` | A template string to use to generate the affinity settings | Anti-affinity preferred on hostname |
| `affinity` | Affinity settings. Overrides `affinityTemplate` if set. | `{}` |
| `postgresql.databases` | List of databases to automatically create a multinode setup for | `["postgres", "example"]` |
| `postgresql.parameters` | [PostgreSQL parameters](https://www.postgresql.org/docs/current/config-setting.html#CONFIG-SETTING-CONFIGURATION-FILE)) | Some required and preferred settings |
| `schedulerName` | Alternate scheduler name | `nil` |
| `persistentVolume.accessModes` | Persistent Volume access modes | `[ReadWriteOnce]` |
| `persistentVolume.annotations` | Annotations for Persistent Volume Claim` | `{}` |
| `persistentVolume.mountPath` | Persistent Volume mount root path | `/var/lib/postgresql` |
| `persistentVolume.size` | Persistent Volume size | `5Gi` |
| `persistentVolume.storageClass` | Persistent Volume Storage Class | `volume.alpha.kubernetes.io/storage-class: default` |
| `persistentVolume.subPath` | Subdirectory of Persistent Volume to mount | `""` |
| `rbac.create` | Create required role and rolebindings | `true` |
| `serviceAccount.create` | If true, create a new service account | `true` |
| `serviceAccount.name` | Service account to be used. If not set and `serviceAccount.create` is `true`, a name is generated using the fullname template | `nil` |
### Examples
- Override value using commandline parameters
```console
helm upgrade --install my-release . --set image.tag=pg12.5-ts2.0.0-p0 --set image.pullPolicy=Always
```
- Override values using `myvalues.yaml`
```yaml
# Filename: myvalues.yaml
image:
tag: pg12.5-ts2.0.0-p0
pullPolicy: Always
postgresql:
databases:
- postgres
- proddb
parameters:
checkpoint_completion_target: 32MB
work_mem: 16MB
shared_buffers: 512MB
```
```console
helm upgrade --install my-release . -f myvalues.yaml
```
## Cleanup
Removing a deployment can be done by deleting a Helm deployment, however, removing the deployment does not remove:
- the Persistent Volume Claims (pvc) belonging to the cluster
To fully purge a deployment in Kubernetes, you should do the following:
```console
# Delete the Helm deployment
helm delete my-release
# Delete pvc and the headless Patroni service
kubectl delete $(kubectl get pvc -l release=my-release -o name)
```
## Troubleshooting
### List Resources
All the resources that are deployed can be listed by providing the filter `-l release=my-release`.
```console
kubectl get all -l release=my-release
```
The output should be similar to the below output:
```console
NAME READY STATUS RESTARTS AGE
pod/my-release-timescaledb-access-0 1/1 Running 0 11m
pod/my-release-timescaledb-data-0 1/1 Running 0 11m
pod/my-release-timescaledb-data-1 1/1 Running 0 11m
pod/my-release-timescaledb-data-2 1/1 Running 0 11m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/my-release-timescaledb LoadBalancer 10.152.183.60 <pending> 5432:31819/TCP 11m
service/my-release-timescaledb-data ClusterIP None <none> 5432/TCP 11m
NAME READY AGE
statefulset.apps/my-release-timescaledb-access 1/1 11m
statefulset.apps/my-release-timescaledb-data 3/3 11m
```
> **INFO** When listing resources within minutes of deploying a new Helm chart, you may see a list of jobs and its pods;
these jobs are there to create the database, and to attach the data nodes to the access node. There will be quite a few,
but these should disappear within minutes after successful deployment.
### Investigate TimescaleDB logs
The logs for the Access Node of TimescaleDB can be accessed as follows:
```console
kubectl logs $(kubectl get pod -l release=my-release,timescaleNodeType=access) timescaledb
```
### Verify multinode topology
```console
$ kubectl exec -ti $(kubectl get pod -l timescaleNodeType=access -o name) -c timescaledb -- psql -d example -c 'select node_name from timescaledb_information.data_nodes'
```
```text
node_name
-------------------------------
my-release-timescaledb-data-0
my-release-timescaledb-data-1
my-release-timescaledb-data-2
(3 rows)
```