Version: v1.8

Built-in Trait Type

This documentation will walk through all the built-in trait types sorted alphabetically.

It was generated automatically by scripts, please don’t update manually, last updated at 2023-01-16T19:19:03+08:00.

Affinity specifies affinity and toleration K8s pod for your workload which follows the pod spec in path ‘spec.template’.

For now this trait is hidden from the VelaUX. Available when using CLI

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  • daemonsets.apps
  • jobs.batch
  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: busybox
  5. spec:
  6. components:
  7. - name: busybox
  8. type: webservice
  9. properties:
  10. image: busybox
  11. cmd: ["sleep", "86400"]
  12. labels:
  13. label-key: label-value
  14. to-delete-label-key: to-delete-label-value
  15. traits:
  16. - type: affinity
  17. properties:
  18. podAffinity:
  19. preferred:
  20. - weight: 1
  21. podAffinityTerm:
  22. labelSelector:
  23. matchExpressions:
  24. - key: "secrity"
  25. values: ["S1"]
  26. namespaces: ["default"]
  27. topologyKey: "kubernetes.io/hostname"
NameDescriptionTypeRequiredDefault
podAffinitySpecify the pod affinity scheduling rules.podAffinityfalse
podAntiAffinitySpecify the pod anti-affinity scheduling rules.podAntiAffinityfalse
nodeAffinitySpecify the node affinity scheduling rules for the pod.nodeAffinityfalse
tolerationsSpecify tolerant taint.[]tolerationsfalse
NameDescriptionTypeRequiredDefault
requiredSpecify the required during scheduling ignored during execution.[]requiredfalse
preferredSpecify the preferred during scheduling ignored during execution.[]preferredfalse
NameDescriptionTypeRequiredDefault
labelSelectorlabelSelectorfalse
namespaces[]stringfalse
topologyKeystringtrue
namespaceSelectornamespaceSelectorfalse
NameDescriptionTypeRequiredDefault
matchLabelsmap[string]stringfalse
matchExpressions[]matchExpressionsfalse
NameDescriptionTypeRequiredDefault
keystringtrue
operator“In” or “NotIn” or “Exists” or “DoesNotExist”falseIn
values[]stringfalse
NameDescriptionTypeRequiredDefault
matchLabelsmap[string]stringfalse
matchExpressions[]matchExpressionsfalse
NameDescriptionTypeRequiredDefault
keystringtrue
operator“In” or “NotIn” or “Exists” or “DoesNotExist”falseIn
values[]stringfalse
NameDescriptionTypeRequiredDefault
weightSpecify weight associated with matching the corresponding podAffinityTerm.inttrue
podAffinityTermSpecify a set of pods.podAffinityTermtrue
NameDescriptionTypeRequiredDefault
labelSelectorlabelSelectorfalse
namespaces[]stringfalse
topologyKeystringtrue
namespaceSelectornamespaceSelectorfalse
NameDescriptionTypeRequiredDefault
matchLabelsmap[string]stringfalse
matchExpressions[]matchExpressionsfalse
NameDescriptionTypeRequiredDefault
keystringtrue
operator“In” or “NotIn” or “Exists” or “DoesNotExist”falseIn
values[]stringfalse
NameDescriptionTypeRequiredDefault
matchLabelsmap[string]stringfalse
matchExpressions[]matchExpressionsfalse
NameDescriptionTypeRequiredDefault
keystringtrue
operator“In” or “NotIn” or “Exists” or “DoesNotExist”falseIn
values[]stringfalse
NameDescriptionTypeRequiredDefault
requiredSpecify the required during scheduling ignored during execution.[]requiredfalse
preferredSpecify the preferred during scheduling ignored during execution.[]preferredfalse
NameDescriptionTypeRequiredDefault
labelSelectorlabelSelectorfalse
namespaces[]stringfalse
topologyKeystringtrue
namespaceSelectornamespaceSelectorfalse
NameDescriptionTypeRequiredDefault
matchLabelsmap[string]stringfalse
matchExpressions[]matchExpressionsfalse
NameDescriptionTypeRequiredDefault
keystringtrue
operator“In” or “NotIn” or “Exists” or “DoesNotExist”falseIn
values[]stringfalse
NameDescriptionTypeRequiredDefault
matchLabelsmap[string]stringfalse
matchExpressions[]matchExpressionsfalse
NameDescriptionTypeRequiredDefault
keystringtrue
operator“In” or “NotIn” or “Exists” or “DoesNotExist”falseIn
values[]stringfalse
NameDescriptionTypeRequiredDefault
weightSpecify weight associated with matching the corresponding podAffinityTerm.inttrue
podAffinityTermSpecify a set of pods.podAffinityTermtrue
NameDescriptionTypeRequiredDefault
labelSelectorlabelSelectorfalse
namespaces[]stringfalse
topologyKeystringtrue
namespaceSelectornamespaceSelectorfalse
NameDescriptionTypeRequiredDefault
matchLabelsmap[string]stringfalse
matchExpressions[]matchExpressionsfalse
NameDescriptionTypeRequiredDefault
keystringtrue
operator“In” or “NotIn” or “Exists” or “DoesNotExist”falseIn
values[]stringfalse
NameDescriptionTypeRequiredDefault
matchLabelsmap[string]stringfalse
matchExpressions[]matchExpressionsfalse
NameDescriptionTypeRequiredDefault
keystringtrue
operator“In” or “NotIn” or “Exists” or “DoesNotExist”falseIn
values[]stringfalse
NameDescriptionTypeRequiredDefault
requiredSpecify the required during scheduling ignored during execution.requiredfalse
preferredSpecify the preferred during scheduling ignored during execution.[]preferredfalse
NameDescriptionTypeRequiredDefault
nodeSelectorTermsSpecify a list of node selector.[]nodeSelectorTermstrue
NameDescriptionTypeRequiredDefault
matchExpressions[]matchExpressionsfalse
matchFields[]matchFieldsfalse
NameDescriptionTypeRequiredDefault
keystringtrue
operator“In” or “NotIn” or “Exists” or “DoesNotExist” or “Gt” or “Lt”falseIn
values[]stringfalse
NameDescriptionTypeRequiredDefault
keystringtrue
operator“In” or “NotIn” or “Exists” or “DoesNotExist” or “Gt” or “Lt”falseIn
values[]stringfalse
NameDescriptionTypeRequiredDefault
weightSpecify weight associated with matching the corresponding nodeSelector.inttrue
preferenceSpecify a node selector.preferencetrue
NameDescriptionTypeRequiredDefault
matchExpressions[]matchExpressionsfalse
matchFields[]matchFieldsfalse
NameDescriptionTypeRequiredDefault
keystringtrue
operator“In” or “NotIn” or “Exists” or “DoesNotExist” or “Gt” or “Lt”falseIn
values[]stringfalse
NameDescriptionTypeRequiredDefault
keystringtrue
operator“In” or “NotIn” or “Exists” or “DoesNotExist” or “Gt” or “Lt”falseIn
values[]stringfalse
NameDescriptionTypeRequiredDefault
keystringfalse
operator“Equal” or “Exists”falseEqual
valuestringfalse
effect“NoSchedule” or “PreferNoSchedule” or “NoExecute”false
tolerationSecondsSpecify the period of time the toleration.intfalse

Add annotations on your workload. if it generates pod, add same annotations for generated pods.

