Kubernetes bootstrap
This commit is contained in:
parent
d25d93469d
commit
15ec3fde97
192 changed files with 19105 additions and 0 deletions
15
.sops.yaml
Normal file
15
.sops.yaml
Normal file
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
creation_rules:
|
||||
- path_regex: kubernetes/.*\.sops\.ya?ml
|
||||
encrypted_regex: "^(data|stringData)$"
|
||||
# Valinor
|
||||
age: >-
|
||||
age1f5pr5rss0n8z4d6r8kky9umr5g48tt03reuyjushw5kayrpsxvgsw80gsj
|
||||
- path_regex: .*\.sops\.(env|ini|json|toml)
|
||||
# Valinor
|
||||
age: >-
|
||||
age1f5pr5rss0n8z4d6r8kky9umr5g48tt03reuyjushw5kayrpsxvgsw80gsj
|
||||
- path_regex: (ansible|terraform)/.*\.sops\.ya?ml
|
||||
# Valinor
|
||||
age: >-
|
||||
age1f5pr5rss0n8z4d6r8kky9umr5g48tt03reuyjushw5kayrpsxvgsw80gsj
|
1821
archive/cockroachdb/app/crdb-crd.yaml
Normal file
1821
archive/cockroachdb/app/crdb-crd.yaml
Normal file
File diff suppressed because it is too large
Load diff
650
archive/cockroachdb/app/crdb-operator.yaml
Normal file
650
archive/cockroachdb/app/crdb-operator.yaml
Normal file
|
@ -0,0 +1,650 @@
|
|||
# Copyright 2023 The Cockroach Authors
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# https://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
labels:
|
||||
app: cockroach-operator
|
||||
name: cockroach-operator-sa
|
||||
namespace: database
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRole
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: cockroach-operator-role
|
||||
rules:
|
||||
- apiGroups:
|
||||
- admissionregistration.k8s.io
|
||||
resources:
|
||||
- mutatingwebhookconfigurations
|
||||
verbs:
|
||||
- get
|
||||
- patch
|
||||
- update
|
||||
- apiGroups:
|
||||
- admissionregistration.k8s.io
|
||||
resources:
|
||||
- validatingwebhookconfigurations
|
||||
verbs:
|
||||
- get
|
||||
- patch
|
||||
- update
|
||||
- apiGroups:
|
||||
- apps
|
||||
resources:
|
||||
- statefulsets
|
||||
verbs:
|
||||
- create
|
||||
- delete
|
||||
- get
|
||||
- list
|
||||
- patch
|
||||
- update
|
||||
- watch
|
||||
- apiGroups:
|
||||
- apps
|
||||
resources:
|
||||
- statefulsets/finalizers
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- watch
|
||||
- apiGroups:
|
||||
- apps
|
||||
resources:
|
||||
- statefulsets/scale
|
||||
verbs:
|
||||
- get
|
||||
- update
|
||||
- watch
|
||||
- apiGroups:
|
||||
- apps
|
||||
resources:
|
||||
- statefulsets/status
|
||||
verbs:
|
||||
- get
|
||||
- patch
|
||||
- update
|
||||
- apiGroups:
|
||||
- batch
|
||||
resources:
|
||||
- jobs
|
||||
verbs:
|
||||
- create
|
||||
- delete
|
||||
- get
|
||||
- list
|
||||
- patch
|
||||
- update
|
||||
- watch
|
||||
- apiGroups:
|
||||
- batch
|
||||
resources:
|
||||
- jobs/finalizers
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- watch
|
||||
- apiGroups:
|
||||
- batch
|
||||
resources:
|
||||
- jobs/status
|
||||
verbs:
|
||||
- get
|
||||
- apiGroups:
|
||||
- certificates.k8s.io
|
||||
resources:
|
||||
- certificatesigningrequests
|
||||
verbs:
|
||||
- create
|
||||
- delete
|
||||
- get
|
||||
- list
|
||||
- patch
|
||||
- watch
|
||||
- apiGroups:
|
||||
- certificates.k8s.io
|
||||
resources:
|
||||
- certificatesigningrequests/approval
|
||||
verbs:
|
||||
- update
|
||||
- apiGroups:
|
||||
- certificates.k8s.io
|
||||
resources:
|
||||
- certificatesigningrequests/status
|
||||
verbs:
|
||||
- get
|
||||
- patch
|
||||
- update
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- configmaps
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- watch
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- configmaps/status
|
||||
verbs:
|
||||
- get
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- nodes
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- persistentvolumeclaims
|
||||
verbs:
|
||||
- list
|
||||
- update
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- pods
|
||||
verbs:
|
||||
- delete
|
||||
- deletecollection
|
||||
- get
|
||||
- list
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- pods/exec
|
||||
verbs:
|
||||
- create
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- pods/log
|
||||
verbs:
|
||||
- get
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- secrets
|
||||
verbs:
|
||||
- create
|
||||
- get
|
||||
- list
|
||||
- patch
|
||||
- update
|
||||
- watch
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- serviceaccounts
|
||||
verbs:
|
||||
- create
|
||||
- get
|
||||
- list
|
||||
- watch
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- services
|
||||
verbs:
|
||||
- create
|
||||
- delete
|
||||
- get
|
||||
- list
|
||||
- patch
|
||||
- update
|
||||
- watch
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- services/finalizers
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- watch
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- services/status
|
||||
verbs:
|
||||
- get
|
||||
- patch
|
||||
- update
|
||||
- apiGroups:
|
||||
- crdb.cockroachlabs.com
|
||||
resources:
|
||||
- crdbclusters
|
||||
verbs:
|
||||
- create
|
||||
- delete
|
||||
- get
|
||||
- list
|
||||
- patch
|
||||
- update
|
||||
- watch
|
||||
- apiGroups:
|
||||
- crdb.cockroachlabs.com
|
||||
resources:
|
||||
- crdbclusters/finalizers
|
||||
verbs:
|
||||
- update
|
||||
- apiGroups:
|
||||
- crdb.cockroachlabs.com
|
||||
resources:
|
||||
- crdbclusters/status
|
||||
verbs:
|
||||
- get
|
||||
- patch
|
||||
- update
|
||||
- apiGroups:
|
||||
- networking.k8s.io
|
||||
resources:
|
||||
- ingresses
|
||||
verbs:
|
||||
- create
|
||||
- delete
|
||||
- get
|
||||
- list
|
||||
- patch
|
||||
- update
|
||||
- watch
|
||||
- apiGroups:
|
||||
- networking.k8s.io
|
||||
resources:
|
||||
- ingresses/finalizers
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- watch
|
||||
- apiGroups:
|
||||
- networking.k8s.io
|
||||
resources:
|
||||
- ingresses/status
|
||||
verbs:
|
||||
- get
|
||||
- apiGroups:
|
||||
- policy
|
||||
resources:
|
||||
- poddisruptionbudgets
|
||||
verbs:
|
||||
- create
|
||||
- delete
|
||||
- get
|
||||
- list
|
||||
- patch
|
||||
- update
|
||||
- watch
|
||||
- apiGroups:
|
||||
- policy
|
||||
resources:
|
||||
- poddisruptionbudgets/finalizers
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- watch
|
||||
- apiGroups:
|
||||
- policy
|
||||
resources:
|
||||
- poddisruptionbudgets/status
|
||||
verbs:
|
||||
- get
|
||||
- apiGroups:
|
||||
- rbac.authorization.k8s.io
|
||||
resources:
|
||||
- rolebindings
|
||||
verbs:
|
||||
- create
|
||||
- get
|
||||
- list
|
||||
- watch
|
||||
- apiGroups:
|
||||
- rbac.authorization.k8s.io
|
||||
resources:
|
||||
- roles
|
||||
verbs:
|
||||
- create
|
||||
- get
|
||||
- list
|
||||
- watch
|
||||
- apiGroups:
|
||||
- security.openshift.io
|
||||
resources:
|
||||
- securitycontextconstraints
|
||||
verbs:
|
||||
- use
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRoleBinding
|
||||
metadata:
|
||||
name: cockroach-operator-rolebinding
|
||||
roleRef:
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
kind: ClusterRole
|
||||
name: cockroach-operator-role
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: cockroach-operator-sa
|
||||
namespace: database
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
labels:
|
||||
control-plane: cockroach-operator
|
||||
name: cockroach-operator-webhook-service
|
||||
namespace: database
|
||||
spec:
|
||||
ports:
|
||||
- port: 443
|
||||
targetPort: 9443
|
||||
selector:
|
||||
app: cockroach-operator
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
labels:
|
||||
app: cockroach-operator
|
||||
name: cockroach-operator-manager
|
||||
namespace: database
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: cockroach-operator
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: cockroach-operator
|
||||
spec:
|
||||
containers:
|
||||
- args:
|
||||
- -zap-log-level
|
||||
- info
|
||||
env:
|
||||
- name: RELATED_IMAGE_COCKROACH_v20_1_4
|
||||
value: cockroachdb/cockroach:v20.1.4
|
||||
- name: RELATED_IMAGE_COCKROACH_v20_1_5
|
||||
value: cockroachdb/cockroach:v20.1.5
|
||||
- name: RELATED_IMAGE_COCKROACH_v20_1_8
|
||||
value: cockroachdb/cockroach:v20.1.8
|
||||
- name: RELATED_IMAGE_COCKROACH_v20_1_11
|
||||
value: cockroachdb/cockroach:v20.1.11
|
||||
- name: RELATED_IMAGE_COCKROACH_v20_1_12
|
||||
value: cockroachdb/cockroach:v20.1.12
|
||||
- name: RELATED_IMAGE_COCKROACH_v20_1_13
|
||||
value: cockroachdb/cockroach:v20.1.13
|
||||
- name: RELATED_IMAGE_COCKROACH_v20_1_15
|
||||
value: cockroachdb/cockroach:v20.1.15
|
||||
- name: RELATED_IMAGE_COCKROACH_v20_1_16
|
||||
value: cockroachdb/cockroach:v20.1.16
|
||||
- name: RELATED_IMAGE_COCKROACH_v20_1_17
|
||||
value: cockroachdb/cockroach:v20.1.17
|
||||
- name: RELATED_IMAGE_COCKROACH_v20_2_0
|
||||
value: cockroachdb/cockroach:v20.2.0
|
||||
- name: RELATED_IMAGE_COCKROACH_v20_2_1
|
||||
value: cockroachdb/cockroach:v20.2.1
|
||||
- name: RELATED_IMAGE_COCKROACH_v20_2_2
|
||||
value: cockroachdb/cockroach:v20.2.2
|
||||
- name: RELATED_IMAGE_COCKROACH_v20_2_3
|
||||
value: cockroachdb/cockroach:v20.2.3
|
||||
- name: RELATED_IMAGE_COCKROACH_v20_2_4
|
||||
value: cockroachdb/cockroach:v20.2.4
|
||||
- name: RELATED_IMAGE_COCKROACH_v20_2_5
|
||||
value: cockroachdb/cockroach:v20.2.5
|
||||
- name: RELATED_IMAGE_COCKROACH_v20_2_6
|
||||
value: cockroachdb/cockroach:v20.2.6
|
||||
- name: RELATED_IMAGE_COCKROACH_v20_2_8
|
||||
value: cockroachdb/cockroach:v20.2.8
|
||||
- name: RELATED_IMAGE_COCKROACH_v20_2_9
|
||||
value: cockroachdb/cockroach:v20.2.9
|
||||
- name: RELATED_IMAGE_COCKROACH_v20_2_10
|
||||
value: cockroachdb/cockroach:v20.2.10
|
||||
- name: RELATED_IMAGE_COCKROACH_v20_2_11
|
||||
value: cockroachdb/cockroach:v20.2.11
|
||||
- name: RELATED_IMAGE_COCKROACH_v20_2_12
|
||||
value: cockroachdb/cockroach:v20.2.12
|
||||
- name: RELATED_IMAGE_COCKROACH_v20_2_13
|
||||
value: cockroachdb/cockroach:v20.2.13
|
||||
- name: RELATED_IMAGE_COCKROACH_v20_2_14
|
||||
value: cockroachdb/cockroach:v20.2.14
|
||||
- name: RELATED_IMAGE_COCKROACH_v20_2_15
|
||||
value: cockroachdb/cockroach:v20.2.15
|
||||
- name: RELATED_IMAGE_COCKROACH_v20_2_16
|
||||
value: cockroachdb/cockroach:v20.2.16
|
||||
- name: RELATED_IMAGE_COCKROACH_v20_2_17
|
||||
value: cockroachdb/cockroach:v20.2.17
|
||||
- name: RELATED_IMAGE_COCKROACH_v20_2_18
|
||||
value: cockroachdb/cockroach:v20.2.18
|
||||
- name: RELATED_IMAGE_COCKROACH_v20_2_19
|
||||
value: cockroachdb/cockroach:v20.2.19
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_1_0
|
||||
value: cockroachdb/cockroach:v21.1.0
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_1_1
|
||||
value: cockroachdb/cockroach:v21.1.1
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_1_2
|
||||
value: cockroachdb/cockroach:v21.1.2
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_1_3
|
||||
value: cockroachdb/cockroach:v21.1.3
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_1_4
|
||||
value: cockroachdb/cockroach:v21.1.4
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_1_5
|
||||
value: cockroachdb/cockroach:v21.1.5
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_1_6
|
||||
value: cockroachdb/cockroach:v21.1.6
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_1_7
|
||||
value: cockroachdb/cockroach:v21.1.7
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_1_9
|
||||
value: cockroachdb/cockroach:v21.1.9
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_1_10
|
||||
value: cockroachdb/cockroach:v21.1.10
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_1_11
|
||||
value: cockroachdb/cockroach:v21.1.11
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_1_12
|
||||
value: cockroachdb/cockroach:v21.1.12
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_1_13
|
||||
value: cockroachdb/cockroach:v21.1.13
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_1_14
|
||||
value: cockroachdb/cockroach:v21.1.14
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_1_15
|
||||
value: cockroachdb/cockroach:v21.1.15
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_1_16
|
||||
value: cockroachdb/cockroach:v21.1.16
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_1_17
|
||||
value: cockroachdb/cockroach:v21.1.17
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_1_18
|
||||
value: cockroachdb/cockroach:v21.1.18
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_1_19
|
||||
value: cockroachdb/cockroach:v21.1.19
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_1_20
|
||||
value: cockroachdb/cockroach:v21.1.20
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_1_21
|
||||
value: cockroachdb/cockroach:v21.1.21
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_2_0
|
||||
value: cockroachdb/cockroach:v21.2.0
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_2_1
|
||||
value: cockroachdb/cockroach:v21.2.1
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_2_2
|
||||
value: cockroachdb/cockroach:v21.2.2
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_2_3
|
||||
value: cockroachdb/cockroach:v21.2.3
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_2_4
|
||||
value: cockroachdb/cockroach:v21.2.4
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_2_5
|
||||
value: cockroachdb/cockroach:v21.2.5
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_2_7
|
||||
value: cockroachdb/cockroach:v21.2.7
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_2_8
|
||||
value: cockroachdb/cockroach:v21.2.8
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_2_9
|
||||
value: cockroachdb/cockroach:v21.2.9
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_2_10
|
||||
value: cockroachdb/cockroach:v21.2.10
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_2_11
|
||||
value: cockroachdb/cockroach:v21.2.11
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_2_12
|
||||
value: cockroachdb/cockroach:v21.2.12
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_2_13
|
||||
value: cockroachdb/cockroach:v21.2.13
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_2_14
|
||||
value: cockroachdb/cockroach:v21.2.14
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_2_15
|
||||
value: cockroachdb/cockroach:v21.2.15
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_2_16
|
||||
value: cockroachdb/cockroach:v21.2.16
|
||||
- name: RELATED_IMAGE_COCKROACH_v21_2_17
|
||||
value: cockroachdb/cockroach:v21.2.17
|
||||
- name: RELATED_IMAGE_COCKROACH_v22_1_0
|
||||
value: cockroachdb/cockroach:v22.1.0
|
||||
- name: RELATED_IMAGE_COCKROACH_v22_1_1
|
||||
value: cockroachdb/cockroach:v22.1.1
|
||||
- name: RELATED_IMAGE_COCKROACH_v22_1_2
|
||||
value: cockroachdb/cockroach:v22.1.2
|
||||
- name: RELATED_IMAGE_COCKROACH_v22_1_3
|
||||
value: cockroachdb/cockroach:v22.1.3
|
||||
- name: RELATED_IMAGE_COCKROACH_v22_1_4
|
||||
value: cockroachdb/cockroach:v22.1.4
|
||||
- name: RELATED_IMAGE_COCKROACH_v22_1_5
|
||||
value: cockroachdb/cockroach:v22.1.5
|
||||
- name: RELATED_IMAGE_COCKROACH_v22_1_7
|
||||
value: cockroachdb/cockroach:v22.1.7
|
||||
- name: RELATED_IMAGE_COCKROACH_v22_1_8
|
||||
value: cockroachdb/cockroach:v22.1.8
|
||||
- name: RELATED_IMAGE_COCKROACH_v22_1_10
|
||||
value: cockroachdb/cockroach:v22.1.10
|
||||
- name: RELATED_IMAGE_COCKROACH_v22_1_11
|
||||
value: cockroachdb/cockroach:v22.1.11
|
||||
- name: RELATED_IMAGE_COCKROACH_v22_1_12
|
||||
value: cockroachdb/cockroach:v22.1.12
|
||||
- name: RELATED_IMAGE_COCKROACH_v22_1_13
|
||||
value: cockroachdb/cockroach:v22.1.13
|
||||
- name: RELATED_IMAGE_COCKROACH_v22_1_14
|
||||
value: cockroachdb/cockroach:v22.1.14
|
||||
- name: RELATED_IMAGE_COCKROACH_v22_1_15
|
||||
value: cockroachdb/cockroach:v22.1.15
|
||||
- name: RELATED_IMAGE_COCKROACH_v22_1_16
|
||||
value: cockroachdb/cockroach:v22.1.16
|
||||
- name: RELATED_IMAGE_COCKROACH_v22_1_18
|
||||
value: cockroachdb/cockroach:v22.1.18
|
||||
- name: RELATED_IMAGE_COCKROACH_v22_1_20
|
||||
value: cockroachdb/cockroach:v22.1.20
|
||||
- name: RELATED_IMAGE_COCKROACH_v22_2_0
|
||||
value: cockroachdb/cockroach:v22.2.0
|
||||
- name: RELATED_IMAGE_COCKROACH_v22_2_1
|
||||
value: cockroachdb/cockroach:v22.2.1
|
||||
- name: RELATED_IMAGE_COCKROACH_v22_2_2
|
||||
value: cockroachdb/cockroach:v22.2.2
|
||||
- name: RELATED_IMAGE_COCKROACH_v22_2_3
|
||||
value: cockroachdb/cockroach:v22.2.3
|
||||
- name: RELATED_IMAGE_COCKROACH_v22_2_4
|
||||
value: cockroachdb/cockroach:v22.2.4
|
||||
- name: RELATED_IMAGE_COCKROACH_v22_2_5
|
||||
value: cockroachdb/cockroach:v22.2.5
|
||||
- name: RELATED_IMAGE_COCKROACH_v22_2_6
|
||||
value: cockroachdb/cockroach:v22.2.6
|
||||
- name: RELATED_IMAGE_COCKROACH_v22_2_7
|
||||
value: cockroachdb/cockroach:v22.2.7
|
||||
- name: RELATED_IMAGE_COCKROACH_v22_2_8
|
||||
value: cockroachdb/cockroach:v22.2.8
|
||||
- name: RELATED_IMAGE_COCKROACH_v22_2_9
|
||||
value: cockroachdb/cockroach:v22.2.9
|
||||
- name: RELATED_IMAGE_COCKROACH_v22_2_10
|
||||
value: cockroachdb/cockroach:v22.2.10
|
||||
- name: RELATED_IMAGE_COCKROACH_v23_1_0
|
||||
value: cockroachdb/cockroach:v23.1.0
|
||||
- name: RELATED_IMAGE_COCKROACH_v23_1_1
|
||||
value: cockroachdb/cockroach:v23.1.1
|
||||
- name: RELATED_IMAGE_COCKROACH_v23_1_2
|
||||
value: cockroachdb/cockroach:v23.1.2
|
||||
- name: RELATED_IMAGE_COCKROACH_v23_1_3
|
||||
value: cockroachdb/cockroach:v23.1.3
|
||||
- name: RELATED_IMAGE_COCKROACH_v23_1_4
|
||||
value: cockroachdb/cockroach:v23.1.4
|
||||
- name: OPERATOR_NAME
|
||||
value: cockroachdb
|
||||
- name: POD_NAME
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.name
|
||||
- name: NAMESPACE
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.namespace
|
||||
image: cockroachdb/cockroach-operator:v2.11.0@sha256:be00a73a683e860bbcdca3998168f1f512fe300cd9c2e2bcaa88dab8a3afe85b
|
||||
imagePullPolicy: IfNotPresent
|
||||
name: cockroach-operator
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 32Mi
|
||||
serviceAccountName: cockroach-operator-sa
|
||||
---
|
||||
apiVersion: admissionregistration.k8s.io/v1
|
||||
kind: MutatingWebhookConfiguration
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: cockroach-operator-mutating-webhook-configuration
|
||||
webhooks:
|
||||
- admissionReviewVersions:
|
||||
- v1
|
||||
clientConfig:
|
||||
service:
|
||||
name: cockroach-operator-webhook-service
|
||||
namespace: database
|
||||
path: /mutate-crdb-cockroachlabs-com-v1alpha1-crdbcluster
|
||||
failurePolicy: Fail
|
||||
name: mcrdbcluster.kb.io
|
||||
rules:
|
||||
- apiGroups:
|
||||
- crdb.cockroachlabs.com
|
||||
apiVersions:
|
||||
- v1alpha1
|
||||
operations:
|
||||
- CREATE
|
||||
- UPDATE
|
||||
resources:
|
||||
- crdbclusters
|
||||
sideEffects: None
|
||||
---
|
||||
apiVersion: admissionregistration.k8s.io/v1
|
||||
kind: ValidatingWebhookConfiguration
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: cockroach-operator-validating-webhook-configuration
|
||||
webhooks:
|
||||
- admissionReviewVersions:
|
||||
- v1
|
||||
clientConfig:
|
||||
service:
|
||||
name: cockroach-operator-webhook-service
|
||||
namespace: database
|
||||
path: /validate-crdb-cockroachlabs-com-v1alpha1-crdbcluster
|
||||
failurePolicy: Fail
|
||||
name: vcrdbcluster.kb.io
|
||||
rules:
|
||||
- apiGroups:
|
||||
- crdb.cockroachlabs.com
|
||||
apiVersions:
|
||||
- v1alpha1
|
||||
operations:
|
||||
- CREATE
|
||||
- UPDATE
|
||||
resources:
|
||||
- crdbclusters
|
||||
sideEffects: None
|
7
archive/cockroachdb/app/kustomization.yaml
Normal file
7
archive/cockroachdb/app/kustomization.yaml
Normal file
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
namespace: database
|
||||
resources:
|
||||
- ./crdb-crd.yaml
|
||||
- ./crdb-operator.yaml
|
14
archive/cockroachdb/ks.yaml
Normal file
14
archive/cockroachdb/ks.yaml
Normal file
|
@ -0,0 +1,14 @@
|
|||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: cluster-apps-database-cockroachdb
|
||||
namespace: flux-system
|
||||
spec:
|
||||
interval: 30m
|
||||
path: "./kubernetes/valinor/apps/database/cockroachdb/app"
|
||||
prune: false
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
name: valinor
|
||||
wait: false # no flux ks dependents
|
|
@ -0,0 +1,46 @@
|
|||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2beta1
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: cert-manager
|
||||
namespace: cert-manager
|
||||
spec:
|
||||
interval: 30m
|
||||
chart:
|
||||
spec:
|
||||
chart: cert-manager
|
||||
version: v1.12.3
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: jetstack
|
||||
namespace: flux-system
|
||||
interval: 30m
|
||||
|
||||
install:
|
||||
crds: CreateReplace
|
||||
upgrade:
|
||||
crds: CreateReplace
|
||||
|
||||
values:
|
||||
installCRDs: true
|
||||
|
||||
webhook:
|
||||
enabled: true
|
||||
|
||||
extraArgs:
|
||||
- --dns01-recursive-nameservers=1.1.1.1:53,9.9.9.9:53
|
||||
- --dns01-recursive-nameservers-only
|
||||
- --enable-certificate-owner-ref
|
||||
|
||||
replicaCount: 1
|
||||
|
||||
podDnsPolicy: "None"
|
||||
podDnsConfig:
|
||||
nameservers:
|
||||
- "1.1.1.1"
|
||||
- "9.9.9.9"
|
||||
prometheus:
|
||||
enabled: true
|
||||
servicemonitor:
|
||||
enabled: true
|
||||
prometheusInstance: monitoring
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
namespace: cert-manager
|
||||
resources:
|
||||
- ./helmrelease.yaml
|
|
@ -0,0 +1,22 @@
|
|||
---
|
||||
apiVersion: external-secrets.io/v1beta1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: dnsimple-api-token
|
||||
namespace: cert-manager
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: onepassword-connect
|
||||
target:
|
||||
name: dnsimple-api-token
|
||||
creationPolicy: Owner
|
||||
data:
|
||||
- secretKey: api-token
|
||||
remoteRef:
|
||||
key: DNSimple
|
||||
property: cert-manager
|
||||
- secretKey: letsencrypt-email
|
||||
remoteRef:
|
||||
key: DNSimple
|
||||
property: letsencrypt-email
|
|
@ -0,0 +1,34 @@
|
|||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2beta1
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: dnsimple-issuer
|
||||
namespace: cert-manager
|
||||
spec:
|
||||
interval: 30m
|
||||
chart:
|
||||
spec:
|
||||
chart: cert-manager-webhook-dnsimple
|
||||
version: 0.0.6
|
||||
interval: 30m
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: jahanson
|
||||
namespace: flux-system
|
||||
|
||||
values:
|
||||
controller:
|
||||
annotations:
|
||||
reloader.stakater.com/auto: "true"
|
||||
dnsimple:
|
||||
token:
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: dnsimple-api-token
|
||||
key: api-token
|
||||
clusterIssuer:
|
||||
email:
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: dnsimple-api-token
|
||||
key: letsencrypt-email
|
|
@ -0,0 +1,21 @@
|
|||
---
|
||||
apiVersion: cert-manager.io/v1
|
||||
kind: ClusterIssuer
|
||||
metadata:
|
||||
name: letsencrypt-production
|
||||
spec:
|
||||
acme:
|
||||
email: "joe@veri.dev"
|
||||
preferredChain: ""
|
||||
privateKeySecretRef:
|
||||
name: letsencrypt-production
|
||||
server: https://acme-v02.api.letsencrypt.org/directory
|
||||
solvers:
|
||||
- dns01:
|
||||
webhook:
|
||||
config:
|
||||
tokenSecretRef:
|
||||
key: api-token
|
||||
name: dnsimple-api-token
|
||||
solverName: dnsimple
|
||||
groupName: acme.jahanson.com
|
|
@ -0,0 +1,20 @@
|
|||
---
|
||||
apiVersion: cert-manager.io/v1
|
||||
kind: ClusterIssuer
|
||||
metadata:
|
||||
name: letsencrypt-staging
|
||||
spec:
|
||||
acme:
|
||||
preferredChain: ""
|
||||
privateKeySecretRef:
|
||||
name: letsencrypt-staging
|
||||
server: https://acme-staging-v02.api.letsencrypt.org/directory
|
||||
solvers:
|
||||
- dns01:
|
||||
webhook:
|
||||
config:
|
||||
tokenSecretRef:
|
||||
key: api-token
|
||||
name: dnsimple-api-token
|
||||
solverName: dnsimple
|
||||
groupName: acme.jahanson.com
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
namespace: cert-manager
|
||||
resources:
|
||||
- ./externalsecret.yaml
|
||||
- ./issuer-letsencrypt-prod.yaml
|
||||
- ./issuer-letsencrypt-staging.yaml
|
||||
- ./helmrelease.yaml
|
30
kubernetes/apps/cert-manager/cert-manager/ks.yaml
Normal file
30
kubernetes/apps/cert-manager/cert-manager/ks.yaml
Normal file
|
@ -0,0 +1,30 @@
|
|||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: cluster-apps-cert-manager
|
||||
namespace: flux-system
|
||||
spec:
|
||||
interval: 10m
|
||||
path: "./kubernetes/valinor/apps/cert-manager/cert-manager/app"
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
name: valinor
|
||||
wait: true
|
||||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: cluster-apps-cert-manager-issuers
|
||||
namespace: flux-system
|
||||
spec:
|
||||
interval: 10m
|
||||
path: "./kubernetes/valinor/apps/cert-manager/cert-manager/issuers"
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
name: valinor
|
||||
wait: true
|
||||
dependsOn:
|
||||
- name: cluster-apps-cert-manager
|
8
kubernetes/apps/cert-manager/kustomization.yaml
Normal file
8
kubernetes/apps/cert-manager/kustomization.yaml
Normal file
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
resources:
|
||||
# Pre Flux-Kustomizations
|
||||
- ./namespace.yaml
|
||||
# Flux-Kustomizations
|
||||
- ./cert-manager/ks.yaml
|
7
kubernetes/apps/cert-manager/namespace.yaml
Normal file
7
kubernetes/apps/cert-manager/namespace.yaml
Normal file
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: cert-manager
|
||||
labels:
|
||||
kustomize.toolkit.fluxcd.io/prune: disabled
|
|
@ -0,0 +1,35 @@
|
|||
---
|
||||
apiVersion: external-secrets.io/v1beta1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: cloudnative-pg
|
||||
namespace: fediverse
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: onepassword-connect
|
||||
target:
|
||||
name: cloudnative-pg-secret
|
||||
creationPolicy: Owner
|
||||
template:
|
||||
engineVersion: v2
|
||||
metadata:
|
||||
labels:
|
||||
cnpg.io/reload: "true"
|
||||
data:
|
||||
- secretKey: username
|
||||
remoteRef:
|
||||
key: cloudnative-pg
|
||||
property: POSTGRES_SUPER_USER
|
||||
- secretKey: password
|
||||
remoteRef:
|
||||
key: cloudnative-pg
|
||||
property: POSTGRES_SUPER_PASS
|
||||
- secretKey: aws-access-key-id
|
||||
remoteRef:
|
||||
key: cloudnative-pg
|
||||
property: AWS_ACCESS_KEY_ID
|
||||
- secretKey: aws-secret-access-key
|
||||
remoteRef:
|
||||
key: cloudnative-pg
|
||||
property: AWS_SECRET_ACCESS_KEY
|
33
kubernetes/apps/database/cloudnative-pg/app/helmrelease.yaml
Normal file
33
kubernetes/apps/database/cloudnative-pg/app/helmrelease.yaml
Normal file
|
@ -0,0 +1,33 @@
|
|||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2beta1
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: cloudnative-pg
|
||||
namespace: fediverse
|
||||
spec:
|
||||
interval: 30m
|
||||
chart:
|
||||
spec:
|
||||
chart: cloudnative-pg
|
||||
version: 0.18.2
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: cloudnative-pg
|
||||
namespace: flux-system
|
||||
maxHistory: 2
|
||||
install:
|
||||
createNamespace: true
|
||||
remediation:
|
||||
retries: 3
|
||||
upgrade:
|
||||
cleanupOnFail: true
|
||||
remediation:
|
||||
retries: 3
|
||||
uninstall:
|
||||
keepHistory: false
|
||||
values:
|
||||
crds:
|
||||
create: true
|
||||
config:
|
||||
data:
|
||||
INHERITED_ANNOTATIONS: kyverno.io/ignore
|
|
@ -0,0 +1,17 @@
|
|||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
namespace: fediverse
|
||||
resources:
|
||||
- ./externalsecret.yaml
|
||||
- ./helmrelease.yaml
|
||||
configMapGenerator:
|
||||
- name: cloudnative-pg-dashboard
|
||||
files:
|
||||
- cloudnative-pg-dashboard.json=https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/main/docs/src/samples/monitoring/grafana-dashboard.json
|
||||
generatorOptions:
|
||||
disableNameSuffixHash: true
|
||||
annotations:
|
||||
kustomize.toolkit.fluxcd.io/substitute: disabled
|
||||
labels:
|
||||
grafana_dashboard: "true"
|
42
kubernetes/apps/database/cloudnative-pg/cluster/cluster.yaml
Normal file
42
kubernetes/apps/database/cloudnative-pg/cluster/cluster.yaml
Normal file
|
@ -0,0 +1,42 @@
|
|||
---
|
||||
apiVersion: postgresql.cnpg.io/v1
|
||||
kind: Cluster
|
||||
metadata:
|
||||
name: postgres
|
||||
namespace: fediverse
|
||||
annotations:
|
||||
kyverno.io/ignore: "true"
|
||||
spec:
|
||||
instances: 3
|
||||
imageName: ghcr.io/cloudnative-pg/postgresql:14.8-6
|
||||
inheritedMetadata:
|
||||
labels:
|
||||
kube-image-keeper.enix.io/image-caching-policy: ignore
|
||||
primaryUpdateStrategy: unsupervised
|
||||
storage:
|
||||
size: 60Gi
|
||||
storageClass: ceph-block
|
||||
superuserSecret:
|
||||
name: cloudnative-pg-secret
|
||||
postgresql:
|
||||
parameters:
|
||||
max_connections: "600"
|
||||
shared_buffers: 512MB
|
||||
monitoring:
|
||||
enablePodMonitor: true
|
||||
backup:
|
||||
retentionPolicy: 30d
|
||||
barmanObjectStore:
|
||||
wal:
|
||||
compression: bzip2
|
||||
maxParallel: 8
|
||||
destinationPath: s3://valinor-cnpg/
|
||||
endpointURL: https://${SECRET_CLOUDFLARE_ACCOUNT_ID}.r2.cloudflarestorage.com
|
||||
serverName: postgres-v3
|
||||
s3Credentials:
|
||||
accessKeyId:
|
||||
name: cloudnative-pg-secret
|
||||
key: aws-access-key-id
|
||||
secretAccessKey:
|
||||
name: cloudnative-pg-secret
|
||||
key: aws-secret-access-key
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
namespace: fediverse
|
||||
resources:
|
||||
- ./cluster.yaml
|
||||
- ./scheduledbackup.yaml
|
||||
- ./prometheusrule.yaml
|
||||
# - ./service.yaml
|
|
@ -0,0 +1,67 @@
|
|||
---
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: PrometheusRule
|
||||
metadata:
|
||||
name: cloudnative-pg-rules
|
||||
namespace: fediverse
|
||||
labels:
|
||||
prometheus: k8s
|
||||
role: alert-rules
|
||||
spec:
|
||||
groups:
|
||||
- name: cloudnative-pg.rules
|
||||
rules:
|
||||
- alert: LongRunningTransaction
|
||||
annotations:
|
||||
description: Pod {{ $labels.pod }} is taking more than 5 minutes (300 seconds) for a query.
|
||||
summary: A query is taking longer than 5 minutes.
|
||||
expr: |-
|
||||
cnpg_backends_max_tx_duration_seconds > 300
|
||||
for: 1m
|
||||
labels:
|
||||
severity: warning
|
||||
- alert: BackendsWaiting
|
||||
annotations:
|
||||
description: Pod {{ $labels.pod }} has been waiting for longer than 5 minutes
|
||||
summary: If a backend is waiting for longer than 5 minutes
|
||||
expr: |-
|
||||
cnpg_backends_waiting_total > 300
|
||||
for: 1m
|
||||
labels:
|
||||
severity: warning
|
||||
- alert: PGDatabase
|
||||
annotations:
|
||||
description: Over 150,000,000 transactions from frozen xid on pod {{ $labels.pod }}
|
||||
summary: Number of transactions from the frozen XID to the current one
|
||||
expr: |-
|
||||
cnpg_pg_database_xid_age > 150000000
|
||||
for: 1m
|
||||
labels:
|
||||
severity: warning
|
||||
- alert: PGReplication
|
||||
annotations:
|
||||
description: Standby is lagging behind by over 300 seconds (5 minutes)
|
||||
summary: The standby is lagging behind the primary
|
||||
expr: |-
|
||||
cnpg_pg_replication_lag > 300
|
||||
for: 1m
|
||||
labels:
|
||||
severity: warning
|
||||
- alert: LastFailedArchiveTime
|
||||
annotations:
|
||||
description: Archiving failed for {{ $labels.pod }}
|
||||
summary: Checks the last time archiving failed. Will be -1 when it has not failed.
|
||||
expr: |-
|
||||
delta(cnpg_pg_stat_archiver_last_failed_time[5m]) > 0
|
||||
for: 1m
|
||||
labels:
|
||||
severity: warning
|
||||
- alert: DatabaseDeadlockConflicts
|
||||
annotations:
|
||||
description: There are over 10 deadlock conflicts in {{ $labels.pod }}
|
||||
summary: Checks the number of database conflicts
|
||||
expr: |-
|
||||
cnpg_pg_stat_database_deadlocks > 10
|
||||
for: 1m
|
||||
labels:
|
||||
severity: warning
|
|
@ -0,0 +1,12 @@
|
|||
---
|
||||
apiVersion: postgresql.cnpg.io/v1
|
||||
kind: ScheduledBackup
|
||||
metadata:
|
||||
name: postgres
|
||||
namespace: fediverse
|
||||
spec:
|
||||
schedule: "@weekly"
|
||||
immediate: true
|
||||
backupOwnerReference: self
|
||||
cluster:
|
||||
name: postgres
|
35
kubernetes/apps/database/cloudnative-pg/ks.yaml
Normal file
35
kubernetes/apps/database/cloudnative-pg/ks.yaml
Normal file
|
@ -0,0 +1,35 @@
|
|||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: cluster-apps-cloudnative-pg
|
||||
namespace: flux-system
|
||||
spec:
|
||||
path: ./kubernetes/valinor/apps/database/cloudnative-pg/app
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
name: valinor
|
||||
wait: true
|
||||
interval: 30m
|
||||
retryInterval: 1m
|
||||
timeout: 5m
|
||||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: cluster-apps-cloudnative-pg-cluster
|
||||
namespace: flux-system
|
||||
spec:
|
||||
dependsOn:
|
||||
- name: cluster-apps-cloudnative-pg
|
||||
- name: cluster-apps-external-secrets-stores
|
||||
path: ./kubernetes/valinor/apps/database/cloudnative-pg/cluster
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
name: valinor
|
||||
wait: true
|
||||
interval: 30m
|
||||
retryInterval: 1m
|
||||
timeout: 5m
|
59
kubernetes/apps/database/dragonflydb/app/helmrelease.yaml
Normal file
59
kubernetes/apps/database/dragonflydb/app/helmrelease.yaml
Normal file
|
@ -0,0 +1,59 @@
|
|||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2beta1
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: dragonfly-valinor
|
||||
namespace: fediverse
|
||||
spec:
|
||||
interval: 30m
|
||||
chart:
|
||||
spec:
|
||||
chart: dragonfly
|
||||
version: v1.7.1
|
||||
interval: 30m
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: dragonflydb
|
||||
namespace: flux-system
|
||||
|
||||
values:
|
||||
replicaCount: 1
|
||||
controller:
|
||||
annotations:
|
||||
reloader.stakater.com/auto: "true"
|
||||
|
||||
podSecurityContext:
|
||||
runAsUser: 568
|
||||
runAsGroup: 568
|
||||
fsGroup: 568
|
||||
fsGroupChangePolicy: "OnRootMismatch"
|
||||
supplementalGroups:
|
||||
- 65539
|
||||
storage:
|
||||
enabled: true
|
||||
requests: 128Mi # Set as desired
|
||||
|
||||
resources:
|
||||
requests:
|
||||
cpu: 1000m
|
||||
memory: 6Gi
|
||||
limits:
|
||||
memory: 8Gi
|
||||
extraArgs:
|
||||
- --dbfilename=dump
|
||||
- --save_schedule=*:* # HH:MM glob format
|
||||
|
||||
serviceMonitor:
|
||||
enabled: true
|
||||
|
||||
prometheusRule:
|
||||
enabled: true
|
||||
spec:
|
||||
- alert: DragonflyMissing
|
||||
expr: absent(dragonfly_uptime_in_seconds) == 1
|
||||
for: 0m
|
||||
labels:
|
||||
severity: critical
|
||||
annotations:
|
||||
summary: Dragonfly is missing
|
||||
description: "Dragonfly is missing"
|
16
kubernetes/apps/database/dragonflydb/app/kustomization.yaml
Normal file
16
kubernetes/apps/database/dragonflydb/app/kustomization.yaml
Normal file
|
@ -0,0 +1,16 @@
|
|||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
namespace: fediverse
|
||||
resources:
|
||||
- ./helmrelease.yaml
|
||||
configMapGenerator:
|
||||
- name: dragonflydb-dashboard
|
||||
files:
|
||||
- dragonflydb-dashboard.json=https://raw.githubusercontent.com/dragonflydb/dragonfly/main/tools/local/monitoring/grafana/provisioning/dashboards/dashboard.json
|
||||
generatorOptions:
|
||||
disableNameSuffixHash: true
|
||||
annotations:
|
||||
kustomize.toolkit.fluxcd.io/substitute: disabled
|
||||
labels:
|
||||
grafana_dashboard: "true"
|
14
kubernetes/apps/database/dragonflydb/ks.yaml
Normal file
14
kubernetes/apps/database/dragonflydb/ks.yaml
Normal file
|
@ -0,0 +1,14 @@
|
|||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: cluster-apps-database-dragonflydb
|
||||
namespace: flux-system
|
||||
spec:
|
||||
interval: 30m
|
||||
path: "./kubernetes/valinor/apps/database/dragonflydb/app"
|
||||
prune: false
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
name: valinor
|
||||
wait: false # no flux ks dependents
|
9
kubernetes/apps/database/kustomization.yaml
Normal file
9
kubernetes/apps/database/kustomization.yaml
Normal file
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
resources:
|
||||
# Pre Flux-Kustomizations
|
||||
- ./namespace.yaml
|
||||
# Flux-Kustomizations
|
||||
- ./cloudnative-pg/ks.yaml
|
||||
- ./dragonflydb/ks.yaml
|
7
kubernetes/apps/database/namespace.yaml
Normal file
7
kubernetes/apps/database/namespace.yaml
Normal file
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: database
|
||||
labels:
|
||||
kustomize.toolkit.fluxcd.io/prune: disabled
|
17
kubernetes/apps/default/rocky.yaml
Normal file
17
kubernetes/apps/default/rocky.yaml
Normal file
|
@ -0,0 +1,17 @@
|
|||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: rocky-linux
|
||||
namespace: default
|
||||
spec:
|
||||
containers:
|
||||
- name: rocky
|
||||
image: rockylinux:9
|
||||
command: ["/bin/bash", "-c", "while true; do sleep 10; done"]
|
||||
resources:
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 443M
|
||||
limits:
|
||||
cpu: 323m
|
||||
memory: 886M
|
42
kubernetes/apps/default/ubuntu.yaml
Normal file
42
kubernetes/apps/default/ubuntu.yaml
Normal file
|
@ -0,0 +1,42 @@
|
|||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: ubuntu-server
|
||||
namespace: default
|
||||
spec:
|
||||
# serviceAccount: tailscale
|
||||
containers:
|
||||
- name: ubuntu
|
||||
image: ubuntu:latest@sha256:0bced47fffa3361afa981854fcabcd4577cd43cebbb808cea2b1f33a3dd7f508
|
||||
command: ["/bin/bash", "-c", "while true; do sleep 10; done"]
|
||||
resources:
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 443M
|
||||
limits:
|
||||
cpu: 323m
|
||||
memory: 886M
|
||||
# - name: tailscale
|
||||
# imagePullPolicy: Always
|
||||
# image: "ghcr.io/tailscale/tailscale:v1.42.0"
|
||||
# env:
|
||||
# - name: TS_KUBE_SECRET
|
||||
# value: "tailscale-state"
|
||||
# - name: TS_USERSPACE
|
||||
# value: "false"
|
||||
# - name: TS_EXTRA_ARGS
|
||||
# value: "--accept-routes"
|
||||
# envFrom:
|
||||
# - secretRef:
|
||||
# name: tailscale-auth
|
||||
# resources:
|
||||
# requests:
|
||||
# cpu: 50m
|
||||
# memory: 50Mi
|
||||
# limits:
|
||||
# cpu: 100m
|
||||
# memory: 128Mi
|
||||
# securityContext:
|
||||
# capabilities:
|
||||
# add:
|
||||
# - NET_ADMIN
|
8
kubernetes/apps/elastic/kustomization.yaml
Normal file
8
kubernetes/apps/elastic/kustomization.yaml
Normal file
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
resources:
|
||||
# Pre Flux-Kustomizations
|
||||
- ./namespace.yaml
|
||||
# Flux-Kustomizations
|
||||
- ./operator/ks.yaml
|
8
kubernetes/apps/elastic/namespace.yaml
Normal file
8
kubernetes/apps/elastic/namespace.yaml
Normal file
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: elastic
|
||||
labels:
|
||||
goldilocks.fairwinds.com/enabled: "true"
|
||||
kustomize.toolkit.fluxcd.io/prune: disabled
|
25
kubernetes/apps/elastic/operator/app/helmrelease.yaml
Normal file
25
kubernetes/apps/elastic/operator/app/helmrelease.yaml
Normal file
|
@ -0,0 +1,25 @@
|
|||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2beta1
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: eck-operator
|
||||
namespace: elastic
|
||||
spec:
|
||||
releaseName: eck-operator
|
||||
interval: 1h
|
||||
chart:
|
||||
spec:
|
||||
chart: eck-operator
|
||||
version: 2.9.0
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: elastic
|
||||
namespace: flux-system
|
||||
interval: 1h
|
||||
install:
|
||||
createNamespace: true
|
||||
upgrade:
|
||||
crds: CreateReplace
|
||||
values:
|
||||
config:
|
||||
logVerbosity: "-1"
|
6
kubernetes/apps/elastic/operator/app/kustomization.yaml
Normal file
6
kubernetes/apps/elastic/operator/app/kustomization.yaml
Normal file
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
namespace: elastic
|
||||
resources:
|
||||
- ./helmrelease.yaml
|
21
kubernetes/apps/elastic/operator/ks.yaml
Normal file
21
kubernetes/apps/elastic/operator/ks.yaml
Normal file
|
@ -0,0 +1,21 @@
|
|||
apiVersion: kustomize.toolkit.fluxcd.io/v1beta1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: cluster-apps-elastic-operator
|
||||
namespace: flux-system
|
||||
labels:
|
||||
substitution.flux.home.arpa/enabled: "true"
|
||||
spec:
|
||||
path: ./kubernetes/valinor/apps/elastic/operator/app
|
||||
prune: false
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
name: valinor
|
||||
healthChecks:
|
||||
- apiVersion: helm.toolkit.fluxcd.io/v2beta1
|
||||
kind: HelmRelease
|
||||
name: eck-operator
|
||||
namespace: elastic
|
||||
interval: 30m
|
||||
retryInterval: 1m
|
||||
timeout: 3m
|
33
kubernetes/apps/fediverse/elk/app/externalsecret.yaml
Normal file
33
kubernetes/apps/fediverse/elk/app/externalsecret.yaml
Normal file
|
@ -0,0 +1,33 @@
|
|||
---
|
||||
apiVersion: external-secrets.io/v1beta1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: elk
|
||||
namespace: fediverse
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: onepassword-connect
|
||||
target:
|
||||
name: elk-secret
|
||||
creationPolicy: Owner
|
||||
template:
|
||||
engineVersion: v2
|
||||
data:
|
||||
NUXT_CLOUDFLARE_API_TOKEN: "{{ .cloudflare_kv_storage_apikey }}"
|
||||
NUXT_CLOUDFLARE_ACCOUNT_ID: "{{ .cloudflare_account_id }}"
|
||||
NUXT_CLOUDFLARE_NAMESPACE_ID: "{{ .cloudflare_kv_storage_namespace }}"
|
||||
NUXT_STORAGE_DRIVER: "cloudflare"
|
||||
data:
|
||||
- secretKey: cloudflare_kv_storage_apikey
|
||||
remoteRef:
|
||||
key: cloudflare
|
||||
property: elk_kv_storage_apikey
|
||||
- secretKey: cloudflare_account_id
|
||||
remoteRef:
|
||||
key: cloudflare
|
||||
property: account_id
|
||||
- secretKey: cloudflare_kv_storage_namespace
|
||||
remoteRef:
|
||||
key: cloudflare
|
||||
property: elk_kv_storage_namespace
|
75
kubernetes/apps/fediverse/elk/app/helmrelease.yaml
Normal file
75
kubernetes/apps/fediverse/elk/app/helmrelease.yaml
Normal file
|
@ -0,0 +1,75 @@
|
|||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2beta1
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: elk
|
||||
namespace: fediverse
|
||||
spec:
|
||||
interval: 30m
|
||||
chart:
|
||||
spec:
|
||||
chart: app-template
|
||||
version: 1.5.1
|
||||
interval: 30m
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: bjw-s
|
||||
namespace: flux-system
|
||||
|
||||
values:
|
||||
controller:
|
||||
annotations:
|
||||
reloader.stakater.com/auto: "true"
|
||||
|
||||
image:
|
||||
repository: ghcr.io/elk-zone/elk
|
||||
tag: v0.10.0@sha256:8cbc1d4627de0f9c81e1fa08bcbff251d42b43ea36f443e748eda25cdef1ee23
|
||||
|
||||
env:
|
||||
NUXT_PUBLIC_DEFAULT_SERVER: "valinor.social"
|
||||
# envFrom:
|
||||
# - secretRef:
|
||||
# name: elk-secret
|
||||
|
||||
podSecurityContext:
|
||||
runAsUser: 911
|
||||
runAsGroup: 911
|
||||
fsGroup: 911
|
||||
fsGroupChangePolicy: "OnRootMismatch"
|
||||
supplementalGroups:
|
||||
- 65539
|
||||
|
||||
service:
|
||||
main:
|
||||
ports:
|
||||
http:
|
||||
port: 5314
|
||||
|
||||
ingress:
|
||||
main:
|
||||
enabled: true
|
||||
ingressClassName: "nginx"
|
||||
annotations:
|
||||
external-dns.alpha.kubernetes.io/target: ingress.valinor.social
|
||||
nginx.ingress.kubernetes.io/ssl-redirect: "true"
|
||||
hosts:
|
||||
- host: &host "elk.valinor.social"
|
||||
paths:
|
||||
- path: /
|
||||
tls:
|
||||
- hosts:
|
||||
- *host
|
||||
|
||||
persistence:
|
||||
config:
|
||||
enabled: true
|
||||
existingClaim: elk-config
|
||||
mountPath: /elk/data
|
||||
|
||||
resources:
|
||||
requests:
|
||||
cpu: 15m
|
||||
memory: 64M
|
||||
limits:
|
||||
cpu: 46m
|
||||
memory: 154M
|
8
kubernetes/apps/fediverse/elk/app/kustomization.yaml
Normal file
8
kubernetes/apps/fediverse/elk/app/kustomization.yaml
Normal file
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
namespace: fediverse
|
||||
resources:
|
||||
- ./helmrelease.yaml
|
||||
- ./externalsecret.yaml
|
||||
- ./pvc.yaml
|
15
kubernetes/apps/fediverse/elk/app/pvc.yaml
Normal file
15
kubernetes/apps/fediverse/elk/app/pvc.yaml
Normal file
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: elk-config
|
||||
namespace: fediverse
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
|
||||
resources:
|
||||
requests:
|
||||
storage: 256Mi
|
||||
|
||||
storageClassName: ceph-block
|
18
kubernetes/apps/fediverse/elk/ks.yaml
Normal file
18
kubernetes/apps/fediverse/elk/ks.yaml
Normal file
|
@ -0,0 +1,18 @@
|
|||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: cluster-apps-elk
|
||||
namespace: flux-system
|
||||
labels:
|
||||
substitution.flux.home.arpa/enabled: "true"
|
||||
spec:
|
||||
interval: 10m
|
||||
path: "./kubernetes/valinor/apps/fediverse/elk/app"
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
name: valinor
|
||||
wait: true
|
||||
dependsOn:
|
||||
- name: cluster-apps-external-secrets-stores
|
9
kubernetes/apps/fediverse/kustomization.yaml
Normal file
9
kubernetes/apps/fediverse/kustomization.yaml
Normal file
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
resources:
|
||||
# Pre Flux-Kustomizations
|
||||
- ./namespace.yaml
|
||||
# Flux-Kustomizations
|
||||
- ./elk/ks.yaml
|
||||
- ./mastodon/ks.yaml
|
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
namespace: fediverse
|
||||
configMapGenerator:
|
||||
# Ref: https://grafana.com/grafana/dashboards/17492
|
||||
- name: mastodon-dashboard
|
||||
files:
|
||||
- mastodon-stats_rev5.json
|
||||
generatorOptions:
|
||||
disableNameSuffixHash: true
|
||||
annotations:
|
||||
kustomize.toolkit.fluxcd.io/substitute: disabled
|
||||
labels:
|
||||
grafana_dashboard: "true"
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
resources:
|
||||
- ./dashboard
|
41
kubernetes/apps/fediverse/mastodon/app/elasticsearch.yaml
Normal file
41
kubernetes/apps/fediverse/mastodon/app/elasticsearch.yaml
Normal file
|
@ -0,0 +1,41 @@
|
|||
---
|
||||
apiVersion: elasticsearch.k8s.elastic.co/v1
|
||||
kind: Elasticsearch
|
||||
metadata:
|
||||
name: mastodon
|
||||
namespace: fediverse
|
||||
spec:
|
||||
version: 7.17.9
|
||||
http:
|
||||
tls:
|
||||
selfSignedCertificate:
|
||||
disabled: true
|
||||
nodeSets:
|
||||
- name: default
|
||||
count: 2
|
||||
config:
|
||||
node.store.allow_mmap: false
|
||||
xpack.security.authc:
|
||||
anonymous:
|
||||
username: anonymous
|
||||
roles: superuser
|
||||
authz_exception: false
|
||||
podTemplate:
|
||||
spec:
|
||||
containers:
|
||||
- name: elasticsearch
|
||||
resources:
|
||||
requests:
|
||||
cpu: 62m
|
||||
memory: 512Mi
|
||||
limits:
|
||||
memory: 8Gi
|
||||
volumeClaimTemplates:
|
||||
- metadata:
|
||||
name: elasticsearch-data # Do not change this name unless you set up a volume mount for the data path.
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 50Gi
|
86
kubernetes/apps/fediverse/mastodon/app/externalsecret.yaml
Normal file
86
kubernetes/apps/fediverse/mastodon/app/externalsecret.yaml
Normal file
|
@ -0,0 +1,86 @@
|
|||
---
|
||||
apiVersion: external-secrets.io/v1beta1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: mastodon
|
||||
namespace: fediverse
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: onepassword-connect
|
||||
target:
|
||||
name: mastodon-secret
|
||||
creationPolicy: Owner
|
||||
template:
|
||||
engineVersion: v2
|
||||
data:
|
||||
DB_SSLMODE: "require"
|
||||
LOCAL_DOMAIN: "valinor.social"
|
||||
SINGLE_USER_MODE: "false"
|
||||
SECRET_KEY_BASE: "{{ .mastodon_secret_key_base }}"
|
||||
OTP_SECRET: "{{ .mastodon_otp_secret }}"
|
||||
VAPID_PRIVATE_KEY: "{{ .mastodon_vapid_private_key }}"
|
||||
VAPID_PUBLIC_KEY: "{{ .mastodon_vapid_public_key }}"
|
||||
DB_HOST: "{{ .mastodon_db_host }}"
|
||||
DB_USER: "{{ .mastodon_db_user }}"
|
||||
DB_PORT: "{{ .mastodon_db_port }}"
|
||||
DB_PASS: "{{ .mastodon_db_pass }}"
|
||||
REDIS_URL: "{{ .mastodon_redis_url }}"
|
||||
S3_ENABLED: "true"
|
||||
S3_PROTOCOL: "https"
|
||||
S3_ENDPOINT: "{{ .s3_valinor_endpoint }}"
|
||||
S3_HOSTNAME: "{{ .s3_valinor_hostname }}"
|
||||
S3_BUCKET: "{{ .s3_valinor_bucket }}"
|
||||
S3_ALIAS_HOST: "{{ .mastodon_s3_alias_host }}"
|
||||
S3_PERMISSION: "private"
|
||||
AWS_ACCESS_KEY_ID: "{{ .s3_valinor_access_key }}"
|
||||
AWS_SECRET_ACCESS_KEY: "{{ .s3_valinor_secret_key }}"
|
||||
SMTP_SERVER: "smtp.mailgun.org"
|
||||
SMTP_PORT: "587"
|
||||
SMTP_LOGIN: "{{ .mailgun_smtp_user }}"
|
||||
SMTP_PASSWORD: "{{ .mailgun_smtp_password }}"
|
||||
SMTP_AUTH_METHOD: "plain"
|
||||
SMTP_OPENSSL_VERIFY_MODE: "peer"
|
||||
SMTP_ENABLE_STARTTLS: "auto"
|
||||
SMTP_FROM_ADDRESS: "Mastodon <notifications@valinor.social>"
|
||||
DB_POOL: "25"
|
||||
DEEPL_PLAN: "free"
|
||||
DEEPL_API_KEY: "{{ .deepl_api_key }}"
|
||||
ES_ENABLED: "{{ .mastodon_es_enabled }}"
|
||||
ES_HOST: "{{ .mastodon_es_host }}"
|
||||
ES_PORT: "{{ .mastodon_es_port }}"
|
||||
STATSD_ADDR: "statsd-exporter.fediverse.svc.cluster.local:9125"
|
||||
CP_DB_PORT: "{{ .mastodon_cp_db_port }}"
|
||||
CP_SIDEKIQ_LOW_VOLUME: "{{ .mastodon_db_name_cp_sidekiq_low_volume }}"
|
||||
CP_SIDEKIQ_HIGH_PRIORITY: "{{ .mastodon_db_name_cp_sidekiq_high_priority }}"
|
||||
CP_SIDEKIQ_INGRESS: "{{ .mastodon_db_name_cp_sidekiq_ingress }}"
|
||||
CP_SIDEKIQ_PULL: "{{ .mastodon_db_name_cp_sidekiq_pull }}"
|
||||
CP_MASTODON_WEB: "{{ .mastodon_db_name_cp_mastodon_web }}"
|
||||
CP_MASTODON_STREAMING: "{{ .mastodon_db_name_cp_mastodon_streaming }}"
|
||||
|
||||
dataFrom:
|
||||
- extract:
|
||||
key: s3
|
||||
rewrite:
|
||||
- regexp:
|
||||
source: "(.*)"
|
||||
target: "s3_$1"
|
||||
- extract:
|
||||
key: mastodon
|
||||
rewrite:
|
||||
- regexp:
|
||||
source: "(.*)"
|
||||
target: "mastodon_$1"
|
||||
data:
|
||||
- secretKey: mailgun_smtp_user
|
||||
remoteRef:
|
||||
key: mailgun
|
||||
property: mastodon_smtp_user
|
||||
- secretKey: mailgun_smtp_password
|
||||
remoteRef:
|
||||
key: mailgun
|
||||
property: mastodon_smtp_password
|
||||
- secretKey: deepl_api_key
|
||||
remoteRef:
|
||||
key: deepl
|
||||
property: api_key
|
31
kubernetes/apps/fediverse/mastodon/app/ingress.yaml
Normal file
31
kubernetes/apps/fediverse/mastodon/app/ingress.yaml
Normal file
|
@ -0,0 +1,31 @@
|
|||
---
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: mastodon-ingress
|
||||
namespace: fediverse
|
||||
annotations:
|
||||
nginx.org/websocket-services: "mastodon-streaming"
|
||||
spec:
|
||||
ingressClassName: "nginx"
|
||||
tls:
|
||||
- hosts:
|
||||
- &host valinor.social
|
||||
rules:
|
||||
- host: *host
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: mastodon-web
|
||||
port:
|
||||
number: 3000
|
||||
- path: /api/v1/streaming
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: mastodon-streaming
|
||||
port:
|
||||
number: 4000
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
namespace: fediverse
|
||||
resources:
|
||||
- ./ingress.yaml
|
||||
- ./externalsecret.yaml
|
||||
- ./elasticsearch.yaml
|
|
@ -0,0 +1,51 @@
|
|||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2beta1
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: &app mastodon-sidekiq-high-priority
|
||||
namespace: fediverse
|
||||
labels:
|
||||
app: mastodon
|
||||
component: sidekiq
|
||||
spec:
|
||||
interval: 30m
|
||||
chart:
|
||||
spec:
|
||||
chart: app-template
|
||||
version: 1.5.1
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: bjw-s
|
||||
namespace: flux-system
|
||||
values:
|
||||
controller:
|
||||
replicas: 1 #Cannot be more than one unless you split out scheduler.
|
||||
strategy: Recreate #We don't want one to exist while the other is being created.
|
||||
annotations:
|
||||
reloader.stakater.com/auto: "true"
|
||||
labels:
|
||||
app: mastodon
|
||||
component: sidekiq
|
||||
image:
|
||||
repository: ghcr.io/mastodon/mastodon
|
||||
tag: v4.1.6@sha256:51405bec6529860c88640bbca3d30bf3a9a82456a3fdae122dc52f4f941808ff
|
||||
command: ["bundle", "exec", "sidekiq", "-c", "25", "-q", "default"]
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: mastodon-secret
|
||||
env:
|
||||
DB_NAME: "$(CP_SIDEKIQ_HIGH_PRIORITY)"
|
||||
DB_PORT: "${CP_DB_PORT}"
|
||||
PREPARED_STATEMENTS: "false" # neccessary for pgbouncer
|
||||
service:
|
||||
main:
|
||||
enabled: false
|
||||
# nodeSelector:
|
||||
# doks.digitalocean.com/node-pool: pool-valinor
|
||||
resources:
|
||||
requests:
|
||||
cpu: 1000m
|
||||
memory: 250M
|
||||
limits:
|
||||
cpu: 3000m
|
||||
memory: 972M
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
namespace: fediverse
|
||||
resources:
|
||||
- ./helmrelease.yaml
|
|
@ -0,0 +1,63 @@
|
|||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2beta1
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: &app mastodon-sidekiq-low-volume
|
||||
namespace: fediverse
|
||||
labels:
|
||||
app: mastodon
|
||||
component: sidekiq
|
||||
spec:
|
||||
interval: 30m
|
||||
chart:
|
||||
spec:
|
||||
chart: app-template
|
||||
version: 1.5.1
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: bjw-s
|
||||
namespace: flux-system
|
||||
values:
|
||||
controller:
|
||||
replicas: 1
|
||||
strategy: RollingUpdate
|
||||
annotations:
|
||||
reloader.stakater.com/auto: "true"
|
||||
labels:
|
||||
app: mastodon
|
||||
component: sidekiq
|
||||
image:
|
||||
repository: ghcr.io/mastodon/mastodon
|
||||
tag: v4.1.6@sha256:51405bec6529860c88640bbca3d30bf3a9a82456a3fdae122dc52f4f941808ff
|
||||
command:
|
||||
[
|
||||
"bundle",
|
||||
"exec",
|
||||
"sidekiq",
|
||||
"-c",
|
||||
"25",
|
||||
"-q",
|
||||
"push",
|
||||
"-q",
|
||||
"mailers",
|
||||
"-q",
|
||||
"scheduler",
|
||||
]
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: mastodon-secret
|
||||
env:
|
||||
DB_NAME: "$(CP_SIDEKIQ_LOW_VOLUME)"
|
||||
DB_PORT: "${CP_DB_PORT}"
|
||||
PREPARED_STATEMENTS: "false" # neccessary for pgbouncer
|
||||
service:
|
||||
main:
|
||||
enabled: false
|
||||
# nodeSelector:
|
||||
# doks.digitalocean.com/node-pool: pool-valinor
|
||||
resources:
|
||||
requests:
|
||||
cpu: 500m
|
||||
memory: 250M
|
||||
limits:
|
||||
memory: 972M
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
namespace: fediverse
|
||||
resources:
|
||||
- ./helmrelease.yaml
|
|
@ -0,0 +1,51 @@
|
|||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2beta1
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: &app mastodon-sidekiq-remote-ingress
|
||||
namespace: fediverse
|
||||
labels:
|
||||
app: mastodon
|
||||
component: sidekiq
|
||||
spec:
|
||||
interval: 30m
|
||||
chart:
|
||||
spec:
|
||||
chart: app-template
|
||||
version: 1.5.1
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: bjw-s
|
||||
namespace: flux-system
|
||||
values:
|
||||
controller:
|
||||
replicas: 1
|
||||
# My default nodes have 2cpus so it seems easier to scale nodes in the panel
|
||||
# rather than messing with tolerations and affinitie. The only reason I can
|
||||
# think of to scale nodes is to scale sidekiq.
|
||||
strategy: RollingUpdate
|
||||
annotations:
|
||||
reloader.stakater.com/auto: "true"
|
||||
labels:
|
||||
app: mastodon
|
||||
component: sidekiq
|
||||
image:
|
||||
repository: ghcr.io/mastodon/mastodon
|
||||
tag: v4.1.6@sha256:51405bec6529860c88640bbca3d30bf3a9a82456a3fdae122dc52f4f941808ff
|
||||
command: ["bundle", "exec", "sidekiq", "-c", "25", "-q", "ingress"]
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: mastodon-secret
|
||||
env:
|
||||
DB_NAME: "$(CP_SIDEKIQ_INGRESS)"
|
||||
DB_PORT: "${CP_DB_PORT}"
|
||||
PREPARED_STATEMENTS: "false" # neccessary for pgbouncer
|
||||
service:
|
||||
main:
|
||||
enabled: false
|
||||
# nodeSelector:
|
||||
# doks.digitalocean.com/node-pool: pool-sidekiq
|
||||
resources:
|
||||
requests:
|
||||
cpu: 2000m
|
||||
memory: 800Mi
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
namespace: fediverse
|
||||
resources:
|
||||
- ./helmrelease.yaml
|
|
@ -0,0 +1,48 @@
|
|||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2beta1
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: &app mastodon-sidekiq-remote-pull
|
||||
namespace: fediverse
|
||||
labels:
|
||||
app: mastodon
|
||||
component: sidekiq
|
||||
spec:
|
||||
interval: 30m
|
||||
chart:
|
||||
spec:
|
||||
chart: app-template
|
||||
version: 1.5.1
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: bjw-s
|
||||
namespace: flux-system
|
||||
values:
|
||||
controller:
|
||||
replicas: 1
|
||||
strategy: RollingUpdate
|
||||
annotations:
|
||||
reloader.stakater.com/auto: "true"
|
||||
labels:
|
||||
app: mastodon
|
||||
component: sidekiq
|
||||
image:
|
||||
repository: ghcr.io/mastodon/mastodon
|
||||
tag: v4.1.6@sha256:51405bec6529860c88640bbca3d30bf3a9a82456a3fdae122dc52f4f941808ff
|
||||
command: ["bundle", "exec", "sidekiq", "-c", "25", "-q", "pull"]
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: mastodon-secret
|
||||
env:
|
||||
DB_NAME: "$(CP_SIDEKIQ_PULL)"
|
||||
DB_PORT: "${CP_DB_PORT}"
|
||||
PREPARED_STATEMENTS: "false" # neccessary for pgbouncer
|
||||
service:
|
||||
main:
|
||||
enabled: false
|
||||
# nodeSelector:
|
||||
# doks.digitalocean.com/node-pool: pool-sidekiq
|
||||
resources:
|
||||
requests:
|
||||
cpu: 2000m
|
||||
memory: 800Mi
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
namespace: fediverse
|
||||
resources:
|
||||
- ./helmrelease.yaml
|
|
@ -0,0 +1,75 @@
|
|||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2beta1
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: &app mastodon-streaming
|
||||
namespace: fediverse
|
||||
labels:
|
||||
app: mastodon
|
||||
component: streaming
|
||||
spec:
|
||||
interval: 30m
|
||||
chart:
|
||||
spec:
|
||||
chart: app-template
|
||||
version: 1.5.1
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: bjw-s
|
||||
namespace: flux-system
|
||||
values:
|
||||
controller:
|
||||
replicas: 2
|
||||
strategy: Recreate
|
||||
annotations:
|
||||
reloader.stakater.com/auto: "true"
|
||||
labels:
|
||||
app: mastodon
|
||||
component: streaming
|
||||
image:
|
||||
repository: ghcr.io/mastodon/mastodon
|
||||
tag: v4.1.6@sha256:51405bec6529860c88640bbca3d30bf3a9a82456a3fdae122dc52f4f941808ff
|
||||
command: [
|
||||
"node",
|
||||
"./streaming"
|
||||
]
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: mastodon-secret
|
||||
env:
|
||||
NODE_TLS_REJECT_UNAUTHORIZED: "0"
|
||||
DB_SSLMODE: "no-verify"
|
||||
DB_NAME: "$(CP_MASTODON_STREAMING)"
|
||||
DB_PORT: "$(DB_PORT)"
|
||||
PREPARED_STATEMENTS: "false" # neccessary for pgbouncer
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /api/v1/streaming/health
|
||||
port: streaming
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /api/v1/streaming/health
|
||||
port: streaming
|
||||
resources:
|
||||
requests:
|
||||
cpu: 15m
|
||||
memory: 50Mi
|
||||
# limits:
|
||||
# cpu: 500m
|
||||
# memory: 250Mi
|
||||
service:
|
||||
main:
|
||||
ports:
|
||||
http:
|
||||
enabled: false
|
||||
streaming:
|
||||
port: 4000
|
||||
affinity:
|
||||
podAntiAffinity:
|
||||
requiredDuringSchedulingIgnoredDuringExecution:
|
||||
- labelSelector:
|
||||
matchExpressions:
|
||||
- key: app.kubernetes.io/name
|
||||
operator: In
|
||||
values: ["mastodon-streaming"]
|
||||
topologyKey: kubernetes.io/hostname
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
namespace: fediverse
|
||||
resources:
|
||||
- ./helmrelease.yaml
|
|
@ -0,0 +1,77 @@
|
|||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2beta1
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: mastodon-web
|
||||
namespace: fediverse
|
||||
labels:
|
||||
app: mastodon
|
||||
component: web
|
||||
spec:
|
||||
interval: 30m
|
||||
chart:
|
||||
spec:
|
||||
chart: app-template
|
||||
version: 1.5.1
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: bjw-s
|
||||
namespace: flux-system
|
||||
values:
|
||||
controller:
|
||||
replicas: 2
|
||||
strategy: Recreate
|
||||
annotations:
|
||||
reloader.stakater.com/auto: "true"
|
||||
labels:
|
||||
app: mastodon
|
||||
component: web
|
||||
image:
|
||||
repository: ghcr.io/mastodon/mastodon
|
||||
tag: v4.1.6@sha256:51405bec6529860c88640bbca3d30bf3a9a82456a3fdae122dc52f4f941808ff
|
||||
command:
|
||||
- bundle
|
||||
- exec
|
||||
- puma
|
||||
- -C
|
||||
- config/puma.rb
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: mastodon-secret
|
||||
env:
|
||||
DB_NAME: "$(CP_MASTODON_WEB)"
|
||||
DB_PORT: "$(DB_PORT)"
|
||||
PREPARED_STATEMENTS: "false" # neccessary for pgbouncer
|
||||
resources:
|
||||
requests:
|
||||
cpu: 15m
|
||||
memory: 500Mi
|
||||
# limits:
|
||||
# memory: 1Gi
|
||||
service:
|
||||
main:
|
||||
ports:
|
||||
http:
|
||||
port: 3000
|
||||
livenessProbe:
|
||||
tcpSocket:
|
||||
port: http
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /health
|
||||
port: http
|
||||
startupProbe:
|
||||
httpGet:
|
||||
path: /health
|
||||
port: http
|
||||
failureThreshold: 30
|
||||
periodSeconds: 5
|
||||
affinity:
|
||||
podAntiAffinity:
|
||||
requiredDuringSchedulingIgnoredDuringExecution:
|
||||
- labelSelector:
|
||||
matchExpressions:
|
||||
- key: app.kubernetes.io/name
|
||||
operator: In
|
||||
values: ["mastodon-web"]
|
||||
topologyKey: kubernetes.io/hostname
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
namespace: fediverse
|
||||
resources:
|
||||
- ./helmrelease.yaml
|
|
@ -0,0 +1,56 @@
|
|||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2beta1
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: statsd-exporter
|
||||
namespace: fediverse
|
||||
spec:
|
||||
interval: 30m
|
||||
chart:
|
||||
spec:
|
||||
chart: app-template
|
||||
version: 1.5.1
|
||||
interval: 30m
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: bjw-s
|
||||
namespace: flux-system
|
||||
|
||||
values:
|
||||
controller:
|
||||
annotations:
|
||||
reloader.stakater.com/auto: "true"
|
||||
|
||||
command: ["/bin/sh", "-c", "statsd_exporter --statsd.mapping-config=/config/mastodon-mapping.yaml"]
|
||||
image:
|
||||
repository: docker.io/prom/statsd-exporter
|
||||
tag: v0.24.0@sha256:61d866e93b56c7d5c69ae5ba5ce4f8a16a98f4b13985ad3385bd8e0b2371126e
|
||||
|
||||
service:
|
||||
main:
|
||||
ports:
|
||||
http:
|
||||
port: 9125
|
||||
enabled: true
|
||||
primary: true
|
||||
protocol: TCP
|
||||
api:
|
||||
enabled: true
|
||||
port: 9102
|
||||
|
||||
persistence:
|
||||
config:
|
||||
enabled: true
|
||||
type: configMap
|
||||
name: statsd-configmap
|
||||
subPath: mastodon-mapping.yaml
|
||||
mountPath: /config/mastodon-mapping.yaml
|
||||
readOnly: true
|
||||
|
||||
resources:
|
||||
requests:
|
||||
cpu: 15m
|
||||
memory: 64M
|
||||
limits:
|
||||
cpu: 46m
|
||||
memory: 270M
|
|
@ -0,0 +1,12 @@
|
|||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
namespace: fediverse
|
||||
resources:
|
||||
- ./helmrelease.yaml
|
||||
configMapGenerator:
|
||||
- name: statsd-configmap
|
||||
files:
|
||||
- mappings/mastodon-mapping.yaml
|
||||
generatorOptions:
|
||||
disableNameSuffixHash: true
|
|
@ -0,0 +1,95 @@
|
|||
## Prometheus Statsd Exporter mapping for Mastodon 4.0+
|
||||
##
|
||||
## Version 1.0, November 2022
|
||||
##
|
||||
## Documentation: https://ipng.ch/s/articles/2022/11/27/mastodon-3.html
|
||||
|
||||
mappings:
|
||||
## Web collector
|
||||
- match: Mastodon\.production\.web\.(.+)\.(.+)\.(.+)\.status\.(.+)
|
||||
match_type: regex
|
||||
name: "mastodon_controller_status"
|
||||
labels:
|
||||
controller: $1
|
||||
action: $2
|
||||
format: $3
|
||||
status: $4
|
||||
mastodon: "web"
|
||||
- match: Mastodon\.production\.web\.(.+)\.(.+)\.(.+)\.db_time
|
||||
match_type: regex
|
||||
name: "mastodon_controller_db_time"
|
||||
labels:
|
||||
controller: $1
|
||||
action: $2
|
||||
format: $3
|
||||
mastodon: "web"
|
||||
- match: Mastodon\.production\.web\.(.+)\.(.+)\.(.+)\.view_time
|
||||
match_type: regex
|
||||
name: "mastodon_controller_view_time"
|
||||
labels:
|
||||
controller: $1
|
||||
action: $2
|
||||
format: $3
|
||||
mastodon: "web"
|
||||
- match: Mastodon\.production\.web\.(.+)\.(.+)\.(.+)\.total_duration
|
||||
match_type: regex
|
||||
name: "mastodon_controller_duration"
|
||||
labels:
|
||||
controller: $1
|
||||
action: $2
|
||||
format: $3
|
||||
mastodon: "web"
|
||||
|
||||
## Database collector
|
||||
- match: Mastodon\.production\.db\.tables\.(.+)\.queries\.(.+)\.duration
|
||||
match_type: regex
|
||||
name: "mastodon_db_operation"
|
||||
labels:
|
||||
table: "$1"
|
||||
operation: "$2"
|
||||
mastodon: "db"
|
||||
|
||||
## Cache collector
|
||||
- match: Mastodon\.production\.cache\.(.+)\.duration
|
||||
match_type: regex
|
||||
name: "mastodon_cache_duration"
|
||||
labels:
|
||||
operation: "$1"
|
||||
mastodon: "cache"
|
||||
|
||||
## Sidekiq collector
|
||||
- match: Mastodon\.production\.sidekiq\.(.+)\.processing_time
|
||||
match_type: regex
|
||||
name: "mastodon_sidekiq_worker_processing_time"
|
||||
labels:
|
||||
worker: "$1"
|
||||
mastodon: "sidekiq"
|
||||
- match: Mastodon\.production\.sidekiq\.(.+)\.success
|
||||
match_type: regex
|
||||
name: "mastodon_sidekiq_worker_success_total"
|
||||
labels:
|
||||
worker: "$1"
|
||||
mastodon: "sidekiq"
|
||||
- match: Mastodon\.production\.sidekiq\.(.+)\.failure
|
||||
match_type: regex
|
||||
name: "mastodon_sidekiq_worker_failure_total"
|
||||
labels:
|
||||
worker: "$1"
|
||||
mastodon: "sidekiq"
|
||||
- match: Mastodon\.production\.sidekiq\.queues\.(.+)\.enqueued
|
||||
match_type: regex
|
||||
name: "mastodon_sidekiq_queue_enqueued"
|
||||
labels:
|
||||
queue: "$1"
|
||||
mastodon: "sidekiq"
|
||||
- match: Mastodon\.production\.sidekiq\.queues\.(.+)\.latency
|
||||
match_type: regex
|
||||
name: "mastodon_sidekiq_queue_latency"
|
||||
labels:
|
||||
queue: "$1"
|
||||
mastodon: "sidekiq"
|
||||
- match: Mastodon\.production\.sidekiq\.(.+)
|
||||
match_type: regex
|
||||
name: "mastodon_sidekiq_$1"
|
||||
labels:
|
||||
mastodon: "sidekiq"
|
27
kubernetes/apps/fediverse/mastodon/app/tootctl/pod.yaml
Normal file
27
kubernetes/apps/fediverse/mastodon/app/tootctl/pod.yaml
Normal file
|
@ -0,0 +1,27 @@
|
|||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: mastodon-tootctl
|
||||
namespace: fediverse
|
||||
spec:
|
||||
containers:
|
||||
- name: mastodon-tootctl
|
||||
image: tootsuite/mastodon:latest@sha256:51405bec6529860c88640bbca3d30bf3a9a82456a3fdae122dc52f4f941808ff
|
||||
command: ["/bin/bash", "-c", "--"]
|
||||
args: ["while true; do sleep 30; done;"]
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: mastodon-secret
|
||||
env:
|
||||
- name: DB_NAME
|
||||
value: "mastodon"
|
||||
- name: DB_PORT
|
||||
value: "5432"
|
||||
|
||||
resources:
|
||||
limits:
|
||||
cpu: "1"
|
||||
memory: "2Gi"
|
||||
requests:
|
||||
cpu: "50m"
|
||||
memory: "256Mi"
|
166
kubernetes/apps/fediverse/mastodon/ks.yaml
Normal file
166
kubernetes/apps/fediverse/mastodon/ks.yaml
Normal file
|
@ -0,0 +1,166 @@
|
|||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: cluster-apps-mastodon
|
||||
namespace: flux-system
|
||||
labels:
|
||||
substitution.flux.home.arpa/enabled: "true"
|
||||
spec:
|
||||
interval: 10m
|
||||
path: "./kubernetes/valinor/apps/fediverse/mastodon/app"
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
name: valinor
|
||||
wait: true
|
||||
dependsOn:
|
||||
- name: cluster-apps-external-secrets-stores
|
||||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: cluster-apps-mastodon-web
|
||||
namespace: flux-system
|
||||
labels:
|
||||
substitution.flux.home.arpa/enabled: "true"
|
||||
spec:
|
||||
interval: 10m
|
||||
path: "./kubernetes/valinor/apps/fediverse/mastodon/app/mastodon-web"
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
name: valinor
|
||||
wait: true
|
||||
dependsOn:
|
||||
- name: cluster-apps-external-secrets-stores
|
||||
- name: cluster-apps-mastodon
|
||||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: cluster-apps-mastodon-streaming
|
||||
namespace: flux-system
|
||||
labels:
|
||||
substitution.flux.home.arpa/enabled: "true"
|
||||
spec:
|
||||
interval: 10m
|
||||
path: "./kubernetes/valinor/apps/fediverse/mastodon/app/mastodon-streaming"
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
name: valinor
|
||||
wait: true
|
||||
dependsOn:
|
||||
- name: cluster-apps-external-secrets-stores
|
||||
- name: cluster-apps-mastodon
|
||||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: cluster-apps-mastodon-statsd
|
||||
namespace: flux-system
|
||||
labels:
|
||||
substitution.flux.home.arpa/enabled: "true"
|
||||
spec:
|
||||
interval: 10m
|
||||
path: "./kubernetes/valinor/apps/fediverse/mastodon/app/statsd"
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
name: valinor
|
||||
wait: true
|
||||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: cluster-apps-mastodon-addons
|
||||
namespace: flux-system
|
||||
labels:
|
||||
substitution.flux.home.arpa/enabled: "true"
|
||||
spec:
|
||||
interval: 10m
|
||||
path: "./kubernetes/valinor/apps/fediverse/mastodon/add-ons"
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
name: valinor
|
||||
wait: true
|
||||
dependsOn:
|
||||
- name: cluster-apps-mastodon
|
||||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: cluster-apps-mastodon-sidekiq-high-priority
|
||||
namespace: flux-system
|
||||
labels:
|
||||
substitution.flux.home.arpa/enabled: "true"
|
||||
spec:
|
||||
interval: 10m
|
||||
path: "./kubernetes/valinor/apps/fediverse/mastodon/app/mastodon-sidekiq/local/high-priority"
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
name: valinor
|
||||
wait: false
|
||||
dependsOn:
|
||||
- name: cluster-apps-external-secrets-stores
|
||||
- name: cluster-apps-mastodon
|
||||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: cluster-apps-mastodon-sidekiq-low-volume
|
||||
namespace: flux-system
|
||||
labels:
|
||||
substitution.flux.home.arpa/enabled: "true"
|
||||
spec:
|
||||
interval: 10m
|
||||
path: "./kubernetes/valinor/apps/fediverse/mastodon/app/mastodon-sidekiq/local/low-volume"
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
name: valinor
|
||||
wait: false
|
||||
dependsOn:
|
||||
- name: cluster-apps-external-secrets-stores
|
||||
- name: cluster-apps-mastodon
|
||||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: cluster-apps-mastodon-sidekiq-ingress
|
||||
namespace: flux-system
|
||||
labels:
|
||||
substitution.flux.home.arpa/enabled: "true"
|
||||
spec:
|
||||
interval: 10m
|
||||
path: "./kubernetes/valinor/apps/fediverse/mastodon/app/mastodon-sidekiq/remote/ingress"
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
name: valinor
|
||||
wait: false
|
||||
dependsOn:
|
||||
- name: cluster-apps-external-secrets-stores
|
||||
- name: cluster-apps-mastodon
|
||||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: cluster-apps-mastodon-sidekiq-pull
|
||||
namespace: flux-system
|
||||
labels:
|
||||
substitution.flux.home.arpa/enabled: "true"
|
||||
spec:
|
||||
interval: 10m
|
||||
path: "./kubernetes/valinor/apps/fediverse/mastodon/app/mastodon-sidekiq/remote/pull"
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
name: valinor
|
||||
wait: false
|
||||
dependsOn:
|
||||
- name: cluster-apps-external-secrets-stores
|
||||
- name: cluster-apps-mastodon
|
8
kubernetes/apps/fediverse/namespace.yaml
Normal file
8
kubernetes/apps/fediverse/namespace.yaml
Normal file
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: fediverse
|
||||
labels:
|
||||
kustomize.toolkit.fluxcd.io/prune: disabled
|
||||
goldilocks.fairwinds.com/enabled: "true"
|
32
kubernetes/apps/flux-system/add-ons/ks.yaml
Normal file
32
kubernetes/apps/flux-system/add-ons/ks.yaml
Normal file
|
@ -0,0 +1,32 @@
|
|||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: cluster-apps-flux-webhooks
|
||||
namespace: flux-system
|
||||
labels:
|
||||
substitution.flux.home.arpa/enabled: "true"
|
||||
spec:
|
||||
interval: 10m
|
||||
path: ./kubernetes/valinor/apps/flux-system/add-ons/webhooks
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
name: valinor
|
||||
wait: true
|
||||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: cluster-apps-flux-monitoring
|
||||
namespace: flux-system
|
||||
labels:
|
||||
substitution.flux.home.arpa/enabled: "true"
|
||||
spec:
|
||||
interval: 10m
|
||||
path: ./kubernetes/valinor/apps/flux-system/add-ons/monitoring
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
name: valinor
|
||||
wait: true
|
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
namespace: flux-system
|
||||
resources:
|
||||
- ./podmonitor.yaml
|
||||
- ./prometheusrule.yaml
|
|
@ -0,0 +1,31 @@
|
|||
---
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: PodMonitor
|
||||
metadata:
|
||||
name: flux-system
|
||||
namespace: flux-system
|
||||
labels:
|
||||
app.kubernetes.io/part-of: flux
|
||||
app.kubernetes.io/component: monitoring
|
||||
spec:
|
||||
namespaceSelector:
|
||||
matchNames:
|
||||
- flux-system
|
||||
selector:
|
||||
matchExpressions:
|
||||
- key: app
|
||||
operator: In
|
||||
values:
|
||||
- helm-controller
|
||||
- source-controller
|
||||
- kustomize-controller
|
||||
- notification-controller
|
||||
- image-automation-controller
|
||||
- image-reflector-controller
|
||||
podMetricsEndpoints:
|
||||
- port: http-prom
|
||||
relabelings:
|
||||
# https://github.com/prometheus-operator/prometheus-operator/issues/4816
|
||||
- sourceLabels: [__meta_kubernetes_pod_phase]
|
||||
action: keep
|
||||
regex: Running
|
|
@ -0,0 +1,31 @@
|
|||
---
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: PrometheusRule
|
||||
metadata:
|
||||
name: flux-rules
|
||||
namespace: flux-system
|
||||
spec:
|
||||
groups:
|
||||
- name: flux.rules
|
||||
rules:
|
||||
- alert: FluxComponentAbsent
|
||||
annotations:
|
||||
summary: Flux component has disappeared from Prometheus target discovery.
|
||||
expr: |
|
||||
absent(up{job=~".*flux-system.*"} == 1)
|
||||
for: 15m
|
||||
labels:
|
||||
severity: critical
|
||||
- alert: FluxReconciliationFailure
|
||||
annotations:
|
||||
summary: >-
|
||||
{{ $labels.kind }} {{ $labels.namespace }}/{{ $labels.name }} reconciliation
|
||||
has been failing for more than 15 minutes.
|
||||
expr: |
|
||||
max(gotk_reconcile_condition{status="False",type="Ready"}) by (namespace, name, kind)
|
||||
+
|
||||
on(namespace, name, kind) (max(gotk_reconcile_condition{status="Deleted"})
|
||||
by (namespace, name, kind)) * 2 == 1
|
||||
for: 15m
|
||||
labels:
|
||||
severity: critical
|
|
@ -0,0 +1,18 @@
|
|||
---
|
||||
apiVersion: external-secrets.io/v1beta1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: github-webhook-token
|
||||
namespace: flux-system
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: onepassword-connect
|
||||
target:
|
||||
name: github-webhook-token
|
||||
creationPolicy: Owner
|
||||
data:
|
||||
- secretKey: token
|
||||
remoteRef:
|
||||
key: flux
|
||||
property: github_webhook_token
|
|
@ -0,0 +1,24 @@
|
|||
---
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: webhook-receiver
|
||||
namespace: flux-system
|
||||
annotations:
|
||||
external-dns.alpha.kubernetes.io/target: ingress.valinor.social
|
||||
spec:
|
||||
ingressClassName: "nginx"
|
||||
rules:
|
||||
- host: &host "flux-receiver-valinor.valinor.social"
|
||||
http:
|
||||
paths:
|
||||
- path: /hook/
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: webhook-receiver
|
||||
port:
|
||||
number: 80
|
||||
tls:
|
||||
- hosts:
|
||||
- *host
|
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
resources:
|
||||
- ./externalsecret.yaml
|
||||
- ./ingress.yaml
|
||||
- ./receiver.yaml
|
|
@ -0,0 +1,28 @@
|
|||
---
|
||||
apiVersion: notification.toolkit.fluxcd.io/v1beta2
|
||||
kind: Receiver
|
||||
metadata:
|
||||
name: github-receiver
|
||||
namespace: flux-system
|
||||
spec:
|
||||
type: github
|
||||
events:
|
||||
- "ping"
|
||||
- "push"
|
||||
secretRef:
|
||||
name: github-webhook-token
|
||||
resources:
|
||||
- apiVersion: source.toolkit.fluxcd.io/v1
|
||||
kind: GitRepository
|
||||
name: "valinor"
|
||||
namespace: "flux-system"
|
||||
|
||||
- apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
name: "cluster"
|
||||
namespace: "flux-system"
|
||||
|
||||
- apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
name: "cluster-apps"
|
||||
namespace: "flux-system"
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
resources:
|
||||
- ./github
|
8
kubernetes/apps/flux-system/kustomization.yaml
Normal file
8
kubernetes/apps/flux-system/kustomization.yaml
Normal file
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
resources:
|
||||
# Pre Flux-Kustomizations
|
||||
- ./namespace.yaml
|
||||
# Flux-Kustomizations
|
||||
- ./add-ons/ks.yaml
|
7
kubernetes/apps/flux-system/namespace.yaml
Normal file
7
kubernetes/apps/flux-system/namespace.yaml
Normal file
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: flux-system
|
||||
labels:
|
||||
kustomize.toolkit.fluxcd.io/prune: disabled
|
20
kubernetes/apps/kube-system/cilium/app/cilium-l2.yaml
Normal file
20
kubernetes/apps/kube-system/cilium/app/cilium-l2.yaml
Normal file
|
@ -0,0 +1,20 @@
|
|||
---
|
||||
apiVersion: cilium.io/v2alpha1
|
||||
kind: CiliumL2AnnouncementPolicy
|
||||
metadata:
|
||||
name: policy
|
||||
spec:
|
||||
loadBalancerIPs: true
|
||||
interfaces:
|
||||
- ^enp.*
|
||||
nodeSelector:
|
||||
matchLabels:
|
||||
kubernetes.io/os: linux
|
||||
---
|
||||
apiVersion: cilium.io/v2alpha1
|
||||
kind: CiliumLoadBalancerIPPool
|
||||
metadata:
|
||||
name: pool
|
||||
spec:
|
||||
cidrs:
|
||||
- cidr: 10.2.42.0/24
|
59
kubernetes/apps/kube-system/cilium/app/helmrelease.yaml
Normal file
59
kubernetes/apps/kube-system/cilium/app/helmrelease.yaml
Normal file
|
@ -0,0 +1,59 @@
|
|||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2beta1
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: cilium
|
||||
namespace: kube-system
|
||||
spec:
|
||||
chart:
|
||||
spec:
|
||||
chart: cilium
|
||||
interval: 30m
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: cilium
|
||||
namespace: flux-system
|
||||
version: 1.14.0
|
||||
interval: 30m
|
||||
|
||||
valuesFrom:
|
||||
- kind: ConfigMap
|
||||
name: cilium-values
|
||||
maxHistory: 2
|
||||
install:
|
||||
createNamespace: true
|
||||
remediation:
|
||||
retries: 3
|
||||
upgrade:
|
||||
cleanupOnFail: true
|
||||
remediation:
|
||||
retries: 3
|
||||
uninstall:
|
||||
keepHistory: false
|
||||
values:
|
||||
hubble:
|
||||
ui:
|
||||
ingress:
|
||||
enabled: true
|
||||
annotations:
|
||||
nginx.ingress.kubernetes.io/whitelist-source-range: 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
|
||||
className: "nginx"
|
||||
hosts:
|
||||
- &host hubble-valinor.valinor.social
|
||||
tls:
|
||||
- hosts:
|
||||
- *host
|
||||
metrics:
|
||||
serviceMonitor:
|
||||
enabled: true
|
||||
relay:
|
||||
prometheus:
|
||||
serviceMonitor:
|
||||
enabled: true
|
||||
prometheus:
|
||||
serviceMonitor:
|
||||
enabled: true
|
||||
operator:
|
||||
prometheus:
|
||||
serviceMonitor:
|
||||
enabled: true
|
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
namespace: kube-system
|
||||
resources:
|
||||
- ./helmrelease.yaml
|
||||
- ./cilium-l2.yaml
|
14
kubernetes/apps/kube-system/cilium/ks.yaml
Normal file
14
kubernetes/apps/kube-system/cilium/ks.yaml
Normal file
|
@ -0,0 +1,14 @@
|
|||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: cluster-apps-cilium
|
||||
namespace: flux-system
|
||||
spec:
|
||||
interval: 10m
|
||||
path: "./kubernetes/apps/kube-system/cilium/app"
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
name: valinor
|
||||
wait: true
|
9
kubernetes/apps/kube-system/kustomization.yaml
Normal file
9
kubernetes/apps/kube-system/kustomization.yaml
Normal file
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
resources:
|
||||
# Pre Flux-Kustomizations
|
||||
- ./namespace.yaml
|
||||
# Flux-Kustomizations
|
||||
- ./metrics-server/ks.yaml
|
||||
- ./cilium/ks.yaml
|
|
@ -0,0 +1,20 @@
|
|||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2beta1
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: metrics-server
|
||||
namespace: kube-system
|
||||
spec:
|
||||
interval: 30m
|
||||
chart:
|
||||
spec:
|
||||
chart: metrics-server
|
||||
version: 3.11.0
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: kubernetes-sigs-metrics-server
|
||||
namespace: flux-system
|
||||
interval: 30m
|
||||
values:
|
||||
metrics:
|
||||
enabled: true
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
namespace: kube-system
|
||||
resources:
|
||||
- ./helmrelease.yaml
|
16
kubernetes/apps/kube-system/metrics-server/ks.yaml
Normal file
16
kubernetes/apps/kube-system/metrics-server/ks.yaml
Normal file
|
@ -0,0 +1,16 @@
|
|||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: cluster-apps-metrics-server
|
||||
namespace: flux-system
|
||||
labels:
|
||||
substitution.flux.home.arpa/enabled: "true"
|
||||
spec:
|
||||
interval: 10m
|
||||
path: "./kubernetes/valinor/apps/kube-system/metrics-server/app"
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
name: valinor
|
||||
wait: true
|
7
kubernetes/apps/kube-system/namespace.yaml
Normal file
7
kubernetes/apps/kube-system/namespace.yaml
Normal file
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: kube-system
|
||||
labels:
|
||||
kustomize.toolkit.fluxcd.io/prune: disabled
|
9
kubernetes/apps/kyverno/kustomization.yaml
Normal file
9
kubernetes/apps/kyverno/kustomization.yaml
Normal file
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
# yaml-language-server: $schema=https://json.schemastore.org/kustomization
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
resources:
|
||||
# Pre Flux-Kustomizations
|
||||
- ./namespace.yaml
|
||||
# Flux-Kustomizations
|
||||
- ./kyverno/ks.yaml
|
79
kubernetes/apps/kyverno/kyverno/app/helmrelease.yaml
Normal file
79
kubernetes/apps/kyverno/kyverno/app/helmrelease.yaml
Normal file
|
@ -0,0 +1,79 @@
|
|||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2beta1
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: kyverno
|
||||
namespace: kyverno
|
||||
spec:
|
||||
interval: 30m
|
||||
chart:
|
||||
spec:
|
||||
chart: kyverno
|
||||
version: 3.0.5
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: kyverno
|
||||
namespace: flux-system
|
||||
maxHistory: 2
|
||||
install:
|
||||
remediation:
|
||||
retries: 3
|
||||
upgrade:
|
||||
cleanupOnFail: true
|
||||
remediation:
|
||||
retries: 3
|
||||
uninstall:
|
||||
keepHistory: false
|
||||
values:
|
||||
crds:
|
||||
install: true
|
||||
grafana:
|
||||
enabled: true
|
||||
annotations:
|
||||
grafana_folder: System
|
||||
backgroundController:
|
||||
serviceMonitor:
|
||||
enabled: true
|
||||
rbac:
|
||||
clusterRole:
|
||||
extraResources:
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- pods
|
||||
verbs:
|
||||
- create
|
||||
- update
|
||||
- patch
|
||||
- delete
|
||||
- get
|
||||
- list
|
||||
cleanupController:
|
||||
serviceMonitor:
|
||||
enabled: true
|
||||
reportsController:
|
||||
serviceMonitor:
|
||||
enabled: true
|
||||
admissionController:
|
||||
replicas: 3
|
||||
serviceMonitor:
|
||||
enabled: true
|
||||
rbac:
|
||||
clusterRole:
|
||||
extraResources:
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- pods
|
||||
verbs:
|
||||
- create
|
||||
- update
|
||||
- delete
|
||||
topologySpreadConstraints:
|
||||
- maxSkew: 1
|
||||
topologyKey: kubernetes.io/hostname
|
||||
whenUnsatisfiable: DoNotSchedule
|
||||
labelSelector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/instance: kyverno
|
||||
app.kubernetes.io/component: kyverno
|
7
kubernetes/apps/kyverno/kyverno/app/kustomization.yaml
Normal file
7
kubernetes/apps/kyverno/kyverno/app/kustomization.yaml
Normal file
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
# yaml-language-server: $schema=https://json.schemastore.org/kustomization
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
namespace: kyverno
|
||||
resources:
|
||||
- ./helmrelease.yaml
|
34
kubernetes/apps/kyverno/kyverno/ks.yaml
Normal file
34
kubernetes/apps/kyverno/kyverno/ks.yaml
Normal file
|
@ -0,0 +1,34 @@
|
|||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: cluster-apps-kyverno
|
||||
namespace: flux-system
|
||||
spec:
|
||||
path: ./kubernetes/apps/kyverno/kyverno/app
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
name: valinor
|
||||
wait: true
|
||||
interval: 30m
|
||||
retryInterval: 1m
|
||||
timeout: 5m
|
||||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: cluster-apps-cluster-policies
|
||||
namespace: flux-system
|
||||
spec:
|
||||
dependsOn:
|
||||
- name: cluster-apps-kyverno
|
||||
path: ./kubernetes/apps/kyverno/kyverno/policies
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
name: valinor
|
||||
wait: false
|
||||
interval: 30m
|
||||
retryInterval: 1m
|
||||
timeout: 5m
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
# yaml-language-server: $schema=https://json.schemastore.org/kustomization
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
resources:
|
||||
- ./remove-cpu-limits.yaml
|
|
@ -0,0 +1,43 @@
|
|||
---
|
||||
apiVersion: kyverno.io/v1
|
||||
kind: ClusterPolicy
|
||||
metadata:
|
||||
name: remove-cpu-limit
|
||||
annotations:
|
||||
policies.kyverno.io/title: Remove CPU limits
|
||||
policies.kyverno.io/category: Best Practices
|
||||
policies.kyverno.io/severity: medium
|
||||
policies.kyverno.io/subject: Pod
|
||||
policies.kyverno.io/description: >-
|
||||
This policy removes CPU limits from all Pods.
|
||||
pod-policies.kyverno.io/autogen-controllers: none
|
||||
spec:
|
||||
generateExistingOnPolicyUpdate: true
|
||||
rules:
|
||||
- name: remove-containers-cpu-limits
|
||||
match:
|
||||
any:
|
||||
- resources:
|
||||
kinds: ["Pod"]
|
||||
mutate:
|
||||
foreach:
|
||||
- list: "request.object.spec.containers"
|
||||
patchesJson6902: |-
|
||||
- path: /spec/containers/{{elementIndex}}/resources/limits/cpu
|
||||
op: remove
|
||||
- name: delete-initcontainers-cpu-limits
|
||||
match:
|
||||
any:
|
||||
- resources:
|
||||
kinds: ["Pod"]
|
||||
preconditions:
|
||||
all:
|
||||
- key: "{{ request.object.spec.initContainers[] || `[]` | length(@) }}"
|
||||
operator: GreaterThanOrEquals
|
||||
value: 1
|
||||
mutate:
|
||||
foreach:
|
||||
- list: "request.object.spec.initContainers"
|
||||
patchesJson6902: |-
|
||||
- path: /spec/initContainers/{{elementIndex}}/resources/limits/cpu
|
||||
op: remove
|
7
kubernetes/apps/kyverno/namespace.yaml
Normal file
7
kubernetes/apps/kyverno/namespace.yaml
Normal file
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: kyverno
|
||||
labels:
|
||||
kustomize.toolkit.fluxcd.io/prune: disabled
|
|
@ -0,0 +1,58 @@
|
|||
receivers:
|
||||
- name: "null"
|
||||
- name: "pushover"
|
||||
pushover_configs:
|
||||
- html: true
|
||||
token_file: /etc/secrets/pushover_api_token
|
||||
user_key_file: /etc/secrets/pushover_api_userkey
|
||||
send_resolved: true
|
||||
priority: |-
|
||||
{{ if eq .Status "firing" }}1{{ else }}0{{ end }}
|
||||
url_title: View in Alert Manager
|
||||
title: |-
|
||||
[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}] {{ .CommonLabels.alertname }}
|
||||
message: |-
|
||||
{{- range .Alerts }}
|
||||
{{- if ne .Labels.severity "" }}
|
||||
<b>Severity:</b> <i>{{ .Labels.severity }}</i>
|
||||
{{- else }}
|
||||
<b>Severity:</b> <i>N/A</i>
|
||||
{{- end }}
|
||||
{{- if ne .Annotations.description "" }}
|
||||
<b>Description:</b> <i>{{ .Annotations.description }}</i>
|
||||
{{- else if ne .Annotations.summary "" }}
|
||||
<b>Summary:</b> <i>{{ .Annotations.summary }}</i>
|
||||
{{- else if ne .Annotations.message "" }}
|
||||
<b>Message:</b> <i>{{ .Annotations.message }}</i>
|
||||
{{- else }}
|
||||
<b>Description:</b> <i>N/A</i>
|
||||
{{- end }}
|
||||
{{- if gt (len .Labels.SortedPairs) 0 }}
|
||||
<b>Details:</b>
|
||||
{{- range .Labels.SortedPairs }}
|
||||
• <b>{{ .Name }}:</b> <i>{{ .Value }}</i>
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
route:
|
||||
group_by: ["alertname", "job"]
|
||||
group_wait: 30s
|
||||
group_interval: 5m
|
||||
repeat_interval: 6h
|
||||
receiver: "pushover"
|
||||
routes:
|
||||
- receiver: "null"
|
||||
matchers:
|
||||
- alertname =~ "InfoInhibitor|Watchdog"
|
||||
- receiver: "pushover"
|
||||
matchers:
|
||||
- severity = critical
|
||||
continue: true
|
||||
|
||||
inhibit_rules:
|
||||
- source_matchers:
|
||||
- severity = "critical"
|
||||
target_matchers:
|
||||
- severity = "warning"
|
||||
equal: ["alertname", "namespace"]
|
|
@ -0,0 +1,22 @@
|
|||
---
|
||||
apiVersion: external-secrets.io/v1beta1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: alertmanager-secret
|
||||
namespace: monitoring
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: onepassword-connect
|
||||
target:
|
||||
name: alertmanager-secret
|
||||
creationPolicy: Owner
|
||||
data:
|
||||
- secretKey: pushover_api_token
|
||||
remoteRef:
|
||||
key: Pushover
|
||||
property: alertmanager_token
|
||||
- secretKey: pushover_api_userkey
|
||||
remoteRef:
|
||||
key: Pushover
|
||||
property: userkey_jahanson
|
75
kubernetes/apps/monitoring/alertmanager/app/helmrelease.yaml
Normal file
75
kubernetes/apps/monitoring/alertmanager/app/helmrelease.yaml
Normal file
|
@ -0,0 +1,75 @@
|
|||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2beta1
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: alertmanager
|
||||
namespace: monitoring
|
||||
spec:
|
||||
interval: 30m
|
||||
chart:
|
||||
spec:
|
||||
chart: app-template
|
||||
version: 1.5.1
|
||||
interval: 30m
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: bjw-s
|
||||
namespace: flux-system
|
||||
values:
|
||||
controller:
|
||||
type: statefulset
|
||||
annotations:
|
||||
reloader.stakater.com/auto: "true"
|
||||
|
||||
image:
|
||||
repository: quay.io/prometheus/alertmanager
|
||||
tag: main@sha256:9ec2c0c85673a6fefb650bf77d2204984f0d77a25c156f353edd650c32221dbf
|
||||
|
||||
podAnnotations:
|
||||
reloader.stakater.com/auto: "true"
|
||||
|
||||
service:
|
||||
main:
|
||||
ports:
|
||||
http:
|
||||
port: 9093
|
||||
|
||||
ingress:
|
||||
main:
|
||||
enabled: true
|
||||
ingressClassName: nginx
|
||||
hosts:
|
||||
- host: &host alertmanager.valinor.social
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
tls:
|
||||
- hosts:
|
||||
- *host
|
||||
|
||||
persistence:
|
||||
config:
|
||||
enabled: true
|
||||
type: configMap
|
||||
name: alertmanager-configmap
|
||||
mountPath: /etc/alertmanager
|
||||
readOnly: true
|
||||
secrets:
|
||||
enabled: true
|
||||
type: secret
|
||||
name: alertmanager-secret
|
||||
mountPath: /etc/secrets
|
||||
readOnly: true
|
||||
|
||||
resources:
|
||||
requests:
|
||||
cpu: 11m
|
||||
memory: 50M
|
||||
limits:
|
||||
memory: 99M
|
||||
|
||||
volumeClaimTemplates:
|
||||
- name: storage
|
||||
mountPath: /alertmanager
|
||||
accessMode: ReadWriteOnce
|
||||
size: 50Mi
|
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
namespace: monitoring
|
||||
resources:
|
||||
- ./externalsecret.yaml
|
||||
- ./helmrelease.yaml
|
||||
configMapGenerator:
|
||||
- name: alertmanager-configmap
|
||||
files:
|
||||
- config/alertmanager.yml
|
||||
generatorOptions:
|
||||
disableNameSuffixHash: true
|
||||
annotations:
|
||||
kustomize.toolkit.fluxcd.io/substitute: disabled
|
16
kubernetes/apps/monitoring/alertmanager/ks.yaml
Normal file
16
kubernetes/apps/monitoring/alertmanager/ks.yaml
Normal file
|
@ -0,0 +1,16 @@
|
|||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: cluster-apps-alertmanager
|
||||
namespace: flux-system
|
||||
spec:
|
||||
interval: 10m
|
||||
path: "./kubernetes/valinor/apps/monitoring/alertmanager/app"
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
name: valinor
|
||||
wait: true
|
||||
dependsOn:
|
||||
- name: cluster-apps-external-secrets-stores
|
28
kubernetes/apps/monitoring/grafana/app/externalsecret.yaml
Normal file
28
kubernetes/apps/monitoring/grafana/app/externalsecret.yaml
Normal file
|
@ -0,0 +1,28 @@
|
|||
---
|
||||
apiVersion: external-secrets.io/v1beta1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: grafana-secrets
|
||||
namespace: monitoring
|
||||
spec:
|
||||
secretStoreRef:
|
||||
kind: ClusterSecretStore
|
||||
name: onepassword-connect
|
||||
target:
|
||||
name: grafana-secrets
|
||||
creationPolicy: Owner
|
||||
template:
|
||||
engineVersion: v2
|
||||
data:
|
||||
GF_AUTH_GENERIC_OAUTH_CLIENT_ID: "{{ .auth0_generic_client_id }}"
|
||||
GF_AUTH_GENERIC_OAUTH_CLIENT_SECRET: "{{ .auth0_generic_client_secret }}"
|
||||
GF_AUTH_GENERIC_OAUTH_AUTH_URL: "{{ .auth0_hsn_domain }}/authorize"
|
||||
GF_AUTH_GENERIC_OAUTH_TOKEN_URL: "{{ .auth0_hsn_domain }}/oauth/token"
|
||||
GF_AUTH_GENERIC_OAUTH_API_URL: "{{ .auth0_hsn_domain }}/userinfo"
|
||||
dataFrom:
|
||||
- extract:
|
||||
key: auth0
|
||||
rewrite:
|
||||
- regexp:
|
||||
source: "(.*)"
|
||||
target: "auth0_$1"
|
239
kubernetes/apps/monitoring/grafana/app/helmrelease.yaml
Normal file
239
kubernetes/apps/monitoring/grafana/app/helmrelease.yaml
Normal file
|
@ -0,0 +1,239 @@
|
|||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2beta1
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: grafana
|
||||
namespace: monitoring
|
||||
spec:
|
||||
chart:
|
||||
spec:
|
||||
chart: grafana
|
||||
interval: 30m
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: grafana
|
||||
namespace: flux-system
|
||||
version: 6.58.7
|
||||
interval: 30m
|
||||
timeout: 20m
|
||||
maxHistory: 2
|
||||
install:
|
||||
createNamespace: true
|
||||
remediation:
|
||||
retries: 3
|
||||
upgrade:
|
||||
cleanupOnFail: true
|
||||
remediation:
|
||||
retries: 3
|
||||
uninstall:
|
||||
keepHistory: false
|
||||
values:
|
||||
replicas: 1
|
||||
|
||||
dashboardProviders:
|
||||
dashboardproviders.yaml:
|
||||
apiVersion: 1
|
||||
providers:
|
||||
- name: default
|
||||
orgId: 1
|
||||
folder: ""
|
||||
type: file
|
||||
disableDeletion: false
|
||||
editable: true
|
||||
options:
|
||||
path: /var/lib/grafana/dashboards/default
|
||||
|
||||
datasources:
|
||||
datasources.yaml:
|
||||
apiVersion: 1
|
||||
deleteDatasources:
|
||||
- name: Loki
|
||||
orgId: 1
|
||||
- name: Alertmanager
|
||||
orgId: 1
|
||||
datasources:
|
||||
- name: Prometheus
|
||||
type: prometheus
|
||||
access: proxy
|
||||
url: http://thanos-query-frontend.monitoring.svc.cluster.local:9090
|
||||
isDefault: true
|
||||
- name: Loki
|
||||
type: loki
|
||||
access: proxy
|
||||
url: http://loki-gateway.monitoring.svc.cluster.local
|
||||
jsonData:
|
||||
maxLines: 250
|
||||
- name: Alertmanager
|
||||
type: alertmanager
|
||||
access: proxy
|
||||
url: http://kube-prometheus-stack-alertmanager.monitoring.svc.cluster.local:9093
|
||||
jsonData:
|
||||
implementation: prometheus
|
||||
|
||||
dashboards:
|
||||
default:
|
||||
# Ref: https://grafana.com/grafana/dashboards/1860-node-exporter-full/
|
||||
node-exporter-full:
|
||||
gnetId: 1860
|
||||
revision: 30
|
||||
datasource: Prometheus
|
||||
# Ref: https://grafana.com/grafana/dashboards/5342-ceph-pools/
|
||||
ceph-pools:
|
||||
gnetId: 5342
|
||||
revision: 9
|
||||
datasource: Prometheus
|
||||
# Ref: https://grafana.com/grafana/dashboards/5336-ceph-osd-single/
|
||||
ceph-osd:
|
||||
gnetId: 5336
|
||||
revision: 9
|
||||
datasource: Prometheus
|
||||
# Ref: https://grafana.com/grafana/dashboards/2842-ceph-cluster/
|
||||
ceph-cluster:
|
||||
gnetId: 2842
|
||||
revision: 16
|
||||
datasource: Prometheus
|
||||
cert-manager:
|
||||
url: https://raw.githubusercontent.com/monitoring-mixins/website/master/assets/cert-manager/dashboards/cert-manager.json
|
||||
datasource: Prometheus
|
||||
external-secrets:
|
||||
url: https://raw.githubusercontent.com/external-secrets/external-secrets/main/docs/snippets/dashboard.json
|
||||
datasource: Prometheus
|
||||
flux-cluster:
|
||||
url: https://raw.githubusercontent.com/fluxcd/flux2/main/manifests/monitoring/monitoring-config/dashboards/cluster.json
|
||||
datasource: Prometheus
|
||||
flux-control-plane:
|
||||
url: https://raw.githubusercontent.com/fluxcd/flux2/main/manifests/monitoring/monitoring-config/dashboards/control-plane.json
|
||||
datasource: Prometheus
|
||||
flux-logs:
|
||||
url: https://raw.githubusercontent.com/fluxcd/flux2/main/manifests/monitoring/monitoring-config/dashboards/logs.json
|
||||
datasource: Prometheus
|
||||
kubernetes-api-server:
|
||||
url: https://raw.githubusercontent.com/dotdc/grafana-dashboards-kubernetes/master/dashboards/k8s-system-api-server.json
|
||||
datasource: Prometheus
|
||||
kubernetes-coredns:
|
||||
url: https://raw.githubusercontent.com/dotdc/grafana-dashboards-kubernetes/master/dashboards/k8s-system-coredns.json
|
||||
datasource: Prometheus
|
||||
kubernetes-global:
|
||||
url: https://raw.githubusercontent.com/dotdc/grafana-dashboards-kubernetes/master/dashboards/k8s-views-global.json
|
||||
datasource: Prometheus
|
||||
kubernetes-namespaces:
|
||||
url: https://raw.githubusercontent.com/dotdc/grafana-dashboards-kubernetes/master/dashboards/k8s-views-namespaces.json
|
||||
datasource: Prometheus
|
||||
kubernetes-nodes:
|
||||
url: https://raw.githubusercontent.com/dotdc/grafana-dashboards-kubernetes/master/dashboards/k8s-views-nodes.json
|
||||
datasource: Prometheus
|
||||
kubernetes-pods:
|
||||
url: https://raw.githubusercontent.com/dotdc/grafana-dashboards-kubernetes/master/dashboards/k8s-views-pods.json
|
||||
datasource: Prometheus
|
||||
ingress-nginx:
|
||||
url: https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/grafana/dashboards/nginx.json
|
||||
datasource: Prometheus
|
||||
ingress-nginx-request-handling-performance:
|
||||
url: https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/grafana/dashboards/request-handling-performance.json
|
||||
datasource: Prometheus
|
||||
|
||||
deploymentStrategy:
|
||||
type: Recreate
|
||||
|
||||
env:
|
||||
GF_ANALYTICS_CHECK_FOR_UPDATES: false
|
||||
GF_DATE_FORMATS_USE_BROWSER_LOCALE: true
|
||||
GF_EXPLORE_ENABLED: true
|
||||
GF_GRAFANA_NET_URL: https://grafana.net
|
||||
GF_LOG_FILTERS: rendering:debug
|
||||
GF_PANELS_DISABLE_SANITIZE_HTML: true
|
||||
GF_SECURITY_ALLOW_EMBEDDING: true
|
||||
GF_SECURITY_COOKIE_SAMESITE: grafana
|
||||
GF_SERVER_ROOT_URL: "https://grafana.valinor.social"
|
||||
|
||||
envFromSecret: grafana-secrets
|
||||
|
||||
grafana.ini:
|
||||
analytics:
|
||||
check_for_updates: false
|
||||
auth:
|
||||
oauth_auto_login: true
|
||||
auth.basic:
|
||||
enabled: false
|
||||
auth.generic_oauth:
|
||||
enabled: true
|
||||
name: Auth0
|
||||
scopes: "openid profile email"
|
||||
client_id: # Set by env vars
|
||||
client_secret: # Set by env vars
|
||||
auth_url: # Set by env vars
|
||||
token_url: # Set by env vars
|
||||
api_url: # Set by env vars
|
||||
use_pkce: true
|
||||
|
||||
auth.generic_oauth.group_mapping:
|
||||
role_attribute_path: |
|
||||
contains("https://hsndev/groups"[*], 'grafana-admin') && 'Admin' || contains("https://hsndev/groups"[*], 'grafana-viewer') && 'Viewer'
|
||||
org_id: 1
|
||||
grafana_net:
|
||||
url: https://grafana.net
|
||||
log:
|
||||
mode: console
|
||||
paths:
|
||||
data: /var/lib/grafana/data
|
||||
logs: /var/log/grafana
|
||||
plugins: /var/lib/grafana/plugins
|
||||
provisioning: /etc/grafana/provisioning
|
||||
server:
|
||||
root_url: https://grafana.valinor.social
|
||||
|
||||
imageRenderer:
|
||||
enabled: true
|
||||
|
||||
ingress:
|
||||
enabled: true
|
||||
ingressClassName: nginx
|
||||
annotations:
|
||||
external-dns.alpha.kubernetes.io/target: ingress.valinor.social
|
||||
hosts:
|
||||
- &host grafana.valinor.social
|
||||
tls:
|
||||
- hosts:
|
||||
- *host
|
||||
|
||||
persistence:
|
||||
enabled: false
|
||||
|
||||
plugins:
|
||||
- natel-discrete-panel
|
||||
- pr0ps-trackmap-panel
|
||||
- grafana-piechart-panel
|
||||
- vonage-status-panel
|
||||
- grafana-worldmap-panel
|
||||
- grafana-clock-panel
|
||||
|
||||
podAnnotations:
|
||||
configmap.reloader.stakater.com/reload: grafana
|
||||
secret.reloader.stakater.com/reload: grafana-secrets
|
||||
|
||||
rbac:
|
||||
pspEnabled: false
|
||||
|
||||
resources:
|
||||
requests:
|
||||
cpu: 23m
|
||||
memory: 127M
|
||||
|
||||
serviceMonitor:
|
||||
enabled: true
|
||||
|
||||
sidecar:
|
||||
dashboards:
|
||||
enabled: true
|
||||
labelValue: ""
|
||||
label: grafana_dashboard
|
||||
folderAnnotation: grafana_folder
|
||||
searchNamespace: ALL
|
||||
provider:
|
||||
disableDelete: true
|
||||
foldersFromFilesStructure: true
|
||||
datasources:
|
||||
enabled: true
|
||||
labelValue: ""
|
||||
searchNamespace: ALL
|
||||
logLevel: INFO
|
Some files were not shown because too many files have changed in this diff Show more
Reference in a new issue