1 技术背景
TOSCA(Topology and Orchestration Specification for Cloud Applications )是一个OASIS标准,它定义了一套DSL领域特定语言,用于自动化编排和管理云上应用的生命周期。
TOSCA可以通过NodeType、DataType、Interface等概念描述资源的定义、资源间的关系、资源具备的操作等。
2 模板定义
Service Template:服务模板,是TOSCA文件的主要部分,通过服务模板可以将资源模型定义为有向无环图结构,图中的节点表示资源的定义,边用来标识资源的依赖关系。
Node Template:节点模板,是服务模板的组成元素之一,用于定义有向无环图中的节点资源信息,通常一个节点标识一个资源,节点中包含了资源的属性以及参数等信息。
Relationships:依赖关系,通常是节点模板的组成部分,用来标识当前节点依赖于哪些其他节点,对应有向无环图的边,以此来表示资源创建的顺序。
以1.3协议规范为基准,下面是一个service_template的示例:
service_template:
node_templates:
my_server:
type: tosca.nodes.Compute
requirements:
# contextually this can only be a relationship type
- local_storage:
# capability is provided by Compute Node Type
node: my_block_storage
relationship:
type: tosca.relationships.AttachesTo
properties:
location: /path1/path2
# This maps the local requirement name 'local_storage' to the
# target node's capability name 'attachment'
my_block_storage:
type: tosca.nodes.BlockStorage
properties:
TOSCA文件和yaml文件的结构相似,通过缩进来表示层级关系。从示例文件可以看出,模板创建了一个计算设备my_server和一个存储设备my_block_storage。其中,计算设备依赖于存储设备,所以编排时需要先将存储设备创建好,随后创建计算设备,对应于有向无环图的依赖关系。
Interface:对应于节点资源操作,可以定义节点资源具备的操作能力,也可以进行节点的生命周期管理。
下面是一个Interface进行生命周期管理的示例:
tosca.interfaces.node.lifecycle.Standard:
derived_from: tosca.interfaces.Root
create:
description: Standard lifecycle create operation.
configure:
description: Standard lifecycle configure operation.
start:
description: Standard lifecycle start operation.
stop:
description: Standard lifecycle stop operation.
delete:
description: Standard lifecycle delete operation.
示例中定义了,节点node的创建过程中,需要经历创建、配置、启动操作,删除过程中,需要经历停止和删除操作。我们定义好各操作需要做的内容,就可以完成节点的生命周期管理。对应于节点生命周期图如下所示:
3 任务编排
定义好模板后,可以由编排器(Orchestrator)来进行资源的创建。编排器执行服务模板图部署的流程如下:
1)寻找图中出度为0的节点。
2)创建出度为0节点对应的资源。
3)在资源创建完成后将节点和对应的边移除有向无环图
4)循环查找出度为0的节点继续进行创建操作。
例如,在云资源自动创建的场景下,有这样的云资源依赖关系:
资源编排引擎可以先并行创建数据盘、系统盘、VPC资源,随后创建子网和安全组,最后云主机的依赖资源都就绪后,创建云主机。完成云主机相关云资源的一键式自动创建。
4 总结
TOSCA模板和任务编排在云资源管理和自动化部署方面展现了强大的功能和灵活性,但在实际应用中也需要考虑其潜在的学习成本和性能挑战。随着云计算技术的不断发展,TOSCA有望进一步完善其工具链和生态系统,从而更好地服务于各类应用场景。