All Component Types

  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: myapp
  5. spec:
  6. components:
  7. - name: express-server
  8. type: webservice
  9. properties:
  10. image: crccheck/hello-world
  11. port: 8000
  12. traits:
  13. - type: labels
  14. properties:
  15. "release": "stable"
  16. - type: annotations
  17. properties:
  18. "description": "web application"
NameDescriptionTypeRequiredDefault
-map[string]:(null|string)true

Add command on K8s pod for your workload which follows the pod spec in path ‘spec.template’.

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  • daemonsets.apps
  • jobs.batch
  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: busybox
  5. spec:
  6. components:
  7. - name: busybox
  8. type: webservice
  9. properties:
  10. image: busybox
  11. cmd: ["sleep", "86400"]
  12. traits:
  13. - type: sidecar
  14. properties:
  15. name: sidecar-nginx
  16. image: nginx
  17. - type: command
  18. properties:
  19. # you can use command to control multiple containers by filling `containers`
  20. # NOTE: in containers, you must set the container name for each container
  21. containers:
  22. - containerName: busybox
  23. command: ["sleep", "8640000"]
  24. - containerName: sidecar-nginx
  25. args: ["-q"]
NameDescriptionTypeRequiredDefault
PatchParams or type-option-2false
NameDescriptionTypeRequiredDefault
containerNameSpecify the name of the target container, if not set, use the component name.stringfalseempty
commandSpecify the command to use in the target container, if not set, it will not be changed.nulltrue
argsSpecify the args to use in the target container, if set, it will override existing args.nulltrue
addArgsSpecify the args to add in the target container, existing args will be kept, cannot be used with args.nulltrue
delArgsSpecify the existing args to delete in the target container, cannot be used with args.nulltrue
NameDescriptionTypeRequiredDefault
containersSpecify the commands for multiple containers.[]containerstrue
NameDescriptionTypeRequiredDefault
containerNameSpecify the name of the target container, if not set, use the component name.stringfalseempty
commandSpecify the command to use in the target container, if not set, it will not be changed.nulltrue
argsSpecify the args to use in the target container, if set, it will override existing args.nulltrue
addArgsSpecify the args to add in the target container, existing args will be kept, cannot be used with args.nulltrue
delArgsSpecify the existing args to delete in the target container, cannot be used with args.nulltrue

Set the image of the container.

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  • daemonsets.apps
  • jobs.batch
  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: busybox
  5. spec:
  6. components:
  7. - name: busybox
  8. type: webservice
  9. properties:
  10. image: busybox
  11. cmd: ["sleep", "86400"]
  12. traits:
  13. - type: sidecar
  14. properties:
  15. name: sidecar-nginx
  16. image: nginx
  17. - type: container-image
  18. properties:
  19. # you can use container-image to control multiple containers by filling `containers`
  20. # NOTE: in containers, you must set the container name for each container
  21. containers:
  22. - containerName: busybox
  23. image: busybox-1.34.0
  24. imagePullPolicy: IfNotPresent
  25. - containerName: sidecar-nginx
  26. image: nginx-1.20
NameDescriptionTypeRequiredDefault
PatchParams or type-option-2false
NameDescriptionTypeRequiredDefault
containerNameSpecify the name of the target container, if not set, use the component name.stringfalseempty
imageSpecify the image of the container.stringtrue
imagePullPolicySpecify the image pull policy of the container.“” or “IfNotPresent” or “Always” or “Never”falseempty
NameDescriptionTypeRequiredDefault
containersSpecify the container image for multiple containers.[]containerstrue
NameDescriptionTypeRequiredDefault
containerNameSpecify the name of the target container, if not set, use the component name.stringfalseempty
imageSpecify the image of the container.stringtrue
imagePullPolicySpecify the image pull policy of the container.“” or “IfNotPresent” or “Always” or “Never”falseempty

Automatically scale the component based on CPU usage.

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: website
  5. spec:
  6. components:
  7. - name: frontend
  8. type: webservice
  9. properties:
  10. image: nginx
  11. traits:
  12. - type: cpuscaler
  13. properties:
  14. min: 1
  15. max: 10
  16. cpuUtil: 60
NameDescriptionTypeRequiredDefault
minSpecify the minimal number of replicas to which the autoscaler can scale down.intfalse1
maxSpecify the maximum number of of replicas to which the autoscaler can scale up.intfalse10
cpuUtilSpecify the average cpu utilization, for example, 50 means the CPU usage is 50%.intfalse50
targetAPIVersionSpecify the apiVersion of scale target.stringfalseapps/v1
targetKindSpecify the kind of scale target.stringfalseDeployment

Add env on K8s pod for your workload which follows the pod spec in path ‘spec.template’.

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  • daemonsets.apps
  • jobs.batch
  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: busybox
  5. spec:
  6. components:
  7. - name: busybox
  8. type: webservice
  9. properties:
  10. image: busybox
  11. cmd: ["sleep", "86400"]
  12. traits:
  13. - type: sidecar
  14. properties:
  15. name: sidecar-nginx
  16. image: nginx
  17. - type: env
  18. properties:
  19. # you can use env to control multiple containers by filling `containers`
  20. # NOTE: in containers, you must set the container name for each container
  21. containers:
  22. - containerName: busybox
  23. env:
  24. key_for_busybox_first: value_first
  25. key_for_busybox_second: value_second
  26. - containerName: sidecar-nginx
  27. env:
  28. key_for_nginx_first: value_first
  29. key_for_nginx_second: value_second
  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: busybox
  5. spec:
  6. components:
  7. - name: busybox
  8. type: webservice
  9. properties:
  10. image: busybox
  11. cmd: ["sleep", "86400"]
  12. traits:
  13. - type: sidecar
  14. properties:
  15. name: sidecar-nginx
  16. image: nginx
  17. - type: env
  18. properties:
  19. # you can use env to control one container, if containerName not specified, it will patch on the first index container
  20. containerName: busybox
  21. env:
  22. key_for_busybox_first: value_first
  23. key_for_busybox_second: value_second
NameDescriptionTypeRequiredDefault
PatchParams or type-option-2false
NameDescriptionTypeRequiredDefault
containerNameSpecify the name of the target container, if not set, use the component name.stringfalseempty
replaceSpecify if replacing the whole environment settings for the container.boolfalsefalse
envSpecify the environment variables to merge, if key already existing, override its value.map[string]stringtrue
unsetSpecify which existing environment variables to unset.[]stringtrue
NameDescriptionTypeRequiredDefault
containersSpecify the environment variables for multiple containers.[]containerstrue
NameDescriptionTypeRequiredDefault
containerNameSpecify the name of the target container, if not set, use the component name.stringfalseempty
replaceSpecify if replacing the whole environment settings for the container.boolfalsefalse
envSpecify the environment variables to merge, if key already existing, override its value.map[string]stringtrue
unsetSpecify which existing environment variables to unset.[]stringtrue

Expose port to enable web traffic for your component.

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: test-app
  5. spec:
  6. components:
  7. - name: hello-world
  8. type: webservice
  9. properties:
  10. image: crccheck/hello-world
  11. traits:
  12. - type: expose
  13. properties:
  14. port: [8000]
NameDescriptionTypeRequiredDefault
portSpecify the exposion ports.[]inttrue
annotationsSpecify the annotaions of the exposed service.map[string]stringtrue
typeSpecify what kind of Service you want. options: “ClusterIP”,”NodePort”,”LoadBalancer”,”ExternalName”.“ClusterIP” or “NodePort” or “LoadBalancer” or “ExternalName”falseClusterIP

