Compare commits
300 Commits
gh-pages
...
postgres-c
Author | SHA1 | Date | |
---|---|---|---|
64e3612762 | |||
a6821995ca | |||
4291c3d18c | |||
|
3f1fc33123 | ||
fad13607e6 | |||
a1811097c0 | |||
6b850205ad | |||
d075a47f03 | |||
0a437d983d | |||
7058201439 | |||
42cd8834b9 | |||
2cda957b4c | |||
238d01c5e4 | |||
9f0fae9fdf | |||
d2f062e3db | |||
a1c9367b6d | |||
9857d61093 | |||
cfe7ebea99 | |||
aface2b57d | |||
8158d1689c | |||
276921cf8a | |||
e420e092c9 | |||
e20049fc8c | |||
37ba06acc7 | |||
02228e31cc | |||
6708443275 | |||
987cedb98a | |||
7f0fd5d5c7 | |||
d381bdee39 | |||
ed4a43cd31 | |||
1b01ed0ba2 | |||
58151e21aa | |||
3f2615097f | |||
a8bbc84740 | |||
a8b3615f2f | |||
590b095a32 | |||
5d2cdc9648 | |||
99c106bd63 | |||
e6938fe645 | |||
7f5d870579 | |||
6cf2db87f4 | |||
537d9bd125 | |||
9627287f30 | |||
dd724b5b32 | |||
cd91a16c75 | |||
69900d3931 | |||
f80cec8c82 | |||
f3d629fe00 | |||
4d3574ffa8 | |||
f98268fd25 | |||
7514ea022e | |||
a65a0dbcec | |||
6bc5aea01f | |||
80940910a9 | |||
6895b078b5 | |||
27e70a1786 | |||
de21d07a5d | |||
58cc48724b | |||
8a357574e9 | |||
220e9e011b | |||
9483523eb8 | |||
ca205a8802 | |||
36267ada6f | |||
153b7a1ad2 | |||
9b30408661 | |||
947120d73c | |||
a62e24142c | |||
03c825e816 | |||
38c2be01f9 | |||
|
5ac88f9aa8 | ||
|
3c3f1bdb76 | ||
|
718acdc607 | ||
|
71a5d81c09 | ||
|
e2d4c395e5 | ||
fd611813b7 | |||
ab5da15b10 | |||
e584566dde | |||
f06aa3a175 | |||
9abeba8f9d | |||
1f498323a4 | |||
646e3a2c36 | |||
197ca6ef81 | |||
b8780a7339 | |||
b90968ea85 | |||
d3275f8067 | |||
649f362824 | |||
732761d73b | |||
0e7627cb7d | |||
d81c246b35 | |||
|
b97dd1f892 | ||
0b8374753d | |||
cb29afdcb2 | |||
4f366535c3 | |||
f32ef77551 | |||
d02f649164 | |||
3b50ca2bfe | |||
17796a1183 | |||
512b1d4243 | |||
a2b0cdd5b6 | |||
e79af169b9 | |||
661f9342b9 | |||
9d1244c7a1 | |||
0dc50bf88f | |||
75accbbf87 | |||
19fbd95a79 | |||
d73c42fd42 | |||
|
6399a8ca97 | ||
|
580c7da73a | ||
|
11d47799f1 | ||
|
7d825da72d | ||
|
adf49292bd | ||
|
63e69df14a | ||
7bd8a4525a | |||
a860789056 | |||
58f89640a8 | |||
132e086d6d | |||
617505ee99 | |||
34a21702ab | |||
15d3253af9 | |||
90970ef172 | |||
0d6f789ffd | |||
f968776cd0 | |||
0b2beb08b7 | |||
8fae31a679 | |||
f67ac05610 | |||
7803519d04 | |||
55e63c2c72 | |||
6e083293bb | |||
60e427826c | |||
f905b4ccfe | |||
487786455c | |||
585d39657a | |||
e5e2812ed5 | |||
506218210e | |||
a7a08ef9f3 | |||
0fe94afd2a | |||
|
73262aa60a | ||
a322553210 | |||
09aae9e79d | |||
c72c25a74d | |||
9c93b1dc4a | |||
cfd426f657 | |||
93f4991a05 | |||
ce0f3c7b07 | |||
58c5443de1 | |||
b3acbf3cbc | |||
3270a3102b | |||
acc9710c72 | |||
756ef9b0c6 | |||
|
8baec6fd41 | ||
c1ab4afc46 | |||
bdcd63284a | |||
|
e8a951405d | ||
|
93caa67bad | ||
|
0dfaebdb7f | ||
|
2f721343aa | ||
270b62be53 | |||
0984e40cc8 | |||
4e26a7c727 | |||
17d146a444 | |||
323955129b | |||
d4eaeb7c21 | |||
725e83af07 | |||
|
d58fbbd819 | ||
bab4c95580 | |||
536b133850 | |||
ead44d21f7 | |||
ff7fb92c19 | |||
46effc5599 | |||
0f7a0d658f | |||
08b0782645 | |||
9f7f83a40a | |||
b3f9c93fcb | |||
b6bcae462f | |||
|
70cbd7b60d | ||
|
ba065b36b2 | ||
|
cfc4d78b9f | ||
|
34e96804f4 | ||
|
3a8354635b | ||
|
fcba2d6011 | ||
|
8db4555032 | ||
|
f22b33deba | ||
f73b754d9c | |||
f2e3dba5e2 | |||
e89bd04a8d | |||
6f2550cf79 | |||
0c94180823 | |||
f59d77f8bc | |||
57983912f5 | |||
8a6cfef4c5 | |||
7c9a06dcee | |||
580f9efa06 | |||
c0b41a6d6c | |||
4efdc15832 | |||
2dc9f33109 | |||
d0255ca5d1 | |||
790ad5b440 | |||
9539635918 | |||
7c61825d5f | |||
c2446ab6e2 | |||
120fbe05e6 | |||
e686771ce3 | |||
a5bd0b724a | |||
35c7223d40 | |||
32bda525a1 | |||
42231a40f4 | |||
76c6016a9e | |||
d8e6ac1d7b | |||
03d0cab454 | |||
b149fbd85e | |||
97528e845d | |||
f04f777ec2 | |||
|
688d6498b0 | ||
7d8c554354 | |||
b31dab5a46 | |||
c485eb9682 | |||
627f2ca6b6 | |||
2b9ea0bcdb | |||
ba0c6fe7d2 | |||
6c11bf51b2 | |||
8ffe5fd408 | |||
773ff53432 | |||
81ab282822 | |||
8fb910383d | |||
1fe5c07c36 | |||
eadbf37ce5 | |||
f7f210a905 | |||
a6d3eaf404 | |||
72f5ebc567 | |||
e52c5dc8c8 | |||
f08ae85e5c | |||
4988c82be2 | |||
f4c15191dc | |||
678ce1aec5 | |||
99e958bd6f | |||
879ca58606 | |||
f9df889a0a | |||
28c909317d | |||
97e58e4113 | |||
|
796b9e6865 | ||
541cc18889 | |||
64986858b1 | |||
7dfb883a8f | |||
|
9abc2a1f98 | ||
8b615f4780 | |||
1f3a4d3042 | |||
7c4601835c | |||
|
401871daa1 | ||
b53ba2b073 | |||
3191e4ed53 | |||
72ea1faa67 | |||
751a1d4143 | |||
81bd94a1db | |||
e49b1482a1 | |||
ba4273041d | |||
d45a5f6084 | |||
e3627d3531 | |||
f12bb5a879 | |||
f4c2938d95 | |||
7a8c6e7b3c | |||
c0ca3a909c | |||
792e4c018c | |||
e51e4e34dc | |||
e429bc51f7 | |||
6adb00b442 | |||
9a5bc849bc | |||
9ef96af4a5 | |||
66a5099f75 | |||
f2e1dabf24 | |||
39b46177ea | |||
c69d61a07d | |||
1236a200cd | |||
|
24845fb336 | ||
|
a398abdf63 | ||
|
5bbd6db883 | ||
9e2d2a7503 | |||
|
ea662406ed | ||
06661efd7e | |||
ec95fd84f9 | |||
86d7e9f156 | |||
5a3cb20dcb | |||
1cb675e7c3 | |||
438ceef98b | |||
0be01806dd | |||
639f7a4031 | |||
ba3e6551e2 | |||
d12db5479a | |||
e44c961258 | |||
0999f6272f | |||
7bfb8f5920 | |||
eb79c0ba68 | |||
466b67581f | |||
031b1dec3a | |||
41282e79e8 | |||
ffcaf51b66 | |||
30d69f695c | |||
c5feb14abc | |||
5665d7a99f | |||
5158f9f66c | |||
e9bed237bf |
2
.github/renovate-update-notification/Dockerfile
vendored
Normal file
2
.github/renovate-update-notification/Dockerfile
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# This file is processed by Renovate bot so that it creates a PR on new major Renovate versions
|
||||||
|
FROM renovate/renovate:37
|
64
.github/renovate.json
vendored
Normal file
64
.github/renovate.json
vendored
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||||
|
"extends": [
|
||||||
|
"config:recommended",
|
||||||
|
"mergeConfidence:all-badges",
|
||||||
|
":rebaseStalePrs"
|
||||||
|
],
|
||||||
|
"timezone": "US/Central",
|
||||||
|
"schedule": [
|
||||||
|
"every weekday"
|
||||||
|
],
|
||||||
|
"labels": [],
|
||||||
|
"packageRules": [
|
||||||
|
{
|
||||||
|
"description": "Disables for non major Renovate version",
|
||||||
|
"matchPaths": [
|
||||||
|
".github/renovate-update-notification/Dockerfile"
|
||||||
|
],
|
||||||
|
"matchUpdateTypes": [
|
||||||
|
"minor",
|
||||||
|
"patch",
|
||||||
|
"pin",
|
||||||
|
"digest",
|
||||||
|
"rollback"
|
||||||
|
],
|
||||||
|
"enabled": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Generate for major Renovate version",
|
||||||
|
"matchPaths": [
|
||||||
|
".github/renovate-update-notification/Dockerfile"
|
||||||
|
],
|
||||||
|
"matchUpdateTypes": [
|
||||||
|
"major"
|
||||||
|
],
|
||||||
|
"addLabels": [
|
||||||
|
"upgrade"
|
||||||
|
],
|
||||||
|
"automerge": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Label images",
|
||||||
|
"matchDatasources": [
|
||||||
|
"docker"
|
||||||
|
],
|
||||||
|
"addLabels": [
|
||||||
|
"image"
|
||||||
|
],
|
||||||
|
"automerge": false,
|
||||||
|
"minimumReleaseAge": "3 days"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Label charts",
|
||||||
|
"matchDatasources": [
|
||||||
|
"helm"
|
||||||
|
],
|
||||||
|
"addLabels": [
|
||||||
|
"chart"
|
||||||
|
],
|
||||||
|
"automerge": false,
|
||||||
|
"minimumReleaseAge": "3 days"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
37
.github/workflows/lint-test.yaml
vendored
Normal file
37
.github/workflows/lint-test.yaml
vendored
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
name: lint-and-test-charts
|
||||||
|
|
||||||
|
on: pull_request
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
lint-test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Set up Helm
|
||||||
|
uses: azure/setup-helm@v4
|
||||||
|
with:
|
||||||
|
version: v3.13.3
|
||||||
|
|
||||||
|
- uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: "3.10"
|
||||||
|
check-latest: true
|
||||||
|
|
||||||
|
- name: Set up chart-testing
|
||||||
|
uses: helm/chart-testing-action@v2.6.1
|
||||||
|
|
||||||
|
- name: Run chart-testing (list-changed)
|
||||||
|
id: list-changed
|
||||||
|
run: |
|
||||||
|
changed=$(ct list-changed --target-branch ${{ github.event.repository.default_branch }})
|
||||||
|
if [[ -n "$changed" ]]; then
|
||||||
|
echo "changed=true" >> "$GITHUB_OUTPUT"
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Run chart-testing (lint)
|
||||||
|
if: steps.list-changed.outputs.changed == 'true'
|
||||||
|
run: ct lint --target-branch ${{ github.event.repository.default_branch }}
|
27
.github/workflows/release.yml
vendored
Normal file
27
.github/workflows/release.yml
vendored
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
name: release-charts
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
release:
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Configure Git
|
||||||
|
run: |
|
||||||
|
git config user.name "$GITHUB_ACTOR"
|
||||||
|
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
|
||||||
|
|
||||||
|
- name: Run chart-releaser
|
||||||
|
uses: helm/chart-releaser-action@v1.6.0
|
||||||
|
env:
|
||||||
|
CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
|
12
.gitignore
vendored
Normal file
12
.gitignore
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# Archived
|
||||||
|
charts/**/archive
|
||||||
|
|
||||||
|
# Compiled Helm chart dependencies
|
||||||
|
charts/**/Chart.lock
|
||||||
|
charts/**/charts/
|
||||||
|
|
||||||
|
# Testing
|
||||||
|
__snapshot__/
|
||||||
|
|
||||||
|
# Docs
|
||||||
|
_site/
|
201
LICENSE
Normal file
201
LICENSE
Normal file
@@ -0,0 +1,201 @@
|
|||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
@@ -1 +0,0 @@
|
|||||||
theme: jekyll-theme-cayman
|
|
18
charts/cloudflared/Chart.yaml
Normal file
18
charts/cloudflared/Chart.yaml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: cloudflared
|
||||||
|
version: 1.4.0
|
||||||
|
description: Cloudflared Tunnel
|
||||||
|
keywords:
|
||||||
|
- cloudflare
|
||||||
|
- tunnel
|
||||||
|
sources:
|
||||||
|
- https://github.com/cloudflare/cloudflared
|
||||||
|
- https://github.com/bjw-s/helm-charts/tree/main/charts/library/common
|
||||||
|
maintainers:
|
||||||
|
- name: alexlebens
|
||||||
|
dependencies:
|
||||||
|
- name: common
|
||||||
|
repository: https://bjw-s.github.io/helm-charts/
|
||||||
|
version: 3.2.1
|
||||||
|
icon: https://avatars.githubusercontent.com/u/314135?s=48&v=4
|
||||||
|
appVersion: "2024.6.0"
|
16
charts/cloudflared/README.md
Normal file
16
charts/cloudflared/README.md
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
## Introduction
|
||||||
|
|
||||||
|
[Cloudflared](https://github.com/cloudflare/cloudflared)
|
||||||
|
|
||||||
|
Contains the command-line client for Cloudflare Tunnel, a tunneling daemon that proxies traffic from the Cloudflare network to your origins.
|
||||||
|
|
||||||
|
This chart bootstraps a [Cloudflared](https://github.com/cloudflare/cloudflared) tunnel on a [Kubernetes](https://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
- Kubernetes
|
||||||
|
- Helm
|
||||||
|
|
||||||
|
## Parameters
|
||||||
|
|
||||||
|
See the [values files](values.yaml).
|
41
charts/cloudflared/templates/common.yaml
Normal file
41
charts/cloudflared/templates/common.yaml
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
{{- include "bjw-s.common.loader.init" . }}
|
||||||
|
|
||||||
|
{{- define "cloudflared.hardcodedValues" -}}
|
||||||
|
{{ if not .Values.global.nameOverride }}
|
||||||
|
global:
|
||||||
|
nameOverride: {{ .Values.name }}
|
||||||
|
{{ end }}
|
||||||
|
controllers:
|
||||||
|
main:
|
||||||
|
type: deployment
|
||||||
|
strategy: Recreate
|
||||||
|
containers:
|
||||||
|
main:
|
||||||
|
image:
|
||||||
|
repository: {{ .Values.image.repository }}
|
||||||
|
tag: {{ .Values.image.tag }}
|
||||||
|
pullPolicy: {{ .Values.image.pullPolicy }}
|
||||||
|
args:
|
||||||
|
- tunnel
|
||||||
|
- --protocol
|
||||||
|
- http2
|
||||||
|
- --no-autoupdate
|
||||||
|
- run
|
||||||
|
- --token
|
||||||
|
- $(CF_MANAGED_TUNNEL_TOKEN)
|
||||||
|
env:
|
||||||
|
- name: CF_MANAGED_TUNNEL_TOKEN
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ .Values.existingSecretName }}
|
||||||
|
key: {{ .Values.existingSecretKey }}
|
||||||
|
resources:
|
||||||
|
{{- with .Values.resources }}
|
||||||
|
resources:
|
||||||
|
{{- toYaml . | nindent 10 }}
|
||||||
|
{{ end }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- $_ := mergeOverwrite .Values (include "cloudflared.hardcodedValues" . | fromYaml) -}}
|
||||||
|
|
||||||
|
{{/* Render the templates */}}
|
||||||
|
{{ include "bjw-s.common.loader.generate" . }}
|
11
charts/cloudflared/values.yaml
Normal file
11
charts/cloudflared/values.yaml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
name: cloudflared
|
||||||
|
existingSecretName: cloudflared-secret
|
||||||
|
existingSecretKey: cf-tunnel-token
|
||||||
|
image:
|
||||||
|
repository: cloudflare/cloudflared
|
||||||
|
tag: "2024.6.0"
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 128Mi
|
15
charts/mysql-cluster/Chart.yaml
Normal file
15
charts/mysql-cluster/Chart.yaml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: mysql-cluster
|
||||||
|
version: 0.2.1
|
||||||
|
description: Chart for a mysql cluster
|
||||||
|
keywords:
|
||||||
|
- database
|
||||||
|
- mysql
|
||||||
|
sources:
|
||||||
|
- https://dev.mysql.com/
|
||||||
|
- https://github.com/mysql/mysql-operator
|
||||||
|
- https://github.com/mysql/mysql-operator/tree/trunk/helm/mysql-innodbcluster
|
||||||
|
maintainers:
|
||||||
|
- name: alexlebens
|
||||||
|
icon: https://avatars.githubusercontent.com/u/2452804?s=48&v=4
|
||||||
|
appVersion: 8.4.0
|
17
charts/mysql-cluster/README.md
Normal file
17
charts/mysql-cluster/README.md
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
## Introduction
|
||||||
|
|
||||||
|
[MySQL Operator](https://dev.mysql.com/doc/mysql-operator/en/)
|
||||||
|
|
||||||
|
MySQL Operator for Kubernetes manages MySQL InnoDB Cluster setups inside a Kubernetes Cluster. MySQL Operator for Kubernetes manages the full lifecycle with setup and maintenance including automating upgrades and backups.
|
||||||
|
|
||||||
|
This chart bootstraps a [MySQL InnoDB](https://dev.mysql.com/doc/mysql-operator/en/mysql-operator-innodbcluster.html) cluster on a [Kubernetes](https://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
- Kubernetes
|
||||||
|
- Helm
|
||||||
|
- MySQL Operator
|
||||||
|
|
||||||
|
## Parameters
|
||||||
|
|
||||||
|
See the [values files](values.yaml).
|
72
charts/mysql-cluster/templates/_backup.tpl
Normal file
72
charts/mysql-cluster/templates/_backup.tpl
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
{{- define "cluster.backup" -}}
|
||||||
|
|
||||||
|
{{- if and .Values.backup.enabled .Values.backup.profiles }}
|
||||||
|
backupProfiles:
|
||||||
|
{{- $isDumpInstance := false }}
|
||||||
|
{{- $isSnapshot := false }}
|
||||||
|
{{- range $_, $profile := .Values.backup.profiles }}
|
||||||
|
- name: {{ $profile.name | quote }}
|
||||||
|
{{- if hasKey $profile "podAnnotations" }}
|
||||||
|
podAnnotations:
|
||||||
|
{{ toYaml $profile.podAnnotations | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if hasKey $profile "podLabels" }}
|
||||||
|
podLabels:
|
||||||
|
{{ toYaml $profile.podLabels | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- $isDumpInstance = hasKey $profile "dumpInstance" }}
|
||||||
|
{{- $isSnapshot = hasKey $profile "snapshot" }}
|
||||||
|
{{- if or $isDumpInstance $isSnapshot }}
|
||||||
|
|
||||||
|
{{- $backupProfile := ternary $profile.dumpInstance $profile.snapshot $isDumpInstance }}
|
||||||
|
{{- if $isDumpInstance }}
|
||||||
|
dumpInstance:
|
||||||
|
{{- else if $isSnapshot }}
|
||||||
|
snapshot:
|
||||||
|
{{- else }}
|
||||||
|
{{- fail "Unsupported or unspecified backup type, must be either snapshot or dumpInstance" }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{- if not (hasKey $backupProfile "storage") }}
|
||||||
|
{{- fail "backup profile $profile.name has no storage section" }}
|
||||||
|
{{- else if hasKey $backupProfile.storage "s3" }}
|
||||||
|
storage:
|
||||||
|
s3:
|
||||||
|
{{- if $backupProfile.storage.s3.prefix }}
|
||||||
|
prefix: {{ $backupProfile.storage.s3.prefix }}
|
||||||
|
{{- end }}
|
||||||
|
bucketName: {{ required "bucketName is required" $backupProfile.storage.s3.bucketName }}
|
||||||
|
config: {{ required "config is required" $backupProfile.storage.s3.config }}
|
||||||
|
{{- if $backupProfile.storage.s3.profile }}
|
||||||
|
profile: {{ $backupProfile.storage.s3.profile }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if $backupProfile.storage.s3.endpoint }}
|
||||||
|
endpoint: {{ $backupProfile.storage.s3.endpoint }}
|
||||||
|
{{- end }}
|
||||||
|
{{- else if hasKey $backupProfile.storage "persistentVolumeClaim" }}
|
||||||
|
storage:
|
||||||
|
persistentVolumeClaim: {{ toYaml $backupProfile.storage.persistentVolumeClaim | nindent 12}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- fail "Backup profile $profile.name has empty storage section - neither s3 nor persistentVolumeClaim defined" }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if .Values.backup.schedules }}
|
||||||
|
backupSchedules:
|
||||||
|
{{- range $_, $schedule := .Values.backup.schedules }}
|
||||||
|
- name: {{ $schedule.name | quote }}
|
||||||
|
enabled: {{ $schedule.enabled }}
|
||||||
|
schedule: {{ quote $schedule.schedule }}
|
||||||
|
{{- if ($schedule).timeZone }}
|
||||||
|
timeZone: {{ quote $schedule.timeZone }}
|
||||||
|
{{- end }}
|
||||||
|
deleteBackupData: {{ $schedule.deleteBackupData }}
|
||||||
|
backupProfileName: {{ $schedule.backupProfileName }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- end }}
|
64
charts/mysql-cluster/templates/_helpers.tpl
Normal file
64
charts/mysql-cluster/templates/_helpers.tpl
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
{{/*
|
||||||
|
Expand the name of the chart.
|
||||||
|
*/}}
|
||||||
|
{{- define "cluster.name" -}}
|
||||||
|
{{- if .Values.global.nameOverride }}
|
||||||
|
{{- .Values.global.nameOverride | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- else }}
|
||||||
|
{{- printf "%s-mysql-%s" .Release.Name ((semver .Values.cluster.image.version).Major | toString) | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create chart name and version as used by the chart label.
|
||||||
|
*/}}
|
||||||
|
{{- define "cluster.chart" -}}
|
||||||
|
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Check for invalid versions
|
||||||
|
*/}}
|
||||||
|
{{- $minimalVersion := "8.0.27" }}
|
||||||
|
{{- $forbiddenVersions := list "8.0.29" }}
|
||||||
|
{{- $serverVersion := .Values.serverVersion | default .Chart.AppVersion }}
|
||||||
|
{{- if lt $serverVersion $minimalVersion }}
|
||||||
|
{{- $err := printf "It is not possible to use MySQL version %s . Please, use %s or above" $serverVersion $minimalVersion }}
|
||||||
|
{{- fail $err }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if has $serverVersion $forbiddenVersions }}
|
||||||
|
{{- $err := printf "It is not possible to use MySQL version %s . Please, use %s or above except %v" $serverVersion $minimalVersion $forbiddenVersions }}
|
||||||
|
{{- fail $err }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Common labels
|
||||||
|
*/}}
|
||||||
|
{{- define "cluster.labels" -}}
|
||||||
|
helm.sh/chart: {{ include "cluster.chart" . }}
|
||||||
|
{{ include "cluster.selectorLabels" . }}
|
||||||
|
{{- if .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
||||||
|
{{- end }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Selector labels
|
||||||
|
*/}}
|
||||||
|
{{- define "cluster.selectorLabels" -}}
|
||||||
|
app.kubernetes.io/name: {{ include "cluster.name" . }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/part-of: cloudnative-pg
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create the name of the service account to use.
|
||||||
|
*/}}
|
||||||
|
{{- define "mysql.serviceAccountName" -}}
|
||||||
|
{{- if .Values.serviceAccount.enabled -}}
|
||||||
|
{{ default (include "cluster.name" .) .Values.serviceAccount.name }}
|
||||||
|
{{- else -}}
|
||||||
|
{{ default "default" .Values.serviceAccount.name }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
47
charts/mysql-cluster/templates/_init.tpl
Normal file
47
charts/mysql-cluster/templates/_init.tpl
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
{{- define "cluster.init" -}}
|
||||||
|
|
||||||
|
{{- if eq .Values.mode "clone" }}
|
||||||
|
{{- with .Values.clone }}
|
||||||
|
initDB:
|
||||||
|
clone:
|
||||||
|
donorUrl: {{ required "clone donorUrl is required" .donorUrl }}
|
||||||
|
rootUser: {{ .rootUser | default "root" }}
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ required "clone credentials is required" .exisitingCredentialsSecret }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if eq .Values.mode "recovery" }}
|
||||||
|
{{- with .Values.recovery }}
|
||||||
|
initDB:
|
||||||
|
dump:
|
||||||
|
{{- if .name }}
|
||||||
|
name: {{ .name | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .path }}
|
||||||
|
path: {{ .path | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .options }}
|
||||||
|
options: {{ toYaml .options | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
storage:
|
||||||
|
{{- if eq .type "s3" }}
|
||||||
|
s3:
|
||||||
|
prefix: {{ required "s3 prefix is required" .s3.prefix }}
|
||||||
|
bucketName: {{ required "s3 bucketName is required" .s3.bucketName }}
|
||||||
|
config: {{ required "s3 config is required" .s3.config }}
|
||||||
|
{{- if .s3.profile }}
|
||||||
|
profile: {{ .s3.profile }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .s3.endpoint }}
|
||||||
|
endpoint: {{ .s3.endpoint }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if eq .type "pvc" }}
|
||||||
|
persistentVolumeClaim:
|
||||||
|
{{ toYaml .persistentVolumeClaim | nindent 10}}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- end }}
|
75
charts/mysql-cluster/templates/deployment.yaml
Normal file
75
charts/mysql-cluster/templates/deployment.yaml
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
apiVersion: mysql.oracle.com/v2
|
||||||
|
kind: InnoDBCluster
|
||||||
|
metadata:
|
||||||
|
name: {{ include "cluster.name" . }}-cluster
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
annotations:
|
||||||
|
{{- with .Values.global.annotations }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "cluster.labels" . | nindent 4 }}
|
||||||
|
{{- include "cluster.selectorLabels" . | nindent 4 }}
|
||||||
|
{{- with .Values.global.labels }}
|
||||||
|
{{ toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
instances: {{ required "serverInstances is required" .Values.cluster.serverInstances }}
|
||||||
|
baseServerId: {{ required "baseServerId is required" .Values.cluster.baseServerId }}
|
||||||
|
serviceAccountName: {{ include "mysql.serviceAccountName" . }}
|
||||||
|
imagePullPolicy : {{ .Values.cluster.image.pullPolicy }}
|
||||||
|
version: {{ .Values.cluster.image.version }}
|
||||||
|
tlsUseSelfSigned: true
|
||||||
|
secretName: {{ .Values.cluster.exisitingCredentialsSecret }}
|
||||||
|
podSpec:
|
||||||
|
{{- with .Values.cluster.podSpec }}
|
||||||
|
{{ toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
podAnnotations:
|
||||||
|
{{- with .Values.cluster.podAnnotations }}
|
||||||
|
{{ toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
podLabels:
|
||||||
|
{{- with .Values.cluster.podLabels }}
|
||||||
|
{{ toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
router:
|
||||||
|
instances: {{ required "router.instances is required" .Values.cluster.router.instances }}
|
||||||
|
podSpec:
|
||||||
|
{{- with .Values.cluster.router.podSpec }}
|
||||||
|
{{- toYaml . | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
|
podAnnotations:
|
||||||
|
{{- with .Values.cluster.router.podAnnotations }}
|
||||||
|
{{- toYaml . | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
|
podLabels:
|
||||||
|
{{- with .Values.cluster.router.podLabels }}
|
||||||
|
{{- toYaml . | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
|
tlsSecretName: {{ include "cluster.name" . }}-router-tls
|
||||||
|
logs:
|
||||||
|
{{- with .Values.cluster.logs }}
|
||||||
|
{{ toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
mycnf: |
|
||||||
|
{{ .Values.cluster.serverConfig.mycnf | indent 4 }}
|
||||||
|
{{- if .Values.cluster.datadirVolumeClaimTemplate }}
|
||||||
|
{{- with .Values.cluster.datadirVolumeClaimTemplate }}
|
||||||
|
datadirVolumeClaimTemplate:
|
||||||
|
{{- if .storageClassName }}
|
||||||
|
storageClassName: {{ .storageClassName | quote }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .accessModes }}
|
||||||
|
accessModes: [ "{{ .accessModes }}" ]
|
||||||
|
{{- end }}
|
||||||
|
{{- if .size }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: "{{ .size }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{ include "cluster.init" . | nindent 2 }}
|
||||||
|
{{ include "cluster.backup" . | nindent 2 }}
|
21
charts/mysql-cluster/templates/service-account.yaml
Normal file
21
charts/mysql-cluster/templates/service-account.yaml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
name: {{ include "mysql.serviceAccountName" . }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "cluster.labels" . | nindent 4 }}
|
||||||
|
{{- include "cluster.selectorLabels" . | nindent 4 }}
|
||||||
|
{{- with .Values.global.labels }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.serviceAccount.labels }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
annotations:
|
||||||
|
{{- with .Values.global.annotations }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.serviceAccount.annotations }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
148
charts/mysql-cluster/values.yaml
Normal file
148
charts/mysql-cluster/values.yaml
Normal file
@@ -0,0 +1,148 @@
|
|||||||
|
global:
|
||||||
|
nameOverride:
|
||||||
|
labels: {}
|
||||||
|
annotations: {}
|
||||||
|
|
||||||
|
serviceAccount:
|
||||||
|
enabled: true
|
||||||
|
labels: {}
|
||||||
|
annotations: {}
|
||||||
|
name: ""
|
||||||
|
|
||||||
|
###
|
||||||
|
# Cluster mode of operation. Available modes:
|
||||||
|
# * `standalone` - Default mode. Creates new or updates an existing cluster.
|
||||||
|
# * `recovery` - Same as standalone but creates a cluster from a backup
|
||||||
|
# * `clone` - Create database as a replica from another cluster
|
||||||
|
mode: standalone
|
||||||
|
|
||||||
|
##
|
||||||
|
# Cluster spec
|
||||||
|
#
|
||||||
|
# Reference: https://dev.mysql.com/doc/mysql-operator/en/mysql-operator-properties.html#mysql-operator-spec-innodbclusterspecinitdbdumpstorages3
|
||||||
|
#
|
||||||
|
cluster:
|
||||||
|
serverInstances: 1
|
||||||
|
baseServerId: 1000
|
||||||
|
|
||||||
|
# Existing secret that contains the keys "rootUser", "rootHost", and "rootPassword"
|
||||||
|
exisitingCredentialsSecret: ""
|
||||||
|
|
||||||
|
image:
|
||||||
|
version: 8.4.0
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
|
||||||
|
router:
|
||||||
|
instances: 1
|
||||||
|
podSpec: {}
|
||||||
|
podAnnotations: {}
|
||||||
|
podLabels: {}
|
||||||
|
|
||||||
|
logs:
|
||||||
|
error:
|
||||||
|
enabled: true
|
||||||
|
collect: false
|
||||||
|
general:
|
||||||
|
enabled: false
|
||||||
|
collect: false
|
||||||
|
slowQuery:
|
||||||
|
enabled: false
|
||||||
|
longQueryTime: 2.5
|
||||||
|
|
||||||
|
serverConfig:
|
||||||
|
mycnf: |
|
||||||
|
[mysqld]
|
||||||
|
core_file
|
||||||
|
local_infile=off
|
||||||
|
mysql_native_password=ON
|
||||||
|
|
||||||
|
datadirVolumeClaimTemplate:
|
||||||
|
storageClassName: ""
|
||||||
|
accessModes: ""
|
||||||
|
size: ""
|
||||||
|
|
||||||
|
podSpec:
|
||||||
|
containers:
|
||||||
|
- name: mysql
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
memory: 1024Mi
|
||||||
|
cpu: 1000m
|
||||||
|
requests:
|
||||||
|
memory: 512Mi
|
||||||
|
cpu: 100m
|
||||||
|
podAnnotations: {}
|
||||||
|
podLabels: {}
|
||||||
|
|
||||||
|
##
|
||||||
|
# Recovery database from storage
|
||||||
|
#
|
||||||
|
recovery:
|
||||||
|
|
||||||
|
# * `s3` - Restores from s3 object store
|
||||||
|
# * `pvc` - Restores from persistent volume claim
|
||||||
|
type:
|
||||||
|
|
||||||
|
# -- Name of the dump. Not used by the operator, but a descriptive hint for the cluster administrator
|
||||||
|
name: ""
|
||||||
|
# -- Path to the dump in the PVC. Use when specifying persistentVolumeClaim. Omit for ociObjectStorage, S3, or azure.
|
||||||
|
path: ""
|
||||||
|
# -- A dictionary of key-value pairs passed directly to MySQL Shell's loadDump()
|
||||||
|
options: {}
|
||||||
|
|
||||||
|
s3:
|
||||||
|
# -- Path in the bucket where the dump files are stored
|
||||||
|
prefix: ""
|
||||||
|
# -- Name of a Secret with S3 configuration and credentials as contained in ~/.aws/config
|
||||||
|
config: ""
|
||||||
|
# -- Name of the S3 bucket where the dump is stored
|
||||||
|
bucketName: ""
|
||||||
|
# -- Override endpoint URL
|
||||||
|
endpoint: ""
|
||||||
|
|
||||||
|
persistentVolumeClaim: {}
|
||||||
|
|
||||||
|
##
|
||||||
|
# Clone database from another instance
|
||||||
|
#
|
||||||
|
clone:
|
||||||
|
donorUrl: ""
|
||||||
|
rootUser: root
|
||||||
|
exisitingCredentialsSecret: ""
|
||||||
|
|
||||||
|
##
|
||||||
|
# Backup database to pvc or s3
|
||||||
|
#
|
||||||
|
backup:
|
||||||
|
enabled: false
|
||||||
|
profiles:
|
||||||
|
|
||||||
|
## -- Example profile that back ups to local pvc
|
||||||
|
|
||||||
|
# - name: pvc-backup
|
||||||
|
# dumpInstance:
|
||||||
|
# storage:
|
||||||
|
# persistentVolumeClaim:
|
||||||
|
# claimName: backup-volume-claim
|
||||||
|
|
||||||
|
## -- Example profile that back ups to s3 endpoint
|
||||||
|
|
||||||
|
# - name: s3-backup
|
||||||
|
# snapshot:
|
||||||
|
# storage:
|
||||||
|
# s3:
|
||||||
|
# prefix: ""
|
||||||
|
# config: ""
|
||||||
|
# bucketName: ""
|
||||||
|
# endpoint: ""
|
||||||
|
|
||||||
|
schedules:
|
||||||
|
|
||||||
|
## -- Example schedule that backups daily
|
||||||
|
|
||||||
|
# - name: schedule-daily
|
||||||
|
# enabled: true
|
||||||
|
# schedule: "0 0 0 * * *"
|
||||||
|
# timeZone: "US/Central"
|
||||||
|
# deleteBackupData: false
|
||||||
|
# backupProfileName:
|
13
charts/postgres-cluster/Chart.yaml
Normal file
13
charts/postgres-cluster/Chart.yaml
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: postgres-cluster
|
||||||
|
version: 3.4.0
|
||||||
|
description: Chart for cloudnative-pg cluster
|
||||||
|
keywords:
|
||||||
|
- database
|
||||||
|
- postgres
|
||||||
|
sources:
|
||||||
|
- https://github.com/cloudnative-pg/cloudnative-pg
|
||||||
|
maintainers:
|
||||||
|
- name: alexlebens
|
||||||
|
icon: https://avatars.githubusercontent.com/u/100373852?s=48&v=4
|
||||||
|
appVersion: v1.23.1
|
17
charts/postgres-cluster/README.md
Normal file
17
charts/postgres-cluster/README.md
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
## Introduction
|
||||||
|
|
||||||
|
[CloudNative PG](https://github.com/cloudnative-pg/cloudnative-pg)
|
||||||
|
|
||||||
|
CloudNativePG is the Kubernetes operator that covers the full lifecycle of a highly available PostgreSQL database cluster with a primary/standby architecture, using native streaming replication.
|
||||||
|
|
||||||
|
This chart bootstraps a [CNPG](https://github.com/cloudnative-pg/cloudnative-pg) cluster on a [Kubernetes](https://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
- Kubernetes
|
||||||
|
- Helm
|
||||||
|
- CloudNative PG Operator
|
||||||
|
|
||||||
|
## Parameters
|
||||||
|
|
||||||
|
See the [values files](values.yaml).
|
30
charts/postgres-cluster/templates/_backup.tpl
Normal file
30
charts/postgres-cluster/templates/_backup.tpl
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
{{- define "cluster.backup" -}}
|
||||||
|
{{- if .Values.backup.enabled }}
|
||||||
|
backup:
|
||||||
|
retentionPolicy: {{ .Values.backup.retentionPolicy }}
|
||||||
|
barmanObjectStore:
|
||||||
|
destinationPath: {{ .Values.backup.destinationPath }}
|
||||||
|
endpointURL: {{ .Values.backup.endpointURL }}
|
||||||
|
{{- if .Values.backup.endpointCA }}
|
||||||
|
endpointCA:
|
||||||
|
name: {{ .Values.backup.endpointCA }}
|
||||||
|
key: ca-bundle.crt
|
||||||
|
{{- end }}
|
||||||
|
serverName: "{{ include "cluster.name" . }}-backup-{{ .Values.backup.backupIndex }}"
|
||||||
|
s3Credentials:
|
||||||
|
accessKeyId:
|
||||||
|
name: {{ include "cluster.backupCredentials" . }}
|
||||||
|
key: ACCESS_KEY_ID
|
||||||
|
secretAccessKey:
|
||||||
|
name: {{ include "cluster.backupCredentials" . }}
|
||||||
|
key: ACCESS_SECRET_KEY
|
||||||
|
wal:
|
||||||
|
compression: {{ .Values.backup.wal.compression }}
|
||||||
|
encryption: {{ .Values.backup.wal.encryption }}
|
||||||
|
maxParallel: {{ .Values.backup.wal.maxParallel }}
|
||||||
|
data:
|
||||||
|
compression: {{ .Values.backup.data.compression }}
|
||||||
|
encryption: {{ .Values.backup.data.encryption }}
|
||||||
|
jobs: {{ .Values.backup.data.jobs }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
91
charts/postgres-cluster/templates/_bootstrap.tpl
Normal file
91
charts/postgres-cluster/templates/_bootstrap.tpl
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
{{- define "cluster.bootstrap" -}}
|
||||||
|
bootstrap:
|
||||||
|
{{- if eq .Values.mode "standalone" }}
|
||||||
|
initdb:
|
||||||
|
{{- with .Values.cluster.initdb }}
|
||||||
|
{{- with (omit . "postInitApplicationSQL") }}
|
||||||
|
{{- . | toYaml | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
postInitApplicationSQL:
|
||||||
|
{{- if eq .Values.type "postgis" }}
|
||||||
|
- CREATE EXTENSION IF NOT EXISTS postgis;
|
||||||
|
- CREATE EXTENSION IF NOT EXISTS postgis_topology;
|
||||||
|
- CREATE EXTENSION IF NOT EXISTS fuzzystrmatch;
|
||||||
|
- CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder;
|
||||||
|
{{- else if eq .Values.type "timescaledb" }}
|
||||||
|
- CREATE EXTENSION IF NOT EXISTS timescaledb;
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.cluster.initdb }}
|
||||||
|
{{- range .postInitApplicationSQL }}
|
||||||
|
{{- printf "- %s" . | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- else if eq .Values.mode "replica" }}
|
||||||
|
initdb:
|
||||||
|
import:
|
||||||
|
type: {{ .Values.replica.importType }}
|
||||||
|
databases:
|
||||||
|
{{- if and (gt (len .Values.replica.importDatabases) 1) (eq .Values.replica.importType "microservice") }}
|
||||||
|
{{ fail "Too many databases in import type of microservice!" }}
|
||||||
|
{{- else}}
|
||||||
|
{{- with .Values.replica.importDatabases }}
|
||||||
|
{{- . | toYaml | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if eq .Values.replica.importType "monolith" }}
|
||||||
|
roles:
|
||||||
|
{{- with .Values.replica.importRoles }}
|
||||||
|
{{- . | toYaml | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if and (.Values.replica.postImportApplicationSQL) (eq .Values.replica.importType "microservice") }}
|
||||||
|
postImportApplicationSQL:
|
||||||
|
{{- with .Values.replica.postImportApplicationSQL }}
|
||||||
|
{{- . | toYaml | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
source:
|
||||||
|
externalCluster: "{{ include "cluster.name" . }}-cluster"
|
||||||
|
externalClusters:
|
||||||
|
- name: "{{ include "cluster.name" . }}-cluster"
|
||||||
|
{{- with .Values.replica.externalCluster }}
|
||||||
|
{{- . | toYaml | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- else if eq .Values.mode "recovery" }}
|
||||||
|
recovery:
|
||||||
|
{{- with .Values.recovery.pitrTarget.time }}
|
||||||
|
recoveryTarget:
|
||||||
|
targetTime: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
source: {{ include "cluster.recoveryServerName" . }}
|
||||||
|
externalClusters:
|
||||||
|
- name: {{ include "cluster.recoveryServerName" . }}
|
||||||
|
barmanObjectStore:
|
||||||
|
serverName: {{ include "cluster.recoveryServerName" . }}
|
||||||
|
destinationPath: {{ .Values.recovery.destinationPath }}
|
||||||
|
endpointURL: {{ .Values.recovery.endpointURL }}
|
||||||
|
{{- with .Values.recovery.endpointCA }}
|
||||||
|
endpointCA:
|
||||||
|
name: {{ . }}
|
||||||
|
key: ca-bundle.crt
|
||||||
|
{{- end }}
|
||||||
|
s3Credentials:
|
||||||
|
accessKeyId:
|
||||||
|
name: {{ include "cluster.recoveryCredentials" . }}
|
||||||
|
key: ACCESS_KEY_ID
|
||||||
|
secretAccessKey:
|
||||||
|
name: {{ include "cluster.recoveryCredentials" . }}
|
||||||
|
key: ACCESS_SECRET_KEY
|
||||||
|
wal:
|
||||||
|
compression: {{ .Values.recovery.wal.compression }}
|
||||||
|
encryption: {{ .Values.recovery.wal.encryption }}
|
||||||
|
maxParallel: {{ .Values.recovery.wal.maxParallel }}
|
||||||
|
data:
|
||||||
|
compression: {{ .Values.recovery.data.compression }}
|
||||||
|
encryption: {{ .Values.recovery.data.encryption }}
|
||||||
|
jobs: {{ .Values.recovery.data.jobs }}
|
||||||
|
{{- else }}
|
||||||
|
{{ fail "Invalid cluster mode!" }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
91
charts/postgres-cluster/templates/_helpers.tpl
Normal file
91
charts/postgres-cluster/templates/_helpers.tpl
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
{{/*
|
||||||
|
Expand the name of the chart.
|
||||||
|
*/}}
|
||||||
|
{{- define "cluster.name" -}}
|
||||||
|
{{- if .Values.nameOverride }}
|
||||||
|
{{- .Values.nameOverride | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- else }}
|
||||||
|
{{- printf "%s-postgresql-%s" .Release.Name ((semver .Values.cluster.image.tag).Major | toString) | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create chart name and version as used by the chart label.
|
||||||
|
*/}}
|
||||||
|
{{- define "cluster.chart" -}}
|
||||||
|
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Common labels
|
||||||
|
*/}}
|
||||||
|
{{- define "cluster.labels" -}}
|
||||||
|
helm.sh/chart: {{ include "cluster.chart" . }}
|
||||||
|
{{ include "cluster.selectorLabels" . }}
|
||||||
|
{{- if .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
||||||
|
{{- end }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Selector labels
|
||||||
|
*/}}
|
||||||
|
{{- define "cluster.selectorLabels" -}}
|
||||||
|
app.kubernetes.io/name: {{ include "cluster.name" . }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/part-of: cloudnative-pg
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Generate name for object store credentials
|
||||||
|
*/}}
|
||||||
|
{{- define "cluster.recoveryCredentials" -}}
|
||||||
|
{{- if .Values.recovery.endpointCredentials -}}
|
||||||
|
{{- .Values.recovery.endpointCredentials -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- printf "%s-backup-secret" (include "cluster.name" .) | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- define "cluster.backupCredentials" -}}
|
||||||
|
{{- if .Values.backup.endpointCredentials -}}
|
||||||
|
{{- .Values.backup.endpointCredentials -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- printf "%s-backup-secret" (include "cluster.name" .) | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Generate backup server name
|
||||||
|
*/}}
|
||||||
|
{{- define "cluster.backupName" -}}
|
||||||
|
{{- if .Values.backup.backupName -}}
|
||||||
|
{{- .Values.backup.backupName -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{ include "cluster.name" . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Generate recovery server name
|
||||||
|
*/}}
|
||||||
|
{{- define "cluster.recoveryServerName" -}}
|
||||||
|
{{- if .Values.recovery.recoveryServerName -}}
|
||||||
|
{{- .Values.recovery.recoveryServerName -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- printf "%s-backup-%s" (include "cluster.name" .) (toString .Values.recovery.recoveryIndex) | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Generate recovery instance name
|
||||||
|
*/}}
|
||||||
|
{{- define "cluster.recoveryInstanceName" -}}
|
||||||
|
{{- if .Values.recovery.recoveryInstanceName -}}
|
||||||
|
{{- .Values.recovery.recoveryInstanceName -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{ include "cluster.name" . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
52
charts/postgres-cluster/templates/cluster.yaml
Normal file
52
charts/postgres-cluster/templates/cluster.yaml
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
apiVersion: postgresql.cnpg.io/v1
|
||||||
|
kind: Cluster
|
||||||
|
metadata:
|
||||||
|
name: {{ include "cluster.name" . }}-cluster
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
{{- with .Values.cluster.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "cluster.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.cluster.additionalLabels }}
|
||||||
|
{{ toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
instances: {{ .Values.cluster.instances }}
|
||||||
|
imageName: "{{ .Values.cluster.image.repository }}:{{ .Values.cluster.image.tag }}"
|
||||||
|
imagePullPolicy: {{ .Values.cluster.image.pullPolicy }}
|
||||||
|
postgresUID: {{ .Values.cluster.postgresUID }}
|
||||||
|
postgresGID: {{ .Values.cluster.postgresGID }}
|
||||||
|
walStorage:
|
||||||
|
size: {{ .Values.cluster.walStorage.size }}
|
||||||
|
storageClass: {{ .Values.cluster.walStorage.storageClass }}
|
||||||
|
storage:
|
||||||
|
size: {{ .Values.cluster.storage.size }}
|
||||||
|
storageClass: {{ .Values.cluster.storage.storageClass }}
|
||||||
|
{{- with .Values.cluster.resources }}
|
||||||
|
resources:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{ end }}
|
||||||
|
{{- with .Values.cluster.affinity }}
|
||||||
|
affinity:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
priorityClassName: {{ .Values.cluster.priorityClassName }}
|
||||||
|
primaryUpdateMethod: {{ .Values.cluster.primaryUpdateMethod }}
|
||||||
|
primaryUpdateStrategy: {{ .Values.cluster.primaryUpdateStrategy }}
|
||||||
|
logLevel: {{ .Values.cluster.logLevel }}
|
||||||
|
postgresql:
|
||||||
|
shared_preload_libraries:
|
||||||
|
{{- if eq .Values.type "timescaledb" }}
|
||||||
|
- timescaledb
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.cluster.postgresql.parameters }}
|
||||||
|
parameters:
|
||||||
|
{{- toYaml . | nindent 6 }}
|
||||||
|
{{ end }}
|
||||||
|
monitoring:
|
||||||
|
enablePodMonitor: {{ and .Values.cluster.monitoring.enabled .Values.cluster.monitoring.podMonitor.enabled }}
|
||||||
|
|
||||||
|
{{ include "cluster.bootstrap" . | nindent 2 }}
|
||||||
|
{{ include "cluster.backup" . | nindent 2 }}
|
30
charts/postgres-cluster/templates/prometheus-rule.yaml
Normal file
30
charts/postgres-cluster/templates/prometheus-rule.yaml
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
{{- if and .Values.cluster.monitoring.enabled .Values.cluster.monitoring.prometheusRule.enabled -}}
|
||||||
|
apiVersion: monitoring.coreos.com/v1
|
||||||
|
kind: PrometheusRule
|
||||||
|
metadata:
|
||||||
|
name: {{ include "cluster.name" . }}-alert-rules
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "cluster.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.cluster.additionalLabels }}
|
||||||
|
{{ toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
groups:
|
||||||
|
- name: cloudnative-pg/{{ include "cluster.name" . }}
|
||||||
|
rules:
|
||||||
|
{{- $dict := dict "excludeRules" .Values.cluster.monitoring.prometheusRule.excludeRules -}}
|
||||||
|
{{- $_ := set $dict "value" "{{ $value }}" -}}
|
||||||
|
{{- $_ := set $dict "namespace" .Release.Namespace -}}
|
||||||
|
{{- $_ := set $dict "cluster" (printf "%s-cluster" (include "cluster.name" .) ) -}}
|
||||||
|
{{- $_ := set $dict "labels" (dict "job" "{{ $labels.job }}" "node" "{{ $labels.node }}" "pod" "{{ $labels.pod }}") -}}
|
||||||
|
{{- $_ := set $dict "podSelector" (printf "%s-cluster-([1-9][0-9]*)$" (include "cluster.name" .) ) -}}
|
||||||
|
{{- $_ := set $dict "Values" .Values -}}
|
||||||
|
{{- $_ := set $dict "Template" .Template -}}
|
||||||
|
{{- range $path, $_ := .Files.Glob "prometheus_rules/**.yaml" }}
|
||||||
|
{{- $tpl := tpl ($.Files.Get $path) $dict | nindent 10 | trim -}}
|
||||||
|
{{- with $tpl }}
|
||||||
|
- {{ $tpl }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{ end }}
|
18
charts/postgres-cluster/templates/scheduled-backup.yaml
Normal file
18
charts/postgres-cluster/templates/scheduled-backup.yaml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{{ if .Values.backup.enabled }}
|
||||||
|
apiVersion: postgresql.cnpg.io/v1
|
||||||
|
kind: ScheduledBackup
|
||||||
|
metadata:
|
||||||
|
name: {{ include "cluster.name" . }}-scheduled-backup
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "cluster.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.cluster.additionalLabels }}
|
||||||
|
{{ toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
immediate: true
|
||||||
|
schedule: {{ .Values.backup.schedule }}
|
||||||
|
backupOwnerReference: self
|
||||||
|
cluster:
|
||||||
|
name: {{ include "cluster.name" . }}-cluster
|
||||||
|
{{ end }}
|
197
charts/postgres-cluster/values.yaml
Normal file
197
charts/postgres-cluster/values.yaml
Normal file
@@ -0,0 +1,197 @@
|
|||||||
|
# -- Override the name of the cluster
|
||||||
|
nameOverride: ""
|
||||||
|
|
||||||
|
###
|
||||||
|
# -- Type of the CNPG database. Available types:
|
||||||
|
# * `postgresql`
|
||||||
|
# * `postgis`
|
||||||
|
# * `timescaledb`
|
||||||
|
type: postgresql
|
||||||
|
|
||||||
|
###
|
||||||
|
# Cluster mode of operation. Available modes:
|
||||||
|
# * `standalone` - Default mode. Creates new or updates an existing CNPG cluster.
|
||||||
|
# * `recovery` - Same as standalone but creates a cluster from a backup, object store or via pg_basebackup
|
||||||
|
# * `replica` - Create database as a replica from another CNPG cluster
|
||||||
|
mode: standalone
|
||||||
|
|
||||||
|
cluster:
|
||||||
|
instances: 3
|
||||||
|
|
||||||
|
image:
|
||||||
|
repository: ghcr.io/cloudnative-pg/postgresql
|
||||||
|
tag: "16.3"
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
|
||||||
|
# The UID and GID of the postgres user inside the image
|
||||||
|
postgresUID: 26
|
||||||
|
postgresGID: 26
|
||||||
|
|
||||||
|
walStorage:
|
||||||
|
size: 2Gi
|
||||||
|
storageClass: ""
|
||||||
|
storage:
|
||||||
|
size: 10Gi
|
||||||
|
storageClass: ""
|
||||||
|
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: 256Mi
|
||||||
|
cpu: 10m
|
||||||
|
limits:
|
||||||
|
memory: 1Gi
|
||||||
|
cpu: 800m
|
||||||
|
hugepages-2Mi: 256Mi
|
||||||
|
|
||||||
|
# See: https://cloudnative-pg.io/documentation/current/cloudnative-pg.v1/#postgresql-cnpg-io-v1-AffinityConfiguration
|
||||||
|
affinity:
|
||||||
|
enablePodAntiAffinity: true
|
||||||
|
topologyKey: kubernetes.io/hostname
|
||||||
|
|
||||||
|
additionalLabels: {}
|
||||||
|
annotations: {}
|
||||||
|
|
||||||
|
priorityClassName: ""
|
||||||
|
|
||||||
|
# Method to follow to upgrade the primary server during a rolling update procedure, after all replicas have been
|
||||||
|
# successfully updated. It can be switchover (default) or in-place (restart).
|
||||||
|
primaryUpdateMethod: switchover
|
||||||
|
|
||||||
|
# Strategy to follow to upgrade the primary server during a rolling update procedure, after all replicas have been
|
||||||
|
# successfully updated: it can be automated (unsupervised - default) or manual (supervised)
|
||||||
|
primaryUpdateStrategy: unsupervised
|
||||||
|
|
||||||
|
logLevel: "info"
|
||||||
|
|
||||||
|
monitoring:
|
||||||
|
enabled: false
|
||||||
|
podMonitor:
|
||||||
|
enabled: true
|
||||||
|
prometheusRule:
|
||||||
|
enabled: true
|
||||||
|
excludeRules: []
|
||||||
|
|
||||||
|
# See: https://cloudnative-pg.io/documentation/current/cloudnative-pg.v1/#postgresql-cnpg-io-v1-PostgresConfiguration
|
||||||
|
postgresql:
|
||||||
|
parameters:
|
||||||
|
shared_buffers: 128MB
|
||||||
|
max_slot_wal_keep_size: 2000MB
|
||||||
|
hot_standby_feedback: "on"
|
||||||
|
|
||||||
|
# BootstrapInitDB is the configuration of the bootstrap process when initdb is used.
|
||||||
|
# See: https://cloudnative-pg.io/documentation/current/bootstrap/
|
||||||
|
# See: https://cloudnative-pg.io/documentation/current/cloudnative-pg.v1/#postgresql-cnpg-io-v1-bootstrapinitdb
|
||||||
|
initdb:
|
||||||
|
{}
|
||||||
|
# database: app
|
||||||
|
# owner: app
|
||||||
|
# secret: "" # Name of the secret containing the initial credentials for the owner of the user database. If empty a new secret will be created from scratch
|
||||||
|
# postInitApplicationSQL:
|
||||||
|
# - CREATE TABLE IF NOT EXISTS example;
|
||||||
|
|
||||||
|
recovery:
|
||||||
|
# Point in time recovery target in RFC3339 format
|
||||||
|
pitrTarget:
|
||||||
|
time: ""
|
||||||
|
|
||||||
|
# S3 https endpoint and the s3:// path
|
||||||
|
endpointURL: ""
|
||||||
|
destinationPath: ""
|
||||||
|
|
||||||
|
# Specifies secret that contains a CA bundle to validate a privately signed certificate, should contain the key ca-bundle.crt
|
||||||
|
endpointCA: ""
|
||||||
|
|
||||||
|
# Specifies secret that contains S3 credentials, should contain the keys ACCESS_KEY_ID and ACCESS_SECRET_KEY
|
||||||
|
endpointCredentials: ""
|
||||||
|
|
||||||
|
# Generate external cluster name, uses: {{ .Release.Name }}postgresql-<major version>-cluster-backup-index-{{ .Values.recovery.recoveryIndex }}
|
||||||
|
recoveryIndex: 1
|
||||||
|
|
||||||
|
# Name of the recovery cluster in the object store, defaults to "cluster.name"
|
||||||
|
recoveryServerName: ""
|
||||||
|
|
||||||
|
# Name of the recovery cluster in the object store, defaults to ".Release.Name"
|
||||||
|
recoveryInstanceName: ""
|
||||||
|
|
||||||
|
wal:
|
||||||
|
# WAL compression method. One of `` (for no compression), `gzip`, `bzip2` or `snappy`.
|
||||||
|
compression: snappy
|
||||||
|
# Whether to instruct the storage provider to encrypt WAL files. One of `` (use the storage container default), `AES256` or `aws:kms`.
|
||||||
|
encryption: ""
|
||||||
|
# Number of WAL files to be archived or restored in parallel.
|
||||||
|
maxParallel: 2
|
||||||
|
data:
|
||||||
|
# Data compression method. One of `` (for no compression), `gzip`, `bzip2` or `snappy`.
|
||||||
|
compression: snappy
|
||||||
|
# Whether to instruct the storage provider to encrypt data files. One of `` (use the storage container default), `AES256` or `aws:kms`.
|
||||||
|
encryption: ""
|
||||||
|
# Number of data files to be archived or restored in parallel.
|
||||||
|
jobs: 2
|
||||||
|
|
||||||
|
replica:
|
||||||
|
# See https://cloudnative-pg.io/documentation/current/database_import/
|
||||||
|
# * `microservice` - Single database import as expected from cnpg clusters
|
||||||
|
# * `monolith` - Import multiple databases and roles
|
||||||
|
importType: microservice
|
||||||
|
|
||||||
|
# If type microservice only one database is allowed, default is app as standard in cnpg clusters
|
||||||
|
importDatabases:
|
||||||
|
- app
|
||||||
|
|
||||||
|
# If type microservice no roles are imported and ignored
|
||||||
|
importRoles: []
|
||||||
|
|
||||||
|
# If import type is monolith postImportApplicationSQL is not supported and ignored
|
||||||
|
postImportApplicationSQL: []
|
||||||
|
|
||||||
|
# External cluster connection, password specifies a secret name and the key containing the password value
|
||||||
|
externalCluster:
|
||||||
|
connectionParameters:
|
||||||
|
host: postgresql
|
||||||
|
user: app
|
||||||
|
dbname: app
|
||||||
|
password:
|
||||||
|
name: postgresql
|
||||||
|
key: password
|
||||||
|
|
||||||
|
backup:
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
# S3 endpoint starting with "https://"
|
||||||
|
endpointURL: ""
|
||||||
|
|
||||||
|
# S3 path starting with "s3://"
|
||||||
|
destinationPath: ""
|
||||||
|
|
||||||
|
# Specifies secret that contains a CA bundle to validate a privately signed certificate, should contain the key ca-bundle.crt
|
||||||
|
endpointCA: ""
|
||||||
|
|
||||||
|
# Specifies secret that contains S3 credentials, should contain the keys ACCESS_KEY_ID and ACCESS_SECRET_KEY
|
||||||
|
endpointCredentials: ""
|
||||||
|
|
||||||
|
# Generate external cluster name, creates: postgresql-{{ .Release.Name }}-cluster-backup-index-{{ .Values.backups.backupIndex }}"
|
||||||
|
backupIndex: 1
|
||||||
|
|
||||||
|
# Name of the backup cluster in the object store, defaults to "cluster.name"
|
||||||
|
backupName: ""
|
||||||
|
|
||||||
|
wal:
|
||||||
|
# WAL compression method. One of `` (for no compression), `gzip`, `bzip2` or `snappy`.
|
||||||
|
compression: snappy
|
||||||
|
# Whether to instruct the storage provider to encrypt WAL files. One of `` (use the storage container default), `AES256` or `aws:kms`.
|
||||||
|
encryption: ""
|
||||||
|
# Number of WAL files to be archived or restored in parallel.
|
||||||
|
maxParallel: 2
|
||||||
|
data:
|
||||||
|
# Data compression method. One of `` (for no compression), `gzip`, `bzip2` or `snappy`.
|
||||||
|
compression: snappy
|
||||||
|
# Whether to instruct the storage provider to encrypt data files. One of `` (use the storage container default), `AES256` or `aws:kms`.
|
||||||
|
encryption: ""
|
||||||
|
# Number of data files to be archived or restored in parallel.
|
||||||
|
jobs: 2
|
||||||
|
|
||||||
|
# Retention policy for backups
|
||||||
|
retentionPolicy: "30d"
|
||||||
|
|
||||||
|
# Scheduled backup in cron format
|
||||||
|
schedule: "0 0 0 * * *"
|
6017
index.yaml
6017
index.yaml
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user