initial commit
This commit is contained in:
22
.woodpecker.yml
Normal file
22
.woodpecker.yml
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
steps:
|
||||||
|
dry-run:
|
||||||
|
when:
|
||||||
|
- branch:
|
||||||
|
exclude:
|
||||||
|
- main
|
||||||
|
image: bitnami/kubectl
|
||||||
|
secrets:
|
||||||
|
- kube_config
|
||||||
|
commands:
|
||||||
|
- echo "$KUBE_CONFIG" > ~/.kube/config
|
||||||
|
- DRU_RUN=true ./deploy.sh
|
||||||
|
deploy:
|
||||||
|
when:
|
||||||
|
- branch:
|
||||||
|
main
|
||||||
|
image: bitnami/kubectl
|
||||||
|
secrets:
|
||||||
|
- kube_config
|
||||||
|
commands:
|
||||||
|
- echo "$KUBE_CONFIG" > ~/.kube/config
|
||||||
|
- ./deploy.sh
|
||||||
4
README.md
Normal file
4
README.md
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
Homestead
|
||||||
|
===
|
||||||
|
|
||||||
|
This repo builds and manages the various services to keep a digital homestead up and running.
|
||||||
15
deploy.sh
Normal file
15
deploy.sh
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
for namespace in namespaces/*; do
|
||||||
|
if [ "$DRY_RUN" = true ]; then
|
||||||
|
printf "\033[1;33m*******************************************************\n"
|
||||||
|
printf "Dry running changes to %s\n" "$(basename "$namespace")"
|
||||||
|
printf "*******************************************************\033[0m\n"
|
||||||
|
kubectl apply -f "$namespace" --dry-run=server
|
||||||
|
else
|
||||||
|
printf "\033[1;33m*******************************************************\n"
|
||||||
|
printf "Deploying changes to %s\n" "$(basename "$namespace")"
|
||||||
|
printf "*******************************************************\033[0m\n"
|
||||||
|
kubectl apply -f "$namespace"
|
||||||
|
fi
|
||||||
|
done
|
||||||
70
namespaces/git/gitea-chart.yml
Normal file
70
namespaces/git/gitea-chart.yml
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
# helm repo add gitea-charts https://dl.gitea.io/charts/
|
||||||
|
# helm install gitea gitea-charts/gitea
|
||||||
|
apiVersion: helm.cattle.io/v1
|
||||||
|
kind: HelmChart
|
||||||
|
metadata:
|
||||||
|
name: gitea
|
||||||
|
namespace: git
|
||||||
|
spec:
|
||||||
|
chart: gitea
|
||||||
|
targetNamespace: git
|
||||||
|
repo: https://dl.gitea.io/charts/
|
||||||
|
version: 9.5.0
|
||||||
|
valuesContent: |-
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 200m
|
||||||
|
memory: 256Mi
|
||||||
|
requests:
|
||||||
|
cpu: 200m
|
||||||
|
memory: 256Mi
|
||||||
|
redis-cluster:
|
||||||
|
enabled: false
|
||||||
|
postgresql:
|
||||||
|
enabled: true
|
||||||
|
postgresql-ha:
|
||||||
|
enabled: false
|
||||||
|
persistence:
|
||||||
|
enabled: true
|
||||||
|
gitea:
|
||||||
|
metrics:
|
||||||
|
enabled: true
|
||||||
|
serviceMonitor:
|
||||||
|
enabled: true
|
||||||
|
config:
|
||||||
|
picture:
|
||||||
|
ENABLE_FEDERATED_AVATAR: false
|
||||||
|
DISABLE_GRAVATAR: true
|
||||||
|
ui:
|
||||||
|
DEFAULT_THEME: arc-green
|
||||||
|
server:
|
||||||
|
ENABLE_PPROF: true
|
||||||
|
database:
|
||||||
|
DB_TYPE: postgres
|
||||||
|
session:
|
||||||
|
PROVIDER: db
|
||||||
|
cache:
|
||||||
|
ADAPTER: memory
|
||||||
|
queue:
|
||||||
|
TYPE: level
|
||||||
|
indexer:
|
||||||
|
ISSUE_INDEXER_TYPE: bleve
|
||||||
|
REPO_INDEXER_ENABLED: true
|
||||||
|
webhook:
|
||||||
|
ALLOWED_HOST_LIST: "external,loopback"
|
||||||
|
service:
|
||||||
|
ssh:
|
||||||
|
port: 22
|
||||||
|
annotations:
|
||||||
|
metallb.universe.tf/allow-shared-ip: test
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
className: nginx
|
||||||
|
hosts:
|
||||||
|
- host: git.keligrubb.com
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
persistence:
|
||||||
|
storageClass: longhorn
|
||||||
|
size: 64Gi
|
||||||
4
namespaces/git/namespace.yml
Normal file
4
namespaces/git/namespace.yml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
kind: Namespace
|
||||||
|
apiVersion: v1
|
||||||
|
metadata:
|
||||||
|
name: git
|
||||||
39
namespaces/git/woodpecker-chart.yml
Normal file
39
namespaces/git/woodpecker-chart.yml
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
apiVersion: helm.cattle.io/v1
|
||||||
|
kind: HelmChart
|
||||||
|
metadata:
|
||||||
|
name: woodpecker
|
||||||
|
namespace: git
|
||||||
|
spec:
|
||||||
|
chart: woodpecker
|
||||||
|
targetNamespace: git
|
||||||
|
repo: https://woodpecker-ci.org/
|
||||||
|
version: 0.4.2
|
||||||
|
valuesContent: |-
|
||||||
|
server:
|
||||||
|
image:
|
||||||
|
tag: v1.0.3
|
||||||
|
env:
|
||||||
|
WOODPECKER_ADMIN: kgrubb
|
||||||
|
WOODPECKER_GITEA: true
|
||||||
|
WOODPECKER_GITEA_URL: http://git.keligrubb.com
|
||||||
|
WOODPECKER_GITEA_SKIP_VERIFY: true
|
||||||
|
WOODPECKER_HOST: http://ci.keligrubb.com
|
||||||
|
WOODPECKER_ORGS: homestead
|
||||||
|
extraSecretNamesForEnvFrom:
|
||||||
|
- woodpecker-gitea-client
|
||||||
|
- woodpecker-gitea-secret
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
ingressClassName: nginx
|
||||||
|
hosts:
|
||||||
|
- host: ci.keligrubb.com
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
backend:
|
||||||
|
serviceName: ci.keligrubb.com
|
||||||
|
servicePort: 80
|
||||||
|
agent:
|
||||||
|
image:
|
||||||
|
tag: v1.0.3
|
||||||
|
env:
|
||||||
|
WOODPECKER_GITEA: true
|
||||||
25
namespaces/ingress-nginx/ingress-nginx-chart.yml
Normal file
25
namespaces/ingress-nginx/ingress-nginx-chart.yml
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
apiVersion: helm.cattle.io/v1
|
||||||
|
kind: HelmChart
|
||||||
|
metadata:
|
||||||
|
name: ingress-nginx
|
||||||
|
namespace: ingress-nginx
|
||||||
|
spec:
|
||||||
|
chart: ingress-nginx
|
||||||
|
targetNamespace: ingress-nginx
|
||||||
|
repo: https://kubernetes.github.io/ingress-nginx
|
||||||
|
version: 4.8.0
|
||||||
|
valuesContent: |-
|
||||||
|
controller:
|
||||||
|
metrics:
|
||||||
|
enabled: true
|
||||||
|
serviceMonitor:
|
||||||
|
enabled: true
|
||||||
|
additionalLabels:
|
||||||
|
release: prometheus
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 180Mi
|
||||||
|
limits:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 180Mi
|
||||||
4
namespaces/ingress-nginx/namespace.yml
Normal file
4
namespaces/ingress-nginx/namespace.yml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
kind: Namespace
|
||||||
|
apiVersion: v1
|
||||||
|
metadata:
|
||||||
|
name: ingress-nginx
|
||||||
173
namespaces/kube-system/helm-controller.yaml
Normal file
173
namespaces/kube-system/helm-controller.yaml
Normal file
@@ -0,0 +1,173 @@
|
|||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
name: helmcharts.helm.cattle.io
|
||||||
|
spec:
|
||||||
|
group: helm.cattle.io
|
||||||
|
names:
|
||||||
|
kind: HelmChart
|
||||||
|
plural: helmcharts
|
||||||
|
singular: helmchart
|
||||||
|
preserveUnknownFields: false
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- additionalPrinterColumns:
|
||||||
|
- jsonPath: .status.jobName
|
||||||
|
name: Job
|
||||||
|
type: string
|
||||||
|
- jsonPath: .spec.chart
|
||||||
|
name: Chart
|
||||||
|
type: string
|
||||||
|
- jsonPath: .spec.targetNamespace
|
||||||
|
name: TargetNamespace
|
||||||
|
type: string
|
||||||
|
- jsonPath: .spec.version
|
||||||
|
name: Version
|
||||||
|
type: string
|
||||||
|
- jsonPath: .spec.repo
|
||||||
|
name: Repo
|
||||||
|
type: string
|
||||||
|
- jsonPath: .spec.helmVersion
|
||||||
|
name: HelmVersion
|
||||||
|
type: string
|
||||||
|
- jsonPath: .spec.bootstrap
|
||||||
|
name: Bootstrap
|
||||||
|
type: string
|
||||||
|
name: v1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
properties:
|
||||||
|
spec:
|
||||||
|
properties:
|
||||||
|
authPassCredentials:
|
||||||
|
type: boolean
|
||||||
|
authSecret:
|
||||||
|
nullable: true
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
nullable: true
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
backOffLimit:
|
||||||
|
nullable: true
|
||||||
|
type: integer
|
||||||
|
bootstrap:
|
||||||
|
type: boolean
|
||||||
|
chart:
|
||||||
|
nullable: true
|
||||||
|
type: string
|
||||||
|
chartContent:
|
||||||
|
nullable: true
|
||||||
|
type: string
|
||||||
|
createNamespace:
|
||||||
|
type: boolean
|
||||||
|
dockerRegistrySecret:
|
||||||
|
nullable: true
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
nullable: true
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
failurePolicy:
|
||||||
|
nullable: true
|
||||||
|
type: string
|
||||||
|
helmVersion:
|
||||||
|
nullable: true
|
||||||
|
type: string
|
||||||
|
jobImage:
|
||||||
|
nullable: true
|
||||||
|
type: string
|
||||||
|
repo:
|
||||||
|
nullable: true
|
||||||
|
type: string
|
||||||
|
repoCA:
|
||||||
|
nullable: true
|
||||||
|
type: string
|
||||||
|
repoCAConfigMap:
|
||||||
|
nullable: true
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
nullable: true
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
set:
|
||||||
|
additionalProperties:
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
nullable: true
|
||||||
|
type: object
|
||||||
|
targetNamespace:
|
||||||
|
nullable: true
|
||||||
|
type: string
|
||||||
|
timeout:
|
||||||
|
nullable: true
|
||||||
|
type: string
|
||||||
|
valuesContent:
|
||||||
|
nullable: true
|
||||||
|
type: string
|
||||||
|
version:
|
||||||
|
nullable: true
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
status:
|
||||||
|
properties:
|
||||||
|
jobName:
|
||||||
|
nullable: true
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
name: helmchartconfigs.helm.cattle.io
|
||||||
|
spec:
|
||||||
|
group: helm.cattle.io
|
||||||
|
names:
|
||||||
|
kind: HelmChartConfig
|
||||||
|
plural: helmchartconfigs
|
||||||
|
singular: helmchartconfig
|
||||||
|
preserveUnknownFields: false
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- name: v1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
properties:
|
||||||
|
spec:
|
||||||
|
properties:
|
||||||
|
failurePolicy:
|
||||||
|
nullable: true
|
||||||
|
type: string
|
||||||
|
valuesContent:
|
||||||
|
nullable: true
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: helm-controller
|
||||||
|
name: helm-controller
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: helm-controller
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: helm-controller
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- command:
|
||||||
|
- helm-controller
|
||||||
|
image: rancher/helm-controller:v0.15.4
|
||||||
|
name: helm-controller
|
||||||
|
---
|
||||||
200
namespaces/kube-system/metrics-server.yml
Normal file
200
namespaces/kube-system/metrics-server.yml
Normal file
@@ -0,0 +1,200 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
k8s-app: metrics-server
|
||||||
|
name: metrics-server
|
||||||
|
namespace: kube-system
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRole
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
k8s-app: metrics-server
|
||||||
|
rbac.authorization.k8s.io/aggregate-to-admin: "true"
|
||||||
|
rbac.authorization.k8s.io/aggregate-to-edit: "true"
|
||||||
|
rbac.authorization.k8s.io/aggregate-to-view: "true"
|
||||||
|
name: system:aggregated-metrics-reader
|
||||||
|
rules:
|
||||||
|
- apiGroups:
|
||||||
|
- metrics.k8s.io
|
||||||
|
resources:
|
||||||
|
- pods
|
||||||
|
- nodes
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRole
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
k8s-app: metrics-server
|
||||||
|
name: system:metrics-server
|
||||||
|
rules:
|
||||||
|
- apiGroups:
|
||||||
|
- ""
|
||||||
|
resources:
|
||||||
|
- nodes/metrics
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- apiGroups:
|
||||||
|
- ""
|
||||||
|
resources:
|
||||||
|
- pods
|
||||||
|
- nodes
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: RoleBinding
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
k8s-app: metrics-server
|
||||||
|
name: metrics-server-auth-reader
|
||||||
|
namespace: kube-system
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: Role
|
||||||
|
name: extension-apiserver-authentication-reader
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: metrics-server
|
||||||
|
namespace: kube-system
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
k8s-app: metrics-server
|
||||||
|
name: metrics-server:system:auth-delegator
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: ClusterRole
|
||||||
|
name: system:auth-delegator
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: metrics-server
|
||||||
|
namespace: kube-system
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
k8s-app: metrics-server
|
||||||
|
name: system:metrics-server
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: ClusterRole
|
||||||
|
name: system:metrics-server
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: metrics-server
|
||||||
|
namespace: kube-system
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
k8s-app: metrics-server
|
||||||
|
name: metrics-server
|
||||||
|
namespace: kube-system
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- name: https
|
||||||
|
port: 443
|
||||||
|
protocol: TCP
|
||||||
|
targetPort: https
|
||||||
|
selector:
|
||||||
|
k8s-app: metrics-server
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
k8s-app: metrics-server
|
||||||
|
name: metrics-server
|
||||||
|
namespace: kube-system
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
k8s-app: metrics-server
|
||||||
|
strategy:
|
||||||
|
rollingUpdate:
|
||||||
|
maxUnavailable: 0
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
k8s-app: metrics-server
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- args:
|
||||||
|
- --cert-dir=/tmp
|
||||||
|
- --secure-port=4443
|
||||||
|
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
|
||||||
|
- --kubelet-use-node-status-port
|
||||||
|
- --kubelet-insecure-tls
|
||||||
|
- --metric-resolution=15s
|
||||||
|
image: registry.k8s.io/metrics-server/metrics-server:v0.6.4
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
livenessProbe:
|
||||||
|
failureThreshold: 3
|
||||||
|
httpGet:
|
||||||
|
path: /livez
|
||||||
|
port: https
|
||||||
|
scheme: HTTPS
|
||||||
|
periodSeconds: 10
|
||||||
|
name: metrics-server
|
||||||
|
ports:
|
||||||
|
- containerPort: 4443
|
||||||
|
name: https
|
||||||
|
protocol: TCP
|
||||||
|
readinessProbe:
|
||||||
|
failureThreshold: 3
|
||||||
|
httpGet:
|
||||||
|
path: /readyz
|
||||||
|
port: https
|
||||||
|
scheme: HTTPS
|
||||||
|
initialDelaySeconds: 20
|
||||||
|
periodSeconds: 10
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 200Mi
|
||||||
|
limits:
|
||||||
|
cpu: 200m
|
||||||
|
memory: 400Mi
|
||||||
|
securityContext:
|
||||||
|
allowPrivilegeEscalation: false
|
||||||
|
readOnlyRootFilesystem: true
|
||||||
|
runAsNonRoot: true
|
||||||
|
runAsUser: 1000
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /tmp
|
||||||
|
name: tmp-dir
|
||||||
|
nodeSelector:
|
||||||
|
kubernetes.io/os: linux
|
||||||
|
priorityClassName: system-cluster-critical
|
||||||
|
serviceAccountName: metrics-server
|
||||||
|
volumes:
|
||||||
|
- emptyDir: {}
|
||||||
|
name: tmp-dir
|
||||||
|
---
|
||||||
|
apiVersion: apiregistration.k8s.io/v1
|
||||||
|
kind: APIService
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
k8s-app: metrics-server
|
||||||
|
name: v1beta1.metrics.k8s.io
|
||||||
|
spec:
|
||||||
|
group: metrics.k8s.io
|
||||||
|
groupPriorityMinimum: 100
|
||||||
|
insecureSkipTLSVerify: true
|
||||||
|
service:
|
||||||
|
name: metrics-server
|
||||||
|
namespace: kube-system
|
||||||
|
version: v1beta1
|
||||||
|
versionPriority: 100
|
||||||
211
namespaces/kube-system/nodelocaldns.yml
Normal file
211
namespaces/kube-system/nodelocaldns.yml
Normal file
@@ -0,0 +1,211 @@
|
|||||||
|
# Copyright 2018 The Kubernetes 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
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#
|
||||||
|
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
name: node-local-dns
|
||||||
|
namespace: kube-system
|
||||||
|
labels:
|
||||||
|
kubernetes.io/cluster-service: "true"
|
||||||
|
addonmanager.kubernetes.io/mode: Reconcile
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: kube-dns-upstream
|
||||||
|
namespace: kube-system
|
||||||
|
labels:
|
||||||
|
k8s-app: kube-dns
|
||||||
|
kubernetes.io/cluster-service: "true"
|
||||||
|
addonmanager.kubernetes.io/mode: Reconcile
|
||||||
|
kubernetes.io/name: "KubeDNSUpstream"
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- name: dns
|
||||||
|
port: 53
|
||||||
|
protocol: UDP
|
||||||
|
targetPort: 53
|
||||||
|
- name: dns-tcp
|
||||||
|
port: 53
|
||||||
|
protocol: TCP
|
||||||
|
targetPort: 53
|
||||||
|
selector:
|
||||||
|
k8s-app: kube-dns
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: node-local-dns
|
||||||
|
namespace: kube-system
|
||||||
|
labels:
|
||||||
|
addonmanager.kubernetes.io/mode: Reconcile
|
||||||
|
data:
|
||||||
|
Corefile: |
|
||||||
|
cluster.local:53 {
|
||||||
|
errors
|
||||||
|
cache {
|
||||||
|
success 9984 30
|
||||||
|
denial 9984 5
|
||||||
|
}
|
||||||
|
reload
|
||||||
|
loop
|
||||||
|
bind 169.254.20.10 10.43.0.10
|
||||||
|
forward . __PILLAR__CLUSTER__DNS__ {
|
||||||
|
force_tcp
|
||||||
|
}
|
||||||
|
prometheus :9253
|
||||||
|
health 169.254.20.10:8080
|
||||||
|
}
|
||||||
|
in-addr.arpa:53 {
|
||||||
|
errors
|
||||||
|
cache 30
|
||||||
|
reload
|
||||||
|
loop
|
||||||
|
bind 169.254.20.10 10.43.0.10
|
||||||
|
forward . __PILLAR__CLUSTER__DNS__ {
|
||||||
|
force_tcp
|
||||||
|
}
|
||||||
|
prometheus :9253
|
||||||
|
}
|
||||||
|
ip6.arpa:53 {
|
||||||
|
errors
|
||||||
|
cache 30
|
||||||
|
reload
|
||||||
|
loop
|
||||||
|
bind 169.254.20.10 10.43.0.10
|
||||||
|
forward . __PILLAR__CLUSTER__DNS__ {
|
||||||
|
force_tcp
|
||||||
|
}
|
||||||
|
prometheus :9253
|
||||||
|
}
|
||||||
|
.:53 {
|
||||||
|
errors
|
||||||
|
cache 30
|
||||||
|
reload
|
||||||
|
loop
|
||||||
|
bind 169.254.20.10 10.43.0.10
|
||||||
|
forward . __PILLAR__UPSTREAM__SERVERS__
|
||||||
|
prometheus :9253
|
||||||
|
}
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: DaemonSet
|
||||||
|
metadata:
|
||||||
|
name: node-local-dns
|
||||||
|
namespace: kube-system
|
||||||
|
labels:
|
||||||
|
k8s-app: node-local-dns
|
||||||
|
kubernetes.io/cluster-service: "true"
|
||||||
|
addonmanager.kubernetes.io/mode: Reconcile
|
||||||
|
spec:
|
||||||
|
updateStrategy:
|
||||||
|
rollingUpdate:
|
||||||
|
maxUnavailable: 10%
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
k8s-app: node-local-dns
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
k8s-app: node-local-dns
|
||||||
|
annotations:
|
||||||
|
prometheus.io/port: "9253"
|
||||||
|
prometheus.io/scrape: "true"
|
||||||
|
spec:
|
||||||
|
priorityClassName: system-node-critical
|
||||||
|
serviceAccountName: node-local-dns
|
||||||
|
hostNetwork: true
|
||||||
|
dnsPolicy: Default # Don't use cluster DNS.
|
||||||
|
tolerations:
|
||||||
|
- key: "CriticalAddonsOnly"
|
||||||
|
operator: "Exists"
|
||||||
|
- effect: "NoExecute"
|
||||||
|
operator: "Exists"
|
||||||
|
- effect: "NoSchedule"
|
||||||
|
operator: "Exists"
|
||||||
|
containers:
|
||||||
|
- name: node-cache
|
||||||
|
image: registry.k8s.io/dns/k8s-dns-node-cache:1.22.23
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 25m
|
||||||
|
memory: 5Mi
|
||||||
|
args: [ "-localip", "169.254.20.10,10.43.0.10", "-conf", "/etc/Corefile", "-upstreamsvc", "kube-dns-upstream" ]
|
||||||
|
securityContext:
|
||||||
|
capabilities:
|
||||||
|
add:
|
||||||
|
- NET_ADMIN
|
||||||
|
ports:
|
||||||
|
- containerPort: 53
|
||||||
|
name: dns
|
||||||
|
protocol: UDP
|
||||||
|
- containerPort: 53
|
||||||
|
name: dns-tcp
|
||||||
|
protocol: TCP
|
||||||
|
- containerPort: 9253
|
||||||
|
name: metrics
|
||||||
|
protocol: TCP
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
host: 169.254.20.10
|
||||||
|
path: /health
|
||||||
|
port: 8080
|
||||||
|
initialDelaySeconds: 60
|
||||||
|
timeoutSeconds: 5
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /run/xtables.lock
|
||||||
|
name: xtables-lock
|
||||||
|
readOnly: false
|
||||||
|
- name: config-volume
|
||||||
|
mountPath: /etc/coredns
|
||||||
|
- name: kube-dns-config
|
||||||
|
mountPath: /etc/kube-dns
|
||||||
|
volumes:
|
||||||
|
- name: xtables-lock
|
||||||
|
hostPath:
|
||||||
|
path: /run/xtables.lock
|
||||||
|
type: FileOrCreate
|
||||||
|
- name: kube-dns-config
|
||||||
|
configMap:
|
||||||
|
name: kube-dns
|
||||||
|
optional: true
|
||||||
|
- name: config-volume
|
||||||
|
configMap:
|
||||||
|
name: node-local-dns
|
||||||
|
items:
|
||||||
|
- key: Corefile
|
||||||
|
path: Corefile.base
|
||||||
|
---
|
||||||
|
# A headless service is a service with a service IP but instead of load-balancing it will return the IPs of our associated Pods.
|
||||||
|
# We use this to expose metrics to Prometheus.
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
prometheus.io/port: "9253"
|
||||||
|
prometheus.io/scrape: "true"
|
||||||
|
labels:
|
||||||
|
k8s-app: node-local-dns
|
||||||
|
name: node-local-dns
|
||||||
|
namespace: kube-system
|
||||||
|
spec:
|
||||||
|
clusterIP: None
|
||||||
|
ports:
|
||||||
|
- name: metrics
|
||||||
|
port: 9253
|
||||||
|
targetPort: 9253
|
||||||
|
selector:
|
||||||
|
k8s-app: node-local-dns
|
||||||
15
namespaces/longhorn-system/longhorn-chart.yml
Normal file
15
namespaces/longhorn-system/longhorn-chart.yml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
apiVersion: helm.cattle.io/v1
|
||||||
|
kind: HelmChart
|
||||||
|
metadata:
|
||||||
|
name: longhorn
|
||||||
|
namespace: longhorn-system
|
||||||
|
spec:
|
||||||
|
chart: longhorn
|
||||||
|
targetNamespace: longhorn-system
|
||||||
|
repo: https://charts.longhorn.io
|
||||||
|
version: 1.5.1
|
||||||
|
valuesContent: |-
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
ingressClassName: nginx
|
||||||
|
host: storage.keligrubb.com
|
||||||
4
namespaces/longhorn-system/namespace.yml
Normal file
4
namespaces/longhorn-system/namespace.yml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
kind: Namespace
|
||||||
|
apiVersion: v1
|
||||||
|
metadata:
|
||||||
|
name: longhorn-system
|
||||||
36
namespaces/metallb-system/metallb-chart.yml
Normal file
36
namespaces/metallb-system/metallb-chart.yml
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
# helm repo add metallb https://metallb.github.io/metallb
|
||||||
|
# helm install metallb metallb/metallb
|
||||||
|
apiVersion: helm.cattle.io/v1
|
||||||
|
kind: HelmChart
|
||||||
|
metadata:
|
||||||
|
name: metallb
|
||||||
|
namespace: metallb-system
|
||||||
|
spec:
|
||||||
|
chart: metallb
|
||||||
|
targetNamespace: metallb-system
|
||||||
|
repo: https://metallb.github.io/metallb
|
||||||
|
version: 0.13.11
|
||||||
|
valuesContent: |-
|
||||||
|
prometheus:
|
||||||
|
serviceMonitor:
|
||||||
|
enabled: true
|
||||||
|
additionalLabels:
|
||||||
|
release: prometheus
|
||||||
|
serviceAccount: prometheus-kube-prometheus-prometheus
|
||||||
|
namespace: monitoring
|
||||||
|
controller:
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 100Mi
|
||||||
|
limits:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 100Mi
|
||||||
|
speaker:
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 100Mi
|
||||||
|
limits:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 100Mi
|
||||||
18
namespaces/metallb-system/metallb-l2-addresspool.yml
Normal file
18
namespaces/metallb-system/metallb-l2-addresspool.yml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
apiVersion: metallb.io/v1beta1
|
||||||
|
kind: IPAddressPool
|
||||||
|
metadata:
|
||||||
|
name: default
|
||||||
|
namespace: metallb-system
|
||||||
|
spec:
|
||||||
|
addresses:
|
||||||
|
- 192.168.1.3-192.168.1.4
|
||||||
|
autoAssign: true
|
||||||
|
---
|
||||||
|
apiVersion: metallb.io/v1beta1
|
||||||
|
kind: L2Advertisement
|
||||||
|
metadata:
|
||||||
|
name: default
|
||||||
|
namespace: metallb-system
|
||||||
|
spec:
|
||||||
|
ipAddressPools:
|
||||||
|
- default
|
||||||
4
namespaces/metallb-system/namespace.yml
Normal file
4
namespaces/metallb-system/namespace.yml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
kind: Namespace
|
||||||
|
apiVersion: v1
|
||||||
|
metadata:
|
||||||
|
name: metallb-system
|
||||||
27
namespaces/minecraft/ingress.yml
Normal file
27
namespaces/minecraft/ingress.yml
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: minecraft-ingress
|
||||||
|
namespace: minecraft
|
||||||
|
labels:
|
||||||
|
name: minecraft-ingress
|
||||||
|
spec:
|
||||||
|
ingressClassName: nginx
|
||||||
|
rules:
|
||||||
|
- host: mc.keligrubb.com
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- pathType: Prefix
|
||||||
|
path: "/"
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: minecraft
|
||||||
|
port:
|
||||||
|
number: 25565
|
||||||
|
- pathType: Prefix
|
||||||
|
path: "/"
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: minecraft-voice
|
||||||
|
port:
|
||||||
|
number: 24454
|
||||||
39
namespaces/minecraft/minecraft-deployment.yml
Normal file
39
namespaces/minecraft/minecraft-deployment.yml
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: minecraft
|
||||||
|
labels:
|
||||||
|
app: minecraft
|
||||||
|
namespace: minecraft
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: minecraft
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: minecraft
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: minecraft-forge
|
||||||
|
image: kgrubb/forge:1.19
|
||||||
|
imagePullPolicy: Always
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: "6144Mi"
|
||||||
|
cpu: "2"
|
||||||
|
limits:
|
||||||
|
memory: "8192Mi"
|
||||||
|
cpu: "4"
|
||||||
|
ports:
|
||||||
|
- containerPort: 25565
|
||||||
|
securityContext:
|
||||||
|
readOnlyRootFilesystem: false
|
||||||
|
volumeMounts:
|
||||||
|
- name: minecraft-world-saves
|
||||||
|
mountPath: /forge/world
|
||||||
|
volumes:
|
||||||
|
- name: minecraft-world-saves
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: minecraft-world-saves
|
||||||
15
namespaces/minecraft/minecraft-service.yml
Normal file
15
namespaces/minecraft/minecraft-service.yml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: minecraft
|
||||||
|
annotations:
|
||||||
|
metallb.universe.tf/allow-shared-ip: minecraft
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app: minecraft
|
||||||
|
ports:
|
||||||
|
- protocol: TCP
|
||||||
|
port: 25565
|
||||||
|
targetPort: 25565
|
||||||
|
type: LoadBalancer
|
||||||
|
loadBalancerIP: 192.168.1.4
|
||||||
15
namespaces/minecraft/minecraft-voice-service.yml
Normal file
15
namespaces/minecraft/minecraft-voice-service.yml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: minecraft-voice
|
||||||
|
annotations:
|
||||||
|
metallb.universe.tf/allow-shared-ip: minecraft
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app: minecraft
|
||||||
|
ports:
|
||||||
|
- protocol: UDP
|
||||||
|
port: 24454
|
||||||
|
targetPort: 24454
|
||||||
|
type: LoadBalancer
|
||||||
|
loadBalancerIP: 192.168.1.4
|
||||||
4
namespaces/minecraft/namespace.yml
Normal file
4
namespaces/minecraft/namespace.yml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
kind: Namespace
|
||||||
|
apiVersion: v1
|
||||||
|
metadata:
|
||||||
|
name: minecraft
|
||||||
12
namespaces/minecraft/pvc.yml
Normal file
12
namespaces/minecraft/pvc.yml
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: minecraft-world-saves
|
||||||
|
namespace: minecraft
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
storageClassName: longhorn
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 20Gi
|
||||||
71
namespaces/monitoring/kube-prometheus-stack-chart.yml
Normal file
71
namespaces/monitoring/kube-prometheus-stack-chart.yml
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
apiVersion: helm.cattle.io/v1
|
||||||
|
kind: HelmChart
|
||||||
|
metadata:
|
||||||
|
name: prometheus
|
||||||
|
namespace: monitoring
|
||||||
|
spec:
|
||||||
|
chart: kube-prometheus-stack
|
||||||
|
targetNamespace: monitoring
|
||||||
|
repo: https://prometheus-community.github.io/helm-charts
|
||||||
|
version: 51.5.3
|
||||||
|
valuesContent: |-
|
||||||
|
grafana:
|
||||||
|
defaultDashboardsTimezone: "US/Eastern"
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
ingressClassName: nginx
|
||||||
|
paths:
|
||||||
|
- path: "/"
|
||||||
|
pathType: Prefix
|
||||||
|
hosts:
|
||||||
|
- monitoring.keligrubb.com
|
||||||
|
kubelet:
|
||||||
|
serviceMonitor:
|
||||||
|
metricRelabelings:
|
||||||
|
- action: replace
|
||||||
|
sourceLabels:
|
||||||
|
- node
|
||||||
|
targetLabel: instance
|
||||||
|
kube-state-metrics:
|
||||||
|
selfMonitor:
|
||||||
|
enabled: true
|
||||||
|
prometheus:
|
||||||
|
selfMonitor:
|
||||||
|
metricRelabelings:
|
||||||
|
- action: replace
|
||||||
|
regex: (.*)
|
||||||
|
replacement: $1
|
||||||
|
sourceLabels:
|
||||||
|
- __meta_kubernetes_pod_node_name
|
||||||
|
targetLabel: kubernetes_node
|
||||||
|
prometheus:
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
ingressClassName: nginx
|
||||||
|
paths:
|
||||||
|
- /
|
||||||
|
hosts:
|
||||||
|
- prometheus.keligrubb.com
|
||||||
|
prometheusSpec:
|
||||||
|
replicaExternalLabelName: "replica"
|
||||||
|
ruleSelectorNilUsesHelmValues: false
|
||||||
|
serviceMonitorSelectorNilUsesHelmValues: false
|
||||||
|
podMonitorSelectorNilUsesHelmValues: false
|
||||||
|
probeSelectorNilUsesHelmValues: fales
|
||||||
|
retention: 14d
|
||||||
|
retentionSize: "64GB"
|
||||||
|
enableAdminAPI: true
|
||||||
|
securityContext:
|
||||||
|
runAsUser: 0
|
||||||
|
runAsNonRoot: false
|
||||||
|
runAsGroup: 0
|
||||||
|
fsGroup: 65534
|
||||||
|
storageSpec:
|
||||||
|
volumeClaimTemplate:
|
||||||
|
spec:
|
||||||
|
storageclassname: longhorn
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 64Gi
|
||||||
4
namespaces/monitoring/namespace.yml
Normal file
4
namespaces/monitoring/namespace.yml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
kind: Namespace
|
||||||
|
apiVersion: v1
|
||||||
|
metadata:
|
||||||
|
name: monitoring
|
||||||
Reference in New Issue
Block a user