云服务器内容精选

  • 使用限制 单账号跟踪的事件可以通过 云审计 控制台查询。多账号的事件只能在账号自己的事件列表页面去查看,或者到组织追踪器配置的OBS桶中查看,也可以到组织追踪器配置的 CTS /system日志流下面去查看。 用户通过云审计控制台只能查询最近7天的操作记录。如果需要查询超过7天的操作记录,您必须配置转储到 对象存储服务 (OBS)或 云日志 服务(LTS),才可在OBS桶或LTS日志组里面查看历史事件信息。否则,您将无法追溯7天以前的操作记录。 云上操作后,1分钟内可以通过云审计控制台查询管理类事件操作记录,5分钟后才可通过云审计控制台查询数据类事件操作记录。 CTS新版事件列表不显示数据类审计事件,您需要在旧版事件列表查看数据类审计事件。 云审计控制台对用户的操作事件日志保留7天,过期自动删除,不支持人工删除。
  • 执行实例运维动作(可选) 服务在运行过程中,一般会对关键数据进行备份操作,在服务异常后可通过备份数据进行恢复,在云原生服务中心中称之为运维动作。 服务如定义了独立的运维动作,则会在实例详情界面展示出一个“Action”页签,单击可展示服务实例当前可执行的运维操作。 以Redis为例,提供了两个运维动作,即备份和恢复,选中后单击“创建”按钮,则可以创建一个备份或者恢复动作,创建完成后则可在右侧查看任务状态。 父主题: 服务实例日常操作
  • 镜像拉取配置说明 此配置主要针对用户发布的服务包中带有镜像,需要授权给对应的购买用户者下载使用时需要增加的步骤。 用户需要在用户部署的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 父主题: 约束与说明
  • 概述 服务提供商是面向OSC合作伙伴,致力于与OSC合作并对外提供商用服务的企业或开发者,本文档介绍提供商如何上传和发布商用服务。 OSC为客户提供开箱即用的云原生服务,可以通过OSC部署到任意基础设施,包括华为云CCE集群、第三方集群等场景。 服务提供商在发布服务时需要提供服务包,服务包中包含部署需要的配置文件以及镜像,并按照OSC可识别的路径放置,保证服务发布中用户可以一键部署。 图1 商品服务生命周期
  • 放置镜像到images目录 images目录下存放服务部署时需要的所有镜像。 以etcd为例,etcd服务包含x86和ARM两种CPU架构的镜像,分别叫etcd-3.5.0-x86_64.tar,etcd-3.5.0-aarch64.tar,那么目录结构为: etcd/ | --- package/ | --- images/ | --- etcd-3.5.0-x86_64.tar | --- etcd-3.5.0-aarch64.tar 有的服务比较复杂,依赖其它的服务,比如kafka依赖zookeeper,zookeeper的镜像也要放置在images目录下: kafka/ | --- package/ | --- images/ | --- kafka-2.5.0-x86_64.tar | --- kafka-2.5.0-aarch64.tar | --- zookeeper-3.4.0-x86_64.tar | --- zookeeper-3.4.0-aarch64.tar 父主题: 制作流程
  • 前置说明 上传商用服务的账号须具有ISV权限,具体申请方式请参见如何加入华为云云市场。 使用商用服务发布的账号需要在上海一region下创建一个OBS桶,桶创建要求如下: 表1 OBS桶创建参数说明 参数 值 说明 区域 上海一 只能选上海一,不能选其它区域,OSC虽然是Global服务,但本身部署在上海一。 默认加密 关闭 OSC无法获取到OBS加密密钥,因此不能打开桶的默认加密策略。 如果已经有可用OBS桶,可跳过此步骤,表中的参数需要按要求填写,其它的可选默认值。 合作伙伴上传的服务包,需要保证元数据文件中配置provider或者maintainer字段数据,从而可以将上架服务包在市场中展示服务提供商的联系方式。 用户已经阅读并了解OSC服务开发者指南和OSC服务使用者指南,已确认过需要发布的服务包符合OSC支持的规范并在具体环境验证通过后,再进行相关操作处理。 父主题: 服务发布
  • Helm规范 Helm的包格式被称为chart,描述Kubernetes相关资源的文件集合。chart包含: Chart.yaml values.yaml values.schema.json charts目录 templates目录 {Helm}/├─ Chart.yaml #【必选】包含了chart信息文件,包括api版本、名称、描述、图标、类型、注释├─ values.yaml #【必选】参数值文档,为templates下的文档配置参数值├─ values.schema.json #【可选】一个使用JSON结构的values.yaml文件├─ charts/ #【可选】包含chart依赖的其他chart└─ templates #【必选】模板目录,当和values 结合时,可生成有效的Kubernetes manifest文件 └─ xxx.yaml #【可选】Helm包的Kubernetes manifest若干文件 更多介绍参见官网Helm。 上传至OSC的helm包中,Chart.yaml文件的icon字段不生效,仅支持以图片形式配置logo,配置方式为:在与Chart.yaml同级的目录中增加logo.png(或jpg,svg后缀)命名的图片。 接入规范说明 父主题: 开源服务包规范
  • 生命周期Lifecycle 生命周期文件:{OSC-Package}/lifecycle.yaml,描述当前OSC服务包的安装,升级方式信息。 lifecycle.yaml文件样例 ## 描述该OSC服务包的声明周期相关信息install: strategy: deployment clusterPermissions: - rules: - apiGroups: - "" resources: - "" verbs: - "" serviceAccountName: sa deployments: - name: example-operator spec: template: metadata: spec:upgrade: replaces: 0.0.1 skips: - 0.0.2 - 0.0.3 operations: logpath: /var/paas/sys/log/operator/xxx-operator.log 表1 Lifecycle配置 参数名称 参数描述 参数示例 必填 install.strategy 安装方式,目前仅支持deployment方式 deployment 否 install.clusterPermissions 安装时需要的集群级别的权限 Kubernetes RABC规范 否 install.deployments 安装时的内容 Kubernetes Deployment规范 是 upgrade.replaces 升级基线版本 0.0.1 否 upgrade.skips 可以跳过升级的版本列表 说明: 举例说明: 假设已经发布0.0.1, 0.0.2, 0.0.3, 0.0.4, 0.0.5五个版本,其中0.0.2配置replaces: 0.0.1,0.0.5配置replace: 0.0.1及skips: 0.0.2。 0.0.2和0.0.5版本都配置基线版本为0.0.1,所以已经部署的0.0.1版本可以升级到0.0.2和0.0.5版本。 0.0.5版本因为配置了跳过0.0.2版本并且基线版本为0.0.1,所以已经部署的0.0.2版本无法升级到0.0.5版本,但是可以先将0.0.2版本回退到0.0.1版本后再次升级到0.0.5版本 参见样例 否 operations 运维操作配置,以注解方式定义 参见样例 否 operations.logpath 日志目录 参见样例 否 对于lifecycle文件中配置了upgrade字段的服务包,需要确保该服务operator能够管理的实例版本(由 CS D文件中的versionDefinition字段规定)与被升级的operator所能管理的实例版本相兼容,否则会导致上传服务包或升级服务operator失败。具体规则请参见versionDefinition。 父主题: 服务包规范
  • object控件 结构体格式输入,支持子控件的嵌套。 配置示例: type: objecttitle: Presistence configurationproperties: enablePersistence: type: boolean title: Enable Persistence description: Enable persistence using Persistent Volume Claims persistentVolumeSize: type: string title: Persistent Volume Size description: 图4 object控件
  • 表单控件配置组合示例 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/v1kind: CustomResourceDefinitionmetadata: name: helmreleases.helm.osc.huawei.comspec: 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 配置表单控件后,创建实例时,即可通过表单进行实例创建。 父主题: 配置表单控件
  • array类型 满足数组类型的输入,支持设置最多项最少项等。 配置示例: type: arraytitle: envdescription: 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类型
  • 对接流程 获取OSC规范开发的服务包,如果只有原生的helm或OperatorFramework包,可以参考章节服务包转换进行转换。 在目录manifests/vendor下新增配置文件log_config.yaml 配置规则如下所示: apiVersion: osc.io/v1kind: LogConfigmetadata: name: kafka-logspec: 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/v1beta1kind: CustomServiceDefinitionmetadata: name: helmrelease-csdspec: CRDRef: apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition capabilityRequirements: - apiVersion: osc.io/v1 kind: LogConfig defaultPath: vendor/log_config.yaml 如下为一个具体的应用配置日志样例进行说明。 apiVersion: osc.io/v1kind: LogConfigmetadata: name: hwfka-logspec: 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
  • 创建服务包模板 通过OSC提供的oscctl工具创建服务包模板,oscctl工具使用详情请参见oscctl工具使用。 使用oscctl工具创建服务包模板。 # 使用oscctl工具,创建服务包$ oscctl create -o ./hwfka-operator-packageSuccessfully created original package to OSC package! 检查服务包目录结构。 # 服务包的结构$ tree hwfka-operator-packagehwfka-operator-package├── lifecycle.yaml #【必选】生命周期文件├── manifests # 【必选】资源合计│ ├─ hwfka_crd.yaml│ └─ hwfka_csd.yaml│ └─ vendor└── metadata.yaml #【必选】元数据文件 父主题: 制作服务包
  • 生成服务包 最终的服务目录结构如下: $ tree hwfka-operator-packagehwfka-operator-package├── lifecycle.yaml├── manifests│ ├─ hwfka_crd.yaml│ └─ hwfka_csd.yaml│ └─ vendor└── metadata.yaml 打包服务包命令如下: $ tar -zcvf hwfka-operator-package.tgz hwfka-operator-package 父主题: 制作服务包
  • 定义API 在设计的CR spec中,包含size、image、storage属性,因此需要修改api/v1/hwfka_types.go中HwfkaSpec和HwfkaStatus部分,为应用定义参数和状态属性。 package v1import (corev1 "k8s.io/api/core/v1""k8s.io/apimachinery/pkg/api/resource"metav1 "k8s.io/apimachinery/pkg/apis/meta/v1")// HwfkaSpec defines the desired state of Hwfkatype HwfkaSpec struct {// INSERT ADDITIONAL SPEC FIELDS - desired state of cluster// Important: Run "make" to regenerate code after modifying this file// +kubebuilder:validation:Minimum=1// +kubebuilder:validation:Maximum=3// +kubebuilder:validation:ExclusiveMaximum=false // 包含最大值Size int32 `json:"size"` // Hwfka 应用包含的 broker 数量Image string `json:"image"` // Hwfka 镜像地址Storage *StorageSpec `json:"storage"` // Hwfka 数据存储相关配置}type StorageSpec struct {Class string `json:"class"`AccessModes corev1.PersistentVolumeAccessMode `json:"accessModes"`Size resource.Quantity `json:"size"`// 华为公有云 EVS 场景需额外指定 diskType, region, zoneDiskType string `json:"diskType,omitempty"` // omitempty 表示可以为空Region string `json:"region,omitempty"`Zone string `json:"zone,omitempty"`}// HwfkaStatus defines the observed state of Hwfkatype HwfkaStatus struct {// INSERT ADDITIONAL STATUS FIELD - define observed state of cluster// Important: Run "make" to regenerate code after modifying this filePhase string `json:"phase,omitempty"` // Hwfka 实例安装状态Server string `json:"server,omitempty"` // Hwfka 访问地址} 使用Kubebuilder,可通过在API结构的属性上定义Markers,自动生成CRD中的spec.validation.openAPIV3Schema,即基于OpenAPI的校验规则,以便校验用户创建的CR中字段值的合法性。如上述设置size属性的最小值和最大值: // +kubebuilder:validation:Minimum=1// +kubebuilder:validation:Maximum=3 详细使用方法参见:CRD Validation。每次修改API定义后,需要执行命令自动重新生成代码和CRD: $ make generate$ make manifests 父主题: 实现Operator