feat: initial commit

This commit is contained in:
2021-09-14 08:32:10 +02:00
commit 2230cc9b98
8 changed files with 368 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
data
+49
View File
@@ -0,0 +1,49 @@
# Run Unbound environment in local K8S
This is a setup for running the Unbound environment in K8S using [KinD](https://kind.sigs.k8s.io/)
## Prerequisites
- [KinD](https://kind.sigs.k8s.io/docs/user/quick-start/#installation)
- [kubectl](https://kubernetes.io/docs/tasks/tools/)
## Creating the cluster
Just run the following:
```shell
./setup
```
Wait for the cluster to be ready. The K8S context should be set automatically. Check what's been deployed by running:
```shell
kubectl get pod -A
```
## Stopping/starting the cluster
If you need to stop the cluster to be able to use the exposed ports for other things, run:
```shell
docker stop unbound-control-plane
```
To start it again:
```shell
docker start unbound-control-plane
```
## Removing the cluster
To remove the cluster completely, run:
```shell
kind delete cluster --name unbound
```
## Cleaning up retained data
The setup stores data for containers in the `data`-directory. To start from scratch, stop the cluster, empty the directory
and start the cluster again.
+38
View File
@@ -0,0 +1,38 @@
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: unbound
nodes:
- role: control-plane
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
- |
kind: ClusterConfiguration
apiServer:
extraArgs:
service-node-port-range: 3000-39999
extraPortMappings:
- containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
- containerPort: 5672
hostPort: 5672
protocol: TCP
- containerPort: 15672
hostPort: 15672
protocol: TCP
- containerPort: 3306
hostPort: 3306
protocol: TCP
- containerPort: 5432
hostPort: 5432
protocol: TCP
extraMounts:
- hostPath: ./data
containerPath: /data
+7
View File
@@ -0,0 +1,7 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- mysql.yaml
- postgres.yaml
- rabbitmq.yaml
- https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml
+60
View File
@@ -0,0 +1,60 @@
apiVersion: v1
kind: Secret
metadata:
name: mysql
stringData:
DB_HOST: mysql
DB_PORT: "3306"
DB_NAME: mysql
DB_USER: mysql
DB_PASSWORD: mysql
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:8
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: password
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: data
mountPath: /var/lib/mysql
volumes:
- name: data
hostPath:
path: /data/mysql
---
apiVersion: v1
kind: Service
metadata:
labels:
app: mysql
name: mysql
spec:
ports:
- name: mysql
port: 3306
nodePort: 3306
protocol: TCP
selector:
app: mysql
sessionAffinity: None
type: NodePort
+62
View File
@@ -0,0 +1,62 @@
kind: ConfigMap
apiVersion: v1
metadata:
name: shared-postgres
data:
DB_HOST: "postgres-postgresql"
DB_PORT: "5432"
DB_USER: "postgres"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
spec:
selector:
matchLabels:
app: postgres
replicas: 1
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:12.0
imagePullPolicy: "IfNotPresent"
resources:
requests:
memory: 200Mi
limits:
memory: 300Mi
ports:
- containerPort: 5432
env:
- name: POSTGRES_DB
value: postgres
- name: POSTGRES_USER
value: postgres
- name: POSTGRES_PASSWORD
value: postgres
volumeMounts:
- name: data
mountPath: /var/lib/postgresql/data
volumes:
- name: data
hostPath:
path: /data/postgres
---
apiVersion: v1
kind: Service
metadata:
name: postgres
labels:
app: postgres
spec:
ports:
- port: 5432
nodePort: 5432
selector:
app: postgres
type: NodePort
+138
View File
@@ -0,0 +1,138 @@
kind: ConfigMap
apiVersion: v1
metadata:
name: shared-rabbitmq
data:
RABBITMQ_SERVERS: rabbitmq
RABBITMQ_VHOST: /
RABBITMQ_USERNAME: user
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: rabbitmq
release: rabbitmq
name: rabbitmq
spec:
replicas: 1
selector:
matchLabels:
app: rabbitmq
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
type: RollingUpdate
template:
metadata:
labels:
app: rabbitmq
spec:
containers:
- env:
- name: RABBITMQ_DEFAULT_USER
value: user
- name: RABBITMQ_DEFAULT_PASS
value: password
- name: RABBITMQ_NODE_PORT_NUMBER
value: "5672"
- name: RABBITMQ_NODE_TYPE
value: stats
- name: RABBITMQ_NODENAME
value: rabbit@localhost
- name: RABBITMQ_CLUSTER_NODE_NAME
- name: RABBITMQ_DEFAULT_VHOST
value: /
- name: RABBITMQ_MANAGER_PORT_NUMBER
value: "15672"
- name: RABBITMQ_DISK_FREE_LIMIT
value: '"8GiB"'
image: sparetimecoders/rabbitmq:latest
imagePullPolicy: Always
livenessProbe:
exec:
command:
- rabbitmqctl
- status
failureThreshold: 6
initialDelaySeconds: 120
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
name: rabbitmq
ports:
- containerPort: 4369
name: epmd
protocol: TCP
- containerPort: 5672
name: amqp
protocol: TCP
- containerPort: 25672
name: dist
protocol: TCP
- containerPort: 15672
name: stats
protocol: TCP
readinessProbe:
exec:
command:
- rabbitmqctl
- status
failureThreshold: 3
initialDelaySeconds: 10
periodSeconds: 5
successThreshold: 1
timeoutSeconds: 3
resources:
requests:
cpu: 100m
memory: 256Mi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- name: data
mountPath: /var/lib/rabbitmq
volumes:
- name: data
hostPath:
path: /data/rabbitmq
dnsPolicy: ClusterFirst
restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
labels:
app: rabbitmq
release: rabbitmq
name: rabbitmq
spec:
externalTrafficPolicy: Cluster
ports:
- name: epmd
nodePort: 31799
port: 4369
protocol: TCP
targetPort: epmd
- name: amqp
nodePort: 5672
port: 5672
protocol: TCP
targetPort: amqp
- name: dist
nodePort: 32687
port: 25672
protocol: TCP
targetPort: dist
- name: stats
nodePort: 15672
port: 15672
protocol: TCP
targetPort: stats
selector:
app: rabbitmq
sessionAffinity: None
type: NodePort
Executable
+13
View File
@@ -0,0 +1,13 @@
#!/usr/bin/env bash
kind create cluster --config kind.yaml --wait 10m
kubectl create secret docker-registry gitlab \
--docker-server=registry.gitlab.com \
--docker-username=gitlab \
--docker-password="${GITLAB_TOKEN}" \
--docker-email=gitlab@paidit.se
kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "gitlab"}]}'
kubectl apply -k .