Skip to content

Instantly share code, notes, and snippets.

@binura-g
Created December 15, 2025 09:28
Show Gist options
  • Select an option

  • Save binura-g/1ce4d2bfd2ecf903f5755f6900084e31 to your computer and use it in GitHub Desktop.

Select an option

Save binura-g/1ce4d2bfd2ecf903f5755f6900084e31 to your computer and use it in GitHub Desktop.
apiVersion: openchoreo.dev/v1alpha1
kind: ComponentType
metadata:
name: simple-http-service
namespace: default
spec:
workloadType: deployment
schema:
types:
Resources:
cpu: "string | default=100m"
memory: "string | default=256Mi"
parameters:
replicas: "integer | default=1"
port: "integer | default=80"
envOverrides:
resources:
requests: Resources
limits: Resources
minAvailable: "integer | default=1"
resources:
- id: deployment
template:
apiVersion: apps/v1
kind: Deployment
metadata:
name: ${metadata.name}
namespace: ${metadata.namespace}
labels: ${metadata.labels}
spec:
replicas: ${parameters.replicas}
selector:
matchLabels: ${metadata.podSelectors}
template:
metadata:
labels: ${metadata.podSelectors}
spec:
containers:
- name: main
image: ${workload.containers["main"].image}
ports:
- name: http
containerPort: ${parameters.port}
protocol: TCP
resources:
requests:
cpu: ${parameters.resources.requests.cpu}
memory: ${parameters.resources.requests.memory}
limits:
cpu: ${parameters.resources.limits.cpu}
memory: ${parameters.resources.limits.memory}
- id: service
template:
apiVersion: v1
kind: Service
metadata:
name: ${metadata.name}
namespace: ${metadata.namespace}
labels: ${metadata.labels}
spec:
type: ClusterIP
selector: ${metadata.podSelectors}
ports:
- name: http
port: 80
targetPort: ${parameters.port}
protocol: TCP
- id: httproute
template:
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: ${metadata.name}
namespace: ${metadata.namespace}
labels: ${metadata.labels}
spec:
parentRefs:
- name: gateway-external
namespace: openchoreo-data-plane
hostnames:
- ${metadata.name}-${metadata.environmentName}.${dataplane.publicVirtualHost}
rules:
- matches:
- path:
type: PathPrefix
value: /${metadata.name}
method: GET
filters:
- type: URLRewrite
urlRewrite:
path:
type: ReplacePrefixMatch
replacePrefixMatch: /
backendRefs:
- name: ${metadata.name}
port: 80
- id: pdb
template:
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: ${metadata.name}
namespace: ${metadata.namespace}
labels: ${metadata.labels}
spec:
minAvailable: ${parameters.minAvailable}
selector:
matchLabels: ${metadata.podSelectors}
---
apiVersion: openchoreo.dev/v1alpha1
kind: Trait
metadata:
name: persistent-volume
namespace: default
spec:
schema:
parameters:
volumeName: "string | default=true"
mountPath: "string | default='/var/data'"
containerName: "string | default=main"
envOverrides:
size: "string | default=1Gi"
storageClass: "string | default=local-path"
creates:
- template:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: ${metadata.name}-${trait.instanceName}
namespace: ${metadata.namespace}
spec:
accessModes:
- ReadWriteOnce
storageClassName: ${parameters.storageClass}
resources:
requests:
storage: ${parameters.size}
patches:
- target:
group: apps
version: v1
kind: Deployment
operations:
- op: add
path: /spec/template/spec/containers/[?(@.name=='${parameters.containerName}')]/volumeMounts/-
value:
name: ${parameters.volumeName}
mountPath: ${parameters.mountPath}
- op: add
path: /spec/template/spec/volumes/-
value:
name: ${parameters.volumeName}
persistentVolumeClaim:
claimName: ${metadata.name}-${trait.instanceName}
---
apiVersion: openchoreo.dev/v1alpha1
kind: Trait
metadata:
name: horizontal-autoscaling
namespace: default
spec:
schema:
parameters:
minReplicas: "integer | default=2"
maxReplicas: "integer | default=5"
targetCpuUtilization: "integer | default=70"
creates:
- template:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: ${metadata.name}-${trait.instanceName}
namespace: ${metadata.namespace}
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: ${metadata.name}
minReplicas: ${parameters.minReplicas}
maxReplicas: ${parameters.maxReplicas}
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: ${parameters.targetCpuUtilization}
---
apiVersion: openchoreo.dev/v1alpha1
kind: Component
metadata:
name: foo-api
namespace: default
spec:
owner:
projectName: default
autoDeploy: true
componentType: deployment/simple-http-service
parameters:
replicas: 2
port: 9090
resources:
requests:
cpu: "200m"
memory: "512Mi"
limits:
cpu: "1000m"
memory: "1Gi"
traits:
- name: persistent-volume
instanceName: data-storage
parameters:
volumeName: data
mountPath: /var/data
- name: horizontal-autoscaling
instanceName: hpa
parameters:
minReplicas: 2
maxReplicas: 10
targetCpuUtilization: 65
---
apiVersion: openchoreo.dev/v1alpha1
kind: Workload
metadata:
name: foo-api-workload
namespace: default
spec:
owner:
projectName: default
componentName: foo-api
containers:
main:
image: "ghcr.io/openchoreo/samples/reading-list-server:latest"
---
apiVersion: openchoreo.dev/v1alpha1
kind: ReleaseBinding
metadata:
name: foo-api-development
namespace: default
spec:
owner:
projectName: default
componentName: foo-api
environment: development
componentTypeEnvOverrides:
resources:
requests:
cpu: "50m"
memory: "128Mi"
limits:
cpu: "200m"
memory: "256Mi"
traitOverrides:
data-storage:
size: 1Gi
storageClass: local-path
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment