kubevela.github.io/docs/end-user/traits/references.md

60 KiB

title
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 2022-11-24T12:21:19+08:00.

Affinity

Description

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

Apply To Component Types

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  • daemonsets.apps
  • jobs.batch

Examples (affinity)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
  name: busybox
spec:
  components:
    - name: busybox
      type: webservice
      properties:
        image: busybox
        cmd: ["sleep", "86400"]
        labels:
          label-key: label-value
          to-delete-label-key: to-delete-label-value
      traits:
        - type: affinity
          properties:
            podAffinity:
              preferred:
                - weight: 1
                  podAffinityTerm:
                    labelSelector:
                      matchExpressions:
                        - key: "secrity"
                          values: ["S1"]
                    namespaces: ["default"]
                    topologyKey: "kubernetes.io/hostname"

Specification (affinity)

Name Description Type Required Default
podAffinity Specify the pod affinity scheduling rules. podAffinity false
podAntiAffinity Specify the pod anti-affinity scheduling rules. podAntiAffinity false
nodeAffinity Specify the node affinity scheduling rules for the pod. nodeAffinity false
tolerations Specify tolerant taint. []tolerations false

podAffinity (affinity)

Name Description Type Required Default
required Specify the required during scheduling ignored during execution. []required false
preferred Specify the preferred during scheduling ignored during execution. []preferred false
required (affinity)
Name Description Type Required Default
labelSelector labelSelector false
namespaces []string false
topologyKey string true
namespaceSelector namespaceSelector false
labelSelector (affinity)
Name Description Type Required Default
matchLabels map[string]:string false
matchExpressions []matchExpressions false
matchExpressions (affinity)
Name Description Type Required Default
key string true
operator string false In
values []string false
namespaceSelector (affinity)
Name Description Type Required Default
matchLabels map[string]:string false
matchExpressions []matchExpressions false
matchExpressions (affinity)
Name Description Type Required Default
key string true
operator string false In
values []string false
preferred (affinity)
Name Description Type Required Default
weight Specify weight associated with matching the corresponding podAffinityTerm. int true
podAffinityTerm Specify a set of pods. podAffinityTerm true
podAffinityTerm (affinity)
Name Description Type Required Default
labelSelector labelSelector false
namespaces []string false
topologyKey string true
namespaceSelector namespaceSelector false
labelSelector (affinity)
Name Description Type Required Default
matchLabels map[string]:string false
matchExpressions []matchExpressions false
matchExpressions (affinity)
Name Description Type Required Default
key string true
operator string false In
values []string false
namespaceSelector (affinity)
Name Description Type Required Default
matchLabels map[string]:string false
matchExpressions []matchExpressions false
matchExpressions (affinity)
Name Description Type Required Default
key string true
operator string false In
values []string false

podAntiAffinity (affinity)

Name Description Type Required Default
required Specify the required during scheduling ignored during execution. []required false
preferred Specify the preferred during scheduling ignored during execution. []preferred false
required (affinity)
Name Description Type Required Default
labelSelector labelSelector false
namespaces []string false
topologyKey string true
namespaceSelector namespaceSelector false
labelSelector (affinity)
Name Description Type Required Default
matchLabels map[string]:string false
matchExpressions []matchExpressions false
matchExpressions (affinity)
Name Description Type Required Default
key string true
operator string false In
values []string false
namespaceSelector (affinity)
Name Description Type Required Default
matchLabels map[string]:string false
matchExpressions []matchExpressions false
matchExpressions (affinity)
Name Description Type Required Default
key string true
operator string false In
values []string false
preferred (affinity)
Name Description Type Required Default
weight Specify weight associated with matching the corresponding podAffinityTerm. int true
podAffinityTerm Specify a set of pods. podAffinityTerm true
podAffinityTerm (affinity)
Name Description Type Required Default
labelSelector labelSelector false
namespaces []string false
topologyKey string true
namespaceSelector namespaceSelector false
labelSelector (affinity)
Name Description Type Required Default
matchLabels map[string]:string false
matchExpressions []matchExpressions false
matchExpressions (affinity)
Name Description Type Required Default
key string true
operator string false In
values []string false
namespaceSelector (affinity)
Name Description Type Required Default
matchLabels map[string]:string false
matchExpressions []matchExpressions false
matchExpressions (affinity)
Name Description Type Required Default
key string true
operator string false In
values []string false

