内置策略列表

    本文档将按字典序展示所有内置策略的参数列表。

    只交付部署资源,不保证终态一致、允许配置漂移。适用于与其他控制器协作的轻量级交付场景。

    It’s generally used in one time delivery only without continuous management scenario.

    名称描述类型是否必须默认值
    selector指定资源筛选目标规则。false
    strategySpecify the strategy for configuring the resource level configuration drift behaviour。strategytrue
    名称描述类型是否必须默认值
    componentNames按组件名称选择目标资源。[]stringfalse
    componentTypes按组件类型选择目标资源。[]stringfalse
    oamTypes按 OAM 概念,组件(COMPONENT) 或 运维特征(TRAIT) 筛选。[]stringfalse
    traitTypes按 trait 类型选择目标资源。[]stringfalse
    resourceTypes按资源类型选择。[]stringfalse
    resourceNames按资源名称选择。[]stringfalse
    名称描述类型是否必须默认值
    affectWhen the strategy takes effect,e.g. onUpdate、onStateKeep。stringfalse
    path指定资源的路径。[]stringtrue

    为应用配置资源回收策略。 如配置资源不回收。

    1. kind: Application
    2. metadata:
    3. name: first-vela-app
    4. spec:
    5. components:
    6. - name: express-server
    7. type: webservice
    8. properties:
    9. image: oamdev/hello-world
    10. port: 8000
    11. traits:
    12. - type: ingress-1-20
    13. properties:
    14. domain: testsvc.example.com
    15. http:
    16. "/": 8000
    17. policies:
    18. - name: keep-legacy-resource
    19. type: garbage-collect
    20. properties:
    21. keepLegacyResource: true
    1. apiVersion: core.oam.dev/v1beta1
    2. kind: Application
    3. metadata:
    4. name: garbage-collect-app
    5. spec:
    6. components:
    7. - name: hello-world-new
    8. type: webservice
    9. properties:
    10. image: oamdev/hello-world
    11. traits:
    12. - type: expose
    13. properties:
    14. port: [8000]
    15. policies:
    16. - name: garbage-collect
    17. type: garbage-collect
    18. properties:
    19. rules:
    20. - selector:
    21. traitTypes:
    22. - expose
    23. strategy: onAppDelete
    名称描述类型是否必须默认值
    keepLegacyResource如果为 true,过时的版本化 resource tracker 将不会自动回收。 过时的资源将被保留,直到手动删除 resource tracker。boolfalsefalse
    rules在资源级别控制垃圾回收策略的规则列表,如果一个资源由多个规则控制,将使用第一个规则。false
    名称描述类型是否必须默认值
    componentNames按组件名称选择目标资源。[]stringfalse
    componentTypes按组件类型选择目标资源。[]stringfalse
    oamTypes按 OAM 概念,组件(COMPONENT) 或 运维特征(TRAIT) 筛选。[]stringfalse
    traitTypes按 trait 类型选择目标资源。[]stringfalse
    resourceTypes按资源类型选择。[]stringfalse
    resourceNames按资源名称选择。[]stringfalse

    Apply periodical health checking to the application。

    名称描述类型是否必须默认值
    probeTimeoutSpecify health checking timeout(seconds), default 10s。intfalse10
    probeIntervalSpecify health checking interval(seconds), default 30s。intfalse30

    描述部署资源时要覆盖的配置,需要配合工作流的 deploy 步骤一起使用才能生效。

    1. apiVersion: core.oam.dev/v1beta1
    2. kind: Application
    3. metadata:
    4. name: deploy-with-override
    5. namespace: examples
    6. spec:
    7. components:
    8. - name: nginx-with-override
    9. type: webservice
    10. properties:
    11. image: nginx
    12. policies:
    13. - name: topology-hangzhou-clusters
    14. type: topology
    15. properties:
    16. clusterLabelSelector:
    17. region: hangzhou
    18. - name: topology-local
    19. type: topology
    20. properties:
    21. clusters: ["local"]
    22. namespace: examples-alternative
    23. - name: override-nginx-legacy-image
    24. type: override
    25. properties:
    26. components:
    27. - name: nginx-with-override
    28. properties:
    29. image: nginx:1.20
    30. - name: override-high-availability
    31. type: override
    32. properties:
    33. components:
    34. - type: webservice
    35. traits:
    36. - type: scaler
    37. properties:
    38. replicas: 3
    39. workflow:
    40. steps:
    41. - type: deploy
    42. name: deploy-local
    43. properties:
    44. policies: ["topology-local"]
    45. - type: deploy
    46. name: deploy-hangzhou
    47. properties:
    48. policies: ["topology-hangzhou-clusters", "override-nginx-legacy-image", "override-high-availability"]
    名称描述类型是否必须默认值
    components要覆盖的组件配置列表。[]componentstrue
    selector要使用的组件名称列表。 如果未设置,将使用所有组件。[]stringfalse
    名称描述类型是否必须默认值
    name要覆盖的组件的名称。 如果未设置,它将匹配具有指定类型的所有组件。 可以与通配符 * 一起使用以进行模糊匹配。。stringfalse
    type要覆盖的组件的类型。 如果未设置,将匹配所有组件类型。stringfalse
    properties要覆盖的配置属性,未填写配置会与原先的配置合并。map[string]:_false
    traits要覆盖的 trait 配置列表。false

    Describe the configuration to replicate components when deploying resources, it only works with specified deploy step in workflow。

    In KubeVela, we can dispatch resources across the clusters. But projects like OpenYurt have finer-grained division like node pool. This requires to dispatch some similar resources to the same cluster. These resources are called replication. Back to the example of OpenYurt, it can integrate KubeVela and replicate the resources then dispatch them to the different node pool.

    Replication is an internal policy. It can be only used with deploy workflow step. When using replication policy. A new field replicaKey will be added to context. User can use definitions that make use of . For example, apply a replica-webservice ComponentDefinition.

    1. kind: ComponentDefinition
    2. metadata:
    3. annotations:
    4. definition.oam.dev/description: Webservice, but can be replicated
    5. name: replica-webservice
    6. namespace: vela-system
    7. spec:
    8. schematic:
    9. cue:
    10. template: |
    11. output: {
    12. apiVersion: "apps/v1"
    13. kind: "Deployment"
    14. metadata: {
    15. if context.replicaKey != _|_ {
    16. name: context.name + "-" + context.replicaKey
    17. }
    18. if context.replicaKey == _|_ {
    19. name: context.name
    20. }
    21. }
    22. spec: {
    23. selector: matchLabels: {
    24. "app.oam.dev/component": context.name
    25. if context.replicaKey != _|_ {
    26. "app.oam.dev/replicaKey": context.replicaKey
    27. }
    28. }
    29. template: {
    30. metadata: {
    31. labels: {
    32. if parameter.labels != _|_ {
    33. parameter.labels
    34. }
    35. if parameter.addRevisionLabel {
    36. "app.oam.dev/revision": context.revision
    37. }
    38. "app.oam.dev/name": context.appName
    39. "app.oam.dev/component": context.name
    40. if context.replicaKey != _|_ {
    41. "app.oam.dev/replicaKey": context.replicaKey
    42. }
    43. }
    44. if parameter.annotations != _|_ {
    45. annotations: parameter.annotations
    46. }
    47. }
    48. }
    49. }
    50. }
    51. outputs: {
    52. if len(exposePorts) != 0 {
    53. webserviceExpose: {
    54. apiVersion: "v1"
    55. kind: "Service"
    56. metadata: {
    57. if context.replicaKey != _|_ {
    58. name: context.name + "-" + context.replicaKey
    59. }
    60. if context.replicaKey == _|_ {
    61. name: context.name
    62. }
    63. }
    64. spec: {
    65. selector: {
    66. "app.oam.dev/component": context.name
    67. if context.replicaKey != _|_ {
    68. "app.oam.dev/replicaKey": context.replicaKey
    69. }
    70. }
    71. ports: exposePorts
    72. type: parameter.exposeType
    73. }
    74. }
    75. }
    76. }

    Then user can apply application below. Replication policy is declared in application.spec.policies. These policies are used in deploy-with-rep workflow step. They work together to influence the deploy step.

    • override: select hello-rep component to deploy.
    • topology: select cluster local to deploy.
    • replication: select hello-rep component to replicate.

    As a result, there will be two Deployments and two Services:

    1. apiVersion: core.oam.dev/v1beta1
    2. kind: Application
    3. metadata:
    4. name: app-replication-policy
    5. spec:
    6. components:
    7. - name: hello-rep
    8. type: replica-webservice
    9. properties:
    10. image: crccheck/hello-world
    11. - port: 80
    12. policies:
    13. - name: comp-to-replicate
    14. type: override
    15. properties:
    16. selector: [ "hello-rep" ]
    17. - name: target-default
    18. type: topology
    19. properties:
    20. clusters: [ "local" ]
    21. - name: replication-default
    22. type: replication
    23. properties:
    24. keys: ["beijing","hangzhou"]
    25. selector: ["hello-rep"]
    26. workflow:
    27. steps:
    28. - name: deploy-with-rep
    29. type: deploy
    30. properties:
    31. policies: ["comp-to-replicate","target-default","replication-default"]
    1. kubectl get deploy -n default
    2. NAME READY UP-TO-DATE AVAILABLE AGE
    3. hello-rep-beijing 1/1 1 1 5s
    4. hello-rep-hangzhou 1/1 1 1 5s
    5. kubectl get service -n default
    6. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    7. hello-rep-hangzhou ClusterIP 10.43.23.200 <none> 80/TCP 41s
    8. hello-rep-beijing ClusterIP 10.43.24.116 <none> 80/TCP 12s
    名称描述类型是否必须默认值
    keysSpicify the keys of replication. Every key coresponds to a replication components。[]stringtrue
    selectorSpecify the components which will be replicated。[]stringfalse

    Configure the resources to be sharable across applications。

    It’s used in scenario. It can be used to configure which resources can be shared between applications. The target resource will allow multiple application to read it but only the first one to be able to write it.

    1. apiVersion: core.oam.dev/v1beta1
    2. kind: Application
    3. metadata:
    4. name: app2
    5. spec:
    6. components:
    7. - name: ns2
    8. type: k8s-objects
    9. properties:
    10. objects:
    11. - apiVersion: v1
    12. kind: Namespace
    13. metadata:
    14. name: example
    15. - name: cm2
    16. type: k8s-objects
    17. properties:
    18. objects:
    19. - apiVersion: v1
    20. kind: ConfigMap
    21. metadata:
    22. name: cm2
    23. namespace: example
    24. data:
    25. key: value2
    26. policies:
    27. - name: shared-resource
    28. type: shared-resource
    29. properties:
    30. rules:
    31. - selector:
    32. resourceTypes: ["Namespace"]
    名称描述类型是否必须默认值
    rulesSpecify the list of rules to control shared-resource strategy at resource level。[]rulesfalse
    名称描述类型是否必须默认值
    selector指定资源筛选目标规则。true
    名称描述类型是否必须默认值
    componentNames按组件名称选择目标资源。[]stringfalse
    componentTypes按组件类型选择目标资源。[]stringfalse
    oamTypes按 OAM 概念,组件(COMPONENT) 或 运维特征(TRAIT) 筛选。[]stringfalse
    traitTypes按 trait 类型选择目标资源。[]stringfalse
    resourceTypes按资源类型选择。[]stringfalse
    resourceNames按资源名称选择。[]stringfalse
    1. apiVersion: core.oam.dev/v1beta1
    2. kind: Application
    3. metadata:
    4. name: basic-topology
    5. namespace: examples
    6. spec:
    7. components:
    8. - name: nginx-basic
    9. type: webservice
    10. properties:
    11. image: nginx
    12. policies:
    13. - name: topology-hangzhou-clusters
    14. type: topology
    15. properties:
    16. clusters: ["hangzhou-1", "hangzhou-2"]
    1. apiVersion: core.oam.dev/v1beta1
    2. kind: Application
    3. metadata:
    4. name: label-selector-topology
    5. namespace: examples
    6. spec:
    7. components:
    8. - name: nginx-label-selector
    9. type: webservice
    10. properties:
    11. image: nginx
    12. policies:
    13. - name: topology-hangzhou-clusters
    14. type: topology
    15. properties: