Built-in Trait Type

    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
    NameDescriptionTypeRequiredDefault
    requiredSpecify the required during scheduling ignored during execution.[]requiredfalse
    preferredSpecify the preferred during scheduling ignored during execution.false
    NameDescriptionTypeRequiredDefault
    labelSelectorlabelSelectorfalse
    namespaces[]stringfalse
    topologyKeystringtrue
    namespaceSelectorfalse
    NameDescriptionTypeRequiredDefault
    matchLabelsmap[string]stringfalse
    matchExpressions[]matchExpressionsfalse
    NameDescriptionTypeRequiredDefault
    keystringtrue
    operator“In” or “NotIn” or “Exists” or “DoesNotExist”falseIn
    values[]stringfalse
    NameDescriptionTypeRequiredDefault
    matchLabelsmap[string]stringfalse
    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
    labelSelectorfalse
    namespaces[]stringfalse
    topologyKeystringtrue
    namespaceSelectornamespaceSelectorfalse
    NameDescriptionTypeRequiredDefault
    matchLabelsmap[string]stringfalse
    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.false
    preferredSpecify the preferred during scheduling ignored during execution.[]preferredfalse
    NameDescriptionTypeRequiredDefault
    labelSelectorfalse
    namespaces[]stringfalse
    topologyKeystringtrue
    namespaceSelectornamespaceSelectorfalse
    NameDescriptionTypeRequiredDefault
    matchLabelsmap[string]stringfalse
    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.true
    NameDescriptionTypeRequiredDefault
    labelSelectorlabelSelectorfalse
    namespaces[]stringfalse
    topologyKeystringtrue
    namespaceSelectorfalse
    NameDescriptionTypeRequiredDefault
    matchLabelsmap[string]stringfalse
    matchExpressions[]matchExpressionsfalse
    NameDescriptionTypeRequiredDefault
    keystringtrue
    operator“In” or “NotIn” or “Exists” or “DoesNotExist”falseIn
    values[]stringfalse
    NameDescriptionTypeRequiredDefault
    matchLabelsmap[string]stringfalse
    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.false
    NameDescriptionTypeRequiredDefault
    nodeSelectorTermsSpecify a list of node selector.[]nodeSelectorTermstrue
    NameDescriptionTypeRequiredDefault
    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.true
    NameDescriptionTypeRequiredDefault
    matchExpressions[]matchExpressionsfalse
    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. kind: Application
    2. metadata:
    3. name: myapp
    4. spec:
    5. components:
    6. - name: express-server
    7. type: webservice
    8. properties:
    9. image: crccheck/hello-world
    10. port: 8000
    11. traits:
    12. - type: labels
    13. properties:
    14. "release": "stable"
    15. - type: annotations
    16. properties:
    17. "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 false
    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
    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.true
    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 false
    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

    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
    NameDescriptionTypeRequiredDefault
    hostAliasesSpecify the hostAliases to add.true
    NameDescriptionTypeRequiredDefault
    ipstringtrue
    hostnames[]stringtrue

    Configure k8s HPA for Deployment or Statefulsets.

    • 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
    memfalse
    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. components:
    6. - name: busybox
    7. type: webservice
    8. properties:
    9. image: busybox
    10. cmd: ["sleep", "86400"]
    11. traits:
    12. - type: init-container
    13. name: init-busybox
    14. image: busybox
    15. cmd: ["echo", "hello"]
    16. initMountPath: /data
    17. 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.false
    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.false
    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.false
    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.

    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.true
    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
    postStartfalse
    preStoppreStopfalse
    NameDescriptionTypeRequiredDefault
    execfalse
    httpGethttpGetfalse
    tcpSocketfalse
    NameDescriptionTypeRequiredDefault
    command[]stringtrue
    NameDescriptionTypeRequiredDefault
    pathstringfalse
    portinttrue
    hoststringfalse
    scheme“HTTP” or “HTTPS”falseHTTP
    httpHeaders[]httpHeadersfalse
    NameDescriptionTypeRequiredDefault
    namestringtrue
    valuestringtrue
    NameDescriptionTypeRequiredDefault
    portinttrue
    hoststringfalse
    NameDescriptionTypeRequiredDefault
    execfalse
    httpGethttpGetfalse
    tcpSocketfalse
    NameDescriptionTypeRequiredDefault
    command[]stringtrue
    NameDescriptionTypeRequiredDefault
    pathstringfalse
    portinttrue
    hoststringfalse
    scheme“HTTP” or “HTTPS”falseHTTP
    httpHeaders[]httpHeadersfalse
    NameDescriptionTypeRequiredDefault
    namestringtrue
    valuestringtrue
    NameDescriptionTypeRequiredDefault
    portinttrue
    hoststringfalse

    nocalhost develop configuration.

    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. remoteDebugPort: 9009
    28. hotReload: true
    29. sync:
    30. type: send
    31. filePattern:
    32. - ./
    33. ignoreFilePattern:
    34. - .git
    35. - .idea
    36. command:
    37. run:
    38. - sh
    39. - run.sh
    40. debug:
    41. - sh
    42. - debug.sh
    43. env:
    44. - name: "foo"
    45. value: "bar"
    46. portForward:
    47. - 39080:9080
    NameDescriptionTypeRequiredDefault
    portinttrue
    serviceTypestringfalsedeployment
    gitUrlstringfalse
    imagestringtrue
    shellstringfalsebash
    workDirstringfalse/home/nocalhost-dev
    storageClassstringfalse
    commandtrue
    debugdebugfalse
    hotReloadboolfalsetrue
    synctrue
    env[]envfalse
    portForward[]stringfalse
    persistentVolumeDirsfalse
    resourcesresourcestrue
    NameDescriptionTypeRequiredDefault
    run[]stringtrue
    debug[]stringtrue
    NameDescriptionTypeRequiredDefault
    remoteDebugPortintfalse
    NameDescriptionTypeRequiredDefault
    typestringfalsesend
    filePattern[]stringtrue
    ignoreFilePattern[]stringtrue
    NameDescriptionTypeRequiredDefault
    namestringtrue
    valuestringtrue
    NameDescriptionTypeRequiredDefault
    pathstringtrue
    capacitystringtrue
    NameDescriptionTypeRequiredDefault
    limitstrue
    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
    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.false
    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

    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.false
    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.false
    livenessProbeInstructions for assessing whether the container is alive.livenessProbefalse
    readinessProbeInstructions for assessing whether the container is in a suitable state to serve traffic.false
    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
    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.false
    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.false
    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.false
    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.false
    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
    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.false
    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.false
    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.false
    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.false
    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.false
    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.false
    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
    NameDescriptionTypeRequiredDefault
    pvcDeclare pvc type storage.[]pvcfalse
    configMapDeclare config map type storage.false
    secretDeclare secret type storage.[]secretfalse
    emptyDirDeclare empty dir type storage.false
    hostPathDeclare host path type storage.[]hostPathfalse
    NameDescriptionTypeRequiredDefault
    namestringtrue
    mountOnlyboolfalsefalse
    mountPathstringtrue
    subPathstringfalse
    volumeModestringfalseFilesystem
    volumeNamestringfalse
    accessModes[]stringtrue
    storageClassNamestringfalse
    resourcesfalse
    dataSourceRefdataSourceReffalse
    dataSourcefalse
    selectorselectorfalse
    NameDescriptionTypeRequiredDefault
    requeststrue
    limitslimitsfalse
    NameDescriptionTypeRequiredDefault
    storagestringtrue
    NameDescriptionTypeRequiredDefault
    storagestringtrue
    NameDescriptionTypeRequiredDefault
    namestringtrue
    kindstringtrue
    apiGroupstringtrue
    NameDescriptionTypeRequiredDefault
    namestringtrue
    kindstringtrue
    apiGroupstringtrue
    NameDescriptionTypeRequiredDefault
    matchLabelsmap[string]stringfalse
    matchExpressionsfalse
    NameDescriptionTypeRequiredDefault
    keystringtrue
    values[]stringtrue
    operatorstringtrue
    NameDescriptionTypeRequiredDefault
    namestringtrue
    mountOnlyboolfalsefalse
    mountToEnvmountToEnvfalse
    mountToEnvsfalse
    mountPathstringfalse
    subPathstringfalse
    defaultModeintfalse420
    readOnlyboolfalsefalse
    datamap[string]_false
    items[]itemsfalse
    NameDescriptionTypeRequiredDefault
    envNamestringtrue
    configMapKeystringtrue
    NameDescriptionTypeRequiredDefault
    envNamestringtrue
    configMapKeystringtrue
    NameDescriptionTypeRequiredDefault
    keystringtrue
    pathstringtrue
    modeintfalse511
    NameDescriptionTypeRequiredDefault
    namestringtrue
    mountOnlyboolfalsefalse
    mountToEnvfalse
    mountToEnvs[]mountToEnvsfalse
    mountPathstringfalse
    subPathstringfalse
    defaultModeintfalse420
    readOnlyboolfalsefalse
    stringDatamap[string]false
    datamap[string]false
    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
    labelSelectortrue
    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
    keystringtrue
    operator“In” or “NotIn” or “Exists” or “DoesNotExist”falseIn
    values[]stringfalse