Enable public web traffic for the component, the ingress API matches K8s v1.20+.

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  1. # vela-app.yaml
  2. apiVersion: core.oam.dev/v1beta1
  3. kind: Application
  4. metadata:
  5. name: first-vela-app
  6. spec:
  7. components:
  8. - name: express-server
  9. type: webservice
  10. properties:
  11. image: oamdev/hello-world
  12. port: 8000
  13. traits:
  14. - type: gateway
  15. properties:
  16. domain: testsvc.example.com
  17. http:
  18. "/": 8000
NameDescriptionTypeRequiredDefault
domainSpecify the domain you want to expose.stringfalse
httpSpecify the mapping relationship between the http path and the workload port.map[string]inttrue
classSpecify the class of ingress to use.stringfalsenginx
classInSpecSet ingress class in ‘.spec.ingressClassName’ instead of ‘kubernetes.io/ingress.class’ annotation.boolfalsefalse
secretNameSpecify the secret name you want to quote to use tls.stringfalse
gatewayHostSpecify the host of the ingress gateway, which is used to generate the endpoints when the host is empty.stringfalse

Add host aliases on K8s pod for your workload which follows the pod spec in path ‘spec.template’.

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  • daemonsets.apps
  • jobs.batch
  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: application-with-hostalias
  5. spec:
  6. components:
  7. - name: busybox-runner
  8. type: worker
  9. properties:
  10. image: busybox
  11. cmd:
  12. - sleep
  13. - '1000'
  14. traits:
  15. - type: hostalias
  16. properties:
  17. hostAliases:
  18. - ip: 127.0.0.1
  19. hostnames:
  20. - localname
  21. - locals
NameDescriptionTypeRequiredDefault
hostAliasesSpecify the hostAliases to add.[]hostAliasestrue
NameDescriptionTypeRequiredDefault
ipstringtrue
hostnames[]stringtrue

Configure k8s HPA for Deployment or Statefulsets.

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: helloworld
  5. spec:
  6. components:
  7. - name: helloworld
  8. type: webservice
  9. properties:
  10. cpu: "0.5"
  11. exposeType: ClusterIP
  12. image: oamdev/hello-world
  13. memory: 1024Mi
  14. ports:
  15. - expose: true
  16. port: 80
  17. protocol: TCP
  18. traits:
  19. - type: scaler
  20. properties:
  21. replicas: 1
  22. - type: hpa
  23. properties:
  24. targetAPIVersion: apps/v1
  25. targetKind: Deployment
  26. max: 10
  27. min: 1
  28. cpu:
  29. type: Utilization
  30. value: 80
  31. mem:
  32. type: AverageValue
  33. value: 90
  34. podCustomMetrics:
  35. # here are custom metric names and values. Please replace them to be your metrics
  36. - name: pod_net_received_rate
  37. value: "77"
  38. - name: pod_net_transmitted_rate
  39. value: "88"
  40. - name: pod_net_received_packets_rate
  41. value: "95"
  42. - name: pod_net_transmitted_packets_rate
  43. value: "99"
  44. policies:
  45. - name: apply-once
  46. type: apply-once
  47. properties:
  48. enable: true
  49. rules:
  50. - strategy:
  51. path: ["spec.replicas"]
  52. selector:
  53. resourceTypes: ["Deployment","StatefulSet"]
NameDescriptionTypeRequiredDefault
minSpecify the minimal number of replicas to which the autoscaler can scale down.intfalse1
maxSpecify the maximum number of of replicas to which the autoscaler can scale up.intfalse10
targetAPIVersionSpecify the apiVersion of scale target.stringfalseapps/v1
targetKindSpecify the kind of scale target.stringfalseDeployment
cpucputrue
memmemfalse
podCustomMetricsSpecify custom metrics of pod type.[]podCustomMetricsfalse
NameDescriptionTypeRequiredDefault
typeSpecify resource metrics in terms of percentage(“Utilization”) or direct value(“AverageValue”).“Utilization” or “AverageValue”falseUtilization
valueSpecify the value of CPU utilization or averageValue.intfalse50
NameDescriptionTypeRequiredDefault
typeSpecify resource metrics in terms of percentage(“Utilization”) or direct value(“AverageValue”).“Utilization” or “AverageValue”falseUtilization
valueSpecify the value of MEM utilization or averageValue.intfalse50
NameDescriptionTypeRequiredDefault
nameSpecify name of custom metrics.stringtrue
valueSpecify target value of custom metrics.stringtrue

add an init container and use shared volume with pod.

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  • daemonsets.apps
  • jobs.batch
  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: busybox
  5. spec:
  6. components:
  7. - name: busybox
  8. type: webservice
  9. properties:
  10. image: busybox
  11. cmd: ["sleep", "86400"]
  12. traits:
  13. - type: init-container
  14. properties:
  15. name: init-busybox
  16. image: busybox
  17. cmd: ["echo", "hello"]
  18. initMountPath: /data
  19. appMountPath: /data-initialized
NameDescriptionTypeRequiredDefault
nameSpecify the name of init container.stringtrue
imageSpecify the image of init container.stringtrue
imagePullPolicySpecify image pull policy for your service.“IfNotPresent” or “Always” or “Never”falseIfNotPresent
cmdSpecify the commands run in the init container.[]stringfalse
argsSpecify the args run in the init container.[]stringfalse
envSpecify the env run in the init container.[]envfalse
mountNameSpecify the mount name of shared volume.stringfalseworkdir
appMountPathSpecify the mount path of app container.stringtrue
initMountPathSpecify the mount path of init container.stringtrue
extraVolumeMountsSpecify the extra volume mounts for the init container.[]extraVolumeMountstrue
NameDescriptionTypeRequiredDefault
nameEnvironment variable name.stringtrue
valueThe value of the environment variable.stringfalse
valueFromSpecifies a source the value of this var should come from.valueFromfalse
NameDescriptionTypeRequiredDefault
secretKeyRefSelects a key of a secret in the pod’s namespace.secretKeyReffalse
configMapKeyRefSelects a key of a config map in the pod’s namespace.configMapKeyReffalse
NameDescriptionTypeRequiredDefault
nameThe name of the secret in the pod’s namespace to select from.stringtrue
keyThe key of the secret to select from. Must be a valid secret key.stringtrue
NameDescriptionTypeRequiredDefault
nameThe name of the config map in the pod’s namespace to select from.stringtrue
keyThe key of the config map to select from. Must be a valid secret key.stringtrue
NameDescriptionTypeRequiredDefault
nameThe name of the volume to be mounted.stringtrue
mountPathThe mountPath for mount in the init container.stringtrue

Patch the output following Json Merge Patch strategy, following RFC 7396.

For now this trait is hidden from the VelaUX. Available when using CLI

All Component Types

  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: busybox
  5. spec:
  6. components:
  7. - name: busybox
  8. type: webservice
  9. properties:
  10. image: busybox
  11. cmd: ["sleep", "86400"]
  12. labels:
  13. pod-label-key: pod-label-value
  14. to-delete-label-key: to-delete-label-value
  15. traits:
  16. # the json merge patch can be used to add, replace and delete fields
  17. # the following part will
  18. # 1. add `deploy-label-key` to deployment labels
  19. # 2. set deployment replicas to 3
  20. # 3. set `pod-label-key` to `pod-label-modified-value` in pod labels
  21. # 4. delete `to-delete-label-key` in pod labels
  22. # 5. reset `containers` for pod
  23. - type: json-merge-patch
  24. properties:
  25. metadata:
  26. labels:
  27. deploy-label-key: deploy-label-added-value
  28. spec:
  29. replicas: 3
  30. template:
  31. metadata:
  32. labels:
  33. pod-label-key: pod-label-modified-value
  34. to-delete-label-key: null
  35. spec:
  36. containers:
  37. - name: busybox-new
  38. image: busybox:1.34
  39. command: ["sleep", "864000"]