nodeAffinity (affinity)

Name Description Type Required Default
required Specify the required during scheduling ignored during execution. required false
preferred Specify the preferred during scheduling ignored during execution. []preferred false
required (affinity)
Name Description Type Required Default
nodeSelectorTerms Specify a list of node selector. []nodeSelectorTerms true
nodeSelectorTerms (affinity)
Name Description Type Required Default
matchExpressions []matchExpressions false
matchFields []matchFields false
matchExpressions (affinity)
Name Description Type Required Default
key string true
operator string false In
values []string false
matchFields (affinity)
Name Description Type Required Default
key string true
operator string false In
values []string false
preferred (affinity)
Name Description Type Required Default
weight Specify weight associated with matching the corresponding nodeSelector. int true
preference Specify a node selector. preference true
preference (affinity)
Name Description Type Required Default
matchExpressions []matchExpressions false
matchFields []matchFields false
matchExpressions (affinity)
Name Description Type Required Default
key string true
operator string false In
values []string false
matchFields (affinity)
Name Description Type Required Default
key string true
operator string false In
values []string false

tolerations (affinity)

Name Description Type Required Default
key string false
operator string false Equal
value string false
effect string false
tolerationSeconds Specify the period of time the toleration. int false

Annotations

Description

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

Apply To Component Types

All Component Types

Examples (annotations)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
  name: myapp
spec:
  components:
    - name: express-server
      type: webservice
      properties:
        image: crccheck/hello-world
        port: 8000
      traits:
        - type: labels
          properties:
            "release": "stable"
        - type: annotations
          properties:
            "description": "web application"

Specification (annotations)

Name Description Type Required Default
- map[string]:(null|string) true

Command

Description

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

Apply To Component Types

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  • daemonsets.apps
  • jobs.batch

Examples (command)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
  name: busybox
spec:
  components:
    - name: busybox
      type: webservice
      properties:
        image: busybox
        cmd: ["sleep", "86400"]
      traits:
        - type: sidecar
          properties:
            name: sidecar-nginx
            image: nginx
        - type: command
          properties:
            # you can use command to control multiple containers by filling `containers`
            # NOTE: in containers, you must set the container name for each container
            containers:
              - containerName: busybox
                command: ["sleep", "8640000"]
              - containerName: sidecar-nginx
                args: ["-q"]

Specification (command)

Name Description Type Required Default
-- Composition type. parameter: cannot use value {containerName:*"" | string,command:*null | [],args:*null | [],addArgs:*null | [],delArgs:*null | []} (type struct) as string false

Container-Image

Description

Set the image of the container.

Apply To Component Types

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  • daemonsets.apps
  • jobs.batch

Examples (container-image)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
  name: busybox
spec:
  components:
    - name: busybox
      type: webservice
      properties:
        image: busybox
        cmd: ["sleep", "86400"]
      traits:
        - type: sidecar
          properties:
            name: sidecar-nginx
            image: nginx
        - type: container-image
          properties:
            # you can use container-image to control multiple containers by filling `containers`
            # NOTE: in containers, you must set the container name for each container
            containers:
              - containerName: busybox
                image: busybox-1.34.0
                imagePullPolicy: IfNotPresent
              - containerName: sidecar-nginx
                image: nginx-1.20

Specification (container-image)

Name Description Type Required Default
-- Composition type. parameter: cannot use value {containerName:"" | string,image:string,imagePullPolicy:"" | "IfNotPresent" | "Always" | "Never"} (type struct) as string false

Cpuscaler

Description

Automatically scale the component based on CPU usage.

Apply To Component Types

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps

Examples (cpuscaler)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
  name: website
spec:
  components:
    - name: frontend
      type: webservice
      properties:
        image: nginx
      traits:
        - type: cpuscaler
          properties:
            min: 1
            max: 10
            cpuUtil: 60

