云服务器内容精选
-
标识服务来源 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控件
更多精彩内容
CDN加速
GaussDB
文字转换成语音
免费的服务器
如何创建网站
域名网站购买
私有云桌面
云主机哪个好
域名怎么备案
手机云电脑
SSL证书申请
云点播服务器
免费OCR是什么
电脑云桌面
域名备案怎么弄
语音转文字
文字图片识别
云桌面是什么
网址安全检测
网站建设搭建
国外CDN加速
SSL免费证书申请
短信批量发送
图片OCR识别
云数据库MySQL
个人域名购买
录音转文字
扫描图片识别文字
OCR图片识别
行驶证识别
虚拟电话号码
电话呼叫中心软件
怎么制作一个网站
Email注册网站
华为VNC
图像文字识别
企业网站制作
个人网站搭建
华为云计算
免费租用云托管
云桌面云服务器
ocr文字识别免费版
HTTPS证书申请
图片文字识别转换
国外域名注册商
使用免费虚拟主机
云电脑主机多少钱
鲲鹏云手机
短信验证码平台
OCR图片文字识别
SSL证书是什么
申请企业邮箱步骤
免费的企业用邮箱
云免流搭建教程
域名价格