云原生服务中心 OSC-自定义服务CSD:versionDefinition

时间:2025-01-26 10:36:02

versionDefinition

实例版本定义配置是在csd文件中配置versionDefinition。

  • versionDefinition配置tag样例如下。
    versionDefinition:  mode: tag  path: spec.kafka.image  tags:        - 1.1.1    - 2.2.2    - 3.3.3    - 9.9.9
  • versionDefinition配置url样例如下。
    versionDefinition:  mode: url  path: spec.kafka.image  tags:    - 1.1.1    - 2.2.2    - 3.3.3    - 9.9.9 

defaultConfiguration: |-{        ....        ...        "spec": {          "kafka": {            "config": {            },            "image": "example:1.1.1"            "nodeIps": [],            "nodeSelector": {},            "podAntiAffinity": true,            "ports": {              "bootstrapServer": 9092,              "prometheus": 9404            },            "replicas": 3,            "storageSize": "8Gi"          }        }      }
表5 versionDefiniton配置

参数名称

参数描述

参数示例

必填

description

单击升级时的提示信息,知会用户进行实例升级的注意事项

您可以直接升级到最新版本,升级期间会发生5s之内的连接闪断,请确认应用程序具备重连机制

mode

实例的镜像格式,当前仅支持url、tag这两种格式

取值范围固定为[url、tag]

  • mode配置为url,则会将上述所示defaultConfiguration字段下的"image"字段的值替换为"example:2.2.2"
  • mode配置为tag后,则会将上述所示defaultConfiguration字段下的"image"字段的值替换为"2.2.2"

必填, 当mode配置之后,path和tags就成了必填项

path

实例镜像替换路径,位于defaultConfiguration字段下的值

例如,path值配置为"spec.kafka.image",则需要替换的值是"example:1.1.1"

必填

tags

实例镜像tag版本号列表。建议使用引号,否则YAML会将类似2.0的tag版本号识别为浮点数。

注意:

配置在tags下的实例版本号默认都是兼容的实例版本,即这些版本之间能进行互相升级。不兼容的版本号配置在tags列表下会造成升级完成之后实例功能有问题。

以实例镜像文件为test-x86_64-2.0.1.20210929123638.tar为例,

实例镜像文件通过docker load -i test-x86_64-2.0.1.20210929123638.tar执行完成之后,会在控制台回显如下信息:

Loaded image: test-x86_64:2.0.1.20210929123638

则tag版本号为2.0.1.20210929123638,如果有多个版本镜像,则都可以通过此方式获取tag版本号, 然后将这些tag版本号配置在tags下面

必填

对于lifecycle文件中配置了upgrade字段的服务包,需要确保versionDefinition字段与被升级的operator的所管理的实例相兼容,否则会导致上传服务包或升级服务operator失败,具体规则如下:

1. 在上传服务包阶段,upgrade.replaces字段指定的被升级operator的versionDefinition字段为空时,允许上传服务包;不为空时,新的versionDefinition.tags需要与其有交集才能发布。

2. 在服务operator升级阶段,被升级的operator当前管理的实例版本必须都在新的versionDefinition.tags列表中,否则不允许升级,需要确认新版本的operator是否能够管理这些实例,如果可以,则修改versionDefinition后重新上传服务包,否则需要删除不兼容的实例后再升级。

示例:csd.yaml完整示例,以kafka为例。
apiVersion: osc.io/v1beta1kind: CustomServiceDefinitionmetadata:  name: kafka-csdspec:  # 通过CRDRef将此 CS D跟同一文件夹下的某个CRD相关联  CRDRef:    apiVersion: apiextensions.k8s.io/v1beta1    kind: CustomResourceDefinition    metadata:      name: kafkas.osc.huawei.com    # CRD显示名字  displayName: kafka  # CRD 描述  description: kafka Description  # CRD的角色  role: serviceEntity  # 公共能力引用(只针对平台能力引用)  capabilityRequirements:    - apiVersion: osc.io/v1             # 引用平台监控能力      kind: MonitorConfig      defaultPath: vendor/monitor_config.yaml    - apiVersion: osc.io/v1        # 引用平台日志能力      kind: LogConfig      defaultPath: vendor/log_config.yaml                 # 服务依赖  serviceEntityDependencies:    - service: rdsService      apiVersion: rds.io/v1alpha1     # 依赖operator格式的RDS      kind: rds      defaultPath: vendor/rds_provider.yaml    - service: redisService                       # 依赖Helm格式的redisService      defaultPath: vendor/redis_service_values.yaml # redis的values.yaml文件  # UI控件  descriptors:    spec:      - description: ""        displayName: ""        path: {crd-name.replicas}        x-descriptors:          - "urn:alm:descriptor:com.tectonic.ui:podCount"    status:      - description: ""        displayName: ""        path: {crd-name.replicas}        x-descriptors:          - "urn:alm:descriptor:com.tectonic.ui:podCount"  # CRD对应的CR样例  defaultConfiguration: |-{        "apiVersion": "osc.huawei.com/v1",        "kind": "Kafka",        "metadata": {          "annotations": {            "osc.io/occupied-port": "135,139"          },          "name": "kafka-sample",          "namespace": "kfk",          "finalizers": [            "kafka.finalizers.osc.huawei.com"          ]        },        "spec": {          "kafka": {            "config": {            },            "image": "xxx/xx/aa:1.0"            "nodeIps": [],            "nodeSelector": {},            "podAntiAffinity": true,            "ports": {              "bootstrapServer": 9092,              "prometheus": 9404            },            "replicas": 3,            "storageSize": "8Gi"          }        }      }  # 服务实例升级  versionDefinition:    description: 您可以直接升级到最新版本,升级期间会发生5s之内的连接闪断,请确认应用程序具备重连机制    mode: url    path: spec.image    tags:      - "2.7.0"      - "2.7.1"      - "2.7.2"
support.huaweicloud.com/devg-osc/osc_ss_0009.html