Specification (cpuscaler)

Name Description Type Required Default
min Specify the minimal number of replicas to which the autoscaler can scale down. int false 1
max Specify the maximum number of of replicas to which the autoscaler can scale up. int false 10
cpuUtil Specify the average cpu utilization, for example, 50 means the CPU usage is 50%. int false 50
targetAPIVersion Specify the apiVersion of scale target. string false apps/v1
targetKind Specify the kind of scale target. string false Deployment

Env

Description

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

Apply To Component Types

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  • daemonsets.apps
  • jobs.batch

Examples (env)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
  name: busybox
spec:
  components:
    - name: busybox
      type: webservice
      properties:
        image: busybox
        cmd: ["sleep", "86400"]
      traits:
        - type: sidecar
          properties:
            name: sidecar-nginx
            image: nginx
        - type: env
          properties:
            # you can use env to control multiple containers by filling `containers`
            # NOTE: in containers, you must set the container name for each container
            containers:
              - containerName: busybox
                env:
                  key_for_busybox_first: value_first
                  key_for_busybox_second: value_second
              - containerName: sidecar-nginx
                env:
                  key_for_nginx_first: value_first
                  key_for_nginx_second: value_second

Specification (env)

Name Description Type Required Default
-- Composition type. parameter: cannot use value {containerName:*"" | string,replace:false | bool,env:{},unset:[] | []} (type struct) as string false

Expose

Description

Expose port to enable web traffic for your component.

Apply To Component Types

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps

Examples (expose)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
  name: test-app
spec:
  components:
    - name: hello-world
      type: webservice
      properties:
        image: crccheck/hello-world
      traits:
        - type: expose
          properties:
            port: [8000]

Specification (expose)

Name Description Type Required Default
port Specify the exposion ports. []int true
annotations Specify the annotaions of the exposed service. map[string]:string true
type Specify what kind of Service you want. options: "ClusterIP","NodePort","LoadBalancer","ExternalName". string false ClusterIP

Gateway

Description

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

Apply To Component Types

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps

Examples (gateway)

# vela-app.yaml
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
  name: first-vela-app
spec:
  components:
    - name: express-server
      type: webservice
      properties:
        image: oamdev/hello-world
        port: 8000
      traits:
        - type: gateway
          properties:
            domain: testsvc.example.com
            http:
              "/": 8000

Specification (gateway)

Name Description Type Required Default
domain Specify the domain you want to expose. string false
http Specify the mapping relationship between the http path and the workload port. map[string]:int true
class Specify the class of ingress to use. string false nginx
classInSpec Set ingress class in '.spec.ingressClassName' instead of 'kubernetes.io/ingress.class' annotation. bool false false
secretName Specify the secret name you want to quote to use tls. string false
gatewayHost Specify the host of the ingress gateway, which is used to generate the endpoints when the host is empty. string false

Hostalias

Description

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

Apply To Component Types

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  • daemonsets.apps
  • jobs.batch

Examples (hostalias)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
  name: application-with-hostalias
spec:
  components:
    - name: busybox-runner
      type: worker
      properties:
        image: busybox
        cmd:
          - sleep
          - '1000'
      traits:
        - type: hostalias
          properties:
            hostAliases:
              - ip: 127.0.0.1
                hostnames:
                  - localname
                  - locals

Specification (hostalias)

Name Description Type Required Default
hostAliases Specify the hostAliases to add. []hostAliases true

hostAliases (hostalias)

Name Description Type Required Default
ip string true
hostnames []string true

Init-Container

Description

add an init container and use shared volume with pod.

Apply To Component Types

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  • daemonsets.apps
  • jobs.batch

Examples (init-container)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
  name: busybox
spec:
  components:
    - name: busybox
      type: webservice
      properties:
        image: busybox
        cmd: ["sleep", "86400"]
      traits:
        - type: init-container
          properties:
            name: init-busybox
            image: busybox
            cmd: ["echo", "hello"]
            initMountPath: /data
            appMountPath: /data-initialized

Specification (init-container)

