云服务器内容精选

  • 标识服务来源 OSC提供来自开源、华为自研以及生态伙伴的服务,生态伙伴需要在服务包中固定字段进行标记说明服务来自生态伙伴。 operator服务 以etcd operator为例,etcdoperator.v0.9.4.clusterserviceversion.yaml的内容为: apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion metadata: annotations: capabilities: Full Lifecycle categories: Database containerImage: quay.io/coreos/etcd-operator@sha256:66a37fd61a06a43969854ee6d3e21087a98b93838e284a6086b13917f96b0d9b createdAt: 2019-02-28 01:03:00 description: Create and maintain highly-available etcd clusters on Kubernetes repository: https://github.com/coreos/etcd-operator tectonic-visibility: ocs name: etcdoperator.v0.9.4 namespace: placeholder ... 编辑文件。 在metadata/annotations添加source字段,取值为ISV。 apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion metadata: annotations: source: ISV capabilities: Full Lifecycle categories: Database containerImage: quay.io/coreos/etcd-operator@sha256:66a37fd61a06a43969854ee6d3e21087a98b93838e284a6086b13917f96b0d9b createdAt: 2019-02-28 01:03:00 description: Create and maintain highly-available etcd clusters on Kubernetes repository: https://github.com/coreos/etcd-operator tectonic-visibility: ocs name: etcdoperator.v0.9.4 namespace: placeholder ... 打包到package目录。 把operator包压缩成zip格式,放至package目录下。 package目录下只能包含一个Operator压缩包,确保使用这个包可以将整个服务部署起来。 etcd/ | --- package/ | --- etcd-operator-0.9.4.zip | --- images/ | --- etcd-3.5.0-x86_64.tar | --- etcd-3.5.0-aarch64.tar | --- extends/ Helm服务 以etcd helm为例,Chart.yaml的内容为: annotations: category: Database apiVersion: v2 appVersion: 3.4.14 dependencies: - name: common repository: https://charts.bitnami.com/bitnami tags: - bitnami-common version: 1.x.x description: etcd is a distributed key value store that provides a reliable way to store data across a cluster of machines ... 编辑Chart.yaml文件。 如果有annotations属性,则添加子属性source,取值为ISV,如果没有annotations属性,则先添加annotations属性,再添加子属性source。 annotations: source: ISV category: Database apiVersion: v2 appVersion: 3.4.14 dependencies: - name: common repository: https://charts.bitnami.com/bitnami tags: - bitnami-common version: 1.x.x description: etcd is a distributed key value store that provides a reliable way to store data across a cluster of machines ... 打包放置到package目录: etcd/ | --- package/ | --- etcd-helm-6.7.0.tgz | --- images/ | --- etcd-3.5.0-x86_64.tar | --- etcd-3.5.0-aarch64.tar | --- mapping.yaml package目录下只能包含一个Helm模板包,确保使用这个包可以将整个服务部署起来。
  • 配置实例版本定义信息(可选) OSC提供配置实例版本定义信息以支持实例升级的能力。 Operator类型实例 以redis为例, redis的cr内容如下所示: apiVersion: redis.osc/v1 kind: Redis metadata: annotations: osc.huawei.com/package-source: public osc.io/occupied-port: 135,139 creationTimestamp: '2021-09-29T03:21:57Z' finalizers: - storage.finalizers.redis.cluster generation: 2 name: redis-fwpydh namespace: default resourceVersion: '91743432' selfLink: /apis/redis.osc/v1/namespaces/default/redises/redis-fwpydh uid: 96f0203c-0ae0-48bb-b2b8-b08d2055b0e2 spec: config: name: default-redis-fwpydh-unvu7g properties: aof-load-truncated: 'yes' aof-use-rdb-preamble: 'no' appendfsync: everysec appendonly: 'no' hash-max-ziplist-entries: 512 hash-max-ziplist-value: 64 latency-monitor-threshold: 100 list-max-ziplist-size: -2 loglevel: notice maxauthfailtimes: 100 maxclients: 10000 maxmemory-policy: noeviction repl-diskless-sync: 'yes' set-max-intset-entries: 512 slowlog-log-slower-than: 10000 stop-writes-on-bgsave-error: 'no' timeout: 0 zset-max-ziplist-entries: 128 zset-max-ziplist-value: 64 image: swr.cn-east-3.myhuaweicloud.com/osc-official/redis:21.9.18_20210918221431 masterSize: 1 mode: RedisHA ...... ...... 此处中间省略 ...... ...... phase: Available serviceAddr: redis-ha-redis-fwpydh.default.svc.cluster.local:6379 serviceAddrReadonly: redis-ha-redis-fwpydh-readonly.default.svc.cluster.local:6379 version: 21.9.18_20210918221431 编辑文件 实例版本定义配置是在csd文件中配置versionDefinition,实例版本定义支持operator类型和Helm类型。 versionDefinition: mode: url path: spec.image tags: - 0.0.1 - 0.0.2 - 0.0.3 打包到package目录。 把operator包压缩成zip格式的压缩包,放到package目录下。 Helm服务 以clickhouse helm为例,values.yaml的内容如下: ## Timezone timezone: "Asia/Shanghai" ## Cluster domain clusterDomain: "cluster.local" ## ## Clickhouse Node selectors and tolerations for pod assignment ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#taints-and-tolerations-beta-feature ## # nodeSelector: {"beta.kubernetes.io/arch": "amd64"} # tolerations: [] ## Clickhouse pod/node affinity/anti-affinity ## #affinity: # nodeAffinity: # requiredDuringSchedulingIgnoredDuringExecution: # nodeSelectorTerms: # - matchExpressions: # - key: "application/clickhouse" # operator: In # values: # - "true" clickhouse: ## StatefulSet controller supports relax its ordering guarantees while preserving its uniqueness and identity guarantees. There are two valid pod management policies: OrderedReady and Parallel ## ref: https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/#pod-management-policy ## podManagementPolicy: "Parallel" ## StatefulSet controller supports automated updates. There are two valid update strategies: RollingUpdate and OnDelete ## ref: https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/#updating-statefulsets ## updateStrategy: "RollingUpdate" ## Partition update strategy ## https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#partitions ## # rollingUpdatePartition: ## ## The path to the directory containing data. ## Default value: /var/lib/clickhouse path: "/var/lib/clickhouse" ## ## The port for connecting to the server over HTTP http_port: "8123" ## ## Port for communicating with clients over the TCP protocol. tcp_port: "9000" ## ## Port for exchanging data between ClickHouse servers. interserver_http_port: "9009" ## ## The instance number of Clickhouse replicas: "3" ## Clickhouse image configuration. image: "swr.cn-east-3.myhuaweicloud.com/osctest/clickhouse-server" imageVersion: "0.0.1" imagePullPolicy: "IfNotPresent" imageBusybox: "swr.cn-north-7.myhuaweicloud.com/osctest/busybox:1.26.2" #imagePullSecrets: ## Periodic probe of container liveness. Container will be restarted if the probe fails. Cannot be updated. ## More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes livenessProbe: enabled: true initialDelaySeconds: "30" periodSeconds: "30" timeoutSeconds: "5" failureThreshold: "3" successThreshold: "1" ## Periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. Cannot be updated. ## More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes readinessProbe: enabled: true initialDelaySeconds: "30" periodSeconds: "30" timeoutSeconds: "5" failureThreshold: "3" successThreshold: "1" ## volumeClaimTemplates is a list of claims that pods are allowed to reference. ## The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. ## Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. ## A claim in this list takes precedence over any volumes in the template, with the same name. persistentVolumeClaim: enabled: false ## Clickhouse data volume dataPersistentVolume: enabled: false accessModes: - "ReadWriteOnce" storageClassName: "-" storage: "500Gi" ## Clickhouse logs volume logsPersistentVolume: enabled: false accessModes: - "ReadWriteOnce" storageClassName: "csi-disk" storage: "50Gi" ## ## An API object that manages external access to the services in a cluster, typically HTTP. ## Ingress can provide load balancing, SSL termination and name-based virtual hosting. ingress: enabled: false # host: "clickhouse.domain.com" # path: "/" # tls: # enabled: false # hosts: # - "clickhouse.domain.com" # - "clickhouse.domain1.com" # secretName: "clickhouse-secret" ## ## Clickhouse config.xml and metrica.xml ...... ...... 后续省略 ...... ...... 编辑文件。 实例版本定义配置是在csd文件中配置versionDefinition,实例版本定义支持operator类型和Helm类型。 versionDefinition: mode: tag path: clickhouse.imageVersion tags: - 0.0.1 - 0.0.2 - 0.0.3 打包到package目录。 把Helm包压缩成zip格式的压缩包,放到package目录下。
  • 排查和编辑镜像地址 提供商上传服务包后,镜像会保存到OSC的仓库中,提供商在上传前无法知道镜像的实际保存地址,OSC在提供商上传服务后只把value.yaml或者*.clusterserviceversion.yaml中配置的镜像地址替换成实际的镜像地址。 提供商需排查Helm模板或者Operator服务包中的其它镜像地址都是引用values.yaml或者*.clusterserviceversion.yaml中的配置。如果满足,可直接查看替换镜像地址配置。 以etcd helm为例,Helm模板目录结构如下所示: etcd/ | --- templates/ | --- secrets.yaml | --- servicemonitor.yaml | --- snapshot-pvc.yaml | --- statefulset.yaml | --- svc-headless.yaml | --- svc.yaml | --- Chart.lock | --- Chart.yaml | --- README.md | --- values.yaml 其中values.yaml文件内容是: image: registry: docker.io repository: bitnami/etcd tag: 3.4.14-debian-10-r44 debug: false volumePermissions: enabled: false image: registry: docker.io repository: bitnami/minideb tag: buster pullPolicy: Always resources: limits: {} # cpu: 100m # memory: 128Mi requests: {} # cpu: 100m # memory: 128Mi ... templates/statefulset.yaml中引用了values.yaml配置镜像地址的变量: containers: - name: etcd-snapshotter image: {{ include "etcd.image" . }} imagePullPolicy: {{ .Values.image.pullPolicy | quote }} 服务包上传后实际的镜像地址是swr.cn-east-3.myhuaweicloud.com/osc-opensource/etcd:3.4.14-debian-10-r44,OSC会自动替换服务包中values.yaml中的镜像地址,保证服务部署时能从OSC的仓库中拉取镜像,values.yaml会被替换成: image: registry: swr.cn-east-3.myhuaweicloud.com repository: osc-opensource/etcd tag: 3.4.14-debian-10-r44 因为Helm模板中其它镜像地址是引用values.yaml的配置,因此OSC替换了values.yaml后能保证部署时拉取到正确的镜像。 对于Operator服务,请排查服务包中的镜像地址都是引用*.clusterserviceversion.yaml中的配置。
  • 前置说明 上传商用服务的账号须具有ISV权限,具体申请方式请参见如何加入华为云云市场。 使用商用服务发布的账号需要在上海一region下创建一个OBS桶,桶创建要求如下: 表1 OBS桶创建参数说明 参数 值 说明 区域 上海一 只能选上海一,不能选其它区域,OSC虽然是Global服务,但本身部署在上海一。 默认加密 关闭 OSC无法获取到OBS加密秘钥,因此不能打开桶的默认加密策略。 如果已经有可用OBS桶,可跳过此步骤,表中的参数需要按要求填写,其它的可选默认值。 合作伙伴上传的服务包,需要保证元数据文件中配置provider或者maintainer字段数据,从而可以将上架服务包在市场中展示服务提供商的联系方式。 用户已经阅读并了解OSC服务开发者指南和OSC服务使用者指南,已确认过需要发布的服务包符合OSC支持的规范并在具体环境验证通过后,再进行相关操作处理。 父主题: 服务发布
  • 创建服务 使用ISV账号登录OSC控制台,单击左侧导航栏“服务发布”,查看右侧服务发布流程。 单击“创建服务”按钮,在“创建服务”弹框页面填写“名称”、“描述”,并选择模板仓库和镜像仓库的后端地址。 名称:填写需要上传的服务包中的名称。 描述:用于描述此服务的相关功能描述等。 模板仓库:用于存储服务包中的operator、helm chart或者osc规范包的模板文件。 镜像仓库:用于存储服务包中的容器镜像。如果用户没有对应的仓库组织,可单击“新建组织”跳转到对应页面进行创建。可参考创建组织。 单击“确定”按钮,创建服务完成。 父主题: 服务发布
  • 服务包目录结构约束 OSC作为一个服务生命周期管理平台,有自定义的服务模型,服务需满足目录格式要求才能被OSC解析,发布到OSC上。 {ServiceName}-{Version}.zip #【必选】服务包 └─{ServiceName}/ #【必选】服务包目录 ├─package/ #【必选】部署包目录 │ ├─{serviceName}-{Version}.zip #【必选】开源operator部署包或者转换后的osc格式部署包 │ └─{serviceName}-{Version}.tgz #【必选】Helm部署包 └─images/ #【可选】镜像目录 ├─{images1}.tar #【可选】镜像文件 ├─{images2}.tar ├─ ... └─ mapping.yaml #【可选】镜像地址替换映射文件 package目录只有一个部署包,如果是由Helm改造,就是{serviceName}-{Version}.tgz,如果是Operator改造,是{serviceName}-{Version}.zip,如果是OSC格式转换,是{serviceName}-{Version}.zip。 命名规范: serviceName:服务名称。目前服务名称仅接受英文大小写字母、数字及中划线(-)的组合。在服务发布中,创建服务名称其输入长度最大为64个字符。 version:服务的版本号。服务版本号请遵循SemVer规范进行书写,但不支持SemVer中带有+的版本号。 服务包各个文件命名以及约束 名称 格式 建议参数说明 用途 必选 服务包 {ServiceName}-{Version}.zip 建议服务名+版本号+zip命名 用于发布到OSC市场的最终交付包,zip格式压缩包。 是 服务包目录 {ServiceName} 建议服务名来命名 总服务包目录。 是 部署包目录 package 固定名称,不可修改 OSC兼容两种开源规范,Helm和Operator,package目录用于存放服务的Helm模板或者Operator包,两种类型二选一。 是 osc部署包 {serviceName}-{Version}.zip 服务名+版本号+zip命名 osc部署包,参考《OSC服务开发者指南》章节2.2《服务包规范》转换operator或Helm生成的服务包。 是 operator部署包 {serviceName}-{Version}.zip 服务名+版本号+zip命名 operator部署包,参考Operator framework方式生成。 是 helm部署包 {serviceName}-{Version}.tgz 服务名+版本号+tgz命名 Helm部署包,参考开源Helm格式生成即可。 是 镜像目录 images 固定名称,不可修改 存放服务包的镜像目录,当镜像是让用户从外部拉取,镜像目录可不要。 否 镜像文件 {images}.tar 镜像文件,tar格式结尾 镜像文件。 否 镜像地址索引文件 mapping.yaml 固定名称,不可修改 OSC通过这个文件判断Helm模板或者Operator包中配置镜像的字段,以便将这些镜像地址替换成OSC仓库中实际的镜像地址。 否 示例 etcd Operator服务 etcd.zip | --- etcd/ | --- package/ | --- etcd-operator-0.9.4.zip #etcd Operator包,必须是zip格式的压缩包 | --- images/ | --- etcd-operator-0.9.4.tar #etcd Operator的镜像 | --- etcd-3.5.0.tar #etcd 的镜像 | --- mapping.yaml etcd Helm服务 etcd.zip | --- etcd/ | --- package/ | --- etcd-helm-6.7.0.tgz #etcd helm模板包,必须为tgz的格式 | --- images/ | --- etcd-3.5.0.tar # etcd 的镜像 | --- mapping.yaml 父主题: 约束与说明
  • 镜像拉取配置说明 此配置主要针对用户发布的服务包中带有镜像,需要授权给对应的购买用户者下载使用时需要增加的步骤。 用户需要在用户部署的deployment.yaml、statefulset.yaml等包含镜像下载的文件中增加如下配置。 apiVersion: apps/v1 kind: Deployment metadata: name: example spec: replicas: 1 spec: serviceAccountName: details containers: - name: details image: "{{ .Values.global.hub }}/details:1.5.0" imagePullPolicy: IfNotPresent restartPolicy: Always imagePullSecrets: - name: default-secret 父主题: 约束与说明
  • 新增版本 使用ISV账号登录OSC控制台,单击左侧导航栏“服务发布”。 单击新创建的服务右侧“操作“栏中的“新增版本”,进入新增版本页面。 填写“服务版本”,选择对应的OBS桶,关联需要上传到OSC平台的服务包,完成后单击“确认”即可完成添加版本操作。 如果没有OBS桶,则可以单击“新建桶”进行跳转到对应页面进行创建并上传服务包。 当前OSC仅支持中心region(上海一)下的桶对接使用。 服务版本添加完成,服务版本转为“待发布”状态,用户可在“我的服务”-“私有服务”中查看验证。 父主题: 服务发布
  • 简介 云原生服务中心(Operator Service Center,OSC)服务规范旨在给出一种与云平台解耦的云原生服务的标准定义,可描述云原生服务在分布式云的部署和治理。 部署:云原生服务中心联合华为云分布式服务UCS,能够将应用部署到华为云集群、多云集群、本地集群、附着集群、伙伴集群五种场景,实现应用的跨云和全域部署。 治理:容器化只是服务云原生化的第一步,服务部署之后需要治理,不仅包括监控、日志、告警等基本运维能力,还包括弹性伸缩、数据备份恢复、故障迁移、故障恢复等高级运维能力,这些能力是服务高可靠、高可用、高SLA的必要条件。严重依赖云平台的能力,对开发者而言都是重复开发工作,高效快速地赋予服务这些能力是开发者面临的一个难题。 当前最常用的服务管理标准Helm和Operator都没有提供开箱即用的治理能力,为此华为云推出了云原生服务中心OSC,开发者基于服务规范和华为云OSC快速赋予服务全域部署能力和治理能力。
  • 服务生命周期 服务包分为商品服务包和私有服务包。商品包只能由具备ISV资质的租户(服务提供商)进行发布,发布前需经过服务包格式校验、镜像扫描、镜像地址替换、服务自验证等流程,经审核后方可上架。上架后的服务可被其他租户(服务使用者)所使用。而私有包可以由任何一个租户发布,发布后仅由租户自己使用。 商品服务生命周期 服务提供商将服务包上传到华为云云市场,发布成为云市场的商品服务。 服务使用者在云市场购买商品服务,该商品服务变成该用户的已订阅服务。 服务使用者通过已订阅服务创建服务实例。 服务使用者可对服务实例进行编辑、升级、监控等治理操作。 服务使用者可针对不需要的服务实例进行销毁。 图2 商品服务生命周期 私有服务生命周期 华为云租户将服务包上传为私有服务。 华为云租户使用私有服务创建服务实例。 华为云租户可对服务实例进行编辑、升级、监控等治理操作。 华为云租户可针对不需要的服务实例进行销毁。 图3 私有服务生命周期
  • 术语 表1 主要术语 名称 介绍 服务包 符合OSC服务包规范的一系列文件聚合,分为公有包和私有包,分别由服务提供商和一般租户开发。 服务目录 OSC平台提供,对公共服务包进行聚合呈现。 公共能力 由OSC平台提供的监控、运维等能力,所有服务包均可通过在vendor目录中声明配置文件,使用公共能力。 订阅 对已发布的商品服务进行订阅,以备进行服务部署。 服务实例 用户通过部署服务后创建的实例。 自定义资源 服务开发者根据自身需求定制的Kubernetes资源对象。 自定义服务 OSC设计的通过声明式为CRD增强服务能力,包括能力引用,服务依赖,服务访问,交互体验等。
  • 特性 云原生服务由业务功能和运维功能两部分组成,业务功能由开发者完成,运维能力可以由开发者自行提供,也可以直接接入OSC服务规范,托管于平台,让平台来提供。后者开发完成的服务,在OSC云平台可以确保业务功能正常并实现自动化运维。 核心特性 指定部署平台:选择服务可部署的应用平台,支持云容器引擎、华为云UCS应用部署平台。 声明式对接平台运维能力:在服务包中添加运维能力对应的配置文件,无需修改业务代码,就能对接监控、日志、弹性伸缩等运维能力。 服务编排:可指定服务之间的拓扑依赖关系。 兼容社区规范:全面兼容Helm和Operator Framework服务管理规范。
  • 表单控件配置组合示例 csd.yaml文件中配置添加如下配置: # 配置表单控件 descriptors: spec: - displayName: Image description: The docker image name and version of Portworx Enterprise. path: image x-descriptors: - 'urn:alm:descriptor:com.tectonic.ui:text' - displayName: Size description: The desired number of member Pods for the etcd cluster. path: size x-descriptors: - 'urn:alm:descriptor:com.tectonic.ui:podCount' 以v1版本的crd.yaml为例: apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: helmreleases.helm.osc.huawei.com spec: versions: - name: v1alpha1 schema: openAPIV3Schema: description: HelmRelease is the Schema for the helmreleases API properties: apiVersion: type: string kind: type: string metadata: type: object spec: properties: image: type: string size: type: string 配置表单控件后,创建实例时,即可通过表单进行实例创建。 父主题: 配置表单控件
  • 接入流程 用户参考附录oscctl工具使用中的链接下载oscctl工具oscctl-22.8.18.tar.gz,并放在linux执行机中。 执行下面命令解压服务。 # 解压工具包 $ tar -xvzf oscctl-22.8.18.tar.gz oscctl-22.8.18/ oscctl-22.8.18/linux-x86_64/ oscctl-22.8.18/linux-x86_64/oscctl oscctl-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.zip Successfully 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命令,参考上面的步骤操作即可。
  • object控件 结构体格式输入,支持子控件的嵌套。 配置示例: type: object title: Presistence configuration properties: enablePersistence: type: boolean title: Enable Persistence description: Enable persistence using Persistent Volume Claims persistentVolumeSize: type: string title: Persistent Volume Size description: 图4 object控件