云服务器内容精选

  • 接入流程 用户参考附录oscctl工具使用中的链接下载oscctl工具oscctl-22.8.18.tar.gz,并放在linux执行机中。 执行下面命令解压服务。 # 解压工具包$ tar -xvzf oscctl-22.8.18.tar.gzoscctl-22.8.18/oscctl-22.8.18/linux-x86_64/oscctl-22.8.18/linux-x86_64/oscctloscctl-22.8.18/win-amd64/oscctl-22.8.18/win-amd64/oscctl.exe$ chmod +x oscctl-22.8.18/linux-x86_64/oscctl$ ./oscctl-22.8.18/linux-x86_64/oscctl convert -i grafana-5.5.7.tgz -o grafana-5.5.7.zipSuccessfully converted original package to OSC package! 查看转换后的服务包结构。 grafana-5.5.7├── lifecycle.yaml # operator生命周期文件,helm类型内容为空├── manifests │ ├── helmrelease_crd.yaml # osc定义helm release的crd服务│ └── helmrelease_csd.yaml # osc附加能力定义文件,需和crd文件联动使用├── metadata.yaml└── raw # raw目录下存放的是原始的grafana helm包 ├── Chart.yaml ├── templates │ ├── NOTES.txt │ ├── _helpers.tpl │ ├── deployment.yaml │ ├── hpa.yaml │ ├── ingress.yaml │ ├── service.yaml │ ├── serviceaccount.yaml │ └── tests │ └── test-connection.yaml ├── README.md └── values.yaml 生成的服务包如果需要配置OSC平台运维功能,请参考对接运维能力(可选);如果不需要配置OSC平台运维功能,请直接查看《OSC服务使用者指南》了解如何上传服务包进行使用。 oscctl工具同样支持直接在windows平台上运行,需要使用windows终端进入,执行oscctl-22.8.18/win-amd64/oscctl.exe命令,参考上面的步骤操作即可。
  • 自定义控件 基于CRD自动生成表单的基础能力控件已经能很好的呈现表单输入,但是为了对用户更友好,更好的表达字段的含义以及隐藏一些非面向用户的字段,因此引入了x-descriptors描述符来定义自定义的控件。 x-descriptors描述符主要用于specDescriptors和statusDescriptors定义自定义控件。 specDescriptors: password(密码输入框):支持密码类型字段输入。 select(下拉框):设置一些可选项,简化用户输入成本。 imagePullPolicy(镜像拉取策略):预置了K8S镜像拉取策略。 k8sResourcePrefix(K8S资源对象):支持设置资源类型并查询展示。 podCount(Pod数量):设置pod数量。 fieldDependency(显示联动):支持控件之间的依赖,控制显示隐藏。 resourceRequirements(资源配置):K8S原生资源规则配置,配置request和limit。 hwDnatElbAccess(公网访问):支持通过弹性公网IP访问实例。 hidden(字段隐藏):支持对基于CRD自动生成控件的字段表单隐藏。 statusDescriptors: text(展示文本): 实例的状态字段一般文本展示。 link(访问链接): 公开实例的外部链接。 specDescriptors statusDescriptors 父主题: 表单控件
  • 接入规范说明 开源helm服务支持自定义配置服务场景、支持架构等配置,其描述说明定义在Chart.yaml中,具体样例如下: apiVersion: v1description: "nginx \n"maintainers:- email: support@rancher.com name: Rancher Labs Supportname: helm-instance-updateversion: 1.0.2annotations: scenes: CCE,U CS source: ISV architecture: x86_64,aarch64 categories: database devices: CPU,GPU,NPU industries: education,media 参数名称 参数描述 参数示例 必选 source 包来源,取值范围:{ISV, OpenSource, HuaweiProvided},分别表示独立服务供应商、开源服务、华为自有服务,仅支持配置一个值。默认值为OpenSource OpenSource 否 architecture 支持架构列表,取值范围:{x86_64, aarch64},默认值为x86_64 x86_64,aarch64 否 categories 分类列表,范围不限,如"AI, Database",注意,当前同一个服务不同版本须配置相同内容,一旦配置后当前不支持修改 Database 否 devices 实例运行需要使用的硬件设备列表,取值范围:{CPU, GPU, NPU},默认值为CPU CPU,GPU 否 industries 行业列表,范围不限,如"education,media" education 否 scenes 部署平台列表,取值列表:{CCE,UCS},分别表示CCE平台和UCS平台,大小写敏感,默认值为CCE。 CCE,UCS 否 父主题: Helm规范
  • 服务包约束 命名规则:只允许包含大小写字母、数字、下划线、中划线及点,且不能以下划线、中划线及点结尾。{service_pack_name}-{version}.zip,例如redis-operator-1.0.0.zip。 包格式:operator类型服务包支持zip格式,helm类型服务包支持tgz格式。 包大小:不超过4MB。 样例(以Kafka为示例): {OSC-Package}/├─ metadata.yaml├─ manifests/│ ├─ xxx_crd.yaml│ ├─ xxx_csd.yaml│ └─ vendor/│ ├─ monitor_config.yaml│ ├─ logs_config.yaml├─ raw/│ ├─ Chart.yaml │ ├─ values.yaml │ ├─ values.schema.json │ ├─ charts/ │ └─ templates │ └─ xxx.yaml└─ lifecycle.yaml
  • 资源集合 {OSC-Package}/manifests,用于存放自定义资源文件以及公共能力配置,不同资源用目录进行划分。 资源集合结构: {OSC-Package}/├─ metadata.yaml ├─ manifests/ #【必选】资源集合│ ├─ xxx_crd.yaml #【必选】自定义资源文件│ ├─ xxx_csd.yaml #【可选】自定义服务文件│ └─ vendor/ #【可选】公共能力目录├─ raw/ ├─ lifecycle.yaml └─ README.md 表1 资源集合结构 目录或文件名称 描述 必选 xxx_crd.yaml 服务包的资源,例如kafka、redis,一个服务包可以包含一个或者多个具体资源目录。 是,至少一个 xxx_csd.yaml 自定义服务文件,每个csd文件对应于一个crd文件。 否 公共能力目录 公共能力目录,存放全部资源CR引用的能力配置文件。 否 父主题: 资源集合Manifests
  • serviceEntityDependencies 配置服务依赖需要在csd文件中配置serviceEntityDependencies。 仅支持对公有服务的依赖,不支持依赖私有服务。 defaultPath为依赖实例的配置文件,会覆盖服务自带配置。 serviceEntityDependencies配置样例 # 服务依赖serviceEntityDependencies: - service: rdsService # 依赖operator类型的RDS实例 apiVersion: rds.io/v1alpha1 kind: rds defaultPath: vendor/rds_provider.yaml - service: redisService # 依赖Helm类型的Redis实例,apiVersion、kind不配置 defaultPath: vendor/redis_service_values.yaml # redis的values.yaml文件 表3 serviceEntityDependencies配置 参数名称 参数描述 参数示例 必填 service 所依赖的服务的名称 rdsService 是 apiVersion 所依赖的服务的配置版本 rds.io/v1alpha1 否 kind 所依赖的服务的配置类型 rds 否 defaultPath 默认配置文件路径,统一配置在vendor目录下。 参见样例 是 服务依赖配置文件样例: rds_provider.yaml apiVersion: osc.io/v1kind: rdsspec: ... redis_service_values.yaml apiVersion: osc.io/v1kind: redisspec: global: imageRegistry: "" imagePullSecrets: [] clusterDomain: cluster.local resources: limits: {} requests: {}
  • descriptors descriptor字段用于配置UI控件,提升部署服务的用户体验,对服务参数进行控件增强,包括服务规格spec和服务状态status。该控件为可选项。 descriptors样例: # UI控件descriptors: spec: - description: "kafka实例个数" displayName: 集群大小 path: {kafka.replicas} restriction: scenes: - CCE x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:podCount" status: - description: "kafka实例个数" displayName: 集群大小 path: {kafka.replicas} restriction: scenes: - CCE x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:podCount" 表4 descriptors配置 参数名称 参数描述 必填 displayName: 控件显示名称 是 description 控件显示描述 是 path 控件对应字段,描述的对象上字段的点分隔路径,例如globalConfig1.field1 是 restriction 如果不同的部署的场景需要不同的控件配置,可配置此字段,支持CCE、UCS两种配置,分别表示云容器引擎和华为云UCS场景 否 x-descriptors 控件类型,具体参考配置表单控件了解相关配置 是
  • 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将此CSD跟同一文件夹下的某个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"
  • role 在Openshift Operator Framework规范中,开发者定义的各类CRD资源都是对等的,没有更进一步的划分,但从实际的功能属性上来说,很容易识别出,不同CRD所处的层级和使用场景并不相同,以etcd为例,可能定义有代表服务主体本身的etcd CRD,以及表示etcd备份的backup CRD,两者客观上存在从属和依赖关系。所以,平铺的定义方式并不能很好的体现这种资源的层级和保证用户体验,在这个维度进行了细化,把CRD的功能和应用场景,按其角色分为以下两类: serviceEntity: 服务实体类资源,即提供如etcd实例CRD定义。 operation:运维功能类,服务实例安装后以独立页签的形式展示,用户可以浏览已有的operation实例以及主动下发新的operation实例,如etcd backup CRD。 其中operation属于服务实体资源的能力(Capability)范畴,与serviceEntity相比只是行为方式上有所不同。 特别地,认为Helm服务的场景是一个最基本的,只包含一个serviceEntity资源定义的场景。Operator则可以包含多个不同角色的CSD,服务包在转换为OSC服务包后,用户需要对不同角色的CRD对应的CSD文件进行定制化的配置。
  • capabilityRequirements 配置能力引用需要在csd文件中声明capabilityRequirements。 能力引用只支持引入operator类型的平台能力,即平台提供的包括监控、日志等的公共能力。 可通过defaultPath配置文件路径,统一配置到vendor目录下。 capabilityRequirements配置样例 # 能力引用配置capabilityRequirements: - apiVersion: osc.io/v1 # 引用平台监控capability kind: MonitorConfig defaultPath: vendor/monitor_config.yaml - apiVersion: osc.io/v1 # 引用平台日志capability kind: LogConfig defaultPath: vendor/log_config.yaml 表2 capabilityRequirements配置 参数名称 参数描述, 参数示例 必填 apiVersion 所引用的能力的配置版本,固定值osc.io/v1 osc.io/v1 是 kind 所引用的能力的配置类型,范围列表MonitorConfig|LogConfig MonitorConfig 是 defaultPath 默认配置文件路径,路径为vendor目录 vendor/monitor_config.yaml 是
  • 简介 云原生服务中心(Operator Service Center,OSC)服务规范旨在给出一种与云平台解耦的云原生服务的标准定义,可描述云原生服务在分布式云的部署和治理。 部署:云原生服务中心联合华为云分布式服务UCS,能够将应用部署到华为云集群、多云集群、本地集群、附着集群、伙伴集群五种场景,实现应用的跨云和全域部署。 治理:容器化只是服务云原生化的第一步,服务部署之后需要治理,不仅包括监控、日志、告警等基本运维能力,还包括弹性伸缩、数据备份恢复、故障迁移、故障恢复等高级运维能力,这些能力是服务高可靠、高可用、高SLA的必要条件。严重依赖云平台的能力,对开发者而言都是重复开发工作,高效快速地赋予服务这些能力是开发者面临的一个难题。 当前最常用的服务管理标准Helm和Operator都没有提供开箱即用的治理能力,为此华为云推出了云原生服务中心OSC,开发者基于服务规范和华为云OSC快速赋予服务全域部署能力和治理能力。
  • 服务生命周期 服务包分为商品服务包和私有服务包。商品包只能由具备ISV资质的租户(服务提供商)进行发布,发布前需经过服务包格式校验、镜像扫描、镜像地址替换、服务自验证等流程,经审核后方可上架。上架后的服务可被其他租户(服务使用者)所使用。而私有包可以由任何一个租户发布,发布后仅由租户自己使用。 商品服务生命周期 服务提供商将服务包上传到华为云云市场,发布成为云市场的商品服务。 服务使用者在云市场购买商品服务,该商品服务变成该用户的已订阅服务。 服务使用者通过已订阅服务创建服务实例。 服务使用者可对服务实例进行编辑、升级、监控等治理操作。 服务使用者可针对不需要的服务实例进行销毁。 图2 商品服务生命周期 私有服务生命周期 华为云租户将服务包上传为私有服务。 华为云租户使用私有服务创建服务实例。 华为云租户可对服务实例进行编辑、升级、监控等治理操作。 华为云租户可针对不需要的服务实例进行销毁。 图3 私有服务生命周期
  • 特性 云原生服务由业务功能和运维功能两部分组成,业务功能由开发者完成,运维能力可以由开发者自行提供,也可以直接接入OSC服务规范,托管于平台,让平台来提供。后者开发完成的服务,在OSC云平台可以确保业务功能正常并实现自动化运维。 核心特性 指定部署平台:选择服务可部署的应用平台,支持云容器引擎、华为云UCS应用部署平台。 声明式对接平台运维能力:在服务包中添加运维能力对应的配置文件,无需修改业务代码,就能对接监控、日志、弹性伸缩等运维能力。 服务编排:可指定服务之间的拓扑依赖关系。 兼容社区规范:全面兼容Helm和Operator Framework服务管理规范。
  • statusDescriptors statusDescriptor用于描述自定义资源中状态字段的属性,其配置在csd.yaml文件的status字段。statusDescriptors的结构与specDescriptors相似,包括相同的字段。 text x-descriptors: 文本形式公开实例的状态字段。 status: [PATH_TO_THE_FIELD]: [FIELD_VALUE] 例子: - description: 版本 displayName: 版本 path: version x-descriptors: - urn:alm:descriptor:text 2. link 此描述符用来公开实例的外部链接。它需要实例的状态块中的输出格式: status: [PATH_TO_THE_FIELD]: [FIELD_VALUE] 例子: - description: 开启公网访问后,可通过弹性公网IP访问,集群模式暂不支持 displayName: CCE集群内访问地址 path: publishedEndpoint restriction: scenes: - CCE x-descriptors: - urn:alm:descriptor:com.huawei.ui:link 实例status字段具体值信息如下: status: publishedEndpoint: 'http://kafka-1wppvf-broker.default.svc.cluster' 父主题: 自定义控件
  • 术语 表1 主要术语 名称 介绍 服务包 符合OSC服务包规范的一系列文件聚合,分为公有包和私有包,分别由服务提供商和一般租户开发。 服务目录 OSC平台提供,对公共服务包进行聚合呈现。 公共能力 由OSC平台提供的监控、运维等能力,所有服务包均可通过在vendor目录中声明配置文件,使用公共能力。 订阅 对已发布的商品服务进行订阅,以备进行服务部署。 服务实例 用户通过部署服务后创建的实例。 自定义资源 服务开发者根据自身需求定制的Kubernetes资源对象。 自定义服务 OSC设计的通过声明式为CRD增强服务能力,包括能力引用,服务依赖,服务访问,交互体验等。