Name Description Type Required Default
name Specify the name of init container. string true
image Specify the image of init container. string true
imagePullPolicy Specify image pull policy for your service. string false IfNotPresent
cmd Specify the commands run in the init container. []string false
args Specify the args run in the init container. []string false
env Specify the env run in the init container. []env false
mountName Specify the mount name of shared volume. string false workdir
appMountPath Specify the mount path of app container. string true
initMountPath Specify the mount path of init container. string true
extraVolumeMounts Specify the extra volume mounts for the init container. []extraVolumeMounts true

env (init-container)

Name Description Type Required Default
name Environment variable name. string true
value The value of the environment variable. string false
valueFrom Specifies a source the value of this var should come from. valueFrom false
valueFrom (init-container)
Name Description Type Required Default
secretKeyRef Selects a key of a secret in the pod's namespace. secretKeyRef false
configMapKeyRef Selects a key of a config map in the pod's namespace. configMapKeyRef false
secretKeyRef (init-container)
Name Description Type Required Default
name The name of the secret in the pod's namespace to select from. string true
key The key of the secret to select from. Must be a valid secret key. string true
configMapKeyRef (init-container)
Name Description Type Required Default
name The name of the config map in the pod's namespace to select from. string true
key The key of the config map to select from. Must be a valid secret key. string true

extraVolumeMounts (init-container)

Name Description Type Required Default
name The name of the volume to be mounted. string true
mountPath The mountPath for mount in the init container. string true

Json-Merge-Patch

Description

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

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

Apply To Component Types

All Component Types

Examples (json-merge-patch)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
  name: busybox
spec:
  components:
    - name: busybox
      type: webservice
      properties:
        image: busybox
        cmd: ["sleep", "86400"]
        labels:
          pod-label-key: pod-label-value
          to-delete-label-key: to-delete-label-value
      traits:
        # the json merge patch can be used to add, replace and delete fields
        # the following part will
        # 1. add `deploy-label-key` to deployment labels
        # 2. set deployment replicas to 3
        # 3. set `pod-label-key` to `pod-label-modified-value` in pod labels
        # 4. delete `to-delete-label-key` in pod labels
        # 5. reset `containers` for pod
        - type: json-merge-patch
          properties:
            metadata:
              labels:
                deploy-label-key: deploy-label-added-value
            spec:
              replicas: 3
              template:
                metadata:
                  labels:
                    pod-label-key: pod-label-modified-value
                    to-delete-label-key: null
                spec:
                  containers:
                    - name: busybox-new
                      image: busybox:1.34
                      command: ["sleep", "864000"]

Specification (json-merge-patch)

Name Description Type Required Default
- {} true

Json-Patch

Description

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

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

Apply To Component Types

All Component Types

Examples (json-patch)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
  name: busybox
spec:
  components:
    - name: busybox
      type: webservice
      properties:
        image: busybox
        cmd: ["sleep", "86400"]
        labels:
          pod-label-key: pod-label-value
          to-delete-label-key: to-delete-label-value
      traits:
        # the json patch can be used to add, replace and delete fields
        # the following part will
        # 1. add `deploy-label-key` to deployment labels
        # 2. set deployment replicas to 3
        # 3. set `pod-label-key` to `pod-label-modified-value` in pod labels
        # 4. delete `to-delete-label-key` in pod labels
        # 5. add sidecar container for pod
        - type: json-patch
          properties:
            operations:
              - op: add
                path: "/spec/replicas"
                value: 3
              - op: replace
                path: "/spec/template/metadata/labels/pod-label-key"
                value: pod-label-modified-value
              - op: remove
                path: "/spec/template/metadata/labels/to-delete-label-key"
              - op: add
                path: "/spec/template/spec/containers/1"
                value:
                  name: busybox-sidecar
                  image: busybox:1.34
                  command: ["sleep", "864000"]

Specification (json-patch)

Name Description Type Required Default
operations []operations true

operations (json-patch)

Name Description Type Required Default
- {} true

Labels

Description

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

Apply To Component Types

All Component Types

Examples (labels)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
  name: myapp
