Init Container

The init-container trait attaches an initialization container to the component. This type of containers are useful for setup operations and are able to work with shared storage with the component.

The following snippet shows an example application with an init container that executes a command. The init-container shares a volume workdir that is mounted on /work-dir and that is also mounted on the component container on /component-work-dir.

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
  name: my-app
  annotations: 
    version: "v0.0.1"
    description: "My application"
spec:
  components:
    - name: busybox
      type: worker
      properties:
        image: my-app-image:v1.0.0
        cmd: ["cmd"]
        cpu: "0.25"
        memory: "200Mi"
      traits:
        - type: "init-container" # Set to init-container
          properties:
            name:  init-container-name # (Required) name of init container
            image: my-container-image:v1.0.0 # (Required) image of init container
            cmd: ["cmd"] # (Optional) commands run in the init container
            args: ["args"] # (Optional) args run in the init container
            mountName: "workdir" # (Required) mount name of shared volume. workdir by default
            appMountPath:  "/component-work-dir" # (Required) mount path of app container
            initMountPath: "/work-dir" # (Required) mount path of init container
            env: # (Optional) envs of init container
              - name: ENV_VAR1 # Setting the value directly
                value: "value1"
              - name: ENV_VAR2 # Using a secret to obtain a key value
                valueFrom:
                  secretKeyRef:
                    name: secret-name
                    key: key2
              - name: ENV_VAR3 # Using a configmap to obtain a key value
                valueFrom:
                  configMapKeyRef:
                    name: config-map-name
                    key: key2