你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本文提供了 Azure 操作员服务管理器指南,以优化配置组架构(CGS)的设计以及配置组值(CGV)的操作。 加入和部署 NF 时,网络功能(NF)供应商、电信运营商及其合作伙伴应牢记这些做法。
JSON 架构概述
JSON 架构是 Internet 工程任务组(IETF)标准,它提供应用程序所需的 JSON 数据的格式以及如何与之交互。 对 JSON 文档应用此类标准有助于跨 JSON 数据强制实施一致性和数据有效性。
JSON 架构用在哪里?
- Azure 运营商服务管理器使用 JSON 架构表示法作为 CGS
ConfigurationGroupSchemaPropertiesFormat
对象的schemaDefinition
属性内的元架构。 - 当运营商必须在站点网络服务 (SNS) 或 NF 实例化期间提供数据(JSON 值)时,Azure 运营商服务管理器允许设计者和发布者指定 JSON 架构。
- Azure 操作员服务管理器允许元架构属性是可选的,也可以是必需属性。 如果属性被标记
required
,则必须在 JSON 值中指定该属性。
支持哪些 JSON 关键字?
对于 CGS 元架构,Azure 操作员服务管理器基于类型实现对 JSON 标准关键字的支持:
- 对于对象类型,关键字支持受筛选器策略的限制。 请参阅 JSON 架构参考中的 对象 。
- 对于字符串类型,关键字支持不受限制或筛选。 请参阅 JSON 架构参考中的 字符串 。
- 对于数字类型,关键字支持不受限制或筛选。 请参阅 JSON 架构参考中的 数值类型 。
可选字段和必填字段
通过包括一个 required
关键字(省略可选属性)将属性声明为可选属性。 如果未指定 required
关键字,则所有属性都被视为必需。 至少需要一个必需的属性类型才能支持可选属性类型。
{
"type": "object",
"properties": {
"abc": {
"type": "integer",
"default": 30
},
"xyz": {
"type": "string",
"default": "abc123"
}
}
"required": ["abc"]
}
JSON 架构中的默认值
对于可选属性,Azure 操作员服务管理器实现处理默认值的自定义方法。 在 CGS 元架构中定义默认值时,Azure 运营商服务管理器会在输入 CGV 数据中缺少或未定义该属性的情况下使用该值。 当操作员不提供值时,Azure 操作员服务管理器验证器逻辑实质上会用默认值填充 CGV 值。
如何定义默认值
默认值必须在属性或数组的项内指定。 以下示例演示了整数和字符串属性类型的默认值:
{
"type": "object",
"properties": {
"abc": {
"type": "integer",
"default": 30
},
"xyz": {
"type": "string",
"default": "abc123"
}
}
}
定义默认值的规则
验证默认值时,将应用以下规则。 使用默认值来确保预期结果时,请考虑这些规则。
- 不应将默认值应用于所需的属性。
- 默认值是根据关键字首次出现的位置,从上到下的顺序进行评估。
- 当输入 CGV 中存在属性值时,仅计算这些属性的子项作为默认值。
- 当输入 CGV 中不存在属性值时,则会将其与任何子项一起计算,作为默认值。
- 如果属性值是
object
类型,并且它及其键都不存在于输入 CGV 中,则不会计算对象的默认值。
CGS 注意事项
随着时间的推移,建议的最佳设计 CGS 方法已更改。
One-CGS 方法
初始推荐是为整个 NF 仅使用一个 CGS。 此方法将特定于站点、特定于实例和安全的参数合并到一组配置组对象中。 此方法避免了多个对象集,但服务有多个组件的情况除外。 许多合作伙伴使用此方法成功载入服务,仍受支持。
3-CGS 方法
现在,我们建议你将至少三个 CGS 用于整个 NF,方法是将参数组织到以下配置组集中:
- 特定于站点的参数:示例包括 IP 地址和唯一名称。
- 特定于实例的参数:示例包括超时和调试级别。
- 特定于安全的参数:示例包括密码和证书。 使用特定于安全的参数,可以使用 Azure Key Vault 来存储安全值。
设计三个CGS对象集
在设计三CGS对象时,请考虑以下元架构指导原则:
选择要公开的参数。
经验法则是使用直接操作来公开这些参数集,例如某个计算层或 Helm 值。 使用此方法,而不是另一个代理所作用的参数,例如
cloudinit
用户数据。将参数分类为特定于站点、特定于实例和特定于安全的集合。
定义必需参数与可选参数。 对于可选参数,请定义合理的默认值。
确保参数不会在 CGS 对象之间重叠。
此示例展示一个 CGS 有效负载示例:
{
"type": "object",
"properties": {
"abc": {
"type": "integer",
"default": 30
},
"xyz": {
"type": "integer",
"default": 40
},
"qwe": {
"type": "integer"
}
}
"required": "qwe"
}
此示例显示了操作者传递的相应 CGV 负载:
{
"qwe": 20
}
此示例显示 Azure 操作员服务管理器生成的 CGV 有效负载:
{
"abc": 30,
"xyz": 40,
"qwe": 20
}
CGV 注意事项
在提交 CGV 资源创建之前,可以验证基础 YAML 或 JSON 文件的架构和值是否符合相应的 CGS 预期。 若要完成该验证,一个选项是使用适用于 Visual Studio Code 的 YAML 扩展。