spec:
  components:
    - name: express-server
      type: webservice
      properties:
        image: crccheck/hello-world
        port: 8000
      traits:
        - type: labels
          properties:
            "release": "stable"
        - type: annotations
          properties:
            "description": "web application"

Specification (labels)

Name Description Type Required Default
- map[string]:(null|string) true

Lifecycle

Description

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

Apply To Component Types

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  • daemonsets.apps
  • jobs.batch

Examples (lifecycle)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
  name: application-with-lifecycle
spec:
  components:
    - name: busybox-runner
      type: worker
      properties:
        image: busybox
        cmd:
          - sleep
          - '1000'
      traits:
        - type: lifecycle
          properties:
            postStart:
              exec:
                command:
                  - echo
                  - 'hello world'
            preStop:
              httpGet:
                host: "www.aliyun.com"
                scheme: "HTTPS"
                port: 443

Specification (lifecycle)

Name Description Type Required Default
postStart postStart false
preStop preStop false

postStart (lifecycle)

Name Description Type Required Default
exec exec false
httpGet httpGet false
tcpSocket tcpSocket false
exec (lifecycle)
Name Description Type Required Default
command []string true
httpGet (lifecycle)
Name Description Type Required Default
path string false
port int true
host string false
scheme string false HTTP
httpHeaders []httpHeaders false
httpHeaders (lifecycle)
Name Description Type Required Default
name string true
value string true
tcpSocket (lifecycle)
Name Description Type Required Default
port int true
host string false

preStop (lifecycle)

Name Description Type Required Default
exec exec false
httpGet httpGet false
tcpSocket tcpSocket false
exec (lifecycle)
Name Description Type Required Default
command []string true
httpGet (lifecycle)
Name Description Type Required Default
path string false
port int true
host string false
scheme string false HTTP
httpHeaders []httpHeaders false
httpHeaders (lifecycle)
Name Description Type Required Default
name string true
value string true
tcpSocket (lifecycle)
Name Description Type Required Default
port int true
host string false

Nocalhost

Description

nocalhost develop configuration.

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

Apply To Component Types

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  • daemonsets.apps
  • jobs.batch

Examples (nocalhost)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
  name: bookinfo
spec:
  components:
    - name: productpage
      type: webservice
      properties:
        image: nocalhost-docker.pkg.coding.net/nocalhost/bookinfo/productpage:latest
        port: 9080
      traits:
        - type: nocalhost
          properties:
            port: 9080
            gitUrl: https://github.com/nocalhost/bookinfo-productpage.git
            image: nocalhost-docker.pkg.coding.net/nocalhost/dev-images/python:3.7.7-slim-productpage-with-pydevd
            shell: "bash"
            workDir: "/opt/work"
            resources:
              limits:
                memory: 1Gi
                cpu: "1"
              requests:
                memory: 512Mi
                cpu: "0.5"
            debug:
              remoteDebugPort: 9009
            hotReload: true
            sync:
              type: send
              filePattern:
                - ./
              ignoreFilePattern:
                - .git
                - .idea
            command:
              run:
                - sh
                - run.sh
              debug:
                - sh
                - debug.sh
            env:
              - name: "foo"
                value: "bar"
            portForward:
              - 39080:9080

Specification (nocalhost)

Name Description Type Required Default
port int true
serviceType string false deployment
gitUrl string false
image string true
shell string false bash
workDir string false /home/nocalhost-dev
storageClass string false
command command true
debug debug false
hotReload bool false true
sync sync true
env []env false
portForward []string false
persistentVolumeDirs []persistentVolumeDirs false
resources resources true

command (nocalhost)

Name Description Type Required Default
run []string true
debug []string true

debug (nocalhost)

Name Description Type Required Default
remoteDebugPort int false

sync (nocalhost)

Name Description Type Required Default
type string false send
filePattern []string true
ignoreFilePattern []string true

env (nocalhost)

Name Description Type Required Default
name string true
value string true

persistentVolumeDirs (nocalhost)

Name Description Type Required Default
path string true
capacity string true

resources (nocalhost)

