版本管理

    你可以通过字段 在 Application 中指定即将生成的组件实例版本名称。

    如果没有主动指定版本名称,会根据规则 <component-name>-<revision-number> 自动生成。

    应用创建以后,你就可以看到系统中生成了 ControllerRevision 对象来记录组件版本。

    • 获取组件实例的版本记录
    1. $ kubectl get controllerrevision -l controller.oam.dev/component=express-server
    2. NAME CONTROLLER REVISION AGE
    3. express-server-v1 application.core.oam.dev/myapp 1 2m40s
    4. express-server-v2 application.core.oam.dev/myapp 2 2m12s

    你可以在灰度发布功能中进一步利用组件实例版本化以后的功能。

    • 查看组件类型的版本变化
    1. $ kubectl get definitionrevision -l="componentdefinition.oam.dev/name=webservice" -n vela-system
    2. NAME REVISION HASH TYPE
    3. webservice-v1 1 3f6886d9832021ba Component
    4. webservice-v2 2 b3b9978e7164d973 Component

    你可以在应用中指定使用的组件类型、运维能力的版本,加上后缀 @version 即可。在下面的例子里,你可以指定 webservice@v1 表示一直使用 webservice这个组件的 v1 版本。

    1. apiVersion: core.oam.dev/v1beta1
    2. kind: Application
    3. name: myapp
    4. spec:
    5. components:
    6. - name: server
    7. type: webservice@v1
    8. properties:
    9. image: stefanprodan/podinfo:4.0.3

    通过这种方式,系统管理员对组件类型和运维功能的变更就不会影响到你的应用,否则每次应用的更新都会使用最新的组件类型和运维功能。

    除了工作流字段,应用中的每个字段更新都会生成一个对应的版本快照。

    • 查看版本快照
    1. $ kubectl get apprev -l app.oam.dev/name=myapp
    2. NAME AGE
    3. myapp-v1 54m
    4. myapp-v3 18s

    你可以在版本快照中获得应用所关联的所有信息,包括应用的字段以及对应的组件类型、运维能力等。

    预览所提供的信息,会包括应用部署计划的新增、修改和移除等信息,同时也包括其中的组件和运维特征的相关信息。

    假设你的新应用部署计划如下,包含镜像的变化:

    1. # new-app.yaml
    2. apiVersion: core.oam.dev/v1beta1
    3. metadata:
    4. name: myapp
    5. spec:
    6. components:
    7. - name: express-server
    8. type: webservice@v1
    9. properties:
    10. image: crccheck/hello-world # 变更镜像

    然后运行 版本对比 功能,使用如下命令:

    1. vela live-diff -f new-app.yaml -r vela-app-v1
    • 通过 -r--revision 参数,指定要比较的版本名称。

    通过 查看更多参数用法。

    未来,我们也计划将应用版本快照集成到 CLI/Dashboard 等工具中,以此实现快照恢复等更多功能。