init
This commit is contained in:
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
|
175
.github/renovate.json
vendored
Normal file
175
.github/renovate.json
vendored
Normal file
@@ -0,0 +1,175 @@
|
|||||||
|
{
|
||||||
|
"$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 service images",
|
||||||
|
"matchDepNames": [
|
||||||
|
"dpage/pgadmin4",
|
||||||
|
"ghcr.io/cloudnative-pg/postgresql",
|
||||||
|
"hashicorp/vault",
|
||||||
|
"portainer/portainer-ce",
|
||||||
|
"redis/redis-stack-server",
|
||||||
|
"unpoller/unpoller"
|
||||||
|
],
|
||||||
|
"matchDatasources": [
|
||||||
|
"docker"
|
||||||
|
],
|
||||||
|
"addLabels": [
|
||||||
|
"service",
|
||||||
|
"image"
|
||||||
|
],
|
||||||
|
"automerge": false,
|
||||||
|
"minimumReleaseAge": "3 days"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Label service charts",
|
||||||
|
"matchDepNames": [
|
||||||
|
"argo-cd",
|
||||||
|
"authentik",
|
||||||
|
"cert-manager",
|
||||||
|
"cilium",
|
||||||
|
"cloudnative-pg",
|
||||||
|
"democratic-csi",
|
||||||
|
"external-secrets",
|
||||||
|
"gitea",
|
||||||
|
"grafana",
|
||||||
|
"intel-device-plugins-gpu",
|
||||||
|
"intel-device-plugins-operator",
|
||||||
|
"kube-prometheus-stack",
|
||||||
|
"kubelet-serving-cert-approver",
|
||||||
|
"kubernetes-cloudflare-ddns",
|
||||||
|
"loki",
|
||||||
|
"metallb",
|
||||||
|
"metrics-server",
|
||||||
|
"nfs-subdir-external-provisioner",
|
||||||
|
"node-feature-discovery",
|
||||||
|
"pgadmin4",
|
||||||
|
"portainer",
|
||||||
|
"postgres-cluster",
|
||||||
|
"prometheus-operator-crds",
|
||||||
|
"promtail",
|
||||||
|
"redis",
|
||||||
|
"rook-ceph-cluster",
|
||||||
|
"rook-ceph",
|
||||||
|
"speedtest-exporter",
|
||||||
|
"traefik",
|
||||||
|
"unpoller",
|
||||||
|
"vault"
|
||||||
|
],
|
||||||
|
"matchDatasources": [
|
||||||
|
"helm"
|
||||||
|
],
|
||||||
|
"addLabels": [
|
||||||
|
"service",
|
||||||
|
"chart"
|
||||||
|
],
|
||||||
|
"automerge": false,
|
||||||
|
"minimumReleaseAge": "3 days"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Label application images",
|
||||||
|
"matchDepNames": [
|
||||||
|
"deluan/navidrome",
|
||||||
|
"ghcr.io/advplyr/audiobookshelf",
|
||||||
|
"ghcr.io/linuxserver/calibre-web",
|
||||||
|
"jellyfin/jellyfin",
|
||||||
|
"linuxserver/code-server",
|
||||||
|
"vikunja/api",
|
||||||
|
"vikunja/frontend"
|
||||||
|
],
|
||||||
|
"matchDatasources": [
|
||||||
|
"docker"
|
||||||
|
],
|
||||||
|
"addLabels": [
|
||||||
|
"application",
|
||||||
|
"image"
|
||||||
|
],
|
||||||
|
"automerge": false,
|
||||||
|
"minimumReleaseAge": "3 days"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Label application charts",
|
||||||
|
"matchDepNames": [
|
||||||
|
"audiobookshelf",
|
||||||
|
"calibre-server",
|
||||||
|
"calibre-web",
|
||||||
|
"code-server",
|
||||||
|
"cops",
|
||||||
|
"freshrss",
|
||||||
|
"home-assistant",
|
||||||
|
"homepage",
|
||||||
|
"jellyfin",
|
||||||
|
"libation",
|
||||||
|
"navidrome",
|
||||||
|
"outline",
|
||||||
|
"plex",
|
||||||
|
"tubearchivist",
|
||||||
|
"tubearchivist-to-jellyfin",
|
||||||
|
"vikunja"
|
||||||
|
],
|
||||||
|
"matchDatasources": [
|
||||||
|
"helm"
|
||||||
|
],
|
||||||
|
"addLabels": [
|
||||||
|
"application",
|
||||||
|
"chart"
|
||||||
|
],
|
||||||
|
"automerge": false,
|
||||||
|
"minimumReleaseAge": "3 days"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Automerge the plex image",
|
||||||
|
"matchDepNames": [
|
||||||
|
"ghcr.io/onedr0p/plex"
|
||||||
|
],
|
||||||
|
"matchDatasources": [
|
||||||
|
"docker"
|
||||||
|
],
|
||||||
|
"addLabels": [
|
||||||
|
"application",
|
||||||
|
"image"
|
||||||
|
],
|
||||||
|
"versioning": "regex:^(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)\\.(?<build>\\d+)-(?<revision>.+)?$",
|
||||||
|
"automerge": true,
|
||||||
|
"automergeType": "branch",
|
||||||
|
"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 }}
|
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.
|
7
README.md
Normal file
7
README.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
# alexlebens.net
|
||||||
|
|
||||||
|
GitOps definied infrastrucutre for the alexlebens.net domain.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
This project is licensed under the terms of the Apache 2.0 License license.
|
11
clusters/cl01tl/applications/audiobookshelf/Chart.yaml
Normal file
11
clusters/cl01tl/applications/audiobookshelf/Chart.yaml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: audiobookshelf
|
||||||
|
version: 0.0.1
|
||||||
|
sources:
|
||||||
|
- https://github.com/advplyr/audiobookshelf
|
||||||
|
- https://github.com/k8s-home-lab/helm-charts/tree/master/charts/stable/audiobookshelf
|
||||||
|
dependencies:
|
||||||
|
- name: audiobookshelf
|
||||||
|
version: 2.0.0
|
||||||
|
repository: https://k8s-home-lab.github.io/helm-charts/
|
||||||
|
appVersion: "2.8.0"
|
@@ -0,0 +1,40 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: audiobookshelf-nfs-storage-backup
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
volumeMode: Filesystem
|
||||||
|
storageClassName: nfs-client
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: audiobookshelf-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
volumeName: audiobookshelf-nfs-storage
|
||||||
|
storageClassName: nfs-client
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
@@ -0,0 +1,25 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: audiobookshelf-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
storageClassName: nfs-client
|
||||||
|
capacity:
|
||||||
|
storage: 1Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
nfs:
|
||||||
|
path: {{ .Values.storage.nfs.path }}
|
||||||
|
server: {{ .Values.storage.nfs.server }}
|
||||||
|
mountOptions:
|
||||||
|
- vers=4
|
||||||
|
- minorversion=1
|
||||||
|
- noac
|
48
clusters/cl01tl/applications/audiobookshelf/values.yaml
Normal file
48
clusters/cl01tl/applications/audiobookshelf/values.yaml
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
audiobookshelf:
|
||||||
|
image:
|
||||||
|
repository: ghcr.io/advplyr/audiobookshelf
|
||||||
|
tag: 2.9.0
|
||||||
|
env:
|
||||||
|
TZ: US/Central
|
||||||
|
ingress:
|
||||||
|
main:
|
||||||
|
enabled: true
|
||||||
|
ingressClassName: traefik
|
||||||
|
annotations:
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
|
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt-issuer
|
||||||
|
hosts:
|
||||||
|
- host: audiobookshelf.alexlebens.net
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
tls:
|
||||||
|
- secretName: audiobookshelf-secret-tls
|
||||||
|
hosts:
|
||||||
|
- audiobookshelf.alexlebens.net
|
||||||
|
persistence:
|
||||||
|
config:
|
||||||
|
enabled: true
|
||||||
|
mountPath: /config
|
||||||
|
accessMode: ReadWriteOnce
|
||||||
|
size: 2Gi
|
||||||
|
metadata:
|
||||||
|
enabled: true
|
||||||
|
mountPath: /metadata
|
||||||
|
accessMode: ReadWriteOnce
|
||||||
|
size: 10Gi
|
||||||
|
backup:
|
||||||
|
enabled: true
|
||||||
|
mountPath: /metadata/backups
|
||||||
|
type: pvc
|
||||||
|
existingClaim: audiobookshelf-nfs-storage-backup
|
||||||
|
audiobooks:
|
||||||
|
enabled: true
|
||||||
|
mountPath: /mnt/store/
|
||||||
|
type: pvc
|
||||||
|
existingClaim: audiobookshelf-nfs-storage
|
||||||
|
storage:
|
||||||
|
nfs:
|
||||||
|
path: /volume2/Storage
|
||||||
|
server: synologybond.alexlebens.net
|
11
clusters/cl01tl/applications/calibre-server/Chart.yaml
Normal file
11
clusters/cl01tl/applications/calibre-server/Chart.yaml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: calibre-server
|
||||||
|
version: 1.0.0
|
||||||
|
sources:
|
||||||
|
- https://github.com/kovidgoyal/calibre
|
||||||
|
- https://github.com/alexlebens/helm-charts/tree/main/charts/calibre-server
|
||||||
|
dependencies:
|
||||||
|
- name: calibre-server
|
||||||
|
version: 0.0.8
|
||||||
|
repository: http://alexlebens.github.io/helm-charts
|
||||||
|
appVersion: 7.5.1
|
@@ -0,0 +1,19 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: calibre-server-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
volumeName: calibre-server-nfs-storage
|
||||||
|
storageClassName: nfs-client
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
@@ -0,0 +1,25 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: calibre-server-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
storageClassName: nfs-client
|
||||||
|
capacity:
|
||||||
|
storage: 1Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
nfs:
|
||||||
|
path: {{ index .Values "calibre-server" "persistence" "books" "nfs" "path" }}
|
||||||
|
server: {{ index .Values "calibre-server" "persistence" "books" "nfs" "server" }}
|
||||||
|
mountOptions:
|
||||||
|
- vers=4
|
||||||
|
- minorversion=1
|
||||||
|
- noac
|
20
clusters/cl01tl/applications/calibre-server/values.yaml
Normal file
20
clusters/cl01tl/applications/calibre-server/values.yaml
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
calibre-server:
|
||||||
|
deployment:
|
||||||
|
env:
|
||||||
|
TZ: US/Central
|
||||||
|
ingressRoute:
|
||||||
|
enabled: true
|
||||||
|
http:
|
||||||
|
host: calibre-server.alexlebens.net
|
||||||
|
authentik:
|
||||||
|
outpost: authentik-outpost-proxy
|
||||||
|
namespace: authentik
|
||||||
|
persistence:
|
||||||
|
config:
|
||||||
|
storageClassName: ceph-block
|
||||||
|
storageSize: 5Gi
|
||||||
|
books:
|
||||||
|
claimName: calibre-server-nfs-storage
|
||||||
|
nfs:
|
||||||
|
path: /volume2/Storage/Calibre
|
||||||
|
server: synologybond.alexlebens.net
|
11
clusters/cl01tl/applications/calibre-web/Chart.yaml
Normal file
11
clusters/cl01tl/applications/calibre-web/Chart.yaml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: calibre-web
|
||||||
|
version: 0.0.1
|
||||||
|
sources:
|
||||||
|
- https://github.com/janeczku/calibre-web
|
||||||
|
- https://github.com/k8s-home-lab/helm-charts/tree/master/charts/stable/calibre-web
|
||||||
|
dependencies:
|
||||||
|
- name: calibre-web
|
||||||
|
version: 9.0.2
|
||||||
|
repository: https://k8s-home-lab.github.io/helm-charts/
|
||||||
|
appVersion: v0.6.21
|
@@ -0,0 +1,33 @@
|
|||||||
|
apiVersion: traefik.io/v1alpha1
|
||||||
|
kind: IngressRoute
|
||||||
|
metadata:
|
||||||
|
name: {{ .Release.Name }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: web
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
entryPoints:
|
||||||
|
- websecure
|
||||||
|
routes:
|
||||||
|
- kind: Rule
|
||||||
|
match: "Host(`{{ .Values.ingressRoute.host }}`)"
|
||||||
|
middlewares:
|
||||||
|
- name: "authentik-{{ .Release.Name }}"
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
priority: 10
|
||||||
|
services:
|
||||||
|
- kind: Service
|
||||||
|
name: {{ .Release.Name }}
|
||||||
|
port: {{ .Values.ingressRoute.port }}
|
||||||
|
- kind: Rule
|
||||||
|
match: "Host(`{{ .Values.ingressRoute.host }}`) && PathPrefix(`/outpost.goauthentik.io/`)"
|
||||||
|
priority: 15
|
||||||
|
services:
|
||||||
|
- kind: Service
|
||||||
|
name: {{ .Values.ingressRoute.authentik.outpost }}
|
||||||
|
port: {{ .Values.ingressRoute.authentik.port }}
|
||||||
|
namespace: {{ .Values.ingressRoute.authentik.namespace }}
|
@@ -0,0 +1,27 @@
|
|||||||
|
apiVersion: traefik.io/v1alpha1
|
||||||
|
kind: Middleware
|
||||||
|
metadata:
|
||||||
|
name: "authentik-{{ .Release.Name }}"
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: auth
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
forwardAuth:
|
||||||
|
address: "http://{{ .Values.ingressRoute.authentik.outpost }}.authentik:{{ .Values.ingressRoute.authentik.port }}/outpost.goauthentik.io/auth/traefik"
|
||||||
|
trustForwardHeader: true
|
||||||
|
authResponseHeaders:
|
||||||
|
- X-authentik-username
|
||||||
|
- X-authentik-groups
|
||||||
|
- X-authentik-email
|
||||||
|
- X-authentik-name
|
||||||
|
- X-authentik-uid
|
||||||
|
- X-authentik-jwt
|
||||||
|
- X-authentik-meta-jwks
|
||||||
|
- X-authentik-meta-outpost
|
||||||
|
- X-authentik-meta-provider
|
||||||
|
- X-authentik-meta-app
|
||||||
|
- X-authentik-meta-version
|
@@ -0,0 +1,19 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: calibre-web-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
volumeName: calibre-web-nfs-storage
|
||||||
|
storageClassName: nfs-client
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
@@ -0,0 +1,25 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: calibre-web-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
storageClassName: nfs-client
|
||||||
|
capacity:
|
||||||
|
storage: 1Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
nfs:
|
||||||
|
path: {{ .Values.storage.storage.nfs.path }}
|
||||||
|
server: {{ .Values.storage.storage.nfs.server }}
|
||||||
|
mountOptions:
|
||||||
|
- vers=4
|
||||||
|
- minorversion=1
|
||||||
|
- noac
|
33
clusters/cl01tl/applications/calibre-web/values.yaml
Normal file
33
clusters/cl01tl/applications/calibre-web/values.yaml
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
calibre-web:
|
||||||
|
image:
|
||||||
|
repository: ghcr.io/linuxserver/calibre-web
|
||||||
|
tag: 0.6.21-ls253
|
||||||
|
env:
|
||||||
|
TZ: US/Central
|
||||||
|
DOCKER_MODS: linuxserver/mods:universal-calibre
|
||||||
|
ingress:
|
||||||
|
main:
|
||||||
|
enabled: false
|
||||||
|
persistence:
|
||||||
|
config:
|
||||||
|
enabled: true
|
||||||
|
mountPath: /config
|
||||||
|
accessMode: ReadWriteOnce
|
||||||
|
size: 5Gi
|
||||||
|
media:
|
||||||
|
enabled: true
|
||||||
|
mountPath: /books
|
||||||
|
type: pvc
|
||||||
|
existingClaim: calibre-web-nfs-storage
|
||||||
|
ingressRoute:
|
||||||
|
host: calibre.alexlebens.net
|
||||||
|
port: 8083
|
||||||
|
authentik:
|
||||||
|
outpost: authentik-outpost-proxy
|
||||||
|
port: 9000
|
||||||
|
namespace: authentik
|
||||||
|
storage:
|
||||||
|
storage:
|
||||||
|
nfs:
|
||||||
|
path: /volume2/Storage/Calibre
|
||||||
|
server: synologybond.alexlebens.net
|
12
clusters/cl01tl/applications/code-server/Chart.yaml
Normal file
12
clusters/cl01tl/applications/code-server/Chart.yaml
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: code-server
|
||||||
|
version: 0.0.1
|
||||||
|
sources:
|
||||||
|
- https://github.com/coder/code-server
|
||||||
|
- https://github.com/linuxserver/docker-code-server
|
||||||
|
- https://gitlab.com/alexander-chernov/helm/code-server
|
||||||
|
dependencies:
|
||||||
|
- name: code-server
|
||||||
|
version: 0.1.1
|
||||||
|
repository: https://charts.alekc.dev
|
||||||
|
appVersion: "4.22.0"
|
@@ -0,0 +1,23 @@
|
|||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: codeserver-password-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: web
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: password
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /code-server/auth
|
||||||
|
metadataPolicy: None
|
||||||
|
property: password
|
@@ -0,0 +1,19 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: code-server-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
volumeMode: Filesystem
|
||||||
|
storageClassName: nfs-client
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
34
clusters/cl01tl/applications/code-server/values.yaml
Normal file
34
clusters/cl01tl/applications/code-server/values.yaml
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
code-server:
|
||||||
|
image:
|
||||||
|
repository: linuxserver/code-server
|
||||||
|
tag: 4.89.1
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
className: traefik
|
||||||
|
annotations:
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
|
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt-issuer
|
||||||
|
hosts:
|
||||||
|
- host: codeserver.alexlebens.net
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
tls:
|
||||||
|
- secretName: codeserver-secret-tls
|
||||||
|
hosts:
|
||||||
|
- codeserver.alexlebens.net
|
||||||
|
env:
|
||||||
|
simple:
|
||||||
|
TZ: US/Central
|
||||||
|
DEFAULT_WORKSPACE: /config
|
||||||
|
full:
|
||||||
|
- name: SUDO_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
key: password
|
||||||
|
name: codeserver-password-secret
|
||||||
|
optional: false
|
||||||
|
persistence:
|
||||||
|
existingClaim: code-server-nfs-storage
|
||||||
|
enabled: true
|
11
clusters/cl01tl/applications/cops/Chart.yaml
Normal file
11
clusters/cl01tl/applications/cops/Chart.yaml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: cops
|
||||||
|
version: 0.0.1
|
||||||
|
sources:
|
||||||
|
- https://github.com/mikespub-org/seblucas-cops
|
||||||
|
- http://alexlebens.github.io/helm-charts
|
||||||
|
dependencies:
|
||||||
|
- name: cops
|
||||||
|
version: 0.0.3
|
||||||
|
repository: http://alexlebens.github.io/helm-charts
|
||||||
|
appVersion: 1.1.3
|
@@ -0,0 +1,19 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: cops-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
volumeName: cops-nfs-storage
|
||||||
|
storageClassName: nfs-client
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
@@ -0,0 +1,25 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: cops-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
storageClassName: nfs-client
|
||||||
|
capacity:
|
||||||
|
storage: 1Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
nfs:
|
||||||
|
path: {{ .Values.storage.books.nfsPath }}
|
||||||
|
server: {{ .Values.storage.books.nfsServer }}
|
||||||
|
mountOptions:
|
||||||
|
- vers=4
|
||||||
|
- minorversion=1
|
||||||
|
- noac
|
22
clusters/cl01tl/applications/cops/values.yaml
Normal file
22
clusters/cl01tl/applications/cops/values.yaml
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
cops:
|
||||||
|
deployment:
|
||||||
|
env:
|
||||||
|
TZ: US/Central
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
annotations:
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
|
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt-issuer
|
||||||
|
className: traefik
|
||||||
|
host: calibre-content.alexlebens.net
|
||||||
|
persistence:
|
||||||
|
config:
|
||||||
|
storageClassName: ceph-block
|
||||||
|
storageSize: 1Gi
|
||||||
|
books:
|
||||||
|
claimName: cops-nfs-storage
|
||||||
|
storage:
|
||||||
|
books:
|
||||||
|
nfsPath: /volume2/Storage/Calibre
|
||||||
|
nfsServer: synologybond.alexlebens.net
|
15
clusters/cl01tl/applications/freshrss/Chart.yaml
Normal file
15
clusters/cl01tl/applications/freshrss/Chart.yaml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: freshrss
|
||||||
|
version: 1.0.0
|
||||||
|
sources:
|
||||||
|
- https://github.com/FreshRSS/FreshRSS
|
||||||
|
- https://github.com/alexlebens/helm-charts/tree/main/charts/hfreshrss
|
||||||
|
dependencies:
|
||||||
|
- name: freshrss
|
||||||
|
version: 0.0.3
|
||||||
|
repository: http://alexlebens.github.io/helm-charts
|
||||||
|
- name: postgres-cluster
|
||||||
|
alias: postgres-16-cluster
|
||||||
|
version: 3.0.0
|
||||||
|
repository: http://alexlebens.github.io/helm-charts
|
||||||
|
appVersion: "1.23.1"
|
@@ -0,0 +1,94 @@
|
|||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: freshrss-oidc-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: web
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: OIDC_CLIENT_ID
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /authentik/oidc/freshrss
|
||||||
|
metadataPolicy: None
|
||||||
|
property: client
|
||||||
|
- secretKey: OIDC_CLIENT_SECRET
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /authentik/oidc/freshrss
|
||||||
|
metadataPolicy: None
|
||||||
|
property: secret
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: freshrss-install-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: web
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: FRESHRSS_INSTALL
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /freshrss/config
|
||||||
|
metadataPolicy: None
|
||||||
|
property: FRESHRSS_INSTALL
|
||||||
|
- secretKey: FRESHRSS_USER
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /freshrss/config
|
||||||
|
metadataPolicy: None
|
||||||
|
property: FRESHRSS_USER
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: freshrss-postgresql-16-cluster-backup-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: freshrss-postgresql-16-cluster-backup-secret
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: database
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: ACCESS_KEY_ID
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /aws/keys/cl01tl-freshrss-postgresql
|
||||||
|
metadataPolicy: None
|
||||||
|
property: access_key
|
||||||
|
- secretKey: ACCESS_SECRET_KEY
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /aws/keys/cl01tl-freshrss-postgresql
|
||||||
|
metadataPolicy: None
|
||||||
|
property: secret_key
|
42
clusters/cl01tl/applications/freshrss/values.yaml
Normal file
42
clusters/cl01tl/applications/freshrss/values.yaml
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
freshrss:
|
||||||
|
deployment:
|
||||||
|
env:
|
||||||
|
TZ: US/Central
|
||||||
|
CRON_MIN: 13,43
|
||||||
|
OIDC_ENABLED: 1
|
||||||
|
OIDC_PROVIDER_METADATA_URL: https://authentik.alexlebens.net/application/o/freshrss/.well-known/openid-configuration
|
||||||
|
OIDC_X_FORWARDED_HEADERS: X-Forwarded-Port X-Forwarded-Proto X-Forwarded-Host
|
||||||
|
OIDC_SCOPES: openid email profile
|
||||||
|
OIDC_REMOTE_USER_CLAIM: preferred_username
|
||||||
|
envFrom:
|
||||||
|
- secretRef:
|
||||||
|
name: freshrss-oidc-secret
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
className: traefik
|
||||||
|
annotations:
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
|
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt-issuer
|
||||||
|
host: rss.alexlebens.net
|
||||||
|
persistence:
|
||||||
|
config:
|
||||||
|
storageClassName: ceph-block
|
||||||
|
storageSize: 5Gi
|
||||||
|
postgres-16-cluster:
|
||||||
|
mode: standalone
|
||||||
|
kubernetesClusterName: cl01tl
|
||||||
|
cluster:
|
||||||
|
walStorage:
|
||||||
|
storageClass: local-path
|
||||||
|
storage:
|
||||||
|
storageClass: local-path
|
||||||
|
monitoring:
|
||||||
|
enabled: true
|
||||||
|
backup:
|
||||||
|
enabled: true
|
||||||
|
endpointURL: https://s3.us-east-2.amazonaws.com
|
||||||
|
destinationPath: s3://cl01tl-postgresql-backups/freshrss
|
||||||
|
endpointCredentials: freshrss-postgresql-16-cluster-backup-secret
|
||||||
|
backupIndex: 1
|
||||||
|
retentionPolicy: 14d
|
11
clusters/cl01tl/applications/home-assistant/Chart.yaml
Normal file
11
clusters/cl01tl/applications/home-assistant/Chart.yaml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: home-assistant
|
||||||
|
version: 1.0.0
|
||||||
|
sources:
|
||||||
|
- https://github.com/home-assistant
|
||||||
|
- https://github.com/alexlebens/helm-charts/tree/main/charts/home-assistant
|
||||||
|
dependencies:
|
||||||
|
- name: home-assistant
|
||||||
|
version: 0.1.15
|
||||||
|
repository: http://alexlebens.github.io/helm-charts
|
||||||
|
appVersion: v2024.5.3
|
@@ -0,0 +1,48 @@
|
|||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: home-assistant-codeserver-password-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: web
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: SUDO_PASSWORD
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /home-assistant/auth
|
||||||
|
metadataPolicy: None
|
||||||
|
property: SUDO_PASSWORD
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: home-assistant-token-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: web
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: bearerToken
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /home-assistant/auth
|
||||||
|
metadataPolicy: None
|
||||||
|
property: bearerToken
|
46
clusters/cl01tl/applications/home-assistant/values.yaml
Normal file
46
clusters/cl01tl/applications/home-assistant/values.yaml
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
home-assistant:
|
||||||
|
deployment:
|
||||||
|
env:
|
||||||
|
TZ: US/Central
|
||||||
|
ingressRoute:
|
||||||
|
enabled: true
|
||||||
|
host: homeassistant.alexlebens.net
|
||||||
|
authentik:
|
||||||
|
outpost: authentik-outpost-proxy
|
||||||
|
namespace: authentik
|
||||||
|
metrics:
|
||||||
|
enabled: true
|
||||||
|
serviceMonitor:
|
||||||
|
bearerTokenSecret:
|
||||||
|
name: home-assistant-token-secret
|
||||||
|
key: bearerToken
|
||||||
|
prometheusRule:
|
||||||
|
enabled: true
|
||||||
|
rules:
|
||||||
|
- alert: HomeAssistantAbsent
|
||||||
|
annotations:
|
||||||
|
description: Home Assistant has disappeared from Prometheus service discovery.
|
||||||
|
summary: Home Assistant is down.
|
||||||
|
expr: |
|
||||||
|
absent(up{job=~".*home-assistant.*"} == 1)
|
||||||
|
for: 5m
|
||||||
|
labels:
|
||||||
|
severity: critical
|
||||||
|
persistence:
|
||||||
|
config:
|
||||||
|
storageClassName: ceph-block
|
||||||
|
storageSize: 1Gi
|
||||||
|
codeserver:
|
||||||
|
enabled: true
|
||||||
|
env:
|
||||||
|
TZ: US/Central
|
||||||
|
DEFAULT_WORKSPACE: /config
|
||||||
|
envFrom:
|
||||||
|
- secretRef:
|
||||||
|
name: home-assistant-codeserver-password-secret
|
||||||
|
ingressRoute:
|
||||||
|
enabled: true
|
||||||
|
host: homeassistant-codeserver.alexlebens.net
|
||||||
|
authentik:
|
||||||
|
outpost: authentik-outpost-proxy
|
||||||
|
namespace: authentik
|
18
clusters/cl01tl/applications/homepage-dev/Chart.yaml
Normal file
18
clusters/cl01tl/applications/homepage-dev/Chart.yaml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: homepage-dev
|
||||||
|
version: 1.0.0
|
||||||
|
home: https://outline.alexlebens.net/doc/homepage-dev-s2clWoI5EC
|
||||||
|
sources:
|
||||||
|
- https://github.com/gethomepage/homepage
|
||||||
|
- https://github.com/cloudflare/cloudflared
|
||||||
|
- https://github.com/bjw-s/helm-charts/blob/main/charts/other/app-template/values.yaml
|
||||||
|
dependencies:
|
||||||
|
- name: app-template
|
||||||
|
alias: homepage
|
||||||
|
repository: https://bjw-s.github.io/helm-charts/
|
||||||
|
version: 3.1.0
|
||||||
|
- name: app-template
|
||||||
|
alias: cloudflared
|
||||||
|
repository: https://bjw-s.github.io/helm-charts/
|
||||||
|
version: 3.1.0
|
||||||
|
appVersion: v0.8.12
|
@@ -0,0 +1,23 @@
|
|||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: homepage-dev-cloudflared-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: homepage-dev-cloudflared-secret
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: web
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: cf-tunnel-token
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /cloudflare/tunnels/homepage-dev
|
||||||
|
metadataPolicy: None
|
||||||
|
property: token
|
225
clusters/cl01tl/applications/homepage-dev/values.yaml
Normal file
225
clusters/cl01tl/applications/homepage-dev/values.yaml
Normal file
@@ -0,0 +1,225 @@
|
|||||||
|
homepage:
|
||||||
|
global:
|
||||||
|
nameOverride: homepage
|
||||||
|
controllers:
|
||||||
|
main:
|
||||||
|
type: deployment
|
||||||
|
annotations:
|
||||||
|
reloader.stakater.com/auto: "true"
|
||||||
|
strategy: Recreate
|
||||||
|
containers:
|
||||||
|
main:
|
||||||
|
image:
|
||||||
|
repository: ghcr.io/gethomepage/homepage
|
||||||
|
tag: v0.8.13
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 1000m
|
||||||
|
memory: 512Mi
|
||||||
|
requests:
|
||||||
|
cpu: 10m
|
||||||
|
memory: 128Mi
|
||||||
|
serviceAccount:
|
||||||
|
create: true
|
||||||
|
configMaps:
|
||||||
|
config:
|
||||||
|
enabled: true
|
||||||
|
data:
|
||||||
|
docker.yaml: ""
|
||||||
|
kubernetes.yaml: ""
|
||||||
|
settings.yaml: |
|
||||||
|
favicon: https://alexlebens-dev.nyc3.digitaloceanspaces.com/cl02do/assets/icon_white.png
|
||||||
|
headerStyle: clean
|
||||||
|
hideVersion: true
|
||||||
|
color: slate
|
||||||
|
background:
|
||||||
|
image: https://alexlebens-dev.nyc3.digitaloceanspaces.com/cl02do/assets/background.jpg
|
||||||
|
theme: dark
|
||||||
|
disableCollapse: true
|
||||||
|
layout:
|
||||||
|
- Media:
|
||||||
|
icon: mdi-multimedia-#ffffff
|
||||||
|
- Applications:
|
||||||
|
icon: mdi-application-#ffffff
|
||||||
|
widgets.yaml: |
|
||||||
|
- logo:
|
||||||
|
icon: https://alexlebens-dev.nyc3.digitaloceanspaces.com/cl02do/assets/icon_white.png
|
||||||
|
- datetime:
|
||||||
|
text_size: xl
|
||||||
|
format:
|
||||||
|
dateStyle: long
|
||||||
|
timeStyle: short
|
||||||
|
hour12: false
|
||||||
|
- openmeteo:
|
||||||
|
label: Denver
|
||||||
|
latitude: 39.73
|
||||||
|
longitude: 104.99
|
||||||
|
units: metric
|
||||||
|
cache: 5
|
||||||
|
services.yaml: |
|
||||||
|
- Media:
|
||||||
|
- Plex:
|
||||||
|
icon: plex.png
|
||||||
|
href: https://plex.alexlebens.net
|
||||||
|
description: Media server
|
||||||
|
siteMonitor: http://plex.plex:32400
|
||||||
|
statusStyle: dot
|
||||||
|
- Overseerr:
|
||||||
|
icon: overseerr.png
|
||||||
|
description: Requests
|
||||||
|
href: https://overseerr.alexlebens.net
|
||||||
|
siteMonitor: http://overseerr.overseerr:5055
|
||||||
|
statusStyle: dot
|
||||||
|
- Jellyfin:
|
||||||
|
icon: jellyfin.png
|
||||||
|
description: Media server
|
||||||
|
href: https://jellyfin.alexlebens.net/
|
||||||
|
siteMonitor: http://jellyfin.jellyfin:8096
|
||||||
|
statusStyle: dot
|
||||||
|
- TubeAchivist:
|
||||||
|
icon: tube-archivist.png
|
||||||
|
description: Youtube downloader
|
||||||
|
href: https://tubearchivist.alexlebens.net/login/
|
||||||
|
siteMonitor: http://tubearchivist.tubearchivist:8000
|
||||||
|
statusStyle: dot
|
||||||
|
- Navidrome:
|
||||||
|
icon: navidrome.png
|
||||||
|
description: Music
|
||||||
|
href: https://navidrome.alexlebens.net
|
||||||
|
siteMonitor: http://navidrome.navidrome:4533
|
||||||
|
statusStyle: dot
|
||||||
|
- Audiobookshelf:
|
||||||
|
icon: audiobookshelf.png
|
||||||
|
description: Audiobooks, Books, and Podcasts
|
||||||
|
href: https://audiobookshelf.alexlebens.net
|
||||||
|
siteMonitor: http://audiobookshelf.audiobookshelf:80
|
||||||
|
statusStyle: dot
|
||||||
|
- Calibre:
|
||||||
|
icon: calibre-web.png
|
||||||
|
description: Books
|
||||||
|
href: https://calibre.alexlebens.net
|
||||||
|
siteMonitor: http://calibre-web.calibre-web:8083
|
||||||
|
statusStyle: dot
|
||||||
|
- Applications:
|
||||||
|
- Ghost:
|
||||||
|
icon: ghost.png
|
||||||
|
description: Website and blog
|
||||||
|
href: https://blog.alexlebens.dev
|
||||||
|
siteMonitor: https://blog.alexlebens.dev
|
||||||
|
statusStyle: dot
|
||||||
|
- Chat:
|
||||||
|
icon: element.svg
|
||||||
|
description: Web client for Matrix chat
|
||||||
|
href: https://chat.alexlebens.dev
|
||||||
|
siteMonitor: https://chat.alexlebens.dev
|
||||||
|
statusStyle: dot
|
||||||
|
- Home Assistant:
|
||||||
|
icon: home-assistant.png
|
||||||
|
description: Home automation
|
||||||
|
href: https://homeassistant.alexlebens.net
|
||||||
|
siteMonitor: http://home-assistant.home-assistant:8123
|
||||||
|
statusStyle: dot
|
||||||
|
- Vikunja:
|
||||||
|
icon: vikunja.png
|
||||||
|
description: Notes and tasks
|
||||||
|
href: https://vikunja.alexlebens.net
|
||||||
|
siteMonitor: http://vikunja-frontend.vikunja:80
|
||||||
|
statusStyle: dot
|
||||||
|
- Taiga:
|
||||||
|
icon: taiga.png
|
||||||
|
description: Project planning
|
||||||
|
href: https://taiga.alexlebens.net
|
||||||
|
siteMonitor: http://taiga-front.taiga:80
|
||||||
|
statusStyle: dot
|
||||||
|
- Penpot:
|
||||||
|
icon: https://raw.githubusercontent.com/penpot/penpot/362d4ea47f06d169dd6e0a34cb9d141200e646e6/frontend/resources/images/icons/penpot-logo-icon.svg
|
||||||
|
description: Web design
|
||||||
|
href: https://penpot.alexlebens.net
|
||||||
|
siteMonitor: http://penpot.penpot:80
|
||||||
|
statusStyle: dot
|
||||||
|
- Outline:
|
||||||
|
icon: outline.png
|
||||||
|
description: Wiki
|
||||||
|
href: https://outline.alexlebens.net
|
||||||
|
siteMonitor: http://outline.outline:3000
|
||||||
|
statusStyle: dot
|
||||||
|
- FreshRss:
|
||||||
|
icon: freshrss.svg
|
||||||
|
description: Rss reader
|
||||||
|
href: https://rss.alexlebens.net
|
||||||
|
siteMonitor: http://freshrss.freshrss:80
|
||||||
|
statusStyle: dot
|
||||||
|
bookmarks.yaml: ""
|
||||||
|
service:
|
||||||
|
http:
|
||||||
|
controller: main
|
||||||
|
ports:
|
||||||
|
http:
|
||||||
|
port: 80
|
||||||
|
targetPort: 3000
|
||||||
|
protocol: HTTP
|
||||||
|
persistence:
|
||||||
|
config:
|
||||||
|
enabled: true
|
||||||
|
type: configMap
|
||||||
|
name: homepage-dev-config
|
||||||
|
advancedMounts:
|
||||||
|
main:
|
||||||
|
main:
|
||||||
|
- path: /app/config/bookmarks.yaml
|
||||||
|
readOnly: true
|
||||||
|
mountPropagation: None
|
||||||
|
subPath: bookmarks.yaml
|
||||||
|
- path: /app/config/docker.yaml
|
||||||
|
readOnly: true
|
||||||
|
mountPropagation: None
|
||||||
|
subPath: docker.yaml
|
||||||
|
- path: /app/config/kubernetes.yaml
|
||||||
|
readOnly: true
|
||||||
|
mountPropagation: None
|
||||||
|
subPath: kubernetes.yaml
|
||||||
|
- path: /app/config/services.yaml
|
||||||
|
readOnly: true
|
||||||
|
mountPropagation: None
|
||||||
|
subPath: services.yaml
|
||||||
|
- path: /app/config/settings.yaml
|
||||||
|
readOnly: true
|
||||||
|
mountPropagation: None
|
||||||
|
subPath: settings.yaml
|
||||||
|
- path: /app/config/widgets.yaml
|
||||||
|
readOnly: true
|
||||||
|
mountPropagation: None
|
||||||
|
subPath: widgets.yaml
|
||||||
|
cloudflared:
|
||||||
|
global:
|
||||||
|
nameOverride: cloudflared
|
||||||
|
controllers:
|
||||||
|
main:
|
||||||
|
type: deployment
|
||||||
|
strategy: Recreate
|
||||||
|
containers:
|
||||||
|
main:
|
||||||
|
image:
|
||||||
|
repository: cloudflare/cloudflared
|
||||||
|
tag: "2024.5.0"
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
args:
|
||||||
|
- tunnel
|
||||||
|
- --no-autoupdate
|
||||||
|
- run
|
||||||
|
- --token
|
||||||
|
- $(CF_MANAGED_TUNNEL_TOKEN)
|
||||||
|
env:
|
||||||
|
- name: CF_MANAGED_TUNNEL_TOKEN
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: homepage-dev-cloudflared-secret
|
||||||
|
key: cf-tunnel-token
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 128Mi
|
||||||
|
requests:
|
||||||
|
cpu: 10m
|
||||||
|
memory: 64Mi
|
12
clusters/cl01tl/applications/homepage/Chart.yaml
Normal file
12
clusters/cl01tl/applications/homepage/Chart.yaml
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: homepage-front
|
||||||
|
version: 1.0.0
|
||||||
|
home: https://outline.alexlebens.net/doc/homepage-s2clWoI5EC
|
||||||
|
sources:
|
||||||
|
- https://github.com/gethomepage/homepage
|
||||||
|
- https://github.com/alexlebens/helm-charts/tree/main/charts/homepage
|
||||||
|
dependencies:
|
||||||
|
- name: homepage
|
||||||
|
version: 0.0.15
|
||||||
|
repository: http://alexlebens.github.io/helm-charts
|
||||||
|
appVersion: v0.8.12
|
@@ -0,0 +1,44 @@
|
|||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: homepage-back-key-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: web
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: HOMEPAGE_VAR_SYNOLOGY_USER
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /synology/auth
|
||||||
|
metadataPolicy: None
|
||||||
|
property: user
|
||||||
|
- secretKey: HOMEPAGE_VAR_SYNOLOGY_PASSWORD
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /synology/auth
|
||||||
|
metadataPolicy: None
|
||||||
|
property: password
|
||||||
|
- secretKey: HOMEPAGE_VAR_UNIFI_USER
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /unifi/auth
|
||||||
|
metadataPolicy: None
|
||||||
|
property: user
|
||||||
|
- secretKey: HOMEPAGE_VAR_UNIFI_PASSWORD
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /unifi/auth
|
||||||
|
metadataPolicy: None
|
||||||
|
property: password
|
420
clusters/cl01tl/applications/homepage/values.yaml
Normal file
420
clusters/cl01tl/applications/homepage/values.yaml
Normal file
@@ -0,0 +1,420 @@
|
|||||||
|
homepage:
|
||||||
|
deployment:
|
||||||
|
annotations:
|
||||||
|
reloader.stakater.com/auto: "true"
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
memory: 2Gi
|
||||||
|
cpu: 1000m
|
||||||
|
envFrom:
|
||||||
|
- secretRef:
|
||||||
|
name: homepage-back-key-secret
|
||||||
|
ingressRoute:
|
||||||
|
host: home.alexlebens.net
|
||||||
|
authentik:
|
||||||
|
outpost: authentik-outpost-proxy
|
||||||
|
namespace: authentik
|
||||||
|
config:
|
||||||
|
widgets:
|
||||||
|
- logo:
|
||||||
|
icon: https://alexlebens-dev.nyc3.digitaloceanspaces.com/cl02do/assets/icon_white.png
|
||||||
|
- kubernetes:
|
||||||
|
cluster:
|
||||||
|
show: true
|
||||||
|
cpu: true
|
||||||
|
memory: true
|
||||||
|
showLabel: true
|
||||||
|
label: "Cluster"
|
||||||
|
nodes:
|
||||||
|
show: false
|
||||||
|
- datetime:
|
||||||
|
text_size: xl
|
||||||
|
format:
|
||||||
|
dateStyle: long
|
||||||
|
timeStyle: short
|
||||||
|
hour12: false
|
||||||
|
- openmeteo:
|
||||||
|
label: Denver
|
||||||
|
latitude: 39.73
|
||||||
|
longitude: 104.99
|
||||||
|
units: metric
|
||||||
|
cache: 5
|
||||||
|
services:
|
||||||
|
- Media:
|
||||||
|
- Plex:
|
||||||
|
icon: plex.png
|
||||||
|
href: https://plex.alexlebens.net
|
||||||
|
description: Media server
|
||||||
|
siteMonitor: http://plex.plex:32400
|
||||||
|
statusStyle: dot
|
||||||
|
- Overseerr:
|
||||||
|
icon: overseerr.png
|
||||||
|
description: Requests
|
||||||
|
href: https://overseerr.alexlebens.net
|
||||||
|
siteMonitor: http://overseerr.overseerr:5055
|
||||||
|
statusStyle: dot
|
||||||
|
- Jellyfin:
|
||||||
|
icon: jellyfin.png
|
||||||
|
description: Media server
|
||||||
|
href: https://jellyfin.alexlebens.net/
|
||||||
|
siteMonitor: http://jellyfin.jellyfin:8096
|
||||||
|
statusStyle: dot
|
||||||
|
- Kyoo:
|
||||||
|
icon: https://raw.githubusercontent.com/zoriya/Kyoo/master/icons/icon-256x256.png
|
||||||
|
description: Media server
|
||||||
|
href: https://kyoo.alexlebens.net/
|
||||||
|
siteMonitor: http://kyoo-front.kyoo:8901
|
||||||
|
statusStyle: dot
|
||||||
|
- TubeAchivist:
|
||||||
|
icon: tube-archivist.png
|
||||||
|
description: Youtube downloader
|
||||||
|
href: https://tubearchivist.alexlebens.net/login/
|
||||||
|
siteMonitor: http://tubearchivist.tubearchivist:8000
|
||||||
|
statusStyle: dot
|
||||||
|
- Navidrome:
|
||||||
|
icon: navidrome.png
|
||||||
|
description: Music
|
||||||
|
href: https://navidrome.alexlebens.net
|
||||||
|
siteMonitor: http://navidrome.navidrome:4533
|
||||||
|
statusStyle: dot
|
||||||
|
- Audiobookshelf:
|
||||||
|
icon: audiobookshelf.png
|
||||||
|
description: Audiobooks, Books, and Podcasts
|
||||||
|
href: https://audiobookshelf.alexlebens.net
|
||||||
|
siteMonitor: http://audiobookshelf.audiobookshelf:80
|
||||||
|
statusStyle: dot
|
||||||
|
- Calibre:
|
||||||
|
icon: calibre-web.png
|
||||||
|
description: Books
|
||||||
|
href: https://calibre.alexlebens.net
|
||||||
|
siteMonitor: http://calibre-web.calibre-web:8083
|
||||||
|
statusStyle: dot
|
||||||
|
- Applications:
|
||||||
|
- Ghost (.dev):
|
||||||
|
icon: ghost.png
|
||||||
|
description: Website and blog
|
||||||
|
href: https://blog.alexlebens.dev
|
||||||
|
siteMonitor: https://blog.alexlebens.dev
|
||||||
|
statusStyle: dot
|
||||||
|
- Chat (.dev):
|
||||||
|
icon: element.svg
|
||||||
|
description: Web client for Matrix chat
|
||||||
|
href: https://chat.alexlebens.dev
|
||||||
|
siteMonitor: https://chat.alexlebens.dev
|
||||||
|
statusStyle: dot
|
||||||
|
- Home Assistant:
|
||||||
|
icon: home-assistant.png
|
||||||
|
description: Home automation
|
||||||
|
href: https://homeassistant.alexlebens.net
|
||||||
|
siteMonitor: http://home-assistant.home-assistant:8123
|
||||||
|
statusStyle: dot
|
||||||
|
- Vikunja:
|
||||||
|
icon: vikunja.png
|
||||||
|
description: Notes and tasks
|
||||||
|
href: https://vikunja.alexlebens.net
|
||||||
|
siteMonitor: http://vikunja-frontend.vikunja:80
|
||||||
|
statusStyle: dot
|
||||||
|
- Taiga:
|
||||||
|
icon: taiga.png
|
||||||
|
description: Project planning
|
||||||
|
href: https://taiga.alexlebens.net
|
||||||
|
siteMonitor: http://taiga-front.taiga:80
|
||||||
|
statusStyle: dot
|
||||||
|
- Penpot:
|
||||||
|
icon: https://raw.githubusercontent.com/penpot/penpot/362d4ea47f06d169dd6e0a34cb9d141200e646e6/frontend/resources/images/icons/penpot-logo-icon.svg
|
||||||
|
description: Web design
|
||||||
|
href: https://penpot.alexlebens.net
|
||||||
|
siteMonitor: http://penpot.penpot:80
|
||||||
|
statusStyle: dot
|
||||||
|
- Outline:
|
||||||
|
icon: outline.png
|
||||||
|
description: Wiki
|
||||||
|
href: https://outline.alexlebens.net
|
||||||
|
siteMonitor: http://outline.outline:3000
|
||||||
|
statusStyle: dot
|
||||||
|
- FreshRss:
|
||||||
|
icon: freshrss.svg
|
||||||
|
description: Rss reader
|
||||||
|
href: https://rss.alexlebens.net
|
||||||
|
siteMonitor: http://freshrss.freshrss:80
|
||||||
|
statusStyle: dot
|
||||||
|
- Code:
|
||||||
|
- Code Server:
|
||||||
|
icon: code-server.png
|
||||||
|
description: VS Code in a browser
|
||||||
|
href: https://codeserver.alexlebens.net
|
||||||
|
siteMonitor: http://code-server.code-server:8443
|
||||||
|
statusStyle: dot
|
||||||
|
- Code Server - Home Assistant:
|
||||||
|
icon: code-server.png
|
||||||
|
description: Edit config for Home Assistant
|
||||||
|
href: https://homeassistant-codeserver.alexlebens.net
|
||||||
|
siteMonitor: http://home-assistant-codeserver.home-assistant:8443
|
||||||
|
statusStyle: dot
|
||||||
|
- Gitea:
|
||||||
|
icon: gitea.png
|
||||||
|
description: Code repository
|
||||||
|
href: https://gitea.alexlebens.net
|
||||||
|
siteMonitor: http://gitea-http.gitea:3000
|
||||||
|
statusStyle: dot
|
||||||
|
- ArgoCD:
|
||||||
|
icon: argocd.png
|
||||||
|
description: Continous Deployment
|
||||||
|
href: https://argocd.alexlebens.net
|
||||||
|
siteMonitor: http://argocd-server.argocd:80
|
||||||
|
statusStyle: dot
|
||||||
|
namespace: argocd
|
||||||
|
- Argo Rollouts:
|
||||||
|
icon: argocd.png
|
||||||
|
description: Deployment mangement and evaluation
|
||||||
|
href: https://argo-rollouts.alexlebens.net
|
||||||
|
siteMonitor: http://argo-rollouts-dashboard.argocd:3100
|
||||||
|
statusStyle: dot
|
||||||
|
namespace: argocd
|
||||||
|
- Argo Workflows:
|
||||||
|
icon: argocd.png
|
||||||
|
description: Workflows and events for ArgoCD
|
||||||
|
href: https://argo-workflows.alexlebens.net
|
||||||
|
siteMonitor: http://argo-workflows-server.argocd:2746
|
||||||
|
statusStyle: dot
|
||||||
|
namespace: argocd
|
||||||
|
- Kargo:
|
||||||
|
icon: https://raw.githubusercontent.com/akuity/kargo/main/ui/public/kargo-icon.png
|
||||||
|
description: Continous Integration
|
||||||
|
href: https://kargo.alexlebens.net
|
||||||
|
siteMonitor: http://kargo-api.argocd:80
|
||||||
|
statusStyle: dot
|
||||||
|
namespace: argocd
|
||||||
|
- Management:
|
||||||
|
- Calibre Server:
|
||||||
|
icon: calibre.png
|
||||||
|
description: Calibre content server
|
||||||
|
href: https://calibre-server.alexlebens.net
|
||||||
|
siteMonitor: http://calibre-server.calibre-server:8080
|
||||||
|
statusStyle: dot
|
||||||
|
- COPS:
|
||||||
|
icon: calibre-web.png
|
||||||
|
description: Calibre OPDS (and HTML) PHP Server
|
||||||
|
href: https://calibre-content.alexlebens.net
|
||||||
|
siteMonitor: http://cops.cops:80
|
||||||
|
statusStyle: dot
|
||||||
|
- Monitoring:
|
||||||
|
- Portainer:
|
||||||
|
icon: portainer.png
|
||||||
|
description: Service monitoring
|
||||||
|
href: https://portainer.alexlebens.net
|
||||||
|
siteMonitor: http://portainer.portainer:9000
|
||||||
|
statusStyle: dot
|
||||||
|
- Headlamp:
|
||||||
|
icon: kubernetes.png
|
||||||
|
description: Kubernetes dashboard
|
||||||
|
href: https://headlamp.alexlebens.net
|
||||||
|
siteMonitor: http://headlamp.headlamp:80
|
||||||
|
statusStyle: dot
|
||||||
|
- Hubble:
|
||||||
|
icon: cilium.png
|
||||||
|
description: Network monitoring for Cilium
|
||||||
|
href: https://hubble.alexlebens.net
|
||||||
|
siteMonitor: http://hubble-ui.kube-system:80
|
||||||
|
statusStyle: dot
|
||||||
|
- Grafana:
|
||||||
|
icon: grafana.png
|
||||||
|
description: Dashboard
|
||||||
|
href: https://grafana.alexlebens.net
|
||||||
|
siteMonitor: https://grafana.alexlebens.net
|
||||||
|
statusStyle: dot
|
||||||
|
- Prometheus:
|
||||||
|
icon: prometheus.png
|
||||||
|
description: Metrics database
|
||||||
|
href: https://prometheus.alexlebens.net
|
||||||
|
siteMonitor: http://kube-prometheus-stack-prometheus.kube-prometheus-stack:9090
|
||||||
|
statusStyle: dot
|
||||||
|
widget:
|
||||||
|
type: prometheus
|
||||||
|
url: http://kube-prometheus-stack-prometheus.kube-prometheus-stack:9090
|
||||||
|
- Alertmanager:
|
||||||
|
icon: alertmanager.png
|
||||||
|
description: Alerting and notification
|
||||||
|
href: https://alertmanager.alexlebens.net
|
||||||
|
siteMonitor: http://kube-prometheus-stack-alertmanager.kube-prometheus-stack:9093
|
||||||
|
statusStyle: dot
|
||||||
|
- Services:
|
||||||
|
- Authentik:
|
||||||
|
icon: authentik.png
|
||||||
|
description: Identity management and provider
|
||||||
|
href: https://authentik.alexlebens.net
|
||||||
|
siteMonitor: http://authentik-server.authentik:80
|
||||||
|
statusStyle: dot
|
||||||
|
- Authentik (.dev):
|
||||||
|
icon: authentik.png
|
||||||
|
description: Identity management and provider
|
||||||
|
href: https://auth.alexlebens.dev
|
||||||
|
siteMonitor: https://auth.alexlebens.dev
|
||||||
|
statusStyle: dot
|
||||||
|
- Traefik - cl01tl:
|
||||||
|
icon: traefik.png
|
||||||
|
description: Reverse proxy
|
||||||
|
href: https://traefik-cl01tl.alexlebens.net/dashboard/#/
|
||||||
|
siteMonitor: https://traefik-cl01tl.alexlebens.net/dashboard/#/
|
||||||
|
statusStyle: dot
|
||||||
|
widget:
|
||||||
|
type: traefik
|
||||||
|
url: https://traefik-cl01tl.alexlebens.net
|
||||||
|
- Traefik - ps08rp:
|
||||||
|
icon: traefik.png
|
||||||
|
description: Reverse proxy
|
||||||
|
href: https://traefik-ps08rp.alexlebens.net/dashboard/#/
|
||||||
|
siteMonitor: https://traefik-ps08rp.alexlebens.net/dashboard/#/
|
||||||
|
statusStyle: dot
|
||||||
|
- Traefik - ps09rp:
|
||||||
|
icon: traefik.png
|
||||||
|
description: Reverse proxy
|
||||||
|
href: https://traefik-ps09rp.alexlebens.net/dashboard/#/
|
||||||
|
siteMonitor: https://traefik-ps09rp.alexlebens.net/dashboard/#/
|
||||||
|
statusStyle: dot
|
||||||
|
- Technitium - ps08rp:
|
||||||
|
icon: technitium.png
|
||||||
|
description: DNS
|
||||||
|
href: https://technitium-ps08rp.alexlebens.net
|
||||||
|
siteMonitor: https://technitium-ps08rp.alexlebens.net
|
||||||
|
statusStyle: dot
|
||||||
|
- Technitium - ps09rp:
|
||||||
|
icon: technitium.png
|
||||||
|
description: DNS
|
||||||
|
href: https://technitium-ps09rp.alexlebens.net
|
||||||
|
siteMonitor: https://technitium-ps09rp.alexlebens.net
|
||||||
|
statusStyle: dot
|
||||||
|
- Hardware:
|
||||||
|
- Unifi:
|
||||||
|
icon: unifi.png
|
||||||
|
description: Manager network hardware
|
||||||
|
href: https://unifi.alexlebens.net
|
||||||
|
siteMonitor: https://unifi.alexlebens.net
|
||||||
|
statusStyle: dot
|
||||||
|
- Synology:
|
||||||
|
icon: synology.png
|
||||||
|
description: Network Attached Storage
|
||||||
|
href: https://synology.alexlebens.net
|
||||||
|
siteMonitor: https://synology.alexlebens.net
|
||||||
|
statusStyle: dot
|
||||||
|
widget:
|
||||||
|
type: diskstation
|
||||||
|
url: https://synology.alexlebens.net
|
||||||
|
username: '{{HOMEPAGE_VAR_SYNOLOGY_USER}}'
|
||||||
|
password: '{{HOMEPAGE_VAR_SYNOLOGY_PASSWORD}}'
|
||||||
|
volume: volume_2
|
||||||
|
- HD Homerun Flex:
|
||||||
|
icon: hdhomerun.png
|
||||||
|
description: TV Tuner
|
||||||
|
href: http://hdhr.alexlebens.net
|
||||||
|
siteMonitor: http://hdhr.alexlebens.net
|
||||||
|
statusStyle: dot
|
||||||
|
- Pi KVM:
|
||||||
|
icon: pikvm.png
|
||||||
|
description: IP KVM
|
||||||
|
href: https://pikvm.alexlebens.net
|
||||||
|
siteMonitor: https://pikvm.alexlebens.net
|
||||||
|
statusStyle: dot
|
||||||
|
- Storage:
|
||||||
|
- Ceph:
|
||||||
|
icon: ceph.png
|
||||||
|
description: Clustered storage
|
||||||
|
href: https://ceph.alexlebens.net
|
||||||
|
siteMonitor: http://rook-ceph-mgr-dashboard.rook-ceph:7000
|
||||||
|
statusStyle: dot
|
||||||
|
- PGAdmin:
|
||||||
|
icon: pgadmin.png
|
||||||
|
description: Postgresql console
|
||||||
|
href: https://pgadmin.alexlebens.net
|
||||||
|
siteMonitor: http://pgadmin-pgadmin4.pgadmin:80
|
||||||
|
statusStyle: dot
|
||||||
|
- Vault:
|
||||||
|
icon: vault.png
|
||||||
|
description: Secret management
|
||||||
|
href: https://vault.alexlebens.net
|
||||||
|
siteMonitor: http://vault.vault:8200
|
||||||
|
statusStyle: dot
|
||||||
|
- Minio:
|
||||||
|
icon: minio.png
|
||||||
|
description: Operator for Minio S3 storage
|
||||||
|
href: https://minio.alexlebens.net
|
||||||
|
siteMonitor: http://console.minio-operator:9090
|
||||||
|
statusStyle: dot
|
||||||
|
- Minio - Outline:
|
||||||
|
icon: minio.png
|
||||||
|
description: Tenant for Outline S3 storage
|
||||||
|
href: https://minio-outline.alexlebens.net
|
||||||
|
siteMonitor: http://minio-outline-console.outline:9090
|
||||||
|
statusStyle: dot
|
||||||
|
- Minio - Penpot:
|
||||||
|
icon: minio.png
|
||||||
|
description: Tenant for Penpot S3 storage
|
||||||
|
href: https://minio-penpot.alexlebens.net
|
||||||
|
siteMonitor: http://minio-penpot-console.penpot:9090
|
||||||
|
statusStyle: dot
|
||||||
|
bookmarks:
|
||||||
|
- External Services:
|
||||||
|
- Github:
|
||||||
|
- abbr: GH
|
||||||
|
href: https://github.com/alexlebens/alexlebens-net
|
||||||
|
- Renovate:
|
||||||
|
- abbr: RN
|
||||||
|
href: https://developer.mend.io/[platform]/alexlebens/alexlebens-net
|
||||||
|
- AWS:
|
||||||
|
- abbr: AW
|
||||||
|
href: https://aws.amazon.com/console/
|
||||||
|
- Cloudflare:
|
||||||
|
- abbr: CF
|
||||||
|
href: https://dash.cloudflare.com/b76e303258b84076ee01fd0f515c0768
|
||||||
|
- Tailscale:
|
||||||
|
- abbr: TS
|
||||||
|
href: https://login.tailscale.com/admin/machines
|
||||||
|
- ProtonVPN:
|
||||||
|
- abbr: PV
|
||||||
|
href: https://account.protonvpn.com/
|
||||||
|
- Pushover:
|
||||||
|
- abbr: PO
|
||||||
|
href: https://pushover.net
|
||||||
|
- ReCaptcha:
|
||||||
|
- abbr: RC
|
||||||
|
href: https://www.google.com/recaptcha/admin/site/698983587
|
||||||
|
- Dashboard Icons:
|
||||||
|
- abbr: DI
|
||||||
|
href: https://github.com/walkxcode/dashboard-icons/tree/main/png
|
||||||
|
settings:
|
||||||
|
favicon: https://alexlebens-dev.nyc3.digitaloceanspaces.com/cl02do/assets/icon_white.png
|
||||||
|
headerStyle: clean
|
||||||
|
hideVersion: true
|
||||||
|
color: slate
|
||||||
|
background:
|
||||||
|
image: https://alexlebens-dev.nyc3.digitaloceanspaces.com/cl02do/assets/background.jpg
|
||||||
|
theme: dark
|
||||||
|
disableCollapse: true
|
||||||
|
layout:
|
||||||
|
- Media:
|
||||||
|
tab: Apps
|
||||||
|
icon: mdi-multimedia-#ffffff
|
||||||
|
- Applications:
|
||||||
|
tab: Apps
|
||||||
|
icon: mdi-application-#ffffff
|
||||||
|
- Code:
|
||||||
|
tab: Tools
|
||||||
|
icon: mdi-code-braces-box-#ffffff
|
||||||
|
- Monitoring:
|
||||||
|
tab: Tools
|
||||||
|
icon: mdi-chart-bar-#ffffff
|
||||||
|
- Management:
|
||||||
|
tab: Tools
|
||||||
|
icon: mdi-content-save-cog-#ffffff
|
||||||
|
- Services:
|
||||||
|
tab: Services
|
||||||
|
icon: mdi-server-network-#ffffff
|
||||||
|
- Hardware:
|
||||||
|
tab: Services
|
||||||
|
icon: mdi-lan-connect-#ffffff
|
||||||
|
- Storage:
|
||||||
|
tab: Services
|
||||||
|
icon: mdi-harddisk-#ffffff
|
||||||
|
- External Services:
|
||||||
|
tab: Bookmarks
|
||||||
|
icon: mdi-cloud-#ffffff
|
11
clusters/cl01tl/applications/jellyfin/Chart.yaml
Normal file
11
clusters/cl01tl/applications/jellyfin/Chart.yaml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: jellyfin
|
||||||
|
version: 0.0.1
|
||||||
|
sources:
|
||||||
|
- https://github.com/jellyfin/jellyfin
|
||||||
|
- https://github.com/loeken/helm-charts/tree/main/charts/jellyfin
|
||||||
|
dependencies:
|
||||||
|
- name: jellyfin
|
||||||
|
version: 10.9.1
|
||||||
|
repository: https://loeken.github.io/helm-charts
|
||||||
|
appVersion: 10.8.13
|
@@ -0,0 +1,40 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: jellyfin-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
volumeName: jellyfin-nfs-storage
|
||||||
|
storageClassName: nfs-client
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: jellyfin-youtube-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
volumeName: jellyfin-youtube-nfs-storage
|
||||||
|
storageClassName: nfs-client
|
||||||
|
accessModes:
|
||||||
|
- ReadOnlyMany
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
@@ -0,0 +1,52 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: jellyfin-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
storageClassName: nfs-client
|
||||||
|
capacity:
|
||||||
|
storage: 1Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
nfs:
|
||||||
|
path: {{ .Values.storage.storage.nfs.path }}
|
||||||
|
server: {{ .Values.storage.storage.nfs.server }}
|
||||||
|
mountOptions:
|
||||||
|
- vers=4
|
||||||
|
- minorversion=1
|
||||||
|
- noac
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: jellyfin-youtube-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
storageClassName: nfs-client
|
||||||
|
capacity:
|
||||||
|
storage: 1Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadOnlyMany
|
||||||
|
nfs:
|
||||||
|
path: {{ .Values.storage.youtube.nfs.path }}
|
||||||
|
server: {{ .Values.storage.youtube.nfs.server }}
|
||||||
|
mountOptions:
|
||||||
|
- vers=4
|
||||||
|
- minorversion=1
|
||||||
|
- noac
|
55
clusters/cl01tl/applications/jellyfin/values.yaml
Normal file
55
clusters/cl01tl/applications/jellyfin/values.yaml
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
jellyfin:
|
||||||
|
env:
|
||||||
|
TZ: US/Central
|
||||||
|
ingress:
|
||||||
|
main:
|
||||||
|
enabled: true
|
||||||
|
ingressClassName: traefik
|
||||||
|
annotations:
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
|
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt-issuer
|
||||||
|
hosts:
|
||||||
|
- host: jellyfin.alexlebens.net
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
tls:
|
||||||
|
- secretName: jellyfin-secret-tls
|
||||||
|
hosts:
|
||||||
|
- jellyfin.alexlebens.net
|
||||||
|
persistence:
|
||||||
|
config:
|
||||||
|
enabled: true
|
||||||
|
mountPath: /config
|
||||||
|
accessMode: ReadWriteOnce
|
||||||
|
size: 40Gi
|
||||||
|
cache:
|
||||||
|
enabled: true
|
||||||
|
mountPath: /cache
|
||||||
|
accessMode: ReadWriteOnce
|
||||||
|
size: 40Gi
|
||||||
|
media:
|
||||||
|
enabled: true
|
||||||
|
mountPath: /mnt/store
|
||||||
|
type: pvc
|
||||||
|
existingClaim: jellyfin-nfs-storage
|
||||||
|
youtube:
|
||||||
|
enabled: true
|
||||||
|
mountPath: /youtube
|
||||||
|
type: pvc
|
||||||
|
existingClaim: jellyfin-youtube-nfs-storage
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
gpu.intel.com/i915: 1
|
||||||
|
limits:
|
||||||
|
gpu.intel.com/i915: 1
|
||||||
|
storage:
|
||||||
|
storage:
|
||||||
|
nfs:
|
||||||
|
path: /volume2/Storage
|
||||||
|
server: synologybond.alexlebens.net
|
||||||
|
youtube:
|
||||||
|
nfs:
|
||||||
|
path: /volume2/Storage/YouTube
|
||||||
|
server: synologybond.alexlebens.net
|
32
clusters/cl01tl/applications/kyoo/Chart.yaml
Normal file
32
clusters/cl01tl/applications/kyoo/Chart.yaml
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: kyoo
|
||||||
|
version: 1.0.0
|
||||||
|
description: A Helm chart for deploying Kyoo
|
||||||
|
keywords:
|
||||||
|
- kyoo
|
||||||
|
- media
|
||||||
|
sources:
|
||||||
|
- https://github.com/zoriya/Kyoo
|
||||||
|
- https://github.com/rabbitmq/rabbitmq-server
|
||||||
|
- https://github.com/bitnami/charts/tree/main/bitnami/rabbitmq
|
||||||
|
- https://github.com/meilisearch/meilisearch
|
||||||
|
- https://github.com/meilisearch/meilisearch-kubernetes/tree/main/charts/meilisearch
|
||||||
|
- https://github.com/alexlebens/helm-charts/charts/postgres-cluster
|
||||||
|
maintainers:
|
||||||
|
- name: alexlebens
|
||||||
|
dependencies:
|
||||||
|
- name: app-template
|
||||||
|
repository: https://bjw-s.github.io/helm-charts/
|
||||||
|
version: 3.1.0
|
||||||
|
- name: rabbitmq
|
||||||
|
version: 14.1.4
|
||||||
|
repository: https://charts.bitnami.com/bitnami
|
||||||
|
- name: meilisearch
|
||||||
|
version: 0.7.0
|
||||||
|
repository: https://meilisearch.github.io/meilisearch-kubernetes
|
||||||
|
- name: postgres-cluster
|
||||||
|
alias: postgres-16-cluster
|
||||||
|
version: 3.0.0
|
||||||
|
repository: http://alexlebens.github.io/helm-charts
|
||||||
|
icon: https://raw.githubusercontent.com/zoriya/Kyoo/master/icons/icon-256x256.png
|
||||||
|
appVersion: v4.5.0
|
183
clusters/cl01tl/applications/kyoo/templates/external-secret.yaml
Normal file
183
clusters/cl01tl/applications/kyoo/templates/external-secret.yaml
Normal file
@@ -0,0 +1,183 @@
|
|||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: kyoo-key-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kyoo-key-secret
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: web
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: key
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /kyoo/authentication
|
||||||
|
metadataPolicy: None
|
||||||
|
property: key
|
||||||
|
- secretKey: kyoo
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /kyoo/authentication
|
||||||
|
metadataPolicy: None
|
||||||
|
property: kyoo
|
||||||
|
- secretKey: tmdb
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /kyoo/authentication
|
||||||
|
metadataPolicy: None
|
||||||
|
property: tmdb
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: kyoo-api-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kyoo-api-secret
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: web
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: kyoo
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /kyoo/api
|
||||||
|
metadataPolicy: None
|
||||||
|
property: kyoo
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: kyoo-oidc-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kyoo-oidc-secret
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: auth
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: client
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /authentik/oidc/kyoo
|
||||||
|
metadataPolicy: None
|
||||||
|
property: client
|
||||||
|
- secretKey: secret
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /authentik/oidc/kyoo
|
||||||
|
metadataPolicy: None
|
||||||
|
property: secret
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: kyoo-rabbitmq-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kyoo-rabbitmq-secret
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: rabbitmq
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: password
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /kyoo/rabbitmq
|
||||||
|
metadataPolicy: None
|
||||||
|
property: password
|
||||||
|
- secretKey: erlang
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /kyoo/rabbitmq
|
||||||
|
metadataPolicy: None
|
||||||
|
property: erlang
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: kyoo-meilisearch-master-key-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kyoo-meilisearch-master-key-secret
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: meilisearch
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: MEILI_MASTER_KEY
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /kyoo/meilisearch
|
||||||
|
metadataPolicy: None
|
||||||
|
property: MEILI_MASTER_KEY
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: kyoo-postgresql-16-cluster-backup-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kyoo-postgresql-16-cluster-backup-secret
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: database
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: ACCESS_KEY_ID
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /aws/keys/cl01tl-kyoo-postgresql
|
||||||
|
metadataPolicy: None
|
||||||
|
property: access_key
|
||||||
|
- secretKey: ACCESS_SECRET_KEY
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /aws/keys/cl01tl-kyoo-postgresql
|
||||||
|
metadataPolicy: None
|
||||||
|
property: secret_key
|
@@ -0,0 +1,32 @@
|
|||||||
|
apiVersion: traefik.io/v1alpha1
|
||||||
|
kind: IngressRoute
|
||||||
|
metadata:
|
||||||
|
name: kyoo
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kyoo
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: web
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
entryPoints:
|
||||||
|
- websecure
|
||||||
|
routes:
|
||||||
|
- kind: Rule
|
||||||
|
match: Host(`kyoo.alexlebens.net`)
|
||||||
|
priority: 10
|
||||||
|
services:
|
||||||
|
- kind: Service
|
||||||
|
name: kyoo-front
|
||||||
|
port: 8901
|
||||||
|
- kind: Rule
|
||||||
|
match: Host(`kyoo.alexlebens.net`) && PathPrefix(`/api/`)
|
||||||
|
middlewares:
|
||||||
|
- name: kyoo-strip-prefix
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
priority: 15
|
||||||
|
services:
|
||||||
|
- kind: Service
|
||||||
|
name: kyoo-back
|
||||||
|
port: 5000
|
15
clusters/cl01tl/applications/kyoo/templates/middleware.yaml
Normal file
15
clusters/cl01tl/applications/kyoo/templates/middleware.yaml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
apiVersion: traefik.io/v1alpha1
|
||||||
|
kind: Middleware
|
||||||
|
metadata:
|
||||||
|
name: kyoo-strip-prefix
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kyoo-strip-prefix
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: auth
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
stripPrefix:
|
||||||
|
prefixes:
|
||||||
|
- /api/
|
@@ -0,0 +1,229 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: kyoo-anime-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kyoo-anime-nfs-storage
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
volumeName: kyoo-anime-nfs-storage
|
||||||
|
storageClassName: nfs-client
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: kyoo-anime-movies-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kyoo-anime-movies-nfs-storage
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
volumeName: kyoo-anime-movies-nfs-storage
|
||||||
|
storageClassName: nfs-client
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: kyoo-documentaries-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kyoo-documentaries-nfs-storage
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
volumeName: kyoo-documentaries-nfs-storage
|
||||||
|
storageClassName: nfs-client
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: kyoo-documentary-shows-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kyoo-documentary-shows-nfs-storage
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
volumeName: kyoo-documentary-shows-nfs-storage
|
||||||
|
storageClassName: nfs-client
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: kyoo-movies-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kyoo-movies-nfs-storage
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
volumeName: kyoo-movies-nfs-storage
|
||||||
|
storageClassName: nfs-client
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: kyoo-movies-4k-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kyoo-movies-4k-nfs-storage
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
volumeName: kyoo-movies-4k-nfs-storage
|
||||||
|
storageClassName: nfs-client
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: kyoo-movies-classics-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kyoo-movies-classics-nfs-storage
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
volumeName: kyoo-movies-classics-nfs-storage
|
||||||
|
storageClassName: nfs-client
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: kyoo-movies-foreign-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kyoo-movies-foreign-nfs-storage
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
volumeName: kyoo-movies-foreign-nfs-storage
|
||||||
|
storageClassName: nfs-client
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: kyoo-stand-up-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kyoo-stand-up-nfs-storage
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
volumeName: kyoo-stand-up-nfs-storage
|
||||||
|
storageClassName: nfs-client
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: kyoo-tv-shows-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kyoo-tv-shows-nfs-storage
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
volumeName: kyoo-tv-shows-nfs-storage
|
||||||
|
storageClassName: nfs-client
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: kyoo-tv-shows-4k-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kyoo-tv-shows-4k-nfs-storage
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
volumeName: kyoo-tv-shows-4k-nfs-storage
|
||||||
|
storageClassName: nfs-client
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
@@ -0,0 +1,295 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: kyoo-anime-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kyoo-anime-nfs-storage
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
storageClassName: nfs-client
|
||||||
|
capacity:
|
||||||
|
storage: 1Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
nfs:
|
||||||
|
path: /volume2/Storage/Anime
|
||||||
|
server: synologybond.alexlebens.net
|
||||||
|
mountOptions:
|
||||||
|
- vers=4
|
||||||
|
- minorversion=1
|
||||||
|
- noac
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: kyoo-anime-movies-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kyoo-anime-movies-nfs-storage
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
storageClassName: nfs-client
|
||||||
|
capacity:
|
||||||
|
storage: 1Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
nfs:
|
||||||
|
path: "/volume2/Storage/Anime Movies"
|
||||||
|
server: synologybond.alexlebens.net
|
||||||
|
mountOptions:
|
||||||
|
- vers=4
|
||||||
|
- minorversion=1
|
||||||
|
- noac
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: kyoo-documentaries-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kyoo-documentaries-nfs-storage
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
storageClassName: nfs-client
|
||||||
|
capacity:
|
||||||
|
storage: 1Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
nfs:
|
||||||
|
path: /volume2/Storage/Documentaries
|
||||||
|
server: synologybond.alexlebens.net
|
||||||
|
mountOptions:
|
||||||
|
- vers=4
|
||||||
|
- minorversion=1
|
||||||
|
- noac
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: kyoo-documentary-shows-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kyoo-documentary-shows-nfs-storage
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
storageClassName: nfs-client
|
||||||
|
capacity:
|
||||||
|
storage: 1Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
nfs:
|
||||||
|
path: "/volume2/Storage/Documentary Shows"
|
||||||
|
server: synologybond.alexlebens.net
|
||||||
|
mountOptions:
|
||||||
|
- vers=4
|
||||||
|
- minorversion=1
|
||||||
|
- noac
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: kyoo-movies-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kyoo-movies-nfs-storage
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
storageClassName: nfs-client
|
||||||
|
capacity:
|
||||||
|
storage: 1Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
nfs:
|
||||||
|
path: /volume2/Storage/Movies
|
||||||
|
server: synologybond.alexlebens.net
|
||||||
|
mountOptions:
|
||||||
|
- vers=4
|
||||||
|
- minorversion=1
|
||||||
|
- noac
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: kyoo-movies-4k-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kyoo-movies-4k-nfs-storage
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
storageClassName: nfs-client
|
||||||
|
capacity:
|
||||||
|
storage: 1Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
nfs:
|
||||||
|
path: "/volume2/Storage/Movies 4K"
|
||||||
|
server: synologybond.alexlebens.net
|
||||||
|
mountOptions:
|
||||||
|
- vers=4
|
||||||
|
- minorversion=1
|
||||||
|
- noac
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: kyoo-movies-classics-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kyoo-movies-classics-nfs-storage
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
storageClassName: nfs-client
|
||||||
|
capacity:
|
||||||
|
storage: 1Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
nfs:
|
||||||
|
path: "/volume2/Storage/Movies Classics"
|
||||||
|
server: synologybond.alexlebens.net
|
||||||
|
mountOptions:
|
||||||
|
- vers=4
|
||||||
|
- minorversion=1
|
||||||
|
- noac
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: kyoo-movies-foreign-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kyoo-movies-foreign-nfs-storage
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
storageClassName: nfs-client
|
||||||
|
capacity:
|
||||||
|
storage: 1Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
nfs:
|
||||||
|
path: "/volume2/Storage/Movies Foreign"
|
||||||
|
server: synologybond.alexlebens.net
|
||||||
|
mountOptions:
|
||||||
|
- vers=4
|
||||||
|
- minorversion=1
|
||||||
|
- noac
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: kyoo-stand-up-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kyoo-stand-up-nfs-storage
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
storageClassName: nfs-client
|
||||||
|
capacity:
|
||||||
|
storage: 1Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
nfs:
|
||||||
|
path: "/volume2/Storage/Stand Up"
|
||||||
|
server: synologybond.alexlebens.net
|
||||||
|
mountOptions:
|
||||||
|
- vers=4
|
||||||
|
- minorversion=1
|
||||||
|
- noac
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: kyoo-tv-shows-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kyoo-tv-shows-nfs-storage
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
storageClassName: nfs-client
|
||||||
|
capacity:
|
||||||
|
storage: 1Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
nfs:
|
||||||
|
path: "/volume2/Storage/TV Shows"
|
||||||
|
server: synologybond.alexlebens.net
|
||||||
|
mountOptions:
|
||||||
|
- vers=4
|
||||||
|
- minorversion=1
|
||||||
|
- noac
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: kyoo-tv-shows-4k-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kyoo-tv-shows-4k-nfs-storage
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
storageClassName: nfs-client
|
||||||
|
capacity:
|
||||||
|
storage: 1Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
nfs:
|
||||||
|
path: "/volume2/Storage/TV Shows 4K"
|
||||||
|
server: synologybond.alexlebens.net
|
||||||
|
mountOptions:
|
||||||
|
- vers=4
|
||||||
|
- minorversion=1
|
||||||
|
- noac
|
590
clusters/cl01tl/applications/kyoo/values.yaml
Normal file
590
clusters/cl01tl/applications/kyoo/values.yaml
Normal file
@@ -0,0 +1,590 @@
|
|||||||
|
app-template:
|
||||||
|
controllers:
|
||||||
|
autosync:
|
||||||
|
type: deployment
|
||||||
|
replicas: 1
|
||||||
|
strategy: Recreate
|
||||||
|
revisionHistoryLimit: 3
|
||||||
|
containers:
|
||||||
|
main:
|
||||||
|
image:
|
||||||
|
repository: ghcr.io/zoriya/kyoo_autosync
|
||||||
|
tag: "4.5.0"
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
env:
|
||||||
|
- name: RABBITMQ_HOST
|
||||||
|
value: kyoo-rabbitmq
|
||||||
|
- name: RABBITMQ_DEFAULT_USER
|
||||||
|
value: kyoo
|
||||||
|
- name: RABBITMQ_DEFAULT_PASS
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: kyoo-rabbitmq-secret
|
||||||
|
key: password
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 512Mi
|
||||||
|
requests:
|
||||||
|
cpu: 10m
|
||||||
|
memory: 128Mi
|
||||||
|
back:
|
||||||
|
type: deployment
|
||||||
|
replicas: 1
|
||||||
|
strategy: Recreate
|
||||||
|
revisionHistoryLimit: 3
|
||||||
|
initContainers:
|
||||||
|
migrations:
|
||||||
|
image:
|
||||||
|
repository: ghcr.io/zoriya/kyoo_migrations
|
||||||
|
tag: "4.5.0"
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
env:
|
||||||
|
- name: POSTGRES_USER
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: kyoo-postgresql-16-cluster-app
|
||||||
|
key: username
|
||||||
|
- name: POSTGRES_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: kyoo-postgresql-16-cluster-app
|
||||||
|
key: password
|
||||||
|
- name: POSTGRES_DB
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: kyoo-postgresql-16-cluster-app
|
||||||
|
key: dbname
|
||||||
|
- name: POSTGRES_SERVER
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: kyoo-postgresql-16-cluster-app
|
||||||
|
key: host
|
||||||
|
- name: POSTGRES_PORT
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: kyoo-postgresql-16-cluster-app
|
||||||
|
key: port
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 500m
|
||||||
|
memory: 512Mi
|
||||||
|
requests:
|
||||||
|
cpu: 10m
|
||||||
|
memory: 256Mi
|
||||||
|
containers:
|
||||||
|
main:
|
||||||
|
image:
|
||||||
|
repository: ghcr.io/zoriya/kyoo_back
|
||||||
|
tag: "4.5.0"
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
env:
|
||||||
|
- name: REQUIRE_ACCOUNT_VERIFICATION
|
||||||
|
value: "false"
|
||||||
|
- name: UNLOGGED_PERMISSIONS
|
||||||
|
value: overall.read
|
||||||
|
- name: DEFAULT_PERMISSIONS
|
||||||
|
value: overall.read,overall.play
|
||||||
|
- name: AUTHENTICATION_SECRET
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: kyoo-key-secret
|
||||||
|
key: key
|
||||||
|
- name: KYOO_APIKEYS
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: kyoo-key-secret
|
||||||
|
key: kyoo
|
||||||
|
- name: THEMOVIEDB_APIKEY
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: kyoo-key-secret
|
||||||
|
key: tmdb
|
||||||
|
- name: PUBLIC_URL
|
||||||
|
value: https://kyoo.alexlebens.net
|
||||||
|
- name: POSTGRES_USER
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: kyoo-postgresql-16-cluster-app
|
||||||
|
key: username
|
||||||
|
- name: POSTGRES_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: kyoo-postgresql-16-cluster-app
|
||||||
|
key: password
|
||||||
|
- name: POSTGRES_DB
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: kyoo-postgresql-16-cluster-app
|
||||||
|
key: dbname
|
||||||
|
- name: POSTGRES_SERVER
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: kyoo-postgresql-16-cluster-app
|
||||||
|
key: host
|
||||||
|
- name: POSTGRES_PORT
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: kyoo-postgresql-16-cluster-app
|
||||||
|
key: port
|
||||||
|
- name: OIDC_SERVICE_NAME
|
||||||
|
value: Authentik
|
||||||
|
- name: OIDC_SERVICE_LOGO
|
||||||
|
value: https://avatars.githubusercontent.com/u/82976448?s=200&v=4
|
||||||
|
- name: OIDC_SERVICE_AUTHORIZATION
|
||||||
|
value: https://authentik.alexlebens.net/application/o/authorize/
|
||||||
|
- name: OIDC_SERVICE_TOKEN
|
||||||
|
value: https://authentik.alexlebens.net/application/o/token/
|
||||||
|
- name: OIDC_SERVICE_PROFILE
|
||||||
|
value: https://authentik.alexlebens.net/application/o/userinfo/
|
||||||
|
- name: OIDC_SERVICE_SCOPE
|
||||||
|
value: "openid profile email"
|
||||||
|
- name: OIDC_SERVICE_CLIENTID
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: kyoo-oidc-secret
|
||||||
|
key: client
|
||||||
|
- name: OIDC_SERVICE_SECRET
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: kyoo-oidc-secret
|
||||||
|
key: secret
|
||||||
|
- name: TRANSCODER_URL
|
||||||
|
value: http://kyoo-transcoder.kyoo:7666
|
||||||
|
- name: MEILI_HOST
|
||||||
|
value: http://kyoo-meilisearch.kyoo:7700
|
||||||
|
- name: MEILI_MASTER_KEY
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: kyoo-meilisearch-master-key-secret
|
||||||
|
key: MEILI_MASTER_KEY
|
||||||
|
- name: RABBITMQ_HOST
|
||||||
|
value: kyoo-rabbitmq
|
||||||
|
- name: RABBITMQ_DEFAULT_USER
|
||||||
|
value: kyoo
|
||||||
|
- name: RABBITMQ_DEFAULT_PASS
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: kyoo-rabbitmq-secret
|
||||||
|
key: password
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 5000m
|
||||||
|
memory: 5Gi
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 256Mi
|
||||||
|
front:
|
||||||
|
type: deployment
|
||||||
|
replicas: 1
|
||||||
|
strategy: Recreate
|
||||||
|
revisionHistoryLimit: 3
|
||||||
|
containers:
|
||||||
|
main:
|
||||||
|
image:
|
||||||
|
repository: ghcr.io/zoriya/kyoo_front
|
||||||
|
tag: "4.5.0"
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
env:
|
||||||
|
- name: KYOO_URL
|
||||||
|
value: http://kyoo-back.kyoo:5000
|
||||||
|
- name: KYOO_APIKEYS
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: kyoo-key-secret
|
||||||
|
key: kyoo
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 500m
|
||||||
|
memory: 512Mi
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 256Mi
|
||||||
|
matcher:
|
||||||
|
type: deployment
|
||||||
|
replicas: 1
|
||||||
|
strategy: Recreate
|
||||||
|
revisionHistoryLimit: 3
|
||||||
|
containers:
|
||||||
|
main:
|
||||||
|
image:
|
||||||
|
repository: ghcr.io/zoriya/kyoo_scanner
|
||||||
|
tag: "4.5.0"
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
args:
|
||||||
|
- matcher
|
||||||
|
env:
|
||||||
|
- name: KYOO_URL
|
||||||
|
value: http://kyoo-back.kyoo:5000
|
||||||
|
- name: KYOO_APIKEYS
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: kyoo-key-secret
|
||||||
|
key: kyoo
|
||||||
|
- name: THEMOVIEDB_APIKEY
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: kyoo-key-secret
|
||||||
|
key: tmdb
|
||||||
|
- name: LIBRARY_LANGUAGES
|
||||||
|
value: en
|
||||||
|
- name: LIBRARY_IGNORE_PATTERN
|
||||||
|
value: .*/[dD]ownloads?/.*
|
||||||
|
- name: RABBITMQ_HOST
|
||||||
|
value: kyoo-rabbitmq
|
||||||
|
- name: RABBITMQ_DEFAULT_USER
|
||||||
|
value: kyoo
|
||||||
|
- name: RABBITMQ_DEFAULT_PASS
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: kyoo-rabbitmq-secret
|
||||||
|
key: password
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 5000m
|
||||||
|
memory: 2Gi
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 256Mi
|
||||||
|
scanner:
|
||||||
|
type: deployment
|
||||||
|
replicas: 1
|
||||||
|
strategy: Recreate
|
||||||
|
revisionHistoryLimit: 3
|
||||||
|
containers:
|
||||||
|
main:
|
||||||
|
image:
|
||||||
|
repository: ghcr.io/zoriya/kyoo_scanner
|
||||||
|
tag: "4.5.0"
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
env:
|
||||||
|
- name: KYOO_URL
|
||||||
|
value: http://kyoo-back.kyoo:5000
|
||||||
|
- name: KYOO_APIKEYS
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: kyoo-key-secret
|
||||||
|
key: kyoo
|
||||||
|
- name: THEMOVIEDB_APIKEY
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: kyoo-key-secret
|
||||||
|
key: tmdb
|
||||||
|
- name: LIBRARY_LANGUAGES
|
||||||
|
value: en
|
||||||
|
- name: LIBRARY_IGNORE_PATTERN
|
||||||
|
value: .*/[dD]ownloads?/.*
|
||||||
|
- name: RABBITMQ_HOST
|
||||||
|
value: kyoo-rabbitmq
|
||||||
|
- name: RABBITMQ_DEFAULT_USER
|
||||||
|
value: kyoo
|
||||||
|
- name: RABBITMQ_DEFAULT_PASS
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: kyoo-rabbitmq-secret
|
||||||
|
key: password
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 5000m
|
||||||
|
memory: 2Gi
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 256Mi
|
||||||
|
transcoder:
|
||||||
|
type: deployment
|
||||||
|
replicas: 1
|
||||||
|
strategy: Recreate
|
||||||
|
revisionHistoryLimit: 3
|
||||||
|
containers:
|
||||||
|
main:
|
||||||
|
image:
|
||||||
|
repository: ghcr.io/zoriya/kyoo_transcoder
|
||||||
|
tag: "4.5.0"
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
env:
|
||||||
|
- name: GOCODER_HWACCEL
|
||||||
|
value: qsv
|
||||||
|
- name: GOCODER_QSV_RENDERER
|
||||||
|
value: /dev/dri/renderD128
|
||||||
|
- name: GOCODER_PRESET
|
||||||
|
value: fast
|
||||||
|
- name: GOCODER_METADATA_ROOT
|
||||||
|
value: /metadata
|
||||||
|
- name: GOCODER_CACHE_ROOT
|
||||||
|
value: /cache
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 5000m
|
||||||
|
memory: 4Gi
|
||||||
|
gpu.intel.com/i915: 1
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 512Mi
|
||||||
|
gpu.intel.com/i915: 1
|
||||||
|
serviceAccount:
|
||||||
|
create: true
|
||||||
|
service:
|
||||||
|
back:
|
||||||
|
controller: back
|
||||||
|
ports:
|
||||||
|
http:
|
||||||
|
port: 5000
|
||||||
|
targetPort: 5000
|
||||||
|
protocol: HTTP
|
||||||
|
front:
|
||||||
|
controller: front
|
||||||
|
ports:
|
||||||
|
http:
|
||||||
|
port: 8901
|
||||||
|
targetPort: 8901
|
||||||
|
protocol: HTTP
|
||||||
|
transcoder:
|
||||||
|
controller: transcoder
|
||||||
|
ports:
|
||||||
|
http:
|
||||||
|
port: 7666
|
||||||
|
targetPort: 7666
|
||||||
|
protocol: HTTP
|
||||||
|
persistence:
|
||||||
|
back:
|
||||||
|
storageClass: ceph-block
|
||||||
|
accessMode: ReadWriteOnce
|
||||||
|
size: 50Gi
|
||||||
|
retain: true
|
||||||
|
advancedMounts:
|
||||||
|
back:
|
||||||
|
main:
|
||||||
|
- path: /metadata
|
||||||
|
readOnly: false
|
||||||
|
metadata:
|
||||||
|
storageClass: ceph-block
|
||||||
|
accessMode: ReadWriteOnce
|
||||||
|
size: 10Gi
|
||||||
|
retain: true
|
||||||
|
advancedMounts:
|
||||||
|
transcoder:
|
||||||
|
main:
|
||||||
|
- path: /metadata
|
||||||
|
readOnly: false
|
||||||
|
cache:
|
||||||
|
type: emptyDir
|
||||||
|
advancedMounts:
|
||||||
|
transcoder:
|
||||||
|
main:
|
||||||
|
- path: /cache
|
||||||
|
readOnly: false
|
||||||
|
anime:
|
||||||
|
existingClaim: kyoo-anime-nfs-storage
|
||||||
|
advancedMounts:
|
||||||
|
scanner:
|
||||||
|
main:
|
||||||
|
- path: "/video/Anime"
|
||||||
|
readOnly: true
|
||||||
|
matcher:
|
||||||
|
main:
|
||||||
|
- path: "/video/Anime"
|
||||||
|
readOnly: true
|
||||||
|
transcoder:
|
||||||
|
main:
|
||||||
|
- path: "/video/Anime"
|
||||||
|
readOnly: true
|
||||||
|
anime-movies:
|
||||||
|
existingClaim: kyoo-anime-movies-nfs-storage
|
||||||
|
advancedMounts:
|
||||||
|
scanner:
|
||||||
|
main:
|
||||||
|
- path: "/video/Anime Movies"
|
||||||
|
readOnly: true
|
||||||
|
matcher:
|
||||||
|
main:
|
||||||
|
- path: "/video/Anime Movies"
|
||||||
|
readOnly: true
|
||||||
|
transcoder:
|
||||||
|
main:
|
||||||
|
- path: "/video/Anime Movies"
|
||||||
|
readOnly: true
|
||||||
|
documentaries:
|
||||||
|
existingClaim: kyoo-documentaries-nfs-storage
|
||||||
|
advancedMounts:
|
||||||
|
scanner:
|
||||||
|
main:
|
||||||
|
- path: /video/Documentaries
|
||||||
|
readOnly: true
|
||||||
|
matcher:
|
||||||
|
main:
|
||||||
|
- path: /video/Documentaries
|
||||||
|
readOnly: true
|
||||||
|
transcoder:
|
||||||
|
main:
|
||||||
|
- path: /video/Documentaries
|
||||||
|
readOnly: true
|
||||||
|
documentary-shows:
|
||||||
|
existingClaim: kyoo-documentary-shows-nfs-storage
|
||||||
|
advancedMounts:
|
||||||
|
scanner:
|
||||||
|
main:
|
||||||
|
- path: "/video/Documentary Shows"
|
||||||
|
readOnly: true
|
||||||
|
matcher:
|
||||||
|
main:
|
||||||
|
- path: "/video/Documentary Shows"
|
||||||
|
readOnly: true
|
||||||
|
transcoder:
|
||||||
|
main:
|
||||||
|
- path: "/video/Documentary Shows"
|
||||||
|
readOnly: true
|
||||||
|
movies:
|
||||||
|
existingClaim: kyoo-movies-nfs-storage
|
||||||
|
advancedMounts:
|
||||||
|
scanner:
|
||||||
|
main:
|
||||||
|
- path: "/video/Movies"
|
||||||
|
readOnly: true
|
||||||
|
matcher:
|
||||||
|
main:
|
||||||
|
- path: "/video/Movies"
|
||||||
|
readOnly: true
|
||||||
|
transcoder:
|
||||||
|
main:
|
||||||
|
- path: "/video/Movies"
|
||||||
|
readOnly: true
|
||||||
|
movies-4k:
|
||||||
|
existingClaim: kyoo-movies-4k-nfs-storage
|
||||||
|
advancedMounts:
|
||||||
|
scanner:
|
||||||
|
main:
|
||||||
|
- path: "/video/Movies 4K"
|
||||||
|
readOnly: true
|
||||||
|
matcher:
|
||||||
|
main:
|
||||||
|
- path: "/video/Movies 4K"
|
||||||
|
readOnly: true
|
||||||
|
transcoder:
|
||||||
|
main:
|
||||||
|
- path: "/video/Movies 4K"
|
||||||
|
readOnly: true
|
||||||
|
movies-classics:
|
||||||
|
existingClaim: kyoo-movies-classics-nfs-storage
|
||||||
|
advancedMounts:
|
||||||
|
scanner:
|
||||||
|
main:
|
||||||
|
- path: "/video/Movies Classics"
|
||||||
|
readOnly: true
|
||||||
|
matcher:
|
||||||
|
main:
|
||||||
|
- path: "/video/Movies Classics"
|
||||||
|
readOnly: true
|
||||||
|
transcoder:
|
||||||
|
main:
|
||||||
|
- path: "/video/Movies Classics"
|
||||||
|
readOnly: true
|
||||||
|
movies-foreign:
|
||||||
|
existingClaim: kyoo-movies-foreign-nfs-storage
|
||||||
|
advancedMounts:
|
||||||
|
scanner:
|
||||||
|
main:
|
||||||
|
- path: "/video/Movies Foreign"
|
||||||
|
readOnly: true
|
||||||
|
matcher:
|
||||||
|
main:
|
||||||
|
- path: "/video/Movies Foreign"
|
||||||
|
readOnly: true
|
||||||
|
transcoder:
|
||||||
|
main:
|
||||||
|
- path: "/video/Movies Foreign"
|
||||||
|
readOnly: true
|
||||||
|
stand-up:
|
||||||
|
existingClaim: kyoo-stand-up-nfs-storage
|
||||||
|
advancedMounts:
|
||||||
|
scanner:
|
||||||
|
main:
|
||||||
|
- path: "/video/Stand Up"
|
||||||
|
readOnly: true
|
||||||
|
matcher:
|
||||||
|
main:
|
||||||
|
- path: "/video/Stand Up"
|
||||||
|
readOnly: true
|
||||||
|
transcoder:
|
||||||
|
main:
|
||||||
|
- path: "/video/Stand Up"
|
||||||
|
readOnly: true
|
||||||
|
tv-shows:
|
||||||
|
existingClaim: kyoo-tv-shows-nfs-storage
|
||||||
|
advancedMounts:
|
||||||
|
scanner:
|
||||||
|
main:
|
||||||
|
- path: "/video/TV Shows"
|
||||||
|
readOnly: true
|
||||||
|
matcher:
|
||||||
|
main:
|
||||||
|
- path: "/video/TV Shows"
|
||||||
|
readOnly: true
|
||||||
|
transcoder:
|
||||||
|
main:
|
||||||
|
- path: "/video/TV Shows"
|
||||||
|
readOnly: true
|
||||||
|
tv-shows-4k:
|
||||||
|
existingClaim: kyoo-tv-shows-4k-nfs-storage
|
||||||
|
advancedMounts:
|
||||||
|
scanner:
|
||||||
|
main:
|
||||||
|
- path: "/video/TV Shows 4K"
|
||||||
|
readOnly: true
|
||||||
|
matcher:
|
||||||
|
main:
|
||||||
|
- path: "/video/TV Shows 4K"
|
||||||
|
readOnly: true
|
||||||
|
transcoder:
|
||||||
|
main:
|
||||||
|
- path: "/video/TV Shows 4K"
|
||||||
|
readOnly: true
|
||||||
|
rabbitmq:
|
||||||
|
auth:
|
||||||
|
username: kyoo
|
||||||
|
existingPasswordSecret: kyoo-rabbitmq-secret
|
||||||
|
existingSecretPasswordKey: password
|
||||||
|
existingErlangSecret: kyoo-rabbitmq-secret
|
||||||
|
existingSecretErlangKey: erlang
|
||||||
|
extraConfiguration: |-
|
||||||
|
default_vhost = /
|
||||||
|
default_permissions.configure = .*
|
||||||
|
default_permissions.read = .*
|
||||||
|
default_permissions.write = .*
|
||||||
|
meilisearch:
|
||||||
|
environment:
|
||||||
|
MEILI_NO_ANALYTICS: true
|
||||||
|
MEILI_ENV: production
|
||||||
|
auth:
|
||||||
|
existingMasterKeySecret: kyoo-meilisearch-master-key-secret
|
||||||
|
service:
|
||||||
|
type: ClusterIP
|
||||||
|
port: 7700
|
||||||
|
persistence:
|
||||||
|
enabled: true
|
||||||
|
storageClass: ceph-block
|
||||||
|
size: 10Gi
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 200m
|
||||||
|
memory: 2Gi
|
||||||
|
requests:
|
||||||
|
cpu: 10m
|
||||||
|
memory: 128Mi
|
||||||
|
serviceMonitor:
|
||||||
|
enabled: true
|
||||||
|
postgres-16-cluster:
|
||||||
|
mode: standalone
|
||||||
|
cluster:
|
||||||
|
walStorage:
|
||||||
|
storageClass: local-path
|
||||||
|
storage:
|
||||||
|
storageClass: local-path
|
||||||
|
monitoring:
|
||||||
|
enabled: true
|
||||||
|
backup:
|
||||||
|
enabled: true
|
||||||
|
endpointURL: https://s3.us-east-2.amazonaws.com
|
||||||
|
destinationPath: s3://cl01tl-postgresql-backups/kyoo
|
||||||
|
endpointCredentials: kyoo-postgresql-16-cluster-backup-secret
|
||||||
|
backupIndex: 1
|
||||||
|
retentionPolicy: 14d
|
11
clusters/cl01tl/applications/libation/Chart.yaml
Normal file
11
clusters/cl01tl/applications/libation/Chart.yaml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: libation
|
||||||
|
version: 0.0.5
|
||||||
|
sources:
|
||||||
|
- https://github.com/rmcrackan/Libation
|
||||||
|
- https://github.com/alexlebens/helm-charts/charts/libation
|
||||||
|
dependencies:
|
||||||
|
- name: libation
|
||||||
|
version: 0.0.6
|
||||||
|
repository: http://alexlebens.github.io/helm-charts
|
||||||
|
appVersion: "11.1.0"
|
@@ -0,0 +1,19 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: libation-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
volumeName: libation-nfs-storage
|
||||||
|
storageClassName: nfs-client
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
@@ -0,0 +1,25 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: libation-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
storageClassName: nfs-client
|
||||||
|
capacity:
|
||||||
|
storage: 1Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
nfs:
|
||||||
|
path: {{ .Values.storage.storage.nfs.path }}
|
||||||
|
server: {{ .Values.storage.storage.nfs.server }}
|
||||||
|
mountOptions:
|
||||||
|
- vers=4
|
||||||
|
- minorversion=1
|
||||||
|
- noac
|
14
clusters/cl01tl/applications/libation/values.yaml
Normal file
14
clusters/cl01tl/applications/libation/values.yaml
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
libation:
|
||||||
|
libation:
|
||||||
|
job:
|
||||||
|
schedule: "0 * * * *"
|
||||||
|
persistence:
|
||||||
|
config:
|
||||||
|
storageClassName: nfs-client
|
||||||
|
books:
|
||||||
|
claimName: libation-nfs-storage
|
||||||
|
storage:
|
||||||
|
storage:
|
||||||
|
nfs:
|
||||||
|
path: /volume2/Storage/Audiobooks/
|
||||||
|
server: synologybond.alexlebens.net
|
11
clusters/cl01tl/applications/navidrome/Chart.yaml
Normal file
11
clusters/cl01tl/applications/navidrome/Chart.yaml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: navidrome
|
||||||
|
version: 0.0.2
|
||||||
|
sources:
|
||||||
|
- https://github.com/navidrome/navidrome
|
||||||
|
- https://github.com/0xEmma/helm-charts/tree/main/charts/navidrome
|
||||||
|
dependencies:
|
||||||
|
- name: navidrome
|
||||||
|
version: 0.0.6
|
||||||
|
repository: https://0xemma.github.io/helm-charts
|
||||||
|
appVersion: "0.51.1"
|
@@ -0,0 +1,19 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: navidrome-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
volumeName: navidrome-nfs-storage
|
||||||
|
storageClassName: nfs-client
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
@@ -0,0 +1,25 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: navidrome-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
storageClassName: nfs-client
|
||||||
|
capacity:
|
||||||
|
storage: 1Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
nfs:
|
||||||
|
path: {{ .Values.storage.storage.nfs.path }}
|
||||||
|
server: {{ .Values.storage.storage.nfs.server }}
|
||||||
|
mountOptions:
|
||||||
|
- vers=4
|
||||||
|
- minorversion=1
|
||||||
|
- noac
|
43
clusters/cl01tl/applications/navidrome/values.yaml
Normal file
43
clusters/cl01tl/applications/navidrome/values.yaml
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
navidrome:
|
||||||
|
image:
|
||||||
|
repository: deluan/navidrome
|
||||||
|
tag: "0.52.5"
|
||||||
|
ingress:
|
||||||
|
main:
|
||||||
|
enabled: true
|
||||||
|
ingressClassName: traefik
|
||||||
|
annotations:
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
|
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt-issuer
|
||||||
|
hosts:
|
||||||
|
- host: navidrome.alexlebens.net
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
tls:
|
||||||
|
- secretName: navidrome-secret-tls
|
||||||
|
hosts:
|
||||||
|
- navidrome.alexlebens.net
|
||||||
|
persistence:
|
||||||
|
config:
|
||||||
|
enabled: true
|
||||||
|
mountPath: /data
|
||||||
|
accessMode: ReadWriteOnce
|
||||||
|
size: 2Gi
|
||||||
|
music:
|
||||||
|
enabled: true
|
||||||
|
mountPath: /mnt/store
|
||||||
|
type: pvc
|
||||||
|
existingClaim: navidrome-nfs-storage
|
||||||
|
env:
|
||||||
|
ND_MUSICFOLDER: /mnt/store/Music
|
||||||
|
ND_SCANSCHEDULE: 1h
|
||||||
|
ND_LOGLEVEL: info
|
||||||
|
ND_SESSIONTIMEOUT: 24h
|
||||||
|
ND_BASEURL: "/"
|
||||||
|
storage:
|
||||||
|
storage:
|
||||||
|
nfs:
|
||||||
|
path: /volume2/Storage
|
||||||
|
server: synologybond.alexlebens.net
|
21
clusters/cl01tl/applications/outline/Chart.yaml
Normal file
21
clusters/cl01tl/applications/outline/Chart.yaml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: outline
|
||||||
|
version: 1.0.0
|
||||||
|
sources:
|
||||||
|
- https://github.com/outline/outline
|
||||||
|
- https://github.com/minio/operator
|
||||||
|
- https://github.com/alexlebens/helm-charts/charts/outline
|
||||||
|
- https://github.com/alexlebens/helm-charts/charts/postgres-cluster
|
||||||
|
dependencies:
|
||||||
|
- name: outline
|
||||||
|
version: 0.6.1
|
||||||
|
repository: http://alexlebens.github.io/helm-charts
|
||||||
|
- name: tenant
|
||||||
|
version: 5.0.15
|
||||||
|
alias: minio
|
||||||
|
repository: https://operator.min.io/
|
||||||
|
- name: postgres-cluster
|
||||||
|
alias: postgres-16-cluster
|
||||||
|
version: 3.0.0
|
||||||
|
repository: http://alexlebens.github.io/helm-charts
|
||||||
|
appVersion: v0.75.2
|
@@ -0,0 +1,176 @@
|
|||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: outline-key-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: web
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: secret-key
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /outline/key
|
||||||
|
metadataPolicy: None
|
||||||
|
property: secret-key
|
||||||
|
- secretKey: utils-key
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /outline/key
|
||||||
|
metadataPolicy: None
|
||||||
|
property: utils-key
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: outline-oidc-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: web
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: client
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /authentik/oidc/outline
|
||||||
|
metadataPolicy: None
|
||||||
|
property: client
|
||||||
|
- secretKey: secret
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /authentik/oidc/outline
|
||||||
|
metadataPolicy: None
|
||||||
|
property: secret
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: outline-bucket-user-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: outline-bucket-user-secret
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: database
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: AWS_ACCESS_KEY_ID
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /outline/minio/auth
|
||||||
|
metadataPolicy: None
|
||||||
|
property: AWS_ACCESS_KEY_ID
|
||||||
|
- secretKey: AWS_SECRET_ACCESS_KEY
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /outline/minio/auth
|
||||||
|
metadataPolicy: None
|
||||||
|
property: AWS_SECRET_ACCESS_KEY
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: outline-minio-root-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: outline-bucket-auth-secret
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: database
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: config.env
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /outline/minio/root
|
||||||
|
metadataPolicy: None
|
||||||
|
property: config.env
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: outline-minio-config-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: outline-bucket-auth-secret
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: database
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: config.env
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /outline/minio/config
|
||||||
|
metadataPolicy: None
|
||||||
|
property: config.env
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: outline-postgresql-16-cluster-backup-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: database
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: ACCESS_KEY_ID
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /aws/keys/cl01tl-outline-postgresql
|
||||||
|
metadataPolicy: None
|
||||||
|
property: access_key
|
||||||
|
- secretKey: ACCESS_SECRET_KEY
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /aws/keys/cl01tl-outline-postgresql
|
||||||
|
metadataPolicy: None
|
||||||
|
property: secret_key
|
123
clusters/cl01tl/applications/outline/values.yaml
Normal file
123
clusters/cl01tl/applications/outline/values.yaml
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
outline:
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
className: traefik
|
||||||
|
annotations:
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
|
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt-issuer
|
||||||
|
host: outline.alexlebens.net
|
||||||
|
persistence:
|
||||||
|
type: s3
|
||||||
|
s3:
|
||||||
|
credentialsSecret: outline-bucket-user-secret
|
||||||
|
region: us-east-1
|
||||||
|
bucketName: outline
|
||||||
|
bucketUrl: https://minio-outline-api.alexlebens.net/outline
|
||||||
|
forcePathStyle: false
|
||||||
|
outline:
|
||||||
|
url: https://outline.alexlebens.net
|
||||||
|
secretKey:
|
||||||
|
existingSecretName: outline-key-secret
|
||||||
|
existingSecretKey: secret-key
|
||||||
|
utilsSecret:
|
||||||
|
existingSecretName: outline-key-secret
|
||||||
|
existingSecretKey: utils-key
|
||||||
|
database:
|
||||||
|
usernameSecret:
|
||||||
|
existingSecretName: outline-postgresql-16-cluster-app
|
||||||
|
existingSecretKey: username
|
||||||
|
passwordSecret:
|
||||||
|
existingSecretName: outline-postgresql-16-cluster-app
|
||||||
|
existingSecretKey: password
|
||||||
|
databaseName:
|
||||||
|
existingSecretName: outline-postgresql-16-cluster-app
|
||||||
|
existingSecretKey: dbname
|
||||||
|
databaseHost:
|
||||||
|
existingSecretName: outline-postgresql-16-cluster-app
|
||||||
|
existingSecretKey: host
|
||||||
|
databasePort:
|
||||||
|
existingSecretName: outline-postgresql-16-cluster-app
|
||||||
|
existingSecretKey: port
|
||||||
|
auth:
|
||||||
|
oidc:
|
||||||
|
enabled: true
|
||||||
|
clientId:
|
||||||
|
existingSecretName: outline-oidc-secret
|
||||||
|
existingSecretKey: client
|
||||||
|
clientSecret:
|
||||||
|
existingSecretName: outline-oidc-secret
|
||||||
|
existingSecretKey: secret
|
||||||
|
authUri: https://authentik.alexlebens.net/application/o/authorize/
|
||||||
|
tokenUri: https://authentik.alexlebens.net/application/o/token/
|
||||||
|
userinfoUri: https://authentik.alexlebens.net/application/o/userinfo/
|
||||||
|
usernameClaim: email
|
||||||
|
displayName: Authentik
|
||||||
|
scopes: openid profile email
|
||||||
|
minio:
|
||||||
|
existingSecret:
|
||||||
|
name: outline-minio-root-secret
|
||||||
|
tenant:
|
||||||
|
name: minio-outline
|
||||||
|
configuration:
|
||||||
|
name: outline-minio-config-secret
|
||||||
|
pools:
|
||||||
|
- servers: 3
|
||||||
|
name: pool
|
||||||
|
volumesPerServer: 2
|
||||||
|
size: 10Gi
|
||||||
|
storageClassName: ceph-block
|
||||||
|
mountPath: /export
|
||||||
|
subPath: /data
|
||||||
|
metrics:
|
||||||
|
enabled: true
|
||||||
|
port: 9000
|
||||||
|
protocol: http
|
||||||
|
certificate:
|
||||||
|
requestAutoCert: false
|
||||||
|
ingress:
|
||||||
|
api:
|
||||||
|
enabled: true
|
||||||
|
ingressClassName: traefik
|
||||||
|
annotations:
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
|
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt-issuer
|
||||||
|
tls:
|
||||||
|
- secretName: minio-outline-api-secret-tls
|
||||||
|
hosts:
|
||||||
|
- minio-outline-api.alexlebens.net
|
||||||
|
host: minio-outline-api.alexlebens.net
|
||||||
|
path: /
|
||||||
|
pathType: Prefix
|
||||||
|
console:
|
||||||
|
enabled: true
|
||||||
|
ingressClassName: traefik
|
||||||
|
annotations:
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
|
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt-issuer
|
||||||
|
tls:
|
||||||
|
- secretName: minio-outline-console-secret-tls
|
||||||
|
hosts:
|
||||||
|
- minio-outline.alexlebens.net
|
||||||
|
host: minio-outline.alexlebens.net
|
||||||
|
path: /
|
||||||
|
pathType: Prefix
|
||||||
|
postgres-16-cluster:
|
||||||
|
mode: standalone
|
||||||
|
kubernetesClusterName: cl01tl
|
||||||
|
cluster:
|
||||||
|
walStorage:
|
||||||
|
storageClass: local-path
|
||||||
|
storage:
|
||||||
|
storageClass: local-path
|
||||||
|
monitoring:
|
||||||
|
enabled: true
|
||||||
|
backup:
|
||||||
|
enabled: true
|
||||||
|
endpointURL: https://s3.us-east-2.amazonaws.com
|
||||||
|
destinationPath: s3://cl01tl-postgresql-backups/outline
|
||||||
|
endpointCredentials: outline-postgresql-16-cluster-backup-secret
|
||||||
|
backupIndex: 1
|
||||||
|
retentionPolicy: 14d
|
25
clusters/cl01tl/applications/penpot/Chart.yaml
Normal file
25
clusters/cl01tl/applications/penpot/Chart.yaml
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: penpot
|
||||||
|
version: 1.0.0
|
||||||
|
sources:
|
||||||
|
- https://github.com/penpot/penpot
|
||||||
|
- https://github.com/minio/operator
|
||||||
|
- https://github.com/bitnami/charts/tree/main/bitnami/redis
|
||||||
|
- https://github.com/alexlebens/helm-charts/charts/penpot
|
||||||
|
- https://github.com/alexlebens/helm-charts/charts/postgres-cluster
|
||||||
|
dependencies:
|
||||||
|
- name: penpot
|
||||||
|
version: 0.1.0
|
||||||
|
repository: http://alexlebens.github.io/helm-charts
|
||||||
|
- name: redis
|
||||||
|
version: 19.3.2
|
||||||
|
repository: https://charts.bitnami.com/bitnami
|
||||||
|
- name: tenant
|
||||||
|
version: 5.0.15
|
||||||
|
alias: minio
|
||||||
|
repository: https://operator.min.io/
|
||||||
|
- name: postgres-cluster
|
||||||
|
alias: postgres-16-cluster
|
||||||
|
version: 3.0.0
|
||||||
|
repository: http://alexlebens.github.io/helm-charts
|
||||||
|
appVersion: 2.0.0
|
@@ -0,0 +1,169 @@
|
|||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: penpot-key-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: penpot-key-secret
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: web
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: key
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /penpot/key
|
||||||
|
metadataPolicy: None
|
||||||
|
property: key
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: penpot-oidc-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: penpot-oidc-secret
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: auth
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: client
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /authentik/oidc/penpot
|
||||||
|
metadataPolicy: None
|
||||||
|
property: client
|
||||||
|
- secretKey: secret
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /authentik/oidc/penpot
|
||||||
|
metadataPolicy: None
|
||||||
|
property: secret
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: penpot-bucket-user-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: penpot-bucket-user-secret
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: AWS_ACCESS_KEY_ID
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /penpot/minio/auth
|
||||||
|
metadataPolicy: None
|
||||||
|
property: AWS_ACCESS_KEY_ID
|
||||||
|
- secretKey: AWS_SECRET_ACCESS_KEY
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /penpot/minio/auth
|
||||||
|
metadataPolicy: None
|
||||||
|
property: AWS_SECRET_ACCESS_KEY
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: penpot-minio-root-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: penpot-bucket-auth-secret
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: config.env
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /penpot/minio/root
|
||||||
|
metadataPolicy: None
|
||||||
|
property: config.env
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: penpot-minio-config-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: penpot-minio-config-secret
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: config.env
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /penpot/minio/config
|
||||||
|
metadataPolicy: None
|
||||||
|
property: config.env
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: penpot-postgresql-16-cluster-backup-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: penpot-postgresql-16-cluster-backup-secret
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: database
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: ACCESS_KEY_ID
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /aws/keys/cl01tl-penpot-postgresql
|
||||||
|
metadataPolicy: None
|
||||||
|
property: access_key
|
||||||
|
- secretKey: ACCESS_SECRET_KEY
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /aws/keys/cl01tl-penpot-postgresql
|
||||||
|
metadataPolicy: None
|
||||||
|
property: secret_key
|
135
clusters/cl01tl/applications/penpot/values.yaml
Normal file
135
clusters/cl01tl/applications/penpot/values.yaml
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
penpot:
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
annotations:
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
|
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt-issuer
|
||||||
|
hosts:
|
||||||
|
- host: penpot.alexlebens.net
|
||||||
|
tls:
|
||||||
|
- secretName: penpot-secret-tls
|
||||||
|
hosts:
|
||||||
|
- penpot.alexlebens.net
|
||||||
|
persistence:
|
||||||
|
enabled: true
|
||||||
|
storageClass: ceph-block
|
||||||
|
size: 8Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
config:
|
||||||
|
publicURI: https://penpot.alexlebens.net
|
||||||
|
flags: enable-registration enable-insecure-register enable-login enable-login-with-oidc disable-demo-users disable-demo-warning
|
||||||
|
apiSecretKey:
|
||||||
|
existingSecretName: penpot-key-secret
|
||||||
|
existingSecretKey: key
|
||||||
|
postgresql:
|
||||||
|
host: penpot-postgresql-16-cluster-rw.penpot.svc.cluster.local
|
||||||
|
port: 5432
|
||||||
|
database: app
|
||||||
|
existingSecret: penpot-postgresql-16-cluster-app
|
||||||
|
secretKeys:
|
||||||
|
usernameKey: username
|
||||||
|
passwordKey: password
|
||||||
|
redis:
|
||||||
|
host: penpot-redis-headless.penpot.svc.cluster.local
|
||||||
|
port: 6379
|
||||||
|
database: 0
|
||||||
|
assets:
|
||||||
|
storageBackend: assets-s3
|
||||||
|
s3:
|
||||||
|
region: us-east-1
|
||||||
|
bucket: penpot
|
||||||
|
endpointURI: https://minio-penpot-api.alexlebens.net/penpot
|
||||||
|
existingSecret: penpot-bucket-user-secret
|
||||||
|
secretKeys:
|
||||||
|
accessKeyIDKey: AWS_ACCESS_KEY_ID
|
||||||
|
secretAccessKey: AWS_SECRET_ACCESS_KEY
|
||||||
|
telemetryEnabled: false
|
||||||
|
providers:
|
||||||
|
oidc:
|
||||||
|
enabled: true
|
||||||
|
baseURI: https://authentik.alexlebens.net/application/o/
|
||||||
|
authURI: https://authentik.alexlebens.net/application/o/authorize/
|
||||||
|
tokenURI: https://authentik.alexlebens.net/application/o/token/
|
||||||
|
userURI: https://authentik.alexlebens.net/application/o/userinfo/
|
||||||
|
roles: ""
|
||||||
|
rolesAttribute: ""
|
||||||
|
scopes: "openid profile email"
|
||||||
|
nameAttribute: preferred_username
|
||||||
|
emailAttribute: email
|
||||||
|
existingSecret: penpot-oidc-secret
|
||||||
|
secretKeys:
|
||||||
|
oidcClientIDKey: client
|
||||||
|
oidcClientSecretKey: secret
|
||||||
|
redis:
|
||||||
|
architecture: standalone
|
||||||
|
auth:
|
||||||
|
enabled: false
|
||||||
|
minio:
|
||||||
|
existingSecret:
|
||||||
|
name: penpot-minio-root-secret
|
||||||
|
tenant:
|
||||||
|
name: minio-penpot
|
||||||
|
configuration:
|
||||||
|
name: penpot-minio-config-secret
|
||||||
|
pools:
|
||||||
|
- servers: 3
|
||||||
|
name: pool
|
||||||
|
volumesPerServer: 2
|
||||||
|
size: 10Gi
|
||||||
|
storageClassName: ceph-block
|
||||||
|
mountPath: /export
|
||||||
|
subPath: /data
|
||||||
|
metrics:
|
||||||
|
enabled: true
|
||||||
|
port: 9000
|
||||||
|
protocol: http
|
||||||
|
certificate:
|
||||||
|
requestAutoCert: false
|
||||||
|
ingress:
|
||||||
|
api:
|
||||||
|
enabled: true
|
||||||
|
ingressClassName: traefik
|
||||||
|
annotations:
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
|
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt-issuer
|
||||||
|
tls:
|
||||||
|
- secretName: minio-penpot-api-secret-tls
|
||||||
|
hosts:
|
||||||
|
- minio-penpot-api.alexlebens.net
|
||||||
|
host: minio-penpot-api.alexlebens.net
|
||||||
|
path: /
|
||||||
|
pathType: Prefix
|
||||||
|
console:
|
||||||
|
enabled: true
|
||||||
|
ingressClassName: traefik
|
||||||
|
annotations:
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
|
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt-issuer
|
||||||
|
tls:
|
||||||
|
- secretName: minio-penpot-console-secret-tls
|
||||||
|
hosts:
|
||||||
|
- minio-penpot.alexlebens.net
|
||||||
|
host: minio-penpot.alexlebens.net
|
||||||
|
path: /
|
||||||
|
pathType: Prefix
|
||||||
|
postgres-16-cluster:
|
||||||
|
mode: standalone
|
||||||
|
kubernetesClusterName: cl01tl
|
||||||
|
cluster:
|
||||||
|
walStorage:
|
||||||
|
storageClass: local-path
|
||||||
|
storage:
|
||||||
|
storageClass: local-path
|
||||||
|
monitoring:
|
||||||
|
enabled: true
|
||||||
|
backup:
|
||||||
|
enabled: true
|
||||||
|
endpointURL: https://s3.us-east-2.amazonaws.com
|
||||||
|
destinationPath: s3://cl01tl-postgresql-backups/penpot
|
||||||
|
endpointCredentials: penpot-postgresql-16-cluster-backup-secret
|
||||||
|
backupIndex: 1
|
||||||
|
retentionPolicy: 14d
|
11
clusters/cl01tl/applications/plex/Chart.yaml
Normal file
11
clusters/cl01tl/applications/plex/Chart.yaml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: plex
|
||||||
|
version: 0.0.1
|
||||||
|
sources:
|
||||||
|
- https://www.plex.tv/
|
||||||
|
- https://github.com/k8s-home-lab/helm-charts/tree/master/charts/stable/plex
|
||||||
|
dependencies:
|
||||||
|
- name: plex
|
||||||
|
version: 7.1.4
|
||||||
|
repository: https://k8s-home-lab.github.io/helm-charts/
|
||||||
|
appVersion: 1.40.0.7998-c29d4c0c8
|
@@ -0,0 +1,40 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: plex-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
volumeName: plex-nfs-storage
|
||||||
|
storageClassName: nfs-client
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: plex-config
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: {{ .Values.storage.config.storageSize }}
|
||||||
|
storageClassName: {{ .Values.storage.config.storageClassName }}
|
||||||
|
volumeMode: {{ .Values.storage.config.volumeMode }}
|
@@ -0,0 +1,25 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: plex-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
storageClassName: nfs-client
|
||||||
|
capacity:
|
||||||
|
storage: 1Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
nfs:
|
||||||
|
path: {{ .Values.storage.media.nfs.path }}
|
||||||
|
server: {{ .Values.storage.media.nfs.server }}
|
||||||
|
mountOptions:
|
||||||
|
- vers=4
|
||||||
|
- minorversion=1
|
||||||
|
- noac
|
78
clusters/cl01tl/applications/plex/values.yaml
Normal file
78
clusters/cl01tl/applications/plex/values.yaml
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
plex:
|
||||||
|
image:
|
||||||
|
repository: ghcr.io/onedr0p/plex
|
||||||
|
tag: 1.40.2.8395-c67dce28e
|
||||||
|
env:
|
||||||
|
ADVERTISE_IP: "https://plex.alexlebens.net:443/"
|
||||||
|
ALLOWED_NETWORKS: "10.0.0.0/8,192.168.1.0/24"
|
||||||
|
service:
|
||||||
|
main:
|
||||||
|
primary: true
|
||||||
|
type: LoadBalancer
|
||||||
|
annotations:
|
||||||
|
metallb.universe.tf/allow-shared-ip: "external"
|
||||||
|
externalIPs:
|
||||||
|
- 192.168.1.17
|
||||||
|
- 192.168.1.16
|
||||||
|
- 192.168.1.15
|
||||||
|
ports:
|
||||||
|
http:
|
||||||
|
port: 32400
|
||||||
|
ingress:
|
||||||
|
main:
|
||||||
|
enabled: true
|
||||||
|
ingressClassName: traefik
|
||||||
|
annotations:
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
|
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt-issuer
|
||||||
|
hosts:
|
||||||
|
- host: plex.alexlebens.net
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
tls:
|
||||||
|
- secretName: plex-secret-tls
|
||||||
|
hosts:
|
||||||
|
- plex.alexlebens.net
|
||||||
|
hostNetwork: false
|
||||||
|
persistence:
|
||||||
|
config:
|
||||||
|
enabled: true
|
||||||
|
existingClaim: plex-config
|
||||||
|
transcode:
|
||||||
|
enabled: true
|
||||||
|
type: emptyDir
|
||||||
|
media:
|
||||||
|
enabled: true
|
||||||
|
mountPath: /mnt/store
|
||||||
|
type: pvc
|
||||||
|
existingClaim: plex-nfs-storage
|
||||||
|
podSecurityContext:
|
||||||
|
runAsUser: 568
|
||||||
|
runAsGroup: 568
|
||||||
|
fsGroup: 568
|
||||||
|
fsGroupChangePolicy: "OnRootMismatch"
|
||||||
|
supplementalGroups:
|
||||||
|
- 44
|
||||||
|
- 100
|
||||||
|
- 109
|
||||||
|
- 65539
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
gpu.intel.com/i915: 1
|
||||||
|
cpu: 100m
|
||||||
|
memory: 256Mi
|
||||||
|
limits:
|
||||||
|
gpu.intel.com/i915: 1
|
||||||
|
cpu: 4000m
|
||||||
|
memory: 4096Mi
|
||||||
|
storage:
|
||||||
|
config:
|
||||||
|
storageClassName: ceph-block
|
||||||
|
storageSize: 80Gi
|
||||||
|
volumeMode: Filesystem
|
||||||
|
media:
|
||||||
|
nfs:
|
||||||
|
path: /volume2/Storage
|
||||||
|
server: synologybond.alexlebens.net
|
17
clusters/cl01tl/applications/taiga/Chart.yaml
Normal file
17
clusters/cl01tl/applications/taiga/Chart.yaml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: taiga
|
||||||
|
version: 1.0.0
|
||||||
|
sources:
|
||||||
|
- https://github.com/taigaio
|
||||||
|
- https://github.com/rabbitmq/rabbitmq-server
|
||||||
|
- https://github.com/alexlebens/helm-charts/charts/taiga
|
||||||
|
- https://github.com/alexlebens/helm-charts/charts/postgres-cluster
|
||||||
|
dependencies:
|
||||||
|
- name: taiga
|
||||||
|
version: 0.2.2
|
||||||
|
repository: http://alexlebens.github.io/helm-charts
|
||||||
|
- name: postgres-cluster
|
||||||
|
alias: postgres-16-cluster
|
||||||
|
version: 3.0.0
|
||||||
|
repository: http://alexlebens.github.io/helm-charts
|
||||||
|
appVersion: 6.7.7
|
@@ -0,0 +1,200 @@
|
|||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: taiga-key-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: taiga-key-secret
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: web
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: key
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /taiga/key
|
||||||
|
metadataPolicy: None
|
||||||
|
property: key
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: taiga-oidc-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: taiga-oidc-secret
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: web
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: client
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /authentik/oidc/taiga
|
||||||
|
metadataPolicy: None
|
||||||
|
property: client
|
||||||
|
- secretKey: secret
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /authentik/oidc/taiga
|
||||||
|
metadataPolicy: None
|
||||||
|
property: secret
|
||||||
|
- secretKey: scopes
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /authentik/oidc/taiga
|
||||||
|
metadataPolicy: None
|
||||||
|
property: scopes
|
||||||
|
- secretKey: signatureAlgorithm
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /authentik/oidc/taiga
|
||||||
|
metadataPolicy: None
|
||||||
|
property: signatureAlgorithm
|
||||||
|
- secretKey: baseUrl
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /authentik/oidc/taiga
|
||||||
|
metadataPolicy: None
|
||||||
|
property: baseUrl
|
||||||
|
- secretKey: jwksEndpoint
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /authentik/oidc/taiga
|
||||||
|
metadataPolicy: None
|
||||||
|
property: jwksEndpoint
|
||||||
|
- secretKey: authorizationEndpoint
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /authentik/oidc/taiga
|
||||||
|
metadataPolicy: None
|
||||||
|
property: authorizationEndpoint
|
||||||
|
- secretKey: tokenEndpoint
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /authentik/oidc/taiga
|
||||||
|
metadataPolicy: None
|
||||||
|
property: tokenEndpoint
|
||||||
|
- secretKey: userEndpoint
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /authentik/oidc/taiga
|
||||||
|
metadataPolicy: None
|
||||||
|
property: userEndpoint
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: taiga-async-rabbitmq-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: taiga-async-rabbitmq-secret
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: web
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: password
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /taiga/rabbitmq/async
|
||||||
|
metadataPolicy: None
|
||||||
|
property: password
|
||||||
|
- secretKey: erlang
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /taiga/rabbitmq/async
|
||||||
|
metadataPolicy: None
|
||||||
|
property: erlang
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: taiga-events-rabbitmq-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: taiga-events-rabbitmq-secret
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: web
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: password
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /taiga/rabbitmq/events
|
||||||
|
metadataPolicy: None
|
||||||
|
property: password
|
||||||
|
- secretKey: erlang
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /taiga/rabbitmq/events
|
||||||
|
metadataPolicy: None
|
||||||
|
property: erlang
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: taiga-postgresql-16-cluster-backup-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: taiga-postgresql-16-cluster-backup-secret
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: database
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: ACCESS_KEY_ID
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /aws/keys/cl01tl-taiga-postgresql
|
||||||
|
metadataPolicy: None
|
||||||
|
property: access_key
|
||||||
|
- secretKey: ACCESS_SECRET_KEY
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /aws/keys/cl01tl-taiga-postgresql
|
||||||
|
metadataPolicy: None
|
||||||
|
property: secret_key
|
152
clusters/cl01tl/applications/taiga/values.yaml
Normal file
152
clusters/cl01tl/applications/taiga/values.yaml
Normal file
@@ -0,0 +1,152 @@
|
|||||||
|
taiga:
|
||||||
|
serviceAccount:
|
||||||
|
create: true
|
||||||
|
secretKey:
|
||||||
|
existingSecretName: taiga-key-secret
|
||||||
|
existingSecretKey: key
|
||||||
|
createInitialUser: false
|
||||||
|
enableTelemetry: false
|
||||||
|
publicRegisterEnabled: false
|
||||||
|
postgresql:
|
||||||
|
existingSecretName: taiga-postgresql-16-cluster-app
|
||||||
|
usernameKey: username
|
||||||
|
passwordKey: password
|
||||||
|
databaseNameKey: dbname
|
||||||
|
hostKey: host
|
||||||
|
portKey: port
|
||||||
|
oidc:
|
||||||
|
enabled: true
|
||||||
|
existingSecretName: taiga-oidc-secret
|
||||||
|
scopesKey: scopes
|
||||||
|
signatureAlgorithmKey: signatureAlgorithm
|
||||||
|
clientIdKey: client
|
||||||
|
clientSecretKey: secret
|
||||||
|
baseUrlKey: baseUrl
|
||||||
|
jwksEndpointKey: jwksEndpoint
|
||||||
|
authorizationEndpointKey: authorizationEndpoint
|
||||||
|
tokenEndpointKey: tokenEndpoint
|
||||||
|
userEndpointKey: userEndpoint
|
||||||
|
back:
|
||||||
|
image:
|
||||||
|
repository: ghcr.io/alexlebens/taiga-back-docker-oidc
|
||||||
|
tag: latest
|
||||||
|
pullPolicy: Always
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 256Mi
|
||||||
|
limits:
|
||||||
|
cpu: 500m
|
||||||
|
memory: 1Gi
|
||||||
|
livenessProbe:
|
||||||
|
enabled: true
|
||||||
|
readinessProbe:
|
||||||
|
enabled: true
|
||||||
|
async:
|
||||||
|
image:
|
||||||
|
repository: ghcr.io/alexlebens/taiga-back-docker-oidc
|
||||||
|
tag: latest
|
||||||
|
pullPolicy: Always
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 256Mi
|
||||||
|
limits:
|
||||||
|
cpu: 500m
|
||||||
|
memory: 1Gi
|
||||||
|
livenessProbe:
|
||||||
|
enabled: true
|
||||||
|
readinessProbe:
|
||||||
|
enabled: true
|
||||||
|
async-rabbitmq:
|
||||||
|
auth:
|
||||||
|
username: taiga
|
||||||
|
existingPasswordSecret: taiga-async-rabbitmq-secret
|
||||||
|
existingSecretPasswordKey: password
|
||||||
|
existingErlangSecret: taiga-async-rabbitmq-secret
|
||||||
|
existingSecretErlangKey: erlang
|
||||||
|
events:
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 256Mi
|
||||||
|
limits:
|
||||||
|
cpu: 500m
|
||||||
|
memory: 1Gi
|
||||||
|
livenessProbe:
|
||||||
|
enabled: false
|
||||||
|
readinessProbe:
|
||||||
|
enabled: false
|
||||||
|
events-rabbitmq:
|
||||||
|
auth:
|
||||||
|
username: taiga
|
||||||
|
existingPasswordSecret: taiga-events-rabbitmq-secret
|
||||||
|
existingSecretPasswordKey: password
|
||||||
|
existingErlangSecret: taiga-events-rabbitmq-secret
|
||||||
|
existingSecretErlangKey: erlang
|
||||||
|
protected:
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 256Mi
|
||||||
|
limits:
|
||||||
|
cpu: 500m
|
||||||
|
memory: 1Gi
|
||||||
|
livenessProbe:
|
||||||
|
enabled: false
|
||||||
|
readinessProbe:
|
||||||
|
enabled: false
|
||||||
|
front:
|
||||||
|
image:
|
||||||
|
repository: ghcr.io/alexlebens/taiga-front-docker-oidc
|
||||||
|
tag: latest
|
||||||
|
pullPolicy: Always
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 256Mi
|
||||||
|
limits:
|
||||||
|
cpu: 500m
|
||||||
|
memory: 1Gi
|
||||||
|
livenessProbe:
|
||||||
|
enabled: true
|
||||||
|
readinessProbe:
|
||||||
|
enabled: true
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
annotations:
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
|
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt-issuer
|
||||||
|
className: traefik
|
||||||
|
host: taiga.alexlebens.net
|
||||||
|
persistence:
|
||||||
|
static:
|
||||||
|
enabled: true
|
||||||
|
storageClass: nfs-client
|
||||||
|
accessMode: ReadWriteMany
|
||||||
|
size: 1Gi
|
||||||
|
media:
|
||||||
|
enabled: true
|
||||||
|
storageClass: nfs-client
|
||||||
|
accessMode: ReadWriteMany
|
||||||
|
size: 1Gi
|
||||||
|
postgres-16-cluster:
|
||||||
|
mode: standalone
|
||||||
|
kubernetesClusterName: cl01tl
|
||||||
|
cluster:
|
||||||
|
walStorage:
|
||||||
|
storageClass: local-path
|
||||||
|
storage:
|
||||||
|
storageClass: local-path
|
||||||
|
monitoring:
|
||||||
|
enabled: true
|
||||||
|
prometheusRule:
|
||||||
|
enabled: false
|
||||||
|
backup:
|
||||||
|
enabled: true
|
||||||
|
endpointURL: https://s3.us-east-2.amazonaws.com
|
||||||
|
destinationPath: s3://cl01tl-postgresql-backups/taiga
|
||||||
|
endpointCredentials: taiga-postgresql-16-cluster-backup-secret
|
||||||
|
backupIndex: 1
|
||||||
|
retentionPolicy: 14d
|
13
clusters/cl01tl/applications/tubearchivist/Chart.yaml
Normal file
13
clusters/cl01tl/applications/tubearchivist/Chart.yaml
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: tubearchivist
|
||||||
|
version: 0.0.7
|
||||||
|
sources:
|
||||||
|
- https://github.com/tubearchivist/tubearchivist
|
||||||
|
- https://github.com/alexlebens/helm-charts/charts/tubearchivist
|
||||||
|
- https://github.com/tubearchivist/tubearchivist-jf
|
||||||
|
- https://github.com/alexlebens/helm-charts/charts/tubearchivist-to-jellyfin
|
||||||
|
dependencies:
|
||||||
|
- name: tubearchivist
|
||||||
|
version: 0.2.7
|
||||||
|
repository: http://alexlebens.github.io/helm-charts
|
||||||
|
appVersion: v0.4.6
|
@@ -0,0 +1,83 @@
|
|||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: tubearchivist-config-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: web
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: ELASTIC_PASSWORD
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /tubearchivist/env
|
||||||
|
metadataPolicy: None
|
||||||
|
property: ELASTIC_PASSWORD
|
||||||
|
- secretKey: ES_URL
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /tubearchivist/env
|
||||||
|
metadataPolicy: None
|
||||||
|
property: ES_URL
|
||||||
|
- secretKey: REDIS_HOST
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /tubearchivist/env
|
||||||
|
metadataPolicy: None
|
||||||
|
property: REDIS_HOST
|
||||||
|
- secretKey: TA_HOST
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /tubearchivist/env
|
||||||
|
metadataPolicy: None
|
||||||
|
property: TA_HOST
|
||||||
|
- secretKey: TA_PASSWORD
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /tubearchivist/env
|
||||||
|
metadataPolicy: None
|
||||||
|
property: TA_PASSWORD
|
||||||
|
- secretKey: TA_USERNAME
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /tubearchivist/env
|
||||||
|
metadataPolicy: None
|
||||||
|
property: TA_USERNAME
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: tubearchivist-elasticsearch-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: web
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: ELASTIC_PASSWORD
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /tubearchivist/env
|
||||||
|
metadataPolicy: None
|
||||||
|
property: ELASTIC_PASSWORD
|
@@ -0,0 +1,19 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: tubearchivist-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
volumeName: tubearchivist-nfs-storage
|
||||||
|
storageClassName: nfs-client
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
@@ -0,0 +1,25 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: tubearchivist-nfs-storage
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
storageClassName: nfs-client
|
||||||
|
capacity:
|
||||||
|
storage: 1Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
nfs:
|
||||||
|
path: {{ .Values.storage.youtube.nfsPath }}
|
||||||
|
server: {{ .Values.storage.youtube.nfsServer }}
|
||||||
|
mountOptions:
|
||||||
|
- vers=4
|
||||||
|
- minorversion=1
|
||||||
|
- noac
|
46
clusters/cl01tl/applications/tubearchivist/values.yaml
Normal file
46
clusters/cl01tl/applications/tubearchivist/values.yaml
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
tubearchivist:
|
||||||
|
deployment:
|
||||||
|
env:
|
||||||
|
TZ: US/Central
|
||||||
|
envFrom:
|
||||||
|
- secretRef:
|
||||||
|
name: tubearchivist-config-secret
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
memory: 2Gi
|
||||||
|
cpu: 1000m
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
className: traefik
|
||||||
|
annotations:
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
|
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt-issuer
|
||||||
|
host: tubearchivist.alexlebens.net
|
||||||
|
persistence:
|
||||||
|
cache:
|
||||||
|
enabled: true
|
||||||
|
storageClassName: ceph-block
|
||||||
|
storageSize: 80Gi
|
||||||
|
youtube:
|
||||||
|
claimName: tubearchivist-nfs-storage
|
||||||
|
elasticsearch:
|
||||||
|
global:
|
||||||
|
storageClass: ceph-block
|
||||||
|
extraEnvVarsSecret: tubearchivist-elasticsearch-secret
|
||||||
|
extraConfig:
|
||||||
|
path:
|
||||||
|
repo: /usr/share/elasticsearch/data/snapshot
|
||||||
|
extraVolumes:
|
||||||
|
- name: snapshot
|
||||||
|
nfs:
|
||||||
|
path: /volume2/Storage/TubeArchivist
|
||||||
|
server: synologybond.alexlebens.net
|
||||||
|
extraVolumeMounts:
|
||||||
|
- name: snapshot
|
||||||
|
mountPath: /usr/share/elasticsearch/data/snapshot
|
||||||
|
snapshotRepoPath: /usr/share/elasticsearch/data/snapshot
|
||||||
|
storage:
|
||||||
|
youtube:
|
||||||
|
nfsPath: /volume2/Storage/YouTube
|
||||||
|
nfsServer: synologybond.alexlebens.net
|
20
clusters/cl01tl/applications/vikunja/Chart.yaml
Normal file
20
clusters/cl01tl/applications/vikunja/Chart.yaml
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: vikunja
|
||||||
|
version: 1.0.0
|
||||||
|
sources:
|
||||||
|
- https://kolaente.dev/vikunja/vikunja
|
||||||
|
- https://kolaente.dev/vikunja/helm-chart
|
||||||
|
- https://github.com/bitnami/charts/tree/main/bitnami/redis
|
||||||
|
- https://github.com/alexlebens/helm-charts/charts/postgres-cluster
|
||||||
|
dependencies:
|
||||||
|
- name: vikunja
|
||||||
|
version: 0.4.3
|
||||||
|
repository: oci://kolaente.dev/vikunja
|
||||||
|
- name: redis
|
||||||
|
version: 19.3.2
|
||||||
|
repository: https://charts.bitnami.com/bitnami
|
||||||
|
- name: postgres-cluster
|
||||||
|
alias: postgres-16-cluster
|
||||||
|
version: 3.0.0
|
||||||
|
repository: http://alexlebens.github.io/helm-charts
|
||||||
|
appVersion: v0.22.1
|
@@ -0,0 +1,62 @@
|
|||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: vikunja-config-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: web
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: config.yml
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /vikunja/config
|
||||||
|
metadataPolicy: None
|
||||||
|
property: config.yml
|
||||||
|
- secretKey: redis-password
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /vikunja/config
|
||||||
|
metadataPolicy: None
|
||||||
|
property: redis-password
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: vikunja-postgresql-16-cluster-backup-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: vikunja-postgresql-16-cluster-backup-secret
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: database
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: ACCESS_KEY_ID
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /aws/keys/cl01tl-vikunja-postgresql
|
||||||
|
metadataPolicy: None
|
||||||
|
property: access_key
|
||||||
|
- secretKey: ACCESS_SECRET_KEY
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /aws/keys/cl01tl-vikunja-postgresql
|
||||||
|
metadataPolicy: None
|
||||||
|
property: secret_key
|
117
clusters/cl01tl/applications/vikunja/values.yaml
Normal file
117
clusters/cl01tl/applications/vikunja/values.yaml
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
vikunja:
|
||||||
|
api:
|
||||||
|
enabled: true
|
||||||
|
image:
|
||||||
|
repository: vikunja/api
|
||||||
|
tag: 0.22.1
|
||||||
|
persistence:
|
||||||
|
data:
|
||||||
|
enabled: true
|
||||||
|
size: 10Gi
|
||||||
|
mountPath: /app/vikunja/files
|
||||||
|
storageClass: ceph-block
|
||||||
|
config:
|
||||||
|
type: secret
|
||||||
|
name: vikunja-config-secret
|
||||||
|
configMaps:
|
||||||
|
config:
|
||||||
|
enabled: false
|
||||||
|
ingress:
|
||||||
|
main:
|
||||||
|
enabled: true
|
||||||
|
className: traefik
|
||||||
|
annotations:
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt-issuer
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
|
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||||
|
hosts:
|
||||||
|
- host: vikunja.alexlebens.net
|
||||||
|
paths:
|
||||||
|
- path: /api/v1/
|
||||||
|
tls:
|
||||||
|
- hosts:
|
||||||
|
- vikunja.alexlebens.net
|
||||||
|
secretName: vikunja-secret-tls
|
||||||
|
env:
|
||||||
|
VIKUNJA_SERVICE_FRONTENDURL: https://vikunja.alexlebens.net
|
||||||
|
VIKUNJA_SERVICE_ENABLEREGISTRATION: "true"
|
||||||
|
VIKUNJA_SERVICE_TIMEZONE: US/Central
|
||||||
|
VIKUNJA_REDIS_ENABLED: "true"
|
||||||
|
VIKUNJA_REDIS_HOST: vikunja-redis-headless:6379
|
||||||
|
VIKUNJA_REDIS_PASSWORD:
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: vikunja-config-secret
|
||||||
|
key: redis-password
|
||||||
|
VIKUNJA_DATABASE_USER:
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: vikunja-postgresql-16-cluster-app
|
||||||
|
key: user
|
||||||
|
VIKUNJA_DATABASE_DATABASE:
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: vikunja-postgresql-16-cluster-app
|
||||||
|
key: dbname
|
||||||
|
VIKUNJA_DATABASE_HOST:
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: vikunja-postgresql-16-cluster-app
|
||||||
|
key: host
|
||||||
|
VIKUNJA_DATABASE_PASSWORD:
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: vikunja-postgresql-16-cluster-app
|
||||||
|
key: password
|
||||||
|
frontend:
|
||||||
|
enabled: true
|
||||||
|
image:
|
||||||
|
repository: vikunja/frontend
|
||||||
|
tag: 0.22.1
|
||||||
|
env:
|
||||||
|
VIKUNJA_API_URL: https://vikunja.alexlebens.net/api/v1/
|
||||||
|
ingress:
|
||||||
|
main:
|
||||||
|
enabled: true
|
||||||
|
className: traefik
|
||||||
|
annotations:
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt-issuer
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
|
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||||
|
hosts:
|
||||||
|
- host: vikunja.alexlebens.net
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
tls:
|
||||||
|
- hosts:
|
||||||
|
- vikunja.alexlebens.net
|
||||||
|
secretName: vikunja-secret-tls
|
||||||
|
postgresql:
|
||||||
|
enabled: false
|
||||||
|
redis:
|
||||||
|
enabled: false
|
||||||
|
typesense:
|
||||||
|
enabled: false
|
||||||
|
redis:
|
||||||
|
architecture: standalone
|
||||||
|
auth:
|
||||||
|
enabled: true
|
||||||
|
existingSecret: vikunja-config-secret
|
||||||
|
existingSecretPasswordKey: redis-password
|
||||||
|
postgres-16-cluster:
|
||||||
|
mode: standalone
|
||||||
|
kubernetesClusterName: cl01tl
|
||||||
|
cluster:
|
||||||
|
walStorage:
|
||||||
|
storageClass: local-path
|
||||||
|
storage:
|
||||||
|
storageClass: local-path
|
||||||
|
monitoring:
|
||||||
|
enabled: true
|
||||||
|
backup:
|
||||||
|
enabled: true
|
||||||
|
endpointURL: https://s3.us-east-2.amazonaws.com
|
||||||
|
destinationPath: s3://cl01tl-postgresql-backups/vikunja
|
||||||
|
endpointCredentials: vikunja-postgresql-16-cluster-backup-secret
|
||||||
|
backupIndex: 1
|
||||||
|
retentionPolicy: 14d
|
11
clusters/cl01tl/deployment/argo-rollouts/Chart.yaml
Normal file
11
clusters/cl01tl/deployment/argo-rollouts/Chart.yaml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: argo-rollouts
|
||||||
|
version: 1.0.0
|
||||||
|
sources:
|
||||||
|
- https://github.com/argoproj/argo-rollouts
|
||||||
|
- https://github.com/argoproj/argo-helm/tree/main/charts
|
||||||
|
dependencies:
|
||||||
|
- name: argo-rollouts
|
||||||
|
version: 2.35.2
|
||||||
|
repository: https://argoproj.github.io/argo-helm
|
||||||
|
appVersion: v1.6.6
|
45
clusters/cl01tl/deployment/argo-rollouts/values.yaml
Normal file
45
clusters/cl01tl/deployment/argo-rollouts/values.yaml
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
argo-rollouts:
|
||||||
|
controller:
|
||||||
|
metrics:
|
||||||
|
enabled: true
|
||||||
|
serviceMonitor:
|
||||||
|
enabled: true
|
||||||
|
namespace: argocd
|
||||||
|
dashboard:
|
||||||
|
enabled: true
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
annotations:
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
|
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt-issuer
|
||||||
|
ingressClassName: traefik
|
||||||
|
hosts:
|
||||||
|
- argo-rollouts.alexlebens.net
|
||||||
|
tls:
|
||||||
|
- secretName: argo-rollouts-secret-tls
|
||||||
|
hosts:
|
||||||
|
- argo-rollouts.alexlebens.net
|
||||||
|
|
||||||
|
notifications:
|
||||||
|
notifiers: {}
|
||||||
|
# service.slack: |
|
||||||
|
# token: $slack-token
|
||||||
|
|
||||||
|
# -- Notification templates
|
||||||
|
templates: {}
|
||||||
|
# template.my-purple-template: |
|
||||||
|
# message: |
|
||||||
|
# Rollout {{.rollout.metadata.name}} has purple image
|
||||||
|
# slack:
|
||||||
|
# attachments: |
|
||||||
|
# [{
|
||||||
|
# "title": "{{ .rollout.metadata.name}}",
|
||||||
|
# "color": "#800080"
|
||||||
|
# }]
|
||||||
|
|
||||||
|
# -- The trigger defines the condition when the notification should be sent
|
||||||
|
triggers: {}
|
||||||
|
# trigger.on-purple: |
|
||||||
|
# - send: [my-purple-template]
|
||||||
|
# when: rollout.spec.template.spec.containers[0].image == 'argoproj/rollouts-demo:purple'
|
20
clusters/cl01tl/deployment/argo-workflows/Chart.yaml
Normal file
20
clusters/cl01tl/deployment/argo-workflows/Chart.yaml
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: argo-workflows
|
||||||
|
version: 1.0.0
|
||||||
|
sources:
|
||||||
|
- https://github.com/argoproj/argo-workflows
|
||||||
|
- https://github.com/argoproj/argo-events
|
||||||
|
- https://github.com/argoproj/argo-helm/tree/main/charts
|
||||||
|
- https://github.com/alexlebens/helm-charts/charts/postgres-cluster
|
||||||
|
dependencies:
|
||||||
|
- name: argo-workflows
|
||||||
|
version: 0.41.4
|
||||||
|
repository: https://argoproj.github.io/argo-helm
|
||||||
|
- name: argo-events
|
||||||
|
version: 2.4.4
|
||||||
|
repository: https://argoproj.github.io/argo-helm
|
||||||
|
- name: postgres-cluster
|
||||||
|
alias: postgres-16-cluster
|
||||||
|
version: 3.0.0
|
||||||
|
repository: http://alexlebens.github.io/helm-charts
|
||||||
|
appVersion: v3.5.6
|
@@ -0,0 +1,62 @@
|
|||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: argo-workflows-oidc-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: argo-workflows-oidc-secret
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: web
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: secret
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /authentik/oidc/argo-workflows
|
||||||
|
metadataPolicy: None
|
||||||
|
property: secret
|
||||||
|
- secretKey: client
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /authentik/oidc/argo-workflows
|
||||||
|
metadataPolicy: None
|
||||||
|
property: client
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: argo-workflows-postgresql-16-cluster-backup-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: argo-workflows-postgresql-16-cluster-backup-secret
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: database
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: ACCESS_KEY_ID
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /aws/keys/cl01tl-argo-workflows-postgresql
|
||||||
|
metadataPolicy: None
|
||||||
|
property: access_key
|
||||||
|
- secretKey: ACCESS_SECRET_KEY
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /aws/keys/cl01tl-argo-workflows-postgresql
|
||||||
|
metadataPolicy: None
|
||||||
|
property: secret_key
|
121
clusters/cl01tl/deployment/argo-workflows/values.yaml
Normal file
121
clusters/cl01tl/deployment/argo-workflows/values.yaml
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
argo-workflows:
|
||||||
|
controller:
|
||||||
|
metricsConfig:
|
||||||
|
enabled: true
|
||||||
|
persistence:
|
||||||
|
connectionPool:
|
||||||
|
maxIdleConns: 100
|
||||||
|
maxOpenConns: 0
|
||||||
|
nodeStatusOffLoad: true
|
||||||
|
archive: true
|
||||||
|
postgresql:
|
||||||
|
host: argo-workflows-postgresql-16-cluster-rw
|
||||||
|
port: 5432
|
||||||
|
database: app
|
||||||
|
tableName: app
|
||||||
|
userNameSecret:
|
||||||
|
name: argo-workflows-postgresql-16-cluster-app
|
||||||
|
key: username
|
||||||
|
passwordSecret:
|
||||||
|
name: argo-workflows-postgresql-16-cluster-app
|
||||||
|
key: password
|
||||||
|
ssl: false
|
||||||
|
sslMode: disable
|
||||||
|
workflowWorkers: 2
|
||||||
|
workflowTTLWorkers: 1
|
||||||
|
podCleanupWorkers: 1
|
||||||
|
cronWorkflowWorkers: 1
|
||||||
|
telemetryConfig:
|
||||||
|
enabled: true
|
||||||
|
serviceMonitor:
|
||||||
|
enabled: true
|
||||||
|
name: workflow-controller
|
||||||
|
workflowNamespaces:
|
||||||
|
- argocd
|
||||||
|
server:
|
||||||
|
authModes:
|
||||||
|
- sso
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
annotations:
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
|
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt-issuer
|
||||||
|
ingressClassName: traefik
|
||||||
|
hosts:
|
||||||
|
- argo-workflows.alexlebens.net
|
||||||
|
tls:
|
||||||
|
- secretName: argoworkflows-example-tls
|
||||||
|
hosts:
|
||||||
|
- argo-workflows.alexlebens.net
|
||||||
|
sso:
|
||||||
|
enabled: true
|
||||||
|
issuer: https://authentik.alexlebens.net/application/o/argo-workflows/
|
||||||
|
clientId:
|
||||||
|
name: argo-workflows-oidc-secret
|
||||||
|
key: client
|
||||||
|
clientSecret:
|
||||||
|
name: argo-workflows-oidc-secret
|
||||||
|
key: secret
|
||||||
|
redirectUrl: https://argo-workflows.alexlebens.net/oauth2/callback
|
||||||
|
rbac:
|
||||||
|
enabled: false
|
||||||
|
scopes:
|
||||||
|
- openid
|
||||||
|
- email
|
||||||
|
- profile
|
||||||
|
useStaticCredentials: true
|
||||||
|
artifactRepository:
|
||||||
|
archiveLogs: false
|
||||||
|
s3: {}
|
||||||
|
# accessKeySecret:
|
||||||
|
# name: "{{ .Release.Name }}-minio"
|
||||||
|
# key: accesskey
|
||||||
|
# secretKeySecret:
|
||||||
|
# name: "{{ .Release.Name }}-minio"
|
||||||
|
# key: secretkey
|
||||||
|
# insecure: true
|
||||||
|
# bucket:
|
||||||
|
# endpoint:
|
||||||
|
# region:
|
||||||
|
# encryptionOptions:
|
||||||
|
# enableEncryption: true
|
||||||
|
|
||||||
|
argo-events:
|
||||||
|
global:
|
||||||
|
image:
|
||||||
|
repository: quay.io/argoproj/argo-events
|
||||||
|
tag: v1.9.1
|
||||||
|
controller:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 500m
|
||||||
|
memory: 512Mi
|
||||||
|
requests:
|
||||||
|
cpu: 250m
|
||||||
|
memory: 256Mi
|
||||||
|
metrics:
|
||||||
|
enabled: true
|
||||||
|
serviceMonitor:
|
||||||
|
enabled: true
|
||||||
|
namespace: argocd
|
||||||
|
webhook:
|
||||||
|
enabled: true
|
||||||
|
postgres-16-cluster:
|
||||||
|
mode: standalone
|
||||||
|
cluster:
|
||||||
|
walStorage:
|
||||||
|
storageClass: local-path
|
||||||
|
storage:
|
||||||
|
storageClass: local-path
|
||||||
|
monitoring:
|
||||||
|
enabled: true
|
||||||
|
prometheusRule:
|
||||||
|
enabled: true
|
||||||
|
backup:
|
||||||
|
enabled: true
|
||||||
|
endpointURL: https://s3.us-east-2.amazonaws.com
|
||||||
|
destinationPath: s3://cl01tl-postgresql-backups/argo-workflows
|
||||||
|
endpointCredentials: argo-workflows-postgresql-16-cluster-backup-secret
|
||||||
|
backupIndex: 1
|
||||||
|
retentionPolicy: 14d
|
12
clusters/cl01tl/deployment/argocd/Chart.yaml
Normal file
12
clusters/cl01tl/deployment/argocd/Chart.yaml
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: argocd
|
||||||
|
version: 0.1.0
|
||||||
|
home: https://outline.alexlebens.net/doc/argo-cd-qLEdrgdwOD
|
||||||
|
sources:
|
||||||
|
- https://github.com/argoproj/argo-cd
|
||||||
|
- https://github.com/argoproj/argo-helm/tree/main/charts/argo-cd
|
||||||
|
dependencies:
|
||||||
|
- name: argo-cd
|
||||||
|
version: 6.9.3
|
||||||
|
repository: https://argoproj.github.io/argo-helm
|
||||||
|
appVersion: v2.10.8
|
110
clusters/cl01tl/deployment/argocd/templates/external-secret.yaml
Normal file
110
clusters/cl01tl/deployment/argocd/templates/external-secret.yaml
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: argocd-oidc-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: "{{ .Release.Name }}-server"
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: server
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: secret
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /authentik/oidc/argocd
|
||||||
|
metadataPolicy: None
|
||||||
|
property: secret
|
||||||
|
- secretKey: client
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /authentik/oidc/argocd
|
||||||
|
metadataPolicy: None
|
||||||
|
property: client
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: argocd-cluster-cl02do-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: "{{ .Release.Name }}-server"
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: server
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
argocd.argoproj.io/secret-type: cluster
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: name
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /argocd/credentials/cluster/cl02do
|
||||||
|
metadataPolicy: None
|
||||||
|
property: name
|
||||||
|
- secretKey: server
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /argocd/credentials/cluster/cl02do
|
||||||
|
metadataPolicy: None
|
||||||
|
property: server
|
||||||
|
- secretKey: config
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /argocd/credentials/cluster/cl02do
|
||||||
|
metadataPolicy: None
|
||||||
|
property: config
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: argocd-repo-alexlebens-dev-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: "{{ .Release.Name }}-server"
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: server
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
argocd.argoproj.io/secret-type: repository
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: type
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /argocd/credentials/repo/alexlebens-dev
|
||||||
|
metadataPolicy: None
|
||||||
|
property: type
|
||||||
|
- secretKey: url
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /argocd/credentials/repo/alexlebens-dev
|
||||||
|
metadataPolicy: None
|
||||||
|
property: url
|
||||||
|
- secretKey: sshPrivateKey
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /argocd/credentials/repo/alexlebens-dev
|
||||||
|
metadataPolicy: None
|
||||||
|
property: sshPrivateKey
|
66
clusters/cl01tl/deployment/argocd/values.yaml
Normal file
66
clusters/cl01tl/deployment/argocd/values.yaml
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
argo-cd:
|
||||||
|
crds:
|
||||||
|
install: true
|
||||||
|
configs:
|
||||||
|
cm:
|
||||||
|
admin.enabled: true
|
||||||
|
url: https://argocd.alexlebens.net
|
||||||
|
statusbadge.enabled: true
|
||||||
|
dex.config: |
|
||||||
|
connectors:
|
||||||
|
- config:
|
||||||
|
issuer: https://authentik.alexlebens.net/application/o/argocd/
|
||||||
|
clientID: $argocd-oidc-secret:client
|
||||||
|
clientSecret: $argocd-oidc-secret:secret
|
||||||
|
insecureEnableGroups: true
|
||||||
|
scopes:
|
||||||
|
- openid
|
||||||
|
- profile
|
||||||
|
- email
|
||||||
|
- groups
|
||||||
|
name: authentik
|
||||||
|
type: oidc
|
||||||
|
id: authentik
|
||||||
|
rbac:
|
||||||
|
policy.csv: |
|
||||||
|
g, ArgoCD Admins, role:admin
|
||||||
|
params:
|
||||||
|
server.insecure: true
|
||||||
|
server:
|
||||||
|
replicas: 2
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
controller: generic
|
||||||
|
ingressClassName: traefik
|
||||||
|
annotations:
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
|
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt-issuer
|
||||||
|
hostname: argocd.alexlebens.net
|
||||||
|
tls: true
|
||||||
|
metrics:
|
||||||
|
enabled: true
|
||||||
|
serviceMonitor:
|
||||||
|
enabled: true
|
||||||
|
dex:
|
||||||
|
enabled: true
|
||||||
|
redis-ha:
|
||||||
|
enabled: true
|
||||||
|
controller:
|
||||||
|
replicas: 1
|
||||||
|
metrics:
|
||||||
|
enabled: true
|
||||||
|
serviceMonitor:
|
||||||
|
enabled: true
|
||||||
|
repoServer:
|
||||||
|
replicas: 2
|
||||||
|
metrics:
|
||||||
|
enabled: true
|
||||||
|
serviceMonitor:
|
||||||
|
enabled: true
|
||||||
|
applicationSet:
|
||||||
|
replicas: 2
|
||||||
|
metrics:
|
||||||
|
enabled: true
|
||||||
|
serviceMonitor:
|
||||||
|
enabled: true
|
11
clusters/cl01tl/deployment/kargo/Chart.yaml
Normal file
11
clusters/cl01tl/deployment/kargo/Chart.yaml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: kargo
|
||||||
|
version: 1.0.0
|
||||||
|
sources:
|
||||||
|
- https://github.com/akuity/kargo
|
||||||
|
- https://github.com/akuity/kargo/blob/main/charts/kargo/Chart.yaml
|
||||||
|
dependencies:
|
||||||
|
- name: kargo
|
||||||
|
version: 0.6.0
|
||||||
|
repository: oci://ghcr.io/akuity/kargo-charts
|
||||||
|
appVersion: v0.5.1
|
@@ -0,0 +1,56 @@
|
|||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: kargo-oidc-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kargo-oidc-secret
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: web
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: CLIENT_SECRET
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /authentik/oidc/kargo
|
||||||
|
metadataPolicy: None
|
||||||
|
property: secret
|
||||||
|
- secretKey: CLIENT_ID
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /authentik/oidc/kargo
|
||||||
|
metadataPolicy: None
|
||||||
|
property: client
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: kargo-cluster-cl02do-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kargo-cluster-cl02do-secret
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: web
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
argocd.argoproj.io/secret-type: cluster
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: kubeconfig
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /argocd/credentials/cluster/cl02do
|
||||||
|
metadataPolicy: None
|
||||||
|
property: kubeconfig
|
120
clusters/cl01tl/deployment/kargo/values.yaml
Normal file
120
clusters/cl01tl/deployment/kargo/values.yaml
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
kargo:
|
||||||
|
api:
|
||||||
|
host: kargo.alexlebens.net
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 128Mi
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 128Mi
|
||||||
|
tls:
|
||||||
|
enabled: false
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
annotations:
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
|
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt-issuer
|
||||||
|
ingressClassName: traefik
|
||||||
|
tls:
|
||||||
|
enabled: true
|
||||||
|
selfSignedCert: false
|
||||||
|
adminAccount:
|
||||||
|
enabled: false
|
||||||
|
oidc:
|
||||||
|
enabled: true
|
||||||
|
admins:
|
||||||
|
groups: ["ArgoCD Admins"]
|
||||||
|
dex:
|
||||||
|
enabled: true
|
||||||
|
image:
|
||||||
|
repository: ghcr.io/dexidp/dex
|
||||||
|
tag: v2.39.1
|
||||||
|
env:
|
||||||
|
- name: CLIENT_ID
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: kargo-oidc-secret
|
||||||
|
key: CLIENT_ID
|
||||||
|
- name: CLIENT_SECRET
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: kargo-oidc-secret
|
||||||
|
key: CLIENT_SECRET
|
||||||
|
tls:
|
||||||
|
selfSignedCert: false
|
||||||
|
skipApprovalScreen: true
|
||||||
|
connectors:
|
||||||
|
- type: oidc
|
||||||
|
id: authentik
|
||||||
|
name: Authentik
|
||||||
|
config:
|
||||||
|
issuer: https://authentik.alexlebens.net/application/o/kargo/
|
||||||
|
clientID: "$CLIENT_ID"
|
||||||
|
clientSecret: "$CLIENT_SECRET"
|
||||||
|
redirectURI: https://kargo.alexlebens.net/dex/callback
|
||||||
|
insecureEnableGroups: true
|
||||||
|
scopes:
|
||||||
|
- openid
|
||||||
|
- profile
|
||||||
|
- email
|
||||||
|
- groups
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 128Mi
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 128Mi
|
||||||
|
argocd:
|
||||||
|
urls:
|
||||||
|
"": https://argocd.alexlebens.net
|
||||||
|
rollouts:
|
||||||
|
integrationEnabled: true
|
||||||
|
controller:
|
||||||
|
enabled: true
|
||||||
|
gitClient:
|
||||||
|
name: "Kargo cl01tl"
|
||||||
|
email: "alexanderlebens@gmail.com"
|
||||||
|
argocd:
|
||||||
|
integrationEnabled: true
|
||||||
|
rollouts:
|
||||||
|
integrationEnabled: true
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 128Mi
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 128Mi
|
||||||
|
managementController:
|
||||||
|
enabled: true
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 128Mi
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 128Mi
|
||||||
|
webhooks:
|
||||||
|
register: true
|
||||||
|
webhooksServer:
|
||||||
|
tls:
|
||||||
|
selfSignedCert: true
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 128Mi
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 128Mi
|
||||||
|
garbageCollector:
|
||||||
|
schedule: "0 * * * *"
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 128Mi
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 128Mi
|
6
clusters/cl01tl/deployment/stack/Chart.yaml
Normal file
6
clusters/cl01tl/deployment/stack/Chart.yaml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: stack
|
||||||
|
version: 1.0.0
|
||||||
|
sources:
|
||||||
|
- https://github.com/alexlebens/alexlebens-net.git
|
||||||
|
appVersion: 1.0.0
|
@@ -0,0 +1,55 @@
|
|||||||
|
{{- range $index, $stack := .Values.applicationSet }}
|
||||||
|
---
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: ApplicationSet
|
||||||
|
metadata:
|
||||||
|
name: {{ $stack.name }}
|
||||||
|
namespace: {{ $.Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ $stack.name }}
|
||||||
|
app.kubernetes.io/instance: {{ $stack.name }}
|
||||||
|
app.kubernetes.io/version: {{ $.Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: {{ $stack.name }}
|
||||||
|
app.kubernetes.io/part-of: {{ $.Release.Name }}
|
||||||
|
spec:
|
||||||
|
syncPolicy:
|
||||||
|
applicationsSync: create-only
|
||||||
|
preserveResourcesOnDeletion: true
|
||||||
|
generators:
|
||||||
|
- git:
|
||||||
|
repoURL: {{ $.Values.git.repo }}
|
||||||
|
revision: {{ $.Values.git.revision }}
|
||||||
|
directories:
|
||||||
|
- path: "{{ $.Values.git.path }}/{{ $stack.name }}/*"
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
name: '{{ `{{path.basename}}` }}'
|
||||||
|
finalizers:
|
||||||
|
- resources-finalizer.argocd.argoproj.io
|
||||||
|
spec:
|
||||||
|
destination:
|
||||||
|
name: in-cluster
|
||||||
|
namespace: '{{ $stack.namespace | default `{{path.basename}}` }}'
|
||||||
|
project: default
|
||||||
|
revisionHistoryLimit: 3
|
||||||
|
source:
|
||||||
|
repoURL: {{ $.Values.git.repo }}
|
||||||
|
targetRevision: {{ $.Values.git.revision }}
|
||||||
|
path: '{{ `{{path}}` }}'
|
||||||
|
ignoreDifferences:
|
||||||
|
{{- toYaml $stack.ignoreDifferences | nindent 8 }}
|
||||||
|
syncPolicy:
|
||||||
|
{{- if $stack.syncPolicy.automated.enabled }}
|
||||||
|
automated:
|
||||||
|
prune: {{ $stack.syncPolicy.automated.prune | default false }}
|
||||||
|
selfHeal: {{ $stack.syncPolicy.automated.selfHeal | default false }}
|
||||||
|
{{- end }}
|
||||||
|
retry:
|
||||||
|
limit: 3
|
||||||
|
backoff:
|
||||||
|
duration: 1m
|
||||||
|
factor: 2
|
||||||
|
maxDuration: 15m
|
||||||
|
syncOptions:
|
||||||
|
{{- toYaml $stack.syncPolicy.syncOptions | nindent 10 }}
|
||||||
|
{{- end }}
|
82
clusters/cl01tl/deployment/stack/templates/application.yaml
Normal file
82
clusters/cl01tl/deployment/stack/templates/application.yaml
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: cilium
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
finalizers:
|
||||||
|
- resources-finalizer.argocd.argoproj.io
|
||||||
|
spec:
|
||||||
|
project: default
|
||||||
|
source:
|
||||||
|
repoURL: {{ .Values.application.cilium.source.repo }}
|
||||||
|
targetRevision: {{ .Values.application.cilium.source.revision }}
|
||||||
|
path: "{{ .Values.git.path }}/{{ .Values.application.cilium.source.path }}"
|
||||||
|
destination:
|
||||||
|
name: in-cluster
|
||||||
|
namespace: {{ .Values.application.cilium.namespace }}
|
||||||
|
revisionHistoryLimit: 3
|
||||||
|
syncPolicy:
|
||||||
|
{{- toYaml .Values.application.cilium.syncPolicy | nindent 4 }}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: metrics-server
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
finalizers:
|
||||||
|
- resources-finalizer.argocd.argoproj.io
|
||||||
|
spec:
|
||||||
|
project: default
|
||||||
|
source:
|
||||||
|
repoURL: {{ .Values.application.metricsServer.source.repo }}
|
||||||
|
targetRevision: {{ .Values.application.metricsServer.source.revision }}
|
||||||
|
path: "{{ .Values.git.path }}/{{ .Values.application.metricsServer.source.path }}"
|
||||||
|
destination:
|
||||||
|
name: in-cluster
|
||||||
|
namespace: {{ .Values.application.metricsServer.namespace }}
|
||||||
|
revisionHistoryLimit: 3
|
||||||
|
syncPolicy:
|
||||||
|
{{- toYaml .Values.application.metricsServer.syncPolicy | nindent 4 }}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: kubelet-serving-cert-approver
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
finalizers:
|
||||||
|
- resources-finalizer.argocd.argoproj.io
|
||||||
|
spec:
|
||||||
|
project: default
|
||||||
|
source:
|
||||||
|
repoURL: {{ .Values.application.kubeletServingCertApprover.source.repo }}
|
||||||
|
targetRevision: {{ .Values.application.kubeletServingCertApprover.source.revision }}
|
||||||
|
path: "{{ .Values.git.path }}/{{ .Values.application.kubeletServingCertApprover.source.path }}"
|
||||||
|
destination:
|
||||||
|
name: in-cluster
|
||||||
|
namespace: {{ .Values.application.kubeletServingCertApprover.namespace }}
|
||||||
|
revisionHistoryLimit: 3
|
||||||
|
syncPolicy:
|
||||||
|
{{- toYaml .Values.application.kubeletServingCertApprover.syncPolicy | nindent 4 }}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: prometheus-operator-crds
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
finalizers:
|
||||||
|
- resources-finalizer.argocd.argoproj.io
|
||||||
|
spec:
|
||||||
|
project: default
|
||||||
|
source:
|
||||||
|
repoURL: {{ .Values.application.prometheusOperatorCrds.source.repo }}
|
||||||
|
targetRevision: {{ .Values.application.prometheusOperatorCrds.source.revision }}
|
||||||
|
path: "{{ .Values.git.path }}/{{ .Values.application.prometheusOperatorCrds.source.path }}"
|
||||||
|
destination:
|
||||||
|
name: in-cluster
|
||||||
|
namespace: {{ .Values.application.prometheusOperatorCrds.namespace }}
|
||||||
|
revisionHistoryLimit: 3
|
||||||
|
syncPolicy:
|
||||||
|
{{- toYaml .Values.application.prometheusOperatorCrds.syncPolicy | nindent 4 }}
|
148
clusters/cl01tl/deployment/stack/values.yaml
Normal file
148
clusters/cl01tl/deployment/stack/values.yaml
Normal file
@@ -0,0 +1,148 @@
|
|||||||
|
git:
|
||||||
|
repo: git@github.com:alexlebens/alexlebens-net.git
|
||||||
|
revision: HEAD
|
||||||
|
path: clusters/cl01tl
|
||||||
|
applicationSet:
|
||||||
|
- name: applications
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
enabled: true
|
||||||
|
prune: true
|
||||||
|
selfheal: false
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
- ApplyOutOfSyncOnly=true
|
||||||
|
- ServerSideApply=false
|
||||||
|
- PruneLast=true
|
||||||
|
- name: deployment
|
||||||
|
namespace: argocd
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
enabled: true
|
||||||
|
prune: true
|
||||||
|
selfheal: false
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
- ApplyOutOfSyncOnly=true
|
||||||
|
- ServerSideApply=false
|
||||||
|
- PruneLast=true
|
||||||
|
- name: platform
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
enabled: true
|
||||||
|
prune: true
|
||||||
|
selfheal: false
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
- ApplyOutOfSyncOnly=true
|
||||||
|
- ServerSideApply=true
|
||||||
|
- PruneLast=true
|
||||||
|
- name: services
|
||||||
|
ignoreDifferences:
|
||||||
|
- group: ""
|
||||||
|
kind: Service
|
||||||
|
jqPathExpressions:
|
||||||
|
- .status.loadBalancer.ingress[].ipMode
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
enabled: true
|
||||||
|
prune: true
|
||||||
|
selfheal: false
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
- ApplyOutOfSyncOnly=true
|
||||||
|
- ServerSideApply=true
|
||||||
|
- PruneLast=true
|
||||||
|
- name: storage
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
enabled: true
|
||||||
|
prune: true
|
||||||
|
selfheal: false
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
- ApplyOutOfSyncOnly=true
|
||||||
|
- ServerSideApply=false
|
||||||
|
- PruneLast=true
|
||||||
|
application:
|
||||||
|
cilium:
|
||||||
|
namespace: kube-system
|
||||||
|
source:
|
||||||
|
repo: git@github.com:alexlebens/alexlebens-net.git
|
||||||
|
revision: HEAD
|
||||||
|
path: standalone/cilium
|
||||||
|
syncPolicy:
|
||||||
|
retry:
|
||||||
|
limit: 10
|
||||||
|
backoff:
|
||||||
|
duration: 1m
|
||||||
|
factor: 2
|
||||||
|
maxDuration: 16m
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=false
|
||||||
|
- ApplyOutOfSyncOnly=true
|
||||||
|
- ServerSideApply=true
|
||||||
|
- PruneLast=true
|
||||||
|
metricsServer:
|
||||||
|
namespace: kube-system
|
||||||
|
source:
|
||||||
|
repo: git@github.com:alexlebens/alexlebens-net.git
|
||||||
|
revision: HEAD
|
||||||
|
path: standalone/metrics-server
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
selfHeal: true
|
||||||
|
retry:
|
||||||
|
limit: 10
|
||||||
|
backoff:
|
||||||
|
duration: 1m
|
||||||
|
factor: 2
|
||||||
|
maxDuration: 16m
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=false
|
||||||
|
- ApplyOutOfSyncOnly=false
|
||||||
|
- ServerSideApply=true
|
||||||
|
- PruneLast=true
|
||||||
|
kubeletServingCertApprover:
|
||||||
|
namespace: kubelet-serving-cert-approver
|
||||||
|
source:
|
||||||
|
repo: git@github.com:alexlebens/alexlebens-net.git
|
||||||
|
revision: HEAD
|
||||||
|
path: standalone/kubelet-serving-cert-approver
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
selfHeal: true
|
||||||
|
retry:
|
||||||
|
limit: 10
|
||||||
|
backoff:
|
||||||
|
duration: 1m
|
||||||
|
factor: 2
|
||||||
|
maxDuration: 16m
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
- ApplyOutOfSyncOnly=false
|
||||||
|
- ServerSideApply=true
|
||||||
|
- PruneLast=true
|
||||||
|
prometheusOperatorCrds:
|
||||||
|
namespace: kube-system
|
||||||
|
source:
|
||||||
|
repo: git@github.com:alexlebens/alexlebens-net.git
|
||||||
|
revision: HEAD
|
||||||
|
path: standalone/prometheus-operator-crds
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
selfHeal: true
|
||||||
|
retry:
|
||||||
|
limit: 10
|
||||||
|
backoff:
|
||||||
|
duration: 1m
|
||||||
|
factor: 2
|
||||||
|
maxDuration: 16m
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=false
|
||||||
|
- ApplyOutOfSyncOnly=false
|
||||||
|
- ServerSideApply=true
|
||||||
|
- PruneLast=true
|
21
clusters/cl01tl/platform/authentik/Chart.yaml
Normal file
21
clusters/cl01tl/platform/authentik/Chart.yaml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: authentik
|
||||||
|
version: 1.0.0
|
||||||
|
sources:
|
||||||
|
- https://github.com/goauthentik/authentik
|
||||||
|
- https://github.com/goauthentik/helm
|
||||||
|
- https://github.com/bjw-s/helm-charts/tree/main/charts/other/app-template
|
||||||
|
- https://github.com/alexlebens/helm-charts/charts/postgres-cluster
|
||||||
|
dependencies:
|
||||||
|
- name: authentik
|
||||||
|
version: 2024.4.2
|
||||||
|
repository: https://charts.goauthentik.io/
|
||||||
|
- name: app-template
|
||||||
|
alias: cloudflared
|
||||||
|
repository: https://bjw-s.github.io/helm-charts/
|
||||||
|
version: 3.1.0
|
||||||
|
- name: postgres-cluster
|
||||||
|
alias: postgres-16-cluster
|
||||||
|
version: 3.0.0
|
||||||
|
repository: http://alexlebens.github.io/helm-charts
|
||||||
|
appVersion: "2024.4.2"
|
60
clusters/cl01tl/platform/authentik/templates/config-map.yaml
Normal file
60
clusters/cl01tl/platform/authentik/templates/config-map.yaml
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: authentik-custom-css
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: web
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
data:
|
||||||
|
custom.css: |
|
||||||
|
/* Change sign button color */
|
||||||
|
.pf-c-button.pf-m-primary {
|
||||||
|
color: black;
|
||||||
|
background-color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Remove background */
|
||||||
|
.pf-c-login__main {
|
||||||
|
background-color: rgba(3, 3, 3, 0.16);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Remove specific height */
|
||||||
|
.pf-c-brand {
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Center text */
|
||||||
|
.pf-c-title {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Match text field to login button */
|
||||||
|
.pf-c-form-control {
|
||||||
|
border-radius: 3px;
|
||||||
|
background-color: white;
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Force border color */
|
||||||
|
.pf-c-form-control {
|
||||||
|
border-color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Use default cursor on this div */
|
||||||
|
.pf-c-form__label {
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide required asterik */
|
||||||
|
.pf-c-form__label-required {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Change link color to white */
|
||||||
|
.a {
|
||||||
|
color: white;
|
||||||
|
}
|
@@ -0,0 +1,80 @@
|
|||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: authentik-key-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: authentik-key-secret
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: web
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: key
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /authentik/key
|
||||||
|
metadataPolicy: None
|
||||||
|
property: key
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: authentik-cloudflared-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: authentik-cloudflared-secret
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: web
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: cf-tunnel-token
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /cloudflare/tunnels/authentik
|
||||||
|
metadataPolicy: None
|
||||||
|
property: token
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: authentik-postgresql-16-cluster-backup-secret
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: authentik-postgresql-16-cluster-backup-secret
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: database
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault
|
||||||
|
data:
|
||||||
|
- secretKey: ACCESS_KEY_ID
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /aws/keys/cl01tl-authentik-postgresql
|
||||||
|
metadataPolicy: None
|
||||||
|
property: access_key
|
||||||
|
- secretKey: ACCESS_SECRET_KEY
|
||||||
|
remoteRef:
|
||||||
|
conversionStrategy: Default
|
||||||
|
decodingStrategy: None
|
||||||
|
key: /aws/keys/cl01tl-authentik-postgresql
|
||||||
|
metadataPolicy: None
|
||||||
|
property: secret_key
|
118
clusters/cl01tl/platform/authentik/values.yaml
Normal file
118
clusters/cl01tl/platform/authentik/values.yaml
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
authentik:
|
||||||
|
global:
|
||||||
|
env:
|
||||||
|
- name: AUTHENTIK_SECRET_KEY
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: authentik-key-secret
|
||||||
|
key: key
|
||||||
|
- name: AUTHENTIK_POSTGRESQL__HOST
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: authentik-postgresql-16-cluster-app
|
||||||
|
key: host
|
||||||
|
- name: AUTHENTIK_POSTGRESQL__NAME
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: authentik-postgresql-16-cluster-app
|
||||||
|
key: dbname
|
||||||
|
- name: AUTHENTIK_POSTGRESQL__USER
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: authentik-postgresql-16-cluster-app
|
||||||
|
key: user
|
||||||
|
- name: AUTHENTIK_POSTGRESQL__PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: authentik-postgresql-16-cluster-app
|
||||||
|
key: password
|
||||||
|
server:
|
||||||
|
name: server
|
||||||
|
replicas: 1
|
||||||
|
volumes:
|
||||||
|
- name: custom-css
|
||||||
|
configMap:
|
||||||
|
name: authentik-custom-css
|
||||||
|
volumeMounts:
|
||||||
|
- name: custom-css
|
||||||
|
mountPath: /web/dist/custom.css
|
||||||
|
subPath: custom.css
|
||||||
|
metrics:
|
||||||
|
enabled: true
|
||||||
|
serviceMonitor:
|
||||||
|
enabled: true
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
annotations:
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
|
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt-issuer
|
||||||
|
ingressClassName: traefik
|
||||||
|
hosts:
|
||||||
|
- auth.alexlebens.net
|
||||||
|
- authentik.alexlebens.net
|
||||||
|
tls:
|
||||||
|
- secretName: authentik-secret-tls
|
||||||
|
hosts:
|
||||||
|
- auth.alexlebens.net
|
||||||
|
- authentik.alexlebens.net
|
||||||
|
worker:
|
||||||
|
name: worker
|
||||||
|
replicas: 1
|
||||||
|
prometheus:
|
||||||
|
rules:
|
||||||
|
enabled: true
|
||||||
|
postgresql:
|
||||||
|
enabled: false
|
||||||
|
redis:
|
||||||
|
enabled: true
|
||||||
|
cloudflared:
|
||||||
|
global:
|
||||||
|
nameOverride: cloudflared
|
||||||
|
controllers:
|
||||||
|
main:
|
||||||
|
type: deployment
|
||||||
|
strategy: Recreate
|
||||||
|
containers:
|
||||||
|
main:
|
||||||
|
image:
|
||||||
|
repository: cloudflare/cloudflared
|
||||||
|
tag: "2024.5.0"
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
args:
|
||||||
|
- tunnel
|
||||||
|
- --no-autoupdate
|
||||||
|
- run
|
||||||
|
- --token
|
||||||
|
- $(CF_MANAGED_TUNNEL_TOKEN)
|
||||||
|
env:
|
||||||
|
- name: CF_MANAGED_TUNNEL_TOKEN
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: authentik-cloudflared-secret
|
||||||
|
key: cf-tunnel-token
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 128Mi
|
||||||
|
requests:
|
||||||
|
cpu: 10m
|
||||||
|
memory: 64Mi
|
||||||
|
postgres-16-cluster:
|
||||||
|
mode: standalone
|
||||||
|
cluster:
|
||||||
|
walStorage:
|
||||||
|
storageClass: local-path
|
||||||
|
storage:
|
||||||
|
storageClass: local-path
|
||||||
|
monitoring:
|
||||||
|
enabled: true
|
||||||
|
prometheusRule:
|
||||||
|
enabled: false
|
||||||
|
backup:
|
||||||
|
enabled: true
|
||||||
|
endpointURL: https://s3.us-east-2.amazonaws.com
|
||||||
|
destinationPath: s3://cl01tl-postgresql-backups/authentik
|
||||||
|
endpointCredentials: authentik-postgresql-16-cluster-backup-secret
|
||||||
|
backupIndex: 1
|
||||||
|
retentionPolicy: 14d
|
11
clusters/cl01tl/platform/external-secrets/Chart.yaml
Normal file
11
clusters/cl01tl/platform/external-secrets/Chart.yaml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: external-secrets
|
||||||
|
version: 0.0.1
|
||||||
|
sources:
|
||||||
|
- https://github.com/external-secrets/external-secrets
|
||||||
|
- https://github.com/external-secrets/external-secrets/tree/main/deploy/charts/external-secrets
|
||||||
|
dependencies:
|
||||||
|
- name: external-secrets
|
||||||
|
version: 0.9.18
|
||||||
|
repository: https://charts.external-secrets.io
|
||||||
|
appVersion: 0.9.13
|
@@ -0,0 +1,21 @@
|
|||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
metadata:
|
||||||
|
name: vault
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/component: auth
|
||||||
|
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
provider:
|
||||||
|
vault:
|
||||||
|
server: http://vault-internal.vault:8200
|
||||||
|
path: secret
|
||||||
|
auth:
|
||||||
|
tokenSecretRef:
|
||||||
|
namespace: vault
|
||||||
|
name: vault-token
|
||||||
|
key: token
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user