Name Description Type Required Default
limits limits true
requests requests true
limits (nocalhost)
Name Description Type Required Default
memory string false 2Gi
cpu string false 2
requests (nocalhost)
Name Description Type Required Default
memory string false 512Mi
cpu string false 0.5

Resource

Description

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

Apply To Component Types

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  • daemonsets.apps
  • jobs.batch

Examples (resource)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
  name: resource-app
spec:
  components:
    - name: express-server
      type: webservice
      properties:
        image: crccheck/hello-world
        ports:
          - port: 8000
      traits:
        - type: resource
          properties:
            cpu: 2
            memory: 2Gi
            requests:
              cpu: 2
              memory: 2Gi
            limits:
              cpu: 4
              memory: 4Gi

Specification (resource)

Name Description Type Required Default
cpu Specify the amount of cpu for requests and limits. number false 1
memory Specify the amount of memory for requests and limits. string false 2048Mi
requests Specify the resources in requests. requests false
limits Specify the resources in limits. limits false

requests (resource)

Name Description Type Required Default
cpu Specify the amount of cpu for requests. number false 1
memory Specify the amount of memory for requests. string false 2048Mi

limits (resource)

Name Description Type Required Default
cpu Specify the amount of cpu for limits. number false 1
memory Specify the amount of memory for limits. string false 2048Mi

Scaler

Description

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

Apply To Component Types

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps

Examples (scaler)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
  name: website
spec:
  components:
    - name: frontend
      type: webservice
      properties:
        image: nginx
      traits:
        - type: scaler
          properties:
            replicas: 2
        - type: sidecar
          properties:
            name: "sidecar-test"
            image: "fluentd"
    - name: backend
      type: worker
      properties:
        image: busybox
        cmd:
          - sleep
          - '1000'

Specification (scaler)

Name Description Type Required Default
replicas Specify the number of workload. int false 1

Service-Account

Description

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

Apply To Component Types

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  • daemonsets.apps
  • jobs.batch

Examples (service-account)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
  name: vela-doc
  namespace: vela-system
spec:
  components:
    - name: frontend
      type: webservice
      properties:
        image: oamdev/vela-cli:v1.5.0-beta.1
        cmd: ["/bin/vela","show"]
        ports:
          - port: 18081
            expose: true
      traits:
        - type: service-account
          properties:
            name: kubevela-vela-core

Specification (service-account)

Name Description Type Required Default
name Specify the name of ServiceAccount. string true
create Specify whether to create new ServiceAccount or not. bool false false
privileges Specify the privileges of the ServiceAccount, if not empty, RoleBindings(ClusterRoleBindings) will be created. []privileges false

privileges (service-account)

Name Description Type Required Default
verbs Specify the verbs to be allowed for the resource. []string true
apiGroups Specify the apiGroups of the resource. []string false
resources Specify the resources to be allowed. []string false
resourceNames Specify the resourceNames to be allowed. []string false
nonResourceURLs Specify the resource url to be allowed. []string false
scope Specify the scope of the privileges, default to be namespace scope. string false namespace

Service-Binding

Description

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

Apply To Component Types

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  • daemonsets.apps
  • jobs.batch

Examples (service-binding)

  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:

endpoint: https://xxx.com
password: 123
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.

traits:
- type: service-binding
  properties:
    envMappings:
      DB_PASSWORD:
        secret: db-conn-example
        key: password            
      endpoint:
        secret: db-conn-example
        key: endpoint
      username:
        secret: db-conn-example
        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.

traits:
- type: service-binding
  properties:
    envMappings:
      DB_PASSWORD:
        secret: db-conn-example
        key: password            
      endpoint:
        secret: db-conn-example
      username:
        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.

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
  name: webapp
spec:
  components:
    - name: binding-test-comp
      type: webservice
      properties:
        image: zzxwill/flask-web-application:v0.3.1-crossplane
        ports: 80
      traits:
        - type: service-binding
          properties:
            envMappings:
              # environments refer to db-conn secret
              DB_PASSWORD:
                secret: db-conn-example
                key: password            
              endpoint:
                secret: db-conn-example
              username:
                secret: db-conn-example

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

Specification (service-binding)

Name Description Type Required Default
envMappings The mapping of environment variables to secret. map[string]:#KeySecret true

Sidecar

Description

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

Apply To Component Types

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  • daemonsets.apps
  • jobs.batch

Examples (sidecar)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
  name: vela-app-with-sidecar
spec:
  components:
    - name: log-gen-worker
      type: worker
      properties:
        image: busybox
        cmd:
          - /bin/sh
          - -c
          - >
            i=0;
            while true;
            do
              echo "$i: $(date)" >> /var/log/date.log;
              i=$((i+1));
              sleep 1;
            done            
        volumes:
          - name: varlog
            mountPath: /var/log
            type: emptyDir
      traits:
        - type: sidecar
          properties:
            name: count-log
            image: busybox
            cmd: [ /bin/sh, -c, 'tail -n+1 -f /var/log/date.log']
            volumes:
              - name: varlog
                path: /var/log

Specification (sidecar)

Name Description Type Required Default
name Specify the name of sidecar container. string true
image Specify the image of sidecar container. string true
cmd Specify the commands run in the sidecar. []string false
args Specify the args in the sidecar. []string false
env Specify the env in the sidecar. []env false
volumes Specify the shared volume path. []volumes false
livenessProbe Instructions for assessing whether the container is alive. livenessProbe false
readinessProbe Instructions for assessing whether the container is in a suitable state to serve traffic. readinessProbe false

env (sidecar)

Name Description Type Required Default
name Environment variable name. string true
value The value of the environment variable. string false
valueFrom Specifies a source the value of this var should come from. valueFrom false
valueFrom (sidecar)
Name Description Type Required Default
secretKeyRef Selects a key of a secret in the pod's namespace. secretKeyRef false
configMapKeyRef Selects a key of a config map in the pod's namespace. configMapKeyRef false
fieldRef Specify the field reference for env. fieldRef false
secretKeyRef (sidecar)
Name Description Type Required Default
name The name of the secret in the pod's namespace to select from. string true
key The key of the secret to select from. Must be a valid secret key. string true
configMapKeyRef (sidecar)
Name Description Type Required Default
name The name of the config map in the pod's namespace to select from. string true
key The key of the config map to select from. Must be a valid secret key. string true
fieldRef (sidecar)
Name Description Type Required Default
fieldPath Specify the field path for env. string true

volumes (sidecar)

Name Description Type Required Default
name string true
path string true

livenessProbe (sidecar)

Name Description Type Required Default
exec Instructions 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. exec false
httpGet Instructions 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. httpGet false
tcpSocket Instructions 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. tcpSocket false
initialDelaySeconds Number of seconds after the container is started before the first probe is initiated. int false 0
periodSeconds How often, in seconds, to execute the probe. int false 10
timeoutSeconds Number of seconds after which the probe times out. int false 1
successThreshold Minimum consecutive successes for the probe to be considered successful after having failed. int false 1
failureThreshold Number of consecutive failures required to determine the container is not alive (liveness probe) or not ready (readiness probe). int false 3
exec (sidecar)
Name Description Type Required Default
command A 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. []string true
httpGet (sidecar)
Name Description Type Required Default
path The endpoint, relative to the port, to which the HTTP GET request should be directed. string true
port The TCP socket within the container to which the HTTP GET request should be directed. int true
httpHeaders []httpHeaders false
httpHeaders (sidecar)
Name Description Type Required Default
name string true
value string true
tcpSocket (sidecar)
Name Description Type Required Default
port The TCP socket within the container that should be probed to assess container health. int true

readinessProbe (sidecar)

