怎么用
在本节中,将介绍如何使用 raw K8s Object 通过 ComponentDefinition 来声明应用程序组件。
在阅读本部分之前,请确保你已经了解了定义和模板概念。
声明ComponentDefinition
这是一个基于“ComponentDefinition”的原始模板示例,它提供了对工作负载类型的抽象:
apiVersion: core.oam.dev/v1beta1
kind: ComponentDefinition
metadata:
  name: kube-worker
  namespace: default
spec:
  workload: 
    definition: 
      apiVersion: apps/v1
      kind: Deployment
  schematic:
    kube: 
      template:
        apiVersion: apps/v1
        kind: Deployment
        spec:
          selector:
            matchLabels:
              app: nginx
          template:
            metadata:
              labels:
                app: nginx
            spec:
              containers:
              - name: nginx
                ports:
                - containerPort: 80 
      parameters: 
      - name: image
        required: true
        type: string
        fieldPaths: 
        - "spec.template.spec.containers[0].image"
详细地说,.spec.schematic.kube 包含工作负载资源的模板和
可配置的参数。
.spec.schematic.kube.template是 YAML 格式的原始模板。.spec.schematic.kube.parameters包含一组可配置的参数。name、type和fieldPaths是必填字段,description和required是可选字段。- 参数
name在ComponentDefinition中必须是唯一的。 type表示设置到字段的值的数据类型。这是一个必填字段,它将帮助 KubeVela 自动为参数生成 OpenAPI JSON 模式。在原始模板中,只允许使用基本数据类型,包括string、number和boolean,而不允许使用array和object。- 参数中的
fieldPaths指定模板中的字段数组,这些字段将被该参数的值覆盖。字段被指定为没有前导点的 JSON 字段路径,例如spec.replicas、spec.containers[0].image。 
- 参数
 
声明一个 Application
这是一个示例 Application。
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
  name: myapp
  namespace: default
spec:
  components:
    - name: mycomp
      type: kube-worker
      properties: 
        image: nginx:1.14.0
由于参数只支持基本数据类型,properties 中的值应该是简单的键值,<parameterName>: <parameterValue>。
部署“应用程序”并验证正在运行的工作负载实例。
$ kubectl get deploy
NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
mycomp                   1/1     1            1           66m
并检查参数是否有效。
$ kubectl get deployment mycomp -o json | jq '.spec.template.spec.containers[0].image'
"nginx:1.14.0"