initial migration
This commit is contained in:
parent
5cb41fd5e4
commit
41f0153fd0
150
apps/adguard/configmap.yaml
Normal file
150
apps/adguard/configmap.yaml
Normal file
@ -0,0 +1,150 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: adguard-home-config
|
||||
namespace: adguard
|
||||
data:
|
||||
AdGuardHome.yaml: |-
|
||||
bind_host: 0.0.0.0
|
||||
bind_port: 3000
|
||||
beta_bind_port: 0
|
||||
users: []
|
||||
auth_attempts: 5
|
||||
block_auth_min: 15
|
||||
http_proxy: ""
|
||||
language: ""
|
||||
debug_pprof: false
|
||||
web_session_ttl: 720
|
||||
dns:
|
||||
bind_hosts:
|
||||
- 0.0.0.0
|
||||
port: 53
|
||||
statistics_interval: 1
|
||||
querylog_enabled: true
|
||||
querylog_file_enabled: true
|
||||
querylog_interval: 2160h
|
||||
querylog_size_memory: 1000
|
||||
anonymize_client_ip: false
|
||||
protection_enabled: true
|
||||
blocking_mode: default
|
||||
blocking_ipv4: ""
|
||||
blocking_ipv6: ""
|
||||
blocked_response_ttl: 10
|
||||
parental_block_host: family-block.dns.adguard.com
|
||||
safebrowsing_block_host: standard-block.dns.adguard.com
|
||||
ratelimit: 20
|
||||
ratelimit_whitelist: []
|
||||
refuse_any: true
|
||||
upstream_dns:
|
||||
- https://dns10.quad9.net/dns-query
|
||||
upstream_dns_file: ""
|
||||
bootstrap_dns:
|
||||
- 9.9.9.10
|
||||
- 149.112.112.10
|
||||
- 2620:fe::10
|
||||
- 2620:fe::fe:10
|
||||
all_servers: false
|
||||
fastest_addr: false
|
||||
fastest_timeout: 1s
|
||||
allowed_clients: []
|
||||
disallowed_clients: []
|
||||
blocked_hosts:
|
||||
- version.bind
|
||||
- id.server
|
||||
- hostname.bind
|
||||
trusted_proxies:
|
||||
- 127.0.0.0/8
|
||||
- ::1/128
|
||||
cache_size: 4194304
|
||||
cache_ttl_min: 0
|
||||
cache_ttl_max: 0
|
||||
cache_optimistic: false
|
||||
bogus_nxdomain: []
|
||||
aaaa_disabled: false
|
||||
enable_dnssec: false
|
||||
edns_client_subnet: false
|
||||
max_goroutines: 300
|
||||
ipset: []
|
||||
filtering_enabled: true
|
||||
filters_update_interval: 24
|
||||
parental_enabled: false
|
||||
safesearch_enabled: false
|
||||
safebrowsing_enabled: false
|
||||
safebrowsing_cache_size: 1048576
|
||||
safesearch_cache_size: 1048576
|
||||
parental_cache_size: 1048576
|
||||
cache_time: 30
|
||||
rewrites: []
|
||||
blocked_services: []
|
||||
upstream_timeout: 10s
|
||||
private_networks: []
|
||||
use_private_ptr_resolvers: true
|
||||
local_ptr_upstreams:
|
||||
- 192.168.1.1
|
||||
tls:
|
||||
enabled: false
|
||||
server_name: ""
|
||||
force_https: false
|
||||
port_https: 443
|
||||
port_dns_over_tls: 853
|
||||
port_dns_over_quic: 853
|
||||
port_dnscrypt: 0
|
||||
dnscrypt_config_file: ""
|
||||
allow_unencrypted_doh: false
|
||||
strict_sni_check: false
|
||||
certificate_chain: ""
|
||||
private_key: ""
|
||||
certificate_path: ""
|
||||
private_key_path: ""
|
||||
filters:
|
||||
- enabled: true
|
||||
url: https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt
|
||||
name: AdGuard DNS filter
|
||||
id: 1
|
||||
- enabled: true
|
||||
url: https://adaway.org/hosts.txt
|
||||
name: AdAway Default Blocklist
|
||||
id: 2
|
||||
- enabled: true
|
||||
url: https://someonewhocares.org/hosts/zero/hosts
|
||||
name: Dan Pollock's List
|
||||
id: 1684963532
|
||||
whitelist_filters: []
|
||||
user_rules: []
|
||||
dhcp:
|
||||
enabled: false
|
||||
interface_name: ""
|
||||
local_domain_name: lan
|
||||
dhcpv4:
|
||||
gateway_ip: ""
|
||||
subnet_mask: ""
|
||||
range_start: ""
|
||||
range_end: ""
|
||||
lease_duration: 86400
|
||||
icmp_timeout_msec: 1000
|
||||
options: []
|
||||
dhcpv6:
|
||||
range_start: ""
|
||||
lease_duration: 86400
|
||||
ra_slaac_only: false
|
||||
ra_allow_slaac: false
|
||||
clients:
|
||||
runtime_sources:
|
||||
whois: true
|
||||
arp: true
|
||||
rdns: true
|
||||
dhcp: true
|
||||
hosts: true
|
||||
persistent: []
|
||||
log_compress: false
|
||||
log_localtime: false
|
||||
log_max_backups: 0
|
||||
log_max_size: 100
|
||||
log_max_age: 3
|
||||
log_file: ""
|
||||
verbose: false
|
||||
os:
|
||||
group: ""
|
||||
user: ""
|
||||
rlimit_nofile: 0
|
||||
schema_version: 14
|
80
apps/adguard/deployment.yaml
Normal file
80
apps/adguard/deployment.yaml
Normal file
@ -0,0 +1,80 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: adguard-home
|
||||
namespace: adguard
|
||||
spec:
|
||||
replicas: 1
|
||||
revisionHistoryLimit: 3
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/instance: adguard
|
||||
app.kubernetes.io/name: adguard-home
|
||||
strategy:
|
||||
type: Recreate
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/instance: adguard
|
||||
app.kubernetes.io/name: adguard-home
|
||||
spec:
|
||||
containers:
|
||||
- args:
|
||||
- --config
|
||||
- /opt/adguardhome/conf/AdGuardHome.yaml
|
||||
- --work-dir
|
||||
- /opt/adguardhome/work
|
||||
- --no-check-update
|
||||
env:
|
||||
- name: TZ
|
||||
value: Europe/Berlin
|
||||
image: adguard/adguardhome:v0.107.7
|
||||
imagePullPolicy: IfNotPresent
|
||||
livenessProbe:
|
||||
failureThreshold: 3
|
||||
periodSeconds: 10
|
||||
successThreshold: 1
|
||||
tcpSocket:
|
||||
port: 3000
|
||||
timeoutSeconds: 1
|
||||
name: adguard-home
|
||||
ports:
|
||||
- containerPort: 53
|
||||
name: dns-tcp
|
||||
protocol: TCP
|
||||
- containerPort: 53
|
||||
name: dns-udp
|
||||
protocol: UDP
|
||||
- containerPort: 3000
|
||||
name: http
|
||||
protocol: TCP
|
||||
readinessProbe:
|
||||
failureThreshold: 3
|
||||
periodSeconds: 10
|
||||
successThreshold: 1
|
||||
tcpSocket:
|
||||
port: 3000
|
||||
timeoutSeconds: 1
|
||||
resources: {}
|
||||
startupProbe:
|
||||
failureThreshold: 30
|
||||
periodSeconds: 5
|
||||
successThreshold: 1
|
||||
tcpSocket:
|
||||
port: 3000
|
||||
timeoutSeconds: 1
|
||||
terminationMessagePath: /dev/termination-log
|
||||
terminationMessagePolicy: File
|
||||
volumeMounts:
|
||||
- mountPath: /opt/adguardhome/conf/
|
||||
name: adguard-home-config
|
||||
dnsPolicy: ClusterFirst
|
||||
|
||||
restartPolicy: Always
|
||||
|
||||
terminationGracePeriodSeconds: 30
|
||||
volumes:
|
||||
- configMap:
|
||||
defaultMode: 0777
|
||||
name: adguard-home-config
|
||||
name: adguard-home-config
|
42
apps/adguard/ingress.yaml
Normal file
42
apps/adguard/ingress.yaml
Normal file
@ -0,0 +1,42 @@
|
||||
# apiVersion: traefik.containo.us/v1alpha1
|
||||
# kind: Middleware
|
||||
# metadata:
|
||||
# name: authentik-auth
|
||||
# namespace: adguard
|
||||
# spec:
|
||||
# forwardAuth:
|
||||
# address: https://adguard.kluster.moll.re/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
|
||||
|
||||
# ---
|
||||
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: adguard-ingress
|
||||
namespace: adguard
|
||||
spec:
|
||||
entryPoints:
|
||||
- websecure
|
||||
routes:
|
||||
- match: Host(`adguard.kluster.moll.re`)
|
||||
kind: Rule
|
||||
# middlewares:
|
||||
# - name: authentik-auth
|
||||
services:
|
||||
- name: adguard-home
|
||||
port: 3000
|
||||
tls:
|
||||
certResolver: default-tls
|
61
apps/adguard/service.yaml
Normal file
61
apps/adguard/service.yaml
Normal file
@ -0,0 +1,61 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: adguard-home
|
||||
namespace: adguard
|
||||
spec:
|
||||
ports:
|
||||
- name: http
|
||||
port: 3000
|
||||
protocol: TCP
|
||||
targetPort: http
|
||||
selector:
|
||||
app.kubernetes.io/instance: adguard
|
||||
app.kubernetes.io/name: adguard-home
|
||||
type: ClusterIP
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
annotations:
|
||||
metallb.universe.tf/ip-allocated-from-pool: default
|
||||
metallb.universe.tf/allow-shared-ip: adguard-svc
|
||||
|
||||
name: adguard-home-dns-tcp
|
||||
namespace: adguard
|
||||
spec:
|
||||
allocateLoadBalancerNodePorts: true
|
||||
loadBalancerIP: 192.168.3.2
|
||||
ports:
|
||||
- name: dns-tcp
|
||||
nodePort: 31306
|
||||
port: 53
|
||||
protocol: TCP
|
||||
targetPort: 53
|
||||
selector:
|
||||
app.kubernetes.io/instance: adguard
|
||||
app.kubernetes.io/name: adguard-home
|
||||
type: LoadBalancer
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
annotations:
|
||||
metallb.universe.tf/ip-allocated-from-pool: default
|
||||
metallb.universe.tf/allow-shared-ip: adguard-svc
|
||||
|
||||
name: adguard-home-dns-udp
|
||||
namespace: adguard
|
||||
spec:
|
||||
allocateLoadBalancerNodePorts: true
|
||||
loadBalancerIP: 192.168.3.2
|
||||
ports:
|
||||
- name: dns-udp
|
||||
nodePort: 30547
|
||||
port: 53
|
||||
protocol: UDP
|
||||
targetPort: 53
|
||||
selector:
|
||||
app.kubernetes.io/instance: adguard
|
||||
app.kubernetes.io/name: adguard-home
|
||||
type: LoadBalancer
|
365
apps/adguard/values.yaml
Normal file
365
apps/adguard/values.yaml
Normal file
@ -0,0 +1,365 @@
|
||||
#
|
||||
# IMPORTANT NOTE
|
||||
#
|
||||
# This chart inherits from our common library chart. You can check the default values/options here:
|
||||
# https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common/values.yaml
|
||||
#
|
||||
|
||||
controller:
|
||||
# -- Number of pods to load balance between
|
||||
replicas: 1
|
||||
|
||||
initContainers:
|
||||
# -- Configures an initContainer that copies the configmap to the AdGuardHome conf directory
|
||||
# It does NOT overwrite when the file already exists.
|
||||
# @default -- See values.yaml
|
||||
copy-configmap:
|
||||
image: busybox
|
||||
imagePullPolicy: IfNotPresent
|
||||
command:
|
||||
- "sh"
|
||||
- "-c"
|
||||
- |
|
||||
if [ ! -f /opt/adguardhome/conf/AdGuardHome.yaml ]; then
|
||||
mkdir -p /opt/adguardhome/conf
|
||||
cp /tmp/AdGuardHome.yaml /opt/adguardhome/conf/AdGuardHome.yaml
|
||||
fi
|
||||
volumeMounts:
|
||||
- name: adguard-home-config
|
||||
mountPath: /tmp/AdGuardHome.yaml
|
||||
subPath: AdGuardHome.yaml
|
||||
- name: config
|
||||
mountPath: /opt/adguardhome/conf
|
||||
securityContext:
|
||||
runAsUser: 0
|
||||
|
||||
image:
|
||||
# -- image repository
|
||||
repository: adguard/adguardhome
|
||||
# @default -- chart.appVersion
|
||||
tag:
|
||||
# -- image pull policy
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
# -- environment variables.
|
||||
# @default -- See below
|
||||
env:
|
||||
# -- Set the container timezone
|
||||
TZ: Europe/Berlin
|
||||
|
||||
# -- arguments passed to the adguard-home command line.
|
||||
args:
|
||||
- "--config"
|
||||
- "/opt/adguardhome/conf/AdGuardHome.yaml"
|
||||
- "--work-dir"
|
||||
- "/opt/adguardhome/work"
|
||||
- "--no-check-update"
|
||||
|
||||
# -- Configures service settings for the chart.
|
||||
# @default -- See values.yaml
|
||||
service:
|
||||
main:
|
||||
primary: true
|
||||
ports:
|
||||
http:
|
||||
port: 3000
|
||||
dns-tcp:
|
||||
enabled: true
|
||||
type: LoadBalancer
|
||||
loadBalancerIP: 192.168.3.2
|
||||
annotations:
|
||||
metallb.universe.tf/allow-shared-ip: adguard-svc
|
||||
|
||||
ports:
|
||||
dns-tcp:
|
||||
enabled: true
|
||||
port: 53
|
||||
protocol: TCP
|
||||
targetPort: 53
|
||||
|
||||
dns-udp:
|
||||
enabled: true
|
||||
type: LoadBalancer
|
||||
loadBalancerIP: 192.168.3.2
|
||||
annotations:
|
||||
metallb.universe.tf/allow-shared-ip: adguard-svc
|
||||
|
||||
ports:
|
||||
dns-udp:
|
||||
enabled: true
|
||||
port: 53
|
||||
protocol: UDP
|
||||
targetPort: 53
|
||||
|
||||
dns-tls-udp:
|
||||
enabled: true
|
||||
type: LoadBalancer
|
||||
loadBalancerIP: 192.168.3.5
|
||||
annotations:
|
||||
metallb.universe.tf/allow-shared-ip: adguard-svc
|
||||
|
||||
ports:
|
||||
dns-tls-udp:
|
||||
enabled: true
|
||||
port: 853
|
||||
protocol: UDP
|
||||
targetPort: 853
|
||||
|
||||
dns-tls-tcp:
|
||||
enabled: true
|
||||
type: LoadBalancer
|
||||
loadBalancerIP: 192.168.3.5
|
||||
annotations:
|
||||
metallb.universe.tf/allow-shared-ip: adguard-svc
|
||||
|
||||
ports:
|
||||
dns-tls-tcp:
|
||||
enabled: true
|
||||
port: 853
|
||||
protocol: TCP
|
||||
targetPort: 853
|
||||
|
||||
|
||||
|
||||
|
||||
# -- Configure persistence settings for the chart under this key.
|
||||
# @default -- See values.yaml
|
||||
persistence:
|
||||
config:
|
||||
enabled: true
|
||||
mountPath: /opt/adguardhome/conf
|
||||
data:
|
||||
enabled: false
|
||||
mountPath: /opt/adguardhome/work
|
||||
|
||||
# config -- AdGuard Home cojnfiguration. For a full list of options see https://github.com/AdguardTeam/AdGuardHome/wiki/Configuration.
|
||||
# @default -- See values.yaml
|
||||
config: |
|
||||
bind_host: 0.0.0.0
|
||||
bind_port: 3000
|
||||
beta_bind_port: 0
|
||||
users: []
|
||||
auth_attempts: 5
|
||||
block_auth_min: 15
|
||||
http_proxy: ""
|
||||
language: ""
|
||||
debug_pprof: false
|
||||
web_session_ttl: 720
|
||||
dns:
|
||||
bind_hosts:
|
||||
- 0.0.0.0
|
||||
port: 53
|
||||
statistics_interval: 1
|
||||
querylog_enabled: true
|
||||
querylog_file_enabled: true
|
||||
querylog_interval: 2160h
|
||||
querylog_size_memory: 1000
|
||||
anonymize_client_ip: false
|
||||
protection_enabled: true
|
||||
blocking_mode: default
|
||||
blocking_ipv4: ""
|
||||
blocking_ipv6: ""
|
||||
blocked_response_ttl: 10
|
||||
parental_block_host: family-block.dns.adguard.com
|
||||
safebrowsing_block_host: standard-block.dns.adguard.com
|
||||
ratelimit: 20
|
||||
ratelimit_whitelist: []
|
||||
refuse_any: true
|
||||
upstream_dns:
|
||||
- https://dns10.quad9.net/dns-query
|
||||
upstream_dns_file: ""
|
||||
bootstrap_dns:
|
||||
- 9.9.9.10
|
||||
- 149.112.112.10
|
||||
- 2620:fe::10
|
||||
- 2620:fe::fe:10
|
||||
all_servers: false
|
||||
fastest_addr: false
|
||||
fastest_timeout: 1s
|
||||
allowed_clients: []
|
||||
disallowed_clients: []
|
||||
blocked_hosts:
|
||||
- version.bind
|
||||
- id.server
|
||||
- hostname.bind
|
||||
trusted_proxies:
|
||||
- 127.0.0.0/8
|
||||
- ::1/128
|
||||
cache_size: 4194304
|
||||
cache_ttl_min: 0
|
||||
cache_ttl_max: 0
|
||||
cache_optimistic: false
|
||||
bogus_nxdomain: []
|
||||
aaaa_disabled: false
|
||||
enable_dnssec: false
|
||||
edns_client_subnet: false
|
||||
max_goroutines: 300
|
||||
ipset: []
|
||||
filtering_enabled: true
|
||||
filters_update_interval: 24
|
||||
parental_enabled: false
|
||||
safesearch_enabled: false
|
||||
safebrowsing_enabled: false
|
||||
safebrowsing_cache_size: 1048576
|
||||
safesearch_cache_size: 1048576
|
||||
parental_cache_size: 1048576
|
||||
cache_time: 30
|
||||
rewrites: []
|
||||
blocked_services: []
|
||||
upstream_timeout: 10s
|
||||
private_networks: []
|
||||
use_private_ptr_resolvers: true
|
||||
local_ptr_upstreams:
|
||||
- 192.168.1.1
|
||||
tls:
|
||||
enabled: true
|
||||
server_name: "dns.moll.re"
|
||||
force_https: false
|
||||
port_https: 443
|
||||
port_dns_over_tls: 853
|
||||
port_dns_over_quic: 853
|
||||
port_dnscrypt: 0
|
||||
dnscrypt_config_file: ""
|
||||
allow_unencrypted_doh: false
|
||||
strict_sni_check: false
|
||||
certificate_chain: |-
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFyzCCA7OgAwIBAgIUEvyI5bCa56vvyQgTbLyR7+c7vQMwDQYJKoZIhvcNAQEL
|
||||
BQAwdTELMAkGA1UEBhMCREUxCzAJBgNVBAgMAkJXMREwDwYDVQQHDAhGcmVpYnVy
|
||||
ZzENMAsGA1UECgwEUmVteTEKMAgGA1UECwwBTTEQMA4GA1UEAwwHbW9sbC5yZTEZ
|
||||
MBcGCSqGSIb3DQEJARYKbWVAbW9sbC5yZTAeFw0yMzA3MTUxNzQ0MTVaFw0yNDA3
|
||||
MTQxNzQ0MTVaMHUxCzAJBgNVBAYTAkRFMQswCQYDVQQIDAJCVzERMA8GA1UEBwwI
|
||||
RnJlaWJ1cmcxDTALBgNVBAoMBFJlbXkxCjAIBgNVBAsMAU0xEDAOBgNVBAMMB21v
|
||||
bGwucmUxGTAXBgkqhkiG9w0BCQEWCm1lQG1vbGwucmUwggIiMA0GCSqGSIb3DQEB
|
||||
AQUAA4ICDwAwggIKAoICAQDpS0Xtii0VITKFr9XFLcWchI6//I7iMeKkYi7uEq60
|
||||
1YZQ8/Zppg1M15BhD8ZEQ0JZ42ufi0p4B0LYMGHYF+2kKsbFxcEPQTUeXCLcjYVA
|
||||
ueZ+GTh+FrUrSQvHSevUbVXytAwiqAN/eAvXBMdOKisPUM9Cmk/KHA+W+anw4Uxq
|
||||
ZvHq5GG9Z0IksTHI2oEMp/8cZ8lRXzHmOUYQGveBX6PBPvcttP8GwCU6vsPVSphZ
|
||||
7XF2LPqeMnBGgmOz51QTRpS7NBHMsSDR20VgSTjI+F8nJnQsGO5Iq9IpQzlDlAsL
|
||||
jgPOT3W/pdeZD1mX/c9EpYEKf/0ubEBiWc+kJqkrdmsUX6cZ06qEUa08yCMSzkao
|
||||
mHrMzw22kjICG9h+0sZvTetPvpYZsBqQRejDS/cu+buAaDNchGNhl1YPp8iAlKUT
|
||||
YB4gbcNqceCGUmbQX06B/OwJiYIoN5ghh2wmqNrFXYltfALBVhWFtU2DTAS9k399
|
||||
W2hd4u77uJngK0WLoKQuV/wi81dbk0kAI7eRUI1H/Y4hC1MCI5M6zewrJ7QgOYBi
|
||||
qkYydYQGFu1ToDt6maDVBX05PcoBPwbUfrmZBjR5kzBawvH6reDuANkEXfJ0+2hA
|
||||
JBAxXPKyQVc9Y87nDATvkl7qWOKjfJairKAd03lvJlesr6+7GwMMnE/6h91QF4Vq
|
||||
OQIDAQABo1MwUTAdBgNVHQ4EFgQUunr29QozKy+AlTrq+PAoSjPFOQIwHwYDVR0j
|
||||
BBgwFoAUunr29QozKy+AlTrq+PAoSjPFOQIwDwYDVR0TAQH/BAUwAwEB/zANBgkq
|
||||
hkiG9w0BAQsFAAOCAgEAPeczDC1OScGZ6UVjFUF+BqI1Am9TwUNVD2cRnbXvQ2g7
|
||||
nU8vYSfWx00bhRTpuDEG997HkCCvaUYIArbGtgplB+bCk6GMnQQfnRWIyFz/cy+Y
|
||||
yuftUY0PufXzCe33J2Q0SQCNKdEvOsfiPCkyrgMSlomoIDPhs4wQ8SOE0Lnl4fNw
|
||||
i1uVDd6pTxwwfpfsvN5lBwXN+RDr1Awe07f9SJmYklqQAIP5Kthq7QJsN1QHvmtW
|
||||
JL7AYlltDTUYvE2kBnQKjkNYv9Qj4PGUvipVlCKA4cEVAZXHam01RqPXEFj5I9B4
|
||||
Q9S+oT7htoXWuz9kAwsSCZVEW1QBzRL7UNIckMWsc1jRSiCT5Nc/sOtPyIc9in+i
|
||||
J/XGPjSBvQZrnitLhR4qByG/dY+istQkcEERjElwhzucEyNkgtENJfJEevdJsrBf
|
||||
oGaaK5ljemYsk1e+QHB3FWmNbIysKBMn44bHgu7DeQediLCjvwdasjVorDW1mv5Z
|
||||
8Aoe075vxTmHGSjfMPiAzJnYMy0zCT1VcR+AtPKUtr11z2xgOrAqZqlTaR/ud6ce
|
||||
B11n3oIs5Kwarvhwx2Qw7XvcGOa2PBGZW4kcoDRn9GNFcP5K2AAuRJD9FLTbr8ZO
|
||||
6a0bv0KUksQYX+U/r3+qSn87TXyIJ1IbKY2jQYu/+KEpeyFnviXw+IoM/YHDqdw=
|
||||
-----END CERTIFICATE-----
|
||||
private_key: |-
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQDpS0Xtii0VITKF
|
||||
r9XFLcWchI6//I7iMeKkYi7uEq601YZQ8/Zppg1M15BhD8ZEQ0JZ42ufi0p4B0LY
|
||||
MGHYF+2kKsbFxcEPQTUeXCLcjYVAueZ+GTh+FrUrSQvHSevUbVXytAwiqAN/eAvX
|
||||
BMdOKisPUM9Cmk/KHA+W+anw4UxqZvHq5GG9Z0IksTHI2oEMp/8cZ8lRXzHmOUYQ
|
||||
GveBX6PBPvcttP8GwCU6vsPVSphZ7XF2LPqeMnBGgmOz51QTRpS7NBHMsSDR20Vg
|
||||
STjI+F8nJnQsGO5Iq9IpQzlDlAsLjgPOT3W/pdeZD1mX/c9EpYEKf/0ubEBiWc+k
|
||||
JqkrdmsUX6cZ06qEUa08yCMSzkaomHrMzw22kjICG9h+0sZvTetPvpYZsBqQRejD
|
||||
S/cu+buAaDNchGNhl1YPp8iAlKUTYB4gbcNqceCGUmbQX06B/OwJiYIoN5ghh2wm
|
||||
qNrFXYltfALBVhWFtU2DTAS9k399W2hd4u77uJngK0WLoKQuV/wi81dbk0kAI7eR
|
||||
UI1H/Y4hC1MCI5M6zewrJ7QgOYBiqkYydYQGFu1ToDt6maDVBX05PcoBPwbUfrmZ
|
||||
BjR5kzBawvH6reDuANkEXfJ0+2hAJBAxXPKyQVc9Y87nDATvkl7qWOKjfJairKAd
|
||||
03lvJlesr6+7GwMMnE/6h91QF4VqOQIDAQABAoICAFXdtDe5X12DEf7dmJ9R+QVi
|
||||
Ts5ADXEYrlQVpTNQIgiB/MVn/d6l1Qhe4Q+wiCeQ3+eIypB26qph9crvh9vK9tcx
|
||||
PWcGocfVFtF9VQF7fzuzELCB5OaXwgfUA2dPAGN3+KXzefH5iAwPKcByzE6rO50P
|
||||
/7ECbfK0QFKvwspbik4xZMIxW/4j9tbddzb3oX8AiGeylYkDMjEMDIsZ+dYe1v1m
|
||||
CQFEOIeKCknkc9zZ71hOCjBWXsoCQ4vYKw1IzAuqM0zx3clKuoszGwZU/PcPX6pf
|
||||
v2uJo46Q2zH/waBraWNP2nvBiFPJHSEDYtUMAJFCH0w3jn7bLhlk+AVxi1tpYwBx
|
||||
SOFQKmKbJgTWpmX7o8bhyNmSg6gLTquKKYuOeUsJTe4SERnhKNVen/mf1BdV5S1A
|
||||
iLj9mg5tFL1O+f8wl8q0QA5aM3o1G/YMlG28Na6X8l89BiDvfdG4YALzeJs5k1yn
|
||||
VnpZElikhx63HQjaLE+u4nSBwr0s79Hnq4Xge+rEPCRVpHhfZ1T/Ka3NwqcflcM7
|
||||
GvvRnXfLLyfS3DOQg9BCwE94hzJgh7V4BqEQInzkAR3/wF83xTT0LaWLBsJXTsWr
|
||||
rHcdPxpMVXNUfelBmA3Blu1d07lDw8kMzYXzCJ4AE9gjdgN9ltwjg7ZDQ3w6Tnc1
|
||||
09aLmIUeRx6r7vs8pBMPAoIBAQD3epVeC4Urpmop21Jzop7nqvQqmHwDvUPIHKWZ
|
||||
a1e9YmHfNR6Vibzw8jqjd7IJMd5mzlcot+bTjfFGxfZ/KidE5MB8rvwS0MVQnamZ
|
||||
dnl1OX9c/+G4jW8xCzNQlkAXT2xcaMPO/ged6smdtZkvvnjfyX0L78fbKG+4fsc8
|
||||
PoIB5gXjApVVN4ujeaKUud2jr2uHueQqI8taZlhlIojxc1w/a9r0iiLK+sY/HvWH
|
||||
gERxDFWQjg8kkFGXC3KFOz0UJiolDus9sK9cLcDI4IavOotVaxEoz778u9644+GM
|
||||
wfRJCN8OBT3RQjPy77L1VOCjrbd1TtknDDG+kAN4ZLLEPCO/AoIBAQDxU6gqjGDy
|
||||
SC1mSgl8x6ODkmCs2a9UvZeg9/KA/UzTGCLeSgftPwgCeGV6d6dpqFxsvqhVDVtp
|
||||
pkqFa2+X0rsIG4JFl6qZTbXpJIqbdkTeWjjimg809fTqZnSJSchUiuIWzqvGlOSL
|
||||
cM5c7+WNteLVHjldiNT0+jReXPtxAJD9jIV3LubmWZ5qs3tYXKGgQvCItLo6REYE
|
||||
SKUZAsX/T6O6HAypv89AcS+UZxc2pq4htFRJY5XarLbs8BuDJAYWm3chMwwGIDEx
|
||||
J7cCXWWWQkU7W1GOckU4oo6FPGzjREPwyeiYcvias2/nm4tOc5t0gRJHIR8W6tQF
|
||||
5An7lLSHe5AHAoIBAADiNSpSzDTtsS9ZEyBKklqtZ5XHWZoB0P4j7AtyMKwCb+sG
|
||||
G4fZKA2ML91pjf8uaGbhkboZff9/YD8qccjec6lxT6aiUVAX4rx486QSojhi7it8
|
||||
1md8SctZCOPexXfP1sk1ro1MpuZPckzX2yYqfe/+ni2uu33y1QNJoJh8eKZdFeRL
|
||||
nBDj0+HPi18QktQEylN/vGrSGeXGu8YQq4CBMvEfB3ccDye+YXrUN3g2YwgsTRnp
|
||||
B/DPexsY9V24am1p/XiIZxqfSOEBYNDWzGRPxzOU4EjPBRWN7ium1KVWA/NGztUT
|
||||
+7aFj/3sES2DEhJDioYms+vJxVuy0/BYG7NLq60CggEAZCxZre+/flK/paot7gHg
|
||||
ugjU4GssAH0Cp+rEWw7KCQYH00XfrHdxl7TqSr/IWm9sjidGMKfuvhgs7tz94YOz
|
||||
51Wj6cdfJWvAixqD/qxFQhcpbcaNcWp3U6Vb0nEyGwXbe6QmYbQEem1E/AcIvp41
|
||||
nkmBfnYCD/6cJl9qcCnQBa+C50osxomE3L3MAY3R+XhP6C887lrQxY5yGcOw9J3W
|
||||
VLa3+u6H1TQmj++LD0B5H7x/EEeqOK9g71Fr2i/l5xR5iuppn1FVmhXmPbEPLiQs
|
||||
IMtzOzHr0eqIRn4ipOP9X8IwLrfqwiyh0v4aAWKzsNSzBZuWEClCAX/7NNcxaNu9
|
||||
mQKCAQEA3dk8ScY8bVPgFg2x7oqujVZbrNizhw2+BXYuH6HRVINPDYzIapur9uiw
|
||||
I+STHoUod8aRNvwDLfhkI+MabmEbt/eDsBpRrJYYLi2uTed5gIiLqPS8MPuKr++7
|
||||
UwJz4OPZu1xOjbFapvKvPSbPhS254tozQyi5Xbl8W268SCQhF+hEb+AT5JTcoPlI
|
||||
ZNN5hp0Ooq6EouX8heyeG7le9V2G+HFHR9aWniD9kRRirO+oqWTXcG+9zHRhkdbF
|
||||
4vRGwZ8+mj/0fKAHlFpeDRiKNbma7rTNDyEDR9jQ+GOC1QmOYeiei6FDKYEPcHxh
|
||||
UBWqdlD+gUjtzQvD3yMo7JN9DIO5Eg==
|
||||
-----END PRIVATE KEY-----
|
||||
certificate_path: ""
|
||||
private_key_path: ""
|
||||
filters:
|
||||
- enabled: true
|
||||
url: https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt
|
||||
name: AdGuard DNS filter
|
||||
id: 1
|
||||
- enabled: true
|
||||
url: https://adaway.org/hosts.txt
|
||||
name: AdAway Default Blocklist
|
||||
id: 2
|
||||
- enabled: true
|
||||
url: https://someonewhocares.org/hosts/zero/hosts
|
||||
name: Dan Pollock's List
|
||||
id: 1684963532
|
||||
whitelist_filters: []
|
||||
user_rules: []
|
||||
dhcp:
|
||||
enabled: false
|
||||
interface_name: ""
|
||||
local_domain_name: lan
|
||||
dhcpv4:
|
||||
gateway_ip: ""
|
||||
subnet_mask: ""
|
||||
range_start: ""
|
||||
range_end: ""
|
||||
lease_duration: 86400
|
||||
icmp_timeout_msec: 1000
|
||||
options: []
|
||||
dhcpv6:
|
||||
range_start: ""
|
||||
lease_duration: 86400
|
||||
ra_slaac_only: false
|
||||
ra_allow_slaac: false
|
||||
clients:
|
||||
runtime_sources:
|
||||
whois: true
|
||||
arp: true
|
||||
rdns: true
|
||||
dhcp: true
|
||||
hosts: true
|
||||
persistent: []
|
||||
log_compress: false
|
||||
log_localtime: false
|
||||
log_max_backups: 0
|
||||
log_max_size: 100
|
||||
log_max_age: 3
|
||||
log_file: ""
|
||||
verbose: false
|
||||
os:
|
||||
group: ""
|
||||
user: ""
|
||||
rlimit_nofile: 0
|
||||
schema_version: 14
|
126
apps/codeserver/deployment.yaml
Normal file
126
apps/codeserver/deployment.yaml
Normal file
@ -0,0 +1,126 @@
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: codeserver
|
||||
---
|
||||
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
namespace: codeserver
|
||||
name: codeserver-data-nfs
|
||||
labels:
|
||||
directory: codeserver
|
||||
spec:
|
||||
storageClassName: fast
|
||||
capacity:
|
||||
storage: "10Gi"
|
||||
volumeMode: Filesystem
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
nfs:
|
||||
path: /codeserver
|
||||
server: nfs-server.storage.svc.cluster.local
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
namespace: codeserver
|
||||
name: codeserver-data-nfs
|
||||
spec:
|
||||
storageClassName: fast
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: "10Gi"
|
||||
selector:
|
||||
matchLabels:
|
||||
directory: codeserver
|
||||
|
||||
---
|
||||
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
namespace: codeserver
|
||||
name: codeserver
|
||||
labels:
|
||||
app: codeserver
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: codeserver
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: codeserver
|
||||
spec:
|
||||
containers:
|
||||
- name: codeserver
|
||||
image: gitpod/openvscode-server
|
||||
ports:
|
||||
- containerPort: 3000
|
||||
volumeMounts:
|
||||
- mountPath: /home/workspace
|
||||
name: codeserver-data
|
||||
|
||||
|
||||
volumes:
|
||||
- name: codeserver-data
|
||||
persistentVolumeClaim:
|
||||
claimName: codeserver-data-nfs
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
namespace: codeserver
|
||||
name: codeserver
|
||||
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- name: http
|
||||
port: 3000
|
||||
selector:
|
||||
app: codeserver
|
||||
|
||||
---
|
||||
|
||||
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: codeserver-ingress
|
||||
namespace: codeserver
|
||||
spec:
|
||||
entryPoints:
|
||||
- websecure
|
||||
routes:
|
||||
- match: Host(`code.kluster.moll.re`)
|
||||
middlewares:
|
||||
- name: codeserver-websocket
|
||||
kind: Rule
|
||||
services:
|
||||
- name: codeserver
|
||||
port: 3000
|
||||
tls:
|
||||
certResolver: default-tls
|
||||
|
||||
---
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
kind: Middleware
|
||||
metadata:
|
||||
name: codeserver-websocket
|
||||
namespace: codeserver
|
||||
spec:
|
||||
headers:
|
||||
customRequestHeaders:
|
||||
X-Forwarded-Proto: "https"
|
||||
# enable websockets
|
||||
Upgrade: "websocket"
|
||||
|
||||
|
||||
|
17
apps/dendrite/ingressroute.yaml
Normal file
17
apps/dendrite/ingressroute.yaml
Normal file
@ -0,0 +1,17 @@
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
namespace: dendrite
|
||||
name: dendrite-ingressroute
|
||||
|
||||
spec:
|
||||
entryPoints:
|
||||
- websecure
|
||||
routes:
|
||||
- match: Host(`dendrite.kluster.moll.re`)
|
||||
kind: Rule
|
||||
services:
|
||||
- name: dendrite
|
||||
port: 8008
|
||||
tls:
|
||||
certResolver: default-tls
|
407
apps/dendrite/values.yaml
Normal file
407
apps/dendrite/values.yaml
Normal file
@ -0,0 +1,407 @@
|
||||
image:
|
||||
# -- Docker repository/image to use
|
||||
repository: "ghcr.io/matrix-org/dendrite-monolith"
|
||||
# -- Kubernetes pullPolicy
|
||||
pullPolicy: IfNotPresent
|
||||
# -- Overrides the image tag whose default is the chart appVersion.
|
||||
tag: ""
|
||||
|
||||
|
||||
# signing key to use
|
||||
signing_key:
|
||||
# -- Create a new signing key, if not exists
|
||||
create: true
|
||||
# -- Use an existing secret
|
||||
existingSecret: ""
|
||||
|
||||
# -- Default resource requests/limits.
|
||||
# @default -- sets some sane default values
|
||||
resources:
|
||||
requests:
|
||||
memory: "512Mi"
|
||||
limits:
|
||||
memory: "4096Mi"
|
||||
|
||||
persistence:
|
||||
# -- The storage class to use for volume claims.
|
||||
# Used unless specified at the specific component.
|
||||
# Defaults to the cluster default storage class.
|
||||
storageClass: "nfs-client"
|
||||
jetstream:
|
||||
# -- Use an existing volume claim for jetstream
|
||||
existingClaim: ""
|
||||
# -- PVC Storage Request for the jetstream volume
|
||||
capacity: "1Gi"
|
||||
# -- The storage class to use for volume claims.
|
||||
# Defaults to persistence.storageClass
|
||||
storageClass: ""
|
||||
media:
|
||||
# -- Use an existing volume claim for media files
|
||||
existingClaim: ""
|
||||
# -- PVC Storage Request for the media volume
|
||||
capacity: "1Gi"
|
||||
# -- The storage class to use for volume claims.
|
||||
# Defaults to persistence.storageClass
|
||||
storageClass: ""
|
||||
search:
|
||||
# -- Use an existing volume claim for the fulltext search index
|
||||
existingClaim: ""
|
||||
# -- PVC Storage Request for the search volume
|
||||
capacity: "1Gi"
|
||||
# -- The storage class to use for volume claims.
|
||||
# Defaults to persistence.storageClass
|
||||
storageClass: ""
|
||||
|
||||
# -- Add additional volumes to the Dendrite Pod
|
||||
extraVolumes: []
|
||||
# ex.
|
||||
# - name: extra-config
|
||||
# secret:
|
||||
# secretName: extra-config
|
||||
|
||||
# -- Configure additional mount points volumes in the Dendrite Pod
|
||||
extraVolumeMounts: []
|
||||
# ex.
|
||||
# - mountPath: /etc/dendrite/extra-config
|
||||
# name: extra-config
|
||||
|
||||
strategy:
|
||||
# -- Strategy to use for rolling updates (e.g. Recreate, RollingUpdate)
|
||||
# If you are using ReadWriteOnce volumes, you should probably use Recreate
|
||||
type: RollingUpdate
|
||||
rollingUpdate:
|
||||
# -- Maximum number of pods that can be unavailable during the update process
|
||||
maxUnavailable: 25%
|
||||
# -- Maximum number of pods that can be scheduled above the desired number of pods
|
||||
maxSurge: 25%
|
||||
|
||||
dendrite_config:
|
||||
version: 2
|
||||
global:
|
||||
# -- **REQUIRED** Servername for this Dendrite deployment.
|
||||
server_name: "dendrite.kluster.moll.re"
|
||||
|
||||
# -- The private key to use. (**NOTE**: This is overriden in Helm)
|
||||
private_key: /etc/dendrite/secrets/signing.key
|
||||
|
||||
# -- The server name to delegate server-server communications to, with optional port
|
||||
# e.g. localhost:443
|
||||
well_known_server_name: "dendrite.kluster.moll.re:443"
|
||||
|
||||
# -- The server name to delegate client-server communications to, with optional port
|
||||
# e.g. localhost:443
|
||||
well_known_client_name: "dendrite.kluster.moll.re:443"
|
||||
|
||||
# -- Lists of domains that the server will trust as identity servers to verify third
|
||||
# party identifiers such as phone numbers and email addresses.
|
||||
trusted_third_party_id_servers:
|
||||
- matrix.org
|
||||
- vector.im
|
||||
|
||||
# -- The paths and expiry timestamps (as a UNIX timestamp in millisecond precision)
|
||||
# to old signing keys that were formerly in use on this domain name. These
|
||||
# keys will not be used for federation request or event signing, but will be
|
||||
# provided to any other homeserver that asks when trying to verify old events.
|
||||
old_private_keys:
|
||||
# If the old private key file is available:
|
||||
# - private_key: old_matrix_key.pem
|
||||
# expired_at: 1601024554498
|
||||
# If only the public key (in base64 format) and key ID are known:
|
||||
# - public_key: mn59Kxfdq9VziYHSBzI7+EDPDcBS2Xl7jeUdiiQcOnM=
|
||||
# key_id: ed25519:mykeyid
|
||||
# expired_at: 1601024554498
|
||||
|
||||
# -- Disable federation. Dendrite will not be able to make any outbound HTTP requests
|
||||
# to other servers and the federation API will not be exposed.
|
||||
disable_federation: false
|
||||
|
||||
key_validity_period: 168h0m0s
|
||||
|
||||
database:
|
||||
# -- The connection string for connections to Postgres.
|
||||
# This will be set automatically if using the Postgres dependency
|
||||
connection_string: ""
|
||||
|
||||
# -- Default database maximum open connections
|
||||
max_open_conns: 90
|
||||
# -- Default database maximum idle connections
|
||||
max_idle_conns: 5
|
||||
# -- Default database maximum lifetime
|
||||
conn_max_lifetime: -1
|
||||
|
||||
jetstream:
|
||||
# -- Persistent directory to store JetStream streams in.
|
||||
storage_path: "/data/jetstream"
|
||||
# -- NATS JetStream server addresses if not using internal NATS.
|
||||
addresses: []
|
||||
# -- The prefix for JetStream streams
|
||||
topic_prefix: "Dendrite"
|
||||
# -- Keep all data in memory. (**NOTE**: This is overriden in Helm to `false`)
|
||||
in_memory: false
|
||||
# -- Disables TLS validation. This should **NOT** be used in production.
|
||||
disable_tls_validation: true
|
||||
|
||||
cache:
|
||||
# -- The estimated maximum size for the global cache in bytes, or in terabytes,
|
||||
# gigabytes, megabytes or kilobytes when the appropriate 'tb', 'gb', 'mb' or
|
||||
# 'kb' suffix is specified. Note that this is not a hard limit, nor is it a
|
||||
# memory limit for the entire process. A cache that is too small may ultimately
|
||||
# provide little or no benefit.
|
||||
max_size_estimated: 1gb
|
||||
# -- The maximum amount of time that a cache entry can live for in memory before
|
||||
# it will be evicted and/or refreshed from the database. Lower values result in
|
||||
# easier admission of new cache entries but may also increase database load in
|
||||
# comparison to higher values, so adjust conservatively. Higher values may make
|
||||
# it harder for new items to make it into the cache, e.g. if new rooms suddenly
|
||||
# become popular.
|
||||
max_age: 1h
|
||||
|
||||
report_stats:
|
||||
# -- Configures phone-home statistics reporting. These statistics contain the server
|
||||
# name, number of active users and some information on your deployment config.
|
||||
# We use this information to understand how Dendrite is being used in the wild.
|
||||
enabled: false
|
||||
# -- Endpoint to report statistics to.
|
||||
endpoint: https://matrix.org/report-usage-stats/push
|
||||
|
||||
presence:
|
||||
# -- Controls whether we receive presence events from other servers
|
||||
enable_inbound: false
|
||||
# -- Controls whether we send presence events for our local users to other servers.
|
||||
# (_May increase CPU/memory usage_)
|
||||
enable_outbound: false
|
||||
|
||||
server_notices:
|
||||
# -- Server notices allows server admins to send messages to all users on the server.
|
||||
enabled: false
|
||||
# -- The local part for the user sending server notices.
|
||||
local_part: "_server"
|
||||
# -- The display name for the user sending server notices.
|
||||
display_name: "Server Alerts"
|
||||
# -- The avatar URL (as a mxc:// URL) name for the user sending server notices.
|
||||
avatar_url: ""
|
||||
# The room name to be used when sending server notices. This room name will
|
||||
# appear in user clients.
|
||||
room_name: "Server Alerts"
|
||||
|
||||
# prometheus metrics
|
||||
metrics:
|
||||
# -- Whether or not Prometheus metrics are enabled.
|
||||
enabled: false
|
||||
# HTTP basic authentication to protect access to monitoring.
|
||||
basic_auth:
|
||||
# -- HTTP basic authentication username
|
||||
user: "metrics"
|
||||
# -- HTTP basic authentication password
|
||||
password: metrics
|
||||
|
||||
dns_cache:
|
||||
# -- Whether or not the DNS cache is enabled.
|
||||
enabled: false
|
||||
# -- Maximum number of entries to hold in the DNS cache
|
||||
cache_size: 256
|
||||
# -- Duration for how long DNS cache items should be considered valid ([see time.ParseDuration](https://pkg.go.dev/time#ParseDuration) for more)
|
||||
cache_lifetime: "10m"
|
||||
|
||||
profiling:
|
||||
# -- Enable pprof. You will need to manually create a port forwarding to the deployment to access PPROF,
|
||||
# as it will only listen on localhost and the defined port.
|
||||
# e.g. `kubectl port-forward deployments/dendrite 65432:65432`
|
||||
enabled: false
|
||||
# -- pprof port, if enabled
|
||||
port: 65432
|
||||
|
||||
# -- Configuration for experimental MSC's. (Valid values are: msc2836)
|
||||
mscs:
|
||||
mscs: []
|
||||
# A list of enabled MSC's
|
||||
# Currently valid values are:
|
||||
# - msc2836 (Threading, see https://github.com/matrix-org/matrix-doc/pull/2836)
|
||||
|
||||
app_service_api:
|
||||
# -- Disable the validation of TLS certificates of appservices. This is
|
||||
# not recommended in production since it may allow appservice traffic
|
||||
# to be sent to an insecure endpoint.
|
||||
disable_tls_validation: false
|
||||
# -- Appservice config files to load on startup. (**NOTE**: This is overriden by Helm, if a folder `./appservices/` exists)
|
||||
config_files: []
|
||||
|
||||
client_api:
|
||||
# -- Prevents new users from being able to register on this homeserver, except when
|
||||
# using the registration shared secret below.
|
||||
registration_disabled: true
|
||||
|
||||
# Prevents new guest accounts from being created. Guest registration is also
|
||||
# disabled implicitly by setting 'registration_disabled' above.
|
||||
guests_disabled: true
|
||||
|
||||
# -- If set, allows registration by anyone who knows the shared secret, regardless of
|
||||
# whether registration is otherwise disabled.
|
||||
registration_shared_secret: "this is the shared secret"
|
||||
|
||||
# -- enable reCAPTCHA registration
|
||||
enable_registration_captcha: false
|
||||
# -- reCAPTCHA public key
|
||||
recaptcha_public_key: ""
|
||||
# -- reCAPTCHA private key
|
||||
recaptcha_private_key: ""
|
||||
# -- reCAPTCHA bypass secret
|
||||
recaptcha_bypass_secret: ""
|
||||
recaptcha_siteverify_api: ""
|
||||
|
||||
# TURN server information that this homeserver should send to clients.
|
||||
turn:
|
||||
# -- Duration for how long users should be considered valid ([see time.ParseDuration](https://pkg.go.dev/time#ParseDuration) for more)
|
||||
turn_user_lifetime: "24h"
|
||||
turn_uris: []
|
||||
turn_shared_secret: ""
|
||||
# -- The TURN username
|
||||
turn_username: ""
|
||||
# -- The TURN password
|
||||
turn_password: ""
|
||||
|
||||
rate_limiting:
|
||||
# -- Enable rate limiting
|
||||
enabled: true
|
||||
# -- After how many requests a rate limit should be activated
|
||||
threshold: 20
|
||||
# -- Cooloff time in milliseconds
|
||||
cooloff_ms: 500
|
||||
# -- Users which should be exempt from rate limiting
|
||||
exempt_user_ids:
|
||||
|
||||
federation_api:
|
||||
# -- Federation failure threshold. How many consecutive failures that we should
|
||||
# tolerate when sending federation requests to a specific server. The backoff
|
||||
# is 2**x seconds, so 1 = 2 seconds, 2 = 4 seconds, 3 = 8 seconds, etc.
|
||||
# The default value is 16 if not specified, which is circa 18 hours.
|
||||
send_max_retries: 16
|
||||
# -- Disable TLS validation. This should **NOT** be used in production.
|
||||
disable_tls_validation: false
|
||||
prefer_direct_fetch: false
|
||||
# -- Prevents Dendrite from keeping HTTP connections
|
||||
# open for reuse for future requests. Connections will be closed quicker
|
||||
# but we may spend more time on TLS handshakes instead.
|
||||
disable_http_keepalives: false
|
||||
# -- Perspective keyservers, to use as a backup when direct key fetch
|
||||
# requests don't succeed.
|
||||
# @default -- See value.yaml
|
||||
key_perspectives:
|
||||
- server_name: matrix.org
|
||||
keys:
|
||||
- key_id: ed25519:auto
|
||||
public_key: Noi6WqcDj0QmPxCNQqgezwTlBKrfqehY1u2FyWP9uYw
|
||||
- key_id: ed25519:a_RXGa
|
||||
public_key: l8Hft5qXKn1vfHrg3p4+W8gELQVo8N13JkluMfmn2sQ
|
||||
|
||||
media_api:
|
||||
# -- The path to store media files (e.g. avatars) in
|
||||
base_path: "/data/media_store"
|
||||
# -- The max file size for uploaded media files
|
||||
max_file_size_bytes: 10485760
|
||||
# Whether to dynamically generate thumbnails if needed.
|
||||
dynamic_thumbnails: false
|
||||
# -- The maximum number of simultaneous thumbnail generators to run.
|
||||
max_thumbnail_generators: 10
|
||||
# -- A list of thumbnail sizes to be generated for media content.
|
||||
# @default -- See value.yaml
|
||||
thumbnail_sizes:
|
||||
- width: 32
|
||||
height: 32
|
||||
method: crop
|
||||
- width: 96
|
||||
height: 96
|
||||
method: crop
|
||||
- width: 640
|
||||
height: 480
|
||||
method: scale
|
||||
|
||||
sync_api:
|
||||
# -- This option controls which HTTP header to inspect to find the real remote IP
|
||||
# address of the client. This is likely required if Dendrite is running behind
|
||||
# a reverse proxy server.
|
||||
real_ip_header: X-Real-IP
|
||||
# -- Configuration for the full-text search engine.
|
||||
search:
|
||||
# -- Whether fulltext search is enabled.
|
||||
enabled: true
|
||||
# -- The path to store the search index in.
|
||||
index_path: "/data/search"
|
||||
# -- The language most likely to be used on the server - used when indexing, to
|
||||
# ensure the returned results match expectations. A full list of possible languages
|
||||
# can be found [here](https://github.com/matrix-org/dendrite/blob/76db8e90defdfb9e61f6caea8a312c5d60bcc005/internal/fulltext/bleve.go#L25-L46)
|
||||
language: "en"
|
||||
|
||||
user_api:
|
||||
# -- bcrypt cost to use when hashing passwords.
|
||||
# (ranges from 4-31; 4 being least secure, 31 being most secure; _NOTE: Using a too high value can cause clients to timeout and uses more CPU._)
|
||||
bcrypt_cost: 10
|
||||
# -- OpenID Token lifetime in milliseconds.
|
||||
openid_token_lifetime_ms: 3600000
|
||||
# - Disable TLS validation when hitting push gateways. This should **NOT** be used in production.
|
||||
push_gateway_disable_tls_validation: false
|
||||
# -- Rooms to join users to after registration
|
||||
auto_join_rooms: []
|
||||
|
||||
# -- Default logging configuration
|
||||
logging:
|
||||
- type: std
|
||||
level: info
|
||||
|
||||
postgresql:
|
||||
# -- Enable and configure postgres as the database for dendrite.
|
||||
# @default -- See value.yaml
|
||||
enabled: true
|
||||
image:
|
||||
repository: bitnami/postgresql
|
||||
tag: "15.1.0"
|
||||
auth:
|
||||
username: dendrite
|
||||
password: changeme
|
||||
database: dendrite
|
||||
|
||||
persistence:
|
||||
enabled: true
|
||||
|
||||
ingress:
|
||||
# -- Create an ingress for the deployment
|
||||
enabled: false
|
||||
# -- The ingressClass to use. Will be converted to annotation if not yet supported.
|
||||
className: ""
|
||||
# -- Extra, custom annotations
|
||||
annotations: {}
|
||||
# -- The ingress hostname for your matrix server.
|
||||
# Should align with the server_name and well_known_* hosts.
|
||||
# If not set, generated from the dendrite_config values.
|
||||
hostName: ""
|
||||
# -- TLS configuration. Should contain information for the server_name and well-known hosts.
|
||||
# Alternatively, set tls.generate=true to generate defaults based on the dendrite_config.
|
||||
tls: []
|
||||
|
||||
service:
|
||||
type: ClusterIP
|
||||
port: 8008
|
||||
|
||||
prometheus:
|
||||
servicemonitor:
|
||||
# -- Enable ServiceMonitor for Prometheus-Operator for scrape metric-endpoint
|
||||
enabled: false
|
||||
# -- Extra Labels on ServiceMonitor for selector of Prometheus Instance
|
||||
labels: {}
|
||||
rules:
|
||||
# -- Enable PrometheusRules for Prometheus-Operator for setup alerting
|
||||
enabled: false
|
||||
# -- Extra Labels on PrometheusRules for selector of Prometheus Instance
|
||||
labels: {}
|
||||
# -- additional alertrules (no default alertrules are provided)
|
||||
additionalRules: []
|
||||
|
||||
grafana:
|
||||
dashboards:
|
||||
enabled: false
|
||||
# -- Extra Labels on ConfigMap for selector of grafana sidecar
|
||||
labels:
|
||||
grafana_dashboard: "1"
|
||||
# -- Extra Annotations on ConfigMap additional config in grafana sidecar
|
||||
annotations: {}
|
||||
|
100
apps/finance/actualbudget.deployment.yaml
Normal file
100
apps/finance/actualbudget.deployment.yaml
Normal file
@ -0,0 +1,100 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
namespace: finance
|
||||
name: actualbudget
|
||||
labels:
|
||||
app: actualbudget
|
||||
spec:
|
||||
# deployment running a single container
|
||||
selector:
|
||||
matchLabels:
|
||||
app: actualbudget
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: actualbudget
|
||||
spec:
|
||||
containers:
|
||||
- name: actualbudget
|
||||
image: actualbudget/actual-server:latest
|
||||
imagePullPolicy: Always
|
||||
env:
|
||||
- name: TZ
|
||||
value: Europe/Berlin
|
||||
volumeMounts:
|
||||
- name: actualbudget-data-nfs
|
||||
mountPath: /data
|
||||
ports:
|
||||
- containerPort: 5006
|
||||
name: http
|
||||
protocol: TCP
|
||||
volumes:
|
||||
- name: actualbudget-data-nfs
|
||||
persistentVolumeClaim:
|
||||
claimName: actualbudget-data-nfs
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
namespace: finance
|
||||
name: "actualbudget-data-nfs"
|
||||
spec:
|
||||
storageClassName: fast
|
||||
capacity:
|
||||
storage: "5Gi"
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
nfs:
|
||||
path: /export/kluster/actualbudget
|
||||
server: 192.168.1.157
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
namespace: finance
|
||||
name: "actualbudget-data-nfs"
|
||||
spec:
|
||||
storageClassName: "fast"
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: "5Gi"
|
||||
# selector:
|
||||
# matchLabels:
|
||||
# directory: "journal-data"
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
namespace: finance
|
||||
name: actualbudget
|
||||
spec:
|
||||
selector:
|
||||
app: actualbudget
|
||||
ports:
|
||||
- protocol: TCP
|
||||
port: 5006
|
||||
targetPort: 5006
|
||||
type: ClusterIP
|
||||
---
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
namespace: finance
|
||||
name: actualbudget
|
||||
spec:
|
||||
entryPoints:
|
||||
- websecure
|
||||
routes:
|
||||
- match: Host(`actualbudget.kluster.moll.re`)
|
||||
kind: Rule
|
||||
services:
|
||||
- name: actualbudget
|
||||
port: 5006
|
||||
tls:
|
||||
certResolver: default-tls
|
66
apps/finance/firefly-importer.deployment.yaml
Normal file
66
apps/finance/firefly-importer.deployment.yaml
Normal file
@ -0,0 +1,66 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
labels:
|
||||
app: firefly-importer
|
||||
name: firefly-importer
|
||||
namespace: finance
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: firefly-importer
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: firefly-importer
|
||||
spec:
|
||||
containers:
|
||||
- image: fireflyiii/data-importer:latest
|
||||
imagePullPolicy: Always
|
||||
name: firefly-importer
|
||||
resources: {}
|
||||
ports:
|
||||
- containerPort: 8080
|
||||
env:
|
||||
- name: FIREFLY_III_ACCESS_TOKEN
|
||||
value: redacted
|
||||
- name: FIREFLY_III_URL
|
||||
value: firefly-http:8080
|
||||
# - name: APP_URL
|
||||
# value: https://finance.kluster.moll.re
|
||||
- name: TRUSTED_PROXIES
|
||||
value: "**"
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: firefly-importer-http
|
||||
namespace: finance
|
||||
labels:
|
||||
app: firefly-importer-http
|
||||
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- port: 8080
|
||||
# name: http
|
||||
selector:
|
||||
app: firefly-importer
|
||||
---
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: firefly-importer-ingress
|
||||
namespace: finance
|
||||
spec:
|
||||
entryPoints:
|
||||
- websecure
|
||||
routes:
|
||||
- match: Host(`importer.finance.kluster.moll.re`)
|
||||
kind: Rule
|
||||
services:
|
||||
- name: firefly-importer-http
|
||||
port: 8080
|
||||
tls:
|
||||
certResolver: default-tls
|
79
apps/finance/firefly.deployment.yaml
Normal file
79
apps/finance/firefly.deployment.yaml
Normal file
@ -0,0 +1,79 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
labels:
|
||||
app: firefly
|
||||
name: firefly
|
||||
namespace: finance
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: firefly
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: firefly
|
||||
spec:
|
||||
containers:
|
||||
- image: fireflyiii/core:latest
|
||||
imagePullPolicy: Always
|
||||
name: firefly
|
||||
resources: {}
|
||||
ports:
|
||||
- containerPort: 8080
|
||||
env:
|
||||
- name: APP_ENV
|
||||
value: "local"
|
||||
- name: APP_KEY
|
||||
value: iKejRAlgwx2Y/fxdosXjABbNxNzEuJdl
|
||||
- name: DB_CONNECTION
|
||||
value: sqlite
|
||||
- name: APP_URL
|
||||
value: https://finance.kluster.moll.re
|
||||
- name: TRUSTED_PROXIES
|
||||
value: "**"
|
||||
volumeMounts:
|
||||
- mountPath: /var/www/html/storage/database
|
||||
name: firefly-database
|
||||
|
||||
|
||||
volumes:
|
||||
- name: firefly-database
|
||||
persistentVolumeClaim:
|
||||
claimName: firefly-database-nfs
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: firefly-http
|
||||
namespace: finance
|
||||
labels:
|
||||
app: firefly-http
|
||||
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- port: 8080
|
||||
# name: http
|
||||
selector:
|
||||
app: firefly
|
||||
---
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: firefly-ingress
|
||||
namespace: finance
|
||||
spec:
|
||||
entryPoints:
|
||||
- websecure
|
||||
routes:
|
||||
- match: Host(`finance.kluster.moll.re`)
|
||||
kind: Rule
|
||||
services:
|
||||
- name: firefly-http
|
||||
port: 8080
|
||||
tls:
|
||||
certResolver: default-tls
|
||||
|
||||
|
36
apps/finance/firefly.pvc.yaml
Normal file
36
apps/finance/firefly.pvc.yaml
Normal file
@ -0,0 +1,36 @@
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
namespace: finance
|
||||
name: firefly-database-nfs
|
||||
labels:
|
||||
directory: firefly
|
||||
spec:
|
||||
storageClassName: fast
|
||||
volumeMode: Filesystem
|
||||
accessModes:
|
||||
- ReadOnlyMany
|
||||
capacity:
|
||||
storage: "1G"
|
||||
|
||||
nfs:
|
||||
path: /firefly # inside nfs part.
|
||||
server: 10.43.239.43 # assigned to nfs-server service. Won't change as long as service is not redeployed
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
namespace: finance
|
||||
name: firefly-database-nfs
|
||||
spec:
|
||||
resources:
|
||||
requests:
|
||||
storage: "1G"
|
||||
storageClassName: fast
|
||||
accessModes:
|
||||
- ReadOnlyMany
|
||||
selector:
|
||||
matchLabels:
|
||||
directory: firefly
|
||||
---
|
89
apps/gitea/drone-kube-runner.deployment.yaml
Normal file
89
apps/gitea/drone-kube-runner.deployment.yaml
Normal file
@ -0,0 +1,89 @@
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: drone-runner
|
||||
namespace: gitea
|
||||
---
|
||||
kind: Role
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
metadata:
|
||||
namespace: gitea
|
||||
name: drone-runner
|
||||
rules:
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- secrets
|
||||
verbs:
|
||||
- create
|
||||
- delete
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- pods
|
||||
- pods/log
|
||||
verbs:
|
||||
- get
|
||||
- create
|
||||
- delete
|
||||
- list
|
||||
- watch
|
||||
- update
|
||||
|
||||
---
|
||||
|
||||
kind: RoleBinding
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
metadata:
|
||||
name: drone-runner
|
||||
namespace: gitea
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: drone-runner
|
||||
namespace: gitea
|
||||
roleRef:
|
||||
kind: Role
|
||||
name: drone-runner
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
|
||||
---
|
||||
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
namespace: gitea
|
||||
name: drone-runner
|
||||
labels:
|
||||
app.kubernetes.io/name: drone-runner
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: drone-runner
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/name: drone-runner
|
||||
spec:
|
||||
serviceAccountName: drone-runner
|
||||
containers:
|
||||
- name: runner
|
||||
image: drone/drone-runner-kube:latest
|
||||
ports:
|
||||
- containerPort: 3000
|
||||
env:
|
||||
- name: DRONE_RPC_HOST
|
||||
value: drone-server:80
|
||||
- name: DRONE_RPC_PROTO
|
||||
value: http
|
||||
- name: DRONE_RPC_SECRET
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: drone-server-secret
|
||||
key: rpc_secret
|
||||
- name: DRONE_NAMESPACE_DEFAULT
|
||||
value: gitea
|
||||
# - name: DRONE_NAMESPACE_RULES
|
||||
# value: "drone-runner:*"
|
||||
- name: DRONE_SERVICE_ACCOUNT_DEFAULT
|
||||
value: drone-runner
|
129
apps/gitea/drone-server.deployment.yaml
Normal file
129
apps/gitea/drone-server.deployment.yaml
Normal file
@ -0,0 +1,129 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: drone-server
|
||||
namespace: gitea
|
||||
labels:
|
||||
app: drone-server
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: drone-server
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: drone-server
|
||||
spec:
|
||||
containers:
|
||||
- name: drone
|
||||
image: drone/drone:latest
|
||||
env:
|
||||
- name: DRONE_SERVER_PORT # because the deployment is called drone-server, override this var again!
|
||||
value: ":80"
|
||||
- name: DRONE_GITEA_SERVER
|
||||
value: https://git.kluster.moll.re
|
||||
- name: DRONE_GITEA_CLIENT_ID
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: drone-server-secret
|
||||
key: client_id
|
||||
- name: DRONE_GITEA_CLIENT_SECRET
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: drone-server-secret
|
||||
key: client_secret
|
||||
- name: DRONE_RPC_SECRET
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: drone-server-secret
|
||||
key: rpc_secret
|
||||
- name: DRONE_SERVER_HOST
|
||||
value: drone.kluster.moll.re
|
||||
- name: DRONE_SERVER_PROTO
|
||||
value: https
|
||||
resources:
|
||||
requests:
|
||||
memory: "1Gi"
|
||||
cpu: 1.5
|
||||
volumeMounts:
|
||||
- mountPath: /data
|
||||
name: drone-data-nfs
|
||||
volumes:
|
||||
- name: drone-data-nfs
|
||||
persistentVolumeClaim:
|
||||
claimName: drone-data-nfs
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: drone-server
|
||||
namespace: gitea
|
||||
labels:
|
||||
app: drone-server
|
||||
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- port: 80
|
||||
name: http
|
||||
selector:
|
||||
app: drone-server
|
||||
---
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: drone-server-ingress
|
||||
namespace: gitea
|
||||
|
||||
spec:
|
||||
entryPoints:
|
||||
- websecure
|
||||
routes:
|
||||
- match: Host(`drone.kluster.moll.re`)
|
||||
kind: Rule
|
||||
services:
|
||||
- name: drone-server
|
||||
port: 80
|
||||
tls:
|
||||
certResolver: default-tls
|
||||
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
namespace: gitea
|
||||
name: drone-data-nfs
|
||||
labels:
|
||||
directory: drone
|
||||
spec:
|
||||
storageClassName: fast
|
||||
capacity:
|
||||
storage: "1Gi"
|
||||
volumeMode: Filesystem
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
nfs:
|
||||
path: /export/kluster/drone
|
||||
server: 192.168.1.157
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
namespace: gitea
|
||||
name: drone-data-nfs
|
||||
spec:
|
||||
storageClassName: fast
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: "1Gi"
|
||||
selector:
|
||||
matchLabels:
|
||||
directory: drone
|
||||
|
||||
|
||||
|
23
apps/gitea/drone-servers.sealedsecret.yaml
Normal file
23
apps/gitea/drone-servers.sealedsecret.yaml
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"kind": "SealedSecret",
|
||||
"apiVersion": "bitnami.com/v1alpha1",
|
||||
"metadata": {
|
||||
"name": "drone-server-secret",
|
||||
"namespace": "gitea",
|
||||
"creationTimestamp": null
|
||||
},
|
||||
"spec": {
|
||||
"template": {
|
||||
"metadata": {
|
||||
"name": "drone-server-secret",
|
||||
"namespace": "gitea",
|
||||
"creationTimestamp": null
|
||||
}
|
||||
},
|
||||
"encryptedData": {
|
||||
"client_id": "AgA53a7kGJ6zZcx2ooTvTNwxaW2FvfzHJnxg6co54+HXinTJKsc4+GJ1PtdIbsZ7Dgu/sLi/4X90fT+PT2sgEx9jIilmHPdJeRtwV1UID3Y46A7cJlfcAKwNOFzp2PWvBvizbNp7tbJwxeAYnVX8GfN6fi700QxBGqAI3u8qQvLpU6UGW2RM96gCXI7s1QhE1Le6TgoESy5HX95pB7csDRNSwVE02OWfDHKEjH8QD8UvBB9xct6uwDfu7KrsJiNJvWMP6arvpfhy/X+UtCTFmj5wmFYL7oc6vSiCkq+QyHgQTEHTmGpEjEGKcQxPQaus3KhbhcxQBYLMEMYRlLPH0AEAA4dzbSpoVXM3LuIe9FppgrTCknK1uRB8wyrHUeInWO8mG7UraV6m5PUS+UYODMvfjwY3PyiGhTSf6LgMlhMl8e+2rb+OsWphT8Pbeom33PucrYaRFr9RpQkJSwE6HU3JEh25YLfIJ7caqRND8C/p8kD679C8UMcNpBN8WS4Cswn5jzmwbeJNM5DGp9yQVZNx7Bv3dHzx9i3ShjJ6QQnR/zWJZ/dWLy6weGYmdZMMXRAO8CCdruvcX5YyeieXZfchSIlZ/GqqBHptdcLpwLiZsfmyTWeBvk5pMAsZaKJ1tfWpQ84s4epzMoieTfhTueGXmeRKX+DJBBcriU+5YoqNxpU1lPL+LoInorJSKN7c3ouFx78N3GDOCq7mlWI94lY0bIs5zhrfUN137ITCcED62AJ7vks=",
|
||||
"client_secret": "AgDQXU7x6RLhE9Hc+goeR2+3rW316SLLLA8tfqx3tsykL+vxhRkY5UCEaak3Rgei0k14jB/Rmme+/O/D1/5tc/i885+sGn0yjU7Jo4L5nkIssUOHlmRSGkRJDb9ABPauFXAjap9KLix9bd8ewI7R0lS3tOK9ZhThYhcfDUqV9qkkbSHzwNptkH7gYWt9qzG/rqqqpFP+PCtjzKVve4LCBgaxetcnh1t+d5oh7VAFnSI9Bt1G/DRzi+K3YZ+YG5+XKevBp06GMiLUMiv/eUvmOfAB/KO79LnNVbOcRsAHfnqLbXgNjFzspr5xDiGMC/ma1245LavywqXDp0S9jjNEe48i51PPQMwHWV8XEovsM6LHcteluNogt+VkL4mOnmP+sba/V3NO51rt1WXl+ca+U4kBq4dLMsdpWUKemz9BlIRC4etEXjwKJ5DznT7u6GUTrXx2RCm1j0OYWM++P10SdyD6tGjKnZf88a33Wrwm8Y7c47JrPTlP4PqLq9gzvD310uVfs1vGYGULaToGy+D/th8qiWWlu7BIfwqlIj8lruVnOhQ4GeEZmUAsqYf8JfsBwuDc0Y+8qbwjFrr2z+5x+2XBL8KGZVopyme45SHijlBZs7YsJqTBsg5oW09grM8/oO731GtzSYmpat2VZlaILuTjALqo/cu//kxwmqh7UX+jnTJ/2N3bKKSAfHWbHDeHeS2XJ+eKaI4onNYW9J70EfAP3vOpU+zmQ8rOzJuJjRt0HarLwzc5CXb1Xhlgsaoj7zKXPQMnqIDngg==",
|
||||
"rpc_secret": "AgAcJNCFtOhK28vnLredkTgsVpnMPwaXss5NT5ysc0IbVid2vWRk2CTjBZc5DzjxxLwI1Ok88MFXHP08ZGCYy4rIbwoi7Ei1OEevGWfaI4n5CvAxr4ZamQHSfIX9dVAm9BSSx2M/mDtCKqVEGJEzyHCedrxf6LXM/YTNgjD43BuCZZMu35mRsHItpYFZQSttlHiUvR8y2YKrhV2P7fiWRD3cCVao8ldzKfGuvRfal8ByGoxpsYLj2D9CdtPvRF/TQsWUJJWwzbI9DmbW1MMI4/b26Jfa5TBvHxS1MQxFJpSXuMIengO+b0bi7WaR36y/FrKSNxIrQDHI7XCb00yYaSfj3RkSBVoAD0a2p8vNupHCqsKBoaWd8tMv/wGP8wbBk4DgGeQiTIvfhbQZU/Q2/LVDDficjXVn3IuKP/cqgGVf6lUh5YsUSs8qwpMil7XySiHvaZn+iFAnsXoejd4S2e/pbRvyaxP1aa7TCxnINjpU7IrnUEUiI4glQmAte3MqZWLXcc0Uk3Qz9PP0cD+V8qCOryrPMP2kTAI8LT/K4DgcEMAEGes4Vx1l0oBMF0xJvhM2kZXcEcf0NzuQJvYTgZpQF5xp0TchezLshmEUSIkII9NvAvn+iEYJeHsJUDijjmBloSYe4+QTgdYh6FakVUwYI5U4ztDNrvgqhWjExfbn8HxaFzsNTsuzGoYs+jwXH8Wk2z1Q1oQjDdO5YTjmdqvkSTdin/5CiuCDHaQX6a4gNQ=="
|
||||
}
|
||||
}
|
||||
}
|
18
apps/gitea/gitea.ingress.yaml
Normal file
18
apps/gitea/gitea.ingress.yaml
Normal file
@ -0,0 +1,18 @@
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: gitea-ingress
|
||||
namespace: gitea
|
||||
spec:
|
||||
entryPoints:
|
||||
- websecure
|
||||
routes:
|
||||
- match: Host(`git.kluster.moll.re`)
|
||||
kind: Rule
|
||||
services:
|
||||
- name: gitea-http
|
||||
port: 3000
|
||||
tls:
|
||||
certResolver: default-tls
|
||||
|
||||
|
71
apps/gitea/gitea.pvc.yaml
Normal file
71
apps/gitea/gitea.pvc.yaml
Normal file
@ -0,0 +1,71 @@
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
namespace: gitea
|
||||
name: gitea-data-nfs
|
||||
labels:
|
||||
directory: gitea
|
||||
spec:
|
||||
storageClassName: fast
|
||||
capacity:
|
||||
storage: "10Gi"
|
||||
volumeMode: Filesystem
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
nfs:
|
||||
path: /export/kluster/gitea/data
|
||||
server: 192.168.1.157
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
namespace: gitea
|
||||
name: gitea-data-nfs
|
||||
spec:
|
||||
storageClassName: fast
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: "10Gi"
|
||||
selector:
|
||||
matchLabels:
|
||||
directory: gitea
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
namespace: gitea
|
||||
name: gitea-postgresql-data-nfs
|
||||
labels:
|
||||
directory: gitea
|
||||
spec:
|
||||
storageClassName: fast
|
||||
capacity:
|
||||
storage: "5Gi"
|
||||
volumeMode: Filesystem
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
nfs:
|
||||
path: /export/kluster/gitea/postgres
|
||||
server: 192.168.1.157
|
||||
|
||||
---
|
||||
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
namespace: gitea
|
||||
name: gitea-postgresql-data-nfs
|
||||
spec:
|
||||
storageClassName: fast
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: "5Gi"
|
||||
selector:
|
||||
matchLabels:
|
||||
directory: gitea
|
||||
---
|
497
apps/gitea/gitea.values.yaml
Normal file
497
apps/gitea/gitea.values.yaml
Normal file
@ -0,0 +1,497 @@
|
||||
# Default values for gitea.
|
||||
# This is a YAML-formatted file.
|
||||
# Declare variables to be passed into your templates.
|
||||
## @section Global
|
||||
#
|
||||
## @param global.imageRegistry global image registry override
|
||||
## @param global.imagePullSecrets global image pull secrets override; can be extended by `imagePullSecrets`
|
||||
## @param global.storageClass global storage class override
|
||||
## @param global.hostAliases global hostAliases which will be added to the pod's hosts files
|
||||
global:
|
||||
imageRegistry: ""
|
||||
## E.g.
|
||||
## imagePullSecrets:
|
||||
## - myRegistryKeySecretName
|
||||
##
|
||||
imagePullSecrets: []
|
||||
storageClass: ""
|
||||
hostAliases: []
|
||||
# - ip: 192.168.137.2
|
||||
# hostnames:
|
||||
# - example.com
|
||||
|
||||
## @param replicaCount number of replicas for the statefulset
|
||||
replicaCount: 1
|
||||
|
||||
## @param clusterDomain cluster domain
|
||||
clusterDomain: cluster.local
|
||||
|
||||
## @section Image
|
||||
## @param image.registry image registry, e.g. gcr.io,docker.io
|
||||
## @param image.repository Image to start for this pod
|
||||
## @param image.tag Visit: [Image tag](https://hub.docker.com/r/gitea/gitea/tags?page=1&ordering=last_updated). Defaults to `appVersion` within Chart.yaml.
|
||||
## @param image.pullPolicy Image pull policy
|
||||
## @param image.rootless Wether or not to pull the rootless version of Gitea, only works on Gitea 1.14.x or higher
|
||||
image:
|
||||
registry: ""
|
||||
repository: gitea/gitea
|
||||
# Overrides the image tag whose default is the chart appVersion.
|
||||
tag: ""
|
||||
pullPolicy: Always
|
||||
rootless: false # only possible when running 1.14 or later
|
||||
|
||||
## @param imagePullSecrets Secret to use for pulling the image
|
||||
imagePullSecrets: []
|
||||
|
||||
## @section Security
|
||||
# Security context is only usable with rootless image due to image design
|
||||
## @param podSecurityContext.fsGroup Set the shared file system group for all containers in the pod.
|
||||
podSecurityContext:
|
||||
fsGroup: 1000
|
||||
|
||||
## @param containerSecurityContext Security context
|
||||
containerSecurityContext: {}
|
||||
# allowPrivilegeEscalation: false
|
||||
# capabilities:
|
||||
# drop:
|
||||
# - ALL
|
||||
# # Add the SYS_CHROOT capability for root and rootless images if you intend to
|
||||
# # run pods on nodes that use the container runtime cri-o. Otherwise, you will
|
||||
# # get an error message from the SSH server that it is not possible to read from
|
||||
# # the repository.
|
||||
# # https://gitea.com/gitea/helm-chart/issues/161
|
||||
# add:
|
||||
# - SYS_CHROOT
|
||||
# privileged: false
|
||||
# readOnlyRootFilesystem: true
|
||||
# runAsGroup: 1000
|
||||
# runAsNonRoot: true
|
||||
# runAsUser: 1000
|
||||
|
||||
## @deprecated The securityContext variable has been split two:
|
||||
## - containerSecurityContext
|
||||
## - podSecurityContext.
|
||||
## @param securityContext Run init and Gitea containers as a specific securityContext
|
||||
securityContext: {}
|
||||
|
||||
## @section Service
|
||||
service:
|
||||
## @param service.http.type Kubernetes service type for web traffic
|
||||
## @param service.http.port Port number for web traffic
|
||||
## @param service.http.clusterIP ClusterIP setting for http autosetup for statefulset is None
|
||||
## @param service.http.loadBalancerIP LoadBalancer IP setting
|
||||
## @param service.http.nodePort NodePort for http service
|
||||
## @param service.http.externalTrafficPolicy If `service.http.type` is `NodePort` or `LoadBalancer`, set this to `Local` to enable source IP preservation
|
||||
## @param service.http.externalIPs External IPs for service
|
||||
## @param service.http.ipFamilyPolicy HTTP service dual-stack policy
|
||||
## @param service.http.ipFamilies HTTP service dual-stack familiy selection,for dual-stack parameters see official kubernetes [dual-stack concept documentation](https://kubernetes.io/docs/concepts/services-networking/dual-stack/).
|
||||
## @param service.http.loadBalancerSourceRanges Source range filter for http loadbalancer
|
||||
## @param service.http.annotations HTTP service annotations
|
||||
http:
|
||||
type: ClusterIP
|
||||
port: 3000
|
||||
clusterIP: None
|
||||
nodePort:
|
||||
externalTrafficPolicy:
|
||||
externalIPs:
|
||||
ipFamilyPolicy:
|
||||
ipFamilies:
|
||||
loadBalancerSourceRanges: []
|
||||
annotations: {}
|
||||
## @param service.ssh.type Kubernetes service type for ssh traffic
|
||||
## @param service.ssh.port Port number for ssh traffic
|
||||
## @param service.ssh.clusterIP ClusterIP setting for ssh autosetup for statefulset is None
|
||||
## @param service.ssh.loadBalancerIP LoadBalancer IP setting
|
||||
## @param service.ssh.nodePort NodePort for ssh service
|
||||
## @param service.ssh.externalTrafficPolicy If `service.ssh.type` is `NodePort` or `LoadBalancer`, set this to `Local` to enable source IP preservation
|
||||
## @param service.ssh.externalIPs External IPs for service
|
||||
## @param service.ssh.ipFamilyPolicy SSH service dual-stack policy
|
||||
## @param service.ssh.ipFamilies SSH service dual-stack familiy selection,for dual-stack parameters see official kubernetes [dual-stack concept documentation](https://kubernetes.io/docs/concepts/services-networking/dual-stack/).
|
||||
## @param service.ssh.hostPort HostPort for ssh service
|
||||
## @param service.ssh.loadBalancerSourceRanges Source range filter for ssh loadbalancer
|
||||
## @param service.ssh.annotations SSH service annotations
|
||||
ssh:
|
||||
type: LoadBalancer
|
||||
port: 2222
|
||||
loadBalancerIP: 192.168.3.3
|
||||
nodePort:
|
||||
externalTrafficPolicy:
|
||||
externalIPs:
|
||||
ipFamilyPolicy:
|
||||
ipFamilies:
|
||||
hostPort:
|
||||
loadBalancerSourceRanges: []
|
||||
annotations: {}
|
||||
|
||||
## @section Ingress
|
||||
## @param ingress.enabled Enable ingress
|
||||
## @param ingress.className Ingress class name
|
||||
## @param ingress.annotations Ingress annotations
|
||||
## @param ingress.hosts[0].host Default Ingress host
|
||||
## @param ingress.hosts[0].paths[0].path Default Ingress path
|
||||
## @param ingress.hosts[0].paths[0].pathType Ingress path type
|
||||
## @param ingress.tls Ingress tls settings
|
||||
## @extra ingress.apiVersion Specify APIVersion of ingress object. Mostly would only be used for argocd.
|
||||
ingress:
|
||||
enabled: false
|
||||
# className: nginx
|
||||
className:
|
||||
annotations:
|
||||
{}
|
||||
# kubernetes.io/ingress.class: nginx
|
||||
# kubernetes.io/tls-acme: "true"
|
||||
hosts:
|
||||
- host: git.example.com
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
tls: []
|
||||
# - secretName: chart-example-tls
|
||||
# hosts:
|
||||
# - git.example.com
|
||||
# Mostly for argocd or any other CI that uses `helm template | kubectl apply` or similar
|
||||
# If helm doesn't correctly detect your ingress API version you can set it here.
|
||||
# apiVersion: networking.k8s.io/v1
|
||||
|
||||
## @section StatefulSet
|
||||
#
|
||||
## @param resources Kubernetes resources
|
||||
resources:
|
||||
{}
|
||||
# We usually recommend not to specify default resources and to leave this as a conscious
|
||||
# choice for the user. This also increases chances charts run on environments with little
|
||||
# resources, such as Minikube. If you do want to specify resources, uncomment the following
|
||||
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
|
||||
# limits:
|
||||
# cpu: 100m
|
||||
# memory: 128Mi
|
||||
# requests:
|
||||
# cpu: 100m
|
||||
# memory: 128Mi
|
||||
|
||||
## Use an alternate scheduler, e.g. "stork".
|
||||
## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
|
||||
##
|
||||
## @param schedulerName Use an alternate scheduler, e.g. "stork"
|
||||
schedulerName: ""
|
||||
|
||||
## @param nodeSelector NodeSelector for the statefulset
|
||||
nodeSelector: {}
|
||||
|
||||
## @param tolerations Tolerations for the statefulset
|
||||
tolerations: []
|
||||
|
||||
## @param affinity Affinity for the statefulset
|
||||
affinity: {}
|
||||
|
||||
## @param dnsConfig dnsConfig for the statefulset
|
||||
dnsConfig: {}
|
||||
|
||||
## @param priorityClassName priorityClassName for the statefulset
|
||||
priorityClassName: ""
|
||||
|
||||
## @param statefulset.env Additional environment variables to pass to containers
|
||||
## @param statefulset.terminationGracePeriodSeconds How long to wait until forcefully kill the pod
|
||||
## @param statefulset.labels Labels for the statefulset
|
||||
## @param statefulset.annotations Annotations for the Gitea StatefulSet to be created
|
||||
statefulset:
|
||||
env:
|
||||
[]
|
||||
# - name: VARIABLE
|
||||
# value: my-value
|
||||
terminationGracePeriodSeconds: 60
|
||||
labels: {}
|
||||
annotations: {}
|
||||
|
||||
## @section Persistence
|
||||
#
|
||||
## @param persistence.enabled Enable persistent storage
|
||||
## @param persistence.existingClaim Use an existing claim to store repository information
|
||||
## @param persistence.size Size for persistence to store repo information
|
||||
## @param persistence.accessModes AccessMode for persistence
|
||||
## @param persistence.labels Labels for the persistence volume claim to be created
|
||||
## @param persistence.annotations Annotations for the persistence volume claim to be created
|
||||
## @param persistence.storageClass Name of the storage class to use
|
||||
## @param persistence.subPath Subdirectory of the volume to mount at
|
||||
persistence:
|
||||
enabled: true
|
||||
existingClaim: gitea-data-nfs
|
||||
|
||||
size: 10Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
labels: {}
|
||||
annotations: {}
|
||||
storageClass:
|
||||
subPath:
|
||||
|
||||
## @param extraVolumes Additional volumes to mount to the Gitea statefulset
|
||||
extraVolumes: []
|
||||
# - name: postgres-ssl-vol
|
||||
# secret:
|
||||
# secretName: gitea-postgres-ssl
|
||||
|
||||
## @param extraContainerVolumeMounts Mounts that are only mapped into the Gitea runtime/main container, to e.g. override custom templates.
|
||||
extraContainerVolumeMounts: []
|
||||
|
||||
## @param extraInitVolumeMounts Mounts that are only mapped into the init-containers. Can be used for additional preconfiguration.
|
||||
extraInitVolumeMounts: []
|
||||
|
||||
## @deprecated The extraVolumeMounts variable has been split two:
|
||||
## - extraContainerVolumeMounts
|
||||
## - extraInitVolumeMounts
|
||||
## As an example, can be used to mount a client cert when connecting to an external Postgres server.
|
||||
## @param extraVolumeMounts **DEPRECATED** Additional volume mounts for init containers and the Gitea main container
|
||||
extraVolumeMounts: []
|
||||
# - name: postgres-ssl-vol
|
||||
# readOnly: true
|
||||
# mountPath: "/pg-ssl"
|
||||
|
||||
## @section Init
|
||||
## @param initPreScript Bash shell script copied verbatim to the start of the init-container.
|
||||
initPreScript: ""
|
||||
#
|
||||
# initPreScript: |
|
||||
# mkdir -p /data/git/.postgresql
|
||||
# cp /pg-ssl/* /data/git/.postgresql/
|
||||
# chown -R git:git /data/git/.postgresql/
|
||||
# chmod 400 /data/git/.postgresql/postgresql.key
|
||||
|
||||
## @param initContainers.resources.limits initContainers.limits Kubernetes resource limits for init containers
|
||||
## @param initContainers.resources.requests.cpu initContainers.requests.cpu Kubernetes cpu resource limits for init containers
|
||||
## @param initContainers.resources.requests.memory initContainers.requests.memory Kubernetes memory resource limits for init containers
|
||||
initContainers:
|
||||
resources:
|
||||
limits: {}
|
||||
requests:
|
||||
cpu: 100m
|
||||
memory: 128Mi
|
||||
|
||||
# Configure commit/action signing prerequisites
|
||||
## @section Signing
|
||||
#
|
||||
## @param signing.enabled Enable commit/action signing
|
||||
## @param signing.gpgHome GPG home directory
|
||||
## @param signing.privateKey Inline private gpg key for signed Gitea actions
|
||||
## @param signing.existingSecret Use an existing secret to store the value of `signing.privateKey`
|
||||
signing:
|
||||
enabled: false
|
||||
gpgHome: /data/git/.gnupg
|
||||
privateKey: ""
|
||||
# privateKey: |-
|
||||
# -----BEGIN PGP PRIVATE KEY BLOCK-----
|
||||
# ...
|
||||
# -----END PGP PRIVATE KEY BLOCK-----
|
||||
existingSecret: ""
|
||||
|
||||
## @section Gitea
|
||||
#
|
||||
gitea:
|
||||
## @param gitea.admin.username Username for the Gitea admin user
|
||||
## @param gitea.admin.existingSecret Use an existing secret to store admin user credentials
|
||||
## @param gitea.admin.password Password for the Gitea admin user
|
||||
## @param gitea.admin.email Email for the Gitea admin user
|
||||
admin:
|
||||
# existingSecret: gitea-admin-secret
|
||||
existingSecret:
|
||||
username: gitea_admin
|
||||
password: r8sA8CPHD9!bt6d
|
||||
email: "gitea@local.domain"
|
||||
|
||||
## @param gitea.metrics.enabled Enable Gitea metrics
|
||||
## @param gitea.metrics.serviceMonitor.enabled Enable Gitea metrics service monitor
|
||||
metrics:
|
||||
enabled: false
|
||||
serviceMonitor:
|
||||
enabled: false
|
||||
# additionalLabels:
|
||||
# prometheus-release: prom1
|
||||
|
||||
## @param gitea.ldap LDAP configuration
|
||||
ldap:
|
||||
[]
|
||||
# - name: "LDAP 1"
|
||||
# existingSecret:
|
||||
# securityProtocol:
|
||||
# host:
|
||||
# port:
|
||||
# userSearchBase:
|
||||
# userFilter:
|
||||
# adminFilter:
|
||||
# emailAttribute:
|
||||
# bindDn:
|
||||
# bindPassword:
|
||||
# usernameAttribute:
|
||||
# publicSSHKeyAttribute:
|
||||
|
||||
# Either specify inline `key` and `secret` or refer to them via `existingSecret`
|
||||
## @param gitea.oauth OAuth configuration
|
||||
oauth:
|
||||
[]
|
||||
# - name: 'OAuth 1'
|
||||
# provider:
|
||||
# key:
|
||||
# secret:
|
||||
# existingSecret:
|
||||
# autoDiscoverUrl:
|
||||
# useCustomUrls:
|
||||
# customAuthUrl:
|
||||
# customTokenUrl:
|
||||
# customProfileUrl:
|
||||
# customEmailUrl:
|
||||
|
||||
## @param gitea.config Configuration for the Gitea server,ref: [config-cheat-sheet](https://docs.gitea.io/en-us/config-cheat-sheet/)
|
||||
config:
|
||||
APP_NAME: "Remy's personal git hosting"
|
||||
server:
|
||||
DOMAIN: git.kluster.moll.re
|
||||
ROOT_URL: https://git.kluster.moll.re
|
||||
SSH_LISTEN_PORT: 2222
|
||||
actions:
|
||||
ENABLED: true
|
||||
|
||||
|
||||
## @param gitea.additionalConfigSources Additional configuration from secret or configmap
|
||||
additionalConfigSources: []
|
||||
# - secret:
|
||||
# secretName: gitea-app-ini-oauth
|
||||
# - configMap:
|
||||
# name: gitea-app-ini-plaintext
|
||||
|
||||
## @param gitea.additionalConfigFromEnvs Additional configuration sources from environment variables
|
||||
additionalConfigFromEnvs: []
|
||||
|
||||
## @param gitea.podAnnotations Annotations for the Gitea pod
|
||||
podAnnotations: {}
|
||||
|
||||
## @param gitea.ssh.logLevel Configure OpenSSH's log level. Only available for root-based Gitea image.
|
||||
ssh:
|
||||
logLevel: "INFO"
|
||||
|
||||
## @section LivenessProbe
|
||||
#
|
||||
## @param gitea.livenessProbe.enabled Enable liveness probe
|
||||
## @param gitea.livenessProbe.tcpSocket.port Port to probe for liveness
|
||||
## @param gitea.livenessProbe.initialDelaySeconds Initial delay before liveness probe is initiated
|
||||
## @param gitea.livenessProbe.timeoutSeconds Timeout for liveness probe
|
||||
## @param gitea.livenessProbe.periodSeconds Period for liveness probe
|
||||
## @param gitea.livenessProbe.successThreshold Success threshold for liveness probe
|
||||
## @param gitea.livenessProbe.failureThreshold Failure threshold for liveness probe
|
||||
# Modify the liveness probe for your needs or completely disable it by commenting out.
|
||||
livenessProbe:
|
||||
enabled: true
|
||||
tcpSocket:
|
||||
port: http
|
||||
initialDelaySeconds: 200
|
||||
timeoutSeconds: 1
|
||||
periodSeconds: 10
|
||||
successThreshold: 1
|
||||
failureThreshold: 10
|
||||
|
||||
## @section ReadinessProbe
|
||||
#
|
||||
## @param gitea.readinessProbe.enabled Enable readiness probe
|
||||
## @param gitea.readinessProbe.tcpSocket.port Port to probe for readiness
|
||||
## @param gitea.readinessProbe.initialDelaySeconds Initial delay before readiness probe is initiated
|
||||
## @param gitea.readinessProbe.timeoutSeconds Timeout for readiness probe
|
||||
## @param gitea.readinessProbe.periodSeconds Period for readiness probe
|
||||
## @param gitea.readinessProbe.successThreshold Success threshold for readiness probe
|
||||
## @param gitea.readinessProbe.failureThreshold Failure threshold for readiness probe
|
||||
# Modify the readiness probe for your needs or completely disable it by commenting out.
|
||||
readinessProbe:
|
||||
enabled: true
|
||||
tcpSocket:
|
||||
port: http
|
||||
initialDelaySeconds: 5
|
||||
timeoutSeconds: 1
|
||||
periodSeconds: 10
|
||||
successThreshold: 1
|
||||
failureThreshold: 3
|
||||
|
||||
# # Uncomment the startup probe to enable and modify it for your needs.
|
||||
## @section StartupProbe
|
||||
#
|
||||
## @param gitea.startupProbe.enabled Enable startup probe
|
||||
## @param gitea.startupProbe.tcpSocket.port Port to probe for startup
|
||||
## @param gitea.startupProbe.initialDelaySeconds Initial delay before startup probe is initiated
|
||||
## @param gitea.startupProbe.timeoutSeconds Timeout for startup probe
|
||||
## @param gitea.startupProbe.periodSeconds Period for startup probe
|
||||
## @param gitea.startupProbe.successThreshold Success threshold for startup probe
|
||||
## @param gitea.startupProbe.failureThreshold Failure threshold for startup probe
|
||||
startupProbe:
|
||||
enabled: false
|
||||
tcpSocket:
|
||||
port: http
|
||||
initialDelaySeconds: 60
|
||||
timeoutSeconds: 1
|
||||
periodSeconds: 10
|
||||
successThreshold: 1
|
||||
failureThreshold: 10
|
||||
|
||||
## @section Memcached
|
||||
#
|
||||
## @param memcached.enabled Memcached is loaded as a dependency from [Bitnami](https://github.com/bitnami/charts/tree/master/bitnami/memcached) if enabled in the values. Complete Configuration can be taken from their website.
|
||||
## ref: https://hub.docker.com/r/bitnami/memcached/tags/
|
||||
## @param memcached.service.ports.memcached Port for Memcached
|
||||
memcached:
|
||||
enabled: true
|
||||
# image:
|
||||
# registry: docker.io
|
||||
# repository: bitnami/memcached
|
||||
# tag: ""
|
||||
# digest: ""
|
||||
# pullPolicy: IfNotPresent
|
||||
# pullSecrets: []
|
||||
service:
|
||||
ports:
|
||||
memcached: 11211
|
||||
|
||||
## @section PostgreSQL
|
||||
#
|
||||
## @param postgresql.enabled Enable PostgreSQL
|
||||
## @param postgresql.global.postgresql.auth.password Password for the `gitea` user (overrides `auth.password`)
|
||||
## @param postgresql.global.postgresql.auth.database Name for a custom database to create (overrides `auth.database`)
|
||||
## @param postgresql.global.postgresql.auth.username Name for a custom user to create (overrides `auth.username`)
|
||||
## @param postgresql.global.postgresql.service.ports.postgresql PostgreSQL service port (overrides `service.ports.postgresql`)
|
||||
## @param postgresql.primary.persistence.size PVC Storage Request for PostgreSQL volume
|
||||
postgresql:
|
||||
enabled: true
|
||||
image:
|
||||
tag: 11
|
||||
# diagnosticMode:
|
||||
# enabled: true
|
||||
# containerSecurityContext:
|
||||
# runAsUser: 0
|
||||
global:
|
||||
postgresql:
|
||||
auth:
|
||||
password: gitea
|
||||
database: gitea
|
||||
username: gitea
|
||||
service:
|
||||
ports:
|
||||
postgresql: 5432
|
||||
primary:
|
||||
persistence:
|
||||
size: 10Gi
|
||||
existingClaim: gitea-postgresql-data-nfs
|
||||
mountPath: /bitnami/postgresql/data
|
||||
|
||||
|
||||
# By default, removed or moved settings that still remain in a user defined values.yaml will cause Helm to fail running the install/update.
|
||||
# Set it to false to skip this basic validation check.
|
||||
## @section Advanced
|
||||
## @param checkDeprecation Set it to false to skip this basic validation check.
|
||||
## @param test.enabled Set it to false to disable test-connection Pod.
|
||||
## @param test.image.name Image name for the wget container used in the test-connection Pod.
|
||||
## @param test.image.tag Image tag for the wget container used in the test-connection Pod.
|
||||
checkDeprecation: true
|
||||
test:
|
||||
enabled: true
|
||||
image:
|
||||
name: busybox
|
||||
tag: latest
|
||||
|
||||
## @param extraDeploy Array of extra objects to deploy with the release
|
||||
##
|
||||
extraDeploy: []
|
34
apps/homeassistant/ingress.yaml
Normal file
34
apps/homeassistant/ingress.yaml
Normal file
@ -0,0 +1,34 @@
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: homeassistant-ingress
|
||||
namespace: homeassistant
|
||||
spec:
|
||||
entryPoints:
|
||||
- websecure
|
||||
routes:
|
||||
- match: Host(`home.kluster.moll.re`)
|
||||
middlewares:
|
||||
- name: homeassistant-websocket
|
||||
kind: Rule
|
||||
services:
|
||||
- name: homeassistant-home-assistant
|
||||
port: 8123
|
||||
tls:
|
||||
certResolver: default-tls
|
||||
|
||||
---
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
kind: Middleware
|
||||
metadata:
|
||||
name: homeassistant-websocket
|
||||
namespace: homeassistant
|
||||
spec:
|
||||
headers:
|
||||
customRequestHeaders:
|
||||
X-Forwarded-Proto: "https"
|
||||
# enable websockets
|
||||
Upgrade: "websocket"
|
||||
|
||||
|
||||
|
37
apps/homeassistant/pvc.yaml
Normal file
37
apps/homeassistant/pvc.yaml
Normal file
@ -0,0 +1,37 @@
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
namespace: homeassistant
|
||||
name: homeassistant-nfs
|
||||
labels:
|
||||
directory: homeassistant
|
||||
spec:
|
||||
storageClassName: slow
|
||||
capacity:
|
||||
storage: "1Gi"
|
||||
volumeMode: Filesystem
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
nfs:
|
||||
path: /export/kluster/homeassistant
|
||||
server: 192.168.1.157
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
namespace: homeassistant
|
||||
name: homeassistant-nfs
|
||||
spec:
|
||||
storageClassName: slow
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: "1Gi"
|
||||
selector:
|
||||
matchLabels:
|
||||
directory: homeassistant
|
||||
|
||||
|
||||
|
136
apps/homeassistant/values.yaml
Normal file
136
apps/homeassistant/values.yaml
Normal file
@ -0,0 +1,136 @@
|
||||
#
|
||||
# IMPORTANT NOTE
|
||||
#
|
||||
# This chart inherits from our common library chart. You can check the default values/options here:
|
||||
# https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common/values.yaml
|
||||
#
|
||||
|
||||
image:
|
||||
# -- image repository
|
||||
repository: homeassistant/home-assistant
|
||||
# -- image tag
|
||||
tag: "2023.3"
|
||||
# -- image pull policy
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
# -- environment variables.
|
||||
# @default -- See below
|
||||
env:
|
||||
# -- Set the container timezone
|
||||
TZ: Europe/Berlin
|
||||
|
||||
# -- Configures service settings for the chart. Normally this does not need to be modified.
|
||||
# @default -- See values.yaml
|
||||
service:
|
||||
main:
|
||||
ports:
|
||||
http:
|
||||
port: 8123
|
||||
|
||||
ingress:
|
||||
# -- Enable and configure ingress settings for the chart under this key.
|
||||
# @default -- See values.yaml
|
||||
main:
|
||||
enabled: false
|
||||
|
||||
# -- Enable devices to be discoverable
|
||||
# hostNetwork: true
|
||||
|
||||
# -- When hostNetwork is true set dnsPolicy to ClusterFirstWithHostNet
|
||||
# dnsPolicy: ClusterFirstWithHostNet
|
||||
|
||||
securityContext:
|
||||
# -- (bool) Privileged securityContext may be required if USB devics are accessed directly through the host machine
|
||||
privileged: # true
|
||||
|
||||
|
||||
resources:
|
||||
requests:
|
||||
cpu: "100m"
|
||||
memory: "200Mi"
|
||||
limits:
|
||||
cpu: "2"
|
||||
memory: "1Gi"
|
||||
|
||||
# -- Configure persistence settings for the chart under this key.
|
||||
# @default -- See values.yaml
|
||||
persistence:
|
||||
config:
|
||||
enabled: true
|
||||
existingClaim: homeassistant-nfs
|
||||
|
||||
# -- Configure a hostPathMount to mount a USB device in the container.
|
||||
# @default -- See values.yaml
|
||||
usb:
|
||||
enabled: false
|
||||
type: hostPath
|
||||
hostPath: /path/to/device
|
||||
|
||||
# -- Enable and configure mariadb database subchart under this key.
|
||||
# For more options see [mariadb chart documentation](https://github.com/bitnami/charts/tree/master/bitnami/mariadb)
|
||||
# @default -- See values.yaml
|
||||
mariadb:
|
||||
enabled: false
|
||||
architecture: standalone
|
||||
auth:
|
||||
database: home-assistant
|
||||
username: home-assistant
|
||||
password: home-assistant-pass
|
||||
rootPassword: home-assistantrootpass
|
||||
primary:
|
||||
persistence:
|
||||
enabled: false
|
||||
# storageClass: ""
|
||||
|
||||
# -- Enable and configure postgresql database subchart under this key.
|
||||
# For more options see [postgresql chart documentation](https://github.com/bitnami/charts/tree/master/bitnami/postgresql)
|
||||
# @default -- See values.yaml
|
||||
postgresql:
|
||||
enabled: false
|
||||
image:
|
||||
# -- Enable and configure influxdb database subchart under this key.
|
||||
# For more options see [influxdb chart documentation](https://github.com/bitnami/charts/tree/master/bitnami/influxdb)
|
||||
# @default -- See values.yaml
|
||||
influxdb:
|
||||
enabled: false
|
||||
architecture: standalone
|
||||
database: home_assistant
|
||||
authEnabled: false
|
||||
persistence:
|
||||
enabled: false
|
||||
# storageClass: ""
|
||||
# size: 8Gi
|
||||
|
||||
metrics:
|
||||
# -- Enable and configure a Prometheus serviceMonitor for the chart under this key.
|
||||
# @default -- See values.yaml
|
||||
enabled: false
|
||||
serviceMonitor:
|
||||
interval: 1m
|
||||
scrapeTimeout: 30s
|
||||
labels: {}
|
||||
## See https://www.home-assistant.io/docs/authentication/ for where to find
|
||||
## long lived access token creation under your account profile, which is
|
||||
## needed to monitor Home Assistant
|
||||
# bearerTokenSecret:
|
||||
# name: ""
|
||||
# key: ""
|
||||
|
||||
# -- Enable and configure Prometheus Rules for the chart under this key.
|
||||
# @default -- See values.yaml
|
||||
prometheusRule:
|
||||
enabled: false
|
||||
labels: {}
|
||||
# -- Configure additionial rules for the chart under this key.
|
||||
# @default -- See prometheusrules.yaml
|
||||
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
|
||||
|
51
apps/immich/ingress.yaml
Normal file
51
apps/immich/ingress.yaml
Normal file
@ -0,0 +1,51 @@
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
kind: Middleware
|
||||
metadata:
|
||||
name: stripprefix
|
||||
spec:
|
||||
stripPrefix:
|
||||
prefixes:
|
||||
- /api
|
||||
---
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
kind: Middleware
|
||||
metadata:
|
||||
name: websocket
|
||||
spec:
|
||||
headers:
|
||||
customRequestHeaders:
|
||||
X-Forwarded-Proto: "https"
|
||||
# enable websockets
|
||||
Upgrade: "websocket"
|
||||
---
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: immich-ingressroute
|
||||
|
||||
spec:
|
||||
entryPoints:
|
||||
- websecure
|
||||
routes:
|
||||
- match: Host(`immich.kluster.moll.re`) && PathPrefix(`/api/`)
|
||||
kind: Rule
|
||||
services:
|
||||
- name: immich-server
|
||||
port: 3001
|
||||
passHostHeader: true
|
||||
middlewares:
|
||||
- name: stripprefix
|
||||
- name: websocket
|
||||
|
||||
- match: Host(`immich.kluster.moll.re`) && PathPrefix(`/`)
|
||||
kind: Rule
|
||||
services:
|
||||
- name: immich-web
|
||||
port: 3000
|
||||
passHostHeader: true
|
||||
middlewares:
|
||||
- name: websocket
|
||||
|
||||
tls:
|
||||
certResolver: default-tls
|
||||
|
36
apps/immich/pvc.yaml
Normal file
36
apps/immich/pvc.yaml
Normal file
@ -0,0 +1,36 @@
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: immich-nfs
|
||||
labels:
|
||||
directory: immich
|
||||
spec:
|
||||
storageClassName: fast
|
||||
capacity:
|
||||
storage: "50Gi"
|
||||
volumeMode: Filesystem
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
nfs:
|
||||
path: /kluster/immich
|
||||
# path: /kluster/immich
|
||||
server: 192.168.1.157
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: immich-nfs
|
||||
spec:
|
||||
storageClassName: fast
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: "50Gi"
|
||||
selector:
|
||||
matchLabels:
|
||||
directory: immich
|
||||
|
||||
|
||||
|
136
apps/immich/values.yaml
Normal file
136
apps/immich/values.yaml
Normal file
@ -0,0 +1,136 @@
|
||||
## This chart relies on the common library chart from bjw-s
|
||||
## You can find it at https://github.com/bjw-s/helm-charts/tree/main/charts/library/common
|
||||
## Refer there for more detail about the supported values
|
||||
|
||||
# These entries are shared between all the Immich components
|
||||
|
||||
env:
|
||||
REDIS_HOSTNAME: '{{ printf "%s-redis-master" .Release.Name }}'
|
||||
DB_HOSTNAME: "{{ .Release.Name }}-postgresql"
|
||||
DB_USERNAME: "{{ .Values.postgresql.global.postgresql.auth.username }}"
|
||||
DB_DATABASE_NAME: "{{ .Values.postgresql.global.postgresql.auth.database }}"
|
||||
# -- You should provide your own secret outside of this helm-chart and use `postgresql.global.postgresql.auth.existingSecret` to provide credentials to the postgresql instance
|
||||
DB_PASSWORD: "{{ .Values.postgresql.global.postgresql.auth.password }}"
|
||||
TYPESENSE_ENABLED: "{{ .Values.typesense.enabled }}"
|
||||
TYPESENSE_API_KEY: "{{ .Values.typesense.env.TYPESENSE_API_KEY }}"
|
||||
TYPESENSE_HOST: '{{ printf "%s-typesense" .Release.Name }}'
|
||||
IMMICH_WEB_URL: '{{ printf "http://%s-web:3000" .Release.Name }}'
|
||||
IMMICH_SERVER_URL: '{{ printf "http://%s-server:3001" .Release.Name }}'
|
||||
IMMICH_MACHINE_LEARNING_URL: '{{ printf "http://%s-machine-learning:3003" .Release.Name }}'
|
||||
|
||||
image:
|
||||
tag: v1.80.0
|
||||
|
||||
immich:
|
||||
persistence:
|
||||
# Main data store for all photos shared between different components.
|
||||
library:
|
||||
# Automatically creating the library volume is not supported by this chart
|
||||
# You have to specify an existing PVC to use
|
||||
existingClaim: immich-nfs
|
||||
|
||||
# Dependencies
|
||||
|
||||
postgresql:
|
||||
enabled: true
|
||||
global:
|
||||
postgresql:
|
||||
auth:
|
||||
username: immich
|
||||
database: immich
|
||||
password: immich
|
||||
|
||||
redis:
|
||||
enabled: true
|
||||
architecture: standalone
|
||||
auth:
|
||||
enabled: false
|
||||
|
||||
typesense:
|
||||
enabled: true
|
||||
env:
|
||||
TYPESENSE_DATA_DIR: /tsdata
|
||||
TYPESENSE_API_KEY: typesense
|
||||
persistence:
|
||||
tsdata:
|
||||
# Enabling typesense persistence is recommended to avoid slow reindexing
|
||||
enabled: true
|
||||
accessMode: ReadWriteOnce
|
||||
size: 1Gi
|
||||
# storageClass: storage-class
|
||||
image:
|
||||
repository: docker.io/typesense/typesense
|
||||
tag: 0.24.0
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
# Immich components
|
||||
|
||||
server:
|
||||
enabled: true
|
||||
image:
|
||||
repository: ghcr.io/immich-app/immich-server
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
microservices:
|
||||
enabled: true
|
||||
env:
|
||||
REVERSE_GEOCODING_DUMP_DIRECTORY: /geodata-cache
|
||||
persistence:
|
||||
geodata-cache:
|
||||
enabled: true
|
||||
size: 1Gi
|
||||
# Optional: Set this to pvc to avoid downloading the geodata every start.
|
||||
type: emptyDir
|
||||
accessMode: ReadWriteMany
|
||||
# storageClass: your-class
|
||||
image:
|
||||
repository: ghcr.io/immich-app/immich-server
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
machine-learning:
|
||||
enabled: true
|
||||
image:
|
||||
repository: ghcr.io/immich-app/immich-machine-learning
|
||||
pullPolicy: IfNotPresent
|
||||
env:
|
||||
TRANSFORMERS_CACHE: /cache
|
||||
persistence:
|
||||
cache:
|
||||
enabled: true
|
||||
size: 10Gi
|
||||
# Optional: Set this to pvc to avoid downloading the ML models every start.
|
||||
type: emptyDir
|
||||
accessMode: ReadWriteMany
|
||||
# storageClass: your-class
|
||||
|
||||
web:
|
||||
enabled: true
|
||||
image:
|
||||
repository: ghcr.io/immich-app/immich-web
|
||||
pullPolicy: IfNotPresent
|
||||
persistence:
|
||||
library:
|
||||
enabled: false
|
||||
|
||||
proxy:
|
||||
enabled: true
|
||||
image:
|
||||
repository: ghcr.io/immich-app/immich-proxy
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
persistence:
|
||||
library:
|
||||
enabled: false
|
||||
|
||||
ingress:
|
||||
main:
|
||||
enabled: false
|
||||
annotations:
|
||||
# proxy-body-size is set to 0 to remove the body limit on file uploads
|
||||
nginx.ingress.kubernetes.io/proxy-body-size: "0"
|
||||
hosts:
|
||||
- host: immich.local
|
||||
paths:
|
||||
- path: "/"
|
||||
tls: []
|
||||
|
32
apps/media/jellyfin.ingress.yaml
Normal file
32
apps/media/jellyfin.ingress.yaml
Normal file
@ -0,0 +1,32 @@
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: jellyfin-ingress
|
||||
namespace: media
|
||||
spec:
|
||||
entryPoints:
|
||||
- websecure
|
||||
routes:
|
||||
- match: Host(`media.kluster.moll.re`)
|
||||
middlewares:
|
||||
- name: jellyfin-websocket
|
||||
kind: Rule
|
||||
services:
|
||||
- name: jellyfin
|
||||
port: 8096
|
||||
tls:
|
||||
certResolver: default-tls
|
||||
|
||||
---
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
kind: Middleware
|
||||
metadata:
|
||||
name: jellyfin-websocket
|
||||
namespace: media
|
||||
spec:
|
||||
headers:
|
||||
customRequestHeaders:
|
||||
X-Forwarded-Proto: "https"
|
||||
Upgrade: "websocket"
|
||||
|
||||
|
72
apps/media/jellyfin.pvc.yaml
Normal file
72
apps/media/jellyfin.pvc.yaml
Normal file
@ -0,0 +1,72 @@
|
||||
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
namespace: media
|
||||
name: jellyfin-config-nfs
|
||||
labels:
|
||||
directory: jellyfin
|
||||
|
||||
spec:
|
||||
storageClassName: slow
|
||||
capacity:
|
||||
storage: "1Gi"
|
||||
volumeMode: Filesystem
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
nfs:
|
||||
path: /export/kluster/jellyfin-config
|
||||
server: 192.168.1.157
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
namespace: media
|
||||
name: jellyfin-config-nfs
|
||||
spec:
|
||||
storageClassName: slow
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: "1Gi"
|
||||
selector:
|
||||
matchLabels:
|
||||
directory: jellyfin
|
||||
---
|
||||
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
namespace: media
|
||||
name: jellyfin-data-nfs
|
||||
labels:
|
||||
directory: jellyfin
|
||||
|
||||
spec:
|
||||
storageClassName: slow
|
||||
capacity:
|
||||
storage: "1Ti"
|
||||
volumeMode: Filesystem
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
nfs:
|
||||
path: /export/jellyfin-media
|
||||
server: 192.168.1.157
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
namespace: media
|
||||
name: jellyfin-data-nfs
|
||||
spec:
|
||||
storageClassName: slow
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: "1Ti"
|
||||
selector:
|
||||
matchLabels:
|
||||
directory: jellyfin
|
||||
---
|
108
apps/media/jellyfin.values.yaml
Normal file
108
apps/media/jellyfin.values.yaml
Normal file
@ -0,0 +1,108 @@
|
||||
image:
|
||||
# -- image repository
|
||||
repository: jellyfin/jellyfin
|
||||
# -- image tag
|
||||
tag: 10.8.9
|
||||
|
||||
# -- image pull policy
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
|
||||
# -- environment variables. See [image docs](https://jellyfin.org/docs/general/administration/configuration.html) for more details.
|
||||
# @default -- See below
|
||||
env:
|
||||
# -- Set the container timezone
|
||||
TZ: Europe/Berlin
|
||||
|
||||
# -- Configures service settings for the chart.
|
||||
# @default -- See values.yaml
|
||||
service:
|
||||
main:
|
||||
ports:
|
||||
http:
|
||||
port: 8096
|
||||
|
||||
ingress:
|
||||
# -- Enable and configure ingress settings for the chart under this key.
|
||||
# @default -- See values.yaml
|
||||
main:
|
||||
enabled: false
|
||||
|
||||
# -- Configure persistence settings for the chart under this key.
|
||||
# @default -- See values.yaml
|
||||
persistence:
|
||||
config:
|
||||
enabled: true
|
||||
type: pvc
|
||||
existingClaim: jellyfin-config-nfs
|
||||
accessMode:
|
||||
- ReadWriteOnce
|
||||
|
||||
# Cache does NOT contain temporary transcoding data.
|
||||
cache:
|
||||
enabled: false
|
||||
mountPath: /cache
|
||||
|
||||
media:
|
||||
enabled: true
|
||||
# use local storage
|
||||
type: pvc
|
||||
existingClaim: jellyfin-data-nfs
|
||||
accessMode:
|
||||
- ReadWriteOnce
|
||||
mountPath: /media
|
||||
|
||||
# encoder:
|
||||
# enabled: true
|
||||
# type: hostPath
|
||||
# hostPath: /dev/dri/renderD128
|
||||
|
||||
|
||||
# # -- Configure the Security Context for the Pod
|
||||
# podSecurityContext:
|
||||
# runAsUser: 0 # root user -> access to /dev/video*
|
||||
# runAsUser: 568
|
||||
# runAsGroup: 568
|
||||
# fsGroup: 568
|
||||
# # Hardware acceleration using an Intel iGPU w/ QuickSync
|
||||
# # These IDs below should be matched to your `video` and `render` group on the host
|
||||
# # To obtain those IDs run the following grep statement on the host:
|
||||
# # $ cat /etc/group | grep "video\|render"
|
||||
# # video:x:44:
|
||||
# # render:x:109:
|
||||
# supplementalGroups:
|
||||
# - 44
|
||||
# - 109
|
||||
|
||||
# resources:
|
||||
# requests:
|
||||
# # Hardware acceleration using an Intel iGPU w/ QuickSync and
|
||||
# # using intel-gpu-plugin (https://github.com/intel/intel-device-plugins-for-kubernetes)
|
||||
# gpu.intel.com/i915: 1
|
||||
# cpu: 200m
|
||||
# memory: 256Mi
|
||||
# limits:
|
||||
# # Hardware acceleration using an Intel iGPU w/ QuickSync and
|
||||
# # using intel-gpu-plugin (https://github.com/intel/intel-device-plugins-for-kubernetes)
|
||||
# gpu.intel.com/i915: 1
|
||||
# memory: 4096Mi
|
||||
|
||||
probes:
|
||||
# -- Liveness probe configuration
|
||||
# @default -- See below
|
||||
liveness:
|
||||
# -- Enable the liveness probe
|
||||
enabled: true
|
||||
# -- Set this to `true` if you wish to specify your own livenessProbe
|
||||
custom: true
|
||||
# -- The spec field contains the values for the default livenessProbe.
|
||||
# If you selected `custom: true`, this field holds the definition of the livenessProbe.
|
||||
# @default -- See below
|
||||
spec:
|
||||
initialDelaySeconds: 100
|
||||
periodSeconds: 100
|
||||
timeoutSeconds: 5
|
||||
failureThreshold: 3
|
||||
httpGet:
|
||||
path: /health
|
||||
port: 8096
|
17
apps/monitoring/grafana.ingress.yaml
Normal file
17
apps/monitoring/grafana.ingress.yaml
Normal file
@ -0,0 +1,17 @@
|
||||
kind: IngressRoute
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
metadata:
|
||||
name: grafana-ingress
|
||||
spec:
|
||||
entryPoints:
|
||||
- websecure
|
||||
routes:
|
||||
- match: Host(`grafana.kluster.moll.re`)
|
||||
kind: Rule
|
||||
services:
|
||||
- name: grafana
|
||||
port: 80
|
||||
tls:
|
||||
certResolver: default-tls
|
||||
|
||||
|
35
apps/monitoring/grafana.pvc.yaml
Normal file
35
apps/monitoring/grafana.pvc.yaml
Normal file
@ -0,0 +1,35 @@
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: grafana-nfs
|
||||
labels:
|
||||
directory: grafana
|
||||
spec:
|
||||
storageClassName: slow
|
||||
capacity:
|
||||
storage: "1Gi"
|
||||
volumeMode: Filesystem
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
nfs:
|
||||
path: /export/kluster/grafana
|
||||
server: 192.168.1.157
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: grafana-nfs
|
||||
spec:
|
||||
storageClassName: slow
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: "1Gi"
|
||||
selector:
|
||||
matchLabels:
|
||||
directory: grafana
|
||||
|
||||
|
||||
|
873
apps/monitoring/grafana.values.yaml
Normal file
873
apps/monitoring/grafana.values.yaml
Normal file
@ -0,0 +1,873 @@
|
||||
rbac:
|
||||
create: true
|
||||
## Use an existing ClusterRole/Role (depending on rbac.namespaced false/true)
|
||||
# useExistingRole: name-of-some-(cluster)role
|
||||
pspEnabled: true
|
||||
pspUseAppArmor: true
|
||||
namespaced: false
|
||||
extraRoleRules: []
|
||||
# - apiGroups: []
|
||||
# resources: []
|
||||
# verbs: []
|
||||
extraClusterRoleRules: []
|
||||
# - apiGroups: []
|
||||
# resources: []
|
||||
# verbs: []
|
||||
serviceAccount:
|
||||
create: true
|
||||
name:
|
||||
nameTest:
|
||||
## Service account annotations. Can be templated.
|
||||
# annotations:
|
||||
# eks.amazonaws.com/role-arn: arn:aws:iam::123456789000:role/iam-role-name-here
|
||||
autoMount: true
|
||||
|
||||
replicas: 1
|
||||
|
||||
## Create a headless service for the deployment
|
||||
headlessService: false
|
||||
|
||||
## Create HorizontalPodAutoscaler object for deployment type
|
||||
#
|
||||
autoscaling:
|
||||
enabled: false
|
||||
# minReplicas: 1
|
||||
# maxReplicas: 10
|
||||
# metrics:
|
||||
# - type: Resource
|
||||
# resource:
|
||||
# name: cpu
|
||||
# targetAverageUtilization: 60
|
||||
# - type: Resource
|
||||
# resource:
|
||||
# name: memory
|
||||
# targetAverageUtilization: 60
|
||||
|
||||
## See `kubectl explain poddisruptionbudget.spec` for more
|
||||
## ref: https://kubernetes.io/docs/tasks/run-application/configure-pdb/
|
||||
podDisruptionBudget: {}
|
||||
# minAvailable: 1
|
||||
# maxUnavailable: 1
|
||||
|
||||
## See `kubectl explain deployment.spec.strategy` for more
|
||||
## ref: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy
|
||||
deploymentStrategy:
|
||||
type: RollingUpdate
|
||||
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /api/health
|
||||
port: 3000
|
||||
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /api/health
|
||||
port: 3000
|
||||
initialDelaySeconds: 60
|
||||
timeoutSeconds: 30
|
||||
failureThreshold: 10
|
||||
|
||||
## Use an alternate scheduler, e.g. "stork".
|
||||
## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
|
||||
##
|
||||
# schedulerName: "default-scheduler"
|
||||
|
||||
image:
|
||||
repository: grafana/grafana
|
||||
tag: 9.0.2
|
||||
sha: ""
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
## Optionally specify an array of imagePullSecrets.
|
||||
## Secrets must be manually created in the namespace.
|
||||
## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
|
||||
## Can be templated.
|
||||
##
|
||||
# pullSecrets:
|
||||
# - myRegistrKeySecretName
|
||||
|
||||
testFramework:
|
||||
enabled: true
|
||||
image: "bats/bats"
|
||||
tag: "v1.4.1"
|
||||
imagePullPolicy: IfNotPresent
|
||||
securityContext: {}
|
||||
|
||||
securityContext:
|
||||
runAsUser: 472
|
||||
runAsGroup: 472
|
||||
fsGroup: 472
|
||||
|
||||
containerSecurityContext:
|
||||
{}
|
||||
|
||||
# Extra configmaps to mount in grafana pods
|
||||
# Values are templated.
|
||||
extraConfigmapMounts: []
|
||||
# - name: certs-configmap
|
||||
# mountPath: /etc/grafana/ssl/
|
||||
# subPath: certificates.crt # (optional)
|
||||
# configMap: certs-configmap
|
||||
# readOnly: true
|
||||
|
||||
|
||||
extraEmptyDirMounts: []
|
||||
# - name: provisioning-notifiers
|
||||
# mountPath: /etc/grafana/provisioning/notifiers
|
||||
|
||||
|
||||
# Apply extra labels to common labels.
|
||||
extraLabels: {}
|
||||
|
||||
## Assign a PriorityClassName to pods if set
|
||||
# priorityClassName:
|
||||
|
||||
downloadDashboardsImage:
|
||||
repository: curlimages/curl
|
||||
tag: 7.73.0
|
||||
sha: ""
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
downloadDashboards:
|
||||
env: {}
|
||||
envFromSecret: ""
|
||||
resources: {}
|
||||
|
||||
## Pod Annotations
|
||||
# podAnnotations: {}
|
||||
|
||||
## Pod Labels
|
||||
# podLabels: {}
|
||||
|
||||
podPortName: grafana
|
||||
|
||||
## Deployment annotations
|
||||
# annotations: {}
|
||||
|
||||
## Expose the grafana service to be accessed from outside the cluster (LoadBalancer service).
|
||||
## or access it from within the cluster (ClusterIP service). Set the service type and the port to serve it.
|
||||
## ref: http://kubernetes.io/docs/user-guide/services/
|
||||
##
|
||||
service:
|
||||
enabled: true
|
||||
type: ClusterIP
|
||||
port: 80
|
||||
targetPort: 3000
|
||||
# targetPort: 4181 To be used with a proxy extraContainer
|
||||
annotations: {}
|
||||
labels: {}
|
||||
portName: service
|
||||
|
||||
serviceMonitor:
|
||||
## If true, a ServiceMonitor CRD is created for a prometheus operator
|
||||
## https://github.com/coreos/prometheus-operator
|
||||
##
|
||||
enabled: false
|
||||
path: /metrics
|
||||
# namespace: monitoring (defaults to use the namespace this chart is deployed to)
|
||||
labels: {}
|
||||
interval: 1m
|
||||
scheme: http
|
||||
tlsConfig: {}
|
||||
scrapeTimeout: 30s
|
||||
relabelings: []
|
||||
|
||||
extraExposePorts: []
|
||||
# - name: keycloak
|
||||
# port: 8080
|
||||
# targetPort: 8080
|
||||
# type: ClusterIP
|
||||
|
||||
# overrides pod.spec.hostAliases in the grafana deployment's pods
|
||||
hostAliases: []
|
||||
# - ip: "1.2.3.4"
|
||||
# hostnames:
|
||||
# - "my.host.com"
|
||||
|
||||
ingress:
|
||||
enabled: true
|
||||
# For Kubernetes >= 1.18 you should specify the ingress-controller via the field ingressClassName
|
||||
# See https://kubernetes.io/blog/2020/04/02/improvements-to-the-ingress-api-in-kubernetes-1.18/#specifying-the-class-of-an-ingress
|
||||
# ingressClassName: nginx
|
||||
# Values can be templated
|
||||
annotations: {
|
||||
kubernetes.io/ingress.class: nginx,
|
||||
cert-manager.io/cluster-issuer: cloudflare-letsencrypt-prod
|
||||
}
|
||||
# kubernetes.io/ingress.class: nginx
|
||||
# kubernetes.io/tls-acme: "true"
|
||||
labels: {}
|
||||
path: /
|
||||
|
||||
# pathType is only for k8s >= 1.1=
|
||||
pathType: Prefix
|
||||
|
||||
hosts:
|
||||
- grafana.kluster.moll.re
|
||||
## Extra paths to prepend to every host configuration. This is useful when working with annotation based services.
|
||||
extraPaths: []
|
||||
# - path: /*
|
||||
# backend:
|
||||
# serviceName: ssl-redirect
|
||||
# servicePort: use-annotation
|
||||
## Or for k8s > 1.19
|
||||
# - path: /*
|
||||
# pathType: Prefix
|
||||
# backend:
|
||||
# service:
|
||||
# name: ssl-redirect
|
||||
# port:
|
||||
# name: use-annotation
|
||||
|
||||
|
||||
tls:
|
||||
- hosts:
|
||||
- grafana.kluster.moll.re
|
||||
secretName: cloudflare-letsencrypt-issuer-account-key
|
||||
# - secretName: chart-example-tls
|
||||
# hosts:
|
||||
# - chart-example.local
|
||||
|
||||
resources: {}
|
||||
# limits:
|
||||
# cpu: 100m
|
||||
# memory: 128Mi
|
||||
# requests:
|
||||
# cpu: 100m
|
||||
# memory: 128Mi
|
||||
|
||||
## Node labels for pod assignment
|
||||
## ref: https://kubernetes.io/docs/user-guide/node-selection/
|
||||
#
|
||||
nodeSelector: {}
|
||||
|
||||
## Tolerations for pod assignment
|
||||
## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
|
||||
##
|
||||
tolerations: []
|
||||
|
||||
## Affinity for pod assignment (evaluated as template)
|
||||
## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
|
||||
##
|
||||
affinity: {}
|
||||
|
||||
## Additional init containers (evaluated as template)
|
||||
## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
|
||||
##
|
||||
extraInitContainers: []
|
||||
|
||||
## Enable an Specify container in extraContainers. This is meant to allow adding an authentication proxy to a grafana pod
|
||||
extraContainers: ""
|
||||
# extraContainers: |
|
||||
# - name: proxy
|
||||
# image: quay.io/gambol99/keycloak-proxy:latest
|
||||
# args:
|
||||
# - -provider=github
|
||||
# - -client-id=
|
||||
# - -client-secret=
|
||||
# - -github-org=<ORG_NAME>
|
||||
# - -email-domain=*
|
||||
# - -cookie-secret=
|
||||
# - -http-address=http://0.0.0.0:4181
|
||||
# - -upstream-url=http://127.0.0.1:3000
|
||||
# ports:
|
||||
# - name: proxy-web
|
||||
# containerPort: 4181
|
||||
|
||||
## Volumes that can be used in init containers that will not be mounted to deployment pods
|
||||
extraContainerVolumes: []
|
||||
# - name: volume-from-secret
|
||||
# secret:
|
||||
# secretName: secret-to-mount
|
||||
# - name: empty-dir-volume
|
||||
# emptyDir: {}
|
||||
|
||||
## Enable persistence using Persistent Volume Claims
|
||||
## ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
|
||||
##
|
||||
persistence:
|
||||
type: pvc
|
||||
enabled: true
|
||||
# storageClassName: default
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
size: 10Gi
|
||||
# annotations: {}
|
||||
finalizers:
|
||||
- kubernetes.io/pvc-protection
|
||||
# selectorLabels: {}
|
||||
## Sub-directory of the PV to mount. Can be templated.
|
||||
# subPath: ""
|
||||
## Name of an existing PVC. Can be templated.
|
||||
existingClaim: grafana-nfs
|
||||
|
||||
## If persistence is not enabled, this allows to mount the
|
||||
## local storage in-memory to improve performance
|
||||
##
|
||||
inMemory:
|
||||
enabled: false
|
||||
## The maximum usage on memory medium EmptyDir would be
|
||||
## the minimum value between the SizeLimit specified
|
||||
## here and the sum of memory limits of all containers in a pod
|
||||
##
|
||||
# sizeLimit: 300Mi
|
||||
|
||||
initChownData:
|
||||
## If false, data ownership will not be reset at startup
|
||||
## This allows the prometheus-server to be run with an arbitrary user
|
||||
##
|
||||
enabled: true
|
||||
|
||||
## initChownData container image
|
||||
##
|
||||
image:
|
||||
repository: busybox
|
||||
tag: "1.31.1"
|
||||
sha: ""
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
## initChownData resource requests and limits
|
||||
## Ref: http://kubernetes.io/docs/user-guide/compute-resources/
|
||||
##
|
||||
resources: {}
|
||||
# limits:
|
||||
# cpu: 100m
|
||||
# memory: 128Mi
|
||||
# requests:
|
||||
# cpu: 100m
|
||||
# memory: 128Mi
|
||||
|
||||
|
||||
# Administrator credentials when not using an existing secret (see below)
|
||||
adminUser: admin
|
||||
# adminPassword: strongpassword
|
||||
|
||||
# Use an existing secret for the admin user.
|
||||
admin:
|
||||
## Name of the secret. Can be templated.
|
||||
existingSecret: ""
|
||||
userKey: admin-user
|
||||
passwordKey: admin-password
|
||||
|
||||
## Define command to be executed at startup by grafana container
|
||||
## Needed if using `vault-env` to manage secrets (ref: https://banzaicloud.com/blog/inject-secrets-into-pods-vault/)
|
||||
## Default is "run.sh" as defined in grafana's Dockerfile
|
||||
# command:
|
||||
# - "sh"
|
||||
# - "/run.sh"
|
||||
|
||||
## Use an alternate scheduler, e.g. "stork".
|
||||
## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
|
||||
##
|
||||
# schedulerName:
|
||||
|
||||
## Extra environment variables that will be pass onto deployment pods
|
||||
##
|
||||
## to provide grafana with access to CloudWatch on AWS EKS:
|
||||
## 1. create an iam role of type "Web identity" with provider oidc.eks.* (note the provider for later)
|
||||
## 2. edit the "Trust relationships" of the role, add a line inside the StringEquals clause using the
|
||||
## same oidc eks provider as noted before (same as the existing line)
|
||||
## also, replace NAMESPACE and prometheus-operator-grafana with the service account namespace and name
|
||||
##
|
||||
## "oidc.eks.us-east-1.amazonaws.com/id/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:sub": "system:serviceaccount:NAMESPACE:prometheus-operator-grafana",
|
||||
##
|
||||
## 3. attach a policy to the role, you can use a built in policy called CloudWatchReadOnlyAccess
|
||||
## 4. use the following env: (replace 123456789000 and iam-role-name-here with your aws account number and role name)
|
||||
##
|
||||
## env:
|
||||
## AWS_ROLE_ARN: arn:aws:iam::123456789000:role/iam-role-name-here
|
||||
## AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/eks.amazonaws.com/serviceaccount/token
|
||||
## AWS_REGION: us-east-1
|
||||
##
|
||||
## 5. uncomment the EKS section in extraSecretMounts: below
|
||||
## 6. uncomment the annotation section in the serviceAccount: above
|
||||
## make sure to replace arn:aws:iam::123456789000:role/iam-role-name-here with your role arn
|
||||
|
||||
env: {}
|
||||
|
||||
## "valueFrom" environment variable references that will be added to deployment pods. Name is templated.
|
||||
## ref: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/#envvarsource-v1-core
|
||||
## Renders in container spec as:
|
||||
## env:
|
||||
## ...
|
||||
## - name: <key>
|
||||
## valueFrom:
|
||||
## <value rendered as YAML>
|
||||
envValueFrom: {}
|
||||
# ENV_NAME:
|
||||
# configMapKeyRef:
|
||||
# name: configmap-name
|
||||
# key: value_key
|
||||
|
||||
## The name of a secret in the same kubernetes namespace which contain values to be added to the environment
|
||||
## This can be useful for auth tokens, etc. Value is templated.
|
||||
envFromSecret: ""
|
||||
|
||||
## Sensible environment variables that will be rendered as new secret object
|
||||
## This can be useful for auth tokens, etc
|
||||
envRenderSecret: {}
|
||||
|
||||
## The names of secrets in the same kubernetes namespace which contain values to be added to the environment
|
||||
## Each entry should contain a name key, and can optionally specify whether the secret must be defined with an optional key.
|
||||
## Name is templated.
|
||||
envFromSecrets: []
|
||||
## - name: secret-name
|
||||
## optional: true
|
||||
|
||||
## The names of conifgmaps in the same kubernetes namespace which contain values to be added to the environment
|
||||
## Each entry should contain a name key, and can optionally specify whether the configmap must be defined with an optional key.
|
||||
## Name is templated.
|
||||
## ref: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#configmapenvsource-v1-core
|
||||
envFromConfigMaps: []
|
||||
## - name: configmap-name
|
||||
## optional: true
|
||||
|
||||
# Inject Kubernetes services as environment variables.
|
||||
# See https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/#environment-variables
|
||||
enableServiceLinks: true
|
||||
|
||||
## Additional grafana server secret mounts
|
||||
# Defines additional mounts with secrets. Secrets must be manually created in the namespace.
|
||||
extraSecretMounts: []
|
||||
# - name: secret-files
|
||||
# mountPath: /etc/secrets
|
||||
# secretName: grafana-secret-files
|
||||
# readOnly: true
|
||||
# subPath: ""
|
||||
#
|
||||
# for AWS EKS (cloudwatch) use the following (see also instruction in env: above)
|
||||
# - name: aws-iam-token
|
||||
# mountPath: /var/run/secrets/eks.amazonaws.com/serviceaccount
|
||||
# readOnly: true
|
||||
# projected:
|
||||
# defaultMode: 420
|
||||
# sources:
|
||||
# - serviceAccountToken:
|
||||
# audience: sts.amazonaws.com
|
||||
# expirationSeconds: 86400
|
||||
# path: token
|
||||
#
|
||||
# for CSI e.g. Azure Key Vault use the following
|
||||
# - name: secrets-store-inline
|
||||
# mountPath: /run/secrets
|
||||
# readOnly: true
|
||||
# csi:
|
||||
# driver: secrets-store.csi.k8s.io
|
||||
# readOnly: true
|
||||
# volumeAttributes:
|
||||
# secretProviderClass: "akv-grafana-spc"
|
||||
# nodePublishSecretRef: # Only required when using service principal mode
|
||||
# name: grafana-akv-creds # Only required when using service principal mode
|
||||
|
||||
## Additional grafana server volume mounts
|
||||
# Defines additional volume mounts.
|
||||
extraVolumeMounts: []
|
||||
# - name: extra-volume-0
|
||||
# mountPath: /mnt/volume0
|
||||
# readOnly: true
|
||||
# existingClaim: volume-claim
|
||||
# - name: extra-volume-1
|
||||
# mountPath: /mnt/volume1
|
||||
# readOnly: true
|
||||
# hostPath: /usr/shared/
|
||||
|
||||
## Container Lifecycle Hooks. Execute a specific bash command or make an HTTP request
|
||||
lifecycleHooks: {}
|
||||
# postStart:
|
||||
# exec:
|
||||
# command: []
|
||||
|
||||
## Pass the plugins you want installed as a list.
|
||||
##
|
||||
plugins: []
|
||||
# - digrich-bubblechart-panel
|
||||
# - grafana-clock-panel
|
||||
|
||||
## Configure grafana datasources
|
||||
## ref: http://docs.grafana.org/administration/provisioning/#datasources
|
||||
##
|
||||
datasources: {}
|
||||
# datasources.yaml:
|
||||
# apiVersion: 1
|
||||
# datasources:
|
||||
# - name: Prometheus
|
||||
# type: prometheus
|
||||
# url: http://prometheus-prometheus-server
|
||||
# access: proxy
|
||||
# isDefault: true
|
||||
# - name: CloudWatch
|
||||
# type: cloudwatch
|
||||
# access: proxy
|
||||
# uid: cloudwatch
|
||||
# editable: false
|
||||
# jsonData:
|
||||
# authType: default
|
||||
# defaultRegion: us-east-1
|
||||
|
||||
## Configure notifiers
|
||||
## ref: http://docs.grafana.org/administration/provisioning/#alert-notification-channels
|
||||
##
|
||||
notifiers: {}
|
||||
# notifiers.yaml:
|
||||
# notifiers:
|
||||
# - name: email-notifier
|
||||
# type: email
|
||||
# uid: email1
|
||||
# # either:
|
||||
# org_id: 1
|
||||
# # or
|
||||
# org_name: Main Org.
|
||||
# is_default: true
|
||||
# settings:
|
||||
# addresses: an_email_address@example.com
|
||||
# delete_notifiers:
|
||||
|
||||
## Configure grafana dashboard providers
|
||||
## ref: http://docs.grafana.org/administration/provisioning/#dashboards
|
||||
##
|
||||
## `path` must be /var/lib/grafana/dashboards/<provider_name>
|
||||
##
|
||||
dashboardProviders: {}
|
||||
# dashboardproviders.yaml:
|
||||
# apiVersion: 1
|
||||
# providers:
|
||||
# - name: 'default'
|
||||
# orgId: 1
|
||||
# folder: ''
|
||||
# type: file
|
||||
# disableDeletion: false
|
||||
# editable: true
|
||||
# options:
|
||||
# path: /var/lib/grafana/dashboards/default
|
||||
|
||||
## Configure grafana dashboard to import
|
||||
## NOTE: To use dashboards you must also enable/configure dashboardProviders
|
||||
## ref: https://grafana.com/dashboards
|
||||
##
|
||||
## dashboards per provider, use provider name as key.
|
||||
##
|
||||
dashboards: {}
|
||||
# default:
|
||||
# some-dashboard:
|
||||
# json: |
|
||||
# $RAW_JSON
|
||||
# custom-dashboard:
|
||||
# file: dashboards/custom-dashboard.json
|
||||
# prometheus-stats:
|
||||
# gnetId: 2
|
||||
# revision: 2
|
||||
# datasource: Prometheus
|
||||
# local-dashboard:
|
||||
# url: https://example.com/repository/test.json
|
||||
# token: ''
|
||||
# local-dashboard-base64:
|
||||
# url: https://example.com/repository/test-b64.json
|
||||
# token: ''
|
||||
# b64content: true
|
||||
|
||||
## Reference to external ConfigMap per provider. Use provider name as key and ConfigMap name as value.
|
||||
## A provider dashboards must be defined either by external ConfigMaps or in values.yaml, not in both.
|
||||
## ConfigMap data example:
|
||||
##
|
||||
## data:
|
||||
## example-dashboard.json: |
|
||||
## RAW_JSON
|
||||
##
|
||||
dashboardsConfigMaps: {}
|
||||
# default: ""
|
||||
|
||||
## Grafana's primary configuration
|
||||
## NOTE: values in map will be converted to ini format
|
||||
## ref: http://docs.grafana.org/installation/configuration/
|
||||
##
|
||||
grafana.ini:
|
||||
paths:
|
||||
data: /var/lib/grafana/
|
||||
logs: /var/log/grafana
|
||||
plugins: /var/lib/grafana/plugins
|
||||
provisioning: /etc/grafana/provisioning
|
||||
analytics:
|
||||
check_for_updates: true
|
||||
log:
|
||||
mode: console
|
||||
grafana_net:
|
||||
url: https://grafana.net
|
||||
## grafana Authentication can be enabled with the following values on grafana.ini
|
||||
# server:
|
||||
# The full public facing url you use in browser, used for redirects and emails
|
||||
# root_url:
|
||||
# https://grafana.com/docs/grafana/latest/auth/github/#enable-github-in-grafana
|
||||
# auth.github:
|
||||
# enabled: false
|
||||
# allow_sign_up: false
|
||||
# scopes: user:email,read:org
|
||||
# auth_url: https://github.com/login/oauth/authorize
|
||||
# token_url: https://github.com/login/oauth/access_token
|
||||
# api_url: https://api.github.com/user
|
||||
# team_ids:
|
||||
# allowed_organizations:
|
||||
# client_id:
|
||||
# client_secret:
|
||||
## LDAP Authentication can be enabled with the following values on grafana.ini
|
||||
## NOTE: Grafana will fail to start if the value for ldap.toml is invalid
|
||||
# auth.ldap:
|
||||
# enabled: true
|
||||
# allow_sign_up: true
|
||||
# config_file: /etc/grafana/ldap.toml
|
||||
|
||||
## Grafana's LDAP configuration
|
||||
## Templated by the template in _helpers.tpl
|
||||
## NOTE: To enable the grafana.ini must be configured with auth.ldap.enabled
|
||||
## ref: http://docs.grafana.org/installation/configuration/#auth-ldap
|
||||
## ref: http://docs.grafana.org/installation/ldap/#configuration
|
||||
ldap:
|
||||
enabled: false
|
||||
# `existingSecret` is a reference to an existing secret containing the ldap configuration
|
||||
# for Grafana in a key `ldap-toml`.
|
||||
existingSecret: ""
|
||||
# `config` is the content of `ldap.toml` that will be stored in the created secret
|
||||
config: ""
|
||||
# config: |-
|
||||
# verbose_logging = true
|
||||
|
||||
# [[servers]]
|
||||
# host = "my-ldap-server"
|
||||
# port = 636
|
||||
# use_ssl = true
|
||||
# start_tls = false
|
||||
# ssl_skip_verify = false
|
||||
# bind_dn = "uid=%s,ou=users,dc=myorg,dc=com"
|
||||
|
||||
## Grafana's SMTP configuration
|
||||
## NOTE: To enable, grafana.ini must be configured with smtp.enabled
|
||||
## ref: http://docs.grafana.org/installation/configuration/#smtp
|
||||
smtp:
|
||||
# `existingSecret` is a reference to an existing secret containing the smtp configuration
|
||||
# for Grafana.
|
||||
existingSecret: ""
|
||||
userKey: "user"
|
||||
passwordKey: "password"
|
||||
|
||||
## Sidecars that collect the configmaps with specified label and stores the included files them into the respective folders
|
||||
## Requires at least Grafana 5 to work and can't be used together with parameters dashboardProviders, datasources and dashboards
|
||||
sidecar:
|
||||
image:
|
||||
repository: quay.io/kiwigrid/k8s-sidecar
|
||||
tag: 1.15.6
|
||||
sha: ""
|
||||
imagePullPolicy: IfNotPresent
|
||||
resources: {}
|
||||
# limits:
|
||||
# cpu: 100m
|
||||
# memory: 100Mi
|
||||
# requests:
|
||||
# cpu: 50m
|
||||
# memory: 50Mi
|
||||
securityContext: {}
|
||||
# skipTlsVerify Set to true to skip tls verification for kube api calls
|
||||
# skipTlsVerify: true
|
||||
enableUniqueFilenames: false
|
||||
readinessProbe: {}
|
||||
livenessProbe: {}
|
||||
dashboards:
|
||||
enabled: false
|
||||
SCProvider: true
|
||||
# label that the configmaps with dashboards are marked with
|
||||
label: grafana_dashboard
|
||||
# value of label that the configmaps with dashboards are set to
|
||||
labelValue: null
|
||||
# folder in the pod that should hold the collected dashboards (unless `defaultFolderName` is set)
|
||||
folder: /tmp/dashboards
|
||||
# The default folder name, it will create a subfolder under the `folder` and put dashboards in there instead
|
||||
defaultFolderName: null
|
||||
# Namespaces list. If specified, the sidecar will search for config-maps/secrets inside these namespaces.
|
||||
# Otherwise the namespace in which the sidecar is running will be used.
|
||||
# It's also possible to specify ALL to search in all namespaces.
|
||||
searchNamespace: null
|
||||
# Method to use to detect ConfigMap changes. With WATCH the sidecar will do a WATCH requests, with SLEEP it will list all ConfigMaps, then sleep for 60 seconds.
|
||||
watchMethod: WATCH
|
||||
# search in configmap, secret or both
|
||||
resource: both
|
||||
# If specified, the sidecar will look for annotation with this name to create folder and put graph here.
|
||||
# You can use this parameter together with `provider.foldersFromFilesStructure`to annotate configmaps and create folder structure.
|
||||
folderAnnotation: null
|
||||
# Absolute path to shell script to execute after a configmap got reloaded
|
||||
script: null
|
||||
# watchServerTimeout: request to the server, asking it to cleanly close the connection after that.
|
||||
# defaults to 60sec; much higher values like 3600 seconds (1h) are feasible for non-Azure K8S
|
||||
# watchServerTimeout: 3600
|
||||
#
|
||||
# watchClientTimeout: is a client-side timeout, configuring your local socket.
|
||||
# If you have a network outage dropping all packets with no RST/FIN,
|
||||
# this is how long your client waits before realizing & dropping the connection.
|
||||
# defaults to 66sec (sic!)
|
||||
# watchClientTimeout: 60
|
||||
#
|
||||
# provider configuration that lets grafana manage the dashboards
|
||||
provider:
|
||||
# name of the provider, should be unique
|
||||
name: sidecarProvider
|
||||
# orgid as configured in grafana
|
||||
orgid: 1
|
||||
# folder in which the dashboards should be imported in grafana
|
||||
folder: ''
|
||||
# type of the provider
|
||||
type: file
|
||||
# disableDelete to activate a import-only behaviour
|
||||
disableDelete: false
|
||||
# allow updating provisioned dashboards from the UI
|
||||
allowUiUpdates: false
|
||||
# allow Grafana to replicate dashboard structure from filesystem
|
||||
foldersFromFilesStructure: false
|
||||
# Additional dashboard sidecar volume mounts
|
||||
extraMounts: []
|
||||
# Sets the size limit of the dashboard sidecar emptyDir volume
|
||||
sizeLimit: {}
|
||||
datasources:
|
||||
enabled: false
|
||||
# label that the configmaps with datasources are marked with
|
||||
label: grafana_datasource
|
||||
# value of label that the configmaps with datasources are set to
|
||||
labelValue: null
|
||||
# If specified, the sidecar will search for datasource config-maps inside this namespace.
|
||||
# Otherwise the namespace in which the sidecar is running will be used.
|
||||
# It's also possible to specify ALL to search in all namespaces
|
||||
searchNamespace: null
|
||||
# Method to use to detect ConfigMap changes. With WATCH the sidecar will do a WATCH requests, with SLEEP it will list all ConfigMaps, then sleep for 60 seconds.
|
||||
watchMethod: WATCH
|
||||
# search in configmap, secret or both
|
||||
resource: both
|
||||
# Endpoint to send request to reload datasources
|
||||
reloadURL: "http://localhost:3000/api/admin/provisioning/datasources/reload"
|
||||
skipReload: false
|
||||
# Deploy the datasource sidecar as an initContainer in addition to a container.
|
||||
# This is needed if skipReload is true, to load any datasources defined at startup time.
|
||||
initDatasources: false
|
||||
# Sets the size limit of the datasource sidecar emptyDir volume
|
||||
sizeLimit: {}
|
||||
plugins:
|
||||
enabled: false
|
||||
# label that the configmaps with plugins are marked with
|
||||
label: grafana_plugin
|
||||
# value of label that the configmaps with plugins are set to
|
||||
labelValue: null
|
||||
# If specified, the sidecar will search for plugin config-maps inside this namespace.
|
||||
# Otherwise the namespace in which the sidecar is running will be used.
|
||||
# It's also possible to specify ALL to search in all namespaces
|
||||
searchNamespace: null
|
||||
# Method to use to detect ConfigMap changes. With WATCH the sidecar will do a WATCH requests, with SLEEP it will list all ConfigMaps, then sleep for 60 seconds.
|
||||
watchMethod: WATCH
|
||||
# search in configmap, secret or both
|
||||
resource: both
|
||||
# Endpoint to send request to reload plugins
|
||||
reloadURL: "http://localhost:3000/api/admin/provisioning/plugins/reload"
|
||||
skipReload: false
|
||||
# Deploy the datasource sidecar as an initContainer in addition to a container.
|
||||
# This is needed if skipReload is true, to load any plugins defined at startup time.
|
||||
initPlugins: false
|
||||
# Sets the size limit of the plugin sidecar emptyDir volume
|
||||
sizeLimit: {}
|
||||
notifiers:
|
||||
enabled: false
|
||||
# label that the configmaps with notifiers are marked with
|
||||
label: grafana_notifier
|
||||
# If specified, the sidecar will search for notifier config-maps inside this namespace.
|
||||
# Otherwise the namespace in which the sidecar is running will be used.
|
||||
# It's also possible to specify ALL to search in all namespaces
|
||||
searchNamespace: null
|
||||
# search in configmap, secret or both
|
||||
resource: both
|
||||
# Sets the size limit of the notifier sidecar emptyDir volume
|
||||
sizeLimit: {}
|
||||
|
||||
## Override the deployment namespace
|
||||
##
|
||||
namespaceOverride: ""
|
||||
|
||||
## Number of old ReplicaSets to retain
|
||||
##
|
||||
revisionHistoryLimit: 10
|
||||
|
||||
## Add a seperate remote image renderer deployment/service
|
||||
imageRenderer:
|
||||
# Enable the image-renderer deployment & service
|
||||
enabled: false
|
||||
replicas: 1
|
||||
image:
|
||||
# image-renderer Image repository
|
||||
repository: grafana/grafana-image-renderer
|
||||
# image-renderer Image tag
|
||||
tag: latest
|
||||
# image-renderer Image sha (optional)
|
||||
sha: ""
|
||||
# image-renderer ImagePullPolicy
|
||||
pullPolicy: Always
|
||||
# extra environment variables
|
||||
env:
|
||||
HTTP_HOST: "0.0.0.0"
|
||||
# RENDERING_ARGS: --no-sandbox,--disable-gpu,--window-size=1280x758
|
||||
# RENDERING_MODE: clustered
|
||||
# IGNORE_HTTPS_ERRORS: true
|
||||
# image-renderer deployment serviceAccount
|
||||
serviceAccountName: ""
|
||||
# image-renderer deployment securityContext
|
||||
securityContext: {}
|
||||
# image-renderer deployment Host Aliases
|
||||
hostAliases: []
|
||||
# image-renderer deployment priority class
|
||||
priorityClassName: ''
|
||||
service:
|
||||
# Enable the image-renderer service
|
||||
enabled: true
|
||||
# image-renderer service port name
|
||||
portName: 'http'
|
||||
# image-renderer service port used by both service and deployment
|
||||
port: 8081
|
||||
targetPort: 8081
|
||||
# If https is enabled in Grafana, this needs to be set as 'https' to correctly configure the callback used in Grafana
|
||||
grafanaProtocol: http
|
||||
# In case a sub_path is used this needs to be added to the image renderer callback
|
||||
grafanaSubPath: ""
|
||||
# name of the image-renderer port on the pod
|
||||
podPortName: http
|
||||
# number of image-renderer replica sets to keep
|
||||
revisionHistoryLimit: 10
|
||||
networkPolicy:
|
||||
# Enable a NetworkPolicy to limit inbound traffic to only the created grafana pods
|
||||
limitIngress: true
|
||||
# Enable a NetworkPolicy to limit outbound traffic to only the created grafana pods
|
||||
limitEgress: false
|
||||
resources: {}
|
||||
# limits:
|
||||
# cpu: 100m
|
||||
# memory: 100Mi
|
||||
# requests:
|
||||
# cpu: 50m
|
||||
# memory: 50Mi
|
||||
## Node labels for pod assignment
|
||||
## ref: https://kubernetes.io/docs/user-guide/node-selection/
|
||||
#
|
||||
nodeSelector: {}
|
||||
|
||||
## Tolerations for pod assignment
|
||||
## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
|
||||
##
|
||||
tolerations: []
|
||||
|
||||
## Affinity for pod assignment (evaluated as template)
|
||||
## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
|
||||
##
|
||||
affinity: {}
|
||||
|
||||
# Create a dynamic manifests via values:
|
||||
extraObjects: []
|
||||
# - apiVersion: "kubernetes-client.io/v1"
|
||||
# kind: ExternalSecret
|
||||
# metadata:
|
||||
# name: grafana-secrets
|
||||
# spec:
|
||||
# backendType: gcpSecretsManager
|
||||
# data:
|
||||
# - key: grafana-admin-password
|
||||
# name: adminPassword
|
||||
|
157
apps/monitoring/influxdb-telegraf.values.yaml
Normal file
157
apps/monitoring/influxdb-telegraf.values.yaml
Normal file
@ -0,0 +1,157 @@
|
||||
## Default values.yaml for Telegraf
|
||||
## This is a YAML-formatted file.
|
||||
## ref: https://hub.docker.com/r/library/telegraf/tags/
|
||||
|
||||
image:
|
||||
repo: "telegraf"
|
||||
tag: "1.22"
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
## Configure resource requests and limits
|
||||
## ref: http://kubernetes.io/docs/user-guide/compute-resources/
|
||||
resources:
|
||||
requests:
|
||||
memory: 256Mi
|
||||
cpu: 0.1
|
||||
limits:
|
||||
memory: 1Gi
|
||||
cpu: 1
|
||||
|
||||
## Pod annotations
|
||||
podAnnotations: {}
|
||||
|
||||
## Pod labels
|
||||
podLabels: {}
|
||||
|
||||
## Configure args passed to Telegraf containers
|
||||
args: []
|
||||
|
||||
## The name of a secret in the same kubernetes namespace which contains values to
|
||||
## be added to the environment (must be manually created)
|
||||
## This can be useful for auth tokens, etc.
|
||||
# envFromSecret: "telegraf-tokens"
|
||||
|
||||
## Environment
|
||||
env:
|
||||
# This pulls HOSTNAME from the node, not the pod.
|
||||
- name: HOSTNAME
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: spec.nodeName
|
||||
# In test clusters where hostnames are resolved in /etc/hosts on each node,
|
||||
# the HOSTNAME is not resolvable from inside containers
|
||||
# So inject the host IP as well
|
||||
- name: HOSTIP
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: status.hostIP
|
||||
# Mount the host filesystem and set the appropriate env variables.
|
||||
# ref: https://github.com/influxdata/telegraf/blob/master/docs/FAQ.md
|
||||
# HOST_PROC is required by the cpu, disk, diskio, kernel and processes input plugins
|
||||
- name: "HOST_PROC"
|
||||
value: "/hostfs/proc"
|
||||
# HOST_SYS is required by the diskio plugin
|
||||
- name: "HOST_SYS"
|
||||
value: "/hostfs/sys"
|
||||
- name: "HOST_MOUNT_PREFIX"
|
||||
value: "/hostfs"
|
||||
|
||||
## Add custom volumes and mounts
|
||||
# volumes:
|
||||
# - name: telegraf-output-influxdb2
|
||||
# configMap:
|
||||
# name: "telegraf-output-influxdb2"
|
||||
# mountPoints:
|
||||
# - name: telegraf-output-influxdb2
|
||||
# mountPath: /etc/telegraf/conf.d
|
||||
# subPath: influxdb2.conf
|
||||
|
||||
## Tolerations for pod assignment
|
||||
## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
|
||||
##
|
||||
tolerations: []
|
||||
|
||||
## If the DaemonSet should run on the host's network namespace
|
||||
## hostNetwork: true
|
||||
|
||||
## If using hostNetwork=true, set dnsPolicy to ClusterFirstWithHostNet
|
||||
## ref: https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#
|
||||
## dnsPolicy: ClusterFirstWithHostNet
|
||||
|
||||
## If using dnsPolicy=None, set dnsConfig
|
||||
## ref: https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-dns-config
|
||||
## dnsConfig:
|
||||
## nameservers:
|
||||
## - 1.2.3.4
|
||||
## searches:
|
||||
## - ns1.svc.cluster-domain.example
|
||||
## - my.dns.search.suffix
|
||||
## options:
|
||||
## - name: ndots
|
||||
## value: "2"
|
||||
## - name: edns0
|
||||
|
||||
rbac:
|
||||
# Specifies whether RBAC resources should be created
|
||||
create: true
|
||||
|
||||
serviceAccount:
|
||||
# Specifies whether a ServiceAccount should be created
|
||||
create: true
|
||||
# The name of the ServiceAccount to use.
|
||||
# If not set and create is true, a name is generated using the fullname template
|
||||
# name:
|
||||
# Annotations for the ServiceAccount
|
||||
annotations: {}
|
||||
|
||||
## Specify priorityClassName
|
||||
## Ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/
|
||||
# priorityClassName: system-node-critical
|
||||
|
||||
# Specify the pod's SecurityContext, including the OS user and group to run the pod
|
||||
podSecurityContext: {}
|
||||
|
||||
override_config:
|
||||
toml: ~
|
||||
# Provide a literal TOML config
|
||||
# toml: |+
|
||||
# [global_tags]
|
||||
# foo = "bar"
|
||||
# [agent]
|
||||
# interval = "10s"
|
||||
# [[inputs.mem]]
|
||||
# [[outputs.influxdb_v2]]
|
||||
# urls = ["https://us-west-2-1.aws.cloud2.influxdata.com"]
|
||||
# bucket = "data"
|
||||
# organization = "OurCompany"
|
||||
# token = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||
|
||||
## Exposed telegraf configuration
|
||||
## ref: https://docs.influxdata.com/telegraf/v1.13/administration/configuration/
|
||||
config:
|
||||
# global_tags:
|
||||
# cluster: "mycluster"
|
||||
agent:
|
||||
interval: "10s"
|
||||
round_interval: true
|
||||
metric_batch_size: 1000
|
||||
metric_buffer_limit: 10000
|
||||
collection_jitter: "0s"
|
||||
flush_interval: "10s"
|
||||
flush_jitter: "0s"
|
||||
precision: ""
|
||||
debug: false
|
||||
quiet: false
|
||||
logfile: ""
|
||||
hostname: "$HOSTNAME"
|
||||
omit_hostname: false
|
||||
outputs:
|
||||
- influxdb_v2:
|
||||
urls:
|
||||
- "http://influxdb-influxdb2.monitoring:80"
|
||||
token: N_jNm1hZTfyhJneTJj2G357mQ7EJdNzdvebjSJX6JkbyaXNup_IAqeYowblMgV8EjLypNvauTl27ewJvI_rbqQ==
|
||||
organization: "influxdata"
|
||||
bucket: "kluster"
|
||||
monitor_self: false
|
||||
docker_endpoint: "unix:///run/k3s/containerd/containerd.sock"
|
||||
|
35
apps/monitoring/influxdb.pvc.yaml
Normal file
35
apps/monitoring/influxdb.pvc.yaml
Normal file
@ -0,0 +1,35 @@
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: influxdb-nfs
|
||||
labels:
|
||||
directory: influxdb
|
||||
spec:
|
||||
storageClassName: slow
|
||||
capacity:
|
||||
storage: "10Gi"
|
||||
volumeMode: Filesystem
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
nfs:
|
||||
path: /export/kluster/influxdb
|
||||
server: 192.168.1.157
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: influxdb-nfs
|
||||
spec:
|
||||
storageClassName: slow
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: "10Gi"
|
||||
selector:
|
||||
matchLabels:
|
||||
directory: influxdb
|
||||
|
||||
|
||||
|
195
apps/monitoring/influxdb.values.yaml
Normal file
195
apps/monitoring/influxdb.values.yaml
Normal file
@ -0,0 +1,195 @@
|
||||
image:
|
||||
repository: influxdb
|
||||
tag: 2.3.0-alpine
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
## Annotations to be added to InfluxDB pods
|
||||
##
|
||||
podAnnotations: {}
|
||||
|
||||
## Labels to be added to InfluxDB pods
|
||||
##
|
||||
podLabels: {}
|
||||
|
||||
nameOverride: ""
|
||||
fullnameOverride: ""
|
||||
|
||||
## Configure resource requests and limits
|
||||
## ref: http://kubernetes.io/docs/user-guide/compute-resources/
|
||||
##
|
||||
resources: {}
|
||||
# We usually recommend not to specify default resources and to leave this as a conscious
|
||||
# choice for the user. This also increases chances charts run on environments with little
|
||||
# resources, such as Minikube. If you do want to specify resources, uncomment the following
|
||||
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
|
||||
# limits:
|
||||
# cpu: 100m
|
||||
# memory: 128Mi
|
||||
# requests:
|
||||
# cpu: 100m
|
||||
# memory: 128Mi
|
||||
|
||||
## Node labels for pod assignment
|
||||
## ref: https://kubernetes.io/docs/user-guide/node-selection/
|
||||
##
|
||||
nodeSelector: {}
|
||||
|
||||
## Tolerations for pod assignment
|
||||
## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
|
||||
##
|
||||
tolerations: []
|
||||
|
||||
## Affinity for pod assignment
|
||||
## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
|
||||
##
|
||||
affinity: {}
|
||||
|
||||
securityContext: {}
|
||||
|
||||
## Customize liveness, readiness and startup probes
|
||||
## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
|
||||
##
|
||||
livenessProbe: {}
|
||||
# path: "/health"
|
||||
# scheme: "HTTP"
|
||||
# initialDelaySeconds: 0
|
||||
# periodSeconds: 10
|
||||
# timeoutSeconds: 1
|
||||
# failureThreshold: 3
|
||||
|
||||
readinessProbe: {}
|
||||
# path: "/health"
|
||||
# scheme: "HTTP"
|
||||
# initialDelaySeconds: 0
|
||||
# periodSeconds: 10
|
||||
# timeoutSeconds: 1
|
||||
# successThreshold: 1
|
||||
# failureThreshold: 3
|
||||
|
||||
startupProbe:
|
||||
enabled: false
|
||||
# path: "/health"
|
||||
# scheme: "HTTP"
|
||||
# initialDelaySeconds: 30
|
||||
# periodSeconds: 5
|
||||
# timeoutSeconds: 1
|
||||
# failureThreshold: 6
|
||||
|
||||
## Extra environment variables to configure influxdb
|
||||
## e.g.
|
||||
# env:
|
||||
# - name: FOO
|
||||
# value: BAR
|
||||
# - name: BAZ
|
||||
# valueFrom:
|
||||
# secretKeyRef:
|
||||
# name: my-secret
|
||||
# key: my-key
|
||||
env: {}
|
||||
|
||||
## Create default user through docker entrypoint
|
||||
## Defaults indicated below
|
||||
##
|
||||
adminUser:
|
||||
organization: "influxdata"
|
||||
bucket: "default"
|
||||
user: "admin"
|
||||
retention_policy: "0s"
|
||||
## Leave empty to generate a random password and token.
|
||||
## Or fill any of these values to use fixed values.
|
||||
password: ""
|
||||
token: ""
|
||||
|
||||
## The password and token are obtained from an existing secret. The expected
|
||||
## keys are `admin-password` and `admin-token`.
|
||||
## If set, the password and token values above are ignored.
|
||||
# existingSecret: influxdb-auth
|
||||
|
||||
## Persist data to a persistent volume
|
||||
##
|
||||
persistence:
|
||||
enabled: true
|
||||
## If true will use an existing PVC instead of creating one
|
||||
useExisting: true
|
||||
## Name of existing PVC to be used in the influx deployment
|
||||
name: influxdb-nfs
|
||||
## influxdb data Persistent Volume Storage Class
|
||||
## If defined, storageClassName: <storageClass>
|
||||
## If set to "-", storageClassName: "", which disables dynamic provisioning
|
||||
## If undefined (the default) or set to null, no storageClassName spec is
|
||||
## set, choosing the default provisioner. (gp2 on AWS, standard on
|
||||
## GKE, AWS & OpenStack)
|
||||
##
|
||||
# storageClass: "-"
|
||||
accessMode: ReadWriteOnce
|
||||
size: 10Gi
|
||||
mountPath: /var/lib/influxdb2
|
||||
subPath: ""
|
||||
|
||||
## Add custom volume and volumeMounts
|
||||
##
|
||||
# volumes:
|
||||
# - name: influxdb2-templates
|
||||
# hostPath:
|
||||
# path: /data/influxdb2-templates
|
||||
# type: Directory
|
||||
# mountPoints:
|
||||
# - name: influxdb2-templates
|
||||
# mountPath: /influxdb2-templates
|
||||
# readOnly: true
|
||||
|
||||
## Allow executing custom init scripts
|
||||
## If the container finds any files with the .sh extension inside of the
|
||||
## /docker-entrypoint-initdb.d folder, it will execute them.
|
||||
## When multiple scripts are present, they will be executed in lexical sort order by name.
|
||||
## For more details see Custom Initialization Scripts in https://hub.docker.com/_/influxdb
|
||||
initScripts:
|
||||
enabled: false
|
||||
scripts:
|
||||
init.sh: |+
|
||||
#!/bin/bash
|
||||
influx apply --force yes -u https://raw.githubusercontent.com/influxdata/community-templates/master/influxdb2_operational_monitoring/influxdb2_operational_monitoring.yml
|
||||
|
||||
## Specify a service type
|
||||
## ref: http://kubernetes.io/docs/user-guide/services/
|
||||
##
|
||||
service:
|
||||
type: LoadBalancer
|
||||
loadBalancerIP: 192.168.3.4
|
||||
port: 80
|
||||
targetPort: 8086
|
||||
annotations: {}
|
||||
labels: {}
|
||||
portName: http
|
||||
|
||||
serviceAccount:
|
||||
# Specifies whether a ServiceAccount should be created
|
||||
create: true
|
||||
# The name of the ServiceAccount to use.
|
||||
# If not set and create is true, a name is generated using the fullname template
|
||||
name:
|
||||
# Annotations for the ServiceAccount
|
||||
annotations: {}
|
||||
|
||||
ingress:
|
||||
enabled: false
|
||||
# For Kubernetes >= 1.18 you should specify the ingress-controller via the field ingressClassName
|
||||
# See https://kubernetes.io/blog/2020/04/02/improvements-to-the-ingress-api-in-kubernetes-1.18/#specifying-the-class-of-an-ingress
|
||||
# className: nginx
|
||||
tls: false
|
||||
# secretName: my-tls-cert # only needed if tls above is true or default certificate is not configured for Nginx
|
||||
hostname: influxdb.foobar.com
|
||||
annotations: {}
|
||||
# kubernetes.io/ingress.class: "nginx"
|
||||
# kubernetes.io/tls-acme: "true"
|
||||
path: /
|
||||
|
||||
## Pod disruption budget configuration
|
||||
##
|
||||
pdb:
|
||||
## Specifies whether a Pod disruption budget should be created
|
||||
##
|
||||
create: true
|
||||
minAvailable: 1
|
||||
# maxUnavailable: 1
|
||||
|
167
apps/monitoring/telegraf-adguard.values.yaml
Normal file
167
apps/monitoring/telegraf-adguard.values.yaml
Normal file
@ -0,0 +1,167 @@
|
||||
## Default values.yaml for Telegraf
|
||||
## This is a YAML-formatted file.
|
||||
## ref: https://hub.docker.com/r/library/telegraf/tags/
|
||||
|
||||
replicaCount: 1
|
||||
image:
|
||||
repo: "telegraf"
|
||||
tag: "1.25"
|
||||
pullPolicy: IfNotPresent
|
||||
podAnnotations: {}
|
||||
podLabels: {}
|
||||
imagePullSecrets: []
|
||||
## Configure args passed to Telegraf containers
|
||||
args: []
|
||||
# The name of a secret in the same kubernetes namespace which contains values to
|
||||
# be added to the environment (must be manually created)
|
||||
# This can be useful for auth tokens, etc.
|
||||
|
||||
# envFromSecret: "telegraf-tokens"
|
||||
env:
|
||||
- name: HOSTNAME
|
||||
value: "telegraf-polling-service"
|
||||
# An older "volumeMounts" key was previously added which will likely
|
||||
# NOT WORK as you expect. Please use this newer configuration.
|
||||
|
||||
# volumes:
|
||||
# - name: telegraf-output-influxdb2
|
||||
# configMap:
|
||||
# name: "telegraf-output-influxdb2"
|
||||
# mountPoints:
|
||||
# - name: telegraf-output-influxdb2
|
||||
# mountPath: /etc/telegraf/conf.d
|
||||
# subPath: influxdb2.conf
|
||||
|
||||
## Configure resource requests and limits
|
||||
## ref: http://kubernetes.io/docs/user-guide/compute-resources/
|
||||
resources: {}
|
||||
# requests:
|
||||
# memory: 128Mi
|
||||
# cpu: 100m
|
||||
# limits:
|
||||
# memory: 128Mi
|
||||
# cpu: 100m
|
||||
|
||||
## Node labels for pod assignment
|
||||
## ref: https://kubernetes.io/docs/user-guide/node-selection/
|
||||
nodeSelector: {}
|
||||
## Affinity for pod assignment
|
||||
## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
|
||||
##
|
||||
affinity: {}
|
||||
## Tolerations for pod assignment
|
||||
## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
|
||||
##
|
||||
tolerations: []
|
||||
# - key: "key"
|
||||
# operator: "Equal|Exists"
|
||||
# value: "value"
|
||||
# effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
|
||||
|
||||
service:
|
||||
enabled: false
|
||||
type: ClusterIP
|
||||
annotations: {}
|
||||
rbac:
|
||||
# Specifies whether RBAC resources should be created
|
||||
create: true
|
||||
# Create only for the release namespace or cluster wide (Role vs ClusterRole)
|
||||
clusterWide: false
|
||||
# Rules for the created rule
|
||||
rules: []
|
||||
# When using the prometheus input to scrape all pods you need extra rules set to the ClusterRole to be
|
||||
# able to scan the pods for scraping labels. The following rules have been taken from:
|
||||
# https://github.com/helm/charts/blob/master/stable/prometheus/templates/server-clusterrole.yaml#L8-L46
|
||||
# - apiGroups:
|
||||
# - ""
|
||||
# resources:
|
||||
# - nodes
|
||||
# - nodes/proxy
|
||||
# - nodes/metrics
|
||||
# - services
|
||||
# - endpoints
|
||||
# - pods
|
||||
# - ingresses
|
||||
# - configmaps
|
||||
# verbs:
|
||||
# - get
|
||||
# - list
|
||||
# - watch
|
||||
# - apiGroups:
|
||||
# - "extensions"
|
||||
# resources:
|
||||
# - ingresses/status
|
||||
# - ingresses
|
||||
# verbs:
|
||||
# - get
|
||||
# - list
|
||||
# - watch
|
||||
# - nonResourceURLs:
|
||||
# - "/metrics"
|
||||
# verbs:
|
||||
# - get
|
||||
|
||||
serviceAccount:
|
||||
# Specifies whether a ServiceAccount should be created
|
||||
create: false
|
||||
## Exposed telegraf configuration
|
||||
## For full list of possible values see `/docs/all-config-values.yaml` and `/docs/all-config-values.toml`
|
||||
## ref: https://docs.influxdata.com/telegraf/v1.1/administration/configuration/
|
||||
config:
|
||||
agent:
|
||||
interval: "2m"
|
||||
round_interval: true
|
||||
metric_batch_size: 1000
|
||||
metric_buffer_limit: 10000
|
||||
collection_jitter: "0s"
|
||||
flush_interval: "10s"
|
||||
flush_jitter: "0s"
|
||||
precision: ""
|
||||
debug: false
|
||||
quiet: false
|
||||
logfile: ""
|
||||
hostname: "$HOSTNAME"
|
||||
omit_hostname: false
|
||||
processors:
|
||||
- enum:
|
||||
mapping:
|
||||
field: "status"
|
||||
dest: "status_code"
|
||||
value_mappings:
|
||||
healthy: 1
|
||||
problem: 2
|
||||
critical: 3
|
||||
outputs:
|
||||
- influxdb_v2:
|
||||
urls:
|
||||
- "http://influxdb-influxdb2.monitoring:80"
|
||||
token: We64mk4L4bqYCL77x3fAUSYfOse9Kktyf2eBLyrryG9c3-y8PQFiKPIh9EvSWuq78QSQz6hUcsm7XSFR2Zj1MA==
|
||||
organization: "influxdata"
|
||||
bucket: "homeassistant"
|
||||
inputs:
|
||||
- http:
|
||||
urls:
|
||||
- "http://adguard-home.adguard:3000/control/stats"
|
||||
data_format: "json"
|
||||
metrics:
|
||||
health:
|
||||
enabled: false
|
||||
service_address: "http://:8888"
|
||||
threshold: 5000.0
|
||||
internal:
|
||||
enabled: true
|
||||
collect_memstats: false
|
||||
# Lifecycle hooks
|
||||
# hooks:
|
||||
# postStart: ["/bin/sh", "-c", "echo Telegraf started"]
|
||||
# preStop: ["/bin/sh", "-c", "sleep 60"]
|
||||
|
||||
## Pod disruption budget configuration
|
||||
##
|
||||
pdb:
|
||||
## Specifies whether a Pod disruption budget should be created
|
||||
##
|
||||
create: true
|
||||
minAvailable: 1
|
||||
# maxUnavailable: 1
|
||||
|
110
apps/monitoring/telegraf-speedtest.values.yaml
Normal file
110
apps/monitoring/telegraf-speedtest.values.yaml
Normal file
@ -0,0 +1,110 @@
|
||||
## Default values.yaml for Telegraf
|
||||
## This is a YAML-formatted file.
|
||||
## ref: https://hub.docker.com/r/library/telegraf/tags/
|
||||
|
||||
replicaCount: 1
|
||||
image:
|
||||
repo: "telegraf"
|
||||
tag: "1.25"
|
||||
pullPolicy: IfNotPresent
|
||||
podAnnotations: {}
|
||||
podLabels: {}
|
||||
imagePullSecrets: []
|
||||
## Configure args passed to Telegraf containers
|
||||
args: []
|
||||
# The name of a secret in the same kubernetes namespace which contains values to
|
||||
# be added to the environment (must be manually created)
|
||||
# This can be useful for auth tokens, etc.
|
||||
|
||||
# envFromSecret: "telegraf-tokens"
|
||||
env:
|
||||
- name: HOSTNAME
|
||||
value: "telegraf-speedtest"
|
||||
|
||||
## Configure resource requests and limits
|
||||
## ref: http://kubernetes.io/docs/user-guide/compute-resources/
|
||||
resources: {}
|
||||
# requests:
|
||||
# memory: 128Mi
|
||||
# cpu: 100m
|
||||
# limits:
|
||||
# memory: 128Mi
|
||||
# cpu: 100m
|
||||
|
||||
## Node labels for pod assignment
|
||||
## ref: https://kubernetes.io/docs/user-guide/node-selection/
|
||||
nodeSelector: {}
|
||||
## Affinity for pod assignment
|
||||
## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
|
||||
##
|
||||
affinity: {}
|
||||
## Tolerations for pod assignment
|
||||
## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
|
||||
##
|
||||
tolerations: []
|
||||
# - key: "key"
|
||||
# operator: "Equal|Exists"
|
||||
# value: "value"
|
||||
# effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
|
||||
service:
|
||||
enabled: false
|
||||
rbac:
|
||||
# Specifies whether RBAC resources should be created
|
||||
create: false
|
||||
|
||||
serviceAccount:
|
||||
# Specifies whether a ServiceAccount should be created
|
||||
create: false
|
||||
|
||||
|
||||
## Exposed telegraf configuration
|
||||
## For full list of possible values see `/docs/all-config-values.yaml` and `/docs/all-config-values.toml`
|
||||
## ref: https://docs.influxdata.com/telegraf/v1.1/administration/configuration/
|
||||
config:
|
||||
agent:
|
||||
interval: "2h"
|
||||
round_interval: true
|
||||
metric_batch_size: 1000
|
||||
metric_buffer_limit: 10000
|
||||
collection_jitter: "0s"
|
||||
flush_interval: "10s"
|
||||
flush_jitter: "0s"
|
||||
precision: ""
|
||||
debug: false
|
||||
quiet: false
|
||||
logfile: ""
|
||||
hostname: "$HOSTNAME"
|
||||
omit_hostname: false
|
||||
processors:
|
||||
- enum:
|
||||
mapping:
|
||||
field: "status"
|
||||
dest: "status_code"
|
||||
value_mappings:
|
||||
healthy: 1
|
||||
problem: 2
|
||||
critical: 3
|
||||
outputs:
|
||||
- influxdb_v2:
|
||||
urls:
|
||||
- "http://influxdb-influxdb2.monitoring:80"
|
||||
token: We64mk4L4bqYCL77x3fAUSYfOse9Kktyf2eBLyrryG9c3-y8PQFiKPIh9EvSWuq78QSQz6hUcsm7XSFR2Zj1MA==
|
||||
organization: "influxdata"
|
||||
bucket: "homeassistant"
|
||||
inputs:
|
||||
- internet_speed:
|
||||
enable_file_download: false
|
||||
|
||||
# Lifecycle hooks
|
||||
# hooks:
|
||||
# postStart: ["/bin/sh", "-c", "echo Telegraf started"]
|
||||
# preStop: ["/bin/sh", "-c", "sleep 60"]
|
||||
|
||||
## Pod disruption budget configuration
|
||||
##
|
||||
pdb:
|
||||
## Specifies whether a Pod disruption budget should be created
|
||||
##
|
||||
create: true
|
||||
minAvailable: 1
|
||||
# maxUnavailable: 1
|
17
apps/nextcloud/ingress.yaml
Normal file
17
apps/nextcloud/ingress.yaml
Normal file
@ -0,0 +1,17 @@
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
namespace: nextcloud
|
||||
name: nextcloud-ingressroute
|
||||
|
||||
spec:
|
||||
entryPoints:
|
||||
- websecure
|
||||
routes:
|
||||
- match: Host(`nextcloud.kluster.moll.re`)
|
||||
kind: Rule
|
||||
services:
|
||||
- name: nextcloud
|
||||
port: 8080
|
||||
tls:
|
||||
certResolver: default-tls
|
34
apps/nextcloud/pvc.yaml
Normal file
34
apps/nextcloud/pvc.yaml
Normal file
@ -0,0 +1,34 @@
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
namespace: nextcloud
|
||||
name: nextcloud-nfs
|
||||
labels:
|
||||
directory: nextcloud
|
||||
spec:
|
||||
storageClassName: fast
|
||||
capacity:
|
||||
storage: "150Gi"
|
||||
volumeMode: Filesystem
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
nfs:
|
||||
path: /kluster/nextcloud
|
||||
server: 192.168.1.157
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
namespace: nextcloud
|
||||
name: nextcloud-nfs
|
||||
spec:
|
||||
storageClassName: fast
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: "150Gi"
|
||||
selector:
|
||||
matchLabels:
|
||||
directory: nextcloud
|
294
apps/nextcloud/values.yaml
Normal file
294
apps/nextcloud/values.yaml
Normal file
@ -0,0 +1,294 @@
|
||||
## Official nextcloud image version
|
||||
## ref: https://hub.docker.com/r/library/nextcloud/tags/
|
||||
##
|
||||
image:
|
||||
repository: nextcloud
|
||||
tag: "27" # needs to be a string because of the template
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
nameOverride: ""
|
||||
fullnameOverride: ""
|
||||
podAnnotations: {}
|
||||
deploymentAnnotations: {}
|
||||
|
||||
# Number of replicas to be deployed
|
||||
replicaCount: 1
|
||||
|
||||
## Allowing use of ingress controllers
|
||||
## ref: https://kubernetes.io/docs/concepts/services-networking/ingress/
|
||||
##
|
||||
ingress:
|
||||
enabled: false
|
||||
|
||||
|
||||
# Allow configuration of lifecycle hooks
|
||||
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/attach-handler-lifecycle-event/
|
||||
lifecycle: {}
|
||||
# postStartCommand: []
|
||||
# preStopCommand: []
|
||||
|
||||
nextcloud:
|
||||
host: nextcloud.kluster.moll.re
|
||||
username: admin
|
||||
password: changeme
|
||||
## Use an existing secret
|
||||
existingSecret:
|
||||
enabled: false
|
||||
update: 0
|
||||
# If web server is not binding default port, you can define it
|
||||
# containerPort: 8080
|
||||
datadir: /var/www/html/data
|
||||
persistence:
|
||||
subPath:
|
||||
mail:
|
||||
enabled: false
|
||||
# PHP Configuration files
|
||||
# Will be injected in /usr/local/etc/php/conf.d for apache image and in /usr/local/etc/php-fpm.d when nginx.enabled: true
|
||||
phpConfigs: {}
|
||||
# Default config files
|
||||
# IMPORTANT: Will be used only if you put extra configs, otherwise default will come from nextcloud itself
|
||||
# Default confgurations can be found here: https://github.com/nextcloud/docker/tree/master/16.0/apache/config
|
||||
defaultConfigs:
|
||||
# To protect /var/www/html/config
|
||||
.htaccess: true
|
||||
# Redis default configuration
|
||||
redis.config.php: true
|
||||
# Apache configuration for rewrite urls
|
||||
apache-pretty-urls.config.php: true
|
||||
# Define APCu as local cache
|
||||
apcu.config.php: true
|
||||
# Apps directory configs
|
||||
apps.config.php: true
|
||||
# Used for auto configure database
|
||||
autoconfig.php: true
|
||||
# SMTP default configuration
|
||||
smtp.config.php: true
|
||||
# Extra config files created in /var/www/html/config/
|
||||
# ref: https://docs.nextcloud.com/server/15/admin_manual/configuration_server/config_sample_php_parameters.html#multiple-config-php-file
|
||||
configs: {}
|
||||
|
||||
# For example, to use S3 as primary storage
|
||||
# ref: https://docs.nextcloud.com/server/13/admin_manual/configuration_files/primary_storage.html#simple-storage-service-s3
|
||||
#
|
||||
# configs:
|
||||
# s3.config.php: |-
|
||||
# <?php
|
||||
# $CONFIG = array (
|
||||
# 'objectstore' => array(
|
||||
# 'class' => '\\OC\\Files\\ObjectStore\\S3',
|
||||
# 'arguments' => array(
|
||||
# 'bucket' => 'my-bucket',
|
||||
# 'autocreate' => true,
|
||||
# 'key' => 'xxx',
|
||||
# 'secret' => 'xxx',
|
||||
# 'region' => 'us-east-1',
|
||||
# 'use_ssl' => true
|
||||
# )
|
||||
# )
|
||||
# );
|
||||
|
||||
## Strategy used to replace old pods
|
||||
## IMPORTANT: use with care, it is suggested to leave as that for upgrade purposes
|
||||
## ref: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy
|
||||
strategy:
|
||||
type: Recreate
|
||||
# type: RollingUpdate
|
||||
# rollingUpdate:
|
||||
# maxSurge: 1
|
||||
# maxUnavailable: 0
|
||||
|
||||
##
|
||||
## Extra environment variables
|
||||
extraEnv:
|
||||
# - name: SOME_SECRET_ENV
|
||||
# valueFrom:
|
||||
# secretKeyRef:
|
||||
# name: nextcloud
|
||||
# key: secret_key
|
||||
|
||||
# Extra mounts for the pods. Example shown is for connecting a legacy NFS volume
|
||||
# to NextCloud pods in Kubernetes. This can then be configured in External Storage
|
||||
extraVolumes:
|
||||
# - name: nfs
|
||||
# nfs:
|
||||
# server: "10.0.0.1"
|
||||
# path: "/nextcloud_data"
|
||||
# readOnly: false
|
||||
extraVolumeMounts:
|
||||
# - name: nfs
|
||||
# mountPath: "/legacy_data"
|
||||
|
||||
# Extra secuurityContext parameters. For example you may need to define runAsNonRoot directive
|
||||
# extraSecurityContext:
|
||||
# runAsUser: "33"
|
||||
# runAsGroup: "33"
|
||||
# runAsNonRoot: true
|
||||
# readOnlyRootFilesystem: true
|
||||
|
||||
nginx:
|
||||
## You need to set an fpm version of the image for nextcloud if you want to use nginx!
|
||||
enabled: false
|
||||
resources: {}
|
||||
|
||||
internalDatabase:
|
||||
enabled: true
|
||||
name: nextcloud
|
||||
|
||||
##
|
||||
## External database configuration
|
||||
##
|
||||
externalDatabase:
|
||||
enabled: true
|
||||
|
||||
## Supported database engines: mysql or postgresql
|
||||
type: postgresql
|
||||
|
||||
## Database host
|
||||
host: postgres-postgresql.postgres
|
||||
|
||||
## Database user
|
||||
user: nextcloud
|
||||
|
||||
## Database password
|
||||
password: test
|
||||
|
||||
## Database name
|
||||
database: nextcloud
|
||||
|
||||
## Use a existing secret
|
||||
existingSecret:
|
||||
enabled: false
|
||||
# secretName: nameofsecret
|
||||
# usernameKey: username
|
||||
# passwordKey: password
|
||||
|
||||
##
|
||||
## MariaDB chart configuration
|
||||
##
|
||||
mariadb:
|
||||
## Whether to deploy a mariadb server to satisfy the applications database requirements. To use an external database set this to false and configure the externalDatabase parameters
|
||||
enabled: false
|
||||
|
||||
postgresql:
|
||||
enabled: false
|
||||
##
|
||||
## Redis chart configuration
|
||||
## for more options see https://github.com/bitnami/charts/tree/master/bitnami/redis
|
||||
##
|
||||
|
||||
redis:
|
||||
enabled: false
|
||||
auth:
|
||||
enabled: true
|
||||
password: 'changeme'
|
||||
|
||||
## Cronjob to execute Nextcloud background tasks
|
||||
## ref: https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/background_jobs_configuration.html#webcron
|
||||
##
|
||||
cronjob:
|
||||
enabled: false
|
||||
# Nexcl
|
||||
service:
|
||||
type: ClusterIP
|
||||
port: 8080
|
||||
loadBalancerIP: nil
|
||||
nodePort: nil
|
||||
|
||||
## Enable persistence using Persistent Volume Claims
|
||||
## ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
|
||||
##
|
||||
persistence:
|
||||
# Nextcloud Data (/var/www/html)
|
||||
enabled: true
|
||||
annotations: {}
|
||||
## nextcloud data Persistent Volume Storage Class
|
||||
## If defined, storageClassName: <storageClass>
|
||||
## If set to "-", storageClassName: "", which disables dynamic provisioning
|
||||
## If undefined (the default) or set to null, no storageClassName spec is
|
||||
## set, choosing the default provisioner. (gp2 on AWS, standard on
|
||||
## GKE, AWS & OpenStack)
|
||||
##
|
||||
# storageClass: "-"
|
||||
|
||||
## A manually managed Persistent Volume and Claim
|
||||
## Requires persistence.enabled: true
|
||||
## If defined, PVC must be created manually before volume will be bound
|
||||
existingClaim: nextcloud-nfs
|
||||
|
||||
accessMode: ReadWriteOnce
|
||||
size: 150Gi
|
||||
|
||||
## Use an additional pvc for the data directory rather than a subpath of the default PVC
|
||||
## Useful to store data on a different storageClass (e.g. on slower disks)
|
||||
nextcloudData:
|
||||
enabled: false
|
||||
subPath:
|
||||
annotations: {}
|
||||
# storageClass: "-"
|
||||
# existingClaim:
|
||||
accessMode: ReadWriteOnce
|
||||
size: 8Gi
|
||||
|
||||
resources:
|
||||
# We usually recommend not to specify default resources and to leave this as a conscious
|
||||
# choice for the user. This also increases chances charts run on environments with little
|
||||
# resources, such as Minikube. If you do want to specify resources, uncomment the following
|
||||
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
|
||||
limits:
|
||||
cpu: 2000m
|
||||
memory: 2Gi
|
||||
requests:
|
||||
cpu: 100m
|
||||
memory: 128Mi
|
||||
|
||||
## Liveness and readiness probe values
|
||||
## Ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes
|
||||
##
|
||||
livenessProbe:
|
||||
enabled: true
|
||||
initialDelaySeconds: 250
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 5
|
||||
failureThreshold: 3
|
||||
successThreshold: 1
|
||||
readinessProbe:
|
||||
enabled: true
|
||||
initialDelaySeconds: 250
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 5
|
||||
failureThreshold: 3
|
||||
successThreshold: 1
|
||||
startupProbe:
|
||||
enabled: false
|
||||
initialDelaySeconds: 250
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 5
|
||||
failureThreshold: 30
|
||||
successThreshold: 1
|
||||
|
||||
|
||||
## Enable pod autoscaling using HorizontalPodAutoscaler
|
||||
## ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/
|
||||
##
|
||||
hpa:
|
||||
enabled: false
|
||||
|
||||
nodeSelector: {}
|
||||
|
||||
tolerations: []
|
||||
|
||||
affinity: {}
|
||||
|
||||
|
||||
## Prometheus Exporter / Metrics
|
||||
##
|
||||
metrics:
|
||||
enabled: false
|
||||
|
||||
|
||||
rbac:
|
||||
enabled: false
|
||||
serviceaccount:
|
||||
create: true
|
||||
name: nextcloud-serviceaccount
|
||||
|
81
apps/pix2tex/deployment.yaml
Normal file
81
apps/pix2tex/deployment.yaml
Normal file
@ -0,0 +1,81 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: pix2tex
|
||||
labels:
|
||||
app: pix2tex
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: pix2tex
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: pix2tex
|
||||
spec:
|
||||
containers:
|
||||
- name: pix2tex
|
||||
image: lukasblecher/pix2tex:api
|
||||
tty: true
|
||||
resources:
|
||||
requests:
|
||||
memory: "250M"
|
||||
cpu: 500m
|
||||
ephemeral-storage: "2Gi"
|
||||
limits:
|
||||
ephemeral-storage: "4Gi"
|
||||
memory: "500M"
|
||||
cpu: 1000m
|
||||
ports:
|
||||
- containerPort: 8501
|
||||
command: ["python", "pix2tex/api/run.py"]
|
||||
nodeSelector:
|
||||
kubernetes.io/arch: amd64
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: pix2tex-http
|
||||
namespace: pix2tex
|
||||
labels:
|
||||
app: pix2tex
|
||||
spec:
|
||||
ports:
|
||||
- name: http
|
||||
port: 8501
|
||||
targetPort: 8501
|
||||
selector:
|
||||
app: pix2tex
|
||||
|
||||
---
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: pix2tex-ingress
|
||||
spec:
|
||||
entryPoints:
|
||||
- websecure
|
||||
routes:
|
||||
- match: Host(`pix2tex.kluster.moll.re`)
|
||||
kind: Rule
|
||||
middlewares:
|
||||
- name: pix2tex-websocket
|
||||
services:
|
||||
- name: pix2tex-http
|
||||
port: 8501
|
||||
tls:
|
||||
certResolver: default-tls
|
||||
---
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
kind: Middleware
|
||||
metadata:
|
||||
name: pix2tex-websocket
|
||||
spec:
|
||||
headers:
|
||||
customRequestHeaders:
|
||||
X-Forwarded-Proto: "https"
|
||||
# enable websockets
|
||||
Upgrade: "websocket"
|
||||
|
53
apps/whoami/base/deployment.yaml
Normal file
53
apps/whoami/base/deployment.yaml
Normal file
@ -0,0 +1,53 @@
|
||||
kind: Namespace
|
||||
apiVersion: v1
|
||||
metadata:
|
||||
name: whoami
|
||||
|
||||
---
|
||||
kind: Deployment
|
||||
apiVersion: apps/v1
|
||||
metadata:
|
||||
name: whoami
|
||||
namespace: whoami
|
||||
labels:
|
||||
app: traefiklabs
|
||||
name: whoami
|
||||
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: traefiklabs
|
||||
task: whoami
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: traefiklabs
|
||||
task: whoami
|
||||
spec:
|
||||
containers:
|
||||
- name: whoami
|
||||
image: traefik/whoami
|
||||
ports:
|
||||
- containerPort: 80
|
||||
resources:
|
||||
requests:
|
||||
cpu: "5m"
|
||||
memory: "5Mi"
|
||||
limits:
|
||||
cpu: "10m"
|
||||
memory: "10Mi"
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: whoami
|
||||
namespace: whoami
|
||||
|
||||
spec:
|
||||
ports:
|
||||
- name: http
|
||||
port: 80
|
||||
selector:
|
||||
app: traefiklabs
|
||||
task: whoami
|
16
apps/whoami/base/ingress.yaml
Normal file
16
apps/whoami/base/ingress.yaml
Normal file
@ -0,0 +1,16 @@
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
namespace: whoami
|
||||
name: whoami-ingressroute
|
||||
spec:
|
||||
entryPoints:
|
||||
- websecure
|
||||
routes:
|
||||
- match: Host(`whoami.kluster.moll.re`)
|
||||
kind: Rule
|
||||
services:
|
||||
- name: whoami
|
||||
port: 80
|
||||
tls:
|
||||
certResolver: default-tls
|
5
apps/whoami/base/kustomization.yaml
Normal file
5
apps/whoami/base/kustomization.yaml
Normal file
@ -0,0 +1,5 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
resources:
|
||||
- ./deployment.yaml
|
||||
- ./ingress.yaml
|
6
apps/whoami/overlays/main/kustomization.yaml
Normal file
6
apps/whoami/overlays/main/kustomization.yaml
Normal file
@ -0,0 +1,6 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
|
||||
resources:
|
||||
- ../../base
|
||||
|
43
infrastructure/backup/base/cronjob.yaml
Normal file
43
infrastructure/backup/base/cronjob.yaml
Normal file
@ -0,0 +1,43 @@
|
||||
apiVersion: batch/v1
|
||||
kind: CronJob
|
||||
metadata:
|
||||
name: restic-rclone-gdrive
|
||||
|
||||
spec:
|
||||
successfulJobsHistoryLimit: 2
|
||||
failedJobsHistoryLimit: 2
|
||||
|
||||
jobTemplate:
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
restartPolicy: Never
|
||||
hostname: restic-k3s-pod
|
||||
# used by restic to identify the host
|
||||
containers:
|
||||
- name: restic-base-container
|
||||
image: restic/restic:latest
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
# >- strips newlines
|
||||
# RESTIC_ARGS Can be for instance: --verbose --dry-run
|
||||
args: []
|
||||
|
||||
volumeMounts:
|
||||
- mountPath: /data
|
||||
name: backup-nfs-access
|
||||
|
||||
env:
|
||||
- name: RESTIC_REPOSITORY
|
||||
value: rest:http://rclone-gcloud:8000/kluster
|
||||
# lives in the same namespace
|
||||
- name: RESTIC_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: restic-gdrive-credentials
|
||||
key: restic-password
|
||||
volumes:
|
||||
- name: backup-nfs-access
|
||||
persistentVolumeClaim:
|
||||
claimName: backup-nfs-access
|
5
infrastructure/backup/base/kustomization.yaml
Normal file
5
infrastructure/backup/base/kustomization.yaml
Normal file
@ -0,0 +1,5 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
resources:
|
||||
- ./cronjob.yaml
|
||||
- ./restic-password.secret.yaml
|
8
infrastructure/backup/overlays/applying.md
Normal file
8
infrastructure/backup/overlays/applying.md
Normal file
@ -0,0 +1,8 @@
|
||||
```
|
||||
k kustomize backup/overlays/backup | k apply -f -
|
||||
> secret/restic-credentials-backup created
|
||||
> cronjob.batch/restic-backblaze-backup created
|
||||
k kustomize backup/overlays/prune | k apply -f -
|
||||
> secret/restic-credentials-prune created
|
||||
> cronjob.batch/restic-backblaze-prune created
|
||||
```
|
16
infrastructure/backup/overlays/backup/kustomization.yaml
Normal file
16
infrastructure/backup/overlays/backup/kustomization.yaml
Normal file
@ -0,0 +1,16 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
|
||||
# namespace: backup
|
||||
nameSuffix: -backup
|
||||
resources:
|
||||
- ../../base
|
||||
# - ./restic-commands.yaml
|
||||
|
||||
|
||||
# patch the cronjob args field:
|
||||
patches:
|
||||
- path: ./restic-commands.yaml
|
||||
target:
|
||||
kind: CronJob
|
||||
|
25
infrastructure/backup/overlays/backup/restic-commands.yaml
Normal file
25
infrastructure/backup/overlays/backup/restic-commands.yaml
Normal file
@ -0,0 +1,25 @@
|
||||
apiVersion: batch/v1
|
||||
kind: CronJob
|
||||
metadata:
|
||||
name: backup-patch
|
||||
spec:
|
||||
schedule: "0 2 * * *"
|
||||
# at 2:00, every day
|
||||
|
||||
jobTemplate:
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
containers:
|
||||
- name: restic-base-container
|
||||
args:
|
||||
# >- strips newlines
|
||||
# -r $(RESTIC_REPOSITORY) not needed, bc set as env var
|
||||
- >-
|
||||
restic backup
|
||||
--verbose=2
|
||||
/data
|
||||
--exclude=s3/
|
||||
&&
|
||||
restic
|
||||
list snapshots
|
15
infrastructure/backup/overlays/prune/kustomization.yaml
Normal file
15
infrastructure/backup/overlays/prune/kustomization.yaml
Normal file
@ -0,0 +1,15 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
|
||||
# namespace: backup
|
||||
nameSuffix: -prune
|
||||
resources:
|
||||
- ../../base
|
||||
# - ./restic-commands.yaml
|
||||
|
||||
|
||||
# patch the cronjob args field:
|
||||
patches:
|
||||
- path: ./restic-commands.yaml
|
||||
target:
|
||||
kind: CronJob
|
24
infrastructure/backup/overlays/prune/restic-commands.yaml
Normal file
24
infrastructure/backup/overlays/prune/restic-commands.yaml
Normal file
@ -0,0 +1,24 @@
|
||||
apiVersion: batch/v1
|
||||
kind: CronJob
|
||||
metadata:
|
||||
name: prune-patch
|
||||
spec:
|
||||
schedule: "0 0 1/15 * *"
|
||||
# at midnight, the first and 15. of every month
|
||||
|
||||
jobTemplate:
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
containers:
|
||||
- name: restic-base-container
|
||||
args:
|
||||
# >- strips newlines
|
||||
# RESTIC_ARGS Can be for instance: --verbose --dry-run
|
||||
# RESTIC_REPOSITORY is set in the secret
|
||||
- >-
|
||||
restic forget
|
||||
-r $(RESTIC_REPOSITORY)
|
||||
--verbose=2
|
||||
--keep-daily 7 --keep-weekly 5
|
||||
--prune
|
22
infrastructure/backup/rclone-config.sealedsecret.yaml
Normal file
22
infrastructure/backup/rclone-config.sealedsecret.yaml
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"kind": "SealedSecret",
|
||||
"apiVersion": "bitnami.com/v1alpha1",
|
||||
"metadata": {
|
||||
"name": "rclone-config-files",
|
||||
"namespace": "backup",
|
||||
"creationTimestamp": null
|
||||
},
|
||||
"spec": {
|
||||
"template": {
|
||||
"metadata": {
|
||||
"name": "rclone-config-files",
|
||||
"namespace": "backup",
|
||||
"creationTimestamp": null
|
||||
},
|
||||
"type": "Opaque"
|
||||
},
|
||||
"encryptedData": {
|
||||
"rclone.conf": "AgCQ13IG+R6bs+nAxe1xuDXttYlvGlLfV3oQ6c0qtoF2jXB8hN3LftydHn+Se3LjghmQKAIErfsA7ZRhJoWfFuSm2AIc3w2mMonsga5gjBx/56/tZSvnT2Bzn/5UXktTVxwEINSBP0dYiMcn4/G+5hO3bngmG+lCZXeI7yWoTW8H+8NKYxDHUzdoBBhPPPLTERTRZHB8EzOPUlefHq/2y/NpUfkxyLSjYk0/X45W6XNzH6MfdA2x6omxd4giDQSEwJGdXqIXu1rPnPjV7WVcA8qJzkQbxhzjqpUcFgM12YsLGVVW8HSSdAy+ZNdTXmhCIu2+pI+AVuol4QY9r/gU3xlGhFmc3asW5k4iOfn7/ZEr3Yk8JplAYM+GWQ07s59MqYdGOhqFUpVmkjO97Z29iaeReQZCwxzl/PmxUtfI20eTmtUlFKE3fObMr27sZcXgeJS3ktHOONGoqvHHeuqd4hfTaVAGwVOAEoBY8Xnkq3ECN5ld8V4zR8e52QHtANflN4IJgjnGO5pMQyAW+XASAJDxG48q7ruu9i0mI4vuM0rVuoWi2v9I30/M7Mv2xAYnmKC7NIao1mDya3paidHwkIu12480oBDdHZpm5NSqHtQr/HKMQWnbu6CrufrDmTqoVe/ew5uaqjbfrBBys35k5ObUUPlhU3putgfmsR3YZXDaAqOwIoXQ30wm02gCA5z/WNEY3EaKP6RhgsowwkrPPniQfz4EaxQQjmZ/toe/xpwzSZjmoVnJtJabiuqL/B/eY6WpNOTjOzsc7Z69EOyhZMs41gNoA32RRUbFO1ppOu8518cE12KpsGbH6K6NcucSrKh2Gd3xNGwjaGQVT2vLTVi9YwByiwvrsVpNU06f2v0fcZWeRgoFoUkKMj746lw0E+X7oF0+PmfPT2IeTRszHECkbStSvFZNDivcdJyDFutocAZKNjDoAnVPlTNVYwKKcmHvw3sOOXhVN7NOj/+9UxSNyRvip7GPZKtRF1u9ftlD6OaLCCVSip7MJ41a7TugBTUUaMJbQUTmidWKZn6A0nctAvdrPbBatPI2BZQ4amwdXa2bWyE7DI13WaCm6kAVJijsAmfVrVX3C+Ft5p8unbjsVQ/ErdpKTjlq9mJsie3TQdME5r74GlcURiVXdLc7KcV7vpf6yy88XS6ee+Y9WmlYDAwRX+taMilRDlunMeF5Zmh12DCXMzsradEifEOZ/Mg5BMznxvrZv3iHDArm/j4QW7Bi0To3+f2826IAaXMlI4ze7e9Ny3NUbgy85yE+RNYiio0+wvWRKraxpqI0EODy/juBed3VcoWlOfch0hKU4BZTVrU5rDEmwYcp6oWnXE92fhVH7wjy4IV3WUSubYg="
|
||||
}
|
||||
}
|
||||
}
|
54
infrastructure/backup/rclone-gcloud.deployment.yaml
Normal file
54
infrastructure/backup/rclone-gcloud.deployment.yaml
Normal file
@ -0,0 +1,54 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: rclone-gcloud
|
||||
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: rclone-gcloud
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: rclone-gcloud
|
||||
spec:
|
||||
containers:
|
||||
- name: rclone
|
||||
image: rclone/rclone:latest
|
||||
command: ["/bin/sh", "-c"]
|
||||
args: # mounted as a secret
|
||||
# >- strips newlines
|
||||
# sleep infinity
|
||||
- >-
|
||||
rclone
|
||||
--config /config/rclone.conf
|
||||
serve restic
|
||||
--addr :8000
|
||||
-v
|
||||
ETHZ-gdrive:backup
|
||||
|
||||
volumeMounts:
|
||||
# from secret
|
||||
- name: rclone-config
|
||||
mountPath: /config
|
||||
readOnly: true
|
||||
volumes:
|
||||
- name: rclone-config
|
||||
secret:
|
||||
secretName: rclone-config-files
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: rclone-gcloud
|
||||
|
||||
spec:
|
||||
selector:
|
||||
app: rclone-gcloud
|
||||
ports:
|
||||
- protocol: TCP
|
||||
port: 8000
|
||||
targetPort: 8000
|
||||
|
||||
|
2
infrastructure/backup/restic-rclone.env
Normal file
2
infrastructure/backup/restic-rclone.env
Normal file
@ -0,0 +1,2 @@
|
||||
export RESTIC_REPOSITORY=rest:http://127.0.0.1:8000/kluster
|
||||
export RESTIC_PASSWORD="2r,TE0.,U@gni3e%xr)_LC64"
|
38
infrastructure/external/omv-s3.ingress.yaml
vendored
Normal file
38
infrastructure/external/omv-s3.ingress.yaml
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: omv-s3-ingressroute
|
||||
namespace: external
|
||||
spec:
|
||||
entryPoints:
|
||||
- websecure
|
||||
routes:
|
||||
- match: Host(`s3.kluster.moll.re`)
|
||||
kind: Rule
|
||||
services:
|
||||
- name: omv-s3
|
||||
port: 9000
|
||||
# scheme: https
|
||||
tls:
|
||||
certResolver: default-tls
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Endpoints
|
||||
metadata:
|
||||
name: omv-s3
|
||||
namespace: external
|
||||
subsets:
|
||||
- addresses:
|
||||
- ip: 192.168.1.157
|
||||
ports:
|
||||
- port: 9000
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: omv-s3
|
||||
namespace: external
|
||||
spec:
|
||||
ports:
|
||||
- port: 9000
|
||||
targetPort: 9000
|
38
infrastructure/external/openmediavault.ingress.yaml
vendored
Normal file
38
infrastructure/external/openmediavault.ingress.yaml
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: omv-ingressroute
|
||||
namespace: external
|
||||
spec:
|
||||
entryPoints:
|
||||
- websecure
|
||||
routes:
|
||||
- match: Host(`omv.kluster.moll.re`)
|
||||
kind: Rule
|
||||
services:
|
||||
- name: omv
|
||||
port: 443
|
||||
scheme: https
|
||||
tls:
|
||||
certResolver: default-tls
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Endpoints
|
||||
metadata:
|
||||
name: omv
|
||||
namespace: external
|
||||
subsets:
|
||||
- addresses:
|
||||
- ip: 192.168.1.157
|
||||
ports:
|
||||
- port: 443
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: omv
|
||||
namespace: external
|
||||
spec:
|
||||
ports:
|
||||
- port: 443
|
||||
targetPort: 443
|
55
infrastructure/external/proxmox.ingress.yaml
vendored
Normal file
55
infrastructure/external/proxmox.ingress.yaml
vendored
Normal file
@ -0,0 +1,55 @@
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: proxmox-ingressroute
|
||||
namespace: external
|
||||
spec:
|
||||
entryPoints:
|
||||
- websecure
|
||||
routes:
|
||||
- match: Host(`proxmox.kluster.moll.re`)
|
||||
middlewares:
|
||||
- name: proxmox-websocket
|
||||
|
||||
kind: Rule
|
||||
services:
|
||||
- name: proxmox
|
||||
port: 8006
|
||||
scheme: https
|
||||
tls:
|
||||
certResolver: default-tls
|
||||
---
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
kind: Middleware
|
||||
metadata:
|
||||
name: proxmox-websocket
|
||||
namespace: external
|
||||
spec:
|
||||
headers:
|
||||
customRequestHeaders:
|
||||
X-Forwarded-Proto: "https"
|
||||
# enable websockets
|
||||
Upgrade: "websocket"
|
||||
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Endpoints
|
||||
metadata:
|
||||
name: proxmox
|
||||
namespace: external
|
||||
subsets:
|
||||
- addresses:
|
||||
- ip: 192.168.1.150
|
||||
ports:
|
||||
- port: 8006
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: proxmox
|
||||
namespace: external
|
||||
spec:
|
||||
ports:
|
||||
- port: 8006
|
||||
targetPort: 8006
|
2
infrastructure/metallb-system/config.values.yaml
Normal file
2
infrastructure/metallb-system/config.values.yaml
Normal file
@ -0,0 +1,2 @@
|
||||
name: metallb
|
||||
chart: metallb/metallb
|
15
infrastructure/metallb-system/configmap.yaml
Normal file
15
infrastructure/metallb-system/configmap.yaml
Normal file
@ -0,0 +1,15 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: config
|
||||
spec:
|
||||
secretTemplates:
|
||||
- name: secret-1
|
||||
labels:
|
||||
label1: value1
|
||||
annotations:
|
||||
key1: value1
|
||||
stringData:
|
||||
data-name0: data-value0
|
||||
data:
|
||||
data-name1: ZGF0YS12YWx1ZTE=
|
14
infrastructure/metallb-system/ipaddresspool.yaml
Normal file
14
infrastructure/metallb-system/ipaddresspool.yaml
Normal file
@ -0,0 +1,14 @@
|
||||
apiVersion: metallb.io/v1beta1
|
||||
kind: IPAddressPool
|
||||
metadata:
|
||||
name: default
|
||||
namespace: metallb-system
|
||||
spec:
|
||||
addresses:
|
||||
- 192.168.3.0/24
|
||||
---
|
||||
apiVersion: metallb.io/v1beta1
|
||||
kind: L2Advertisement
|
||||
metadata:
|
||||
name: empty
|
||||
namespace: metallb-system
|
337
infrastructure/metallb-system/values.yaml
Normal file
337
infrastructure/metallb-system/values.yaml
Normal file
@ -0,0 +1,337 @@
|
||||
# Default values for metallb.
|
||||
# This is a YAML-formatted file.
|
||||
# Declare variables to be passed into your templates.
|
||||
|
||||
imagePullSecrets: []
|
||||
nameOverride: ""
|
||||
fullnameOverride: ""
|
||||
loadBalancerClass: ""
|
||||
|
||||
# existingConfigMap: "config"
|
||||
|
||||
rbac:
|
||||
# create specifies whether to install and use RBAC rules.
|
||||
create: true
|
||||
|
||||
prometheus:
|
||||
# scrape annotations specifies whether to add Prometheus metric
|
||||
# auto-collection annotations to pods. See
|
||||
# https://github.com/prometheus/prometheus/blob/release-2.1/documentation/examples/prometheus-kubernetes.yml
|
||||
# for a corresponding Prometheus configuration. Alternatively, you
|
||||
# may want to use the Prometheus Operator
|
||||
# (https://github.com/coreos/prometheus-operator) for more powerful
|
||||
# monitoring configuration. If you use the Prometheus operator, this
|
||||
# can be left at false.
|
||||
scrapeAnnotations: false
|
||||
|
||||
# port both controller and speaker will listen on for metrics
|
||||
metricsPort: 7472
|
||||
|
||||
# if set, enables rbac proxy on the controller and speaker to expose
|
||||
# the metrics via tls.
|
||||
# secureMetricsPort: 9120
|
||||
|
||||
# the name of the secret to be mounted in the speaker pod
|
||||
# to expose the metrics securely. If not present, a self signed
|
||||
# certificate to be used.
|
||||
speakerMetricsTLSSecret: ""
|
||||
|
||||
# the name of the secret to be mounted in the controller pod
|
||||
# to expose the metrics securely. If not present, a self signed
|
||||
# certificate to be used.
|
||||
controllerMetricsTLSSecret: ""
|
||||
|
||||
# prometheus doens't have the permission to scrape all namespaces so we give it permission to scrape metallb's one
|
||||
rbacPrometheus: true
|
||||
|
||||
# the service account used by prometheus
|
||||
# required when " .Values.prometheus.rbacPrometheus == true " and " .Values.prometheus.podMonitor.enabled=true or prometheus.serviceMonitor.enabled=true "
|
||||
serviceAccount: ""
|
||||
|
||||
# the namespace where prometheus is deployed
|
||||
# required when " .Values.prometheus.rbacPrometheus == true " and " .Values.prometheus.podMonitor.enabled=true or prometheus.serviceMonitor.enabled=true "
|
||||
namespace: ""
|
||||
|
||||
# the image to be used for the kuberbacproxy container
|
||||
rbacProxy:
|
||||
repository: gcr.io/kubebuilder/kube-rbac-proxy
|
||||
tag: v0.12.0
|
||||
pullPolicy:
|
||||
|
||||
# Prometheus Operator PodMonitors
|
||||
podMonitor:
|
||||
# enable support for Prometheus Operator
|
||||
enabled: false
|
||||
|
||||
# optional additionnal labels for podMonitors
|
||||
additionalLabels: {}
|
||||
|
||||
# optional annotations for podMonitors
|
||||
annotations: {}
|
||||
|
||||
# Job label for scrape target
|
||||
jobLabel: "app.kubernetes.io/name"
|
||||
|
||||
# Scrape interval. If not set, the Prometheus default scrape interval is used.
|
||||
interval:
|
||||
|
||||
# metric relabel configs to apply to samples before ingestion.
|
||||
metricRelabelings: []
|
||||
# - action: keep
|
||||
# regex: 'kube_(daemonset|deployment|pod|namespace|node|statefulset).+'
|
||||
# sourceLabels: [__name__]
|
||||
|
||||
# relabel configs to apply to samples before ingestion.
|
||||
relabelings: []
|
||||
# - sourceLabels: [__meta_kubernetes_pod_node_name]
|
||||
# separator: ;
|
||||
# regex: ^(.*)$
|
||||
# target_label: nodename
|
||||
# replacement: $1
|
||||
# action: replace
|
||||
|
||||
# Prometheus Operator ServiceMonitors. To be used as an alternative
|
||||
# to podMonitor, supports secure metrics.
|
||||
serviceMonitor:
|
||||
# enable support for Prometheus Operator
|
||||
enabled: false
|
||||
|
||||
speaker:
|
||||
# optional additional labels for the speaker serviceMonitor
|
||||
additionalLabels: {}
|
||||
# optional additional annotations for the speaker serviceMonitor
|
||||
annotations: {}
|
||||
# optional tls configuration for the speaker serviceMonitor, in case
|
||||
# secure metrics are enabled.
|
||||
tlsConfig:
|
||||
insecureSkipVerify: true
|
||||
|
||||
controller:
|
||||
# optional additional labels for the controller serviceMonitor
|
||||
additionalLabels: {}
|
||||
# optional additional annotations for the controller serviceMonitor
|
||||
annotations: {}
|
||||
# optional tls configuration for the controller serviceMonitor, in case
|
||||
# secure metrics are enabled.
|
||||
tlsConfig:
|
||||
insecureSkipVerify: true
|
||||
|
||||
# Job label for scrape target
|
||||
jobLabel: "app.kubernetes.io/name"
|
||||
|
||||
# Scrape interval. If not set, the Prometheus default scrape interval is used.
|
||||
interval:
|
||||
|
||||
# metric relabel configs to apply to samples before ingestion.
|
||||
metricRelabelings: []
|
||||
# - action: keep
|
||||
# regex: 'kube_(daemonset|deployment|pod|namespace|node|statefulset).+'
|
||||
# sourceLabels: [__name__]
|
||||
|
||||
# relabel configs to apply to samples before ingestion.
|
||||
relabelings: []
|
||||
# - sourceLabels: [__meta_kubernetes_pod_node_name]
|
||||
# separator: ;
|
||||
# regex: ^(.*)$
|
||||
# target_label: nodename
|
||||
# replacement: $1
|
||||
# action: replace
|
||||
|
||||
# Prometheus Operator alertmanager alerts
|
||||
prometheusRule:
|
||||
# enable alertmanager alerts
|
||||
enabled: false
|
||||
|
||||
# optional additionnal labels for prometheusRules
|
||||
additionalLabels: {}
|
||||
|
||||
# optional annotations for prometheusRules
|
||||
annotations: {}
|
||||
|
||||
# MetalLBStaleConfig
|
||||
staleConfig:
|
||||
enabled: true
|
||||
labels:
|
||||
severity: warning
|
||||
|
||||
# MetalLBConfigNotLoaded
|
||||
configNotLoaded:
|
||||
enabled: true
|
||||
labels:
|
||||
severity: warning
|
||||
|
||||
# MetalLBAddressPoolExhausted
|
||||
addressPoolExhausted:
|
||||
enabled: true
|
||||
labels:
|
||||
severity: alert
|
||||
|
||||
addressPoolUsage:
|
||||
enabled: true
|
||||
thresholds:
|
||||
- percent: 75
|
||||
labels:
|
||||
severity: warning
|
||||
- percent: 85
|
||||
labels:
|
||||
severity: warning
|
||||
- percent: 95
|
||||
labels:
|
||||
severity: alert
|
||||
|
||||
# MetalLBBGPSessionDown
|
||||
bgpSessionDown:
|
||||
enabled: true
|
||||
labels:
|
||||
severity: alert
|
||||
|
||||
extraAlerts: []
|
||||
|
||||
# controller contains configuration specific to the MetalLB cluster
|
||||
# controller.
|
||||
controller:
|
||||
enabled: true
|
||||
# -- Controller log level. Must be one of: `all`, `debug`, `info`, `warn`, `error` or `none`
|
||||
logLevel: info
|
||||
# command: /controller
|
||||
# webhookMode: enabled
|
||||
image:
|
||||
repository: quay.io/metallb/controller
|
||||
tag:
|
||||
pullPolicy:
|
||||
## @param controller.updateStrategy.type Metallb controller deployment strategy type.
|
||||
## ref: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy
|
||||
## e.g:
|
||||
## strategy:
|
||||
## type: RollingUpdate
|
||||
## rollingUpdate:
|
||||
## maxSurge: 25%
|
||||
## maxUnavailable: 25%
|
||||
##
|
||||
strategy:
|
||||
type: RollingUpdate
|
||||
serviceAccount:
|
||||
# Specifies whether a ServiceAccount should be created
|
||||
create: true
|
||||
# The name of the ServiceAccount to use. If not set and create is
|
||||
# true, a name is generated using the fullname template
|
||||
name: ""
|
||||
annotations: {}
|
||||
securityContext:
|
||||
runAsNonRoot: true
|
||||
# nobody
|
||||
runAsUser: 65534
|
||||
fsGroup: 65534
|
||||
resources: {}
|
||||
# limits:
|
||||
# cpu: 100m
|
||||
# memory: 100Mi
|
||||
nodeSelector: {}
|
||||
tolerations: []
|
||||
priorityClassName: ""
|
||||
runtimeClassName: ""
|
||||
affinity: {}
|
||||
podAnnotations: {}
|
||||
livenessProbe:
|
||||
enabled: true
|
||||
failureThreshold: 3
|
||||
initialDelaySeconds: 10
|
||||
periodSeconds: 10
|
||||
successThreshold: 1
|
||||
timeoutSeconds: 1
|
||||
readinessProbe:
|
||||
enabled: true
|
||||
failureThreshold: 3
|
||||
initialDelaySeconds: 10
|
||||
periodSeconds: 10
|
||||
successThreshold: 1
|
||||
timeoutSeconds: 1
|
||||
|
||||
# speaker contains configuration specific to the MetalLB speaker
|
||||
# daemonset.
|
||||
speaker:
|
||||
enabled: true
|
||||
# command: /speaker
|
||||
# -- Speaker log level. Must be one of: `all`, `debug`, `info`, `warn`, `error` or `none`
|
||||
logLevel: info
|
||||
tolerateMaster: true
|
||||
memberlist:
|
||||
enabled: true
|
||||
mlBindPort: 7946
|
||||
mlSecretKeyPath: "/etc/ml_secret_key"
|
||||
image:
|
||||
repository: quay.io/metallb/speaker
|
||||
tag:
|
||||
pullPolicy:
|
||||
## @param speaker.updateStrategy.type Speaker daemonset strategy type
|
||||
## ref: https://kubernetes.io/docs/tasks/manage-daemon/update-daemon-set/
|
||||
##
|
||||
updateStrategy:
|
||||
## StrategyType
|
||||
## Can be set to RollingUpdate or OnDelete
|
||||
##
|
||||
type: RollingUpdate
|
||||
serviceAccount:
|
||||
# Specifies whether a ServiceAccount should be created
|
||||
create: true
|
||||
# The name of the ServiceAccount to use. If not set and create is
|
||||
# true, a name is generated using the fullname template
|
||||
name: ""
|
||||
annotations: {}
|
||||
## Defines a secret name for the controller to generate a memberlist encryption secret
|
||||
## By default secretName: {{ "metallb.fullname" }}-memberlist
|
||||
##
|
||||
# secretName:
|
||||
resources: {}
|
||||
# limits:
|
||||
# cpu: 100m
|
||||
# memory: 100Mi
|
||||
nodeSelector: {}
|
||||
tolerations: []
|
||||
priorityClassName: ""
|
||||
affinity: {}
|
||||
## Selects which runtime class will be used by the pod.
|
||||
runtimeClassName: ""
|
||||
podAnnotations: {}
|
||||
livenessProbe:
|
||||
enabled: true
|
||||
failureThreshold: 3
|
||||
initialDelaySeconds: 10
|
||||
periodSeconds: 10
|
||||
successThreshold: 1
|
||||
timeoutSeconds: 1
|
||||
readinessProbe:
|
||||
enabled: true
|
||||
failureThreshold: 3
|
||||
initialDelaySeconds: 10
|
||||
periodSeconds: 10
|
||||
successThreshold: 1
|
||||
timeoutSeconds: 1
|
||||
startupProbe:
|
||||
enabled: true
|
||||
failureThreshold: 30
|
||||
periodSeconds: 5
|
||||
# frr contains configuration specific to the MetalLB FRR container,
|
||||
# for speaker running alongside FRR.
|
||||
frr:
|
||||
enabled: false
|
||||
image:
|
||||
repository: quay.io/frrouting/frr
|
||||
tag: 7.5.1
|
||||
pullPolicy:
|
||||
metricsPort: 7473
|
||||
resources: {}
|
||||
|
||||
# if set, enables a rbac proxy sidecar container on the speaker to
|
||||
# expose the frr metrics via tls.
|
||||
# secureMetricsPort: 9121
|
||||
|
||||
reloader:
|
||||
resources: {}
|
||||
|
||||
frrMetrics:
|
||||
resources: {}
|
||||
|
||||
crds:
|
||||
enabled: true
|
||||
validationFailurePolicy: Fail
|
13
infrastructure/nfs/USAGE.md
Normal file
13
infrastructure/nfs/USAGE.md
Normal file
@ -0,0 +1,13 @@
|
||||
```
|
||||
kind: PersistentVolumeClaim
|
||||
apiVersion: v1
|
||||
metadata:
|
||||
name: test-claim
|
||||
spec:
|
||||
storageClassName: nfs-client
|
||||
accessModes:
|
||||
- ReadWriteMany
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Mi
|
||||
```
|
9
infrastructure/nfs/kustomization.yaml
Normal file
9
infrastructure/nfs/kustomization.yaml
Normal file
@ -0,0 +1,9 @@
|
||||
namespace: nfs-provisioner
|
||||
bases:
|
||||
- github.com/kubernetes-sigs/nfs-subdir-external-provisioner//deploy
|
||||
|
||||
|
||||
resources:
|
||||
- namespace.yaml
|
||||
patchesStrategicMerge:
|
||||
- nfs_values.yaml
|
5
infrastructure/nfs/namespace.yaml
Normal file
5
infrastructure/nfs/namespace.yaml
Normal file
@ -0,0 +1,5 @@
|
||||
# namespace.yaml
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: nfs-provisioner
|
21
infrastructure/nfs/nfs_values.yaml
Normal file
21
infrastructure/nfs/nfs_values.yaml
Normal file
@ -0,0 +1,21 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
labels:
|
||||
app: nfs-client-provisioner
|
||||
name: nfs-client-provisioner
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
containers:
|
||||
- name: nfs-client-provisioner
|
||||
env:
|
||||
- name: NFS_SERVER
|
||||
value: 192.168.1.157
|
||||
- name: NFS_PATH
|
||||
value: /export/kluster/
|
||||
volumes:
|
||||
- name: nfs-client-root
|
||||
nfs:
|
||||
server: 192.168.1.157
|
||||
path: /export/kluster/
|
13
infrastructure/postgres/adding.md
Normal file
13
infrastructure/postgres/adding.md
Normal file
@ -0,0 +1,13 @@
|
||||
Create a new role by executing the createuser command. With the options below, the new role will not be a superuser and will not have privileges for creating new databases or new roles (this is usually the default for the createuser command).
|
||||
|
||||
k exec -it -n postgres postgres-postgresql-0 -- bash
|
||||
|
||||
```
|
||||
createuser -U postgres USER_NAME -S -D -R -P
|
||||
```
|
||||
You will be prompted to enter first the password for the new role and to reenter it, and then to enter the postgres role password.
|
||||
|
||||
Create a new database with the new role as the owner:
|
||||
```
|
||||
createdb -U postgres DATABASE_NAME -O USER_NAME
|
||||
```
|
2
infrastructure/postgres/config.values.yaml
Normal file
2
infrastructure/postgres/config.values.yaml
Normal file
@ -0,0 +1,2 @@
|
||||
name: postgres
|
||||
chart: bitnami/postgresql
|
21
infrastructure/postgres/postgres-password.sealedsecret.yaml
Normal file
21
infrastructure/postgres/postgres-password.sealedsecret.yaml
Normal file
@ -0,0 +1,21 @@
|
||||
{
|
||||
"kind": "SealedSecret",
|
||||
"apiVersion": "bitnami.com/v1alpha1",
|
||||
"metadata": {
|
||||
"name": "postgres-password",
|
||||
"namespace": "postgres",
|
||||
"creationTimestamp": null
|
||||
},
|
||||
"spec": {
|
||||
"template": {
|
||||
"metadata": {
|
||||
"name": "postgres-password",
|
||||
"namespace": "postgres",
|
||||
"creationTimestamp": null
|
||||
}
|
||||
},
|
||||
"encryptedData": {
|
||||
"password": "AgCVytxZbe1yjT7OQuA7LocPTgn6Ikx9pDJAA49Ktboy86dJWlxnBke23O0qn3ELFTGUTDaMhBcJB0neqA0RjTTW3o7PsvbxEBvrP5F1EK4jN2vHti8Jgt/CUbOlJVfFuGPaL2DG9M7vafUnL3AQvZv/YkL79Q32Wcg9nPq+4iT7fTGQzUu22G6bmKJv/SnByAnBIzZRsL3R3pP4J7suG+5+K6PDlNRbIb0mIoy1vjBz5PKQAR2Hrh1+kLFIJEIwDuinSDHRDUoa9fChC52x/Oc4PavFw8RWTXjot5cnEOkUK3umSx0jnD247nPc8sRW87hmHE3O/T+doDqEetQxtarSNPxCZXwkVJCIAxg48M29mdkPiOUu2Rr9W9w+HnN8j7mA2rHYAxxi3KPeDBL7kaFH+Xtyv+MT6upRr9BHfSbA/gMPjT37dJmbEYJAvEEyZZJK6TpXUkLh3jnhg1P180t8AnJVX4KQhjUm+UmgUCytxEjp082vxoKEHop6I7f4qzUYfudaG825i0zL11yjSvUbQbdoe8j3C5pNs5OgNBboGqYGfreCcp76zKdNrNI6GYhtj04AuOQZP5SD9/bqsP4JW4yFYsWsq3XuqIxE/2ExCRvDOFu2H1rnPnkcvUYr30doYPIugP40l7AY18YucUsbH19ww7jM1TOejo5QS5wb39uygwf4j0+XjbD3iV12AQzaEnk/pfo="
|
||||
}
|
||||
}
|
||||
}
|
37
infrastructure/postgres/pvc.yaml
Normal file
37
infrastructure/postgres/pvc.yaml
Normal file
@ -0,0 +1,37 @@
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
namespace: postgres
|
||||
name: postgres-nfs
|
||||
labels:
|
||||
directory: postgres
|
||||
spec:
|
||||
storageClassName: fast
|
||||
capacity:
|
||||
storage: "50Gi"
|
||||
volumeMode: Filesystem
|
||||
accessModes:
|
||||
- ReadWriteMany
|
||||
nfs:
|
||||
path: /export/kluster/postgres
|
||||
server: 192.168.1.157
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
namespace: postgres
|
||||
name: postgres-nfs
|
||||
spec:
|
||||
storageClassName: fast
|
||||
accessModes:
|
||||
- ReadWriteMany
|
||||
resources:
|
||||
requests:
|
||||
storage: "50Gi"
|
||||
selector:
|
||||
matchLabels:
|
||||
directory: postgres
|
||||
|
||||
|
||||
|
1037
infrastructure/postgres/values.yaml
Normal file
1037
infrastructure/postgres/values.yaml
Normal file
File diff suppressed because it is too large
Load Diff
377
infrastructure/sealedsecrets/controller.yaml
Normal file
377
infrastructure/sealedsecrets/controller.yaml
Normal file
@ -0,0 +1,377 @@
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: Role
|
||||
metadata:
|
||||
annotations: {}
|
||||
labels:
|
||||
name: sealed-secrets-service-proxier
|
||||
name: sealed-secrets-service-proxier
|
||||
namespace: kube-system
|
||||
rules:
|
||||
- apiGroups:
|
||||
- ""
|
||||
resourceNames:
|
||||
- sealed-secrets-controller
|
||||
resources:
|
||||
- services
|
||||
verbs:
|
||||
- get
|
||||
- apiGroups:
|
||||
- ""
|
||||
resourceNames:
|
||||
- 'http:sealed-secrets-controller:'
|
||||
- http:sealed-secrets-controller:http
|
||||
- sealed-secrets-controller
|
||||
resources:
|
||||
- services/proxy
|
||||
verbs:
|
||||
- create
|
||||
- get
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: RoleBinding
|
||||
metadata:
|
||||
annotations: {}
|
||||
labels:
|
||||
name: sealed-secrets-controller
|
||||
name: sealed-secrets-controller
|
||||
namespace: kube-system
|
||||
roleRef:
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
kind: Role
|
||||
name: sealed-secrets-key-admin
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: sealed-secrets-controller
|
||||
namespace: kube-system
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: Role
|
||||
metadata:
|
||||
annotations: {}
|
||||
labels:
|
||||
name: sealed-secrets-key-admin
|
||||
name: sealed-secrets-key-admin
|
||||
namespace: kube-system
|
||||
rules:
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- secrets
|
||||
verbs:
|
||||
- create
|
||||
- list
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRole
|
||||
metadata:
|
||||
annotations: {}
|
||||
labels:
|
||||
name: secrets-unsealer
|
||||
name: secrets-unsealer
|
||||
rules:
|
||||
- apiGroups:
|
||||
- bitnami.com
|
||||
resources:
|
||||
- sealedsecrets
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- watch
|
||||
- apiGroups:
|
||||
- bitnami.com
|
||||
resources:
|
||||
- sealedsecrets/status
|
||||
verbs:
|
||||
- update
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- secrets
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- create
|
||||
- update
|
||||
- delete
|
||||
- watch
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- events
|
||||
verbs:
|
||||
- create
|
||||
- patch
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- namespaces
|
||||
verbs:
|
||||
- get
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: RoleBinding
|
||||
metadata:
|
||||
annotations: {}
|
||||
labels:
|
||||
name: sealed-secrets-service-proxier
|
||||
name: sealed-secrets-service-proxier
|
||||
namespace: kube-system
|
||||
roleRef:
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
kind: Role
|
||||
name: sealed-secrets-service-proxier
|
||||
subjects:
|
||||
- apiGroup: rbac.authorization.k8s.io
|
||||
kind: Group
|
||||
name: system:authenticated
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
annotations: {}
|
||||
labels:
|
||||
name: sealed-secrets-controller
|
||||
name: sealed-secrets-controller
|
||||
namespace: kube-system
|
||||
spec:
|
||||
minReadySeconds: 30
|
||||
replicas: 1
|
||||
revisionHistoryLimit: 10
|
||||
selector:
|
||||
matchLabels:
|
||||
name: sealed-secrets-controller
|
||||
strategy:
|
||||
rollingUpdate:
|
||||
maxSurge: 25%
|
||||
maxUnavailable: 25%
|
||||
type: RollingUpdate
|
||||
template:
|
||||
metadata:
|
||||
annotations: {}
|
||||
labels:
|
||||
name: sealed-secrets-controller
|
||||
spec:
|
||||
containers:
|
||||
- args: []
|
||||
command:
|
||||
- controller
|
||||
env: []
|
||||
image: docker.io/bitnami/sealed-secrets-controller:v0.23.1
|
||||
imagePullPolicy: IfNotPresent
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /healthz
|
||||
port: http
|
||||
name: sealed-secrets-controller
|
||||
ports:
|
||||
- containerPort: 8080
|
||||
name: http
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /healthz
|
||||
port: http
|
||||
securityContext:
|
||||
allowPrivilegeEscalation: false
|
||||
capabilities:
|
||||
drop:
|
||||
- ALL
|
||||
readOnlyRootFilesystem: true
|
||||
stdin: false
|
||||
tty: false
|
||||
volumeMounts:
|
||||
- mountPath: /tmp
|
||||
name: tmp
|
||||
imagePullSecrets: []
|
||||
initContainers: []
|
||||
securityContext:
|
||||
fsGroup: 65534
|
||||
runAsNonRoot: true
|
||||
runAsUser: 1001
|
||||
seccompProfile:
|
||||
type: RuntimeDefault
|
||||
serviceAccountName: sealed-secrets-controller
|
||||
terminationGracePeriodSeconds: 30
|
||||
volumes:
|
||||
- emptyDir: {}
|
||||
name: tmp
|
||||
---
|
||||
apiVersion: apiextensions.k8s.io/v1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
name: sealedsecrets.bitnami.com
|
||||
spec:
|
||||
group: bitnami.com
|
||||
names:
|
||||
kind: SealedSecret
|
||||
listKind: SealedSecretList
|
||||
plural: sealedsecrets
|
||||
singular: sealedsecret
|
||||
scope: Namespaced
|
||||
versions:
|
||||
- name: v1alpha1
|
||||
schema:
|
||||
openAPIV3Schema:
|
||||
description: SealedSecret is the K8s representation of a "sealed Secret" -
|
||||
a regular k8s Secret that has been sealed (encrypted) using the controller's
|
||||
key.
|
||||
properties:
|
||||
apiVersion:
|
||||
description: 'APIVersion defines the versioned schema of this representation
|
||||
of an object. Servers should convert recognized schemas to the latest
|
||||
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
|
||||
type: string
|
||||
kind:
|
||||
description: 'Kind is a string value representing the REST resource this
|
||||
object represents. Servers may infer this from the endpoint the client
|
||||
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
|
||||
type: string
|
||||
metadata:
|
||||
type: object
|
||||
spec:
|
||||
description: SealedSecretSpec is the specification of a SealedSecret
|
||||
properties:
|
||||
data:
|
||||
description: Data is deprecated and will be removed eventually. Use
|
||||
per-value EncryptedData instead.
|
||||
format: byte
|
||||
type: string
|
||||
encryptedData:
|
||||
additionalProperties:
|
||||
type: string
|
||||
type: object
|
||||
x-kubernetes-preserve-unknown-fields: true
|
||||
template:
|
||||
description: Template defines the structure of the Secret that will
|
||||
be created from this sealed secret.
|
||||
properties:
|
||||
data:
|
||||
additionalProperties:
|
||||
type: string
|
||||
description: Keys that should be templated using decrypted data
|
||||
nullable: true
|
||||
type: object
|
||||
metadata:
|
||||
description: 'Standard object''s metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata'
|
||||
nullable: true
|
||||
properties:
|
||||
annotations:
|
||||
additionalProperties:
|
||||
type: string
|
||||
type: object
|
||||
finalizers:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
labels:
|
||||
additionalProperties:
|
||||
type: string
|
||||
type: object
|
||||
name:
|
||||
type: string
|
||||
namespace:
|
||||
type: string
|
||||
type: object
|
||||
x-kubernetes-preserve-unknown-fields: true
|
||||
type:
|
||||
description: Used to facilitate programmatic handling of secret
|
||||
data.
|
||||
type: string
|
||||
type: object
|
||||
required:
|
||||
- encryptedData
|
||||
type: object
|
||||
status:
|
||||
description: SealedSecretStatus is the most recently observed status of
|
||||
the SealedSecret.
|
||||
properties:
|
||||
conditions:
|
||||
description: Represents the latest available observations of a sealed
|
||||
secret's current state.
|
||||
items:
|
||||
description: SealedSecretCondition describes the state of a sealed
|
||||
secret at a certain point.
|
||||
properties:
|
||||
lastTransitionTime:
|
||||
description: Last time the condition transitioned from one status
|
||||
to another.
|
||||
format: date-time
|
||||
type: string
|
||||
lastUpdateTime:
|
||||
description: The last time this condition was updated.
|
||||
format: date-time
|
||||
type: string
|
||||
message:
|
||||
description: A human readable message indicating details about
|
||||
the transition.
|
||||
type: string
|
||||
reason:
|
||||
description: The reason for the condition's last transition.
|
||||
type: string
|
||||
status:
|
||||
description: 'Status of the condition for a sealed secret. Valid
|
||||
values for "Synced": "True", "False", or "Unknown".'
|
||||
type: string
|
||||
type:
|
||||
description: 'Type of condition for a sealed secret. Valid value:
|
||||
"Synced"'
|
||||
type: string
|
||||
required:
|
||||
- status
|
||||
- type
|
||||
type: object
|
||||
type: array
|
||||
observedGeneration:
|
||||
description: ObservedGeneration reflects the generation most recently
|
||||
observed by the sealed-secrets controller.
|
||||
format: int64
|
||||
type: integer
|
||||
type: object
|
||||
required:
|
||||
- spec
|
||||
type: object
|
||||
served: true
|
||||
storage: true
|
||||
subresources:
|
||||
status: {}
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
annotations: {}
|
||||
labels:
|
||||
name: sealed-secrets-controller
|
||||
name: sealed-secrets-controller
|
||||
namespace: kube-system
|
||||
spec:
|
||||
ports:
|
||||
- port: 8080
|
||||
targetPort: 8080
|
||||
selector:
|
||||
name: sealed-secrets-controller
|
||||
type: ClusterIP
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRoleBinding
|
||||
metadata:
|
||||
annotations: {}
|
||||
labels:
|
||||
name: sealed-secrets-controller
|
||||
name: sealed-secrets-controller
|
||||
roleRef:
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
kind: ClusterRole
|
||||
name: secrets-unsealer
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: sealed-secrets-controller
|
||||
namespace: kube-system
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
annotations: {}
|
||||
labels:
|
||||
name: sealed-secrets-controller
|
||||
name: sealed-secrets-controller
|
||||
namespace: kube-system
|
2
infrastructure/traefik-system/config.values.yaml
Normal file
2
infrastructure/traefik-system/config.values.yaml
Normal file
@ -0,0 +1,2 @@
|
||||
name: traefik
|
||||
chart: traefik/traefik
|
87
infrastructure/traefik-system/configmap.yml
Normal file
87
infrastructure/traefik-system/configmap.yml
Normal file
@ -0,0 +1,87 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: traefik-config
|
||||
namespace: traefik-system
|
||||
data:
|
||||
traefik.toml: |
|
||||
[ping]
|
||||
|
||||
[global]
|
||||
checkNewVersion = true
|
||||
sendAnonymousUsage = false
|
||||
|
||||
[log]
|
||||
level = "INFO"
|
||||
|
||||
[accessLog]
|
||||
# format = "json"
|
||||
# filePath = "/var/log/traefik/access.log"
|
||||
[accessLog.fields]
|
||||
defaultMode = "keep"
|
||||
[accessLog.fields.names]
|
||||
"RequestProtocol" = "drop"
|
||||
"level" = "drop"
|
||||
"RequestContentSize" = "drop"
|
||||
"RequestScheme" = "drop"
|
||||
"StartLocal" = "drop"
|
||||
"StartUTC" = "drop"
|
||||
# ClientUsername: drop
|
||||
# DownstreamStatusLine: drop
|
||||
# RequestAddr: drop
|
||||
# RequestCount: drop
|
||||
# RequestHost: drop
|
||||
# RequestLine: drop
|
||||
# UpstreamAddr: drop
|
||||
# UpstreamStatusLine: drop
|
||||
# duration: drop
|
||||
# msg: drop
|
||||
# time: drop
|
||||
# upstream: drop
|
||||
# user_agent: drop
|
||||
[api]
|
||||
dashboard = true
|
||||
insecure = true
|
||||
debug = false
|
||||
|
||||
[providers]
|
||||
[providers.kubernetesCRD]
|
||||
allowCrossNamespace = true
|
||||
[providers.kubernetesIngress]
|
||||
allowExternalNameServices = true
|
||||
ingressClass = "traefik"
|
||||
|
||||
[serversTransport]
|
||||
insecureSkipVerify = true
|
||||
|
||||
[entryPoints]
|
||||
[entryPoints.web]
|
||||
address = ":8000"
|
||||
[entryPoints.web.http]
|
||||
[entryPoints.web.http.redirections]
|
||||
[entryPoints.web.http.redirections.entryPoint]
|
||||
to = ":443" # should be the same as websecure but the loadbalancer maps 443 -> 8443
|
||||
scheme = "https"
|
||||
|
||||
[entryPoints.websecure]
|
||||
address = ":8443"
|
||||
[entryPoints.metrics]
|
||||
address = ":9100"
|
||||
[entryPoints.traefik]
|
||||
address = ":9000"
|
||||
|
||||
[metrics]
|
||||
[metrics.influxDB2]
|
||||
address = "http://influxdb-influxdb2.monitoring:80"
|
||||
token = "N_jNm1hZTfyhJneTJj2G357mQ7EJdNzdvebjSJX6JkbyaXNup_IAqeYowblMgV8EjLypNvauTl27ewJvI_rbqQ=="
|
||||
org = "influxdata"
|
||||
bucket = "kluster"
|
||||
|
||||
[certificatesResolvers.default-tls.acme]
|
||||
email = "me@moll.re"
|
||||
storage = "/certs/acme.json"
|
||||
[certificatesResolvers.default-tls.acme.tlsChallenge]
|
||||
|
||||
[experimental.plugins.traefik-plugin-geoblock]
|
||||
moduleName = "github.com/nscuro/traefik-plugin-geoblock"
|
||||
version = "v0.10.0"
|
33
infrastructure/traefik-system/pvc.yaml
Normal file
33
infrastructure/traefik-system/pvc.yaml
Normal file
@ -0,0 +1,33 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
namespace: traefik-system
|
||||
name: traefik-certificate
|
||||
labels:
|
||||
directory: traefik
|
||||
spec:
|
||||
storageClassName: fast
|
||||
capacity:
|
||||
storage: "10Mi"
|
||||
volumeMode: Filesystem
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
nfs:
|
||||
path: /export/kluster/traefik/certs
|
||||
server: 192.168.1.157
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
namespace: traefik-system
|
||||
name: traefik-certificate
|
||||
spec:
|
||||
storageClassName: fast
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: "10Mi"
|
||||
selector:
|
||||
matchLabels:
|
||||
directory: traefik
|
@ -0,0 +1,2 @@
|
||||
name: telegraf-traefik
|
||||
chart: influxdata/telegraf
|
151
infrastructure/traefik-system/telegraf.values.yaml
Normal file
151
infrastructure/traefik-system/telegraf.values.yaml
Normal file
@ -0,0 +1,151 @@
|
||||
## Default values.yaml for Telegraf
|
||||
## This is a YAML-formatted file.
|
||||
## ref: https://hub.docker.com/r/library/telegraf/tags/
|
||||
|
||||
replicaCount: 1
|
||||
image:
|
||||
repo: "telegraf"
|
||||
tag: "1.24"
|
||||
pullPolicy: IfNotPresent
|
||||
podAnnotations: {}
|
||||
podLabels: {}
|
||||
imagePullSecrets: []
|
||||
## Configure args passed to Telegraf containers
|
||||
args: []
|
||||
# The name of a secret in the same kubernetes namespace which contains values to
|
||||
# be added to the environment (must be manually created)
|
||||
# This can be useful for auth tokens, etc.
|
||||
|
||||
# envFromSecret: "telegraf-tokens"
|
||||
env:
|
||||
- name: HOSTNAME
|
||||
value: "telegraf-polling-service"
|
||||
# An older "volumeMounts" key was previously added which will likely
|
||||
# NOT WORK as you expect. Please use this newer configuration.
|
||||
|
||||
volumes:
|
||||
- name: traefik-logs
|
||||
persistentVolumeClaim:
|
||||
claimName: traefik-logs
|
||||
mountPoints:
|
||||
- name: traefik-logs
|
||||
mountPath: /traefik_logs
|
||||
|
||||
|
||||
## Node labels for pod assignment
|
||||
## ref: https://kubernetes.io/docs/user-guide/node-selection/
|
||||
nodeSelector: {}
|
||||
## Affinity for pod assignment
|
||||
## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
|
||||
##
|
||||
affinity: # to read the traefik logs the pod must be on the same node as traefik
|
||||
podAffinity:
|
||||
requiredDuringSchedulingIgnoredDuringExecution:
|
||||
- labelSelector:
|
||||
matchExpressions: # matches labels: app.kubernetes.io/name=traefik
|
||||
- key: app.kubernetes.io/name
|
||||
operator: In
|
||||
values:
|
||||
- traefik
|
||||
topologyKey: "kubernetes.io/hostname"
|
||||
|
||||
## Tolerations for pod assignment
|
||||
## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
|
||||
##
|
||||
tolerations: []
|
||||
# - key: "key"
|
||||
# operator: "Equal|Exists"
|
||||
# value: "value"
|
||||
# effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
|
||||
|
||||
service:
|
||||
enabled: false
|
||||
type: ClusterIP
|
||||
annotations: {}
|
||||
rbac:
|
||||
# Specifies whether RBAC resources should be created
|
||||
create: true
|
||||
# Create only for the release namespace or cluster wide (Role vs ClusterRole)
|
||||
clusterWide: false
|
||||
# Rules for the created rule
|
||||
rules: []
|
||||
# When using the prometheus input to scrape all pods you need extra rules set to the ClusterRole to be
|
||||
# able to scan the pods for scraping labels. The following rules have been taken from:
|
||||
# https://github.com/helm/charts/blob/master/stable/prometheus/templates/server-clusterrole.yaml#L8-L46
|
||||
# - apiGroups:
|
||||
# - ""
|
||||
# resources:
|
||||
# - nodes
|
||||
# - nodes/proxy
|
||||
# - nodes/metrics
|
||||
# - services
|
||||
# - endpoints
|
||||
# - pods
|
||||
# - ingresses
|
||||
# - configmaps
|
||||
# verbs:
|
||||
# - get
|
||||
# - list
|
||||
# - watch
|
||||
# - apiGroups:
|
||||
# - "extensions"
|
||||
# resources:
|
||||
# - ingresses/status
|
||||
# - ingresses
|
||||
# verbs:
|
||||
# - get
|
||||
# - list
|
||||
# - watch
|
||||
# - nonResourceURLs:
|
||||
# - "/metrics"
|
||||
# verbs:
|
||||
# - get
|
||||
|
||||
serviceAccount:
|
||||
# Specifies whether a ServiceAccount should be created
|
||||
create: true
|
||||
# The name of the ServiceAccount to use.
|
||||
# If not set and create is true, a name is generated using the fullname template
|
||||
name:
|
||||
# Annotations for the ServiceAccount
|
||||
annotations: {}
|
||||
## Exposed telegraf configuration
|
||||
## For full list of possible values see `/docs/all-config-values.yaml` and `/docs/all-config-values.toml`
|
||||
## ref: https://docs.influxdata.com/telegraf/v1.1/administration/configuration/
|
||||
config:
|
||||
agent:
|
||||
interval: "10s"
|
||||
round_interval: true
|
||||
metric_batch_size: 1000
|
||||
metric_buffer_limit: 10000
|
||||
collection_jitter: "0s"
|
||||
flush_interval: "10s"
|
||||
flush_jitter: "0s"
|
||||
precision: ""
|
||||
debug: false
|
||||
quiet: false
|
||||
logfile: ""
|
||||
hostname: "$HOSTNAME"
|
||||
omit_hostname: true
|
||||
# processors:
|
||||
# - enum:
|
||||
# mapping:
|
||||
# field: "status"
|
||||
# dest: "status_code"-+
|
||||
# value_mappings:
|
||||
# healthy: 1
|
||||
# problem: 2
|
||||
# critical: 3
|
||||
outputs:
|
||||
- influxdb_v2:
|
||||
urls:
|
||||
- "http://influxdb-influxdb2.monitoring:80"
|
||||
token: N_jNm1hZTfyhJneTJj2G357mQ7EJdNzdvebjSJX6JkbyaXNup_IAqeYowblMgV8EjLypNvauTl27ewJvI_rbqQ==
|
||||
organization: "influxdata"
|
||||
bucket: "kluster"
|
||||
# retention_policy: "2w"
|
||||
inputs:
|
||||
- docker_log:
|
||||
endpoint: "unix:///var/run/docker.sock"
|
||||
from_beginning: false
|
||||
container_name_include: ["traefik"]
|
241
infrastructure/traefik-system/values.yaml
Normal file
241
infrastructure/traefik-system/values.yaml
Normal file
@ -0,0 +1,241 @@
|
||||
# Default values for Traefik
|
||||
image:
|
||||
name: traefik
|
||||
# defaults to appVersion
|
||||
tag: ""
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
|
||||
#
|
||||
# Configure the deployment
|
||||
#
|
||||
deployment:
|
||||
enabled: true
|
||||
# Can be either Deployment or DaemonSet
|
||||
kind: Deployment
|
||||
# Number of pods of the deployment (only applies when kind == Deployment)
|
||||
replicas: 1
|
||||
# Number of old history to retain to allow rollback (If not set, default Kubernetes value is set to 10)
|
||||
# revisionHistoryLimit: 1
|
||||
# Amount of time (in seconds) before Kubernetes will send the SIGKILL signal if Traefik does not shut down
|
||||
terminationGracePeriodSeconds: 60
|
||||
# The minimum number of seconds Traefik needs to be up and running before the DaemonSet/Deployment controller considers it available
|
||||
minReadySeconds: 0
|
||||
# Additional deployment annotations (e.g. for jaeger-operator sidecar injection)
|
||||
annotations: {}
|
||||
# Additional deployment labels (e.g. for filtering deployment by custom labels)
|
||||
labels: {}
|
||||
# Additional pod annotations (e.g. for mesh injection or prometheus scraping)
|
||||
podAnnotations: {}
|
||||
# Additional Pod labels (e.g. for filtering Pod by custom labels)
|
||||
podLabels: {}
|
||||
# Additional containers (e.g. for metric offloading sidecars)
|
||||
additionalContainers: []
|
||||
# https://docs.datadoghq.com/developers/dogstatsd/unix_socket/?tab=host
|
||||
# - name: socat-proxy
|
||||
# image: alpine/socat:1.0.5
|
||||
# args: ["-s", "-u", "udp-recv:8125", "unix-sendto:/socket/socket"]
|
||||
# volumeMounts:
|
||||
# - name: dsdsocket
|
||||
# mountPath: /socket
|
||||
# Additional volumes available for use with initContainers and additionalContainers
|
||||
additionalVolumes:
|
||||
# - name: traefik-logs
|
||||
# persistentVolumeClaim:
|
||||
# claimName: traefik-logs
|
||||
- name: traefik-certificate
|
||||
persistentVolumeClaim:
|
||||
claimName: traefik-certificate
|
||||
- name: traefik-config
|
||||
configMap:
|
||||
name: traefik-config
|
||||
# - name: dsdsocket
|
||||
# hostPath:
|
||||
# path: /var/run/statsd-exporter
|
||||
# Additional initContainers (e.g. for setting file permission as shown below)
|
||||
initContainers: []
|
||||
# The "volume-permissions" init container is required if you run into permission issues.
|
||||
# Related issue: https://github.com/traefik/traefik/issues/6972
|
||||
# - name: volume-permissions
|
||||
# image: busybox:1.31.1
|
||||
# command: ["sh", "-c", "chmod -Rv 600 /data/*"]
|
||||
# volumeMounts:
|
||||
# - name: data
|
||||
# mountPath: /data
|
||||
# Use process namespace sharing
|
||||
shareProcessNamespace: false
|
||||
# Custom pod DNS policy. Apply if `hostNetwork: true`
|
||||
# dnsPolicy: ClusterFirstWithHostNet
|
||||
# Additional imagePullSecrets
|
||||
imagePullSecrets: []
|
||||
# - name: myRegistryKeySecretName
|
||||
|
||||
|
||||
# Use ingressClass. Ignored if Traefik version < 2.3 / kubernetes < 1.18.x
|
||||
ingressClass:
|
||||
# true is not unit-testable yet, pending https://github.com/rancher/helm-unittest/pull/12
|
||||
enabled: true
|
||||
isDefaultClass: true
|
||||
# Use to force a networking.k8s.io API Version for certain CI/CD applications. E.g. "v1beta1"
|
||||
fallbackApiVersion: ""
|
||||
|
||||
# Activate Pilot integration
|
||||
pilot:
|
||||
enabled: false
|
||||
token: ""
|
||||
# Toggle Pilot Dashboard
|
||||
# dashboard: false
|
||||
|
||||
# Enable experimental features
|
||||
experimental:
|
||||
http3:
|
||||
enabled: false
|
||||
plugins:
|
||||
enabled: false
|
||||
|
||||
kubernetesGateway:
|
||||
enabled: false
|
||||
# certificate:
|
||||
# group: "core"
|
||||
# kind: "Secret"
|
||||
# name: "mysecret"
|
||||
# By default, Gateway would be created to the Namespace you are deploying Traefik to.
|
||||
# You may create that Gateway in another namespace, setting its name below:
|
||||
# namespace: default
|
||||
|
||||
# Create an IngressRoute for the dashboard
|
||||
ingressRoute:
|
||||
dashboard:
|
||||
enabled: false
|
||||
# Additional ingressRoute annotations (e.g. for kubernetes.io/ingress.class)
|
||||
annotations: {}
|
||||
# Additional ingressRoute labels (e.g. for filtering IngressRoute by custom labels)
|
||||
labels: {}
|
||||
|
||||
|
||||
|
||||
#
|
||||
# Configure providers
|
||||
#
|
||||
providers:
|
||||
kubernetesCRD:
|
||||
enabled: true
|
||||
allowCrossNamespace: false
|
||||
allowExternalNameServices: true
|
||||
allowEmptyServices: false
|
||||
# ingressClass: traefik-internal
|
||||
# labelSelector: environment=production,method=traefik
|
||||
namespaces: []
|
||||
# - "default"
|
||||
|
||||
kubernetesIngress:
|
||||
enabled: true
|
||||
allowExternalNameServices: true
|
||||
allowEmptyServices: false
|
||||
ingressClass: traefik
|
||||
# labelSelector: environment=production,method=traefik
|
||||
namespaces: []
|
||||
# - "default"
|
||||
# IP used for Kubernetes Ingress endpoints
|
||||
publishedService:
|
||||
enabled: false
|
||||
# Published Kubernetes Service to copy status from. Format: namespace/servicename
|
||||
# By default this Traefik service
|
||||
# pathOverride: ""
|
||||
|
||||
|
||||
# Add volumes to the traefik pod. The volume name will be passed to tpl.
|
||||
# This can be used to mount a cert pair or a configmap that holds a config.toml file.
|
||||
# After the volume has been mounted, add the configs into traefik by using the `additionalArguments` list below, eg:
|
||||
# additionalArguments:
|
||||
# - "--providers.file.filename=/config/dynamic.toml"
|
||||
# - "--ping"
|
||||
# - "--ping.entrypoint=web"
|
||||
volumes: []
|
||||
# - name: traefik-config
|
||||
# mountPath: /config
|
||||
# configMap:
|
||||
# name: traefik-config
|
||||
|
||||
|
||||
# - name: public-cert
|
||||
# mountPath: "/certs"
|
||||
# type: secret
|
||||
# - name: '{{ printf "%s-configs" .Release.Name }}'
|
||||
# mountPath: "/config"
|
||||
# type: configMap
|
||||
|
||||
# Additional volumeMounts to add to the Traefik container
|
||||
additionalVolumeMounts:
|
||||
# - name: traefik-logs
|
||||
# mountPath: /var/log/traefik
|
||||
# nfs:
|
||||
# server: 192.168.1.157
|
||||
# path: /kluster/traefik
|
||||
# # For instance when using a logshipper for access logs
|
||||
# - name: traefik-logs
|
||||
# # claimName: traefik-logs
|
||||
# mountPath: /var/log/traefik
|
||||
- name: traefik-certificate
|
||||
# claimName: traefik-certificate
|
||||
mountPath: /certs
|
||||
- name: traefik-config
|
||||
mountPath: /config
|
||||
|
||||
|
||||
globalArguments:
|
||||
- "--configfile=/config/traefik.toml"
|
||||
|
||||
additionalArguments: []
|
||||
|
||||
# Environment variables to be passed to Traefik's binary
|
||||
env:
|
||||
- name: TZ
|
||||
value: "Europe/Berlin"
|
||||
# - name: SOME_VAR
|
||||
# value: some-var-value
|
||||
# - name: SOME_VAR_FROM_CONFIG_MAP
|
||||
# valueFrom:
|
||||
# configMapRef:
|
||||
# name: configmap-name
|
||||
# key: config-key
|
||||
# - name: SOME_SECRET
|
||||
# valueFrom:
|
||||
# secretKeyRef:
|
||||
# name: secret-name
|
||||
# key: secret-key
|
||||
|
||||
|
||||
|
||||
|
||||
# Configure ports
|
||||
ports: {} # leave unconfigured to use the values from the toml file
|
||||
|
||||
|
||||
envFrom: []
|
||||
# - configMapRef:
|
||||
# name: config-map-name
|
||||
# - secretRef:
|
||||
# name: secret-name
|
||||
|
||||
|
||||
tlsOptions: {}
|
||||
|
||||
# Options for the main traefik service, where the entrypoints traffic comes
|
||||
# from.
|
||||
service:
|
||||
enabled: true
|
||||
type: LoadBalancer
|
||||
# Additional annotations applied to both TCP and UDP services (e.g. for cloud provider specific config)
|
||||
annotations: {}
|
||||
# Additional annotations for TCP service only
|
||||
annotationsTCP: {}
|
||||
# Additional annotations for UDP service only
|
||||
annotationsUDP: {}
|
||||
# Additional service labels (e.g. for filtering Service by custom labels)
|
||||
labels: {}
|
||||
# Additional entries here will be added to the service spec.
|
||||
# Cannot contain type, selector or ports entries.
|
||||
spec:
|
||||
# externalTrafficPolicy: Local
|
||||
loadBalancerIP: 192.168.3.1
|
56
kluster/flux-system/dashboard.yaml
Normal file
56
kluster/flux-system/dashboard.yaml
Normal file
@ -0,0 +1,56 @@
|
||||
apiVersion: source.toolkit.fluxcd.io/v1beta2
|
||||
kind: HelmRepository
|
||||
metadata:
|
||||
annotations:
|
||||
metadata.weave.works/description: This is the source location for the Weave GitOps
|
||||
Dashboard's helm chart.
|
||||
labels:
|
||||
app.kubernetes.io/component: ui
|
||||
app.kubernetes.io/created-by: weave-gitops-cli
|
||||
app.kubernetes.io/name: weave-gitops-dashboard
|
||||
app.kubernetes.io/part-of: weave-gitops
|
||||
name: flux-dashboard
|
||||
namespace: flux-system
|
||||
spec:
|
||||
interval: 1h0m0s
|
||||
type: oci
|
||||
url: oci://ghcr.io/weaveworks/charts
|
||||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2beta1
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
annotations:
|
||||
metadata.weave.works/description: This is the Weave GitOps Dashboard. It provides
|
||||
a simple way to get insights into your GitOps workloads.
|
||||
name: flux-dashboard
|
||||
namespace: flux-system
|
||||
spec:
|
||||
chart:
|
||||
spec:
|
||||
chart: weave-gitops
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: flux-dashboard
|
||||
interval: 1h0m0s
|
||||
values:
|
||||
adminUser:
|
||||
create: true
|
||||
passwordHash: $2a$10$k0UXfoFU9qbQQYOD/fJWY.Wlr5z9YVTyC0WrnOk50QhKuo1Y0SZoK
|
||||
username: admin
|
||||
# ---
|
||||
# apiVersion: traefik.containo.us/v1alpha1
|
||||
# kind: IngressRoute
|
||||
# metadata:
|
||||
# namespace: flux-system
|
||||
# name: flux-ingressroute
|
||||
# spec:
|
||||
# entryPoints:
|
||||
# - websecure
|
||||
# routes:
|
||||
# - match: Host(`flux.kluster.moll.re`)
|
||||
# kind: Rule
|
||||
# services:
|
||||
# - name: flux-dashboard-weave-gitops
|
||||
# port: 9001
|
||||
# tls:
|
||||
# certResolver: default-tls
|
75
kluster/journal/deploymentreference.yaml
Normal file
75
kluster/journal/deploymentreference.yaml
Normal file
@ -0,0 +1,75 @@
|
||||
apiVersion: source.toolkit.fluxcd.io/v1
|
||||
kind: GitRepository
|
||||
metadata:
|
||||
name: journal-bot
|
||||
namespace: flux-system
|
||||
spec:
|
||||
interval: 1m0s
|
||||
ref:
|
||||
branch: main
|
||||
secretRef:
|
||||
name: journal-bot
|
||||
timeout: 60s
|
||||
url: ssh://git@git.kluster.moll.re:2222/remoll/journal-bot.git
|
||||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: journal-bot-kustomize
|
||||
namespace: flux-system
|
||||
spec:
|
||||
force: true
|
||||
interval: 1m0s
|
||||
path: ./deployment/overlays/main
|
||||
prune: false
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
name: journal-bot
|
||||
|
||||
---
|
||||
apiVersion: image.toolkit.fluxcd.io/v1beta2
|
||||
kind: ImageRepository
|
||||
metadata:
|
||||
name: journal-bot-registry
|
||||
namespace: flux-system
|
||||
spec:
|
||||
image: registry.hub.docker.com/mollre/journal-bot
|
||||
interval: 15m
|
||||
|
||||
---
|
||||
apiVersion: image.toolkit.fluxcd.io/v1beta2
|
||||
kind: ImagePolicy
|
||||
metadata:
|
||||
name: journal-bot-imagerange
|
||||
namespace: flux-system
|
||||
spec:
|
||||
imageRepositoryRef:
|
||||
name: journal-bot-registry
|
||||
policy:
|
||||
semver:
|
||||
range: 1.x.x
|
||||
---
|
||||
apiVersion: image.toolkit.fluxcd.io/v1beta1
|
||||
kind: ImageUpdateAutomation
|
||||
metadata:
|
||||
name: journal-bot-automation
|
||||
namespace: flux-system
|
||||
spec:
|
||||
interval: 30m
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
name: journal-bot
|
||||
git:
|
||||
checkout:
|
||||
ref:
|
||||
branch: main
|
||||
commit:
|
||||
author:
|
||||
email: flux@moll.re
|
||||
name: fluxcdbot
|
||||
messageTemplate: '[CI SKIP] Bump {{range .Updated.Images}}{{println .}}{{end}}'
|
||||
push:
|
||||
branch: main
|
||||
update:
|
||||
path: ./deployment/base/deployment.yaml
|
||||
strategy: Setters
|
20
kluster/whoami/deploymentreference.yaml
Normal file
20
kluster/whoami/deploymentreference.yaml
Normal file
@ -0,0 +1,20 @@
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: whoami-kustomize
|
||||
namespace: flux-system
|
||||
spec:
|
||||
force: true
|
||||
interval: 1m0s
|
||||
path: ./whoami/overlays/main
|
||||
prune: false
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
name: k3s-app-collection
|
||||
|
||||
|
||||
|
||||
# apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
# kind: HelmRelease
|
||||
# ...
|
||||
|
34
unused/aio.deployment.yaml
Normal file
34
unused/aio.deployment.yaml
Normal file
@ -0,0 +1,34 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: aio
|
||||
namespace: aio
|
||||
labels:
|
||||
app: aio
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: aio
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: aio
|
||||
spec:
|
||||
containers:
|
||||
- name: aio
|
||||
image: mollre/aio:latest
|
||||
tty: true
|
||||
volumeMounts:
|
||||
- mountPath: /keys/
|
||||
name: aio-nfs
|
||||
resources:
|
||||
requests:
|
||||
memory: "250Mi"
|
||||
cpu: 0.5
|
||||
|
||||
|
||||
volumes:
|
||||
- name: aio-nfs
|
||||
persistentVolumeClaim:
|
||||
claimName: aio-nfs
|
34
unused/aio.pvc.yaml
Normal file
34
unused/aio.pvc.yaml
Normal file
@ -0,0 +1,34 @@
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
namespace: aio
|
||||
name: "aio-nfs"
|
||||
labels:
|
||||
directory: "aio"
|
||||
spec:
|
||||
storageClassName: fast
|
||||
capacity:
|
||||
storage: "100Mi"
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
nfs:
|
||||
path: /aio
|
||||
server: 10.43.239.43 # assigned to nfs-server service. Won't change as long as service is not redeployed
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
namespace: aio
|
||||
name: "aio-nfs"
|
||||
spec:
|
||||
storageClassName: "fast"
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: "100Mi"
|
||||
selector:
|
||||
matchLabels:
|
||||
directory: "aio"
|
114
unused/anki/deployment.yaml
Normal file
114
unused/anki/deployment.yaml
Normal file
@ -0,0 +1,114 @@
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: anki
|
||||
|
||||
---
|
||||
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: anki
|
||||
namespace: anki
|
||||
labels:
|
||||
app: anki
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: anki
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: anki
|
||||
spec:
|
||||
containers:
|
||||
- name: anki-server
|
||||
image: ankicommunity/anki-sync-server:20220516
|
||||
tty: true
|
||||
volumeMounts:
|
||||
- mountPath: /app/data
|
||||
name: anki-data-nfs
|
||||
resources:
|
||||
requests:
|
||||
memory: "250Mi"
|
||||
cpu: 0.5
|
||||
nodeSelector:
|
||||
kubernetes.io/arch: amd64
|
||||
|
||||
|
||||
volumes:
|
||||
- name: anki-data-nfs
|
||||
persistentVolumeClaim:
|
||||
claimName: anki-data-nfs
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: anki-http
|
||||
namespace: anki
|
||||
spec:
|
||||
selector:
|
||||
app: anki
|
||||
ports:
|
||||
- protocol: TCP
|
||||
port: 27701
|
||||
targetPort: 27701
|
||||
type: ClusterIP
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
namespace: anki
|
||||
name: "anki-data-nfs"
|
||||
labels:
|
||||
directory: "anki"
|
||||
spec:
|
||||
storageClassName: fast
|
||||
capacity:
|
||||
storage: "100Mi"
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
nfs:
|
||||
path: /anki
|
||||
server: 10.43.239.43 # assigned to nfs-server service. Won't change as long as service is not redeployed
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
namespace: anki
|
||||
name: "anki-data-nfs"
|
||||
spec:
|
||||
storageClassName: "fast"
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: "100Mi"
|
||||
selector:
|
||||
matchLabels:
|
||||
directory: "anki"
|
||||
|
||||
|
||||
---
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: anki-ingress
|
||||
namespace: anki
|
||||
spec:
|
||||
entryPoints:
|
||||
- websecure
|
||||
routes:
|
||||
- match: Host(`anki.kluster.moll.re`)
|
||||
kind: Rule
|
||||
services:
|
||||
- name: anki-http
|
||||
port: 27701
|
||||
tls:
|
||||
certResolver: default-tls
|
||||
|
||||
|
92
unused/anonaddy.values.yaml
Normal file
92
unused/anonaddy.values.yaml
Normal file
@ -0,0 +1,92 @@
|
||||
#
|
||||
# IMPORTANT NOTE
|
||||
#
|
||||
# This chart inherits from our common library chart. You can check the default values/options here:
|
||||
# https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common/values.yaml
|
||||
#
|
||||
|
||||
image:
|
||||
# -- image repository
|
||||
repository: anonaddy/anonaddy
|
||||
# -- image tag
|
||||
tag: 0.11.2
|
||||
# -- image pull policy
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
strategy:
|
||||
type: Recreate
|
||||
|
||||
# -- environment variables. See more environment variables in the [anonaddy documentation](https://github.com/anonaddy/docker#environment-variables).
|
||||
# @default -- See below
|
||||
env:
|
||||
TZ: "Europe/Berlin"
|
||||
# -- Application key for encrypter service
|
||||
# You can generate one through `anonaddy key:generate --show` or `echo "base64:$(openssl rand -base64 32)"`
|
||||
APP_KEY:
|
||||
# -- Root domain to receive email from
|
||||
ANONADDY_DOMAIN: anonaddy.kluster.moll.re
|
||||
# -- Long random string used when hashing data for the anonymous replies
|
||||
ANONADDY_SECRET:
|
||||
|
||||
# -- Configures service settings for the chart.
|
||||
# @default -- See values.yaml
|
||||
service:
|
||||
main:
|
||||
ports:
|
||||
http:
|
||||
port: 8000
|
||||
smtp:
|
||||
enabled: true
|
||||
port: 25
|
||||
type: LoadBalancer
|
||||
|
||||
ingress:
|
||||
# -- Enable and configure ingress settings for the chart under this key.
|
||||
# @default -- See values.yaml
|
||||
main:
|
||||
enabled: true
|
||||
annotations:
|
||||
kubernetes.io/ingress.class: nginx
|
||||
cert-manager.io/cluster-issuer: cloudflare-letsencrypt-prod
|
||||
hosts:
|
||||
- host: anonaddy.kluster.moll.re
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
service:
|
||||
port: 8000
|
||||
tls:
|
||||
- hosts:
|
||||
- anonaddy.kluster.moll.re
|
||||
secretName: cloudflare-letsencrypt-issuer-account-key
|
||||
|
||||
# -- Configure persistence settings for the chart under this key.
|
||||
# @default -- See values.yaml
|
||||
persistence:
|
||||
config:
|
||||
enabled: false
|
||||
emptydir:
|
||||
enabled: false
|
||||
|
||||
# https://github.com/bitnami/charts/tree/master/bitnami/mariadb/#installing-the-chart
|
||||
mariadb:
|
||||
enabled: true
|
||||
image:
|
||||
name: arm64v8/mariadb:latest
|
||||
pullSecrets: []
|
||||
# primary:
|
||||
# persistence:
|
||||
# enabled: true
|
||||
# auth:
|
||||
# username: "username"
|
||||
# password: "password"
|
||||
# database: database
|
||||
|
||||
# -- Enable and configure redis subchart under this key.
|
||||
# For more options see [redis chart documentation](https://github.com/bitnami/charts/tree/master/bitnami/redis)
|
||||
# @default -- See values.yaml
|
||||
redis:
|
||||
enabled: false
|
||||
# auth:
|
||||
# enabled: false
|
||||
|
119
unused/archive.deployment.yaml
Normal file
119
unused/archive.deployment.yaml
Normal file
@ -0,0 +1,119 @@
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: archive
|
||||
labels:
|
||||
app: archive
|
||||
|
||||
---
|
||||
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
namespace: archive
|
||||
name: archive-data-nfs
|
||||
labels:
|
||||
directory: archive
|
||||
spec:
|
||||
storageClassName: fast
|
||||
capacity:
|
||||
storage: "100Gi"
|
||||
volumeMode: Filesystem
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
nfs:
|
||||
path: /helbing_archive
|
||||
server: 10.43.239.43 # assigned to nfs-server service. Won't change as long as service is not redeployed
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
namespace: archive
|
||||
name: archive-data-nfs
|
||||
spec:
|
||||
storageClassName: fast
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: "100Gi"
|
||||
selector:
|
||||
matchLabels:
|
||||
directory: archive
|
||||
|
||||
---
|
||||
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: archive
|
||||
namespace: archive
|
||||
labels:
|
||||
app: archive
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: archive
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: archive
|
||||
spec:
|
||||
containers:
|
||||
- name: archive
|
||||
image: archivebox/archivebox
|
||||
tty: true
|
||||
ports:
|
||||
- containerPort: 8000
|
||||
volumeMounts:
|
||||
- mountPath: /data
|
||||
name: archive-data
|
||||
|
||||
|
||||
volumes:
|
||||
- name: archive-data
|
||||
persistentVolumeClaim:
|
||||
claimName: archive-data-nfs
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: archive
|
||||
namespace: archive
|
||||
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- name: http
|
||||
port: 8000
|
||||
selector:
|
||||
app: archive
|
||||
|
||||
---
|
||||
|
||||
kind: Ingress
|
||||
apiVersion: networking.k8s.io/v1
|
||||
metadata:
|
||||
namespace: archive
|
||||
name: archive-ingress
|
||||
annotations:
|
||||
kubernetes.io/ingress.class: nginx
|
||||
cert-manager.io/cluster-issuer: cloudflare-letsencrypt-prod
|
||||
spec:
|
||||
tls:
|
||||
- hosts:
|
||||
- archive.kluster.moll.re
|
||||
secretName: cloudflare-letsencrypt-issuer-account-key
|
||||
rules:
|
||||
- host: archive.kluster.moll.re
|
||||
http:
|
||||
paths:
|
||||
- backend:
|
||||
service:
|
||||
name: archive
|
||||
port:
|
||||
number: 8000
|
||||
path: /
|
||||
pathType: Prefix
|
34
unused/authelia/pvc.yaml
Normal file
34
unused/authelia/pvc.yaml
Normal file
@ -0,0 +1,34 @@
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
namespace: authelia
|
||||
name: authelia-config-nfs
|
||||
labels:
|
||||
directory: authelia
|
||||
spec:
|
||||
storageClassName: fast
|
||||
capacity:
|
||||
storage: "1Gi"
|
||||
volumeMode: Filesystem
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
nfs:
|
||||
path: /authelia
|
||||
server: 10.43.239.43 # assigned to nfs-server service. Won't change as long as service is not redeployed
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
namespace: authelia
|
||||
name: authelia-config-nfs
|
||||
spec:
|
||||
storageClassName: fast
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: "1Gi"
|
||||
selector:
|
||||
matchLabels:
|
||||
directory: authelia
|
1235
unused/authelia/values.yaml
Normal file
1235
unused/authelia/values.yaml
Normal file
File diff suppressed because it is too large
Load Diff
34
unused/authentik/ingress.yml
Normal file
34
unused/authentik/ingress.yml
Normal file
@ -0,0 +1,34 @@
|
||||
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: authentik-ingress
|
||||
namespace: authentik
|
||||
spec:
|
||||
entryPoints:
|
||||
- websecure
|
||||
routes:
|
||||
- match: Host(`authentik.kluster.moll.re`)
|
||||
kind: Rule
|
||||
middlewares:
|
||||
- name: authentik-websocket
|
||||
services:
|
||||
- name: authentik
|
||||
port: 80
|
||||
tls:
|
||||
certResolver: default-tls
|
||||
|
||||
|
||||
---
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
kind: Middleware
|
||||
metadata:
|
||||
name: authentik-websocket
|
||||
namespace: authentik
|
||||
spec:
|
||||
headers:
|
||||
customRequestHeaders:
|
||||
X-Forwarded-Proto: "https"
|
||||
Upgrade: "websocket"
|
||||
|
||||
|
37
unused/authentik/pvc.yaml
Normal file
37
unused/authentik/pvc.yaml
Normal file
@ -0,0 +1,37 @@
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
namespace: authentik
|
||||
name: authentik-postgres-nfs
|
||||
labels:
|
||||
directory: authentik
|
||||
spec:
|
||||
storageClassName: slow
|
||||
capacity:
|
||||
storage: "5Gi"
|
||||
volumeMode: Filesystem
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
nfs:
|
||||
path: /export/kluster/authentik
|
||||
server: 192.168.1.157
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
namespace: authentik
|
||||
name: authentik-postgres-nfs
|
||||
spec:
|
||||
storageClassName: slow
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: "5Gi"
|
||||
selector:
|
||||
matchLabels:
|
||||
directory: authentik
|
||||
|
||||
|
||||
|
172
unused/authentik/values.yaml
Normal file
172
unused/authentik/values.yaml
Normal file
@ -0,0 +1,172 @@
|
||||
# -- Server replicas
|
||||
replicas: 1
|
||||
# -- Custom priority class for different treatment by the scheduler
|
||||
priorityClassName:
|
||||
# -- server securityContext
|
||||
securityContext: {}
|
||||
|
||||
worker:
|
||||
# -- worker replicas
|
||||
replicas: 1
|
||||
# -- Custom priority class for different treatment by the scheduler
|
||||
priorityClassName:
|
||||
# -- worker securityContext
|
||||
securityContext: {}
|
||||
|
||||
image:
|
||||
repository: ghcr.io/goauthentik/server
|
||||
tag: 2023.4.1
|
||||
pullPolicy: IfNotPresent
|
||||
pullSecrets: []
|
||||
|
||||
# -- See https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common#values
|
||||
initContainers: {}
|
||||
|
||||
# -- See https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common#values
|
||||
additionalContainers: {}
|
||||
|
||||
authentik:
|
||||
# -- Log level for server and worker
|
||||
log_level: info
|
||||
# -- Secret key used for cookie singing and unique user IDs,
|
||||
# don't change this after the first install
|
||||
secret_key: "K9F5uNx1gzsk3q5tnjwFabBYgjBJcAv0qM135QRgzL81hRg4"
|
||||
# -- Path for the geoip database. If the file doesn't exist, GeoIP features are disabled.
|
||||
geoip: /geoip/GeoLite2-City.mmdb
|
||||
# -- Mode for the avatars. Defaults to gravatar. Possible options 'gravatar' and 'none'
|
||||
avatars: gravatar
|
||||
|
||||
outposts:
|
||||
# -- Template used for managed outposts. The following placeholders can be used
|
||||
# %(type)s - the type of the outpost
|
||||
# %(version)s - version of your authentik install
|
||||
# %(build_hash)s - only for beta versions, the build hash of the image
|
||||
container_image_base: ghcr.io/goauthentik/%(type)s:%(version)s
|
||||
error_reporting:
|
||||
# -- This sends anonymous usage-data, stack traces on errors and
|
||||
# performance data to sentry.beryju.org, and is fully opt-in
|
||||
enabled: false
|
||||
# -- This is a string that is sent to sentry with your error reports
|
||||
environment: "k8s"
|
||||
# -- Send PII (Personally identifiable information) data to sentry
|
||||
send_pii: false
|
||||
|
||||
|
||||
postgresql:
|
||||
# -- set the postgresql hostname to talk to
|
||||
# if unset and .Values.postgresql.enabled == true, will generate the default
|
||||
# @default -- `{{ .Release.Name }}-postgresql`
|
||||
host: 'postgres-postgresql.postgres'
|
||||
# -- postgresql Database name
|
||||
# @default -- `authentik`
|
||||
name: "authentik"
|
||||
# -- postgresql Username
|
||||
# @default -- `authentik`
|
||||
user: "authentik"
|
||||
password: "authentik"
|
||||
port: 5432
|
||||
|
||||
|
||||
redis:
|
||||
# -- set the redis hostname to talk to
|
||||
# @default -- `{{ .Release.Name }}-redis-master`
|
||||
host: '{{ .Release.Name }}-redis-master'
|
||||
password: ""
|
||||
|
||||
# -- see configuration options at https://goauthentik.io/docs/installation/configuration/
|
||||
env: {}
|
||||
# AUTHENTIK_VAR_NAME: VALUE
|
||||
|
||||
envFrom: []
|
||||
# - configMapRef:
|
||||
# name: special-config
|
||||
|
||||
envValueFrom: {}
|
||||
# AUTHENTIK_VAR_NAME:
|
||||
# secretKeyRef:
|
||||
# key: password
|
||||
# name: my-secret
|
||||
|
||||
service:
|
||||
# -- Service that is created to access authentik
|
||||
enabled: true
|
||||
type: ClusterIP
|
||||
port: 80
|
||||
name: http
|
||||
protocol: TCP
|
||||
labels: {}
|
||||
annotations: {}
|
||||
|
||||
volumes: []
|
||||
|
||||
volumeMounts: []
|
||||
|
||||
# -- affinity applied to the deployments
|
||||
affinity: {}
|
||||
|
||||
# -- nodeSelector applied to the deployments
|
||||
|
||||
resources:
|
||||
server: {}
|
||||
worker: {}
|
||||
|
||||
# WARNING! When initially deploying, authentik has to do a few DB migrations. This may cause it to die from probe
|
||||
# failure, but will continue on reboot. You can disable this during deployment if this is not desired
|
||||
livenessProbe:
|
||||
# -- enables or disables the livenessProbe
|
||||
enabled: true
|
||||
httpGet:
|
||||
# -- liveness probe url path
|
||||
path: /-/health/live/
|
||||
port: http
|
||||
initialDelaySeconds: 50
|
||||
periodSeconds: 10
|
||||
|
||||
readinessProbe:
|
||||
enabled: true
|
||||
httpGet:
|
||||
path: /-/health/ready/
|
||||
port: http
|
||||
initialDelaySeconds: 50
|
||||
periodSeconds: 10
|
||||
|
||||
serviceAccount:
|
||||
# -- Service account is needed for managed outposts
|
||||
create: true
|
||||
|
||||
prometheus:
|
||||
serviceMonitor:
|
||||
create: false
|
||||
interval: 30s
|
||||
scrapeTimeout: 3s
|
||||
rules:
|
||||
create: false
|
||||
|
||||
geoip:
|
||||
# -- optional GeoIP, deploys a cronjob to download the maxmind database
|
||||
enabled: false
|
||||
# -- sign up under https://www.maxmind.com/en/geolite2/signup
|
||||
accountId: ""
|
||||
# -- sign up under https://www.maxmind.com/en/geolite2/signup
|
||||
licenseKey: ""
|
||||
editionIds: "GeoLite2-City"
|
||||
image: maxmindinc/geoipupdate:v4.8
|
||||
# -- number of hours between update runs
|
||||
updateInterval: 8
|
||||
|
||||
postgresql:
|
||||
# -- enable the bundled bitnami postgresql chart
|
||||
enabled: false
|
||||
postgresqlUsername: "authentik"
|
||||
postgresqlPassword: "authentik"
|
||||
postgresqlDatabase: "authentik"
|
||||
# persistence:
|
||||
# enabled: true
|
||||
# existingClaim: authentik-postgres-nfs
|
||||
redis:
|
||||
# -- enable the bundled bitnami redis chart
|
||||
enabled: true
|
||||
architecture: standalone
|
||||
auth:
|
||||
enabled: false
|
||||
|
34
unused/backup/backup.pvc.yaml
Normal file
34
unused/backup/backup.pvc.yaml
Normal file
@ -0,0 +1,34 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
namespace: backup
|
||||
name: backup-nfs-access
|
||||
labels:
|
||||
directory: backup
|
||||
spec:
|
||||
storageClassName: fast
|
||||
volumeMode: Filesystem
|
||||
accessModes:
|
||||
- ReadOnlyMany
|
||||
capacity:
|
||||
storage: "5M"
|
||||
|
||||
nfs:
|
||||
path: /export/kluster
|
||||
server: 192.168.1.157
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
namespace: backup
|
||||
name: backup-nfs-access
|
||||
spec:
|
||||
resources:
|
||||
requests:
|
||||
storage: "5M"
|
||||
storageClassName: fast
|
||||
accessModes:
|
||||
- ReadOnlyMany
|
||||
selector:
|
||||
matchLabels:
|
||||
directory: backup
|
64
unused/backup/base/cronjob.yaml
Normal file
64
unused/backup/base/cronjob.yaml
Normal file
@ -0,0 +1,64 @@
|
||||
apiVersion: batch/v1
|
||||
kind: CronJob
|
||||
metadata:
|
||||
name: restic-backblaze
|
||||
|
||||
spec:
|
||||
schedule: "0 2 * * *"
|
||||
# at 2:00, every tuesday and saturday
|
||||
successfulJobsHistoryLimit: 2
|
||||
failedJobsHistoryLimit: 2
|
||||
|
||||
jobTemplate:
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
# nodeSelector:
|
||||
# kubernetes.io/arch: arm64
|
||||
# TODO no arm64 nodes anymore
|
||||
restartPolicy: Never
|
||||
hostname: restic-k3s-pod
|
||||
# used by restic to identify the host
|
||||
containers:
|
||||
- name: restic-base-container
|
||||
image: restic/restic:latest
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
# >- strips newlines
|
||||
# RESTIC_ARGS Can be for instance: --verbose --dry-run
|
||||
args: []
|
||||
|
||||
volumeMounts:
|
||||
- mountPath: /data
|
||||
name: backup-nfs-access
|
||||
- mountPath: /credentials
|
||||
name: restic-credentials
|
||||
|
||||
env:
|
||||
- name: RESTIC_REPOSITORY
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: restic-credentials
|
||||
key: RESTIC_REPOSITORY
|
||||
- name: B2_ACCOUNT_ID
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: restic-credentials
|
||||
key: B2_ACCOUNT_ID
|
||||
- name: B2_ACCOUNT_KEY
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: restic-credentials
|
||||
key: B2_ACCOUNT_KEY
|
||||
- name: RESTIC_PASSWORD_FILE
|
||||
value: /credentials/restic-password
|
||||
|
||||
volumes:
|
||||
- name: backup-nfs-access
|
||||
persistentVolumeClaim:
|
||||
claimName: backup-nfs-access
|
||||
- name: restic-credentials
|
||||
secret:
|
||||
secretName: restic-credentials
|
||||
optional: false
|
5
unused/backup/base/kustomization.yaml
Normal file
5
unused/backup/base/kustomization.yaml
Normal file
@ -0,0 +1,5 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
resources:
|
||||
- ./cronjob.yaml
|
||||
- ./restic-credentials.secret.yaml
|
8
unused/backup/overlays/applying.md
Normal file
8
unused/backup/overlays/applying.md
Normal file
@ -0,0 +1,8 @@
|
||||
```
|
||||
k kustomize backup/overlays/backup | k apply -f -
|
||||
> secret/restic-credentials-backup created
|
||||
> cronjob.batch/restic-backblaze-backup created
|
||||
k kustomize backup/overlays/prune | k apply -f -
|
||||
> secret/restic-credentials-prune created
|
||||
> cronjob.batch/restic-backblaze-prune created
|
||||
```
|
16
unused/backup/overlays/backup/kustomization.yaml
Normal file
16
unused/backup/overlays/backup/kustomization.yaml
Normal file
@ -0,0 +1,16 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
|
||||
namespace: backup
|
||||
nameSuffix: -backup
|
||||
resources:
|
||||
- ../../base
|
||||
# - ./restic-commands.yaml
|
||||
|
||||
|
||||
# patch the cronjob args field:
|
||||
patches:
|
||||
- path: ./restic-commands.yaml
|
||||
target:
|
||||
kind: CronJob
|
||||
|
26
unused/backup/overlays/backup/restic-commands.yaml
Normal file
26
unused/backup/overlays/backup/restic-commands.yaml
Normal file
@ -0,0 +1,26 @@
|
||||
apiVersion: batch/v1
|
||||
kind: CronJob
|
||||
metadata:
|
||||
name: backup-patch
|
||||
spec:
|
||||
jobTemplate:
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
containers:
|
||||
- name: restic-base-container
|
||||
args:
|
||||
# >- strips newlines
|
||||
# RESTIC_ARGS Can be for instance: --verbose --dry-run
|
||||
# restic_reository is set in the secret
|
||||
- >-
|
||||
restic backup
|
||||
-r $(RESTIC_REPOSITORY)
|
||||
--verbose=2
|
||||
/data
|
||||
--exclude=s3/
|
||||
# &&
|
||||
# restic
|
||||
# -r $(RESTIC_REPOSITORY)
|
||||
# list snapshots
|
||||
# Add command to copy existing backups to here!
|
15
unused/backup/overlays/prune/kustomization.yaml
Normal file
15
unused/backup/overlays/prune/kustomization.yaml
Normal file
@ -0,0 +1,15 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
|
||||
namespace: backup
|
||||
nameSuffix: -prune
|
||||
resources:
|
||||
- ../../base
|
||||
# - ./restic-commands.yaml
|
||||
|
||||
|
||||
# patch the cronjob args field:
|
||||
patches:
|
||||
- path: ./restic-commands.yaml
|
||||
target:
|
||||
kind: CronJob
|
23
unused/backup/overlays/prune/restic-commands.yaml
Normal file
23
unused/backup/overlays/prune/restic-commands.yaml
Normal file
@ -0,0 +1,23 @@
|
||||
apiVersion: batch/v1
|
||||
kind: CronJob
|
||||
metadata:
|
||||
name: prune-patch
|
||||
spec:
|
||||
schedule: "0 0 1/15 * *"
|
||||
# at midnight, the first and 15. of every month
|
||||
jobTemplate:
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
containers:
|
||||
- name: restic-base-container
|
||||
args:
|
||||
# >- strips newlines
|
||||
# RESTIC_ARGS Can be for instance: --verbose --dry-run
|
||||
# RESTIC_REPOSITORY is set in the secret
|
||||
- >-
|
||||
restic forget
|
||||
-r $(RESTIC_REPOSITORY)
|
||||
--verbose=2
|
||||
--keep-daily 7 --keep-weekly 5
|
||||
--prune
|
54
unused/cert-manager/cluster-issuer.yaml
Normal file
54
unused/cert-manager/cluster-issuer.yaml
Normal file
@ -0,0 +1,54 @@
|
||||
# apiVersion: v1
|
||||
# kind: Secret
|
||||
# metadata:
|
||||
# name: cloudflare-api-token-secret
|
||||
# namespace: cert-manager
|
||||
# type: Opaque
|
||||
# stringData:
|
||||
# api-token:
|
||||
|
||||
|
||||
# ---
|
||||
|
||||
apiVersion: cert-manager.io/v1
|
||||
kind: ClusterIssuer
|
||||
metadata:
|
||||
name: cloudflare-letsencrypt-staging
|
||||
spec:
|
||||
acme:
|
||||
email: me@moll.re
|
||||
server: https://acme-staging-v02.api.letsencrypt.org/directory
|
||||
privateKeySecretRef:
|
||||
# Secret resource that will be used to store the account's private key.
|
||||
name: cloudflare-letsencrypt-issuer-account-key
|
||||
solvers:
|
||||
- dns01:
|
||||
cloudflare:
|
||||
email: mollator2@gmail.com
|
||||
apiTokenSecretRef:
|
||||
# Name of the secret created on the other resource
|
||||
name: cloudflare-api-token-secret
|
||||
key: api-token
|
||||
|
||||
---
|
||||
|
||||
apiVersion: cert-manager.io/v1
|
||||
kind: ClusterIssuer
|
||||
metadata:
|
||||
name: cloudflare-letsencrypt-prod
|
||||
spec:
|
||||
acme:
|
||||
email: me@moll.re
|
||||
server: https://acme-v02.api.letsencrypt.org/directory
|
||||
privateKeySecretRef:
|
||||
# Secret resource that will be used to store the account's private key.
|
||||
name: cloudflare-letsencrypt-issuer-account-key
|
||||
solvers:
|
||||
- dns01:
|
||||
cloudflare:
|
||||
email: mollator2@gmail.com
|
||||
apiTokenSecretRef:
|
||||
# Name of the secret created on the other resource
|
||||
name: cloudflare-api-token-secret
|
||||
key: api-token
|
||||
|
494
unused/cert-manager/values.yaml
Normal file
494
unused/cert-manager/values.yaml
Normal file
@ -0,0 +1,494 @@
|
||||
# Default values for cert-manager.
|
||||
# This is a YAML-formatted file.
|
||||
# Declare variables to be passed into your templates.
|
||||
global:
|
||||
## Reference to one or more secrets to be used when pulling images
|
||||
## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
|
||||
##
|
||||
imagePullSecrets: []
|
||||
# - name: "image-pull-secret"
|
||||
|
||||
# Optional priority class to be used for the cert-manager pods
|
||||
priorityClassName: ""
|
||||
rbac:
|
||||
create: true
|
||||
|
||||
podSecurityPolicy:
|
||||
enabled: false
|
||||
useAppArmor: true
|
||||
|
||||
# Set the verbosity of cert-manager. Range of 0 - 6 with 6 being the most verbose.
|
||||
logLevel: 2
|
||||
|
||||
leaderElection:
|
||||
# Override the namespace used to store the ConfigMap for leader election
|
||||
namespace: "kube-system"
|
||||
|
||||
# The duration that non-leader candidates will wait after observing a
|
||||
# leadership renewal until attempting to acquire leadership of a led but
|
||||
# unrenewed leader slot. This is effectively the maximum duration that a
|
||||
# leader can be stopped before it is replaced by another candidate.
|
||||
# leaseDuration: 60s
|
||||
|
||||
# The interval between attempts by the acting master to renew a leadership
|
||||
# slot before it stops leading. This must be less than or equal to the
|
||||
# lease duration.
|
||||
# renewDeadline: 40s
|
||||
|
||||
# The duration the clients should wait between attempting acquisition and
|
||||
# renewal of a leadership.
|
||||
# retryPeriod: 15s
|
||||
|
||||
installCRDs: false
|
||||
|
||||
replicaCount: 1
|
||||
|
||||
strategy: {}
|
||||
# type: RollingUpdate
|
||||
# rollingUpdate:
|
||||
# maxSurge: 0
|
||||
# maxUnavailable: 1
|
||||
|
||||
# Comma separated list of feature gates that should be enabled on the
|
||||
# controller pod.
|
||||
featureGates: ""
|
||||
|
||||
image:
|
||||
repository: quay.io/jetstack/cert-manager-controller
|
||||
# You can manage a registry with
|
||||
# registry: quay.io
|
||||
# repository: jetstack/cert-manager-controller
|
||||
|
||||
# Override the image tag to deploy by setting this variable.
|
||||
# If no value is set, the chart's appVersion will be used.
|
||||
# tag: canary
|
||||
|
||||
# Setting a digest will override any tag
|
||||
# digest: sha256:0e072dddd1f7f8fc8909a2ca6f65e76c5f0d2fcfb8be47935ae3457e8bbceb20
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
# Override the namespace used to store DNS provider credentials etc. for ClusterIssuer
|
||||
# resources. By default, the same namespace as cert-manager is deployed within is
|
||||
# used. This namespace will not be automatically created by the Helm chart.
|
||||
clusterResourceNamespace: ""
|
||||
|
||||
serviceAccount:
|
||||
# Specifies whether a service account should be created
|
||||
create: true
|
||||
# The name of the service account to use.
|
||||
# If not set and create is true, a name is generated using the fullname template
|
||||
# name: ""
|
||||
# Optional additional annotations to add to the controller's ServiceAccount
|
||||
# annotations: {}
|
||||
# Automount API credentials for a Service Account.
|
||||
automountServiceAccountToken: true
|
||||
|
||||
# Optional additional arguments
|
||||
extraArgs: []
|
||||
# Use this flag to set a namespace that cert-manager will use to store
|
||||
# supporting resources required for each ClusterIssuer (default is kube-system)
|
||||
# - --cluster-resource-namespace=kube-system
|
||||
# When this flag is enabled, secrets will be automatically removed when the certificate resource is deleted
|
||||
# - --enable-certificate-owner-ref=true
|
||||
# Use this flag to enabled or disable arbitrary controllers, for example, disable the CertificiateRequests approver
|
||||
# - --controllers=*,-certificaterequests-approver
|
||||
|
||||
extraEnv: []
|
||||
# - name: SOME_VAR
|
||||
# value: 'some value'
|
||||
|
||||
resources: {}
|
||||
# requests:
|
||||
# cpu: 10m
|
||||
# memory: 32Mi
|
||||
|
||||
# Pod Security Context
|
||||
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
|
||||
securityContext:
|
||||
runAsNonRoot: true
|
||||
# legacy securityContext parameter format: if enabled is set to true, only fsGroup and runAsUser are supported
|
||||
# securityContext:
|
||||
# enabled: false
|
||||
# fsGroup: 1001
|
||||
# runAsUser: 1001
|
||||
# to support additional securityContext parameters, omit the `enabled` parameter and simply specify the parameters
|
||||
# you want to set, e.g.
|
||||
# securityContext:
|
||||
# fsGroup: 1000
|
||||
# runAsUser: 1000
|
||||
# runAsNonRoot: true
|
||||
|
||||
# Container Security Context to be set on the controller component container
|
||||
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
|
||||
containerSecurityContext: {}
|
||||
# capabilities:
|
||||
# drop:
|
||||
# - ALL
|
||||
# readOnlyRootFilesystem: true
|
||||
# runAsNonRoot: true
|
||||
|
||||
|
||||
volumes: []
|
||||
|
||||
volumeMounts: []
|
||||
|
||||
# Optional additional annotations to add to the controller Deployment
|
||||
# deploymentAnnotations: {}
|
||||
|
||||
# Optional additional annotations to add to the controller Pods
|
||||
# podAnnotations: {}
|
||||
|
||||
podLabels: {}
|
||||
|
||||
# Optional additional labels to add to the controller Service
|
||||
# serviceLabels: {}
|
||||
|
||||
# Optional additional annotations to add to the controller service
|
||||
# serviceAnnotations: {}
|
||||
|
||||
# Optional DNS settings, useful if you have a public and private DNS zone for
|
||||
# the same domain on Route 53. What follows is an example of ensuring
|
||||
# cert-manager can access an ingress or DNS TXT records at all times.
|
||||
# NOTE: This requires Kubernetes 1.10 or `CustomPodDNS` feature gate enabled for
|
||||
# the cluster to work.
|
||||
# podDnsPolicy: "None"
|
||||
# podDnsConfig:
|
||||
# nameservers:
|
||||
# - "1.1.1.1"
|
||||
# - "8.8.8.8"
|
||||
|
||||
nodeSelector: {}
|
||||
|
||||
ingressShim: {}
|
||||
# defaultIssuerName: ""
|
||||
# defaultIssuerKind: ""
|
||||
# defaultIssuerGroup: ""
|
||||
|
||||
prometheus:
|
||||
enabled: true
|
||||
servicemonitor:
|
||||
enabled: false
|
||||
prometheusInstance: default
|
||||
targetPort: 9402
|
||||
path: /metrics
|
||||
interval: 60s
|
||||
scrapeTimeout: 30s
|
||||
labels: {}
|
||||
|
||||
# Use these variables to configure the HTTP_PROXY environment variables
|
||||
# http_proxy: "http://proxy:8080"
|
||||
# https_proxy: "https://proxy:8080"
|
||||
# no_proxy: 127.0.0.1,localhost
|
||||
|
||||
# expects input structure as per specification https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.11/#affinity-v1-core
|
||||
# for example:
|
||||
# affinity:
|
||||
# nodeAffinity:
|
||||
# requiredDuringSchedulingIgnoredDuringExecution:
|
||||
# nodeSelectorTerms:
|
||||
# - matchExpressions:
|
||||
# - key: foo.bar.com/role
|
||||
# operator: In
|
||||
# values:
|
||||
# - master
|
||||
affinity: {}
|
||||
|
||||
# expects input structure as per specification https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.11/#toleration-v1-core
|
||||
# for example:
|
||||
# tolerations:
|
||||
# - key: foo.bar.com/role
|
||||
# operator: Equal
|
||||
# value: master
|
||||
# effect: NoSchedule
|
||||
tolerations: []
|
||||
|
||||
webhook:
|
||||
replicaCount: 1
|
||||
timeoutSeconds: 10
|
||||
|
||||
strategy: {}
|
||||
# type: RollingUpdate
|
||||
# rollingUpdate:
|
||||
# maxSurge: 0
|
||||
# maxUnavailable: 1
|
||||
|
||||
# Pod Security Context to be set on the webhook component Pod
|
||||
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
|
||||
securityContext:
|
||||
runAsNonRoot: true
|
||||
|
||||
# Container Security Context to be set on the webhook component container
|
||||
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
|
||||
containerSecurityContext: {}
|
||||
# capabilities:
|
||||
# drop:
|
||||
# - ALL
|
||||
# readOnlyRootFilesystem: true
|
||||
# runAsNonRoot: true
|
||||
|
||||
# Optional additional annotations to add to the webhook Deployment
|
||||
# deploymentAnnotations: {}
|
||||
|
||||
# Optional additional annotations to add to the webhook Pods
|
||||
# podAnnotations: {}
|
||||
|
||||
# Optional additional annotations to add to the webhook MutatingWebhookConfiguration
|
||||
# mutatingWebhookConfigurationAnnotations: {}
|
||||
|
||||
# Optional additional annotations to add to the webhook ValidatingWebhookConfiguration
|
||||
# validatingWebhookConfigurationAnnotations: {}
|
||||
|
||||
# Optional additional annotations to add to the webhook service
|
||||
# serviceAnnotations: {}
|
||||
|
||||
# Optional additional arguments for webhook
|
||||
extraArgs: []
|
||||
|
||||
resources: {}
|
||||
# requests:
|
||||
# cpu: 10m
|
||||
# memory: 32Mi
|
||||
|
||||
## Liveness and readiness probe values
|
||||
## Ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes
|
||||
##
|
||||
livenessProbe:
|
||||
failureThreshold: 3
|
||||
initialDelaySeconds: 60
|
||||
periodSeconds: 10
|
||||
successThreshold: 1
|
||||
timeoutSeconds: 1
|
||||
readinessProbe:
|
||||
failureThreshold: 3
|
||||
initialDelaySeconds: 5
|
||||
periodSeconds: 5
|
||||
successThreshold: 1
|
||||
timeoutSeconds: 1
|
||||
|
||||
nodeSelector: {}
|
||||
|
||||
affinity: {}
|
||||
|
||||
tolerations: []
|
||||
|
||||
# Optional additional labels to add to the Webhook Pods
|
||||
podLabels: {}
|
||||
|
||||
# Optional additional labels to add to the Webhook Service
|
||||
serviceLabels: {}
|
||||
|
||||
image:
|
||||
repository: quay.io/jetstack/cert-manager-webhook
|
||||
# You can manage a registry with
|
||||
# registry: quay.io
|
||||
# repository: jetstack/cert-manager-webhook
|
||||
|
||||
# Override the image tag to deploy by setting this variable.
|
||||
# If no value is set, the chart's appVersion will be used.
|
||||
# tag: canary
|
||||
|
||||
# Setting a digest will override any tag
|
||||
# digest: sha256:0e072dddd1f7f8fc8909a2ca6f65e76c5f0d2fcfb8be47935ae3457e8bbceb20
|
||||
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
serviceAccount:
|
||||
# Specifies whether a service account should be created
|
||||
create: true
|
||||
# The name of the service account to use.
|
||||
# If not set and create is true, a name is generated using the fullname template
|
||||
# name: ""
|
||||
# Optional additional annotations to add to the controller's ServiceAccount
|
||||
# annotations: {}
|
||||
# Automount API credentials for a Service Account.
|
||||
automountServiceAccountToken: true
|
||||
|
||||
# The port that the webhook should listen on for requests.
|
||||
# In GKE private clusters, by default kubernetes apiservers are allowed to
|
||||
# talk to the cluster nodes only on 443 and 10250. so configuring
|
||||
# securePort: 10250, will work out of the box without needing to add firewall
|
||||
# rules or requiring NET_BIND_SERVICE capabilities to bind port numbers <1000
|
||||
securePort: 10250
|
||||
|
||||
# Specifies if the webhook should be started in hostNetwork mode.
|
||||
#
|
||||
# Required for use in some managed kubernetes clusters (such as AWS EKS) with custom
|
||||
# CNI (such as calico), because control-plane managed by AWS cannot communicate
|
||||
# with pods' IP CIDR and admission webhooks are not working
|
||||
#
|
||||
# Since the default port for the webhook conflicts with kubelet on the host
|
||||
# network, `webhook.securePort` should be changed to an available port if
|
||||
# running in hostNetwork mode.
|
||||
hostNetwork: false
|
||||
|
||||
# Specifies how the service should be handled. Useful if you want to expose the
|
||||
# webhook to outside of the cluster. In some cases, the control plane cannot
|
||||
# reach internal services.
|
||||
serviceType: ClusterIP
|
||||
# loadBalancerIP:
|
||||
|
||||
# Overrides the mutating webhook and validating webhook so they reach the webhook
|
||||
# service using the `url` field instead of a service.
|
||||
url: {}
|
||||
# host:
|
||||
|
||||
cainjector:
|
||||
enabled: true
|
||||
replicaCount: 1
|
||||
|
||||
strategy: {}
|
||||
# type: RollingUpdate
|
||||
# rollingUpdate:
|
||||
# maxSurge: 0
|
||||
# maxUnavailable: 1
|
||||
|
||||
# Pod Security Context to be set on the cainjector component Pod
|
||||
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
|
||||
securityContext:
|
||||
runAsNonRoot: true
|
||||
|
||||
# Container Security Context to be set on the cainjector component container
|
||||
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
|
||||
containerSecurityContext: {}
|
||||
# capabilities:
|
||||
# drop:
|
||||
# - ALL
|
||||
# readOnlyRootFilesystem: true
|
||||
# runAsNonRoot: true
|
||||
|
||||
|
||||
# Optional additional annotations to add to the cainjector Deployment
|
||||
# deploymentAnnotations: {}
|
||||
|
||||
# Optional additional annotations to add to the cainjector Pods
|
||||
# podAnnotations: {}
|
||||
|
||||
# Optional additional arguments for cainjector
|
||||
extraArgs: []
|
||||
|
||||
resources: {}
|
||||
# requests:
|
||||
# cpu: 10m
|
||||
# memory: 32Mi
|
||||
|
||||
nodeSelector: {}
|
||||
|
||||
affinity: {}
|
||||
|
||||
tolerations: []
|
||||
|
||||
# Optional additional labels to add to the CA Injector Pods
|
||||
podLabels: {}
|
||||
|
||||
image:
|
||||
repository: quay.io/jetstack/cert-manager-cainjector
|
||||
# You can manage a registry with
|
||||
# registry: quay.io
|
||||
# repository: jetstack/cert-manager-cainjector
|
||||
|
||||
# Override the image tag to deploy by setting this variable.
|
||||
# If no value is set, the chart's appVersion will be used.
|
||||
# tag: canary
|
||||
|
||||
# Setting a digest will override any tag
|
||||
# digest: sha256:0e072dddd1f7f8fc8909a2ca6f65e76c5f0d2fcfb8be47935ae3457e8bbceb20
|
||||
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
serviceAccount:
|
||||
# Specifies whether a service account should be created
|
||||
create: true
|
||||
# The name of the service account to use.
|
||||
# If not set and create is true, a name is generated using the fullname template
|
||||
# name: ""
|
||||
# Optional additional annotations to add to the controller's ServiceAccount
|
||||
# annotations: {}
|
||||
# Automount API credentials for a Service Account.
|
||||
automountServiceAccountToken: true
|
||||
|
||||
# This startupapicheck is a Helm post-install hook that waits for the webhook
|
||||
# endpoints to become available.
|
||||
# The check is implemented using a Kubernetes Job- if you are injecting mesh
|
||||
# sidecar proxies into cert-manager pods, you probably want to ensure that they
|
||||
# are not injected into this Job's pod. Otherwise the installation may time out
|
||||
# due to the Job never being completed because the sidecar proxy does not exit.
|
||||
# See https://github.com/jetstack/cert-manager/pull/4414 for context.
|
||||
startupapicheck:
|
||||
enabled: true
|
||||
|
||||
# Pod Security Context to be set on the startupapicheck component Pod
|
||||
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
|
||||
securityContext:
|
||||
runAsNonRoot: true
|
||||
|
||||
# Timeout for 'kubectl check api' command
|
||||
timeout: 1m
|
||||
|
||||
# Job backoffLimit
|
||||
backoffLimit: 4
|
||||
|
||||
# Optional additional annotations to add to the startupapicheck Job
|
||||
jobAnnotations:
|
||||
helm.sh/hook: post-install
|
||||
helm.sh/hook-weight: "1"
|
||||
helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
|
||||
|
||||
# Optional additional annotations to add to the startupapicheck Pods
|
||||
# podAnnotations: {}
|
||||
|
||||
# Optional additional arguments for startupapicheck
|
||||
extraArgs: []
|
||||
|
||||
resources: {}
|
||||
# requests:
|
||||
# cpu: 10m
|
||||
# memory: 32Mi
|
||||
|
||||
nodeSelector: {}
|
||||
|
||||
affinity: {}
|
||||
|
||||
tolerations: []
|
||||
|
||||
# Optional additional labels to add to the startupapicheck Pods
|
||||
podLabels: {}
|
||||
|
||||
image:
|
||||
repository: quay.io/jetstack/cert-manager-ctl
|
||||
# You can manage a registry with
|
||||
# registry: quay.io
|
||||
# repository: jetstack/cert-manager-ctl
|
||||
|
||||
# Override the image tag to deploy by setting this variable.
|
||||
# If no value is set, the chart's appVersion will be used.
|
||||
# tag: canary
|
||||
|
||||
# Setting a digest will override any tag
|
||||
# digest: sha256:0e072dddd1f7f8fc8909a2ca6f65e76c5f0d2fcfb8be47935ae3457e8bbceb20
|
||||
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
rbac:
|
||||
# annotations for the startup API Check job RBAC and PSP resources
|
||||
annotations:
|
||||
helm.sh/hook: post-install
|
||||
helm.sh/hook-weight: "-5"
|
||||
helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
|
||||
|
||||
serviceAccount:
|
||||
# Specifies whether a service account should be created
|
||||
create: true
|
||||
|
||||
# The name of the service account to use.
|
||||
# If not set and create is true, a name is generated using the fullname template
|
||||
# name: ""
|
||||
|
||||
# Optional additional annotations to add to the Job's ServiceAccount
|
||||
annotations:
|
||||
helm.sh/hook: post-install
|
||||
helm.sh/hook-weight: "-5"
|
||||
helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
|
||||
|
||||
# Automount API credentials for a Service Account.
|
||||
automountServiceAccountToken: true
|
||||
|
26
unused/crowdsec.ingress.yaml
Normal file
26
unused/crowdsec.ingress.yaml
Normal file
@ -0,0 +1,26 @@
|
||||
kind: Ingress
|
||||
apiVersion: networking.k8s.io/v1
|
||||
metadata:
|
||||
namespace: crowdsec
|
||||
name: crowdsec-ingress
|
||||
annotations:
|
||||
kubernetes.io/ingress.class: nginx
|
||||
cert-manager.io/cluster-issuer: cloudflare-letsencrypt-prod
|
||||
|
||||
|
||||
spec:
|
||||
tls:
|
||||
- hosts:
|
||||
- crowdsec.kluster.moll.re
|
||||
secretName: cloudflare-letsencrypt-issuer-account-key
|
||||
rules:
|
||||
- host: crowdsec.kluster.moll.re
|
||||
http:
|
||||
paths:
|
||||
- backend:
|
||||
service:
|
||||
name: crowdsec-service
|
||||
port:
|
||||
number: 3000
|
||||
path: /
|
||||
pathType: Prefix
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user