NameDescriptionTypeRequiredDefault
-{}true

Patch the output following Json Patch strategy, following RFC 6902.

For now this trait is hidden from the VelaUX. Available when using CLI

All Component Types

  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: busybox
  5. spec:
  6. components:
  7. - name: busybox
  8. type: webservice
  9. properties:
  10. image: busybox
  11. cmd: ["sleep", "86400"]
  12. labels:
  13. pod-label-key: pod-label-value
  14. to-delete-label-key: to-delete-label-value
  15. traits:
  16. # the json patch can be used to add, replace and delete fields
  17. # the following part will
  18. # 1. add `deploy-label-key` to deployment labels
  19. # 2. set deployment replicas to 3
  20. # 3. set `pod-label-key` to `pod-label-modified-value` in pod labels
  21. # 4. delete `to-delete-label-key` in pod labels
  22. # 5. add sidecar container for pod
  23. - type: json-patch
  24. properties:
  25. operations:
  26. - op: add
  27. path: "/spec/replicas"
  28. value: 3
  29. - op: replace
  30. path: "/spec/template/metadata/labels/pod-label-key"
  31. value: pod-label-modified-value
  32. - op: remove
  33. path: "/spec/template/metadata/labels/to-delete-label-key"
  34. - op: add
  35. path: "/spec/template/spec/containers/1"
  36. value:
  37. name: busybox-sidecar
  38. image: busybox:1.34
  39. command: ["sleep", "864000"]
NameDescriptionTypeRequiredDefault
operations[]operationstrue
NameDescriptionTypeRequiredDefault
-{}true

Set k8s update strategy for Deployment/DaemonSet/StatefulSet.

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  • daemonsets.apps
  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: application-with-update-strategy
  5. spec:
  6. components:
  7. - name: helloworld
  8. type: webservice
  9. properties:
  10. cpu: "0.5"
  11. exposeType: ClusterIP
  12. image: oamdev/hello-world:latest
  13. memory: 1024Mi
  14. ports:
  15. - expose: true
  16. port: 80
  17. protocol: TCP
  18. traits:
  19. - type: scaler
  20. properties:
  21. replicas: 5
  22. - type: k8s-update-strategy
  23. properties:
  24. targetAPIVersion: apps/v1
  25. targetKind: Deployment
  26. strategy:
  27. type: RollingUpdate
  28. rollingStrategy:
  29. maxSurge: 20%
  30. maxUnavailable: 30%
  31. ---
  32. apiVersion: core.oam.dev/v1beta1
  33. kind: Application
  34. metadata:
  35. name: application-node-exporter
  36. spec:
  37. components:
  38. - name: node-exporter
  39. type: daemon
  40. properties:
  41. image: prom/node-exporter
  42. imagePullPolicy: IfNotPresent
  43. volumeMounts:
  44. hostPath:
  45. - mountPath: /host/sys
  46. mountPropagation: HostToContainer
  47. name: sys
  48. path: /sys
  49. readOnly: true
  50. - mountPath: /host/root
  51. mountPropagation: HostToContainer
  52. name: root
  53. path: /
  54. readOnly: true
  55. traits:
  56. - properties:
  57. args:
  58. - --path.sysfs=/host/sys
  59. - --path.rootfs=/host/root
  60. - --no-collector.wifi
  61. - --no-collector.hwmon
  62. - --collector.filesystem.ignored-mount-points=^/(dev|proc|sys|var/lib/docker/.+|var/lib/kubelet/pods/.+)($|/)
  63. - --collector.netclass.ignored-devices=^(veth.*)$
  64. type: command
  65. - properties:
  66. annotations:
  67. prometheus.io/path: /metrics
  68. prometheus.io/port: "8080"
  69. prometheus.io/scrape: "true"
  70. port:
  71. - 9100
  72. type: expose
  73. - properties:
  74. cpu: 0.1
  75. memory: 250Mi
  76. type: resource
  77. - type: k8s-update-strategy
  78. properties:
  79. targetAPIVersion: apps/v1
  80. targetKind: DaemonSet
  81. strategy:
  82. type: RollingUpdate
  83. rollingStrategy:
  84. maxSurge: 20%
  85. maxUnavailable: 30%
NameDescriptionTypeRequiredDefault
targetAPIVersionSpecify the apiVersion of target.stringfalseapps/v1
targetKindSpecify the kind of target.“Deployment” or “StatefulSet” or “DaemonSet”falseDeployment
strategySpecify the strategy of update.strategytrue
NameDescriptionTypeRequiredDefault
typeSpecify the strategy type.“RollingUpdate” or “Recreate” or “OnDelete”falseRollingUpdate
rollingStrategySpecify the parameters of rollong update strategy.rollingStrategyfalse
NameDescriptionTypeRequiredDefault
maxSurgestringfalse25%
maxUnavailablestringfalse25%
partitionintfalse0

Add labels on your workload. if it generates pod, add same label for generated pods.

All Component Types

  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: myapp
  5. spec:
  6. components:
  7. - name: express-server
  8. type: webservice
  9. properties:
  10. image: crccheck/hello-world
  11. port: 8000
  12. traits:
  13. - type: labels
  14. properties:
  15. "release": "stable"
  16. - type: annotations
  17. properties:
  18. "description": "web application"
NameDescriptionTypeRequiredDefault
-map[string]:(null|string)true

Add lifecycle hooks for every container of K8s pod for your workload which follows the pod spec in path ‘spec.template’.

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  • daemonsets.apps
  • jobs.batch
  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: application-with-lifecycle
  5. spec:
  6. components:
  7. - name: busybox-runner
  8. type: worker
  9. properties:
  10. image: busybox
  11. cmd:
  12. - sleep
  13. - '1000'
  14. traits:
  15. - type: lifecycle
  16. properties:
  17. postStart:
  18. exec:
  19. command:
  20. - echo
  21. - 'hello world'
  22. preStop:
  23. httpGet:
  24. host: "www.aliyun.com"
  25. scheme: "HTTPS"
  26. port: 443
NameDescriptionTypeRequiredDefault
postStartpostStartfalse
preStoppreStopfalse
NameDescriptionTypeRequiredDefault
execexecfalse
httpGethttpGetfalse
tcpSockettcpSocketfalse
NameDescriptionTypeRequiredDefault
command[]stringtrue
NameDescriptionTypeRequiredDefault
pathstringfalse
portinttrue
hoststringfalse
scheme“HTTP” or “HTTPS”falseHTTP
httpHeaders[]httpHeadersfalse
NameDescriptionTypeRequiredDefault
namestringtrue
valuestringtrue
NameDescriptionTypeRequiredDefault
portinttrue
hoststringfalse
NameDescriptionTypeRequiredDefault
execexecfalse
httpGethttpGetfalse
tcpSockettcpSocketfalse
NameDescriptionTypeRequiredDefault
command[]stringtrue
NameDescriptionTypeRequiredDefault
pathstringfalse
portinttrue
hoststringfalse
scheme“HTTP” or “HTTPS”falseHTTP
httpHeaders[]httpHeadersfalse
NameDescriptionTypeRequiredDefault
namestringtrue
valuestringtrue
NameDescriptionTypeRequiredDefault
portinttrue
hoststringfalse

