Skip to content

Instantly share code, notes, and snippets.

@pivotaljohn
Last active September 15, 2022 15:13
Show Gist options
  • Save pivotaljohn/4858708213e40841266c60cf494594c5 to your computer and use it in GitHub Desktop.
Save pivotaljohn/4858708213e40841266c60cf494594c5 to your computer and use it in GitHub Desktop.
Spring Cloud Data Flow overlays
apiVersion: apps/v1
kind: Deployment
metadata:
name: scdf-server
annotations:
kapp.k14s.io/change-group: "scdf.tanzu.vmware.com/server"
kapp.k14s.io/change-rule.1: "upsert after upserting scdf.tanzu.vmware.com/db"
kapp.k14s.io/change-rule.2: "upsert after upserting scdf.tanzu.vmware.com/skipper"
labels:
app: scdf-server
spec:
selector:
matchLabels:
app: scdf-server
replicas: 1
template:
metadata:
labels:
app: scdf-server
spec:
containers:
- name: scdf-server
image: dataflow_image()
imagePullPolicy: Always
volumeMounts:
- name: config
mountPath: /workspace/config
readOnly: true
- name: database
mountPath: /workspace/runtime/secrets/database
readOnly: true
- name: scdfmetadata
mountPath: /workspace/runtime/secrets
readOnly: true
ports:
- containerPort: 80
startupProbe:
httpGet:
port: 9393
path: dataflow_liveness_path()
failureThreshold: 40
initialDelaySeconds: 10
timeoutSeconds: 3
periodSeconds: 5
livenessProbe:
httpGet:
path: dataflow_liveness_path()
port: 9393
initialDelaySeconds: 5
readinessProbe:
httpGet:
path: dataflow_readiness_path()
port: 9393
initialDelaySeconds: 10
resources:
limits:
cpu: data.values.scdf.server.resources.limits.cpu
memory: data.values.scdf.server.resources.limits.memory
requests:
cpu: data.values.scdf.server.resources.requests.cpu
memory: data.values.scdf.server.resources.requests.memory
env: dataflow_container_env()
serviceAccountName: scdf-sa
imagePullSecrets: [{name: reg-creds}]
volumes:
- name: config
configMap:
name: scdf-server
items:
- key: application.yaml
path: application.yaml
- name: database
secret:
secretName: db-dataflow
- name: scdfmetadata
secret:
secretName: reg-creds
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend
namespace: default
spec:
selector:
matchLabels:
app: backend
replicas: 1
template:
metadata:
labels:
app: backend
spec:
containers:
- name: default
image: user/backend
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend
namespace: default
spec:
selector:
matchLabels:
app: frontend
replicas: 1
template:
metadata:
labels:
app: frontend
spec:
containers:
- name: default
image: user/frontend
ports:
- containerPort: 80
#@ load("@ytt:overlay", "overlay")
#@overlay/match by=overlay.subset({"kind": "Deployment"}), expects="0+"
---
spec:
template:
spec:
containers:
#@overlay/match by=overlay.all, expects="0+"
-
#@overlay/match when=1
resources:
#@overlay/match when=1
#@overlay/remove
limits:
#@overlay/match by=overlay.subset({"kind": "Deployment"}), expects="0+"
---
spec:
template:
spec:
containers:
#@overlay/match by=overlay.subset({"livenessProbe": {}}), when=1
-
#@overlay/match-child-defaults missing_ok=True
livenessProbe:
failureThreshold: 4
initialDelaySeconds: 1
timeoutSeconds: 3
periodSeconds: 15
#@overlay/match by=overlay.subset({"readinessProbe": {}}), when=1
-
#@overlay/match-child-defaults missing_ok=True
readinessProbe:
failureThreshold: 3
initialDelaySeconds: 5
timeoutSeconds: 3
periodSeconds: 15
#! == Ensure there exists a properly configured startupProbe (if possible) ==
#! case: there is not yet a startupProbe, but there IS a livenessProbe,
#! --> copy the livenessProbe to a startupProbe and update its parameters.
#@ load("@ytt:yaml", "yaml")
#@ def copy_gets(orig, _):
#@ edit = yaml.decode(yaml.encode(orig))
#@ if "httpGet" in edit["livenessProbe"]:
#@ edit["startupProbe"] = {"httpGet": edit["livenessProbe"]["httpGet"]}
#@ end
#@ if "tcpSocket" in edit["livenessProbe"]:
#@ edit["startupProbe"] = {"tcpSocket": edit["livenessProbe"]["tcpSocket"]}
#@ end
#@ return edit
#@ end
#@overlay/match by=overlay.subset({"kind": "Deployment"}), expects="0+"
---
spec:
template:
spec:
containers:
#@overlay/match by=lambda _,left,__: ("livenessProbe" in left) and ("startupProbe" not in left), when=1
#@overlay/replace via=copy_gets
-
#! case: there is not yet a startupProbe, but the container has at least one exposed port,
#! --> pluck the port (i.e. containers[].ports[0].containerPort) and build a tcpSocket probe
#@ def add_startupProbe(orig, _):
#@ edit = yaml.decode(yaml.encode(orig))
#@ edit["startupProbe"] = {"tcpSocket": {"port": orig["ports"][0]["containerPort"]}}
#@ return edit
#@ end
#@overlay/match by=overlay.subset({"kind": "Deployment"}), expects="0+"
---
spec:
template:
spec:
containers:
#@overlay/match by=lambda _,left,__: ("startupProbe" not in left) and ("ports" in left) and (len(left["ports"]) > 0), when=1
#@overlay/replace via=add_startupProbe
-
#! finally: However the startupProbe is created, ensure its parameters are properly set.
#@overlay/match by=overlay.subset({"kind": "Deployment"}), expects="0+"
---
spec:
template:
spec:
containers:
#@overlay/match by=overlay.subset({"startupProbe": {}}), when=1
-
#@overlay/match-child-defaults missing_ok=True
startupProbe:
failureThreshold: 30
initialDelaySeconds: 30
timeoutSeconds: 3
periodSeconds: 5
apiVersion: apps/v1
kind: Deployment
metadata:
name: skipper
annotations:
kapp.k14s.io/change-group: "scdf.tanzu.vmware.com/skipper"
kapp.k14s.io/change-rule: "upsert after upserting scdf.tanzu.vmware.com/db"
labels:
app: skipper
spec:
selector:
matchLabels:
app: skipper
replicas: 1
template:
metadata:
labels:
app: skipper
spec:
containers:
- name: skipper
image: skipper_image()
imagePullPolicy: Always
volumeMounts:
- name: config
mountPath: /workspace/config
readOnly: true
- name: database
mountPath: /workspace/runtime/secrets/database
readOnly: true
- name: rabbitmq
mountPath: /workspace/runtime/secrets/rabbitmq
readOnly: true
ports:
- containerPort: 80
startupProbe:
httpGet:
port: 7577
path: /actuator
failureThreshold: 40
initialDelaySeconds: 10
timeoutSeconds: 3
periodSeconds: 5
livenessProbe:
httpGet:
path: /actuator/health
port: 7577
initialDelaySeconds: 5
readinessProbe:
httpGet:
path: /actuator/info
port: 7577
initialDelaySeconds: 10
resources:
limits:
cpu: data.values.scdf.skipper.resources.limits.cpu
memory: data.values.scdf.skipper.resources.limits.memory
requests:
cpu: data.values.scdf.skipper.resources.requests.cpu
memory: data.values.scdf.skipper.resources.requests.memory
env: skipper_container_env()
serviceAccountName: scdf-sa
imagePullSecrets: [{name: reg-creds}]
volumes:
- name: config
configMap:
name: skipper
items:
- key: application.yaml
path: application.yaml
- name: database
secret:
secretName: db-skipper
- name: rabbitmq
secret:
secretName: rabbitmq
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment