Add a rich example of fn framework for abstraction

This commit is contained in:
Katrina Verey
2023-04-06 20:04:55 -04:00
parent d3184da4c6
commit 85d623bc86
27 changed files with 1450 additions and 3 deletions

View File

@@ -0,0 +1,21 @@
apiVersion: platform.example.com/v1alpha1
kind: ExampleApp
metadata:
name: simple-app-sample
env: invalid
workloads:
webWorkers:
- name: web-worker
replicas: -1
resources: small
domains:
- example.com
- name: web-worker-2
domains:
- example.com
jobWorkers:
- name: job-worker-$$
queues: []
datastores:
mongoDB: simple-app-sample-mongo
extraProperty: true

View File

@@ -0,0 +1,8 @@
validation failure list:
.extraProperty in body is a forbidden property
workloads.jobWorkers\[0\].name in body should match
workloads.jobWorkers\[0\].queues in body should have at least 1 items
workloads.webWorkers\[0\].replicas in body should be greater than or equal to 0
datastores.mongoDB in body is a forbidden property
env in body should be one of \[production staging development\]
duplicate domain \"example.com\" in worker 1

View File

@@ -0,0 +1,24 @@
apiVersion: platform.example.com/v1alpha1
kind: ExampleApp
metadata:
name: simple-app-sample
env: production
workloads:
webWorkers:
- name: web-worker
domains:
- example.com
jobWorkers:
- name: job-worker
replicas: 10
resources: medium
queues:
- high
- medium
- low
- name: job-worker-2
replicas: 5
queues:
- bg2
datastores:
postgresInstance: simple-app-sample-postgres

View File

@@ -0,0 +1,149 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: job-worker
labels:
name: job-worker
type: jobs
env: production
spec:
replicas: 10
selector:
matchLabels:
name: job-worker
type: jobs
env: production
template:
metadata:
labels:
name: job-worker
type: jobs
env: production
spec:
automountServiceAccountToken: false
containers:
- name: app
image: registry.example.com/path/to/simple-app-sample
args: ["job-worker", "--queues", "high,medium,low", "--workers", "6"]
env:
- name: KUBE_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: ENV
value: production
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: database-url
key: DATABASE_URL
resources: {"limits": {"cpu": "2", "memory": "2Gi"}, "requests": {"cpu": "1", "memory": "1Gi"}}
readinessProbe:
exec:
command:
- "bin/job-worker-readiness-probe"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: job-worker-2
labels:
name: job-worker-2
type: jobs
env: production
spec:
replicas: 5
selector:
matchLabels:
name: job-worker-2
type: jobs
env: production
template:
metadata:
labels:
name: job-worker-2
type: jobs
env: production
spec:
automountServiceAccountToken: false
containers:
- name: app
image: registry.example.com/path/to/simple-app-sample
args: ["job-worker", "--queues", "bg2", "--workers", "2"]
env:
- name: KUBE_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: ENV
value: production
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: database-url
key: DATABASE_URL
resources: {"limits": {"cpu": "500m", "memory": "512Mi"}, "requests": {"cpu": "100m", "memory": "128Mi"}}
readinessProbe:
exec:
command:
- "bin/job-worker-readiness-probe"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-worker
labels:
name: web-worker
type: web
env: production
spec:
replicas: 3
selector:
matchLabels:
name: web-worker
type: web
env: production
template:
metadata:
labels:
name: web-worker
type: web
env: production
spec:
containers:
- name: app
image: registry.example.com/path/to/simple-app-sample
args:
- web
ports:
- name: http
containerPort: 8080
env:
- name: ENV
value: production
- name: PORT
value: "8080"
- name: KUBE_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: database-url
key: DATABASE_URL
resources: {"limits": {"cpu": "500m", "memory": "512Mi"}, "requests": {"cpu": "100m", "memory": "128Mi"}}
readinessProbe:
httpGet:
port: 8080
httpHeaders:
- name: "X-Forwarded-Proto"
value: "https"
path: "/ping"
initialDelaySeconds: 20
timeoutSeconds: 3
---
apiVersion: apps.example.com/v1
kind: PostgresSecretRequest
metadata:
name: simple-app-sample-postgres

View File

@@ -0,0 +1,21 @@
apiVersion: platform.example.com/v1alpha1
kind: ExampleApp
metadata:
name: simple-app-sample
env: production
workloads:
webWorkers:
- name: web-worker
domains:
- first.example.com
- name: web-worker-no-sidecar
domains:
- second.example.com
overrides:
additionalResources:
- custom-configmap.yaml
resourcePatches:
- web-worker-sidecar.yaml
containerPatches:
- custom-app-env.yaml

View File

@@ -0,0 +1,6 @@
env:
- name: MY_NEW_VAR
value: "new value"
envFrom:
- configMapRef:
name: custom-configmap

View File

@@ -0,0 +1,6 @@
kind: ConfigMap
apiVersion: v1
metadata:
name: custom-configmap
data:
LOADED: "true"

View File

@@ -0,0 +1,126 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-worker
labels:
name: web-worker
type: web
env: production
spec:
replicas: 3
selector:
matchLabels:
name: web-worker
type: web
env: production
template:
metadata:
labels:
name: web-worker
type: web
env: production
spec:
containers:
- name: app
image: registry.example.com/path/to/simple-app-sample
args:
- web
ports:
- name: http
containerPort: 8080
envFrom:
- configMapRef:
name: custom-configmap
env:
- name: ENV
value: production
- name: PORT
value: "8080"
- name: KUBE_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: MY_NEW_VAR
value: "new value"
resources: {"limits": {"cpu": "500m", "memory": "512Mi"}, "requests": {"cpu": "100m", "memory": "128Mi"}}
readinessProbe:
httpGet:
port: 8080
httpHeaders:
- name: "X-Forwarded-Proto"
value: "https"
path: "/ping"
initialDelaySeconds: 20
timeoutSeconds: 3
- name: sidecar
image: registry.example.com/path/to/custom-sidecar
args:
- run
envFrom:
- configMapRef:
name: custom-configmap
env:
- name: MY_NEW_VAR
value: "new value"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-worker-no-sidecar
labels:
name: web-worker-no-sidecar
type: web
env: production
spec:
replicas: 3
selector:
matchLabels:
name: web-worker-no-sidecar
type: web
env: production
template:
metadata:
labels:
name: web-worker-no-sidecar
type: web
env: production
spec:
containers:
- name: app
image: registry.example.com/path/to/simple-app-sample
args:
- web
ports:
- name: http
containerPort: 8080
envFrom:
- configMapRef:
name: custom-configmap
env:
- name: ENV
value: production
- name: PORT
value: "8080"
- name: KUBE_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: MY_NEW_VAR
value: "new value"
resources: {"limits": {"cpu": "500m", "memory": "512Mi"}, "requests": {"cpu": "100m", "memory": "128Mi"}}
readinessProbe:
httpGet:
port: 8080
httpHeaders:
- name: "X-Forwarded-Proto"
value: "https"
path: "/ping"
initialDelaySeconds: 20
timeoutSeconds: 3
---
apiVersion: v1
kind: ConfigMap
metadata:
name: custom-configmap
data:
LOADED: "true"

View File

@@ -0,0 +1,12 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-worker
spec:
template:
spec:
containers:
- name: sidecar
image: registry.example.com/path/to/custom-sidecar
args:
- run