nocalhost develop configuration.

For now this trait is hidden from the VelaUX. Available when using CLI

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  • daemonsets.apps
  • jobs.batch
  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: bookinfo
  5. spec:
  6. components:
  7. - name: productpage
  8. type: webservice
  9. properties:
  10. image: nocalhost-docker.pkg.coding.net/nocalhost/bookinfo/productpage:latest
  11. port: 9080
  12. traits:
  13. - type: nocalhost
  14. properties:
  15. port: 9080
  16. gitUrl: https://github.com/nocalhost/bookinfo-productpage.git
  17. image: nocalhost-docker.pkg.coding.net/nocalhost/dev-images/python:3.7.7-slim-productpage-with-pydevd
  18. shell: "bash"
  19. workDir: "/opt/work"
  20. resources:
  21. limits:
  22. memory: 1Gi
  23. cpu: "1"
  24. requests:
  25. memory: 512Mi
  26. cpu: "0.5"
  27. debug:
  28. remoteDebugPort: 9009
  29. hotReload: true
  30. sync:
  31. type: send
  32. filePattern:
  33. - ./
  34. ignoreFilePattern:
  35. - .git
  36. - .idea
  37. command:
  38. run:
  39. - sh
  40. - run.sh
  41. debug:
  42. - sh
  43. - debug.sh
  44. env:
  45. - name: "foo"
  46. value: "bar"
  47. portForward:
  48. - 39080:9080
NameDescriptionTypeRequiredDefault
portinttrue
serviceTypestringfalsedeployment
gitUrlstringfalse
imagestringtrue
shellstringfalsebash
workDirstringfalse/home/nocalhost-dev
storageClassstringfalse
commandcommandtrue
debugdebugfalse
hotReloadboolfalsetrue
syncsynctrue
env[]envfalse
portForward[]stringfalse
persistentVolumeDirs[]persistentVolumeDirsfalse
resourcesresourcestrue
NameDescriptionTypeRequiredDefault
run[]stringtrue
debug[]stringtrue
NameDescriptionTypeRequiredDefault
remoteDebugPortintfalse
NameDescriptionTypeRequiredDefault
typestringfalsesend
filePattern[]stringtrue
ignoreFilePattern[]stringtrue
NameDescriptionTypeRequiredDefault
namestringtrue
valuestringtrue
NameDescriptionTypeRequiredDefault
pathstringtrue
capacitystringtrue
NameDescriptionTypeRequiredDefault
limitslimitstrue
requestsrequeststrue
NameDescriptionTypeRequiredDefault
memorystringfalse2Gi
cpustringfalse2
NameDescriptionTypeRequiredDefault
memorystringfalse512Mi
cpustringfalse0.5

Add resource requests and limits on K8s pod for your workload which follows the pod spec in path ‘spec.template.’.

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  • daemonsets.apps
  • jobs.batch
  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: resource-app
  5. spec:
  6. components:
  7. - name: express-server
  8. type: webservice
  9. properties:
  10. image: crccheck/hello-world
  11. ports:
  12. - port: 8000
  13. traits:
  14. - type: resource
  15. properties:
  16. cpu: 2
  17. memory: 2Gi
  18. requests:
  19. cpu: 2
  20. memory: 2Gi
  21. limits:
  22. cpu: 4
  23. memory: 4Gi
NameDescriptionTypeRequiredDefault
cpuSpecify the amount of cpu for requests and limits.numberfalse1
memorySpecify the amount of memory for requests and limits.stringfalse2048Mi
requestsSpecify the resources in requests.requestsfalse
limitsSpecify the resources in limits.limitsfalse
NameDescriptionTypeRequiredDefault
cpuSpecify the amount of cpu for requests.numberfalse1
memorySpecify the amount of memory for requests.stringfalse2048Mi
NameDescriptionTypeRequiredDefault
cpuSpecify the amount of cpu for limits.numberfalse1
memorySpecify the amount of memory for limits.stringfalse2048Mi

Manually scale K8s pod for your workload which follows the pod spec in path ‘spec.template’.

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: website
  5. spec:
  6. components:
  7. - name: frontend
  8. type: webservice
  9. properties:
  10. image: nginx
  11. traits:
  12. - type: scaler
  13. properties:
  14. replicas: 2
  15. - type: sidecar
  16. properties:
  17. name: "sidecar-test"
  18. image: "fluentd"
  19. - name: backend
  20. type: worker
  21. properties:
  22. image: busybox
  23. cmd:
  24. - sleep
  25. - '1000'
NameDescriptionTypeRequiredDefault
replicasSpecify the number of workload.intfalse1

Specify serviceAccount for your workload which follows the pod spec in path ‘spec.template’.

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  • daemonsets.apps
  • jobs.batch
  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: vela-doc
  5. namespace: vela-system
  6. spec:
  7. components:
  8. - name: frontend
  9. type: webservice
  10. properties:
  11. image: oamdev/vela-cli:v1.5.0-beta.1
  12. cmd: ["/bin/vela","show"]
  13. ports:
  14. - port: 18081
  15. expose: true
  16. traits:
  17. - type: service-account
  18. properties:
  19. name: kubevela-vela-core
NameDescriptionTypeRequiredDefault
nameSpecify the name of ServiceAccount.stringtrue
createSpecify whether to create new ServiceAccount or not.boolfalsefalse
privilegesSpecify the privileges of the ServiceAccount, if not empty, RoleBindings(ClusterRoleBindings) will be created.[]privilegesfalse
NameDescriptionTypeRequiredDefault
verbsSpecify the verbs to be allowed for the resource.[]stringtrue
apiGroupsSpecify the apiGroups of the resource.[]stringfalse
resourcesSpecify the resources to be allowed.[]stringfalse
resourceNamesSpecify the resourceNames to be allowed.[]stringfalse
nonResourceURLsSpecify the resource url to be allowed.[]stringfalse
scopeSpecify the scope of the privileges, default to be namespace scope.“namespace” or “cluster”falsenamespace

Binding secrets of cloud resources to component env. This definition is DEPRECATED, please use ‘storage’ instead.

For now this trait is hidden from the VelaUX. Available when using CLI

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  • daemonsets.apps
  • jobs.batch
  1. Prepare a Kubernetes Secret

The secret can be manually created, or generated by other component or external system.

For example, we have a secret db-conn-example whose data is as below:

  1. endpoint: https://xxx.com
  2. password: 123
  3. username: myname
  1. Bind the Secret into your component by service-binding trait

For example, we have a webservice component who needs to consume a database. The database connection string should be set to Pod environments: endpoint, username and DB_PASSWORD.

We can set the properties for envMappings as below. For each environment, secret represents the secret name, and key represents the key of the secret.

Here is the complete properties for the trait.

  1. traits:
  2. - type: service-binding
  3. properties:
  4. envMappings:
  5. DB_PASSWORD:
  6. secret: db-conn-example
  7. key: password
  8. endpoint:
  9. secret: db-conn-example
  10. key: endpoint
  11. username:
  12. secret: db-conn-example
  13. key: username