Name Description Type Required Default
exec Instructions 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. exec false
httpGet Instructions 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. httpGet false
tcpSocket Instructions 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. tcpSocket false
initialDelaySeconds Number of seconds after the container is started before the first probe is initiated. int false 0
periodSeconds How often, in seconds, to execute the probe. int false 10
timeoutSeconds Number of seconds after which the probe times out. int false 1
successThreshold Minimum consecutive successes for the probe to be considered successful after having failed. int false 1
failureThreshold Number of consecutive failures required to determine the container is not alive (liveness probe) or not ready (readiness probe). int false 3
exec (sidecar)
Name Description Type Required Default
command A 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. []string true
httpGet (sidecar)
Name Description Type Required Default
path The endpoint, relative to the port, to which the HTTP GET request should be directed. string true
port The TCP socket within the container to which the HTTP GET request should be directed. int true
httpHeaders []httpHeaders false
httpHeaders (sidecar)
Name Description Type Required Default
name string true
value string true
tcpSocket (sidecar)
Name Description Type Required Default
port The TCP socket within the container that should be probed to assess container health. int true

Storage

Description

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

Apply To Component Types

Component based on the following kinds of resources:

  • deployments.apps
  • statefulsets.apps
  • daemonsets.apps
  • jobs.batch

Examples (storage)

# sample.yaml
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
  name: storage-app
spec:
  components:
    - name: express-server
      type: webservice
      properties:
        image: oamdev/hello-world
        ports:
          - port: 8000
      traits:
        - type: storage
          properties:
            # PVC type storage
            pvc:
              - name: test1
                mountPath: /test/mount/pvc
            # EmptyDir type storage
            emptyDir:
              - name: test1
                mountPath: /test/mount/emptydir
            # ConfigMap type storage
            configMap:
              - name: test1
                mountPath: /test/mount/cm
                # Mount ConfigMap to Env
                mountToEnv:
                  envName: TEST_ENV
                  configMapKey: key1
                data:
                  key1: value1
                  key2: value2
            # Secret type storage
            secret:
              - name: test1
                mountPath: /test/mount/secret
                # Mount Secret to Env
                mountToEnv:
                  envName: TEST_SECRET
                  secretKey: key1
                data:
                  key1: dmFsdWUx
                  key2: dmFsdWUy

Specification (storage)

Name Description Type Required Default
pvc Declare pvc type storage. []pvc false
configMap Declare config map type storage. []configMap false
secret Declare secret type storage. []secret false
emptyDir Declare empty dir type storage. []emptyDir false

pvc (storage)

Name Description Type Required Default
name string true
mountOnly bool false false
mountPath string true
subPath string false
volumeMode string false Filesystem
volumeName string false
accessModes []string true
storageClassName string false
resources resources false
dataSourceRef dataSourceRef false
dataSource dataSource false
selector selector false
resources (storage)
Name Description Type Required Default
requests requests true
limits limits false
requests (storage)
Name Description Type Required Default
storage string true
limits (storage)
Name Description Type Required Default
storage string true
dataSourceRef (storage)
Name Description Type Required Default
name string true
kind string true
apiGroup string true
dataSource (storage)
Name Description Type Required Default
name string true
kind string true
apiGroup string true
selector (storage)
Name Description Type Required Default
matchLabels map[string]:string false
matchExpressions matchExpressions false
matchExpressions (storage)
Name Description Type Required Default
key string true
values []string true
operator string true

configMap (storage)

Name Description Type Required Default
name string true
mountOnly bool false false
mountToEnv mountToEnv false
mountToEnvs []mountToEnvs false
mountPath string false
subPath string false
defaultMode int false 420
readOnly bool false false
data map[string]:_ false
items []items false
mountToEnv (storage)
Name Description Type Required Default
envName string true
configMapKey string true
mountToEnvs (storage)
Name Description Type Required Default
envName string true
configMapKey string true
items (storage)
Name Description Type Required Default
key string true
path string true
mode int false 511

secret (storage)

Name Description Type Required Default
name string true
mountOnly bool false false
mountToEnv mountToEnv false
mountToEnvs []mountToEnvs false
mountPath string false
subPath string false
defaultMode int false 420
readOnly bool false false
stringData map[string]:_ false
data map[string]:_ false
items []items false
mountToEnv (storage)
Name Description Type Required Default
envName string true
secretKey string true
mountToEnvs (storage)
Name Description Type Required Default
envName string true
secretKey string true
items (storage)
Name Description Type Required Default
key string true
path string true
mode int false 511

emptyDir (storage)

Name Description Type Required Default
name string true
mountPath string true
subPath string false
medium string false empty