华为云用户手册

  • 安装节点 在安装前请检查机器网络是否正常,是否能够连接到公网。 在安装之前请检查机器时间是否和北京时间一致,如果偏差过大会导致安装失败。 选择支持架构和安装目录之后,按照图中框选地方获取。 图4 获取安装命令 鸿蒙操作系统下默认未安装wget以及openssl,因此需要将安装命令拆解为以下几步执行。如图为安装命令的拆分图解 图5 命令拆解 其中第①步为下载安装包,第②步为安装包完整性校验(可以跳过),第③步为执行安装命令。 根据步骤二的说明获取安装包的下载命令并通过浏览器下载。 安装包下载链接:https://ioe-installer-cn-north-4.obs.cn-north-4.myhuaweicloud.com:443/edgeRuntime-2022.1222.1216.38-openharmony.tar.gz/1671689782293/edgeRuntime-2022.1222.1216.38-openharmony.tar.gz?AccessKeyId=VGC*****CE&Expires=1673949121&Signature=pwx******3D 浏览器下载: 图6 浏览器下载安装包 在windows上通过hdc_std工具,将下载的安装包上传到鸿蒙设备的/data/zh下并查看,上传的目录建议在/data/目录或者子目录下。 图7 上传文件到鸿蒙设备 图8 登录鸿蒙设备控制台 图9 确定文件成功上传 注意执行命令:mount -oremount,rw / , 该命令必须执行,修改鸿蒙文件系统的可读写权限,以防安装失败。 图10 解压安装包 在/data/zh下执行解压命令。至此安装包已经解压在/data/zh。并不一定必须在/data/zh目录下,仅仅因为上传到这个目录下。实际执行时,安装上传的实际目录进行操作。 上述几步执行完成后就可以进行最后的安装操作。 因为前面步骤可能会耗费一些时间,所以此时需要确认安装命令是否过期,避免本次安装以为验证码过期而安装失败,安装命令的有效时间为30min。 如果是公网安装,可以提前测试网络是否正常,ping www.baidu.com. 命令拆分步骤中的第三步标识了安装命令的获取,安装命令示例: INSTALL_IOTEDGE_BIN_DIR=/data/zh/IoTEdge sh edge_install.sh 100.94.60.201 8943 795632095371472896 sys_edge_daemon 02******1a cloud false lite DEFAULT && cd – 执行安装命令: 图11 执行安装命令 安装成功: 图12 安装成功 查看节点状态以及应用状态 图13 节点状态 图14 应用状态 部署$edge_omagent测试功能 $edge_omagent部署时根据架构选择对应的版本,此处部署$edge_omagent的最新的arm64版本。 图15 部署$edge_omagent应用 图16 指标采集
  • 主节点异常重装 当主节点因为一些异常原因不能够继续使用时,需要更换服务器来继续提供主节点的功能支持,需要进行主节点的重新安装动作。 主节点主机状态已经离线且不会继续进行工作,如下图所示。 手动进行原有异常主节点的卸载动作,以防后续恢复正常后影响当前主备的正常工作。 图24 重装主节点 在主备配置页签,单击主节点“重新安装”字样,获取安装命令。 请确定原有主节点主机状态已经离线且不会继续进行工作。 图25 获取主节点安装命令 登录新的主节点机器,执行主节点的重装命令。 图26 执行安装命令 如下表示主节点安装成功。 图27 安装成功 查看console界面确认主节点已在线。 图28 查看主备状态 至此,主节点重装完成。
  • 安装备节点 选择您的边缘节点,单击“节点名称”进入节点详情页。 在左侧导航栏选择“主备配置”页面获取“获取备节点安装命令”。 主节点和备节点设置绑定的网卡之间网络一定需要能够正常访问,否则会出现主备异常。 登录边缘节点主备用机器,检查主备机时间偏差,保持在30S以内,否则可能会出现备节点安装失败。 图8 安装备节点 登录边缘节点备用机器,执行安装命令。 图9 执行安装命令 如下表示备节点安装成功。 图10 安装成功 备节点默认只运行edge_agent以及edge_keepakive模块,其余模块为created状态。 图11 运行状态
  • 简单测试 模拟当前工作节点发生故障,不再往备节点发送心跳包。 停止主节点sys_edge_keepalive来模拟宕机情况 图15 模拟宕机 停止后查看应用状态,sys_edge_hub已进入created状态。查看浮动ip情况,发现原主节点vip已移除。 图16 查看IP信息 查询看备节点浮动ip和模块运行状态。 图17 查看运行状态 浮动ip已经绑定到备节点eth0网卡上,且业务模块都在原备节点上正常运行。 在console查看主备信息,工作节点已经切换到主机名为ecs-8bc3-0003的备用机器上。 图18 查看主备状态 至此,简单主备切换测试已经完成。
  • 备节点异常重装 当备节点因为一些异常原因不能够继续使用时,需要更换服务器来继续提供备节点的功能支持,需要进行备节点的重新安装动作。 前提条件: 备节点主机状态已经离线且不会继续进行工作,如下图所示。 手动进行原有异常备节点的卸载动作,以防后续恢复正常后影响当前主备的正常工作。 图19 重装备节点 在主备配置页签,单击备节点“重新安装”字样,获取安装命令。 请确定原有备节点主机状态已经离线且不会继续进行工作。 图20 获取备节点安装命令 登录新的备节点机器,执行备节点的重装命令。 图21 执行安装命令 如下表示备节点安装成功。 图22 安装成功 查看console界面确认备节点已在线。 图23 查看主备状态 至此备节点重装完成。
  • 使用约束 主备配置时,所绑定的硬件网关上的网卡,需要在同一个网络内,保证心跳正常。 主备网关之间需要设置正确的iptables,防止心跳网络异常。 建议排查防火墙设置,如果防火墙没有关闭需要增加vrrp放通策略。 专业版kubeEdge部署类型的节点不支持主备配置。 如果需要删除主备配置,建议先在后安装的备主机上进行卸载操作(执行卸载命令 sh /opt/IoTEdge-Installer/uninstall.sh),然后删除主备配置,保留第一个安装的主机。如果后安装的备主机如果没有进行卸载操作,删除主备配置默认会将应用停止掉,影响该节点的运行。 设置错误的网卡名称会导致模块edge-keepalive工作在故障状态,导致主备不能够正常工作。 当前edge-keepalive升级会导致主备切换,所以不建议对edge-keepalive进行升级操作。 主备情况下,主节点主机状态必须离线才支持重装,节点不一定离线。 备节点离线才支持重装。备节点重装时,主节点必须在线。 主备情况下,主节点重装不支持修改设备密码以及设置验证码,只能后台随机生成。 主备切换时长(切换成功并且业务恢复)与网关上安装的应用数量、应用启动时间、点位数有关。 在主备切换期间,没有办法处理数据,数据是丢失的。
  • 添加主备配置 选择您的边缘节点,单击“节点名称”进入节点详情页。 在左侧导航栏选择“主备配置”单击“主备配置”。 图4 主备配置 信息填写后,单击“确认”。 图5 网络配置 表1 主备配置 参数名称 描述 主网卡名称 表示主节点上虚拟IP所绑定使用的网卡名字,如eth0、eth1等,注意名称不要写错,写错会导致vip绑定失败。 备网卡名称 表示备节点上虚拟IP所绑定使用的网卡名字,如eth0、eth1等。 浮动虚拟IP 表示对外提供的一个虚拟IP(IPv4),供设备连接使用,具体虚拟IP按照自身业务规划设定。 IPv6地址 表示对外提供的一个IPv6地址,供设备连接使用,具体按照自身业务规划设定。 查看ip信息。使用ip a查看主节点ip信息,如果当前设置均没有错误的话,在主节点上机器上已经可以查到已绑定的虚拟IP,例如当前设置的vip为172.30.0.201,主节点绑定的网卡为eth0。 图6 查看IP信息 查看网卡名称可以使用ifconfig查看,如下: 图7 查看网卡名称
  • 排查和编辑镜像地址 提供商上传服务包后,镜像会保存到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中的配置。
  • 标识服务来源 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目录下。
  • 前置说明 上传商用服务的账号须具有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 私有服务生命周期
  • 特性 云原生服务由业务功能和运维功能两部分组成,业务功能由开发者完成,运维能力可以由开发者自行提供,也可以直接接入OSC服务规范,托管于平台,让平台来提供。后者开发完成的服务,在OSC云平台可以确保业务功能正常并实现自动化运维。 核心特性 指定部署平台:选择服务可部署的应用平台,支持云容器引擎、华为云UCS应用部署平台。 声明式对接平台运维能力:在服务包中添加运维能力对应的配置文件,无需修改业务代码,就能对接监控、日志、弹性伸缩等运维能力。 服务编排:可指定服务之间的拓扑依赖关系。 兼容社区规范:全面兼容Helm和Operator Framework服务管理规范。
  • 术语 表1 主要术语 名称 介绍 服务包 符合OSC服务包规范的一系列文件聚合,分为公有包和私有包,分别由服务提供商和一般租户开发。 服务目录 OSC平台提供,对公共服务包进行聚合呈现。 公共能力 由OSC平台提供的监控、运维等能力,所有服务包均可通过在vendor目录中声明配置文件,使用公共能力。 订阅 对已发布的商品服务进行订阅,以备进行服务部署。 服务实例 用户通过部署服务后创建的实例。 自定义资源 服务开发者根据自身需求定制的Kubernetes资源对象。 自定义服务 OSC设计的通过声明式为CRD增强服务能力,包括能力引用,服务依赖,服务访问,交互体验等。
  • 表单控件配置组合示例 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控件
  • array类型 满足数组类型的输入,支持设置最多项最少项等。 配置示例: type: array title: env description: The DataDog ... items: properties: name: type: string title: name description: Name of ... persistentVolumeSize: type: string title: Persistent Volume Size description: valueFrom: type: object properties: ... 图5 array类型
  • 元数据Metadata 元数据文件:{OSC-Package}/metadata.yaml,配置的是服务包的基本信息,包括名称、版本、描述等相关信息。 metadata.yaml样例: name: example-operator version: "1.0.0" appVersion: 2.1.2 alias: example-operator.v1.0.0 displayName: Example operator briefDescription: example operator with an example instance and action detail: | example operator detail description. source: OpenSource type: operator containerImage: swr.cn-east-3.myhuaweicloud.com/osc-official/example-operator:1.0.0 repository: swr.cn-east-3.myhuaweicloud.com architecture: - x86_64 - aarch64 capabilities: - Basic Install categories: - Database devices: - CPU - GPU - NPU industries: - education - media logo: base64data: iVBORw..... mediatype: image/png maintainers: - email: test@test.com name: test provider: name: Example provider url: https://example.com/ scenes: - CCE - UCS deployScenes: CCE: - self UCS: - self - partnercloud - onpremise - multicloud - attachedcluster links: - name: example link url: http://github.com/3scale/prome 表1 Metadata参数 参数名称 参数描述 参数示例 必选 name 名称,符合正则表达式 ^[a-z][a-z0-9\-]*[a-z0-9]$,如果服务名称为业界具有特殊含义的字符串,为了避免被转义,可使用引号引起来。 example-operator 是 version 版本。建议使用引号,否则YAML会将类似2.0的版本号识别为浮点数。 1.0.0 是 appVersion 应用版本信息,长度小于64 2.1.2 否 alias 别名 example operator 否 displayName 对外显示的名字 Example operator 否 briefDescription 简要描述,长度小于64 参考样例 否 detail 详细描述 参考样例 否 source 包来源,取值范围:{ISV, OpenSource, HuaweiProvided},分别表示独立服务供应商、开源服务、华为自有服务,仅支持配置一个值。默认值为OpenSource OpenSource 否 type 包类型,取值范围:{helm, operator},仅支持配置一个值,默认值为operator operator 否 containerImage 容器镜像 参见样例 否 repository 镜像仓库 swr.huawei.com 否 architecture 支持架构列表,取值范围:{x86_64, aarch64},默认值为x86_64 - x86_64 - aarch64 否 capabilities 能力 Basic Install 否 categories 分类列表,范围不限,如"AI, Database",注意,当前同一个服务不同版本须配置相同内容,一旦配置后当前不支持修改 Database 否 devices 实例运行需要使用的硬件设备列表,取值范围:{CPU, GPU, NPU},默认值为CPU - CPU - GPU 否 industries 行业列表,范围不限,如"education,media" education 否 logo 图标,包含base64data和mediaType两个字段。如果不设置,则使用对应包类型的默认Logo 参考样例 否 maintainers 维护人员列表,包含name和email两个字段,注意,当前同一个服务不同版本仅支持配置相同内容,一旦配置后当前不支持修改 参考样例 否 provider 提供者,包含name和url两个字段,注意,当前同一个服务不同版本须配置相同内容,一旦配置后当前不支持修改 参考样例 否 scenes 部署平台列表,取值列表:{CCE,UCS},分别表示CCE平台和UCS平台,大小写敏感,默认值为CCE。 该字段作为兼容性字段,依赖deployScenes属性: 1)当deployScenes不为空,该字段不起作用 2)当deployScenes为空时,该字段起作用 - CCE - UCS 否 deployScenes 部署场景deployScenes包含部署平台(CCE和UCS)和集群类型两部分: 当部署平台为CCE时:集群类型只支持华为云集群“self”,不设置集群类型表示不限制 当部署平台为UCS时:集群类型支持以下5种,不设置集群类型表示不限制 self partnercloud onpremise multicloud attachedcluster 当部署场景deployScenes未配置,默认只支持部署平台为CCE,且不限制集群类型。 方式一: CCE: - self UCS: - self - partnercloud - onpremise - multicloud - attachedcluster 方式二: CCE: [self] UCS: [self,partnercloud,onpremise, multicloud,attachedcluster] 否 links 附加说明链接列表,包含name和url两个字段,例如项目介绍链接 参考样例 否 父主题: 服务包规范
  • 资源配置 和K8S配套的资源控件,可以设置limit和request。 配置示例: - path: resources displayName: 单节点规格 description: "单节点Redis的内存规格,因系统开销,实际使用内存是所填数值的1.25倍" x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:resourceRequirements"
  • 显示联动 支持控件的展示联动。 配置示例: - path: field_dependency_test.value2 description: 依赖value1 开 displayName: value2 x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:fieldDependency:field_dependency_test.value1:true" 图7 控件显示联动
  • 下拉框 支持设置枚举项,使用下拉框展示。 配置示例: - path: select_test displayName: select_test description: "select_test" x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:select:option1" - "urn:alm:descriptor:com.tectonic.ui:select:option2" 图3 下拉框UI
  • 镜像拉取策略 预设的镜像拉取策略控件。 配置示例: - path: pull_policy_test displayName: pull_policy_test description: "pull_policy_test" x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:imagePullPolicy" 图4 镜像拉取策略控件
  • K8S资源对象 支持控件查询指定资源对象,目前支持configmap和secret。 配置示例: - path: k8sResource_secret description: k8sResource_secret displayName: k8sResource_secret x-descriptors: - urn:alm:descriptor:io.kubernetes:Secret - path: k8sResource_configmap description: k8sResource_configmap displayName: k8sResource_configmap x-descriptors: - urn:alm:descriptor:io.kubernetes:ConfigMap 图5 K8S资源对象
  • 对接流程 获取OSC规范开发的服务包,如果只有原生的helm或OperatorFramework包,可以参考章节服务包转换进行转换。 在目录manifests/vendor下新增配置文件log_config.yaml 配置规则如下所示: apiVersion: osc.io/v1 kind: LogConfig metadata: name: kafka-log spec: logConfigItems: - labelSelector: app.kubernetes.io/component: kafka app.kubernetes.io/version: "20.9.3" logPaths: - /var/kafka/ - /var/kafka/access/kafka-access.log 具体参数说明如下: 参数名 含义 类型 是否必填 备注 apiVersion 配置版本 string 是 固定为osc.io/v1 kind 配置种类 string 是 固定为LogConfig metadata.name 配置名 string 否 日志配置默认名称 须知: 目前对于log_config.yaml文件,一个服务包内有且仅有一个,目前该名字没有实际业务意义。在服务包下发时会根据服务包名称等,由OSC自动生成一个在Kubernetes集群该Namespace下面唯一的名字。 labelSelector 匹配实例的标签 string数组 是 同一operator CRD下也可能存在多个工作负载,需要通过label selector与应用实例label相关联。 此label要求和用户需要对接日志的工作负载中的label字段完全匹配,从而保证ops应用可以扫描到并进行绑定日志 logPaths 日志路径或文件 string数组 是 容器内日志路径,可填多个,但不允许存在包含关系。 日志内的路径支持目录和文件 目录:扫描此目录下的所有为log,out,trace结尾的日志并对接 文件:只对接指定的文件 在manifests/xxx_csd.yaml文件中增加引用日志能力的配置。 apiVersion: osc.io/v1beta1 kind: CustomServiceDefinition metadata: name: helmrelease-csd spec: CRDRef: apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition capabilityRequirements: - apiVersion: osc.io/v1 kind: LogConfig defaultPath: vendor/log_config.yaml 如下为一个具体的应用配置日志样例进行说明。 apiVersion: osc.io/v1 kind: LogConfig metadata: name: hwfka-log spec: logConfigItems: ## 同一operator CRD下也可能存在多个工作负载, ## 需要通过label selector将应用实例与相应的ops配置相关联 - labelSelector: osc.huawei.com/service_provider: hwfka osc.huawei.com/component: broker crd: hwfkas.osctest.huawei.com logPaths: - /opt/kafka/logs - labelSelector: osc.huawei.com/service_provider: hwfka osc.huawei.com/component: zookeeper crd: hwfkas.osctest.huawei.com logPaths: - /opt/kafka/logs - labelSelector: osc.huawei.com/service_provider: hwfka osc.huawei.com/component: kafkamanager crd: hwfkas.osctest.huawei.com logPaths: - /opt/cmak-3.0.0.5/logs
共100000条