In particular, if the environment name, like endpoint, is same to the key of the secret, we can omit the key. So we can simplify the properties as below.

  1. traits:
  2. - type: service-binding
  3. properties:
  4. envMappings:
  5. DB_PASSWORD:
  6. secret: db-conn-example
  7. key: password
  8. endpoint:
  9. secret: db-conn-example
  10. username:
  11. secret: db-conn-example

We can finally prepare an Application for the business component binding-test-comp to consume the secret, which is a representative of a database cloud resource.

  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: webapp
  5. spec:
  6. components:
  7. - name: binding-test-comp
  8. type: webservice
  9. properties:
  10. image: zzxwill/flask-web-application:v0.3.1-crossplane
  11. ports: 80
  12. traits:
  13. - type: service-binding
  14. properties:
  15. envMappings:
  16. # environments refer to db-conn secret
  17. DB_PASSWORD:
  18. secret: db-conn-example
  19. key: password
  20. endpoint:
  21. secret: db-conn-example
  22. username:
  23. secret: db-conn-example

Deploy this YAML and the Secret db-conn-example will be binding into environment of workload.

NameDescriptionTypeRequiredDefault
envMappingsThe mapping of environment variables to secret.map[string]KeySecret(#keysecret-service-binding)true
NameDescriptionTypeRequiredDefault
keystringfalse
secretstringtrue

Inject a sidecar container to K8s pod for your workload which follows the pod spec in path ‘spec.template’.

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  • daemonsets.apps
  • jobs.batch
  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: vela-app-with-sidecar
  5. spec:
  6. components:
  7. - name: log-gen-worker
  8. type: worker
  9. properties:
  10. image: busybox
  11. cmd:
  12. - /bin/sh
  13. - -c
  14. - >
  15. i=0;
  16. while true;
  17. do
  18. echo "$i: $(date)" >> /var/log/date.log;
  19. i=$((i+1));
  20. sleep 1;
  21. done
  22. volumes:
  23. - name: varlog
  24. mountPath: /var/log
  25. type: emptyDir
  26. traits:
  27. - type: sidecar
  28. properties:
  29. name: count-log
  30. image: busybox
  31. cmd: [ /bin/sh, -c, 'tail -n+1 -f /var/log/date.log']
  32. volumes:
  33. - name: varlog
  34. path: /var/log
NameDescriptionTypeRequiredDefault
nameSpecify the name of sidecar container.stringtrue
imageSpecify the image of sidecar container.stringtrue
cmdSpecify the commands run in the sidecar.[]stringfalse
argsSpecify the args in the sidecar.[]stringfalse
envSpecify the env in the sidecar.[]envfalse
volumesSpecify the shared volume path.[]volumesfalse
livenessProbeInstructions for assessing whether the container is alive.livenessProbefalse
readinessProbeInstructions for assessing whether the container is in a suitable state to serve traffic.readinessProbefalse
NameDescriptionTypeRequiredDefault
nameEnvironment variable name.stringtrue
valueThe value of the environment variable.stringfalse
valueFromSpecifies a source the value of this var should come from.valueFromfalse
NameDescriptionTypeRequiredDefault
secretKeyRefSelects a key of a secret in the pod’s namespace.secretKeyReffalse
configMapKeyRefSelects a key of a config map in the pod’s namespace.configMapKeyReffalse
fieldRefSpecify the field reference for env.fieldReffalse
NameDescriptionTypeRequiredDefault
nameThe name of the secret in the pod’s namespace to select from.stringtrue
keyThe key of the secret to select from. Must be a valid secret key.stringtrue
NameDescriptionTypeRequiredDefault
nameThe name of the config map in the pod’s namespace to select from.stringtrue
keyThe key of the config map to select from. Must be a valid secret key.stringtrue
NameDescriptionTypeRequiredDefault
fieldPathSpecify the field path for env.stringtrue
NameDescriptionTypeRequiredDefault
namestringtrue
pathstringtrue
NameDescriptionTypeRequiredDefault
execInstructions for assessing container health by executing a command. Either this attribute or the httpGet attribute or the tcpSocket attribute MUST be specified. This attribute is mutually exclusive with both the httpGet attribute and the tcpSocket attribute.execfalse
httpGetInstructions for assessing container health by executing an HTTP GET request. Either this attribute or the exec attribute or the tcpSocket attribute MUST be specified. This attribute is mutually exclusive with both the exec attribute and the tcpSocket attribute.httpGetfalse
tcpSocketInstructions for assessing container health by probing a TCP socket. Either this attribute or the exec attribute or the httpGet attribute MUST be specified. This attribute is mutually exclusive with both the exec attribute and the httpGet attribute.tcpSocketfalse
initialDelaySecondsNumber of seconds after the container is started before the first probe is initiated.intfalse0
periodSecondsHow often, in seconds, to execute the probe.intfalse10
timeoutSecondsNumber of seconds after which the probe times out.intfalse1
successThresholdMinimum consecutive successes for the probe to be considered successful after having failed.intfalse1
failureThresholdNumber of consecutive failures required to determine the container is not alive (liveness probe) or not ready (readiness probe).intfalse3
NameDescriptionTypeRequiredDefault
commandA command to be executed inside the container to assess its health. Each space delimited token of the command is a separate array element. Commands exiting 0 are considered to be successful probes, whilst all other exit codes are considered failures.[]stringtrue
NameDescriptionTypeRequiredDefault
pathThe endpoint, relative to the port, to which the HTTP GET request should be directed.stringtrue
portThe TCP socket within the container to which the HTTP GET request should be directed.inttrue
httpHeaders[]httpHeadersfalse
NameDescriptionTypeRequiredDefault
namestringtrue
valuestringtrue
NameDescriptionTypeRequiredDefault
portThe TCP socket within the container that should be probed to assess container health.inttrue
NameDescriptionTypeRequiredDefault
execInstructions for assessing container health by executing a command. Either this attribute or the httpGet attribute or the tcpSocket attribute MUST be specified. This attribute is mutually exclusive with both the httpGet attribute and the tcpSocket attribute.execfalse
httpGetInstructions for assessing container health by executing an HTTP GET request. Either this attribute or the exec attribute or the tcpSocket attribute MUST be specified. This attribute is mutually exclusive with both the exec attribute and the tcpSocket attribute.httpGetfalse
tcpSocketInstructions for assessing container health by probing a TCP socket. Either this attribute or the exec attribute or the httpGet attribute MUST be specified. This attribute is mutually exclusive with both the exec attribute and the httpGet attribute.tcpSocketfalse
initialDelaySecondsNumber of seconds after the container is started before the first probe is initiated.intfalse0
periodSecondsHow often, in seconds, to execute the probe.intfalse10
timeoutSecondsNumber of seconds after which the probe times out.intfalse1
successThresholdMinimum consecutive successes for the probe to be considered successful after having failed.intfalse1
failureThresholdNumber of consecutive failures required to determine the container is not alive (liveness probe) or not ready (readiness probe).intfalse3
NameDescriptionTypeRequiredDefault
commandA command to be executed inside the container to assess its health. Each space delimited token of the command is a separate array element. Commands exiting 0 are considered to be successful probes, whilst all other exit codes are considered failures.[]stringtrue
NameDescriptionTypeRequiredDefault
pathThe endpoint, relative to the port, to which the HTTP GET request should be directed.stringtrue
portThe TCP socket within the container to which the HTTP GET request should be directed.inttrue
httpHeaders[]httpHeadersfalse
NameDescriptionTypeRequiredDefault
namestringtrue
valuestringtrue
NameDescriptionTypeRequiredDefault
portThe TCP socket within the container that should be probed to assess container health.inttrue

Add startup probe hooks for the specified container of K8s pod for your workload which follows the pod spec in path ‘spec.template’.

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  • daemonsets.apps
  • jobs.batch
  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: application-with-startup-probe
  5. spec:
  6. components:
  7. - name: busybox-runner
  8. type: worker
  9. properties:
  10. image: busybox
  11. cmd:
  12. - sleep
  13. - '1000'
  14. traits:
  15. - type: sidecar
  16. properties:
  17. name: nginx
  18. image: nginx
  19. # This startup-probe is blocking the startup of the main container
  20. # as the URL has a typo '.comm' vs '.com'
  21. - type: startup-probe
  22. properties:
  23. containerName: "busybox-runner"
  24. httpGet:
  25. host: "www.guidewire.comm"
  26. scheme: "HTTPS"
  27. port: 443
  28. periodSeconds: 4
  29. failureThreshold: 4
  30. # This startup probe targets the nginx sidecar
  31. - type: startup-probe
  32. properties:
  33. containerName: nginx
  34. httpGet:
  35. host: "www.guidewire.com"
  36. scheme: "HTTPS"
  37. port: 443
  38. periodSeconds: 5
  39. failureThreshold: 5
NameDescriptionTypeRequiredDefault
StartupProbeParams or type-option-2false
NameDescriptionTypeRequiredDefault
containerNameSpecify the name of the target container, if not set, use the component name.stringfalseempty
initialDelaySecondsNumber of seconds after the container has started before liveness probes are initiated. Minimum value is 0.intfalse0
periodSecondsHow often, in seconds, to execute the probe. Minimum value is 1.intfalse10
timeoutSecondsNumber of seconds after which the probe times out. Minimum value is 1.intfalse1
successThresholdMinimum consecutive successes for the probe to be considered successful after having failed. Minimum value is 1.intfalse1
failureThresholdMinimum consecutive failures for the probe to be considered failed after having succeeded. Minimum value is 1.intfalse3
terminationGracePeriodSecondsOptional duration in seconds the pod needs to terminate gracefully upon probe failure. Set this value longer than the expected cleanup time for your process.intfalse
execInstructions for assessing container startup status by executing a command. Either this attribute or the httpGet attribute or the grpc attribute or the tcpSocket attribute MUST be specified. This attribute is mutually exclusive with the httpGet attribute and the tcpSocket attribute and the gRPC attribute.execfalse
httpGetInstructions for assessing container startup status by executing an HTTP GET request. Either this attribute or the exec attribute or the grpc attribute or the tcpSocket attribute MUST be specified. This attribute is mutually exclusive with the exec attribute and the tcpSocket attribute and the gRPC attribute.httpGetfalse
grpcInstructions for assessing container startup status by probing a gRPC service. Either this attribute or the exec attribute or the grpc attribute or the httpGet attribute MUST be specified. This attribute is mutually exclusive with the exec attribute and the httpGet attribute and the tcpSocket attribute.grpcfalse
tcpSocketInstructions for assessing container startup status by probing a TCP socket. Either this attribute or the exec attribute or the tcpSocket attribute or the httpGet attribute MUST be specified. This attribute is mutually exclusive with the exec attribute and the httpGet attribute and the gRPC attribute.tcpSocketfalse
NameDescriptionTypeRequiredDefault
commandA command to be executed inside the container to assess its health. Each space delimited token of the command is a separate array element. Commands exiting 0 are considered to be successful probes, whilst all other exit codes are considered failures.[]stringtrue
NameDescriptionTypeRequiredDefault
pathThe endpoint, relative to the port, to which the HTTP GET request should be directed.stringfalse
portThe port numer to access on the host or container.inttrue
hostThe hostname to connect to, defaults to the pod IP. You probably want to set “Host” in httpHeaders instead.stringfalse
schemeThe Scheme to use for connecting to the host.“HTTP” or “HTTPS”falseHTTP
httpHeadersCustom headers to set in the request. HTTP allows repeated headers.[]httpHeadersfalse
NameDescriptionTypeRequiredDefault
nameThe header field name.stringtrue
valueThe header field value.stringtrue
NameDescriptionTypeRequiredDefault
portThe port number of the gRPC service.inttrue
serviceThe name of the service to place in the gRPC HealthCheckRequest.stringfalse
NameDescriptionTypeRequiredDefault
portNumber or name of the port to access on the container.stringtrue
hostHost name to connect to, defaults to the pod IP.stringfalse
NameDescriptionTypeRequiredDefault
probesSpecify the startup probe for multiple containers.[]probestrue
NameDescriptionTypeRequiredDefault
containerNameSpecify the name of the target container, if not set, use the component name.stringfalseempty
initialDelaySecondsNumber of seconds after the container has started before liveness probes are initiated. Minimum value is 0.intfalse0
periodSecondsHow often, in seconds, to execute the probe. Minimum value is 1.intfalse10
timeoutSecondsNumber of seconds after which the probe times out. Minimum value is 1.intfalse1
successThresholdMinimum consecutive successes for the probe to be considered successful after having failed. Minimum value is 1.intfalse1
failureThresholdMinimum consecutive failures for the probe to be considered failed after having succeeded. Minimum value is 1.intfalse3
terminationGracePeriodSecondsOptional duration in seconds the pod needs to terminate gracefully upon probe failure. Set this value longer than the expected cleanup time for your process.intfalse
execInstructions for assessing container startup status by executing a command. Either this attribute or the httpGet attribute or the grpc attribute or the tcpSocket attribute MUST be specified. This attribute is mutually exclusive with the httpGet attribute and the tcpSocket attribute and the gRPC attribute.execfalse
httpGetInstructions for assessing container startup status by executing an HTTP GET request. Either this attribute or the exec attribute or the grpc attribute or the tcpSocket attribute MUST be specified. This attribute is mutually exclusive with the exec attribute and the tcpSocket attribute and the gRPC attribute.httpGetfalse
grpcInstructions for assessing container startup status by probing a gRPC service. Either this attribute or the exec attribute or the grpc attribute or the httpGet attribute MUST be specified. This attribute is mutually exclusive with the exec attribute and the httpGet attribute and the tcpSocket attribute.grpcfalse
tcpSocketInstructions for assessing container startup status by probing a TCP socket. Either this attribute or the exec attribute or the tcpSocket attribute or the httpGet attribute MUST be specified. This attribute is mutually exclusive with the exec attribute and the httpGet attribute and the gRPC attribute.tcpSocketfalse
NameDescriptionTypeRequiredDefault
commandA command to be executed inside the container to assess its health. Each space delimited token of the command is a separate array element. Commands exiting 0 are considered to be successful probes, whilst all other exit codes are considered failures.[]stringtrue
NameDescriptionTypeRequiredDefault
pathThe endpoint, relative to the port, to which the HTTP GET request should be directed.stringfalse
portThe port numer to access on the host or container.inttrue
hostThe hostname to connect to, defaults to the pod IP. You probably want to set “Host” in httpHeaders instead.stringfalse
schemeThe Scheme to use for connecting to the host.“HTTP” or “HTTPS”falseHTTP
httpHeadersCustom headers to set in the request. HTTP allows repeated headers.[]httpHeadersfalse
NameDescriptionTypeRequiredDefault
nameThe header field name.stringtrue
valueThe header field value.stringtrue
NameDescriptionTypeRequiredDefault
portThe port number of the gRPC service.inttrue
serviceThe name of the service to place in the gRPC HealthCheckRequest.stringfalse
NameDescriptionTypeRequiredDefault
portNumber or name of the port to access on the container.stringtrue
hostHost name to connect to, defaults to the pod IP.stringfalse

Add storages on K8s pod for your workload which follows the pod spec in path ‘spec.template’.

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  • daemonsets.apps
  • jobs.batch
  1. # sample.yaml
  2. apiVersion: core.oam.dev/v1beta1
  3. kind: Application
  4. metadata:
  5. name: storage-app
  6. spec:
  7. components:
  8. - name: express-server
  9. type: webservice
  10. properties:
  11. image: oamdev/hello-world
  12. ports:
  13. - port: 8000
  14. traits:
  15. - type: storage
  16. properties:
  17. # PVC type storage
  18. pvc:
  19. - name: test1
  20. mountPath: /test/mount/pvc
  21. # EmptyDir type storage
  22. emptyDir:
  23. - name: test1
  24. mountPath: /test/mount/emptydir
  25. # ConfigMap type storage
  26. configMap:
  27. - name: test1
  28. mountPath: /test/mount/cm
  29. # Mount ConfigMap to Env
  30. mountToEnv:
  31. envName: TEST_ENV
  32. configMapKey: key1
  33. data:
  34. key1: value1
  35. key2: value2
  36. # Secret type storage
  37. secret:
  38. - name: test1
  39. mountPath: /test/mount/secret
  40. # Mount Secret to Env
  41. mountToEnv:
  42. envName: TEST_SECRET
  43. secretKey: key1
  44. data:
  45. key1: dmFsdWUx
  46. key2: dmFsdWUy
NameDescriptionTypeRequiredDefault
pvcDeclare pvc type storage.[]pvcfalse
configMapDeclare config map type storage.[]configMapfalse
secretDeclare secret type storage.[]secretfalse
emptyDirDeclare empty dir type storage.[]emptyDirfalse
hostPathDeclare host path type storage.[]hostPathfalse
NameDescriptionTypeRequiredDefault
namestringtrue
mountOnlyboolfalsefalse
mountPathstringtrue
subPathstringfalse
volumeModestringfalseFilesystem
volumeNamestringfalse
accessModes[]stringtrue
storageClassNamestringfalse
resourcesresourcesfalse
dataSourceRefdataSourceReffalse
dataSourcedataSourcefalse
selectorselectorfalse
NameDescriptionTypeRequiredDefault
requestsrequeststrue
limitslimitsfalse
NameDescriptionTypeRequiredDefault
storagestringtrue
NameDescriptionTypeRequiredDefault
storagestringtrue
NameDescriptionTypeRequiredDefault
namestringtrue
kindstringtrue
apiGroupstringtrue
NameDescriptionTypeRequiredDefault
namestringtrue
kindstringtrue
apiGroupstringtrue
NameDescriptionTypeRequiredDefault
matchLabelsmap[string]stringfalse
matchExpressionsmatchExpressionsfalse
NameDescriptionTypeRequiredDefault
keystringtrue
values[]stringtrue
operatorstringtrue
NameDescriptionTypeRequiredDefault
namestringtrue
mountOnlyboolfalsefalse
mountToEnvmountToEnvfalse
mountToEnvs[]mountToEnvsfalse
mountPathstringfalse
subPathstringfalse
defaultModeintfalse420
readOnlyboolfalsefalse
datamap[string]_false
items[]itemsfalse
NameDescriptionTypeRequiredDefault
envNamestringtrue
configMapKeystringtrue
NameDescriptionTypeRequiredDefault
envNamestringtrue
configMapKeystringtrue
NameDescriptionTypeRequiredDefault
keystringtrue
pathstringtrue
modeintfalse511
NameDescriptionTypeRequiredDefault
namestringtrue
mountOnlyboolfalsefalse
mountToEnvmountToEnvfalse
mountToEnvs[]mountToEnvsfalse
mountPathstringfalse
subPathstringfalse
defaultModeintfalse420
readOnlyboolfalsefalse
stringDatamap[string]false
datamap[string]false
items[]itemsfalse
NameDescriptionTypeRequiredDefault
envNamestringtrue
secretKeystringtrue
NameDescriptionTypeRequiredDefault
envNamestringtrue
secretKeystringtrue
NameDescriptionTypeRequiredDefault
keystringtrue
pathstringtrue
modeintfalse511
NameDescriptionTypeRequiredDefault
namestringtrue
mountPathstringtrue
subPathstringfalse
medium“” or “Memory”falseempty
NameDescriptionTypeRequiredDefault
namestringtrue
pathstringtrue
mountPathstringtrue
type“Directory” or “DirectoryOrCreate” or “FileOrCreate” or “File” or “Socket” or “CharDevice” or “BlockDevice”falseDirectory

Add topology spread constraints hooks for every container of K8s pod for your workload which follows the pod spec in path ‘spec.template’.

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  • daemonsets.apps
  • jobs.batch
  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: application-with-topologyspreadconstraints
  5. spec:
  6. components:
  7. - name: busybox-runner
  8. type: worker
  9. properties:
  10. image: busybox
  11. cmd:
  12. - sleep
  13. - '1000'
  14. traits:
  15. - type: topologyspreadconstraints
  16. properties:
  17. constraints:
  18. - topologyKey: zone
  19. labelSelector:
  20. matchLabels:
  21. zone: us-east-1a
  22. maxSkew: 1
  23. whenUnsatisfiable: DoNotSchedule
  24. minDomains: 1
  25. nodeAffinityPolicy: Ignore
  26. nodeTaintsPolicy: Ignore
  27. - topologyKey: node
  28. labelSelector:
  29. matchExpressions:
  30. - key: foo
  31. operator: In
  32. values:
  33. - abc
  34. maxSkew: 1
  35. whenUnsatisfiable: ScheduleAnyway
  36. minDomains: 1
  37. nodeAffinityPolicy: Ignore
  38. nodeTaintsPolicy: Ignore
NameDescriptionTypeRequiredDefault
constraints[]constraintstrue
NameDescriptionTypeRequiredDefault
maxSkewDescribe the degree to which Pods may be unevenly distributed.inttrue
topologyKeySpecify the key of node labels.stringtrue
whenUnsatisfiableIndicate how to deal with a Pod if it doesn’t satisfy the spread constraint.“DoNotSchedule” or “ScheduleAnyway”falseDoNotSchedule
labelSelectorlabelSelectortrue
minDomainsIndicate a minimum number of eligible domains.intfalse
matchLabelKeysA list of pod label keys to select the pods over which spreading will be calculated.[]stringfalse
nodeAffinityPolicyIndicate how we will treat Pod’s nodeAffinity/nodeSelector when calculating pod topology spread skew.“Honor” or “Ignore”falseHonor
nodeTaintsPolicyIndicate how we will treat node taints when calculating pod topology spread skew.“Honor” or “Ignore”falseHonor
NameDescriptionTypeRequiredDefault
matchLabelsmap[string]stringfalse
matchExpressions[]matchExpressionsfalse
NameDescriptionTypeRequiredDefault
keystringtrue
operator“In” or “NotIn” or “Exists” or “DoesNotExist”falseIn
values[]stringfalse

Last updated on May 6, 2023 by Tianxin Dong