交付第一个应用

    欢迎来到 KubeVela! 在本小节中,我们会向你介绍一些例子来帮助你理解如何使用 KubeVela 解决应用交付中的实际问题。

    在实践之前,请确保你已经按照 快速安装 文档,在你的控制平面集群中安装了 KubeVela。

    KubeVela 中一个简单的应用部署定义,大致如下所示:

    我们可以直接使用 把它提交给 KubeVela:

    1. vela up -f https://raw.githubusercontent.com/oam-dev/kubevela/master/docs/examples/vela-app.yaml

    上述命令一旦执行,KubeVela 就会帮助你在目标集群中交付一个 Web 服务类型的组件,且该组件的容器镜像是crccheck/hello-world。在本示例中,我们并没有特别指明目标集群是哪个,所以 KubeVela 会默认把应用部署在它所在的集群也就是控制平面集群当中。

    KubeVela 允许你部署的组件类型是非常丰富的。在上面的例子中,Web Service组件实际上就是一个预先编写好的 文件。

    你还可以选择其它很多类型,比如:

    1. apiVersion: core.oam.dev/v1beta1
    2. kind: Application
    3. metadata:
    4. name: app-delivering-chart
    5. spec:
    6. components:
    7. - name: redis-comp
    8. type: helm
    9. properties:
    10. chart: redis-cluster
    11. version: 6.2.7
    12. url: https://charts.bitnami.com/bitnami
    13. repoType: helm
    1. apiVersion: core.oam.dev/v1beta1
    2. kind: Application
    3. metadata:
    4. name: git-app
    5. spec:
    6. components:
    7. - name: git-comp
    8. type: kustomize
    9. properties:
    10. repoType: git
    11. url: https://github.com/<path>/<to>/<repo>
    12. git:
    13. branch: master
    14. path: ./app/dev/

    当然,还有更多。欢迎查看边栏中的选择待交付组件 章节来阅读关于部署各种类型的详细文档。如果你需要的话,你还可以在 KubeVela 中添加自己的组件类型。

    KubeVela 能做的远不止部署,还包括运维。它允许你为待交付组件绑定预先定义好的各种运维行为(叫做运维特征),并且这个绑定会立刻生效。接下来,我们就为 Web 服务组件绑定一个“分批发布”运维特征:

    好了,接下来,只要上述 YAML 中的镜像版本发生变化,KubeVela 就会按照你所定义的分批策略来更新对应的应用实例了。

    组件与运维特征只是 KubeVela 非常基本的功能。KubeVela 本身实际上是一个全功能的持续交付(CD)系统,并且原生支持面向混合环境(比如混合云/多云/多集群)应用交付。

    举个例子:

    想象一下,你需要在 CI/CD 流水线里编写多少“脏乱差”的一次性脚本或者胶水代码才能让上述流程自动化的、保证一定正确性的执行起来?

    而在 KubeVela 中,上述流程可以非常容易的通过如下所示的声明式工作流建模出来:

    1. apiVersion: core.oam.dev/v1beta1
    2. kind: Application
    3. metadata:
    4. name: example-app
    5. namespace: default
    6. - name: hello-world-server
    7. type: webservice
    8. properties:
    9. image: crccheck/hello-world
    10. port: 8000
    11. traits:
    12. - type: scaler
    13. properties:
    14. replicas: 1
    15. - name: data-worker
    16. type: worker
    17. properties:
    18. image: busybox
    19. cmd:
    20. - sleep
    21. - '1000000'
    22. policies:
    23. - name: example-multi-env-policy
    24. type: env-binding
    25. properties:
    26. envs:
    27. - name: staging
    28. placement: # selecting the cluster to deploy to
    29. clusterSelector:
    30. name: cluster-staging
    31. selector: # selecting which component to use
    32. components:
    33. - hello-world-server
    34. - name: prod
    35. placement:
    36. clusterSelector:
    37. name: cluster-prod
    38. components:
    39. - name: hello-world-server
    40. type: webservice
    41. traits:
    42. - type: scaler
    43. properties:
    44. replicas: 3
    45. - name: health-policy-demo
    46. type: health
    47. properties:
    48. probeInterval: 5
    49. probeTimeout: 10
    50. workflow:
    51. steps:
    52. # deploy to staging env
    53. - name: deploy-staging
    54. type: deploy2env
    55. properties:
    56. policy: example-multi-env-policy
    57. env: staging
    58. # manual check
    59. - name: manual-approval
    60. type: suspend
    61. # deploy to prod env
    62. - name: deploy-prod
    63. type: deploy2env
    64. properties:
    65. policy: example-multi-env-policy
    66. env: prod