云服务器内容精选
-
服务包来源 OSC服务目录中的服务包来源有两种: 服务提供商作为商品进行上架的服务,此类服务包将对接到华为云市场上,并且在OSC服务目录上将基于“云商店商品”标签。 服务包来源于开源社区,例如ArtifactHub等,此类服务大多数有华为云进行上架并为免费服务。 开源服务包和服务商提供的服务包在提交审核申请后,经由华为云对该服务进行验证和相关审核后,如果该服务具有良好的服务质量和品质,OSC服务目录中将对该服务包增加“华为认证”标签。此类“华为认证”服务包至少能够在华为云CCE集群和U CS On-Premise集群中进行部署,并能够确保功能的可用性、可维护性。
-
功能概述 服务订阅 服务中心包含生态伙伴发布的服务和开源服务,所有服务都支持用户订阅,用户订阅成功才能部署实例。 服务退订 用户可以随时退订服务,退订服务时系统会自动删除已部署的服务及其实例。 服务升级 当服务提供商针对某服务发布了新版本后,订阅此服务的用户会收到升级提示,用户可选择是否将服务升级到最新版本。 实例部署 用户在订阅服务后可部署实例,用户可根据服务能力指定部署的Region、容器集群以及运行参数。 实例运维 云原生服务中心提供实例的运维视图,可以查看实例的监控、日志等运维信息,如果需要深入的数据分析,可以从运维视图跳转到对应的云服务。 实例更新 用户可以修改实例的运行配置。 实例删除 当实例承载的业务生命周期结束,用户可以删除实例回收相关资源。 服务插件 OSC提供的运维能力依赖一些能力插件,这些插件无需用户安装。当服务包中声明了运维能力的相关配置,服务部署时,集群中被依赖的插件如果没有安装,OSC会自动安装。用户可以在插件创建好之后查看插件的事件、日志等,当插件异常时,用户可以重建插件进行恢复。
-
构建CR 通过CustomResource(CR)的方式创建新资源类型,在CR中为应用定义参数和状态属性。 参数 size:应用实例包含的实例数量。 image:应用的容器镜像地址。 storage:应用数据存储相关配置。 状态 phase:应用实例安装状态。 server:应用访问地址。 以创建一个Kafka应用,指定其Pod数量为3为例,设计CR如下: apiVersion: osctest.huawei.com/v1 kind: Hwfka metadata: name: hwfka-sample spec: size: 3 image: swr.cn-north-7.myhuaweicloud.com/osc/kafka:v2.7.0 storage: class: csi-disk accessModes: ReadWriteOnce size: 20Gi diskType: SSD kind为CRD中定义的names.kind。 metadata.name为CR名称,用户可自行更改。 该CR包含三个属性:size、image、storage,下文在定义API时需要为其定义Marker,以便自动生成OpenAPI schema。 apiVersion由group、domain、version组成,group为osctest,domain为huawei.com,version为v1,与CRD中的定义对应,可根据需要修改。
-
CRD字段说明 group,一般为组织名称,如:osctest。 API版本,第一个版本一般为v1。 scope,Namespaced级别,修改为Cluster级别,则集群内仅可以创建一个同名的CR。仅Cluster级别的operator可管理同级别CRD。 API名称,假设应用名称为hwfka,则对应的多种名称格式如下: API名称:kind: Hwfka,创建API的时候使用。 列表形式:listKind: HwfkaList。 复数形式:plural: hwfkas。 单数形式:singular: hwfka。 简称:shortNames: hfk。
-
接入规范说明 开源helm服务支持自定义配置服务场景、支持架构等配置,其描述说明定义在Chart.yaml中,具体样例如下: apiVersion: v1 description: "nginx \n" maintainers: - email: support@rancher.com name: Rancher Labs Support name: helm-instance-update version: 1.0.2 annotations: scenes: CCE,UCS 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规范
-
生命周期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能够管理的实例版本(由CSD文件中的versionDefinition字段规定)与被升级的operator所能管理的实例版本相兼容,否则会导致上传服务包或升级服务operator失败。具体规则请参见versionDefinition。 父主题: 服务包规范
-
接入规范说明 开源OLM服务(operator-framework)服务支持自定义配置服务场景、支持架构等配置,其描述说明定义在clusterserviceversion.yaml中,具体样例如下: apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion metadata: name: example-operator.v0.0.3 namespace: test annotations: scenes: UCS,CCE source: ISV architecture: x86_64,aarch64 categories: Database devices: CPU,GPU,NPU industries: education,media spec: apiservicedefinitions: {} skips: - example-operator.v0.0.2 replaces: example-operator.v0.0.1 customresourcedefinitions: ... 参数名称 参数描述 参数示例 必选 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 否 父主题: Operator规范
-
资源配置 和K8S配套的资源控件,可以设置limit和request。 配置示例: - path: resources displayName: 单节点规格 description: "单节点Redis的内存规格,因系统开销,实际使用内存是所填数值的1.25倍" x-descriptors: - "urn:alm:descriptor:com.tectonic.ui:resourceRequirements" 图9 资源配置
-
如何对接边缘服务场景 由于边缘节点的轻量化和网络位于远端等特性,当前仅支持helm类型的实例,其中实例所包含的资源可以为Node、Namespace、Deployment、Job、Configmap、Secret、Cronjob、Pod、Daemonset、Service等kubernetes资源。支持边缘场景的helm服务包,对于应用负载的开发需按照以下配置开发,以支持实例部署在边缘节点,并可通过IEF界面进行进一步操作: 边缘场景下实例会默认指定部署在以用户projectID的namespace下,其他namespace下无法创建资源。 服务包内Deployment类型的资源,需要为Deployment添加app:{deployment_name}的label,且Deployment不能与已有Deployment或Job重名,以支持通过IEF界面查看Deployment信息。 若实例需要进行指定边缘节点部署,可以通过增加节点亲和性中的节点label实现,并通过value.yaml的输入(结合descriptor)进行指定,样例: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: edgecloud.huawei.com/node_id # key值必须为edgecloud.huawei.com/node_id operator: In values: - {node_id} # 此处取值为边缘节点ID 父主题: 附录
-
RBAC权限管理 Operator使用基于角色的访问控制机制对Kubernetes中的资源进行访问,因此,要保证Operator正确的运行,需要使用管理员权限的帐号对Operator进行授权,即预先创建对应的role和rolebinding。 在Reconcile()上添加markers,增加Operator对于Service、StatefulSet、Deployment、Pod的管理权限,SDK即可自动生成对应的role和rolebinding等资源描述文件。 // +kubebuilder:rbac:groups=osctest.huawei.com,resources=hwfkas,verbs=get;list;watch;create;update;patch;delete// +kubebuilder:rbac:groups=osctest.huawei.com,resources=hwfkas/status,verbs=get;update;patch// +kubebuilder:rbac:groups=core,resources=services,verbs=get;list;watch;create;update;patch;delete// +kubebuilder:rbac:groups=apps,resources=statefulsets,verbs=get;list;watch;create;update;patch;delete// +kubebuilder:rbac:groups=apps,resources=deployments,verbs=get;list;watch;create;update;patch;delete// +kubebuilder:rbac:groups=core,resources=pods,verbs=get;list;watch// +kubebuilder:rbac:groups=core,resources=persistentvolumeclaims,verbs=get;list;watch;updatefunc (r *HwfkaReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) { // ...} 如果Operator为namespace级别的,则需要还添加namespace,如: // +kubebuilder:rbac:groups=osctest.huawei.com,namespace=example,resources=hwfkas,verbs=get;list;watch;create;update;patch;delete// +kubebuilder:rbac:groups=osctest.huawei.com,namespace=example,resources=hwfkas/status,verbs=get;update;patch
-
控件类型 表单控件类型 1. 使用默认crd.yaml文件自动生成表单 由CRD中定义的openAPIV3Schema字段规定CR中可配置的参数以及这些参数的类型、范围,应用在创建CR的时候通过YAML文件指定这些参数。 2. 使用自定义csd.yaml文件生成表单 自动生成的创建表单已经很强大,但有时可能需要修改自定义表单的呈现方式。例如,可能需要对用户更友好的displayName、更简洁的描述,以及更改表单字段顺序,或排除一些非面向用户的字段。这就是“(x-descriptors)规范描述符”的作用。 父主题: 配置表单控件
-
生成服务包 最终的服务目录结构如下: $ 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 父主题: 制作服务包
-
创建服务包模板 通过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 #【必选】元数据文件 父主题: 制作服务包
-
Controller实现背景 在创建Kafka实例时,Kafka-Operator需要创建的Kubernetes资源如下: 1个StatefulSet,包含3个Pod分别启动ZooKeeper; 1个Service,用来暴露ZooKeeper访问地址; 1个StatefulSet,包含3个Pod分别启动Hwfka broker; 1个Service,用来暴露Hwfka访问地址; 1个Deployment,包含1个Pod启动KafkaManager; 1个Service,用来暴露KafkaManager访问地址。 在创建API的时候,SDK已自动创建controllers/hwfka_controller.go,为SetupWithManager添加对Service、StatefulSet、Deployment的监听和管理。 import ("context""fmt""github.com/go-logr/logr"appsv1 "k8s.io/api/apps/v1"corev1 "k8s.io/api/core/v1""k8s.io/apimachinery/pkg/api/errors""k8s.io/apimachinery/pkg/runtime""k8s.io/apimachinery/pkg/types"ctrl "sigs.k8s.io/controller-runtime""sigs.k8s.io/controller-runtime/pkg/client"osctestv1 "hwfka-operator/api/v1")func (r *HwfkaReconciler) SetupWithManager(mgr ctrl.Manager) error {return ctrl.NewControllerManagedBy(mgr).For(&osctestv1.Hwfka{}).Owns(&corev1.Service{}).Owns(&appsv1.StatefulSet{}).Owns(&appsv1.Deployment{}).Complete(r)}
-
调度逻辑 对于Kubernetes集群内任何Hwfka或Service、StatefulSet、Deployment的变化,Controller都会监听到,并生成事件,触发Reconcile()方法。需要在Reconcile()方法中实现协调逻辑,创建Service、StatefulSet等资源,并更新应用实例状态,实现的过程中,可以参考: 查询资源:控制器使用controller-runtime库中的Client实现对Kubernetes资源的增查改删,示例代码参见:example_test.go。 创建资源:使用Go语言调用Kubernetes API创建资源,可参考Kubernetes API Reference。 设置关联:为创建的Kubernetes资源设置ownerReferences,以便其能在CR删除时被级联删除,可参考如下代码。 // 为指定命名空间和名称的 secret 设置 owner,返回 secretfunc (k *K8sClient) SetSecretOwner(cr *oscv1.Kafka, secretName string) (*corev1.Secret, error) {ctx := context.Background()secret, err := k.GetSecretByNamespaceName(cr.Namespace, secretName)if err != nil {return nil, err}if secret.OwnerReferences == nil {patch := client.MergeFrom(secret.DeepCopy())secret.OwnerReferences = []metav1.OwnerReference{*metav1.NewControllerRef(cr, schema.GroupVersionKind{Group: cr.GroupVersionKind().Group,Version: cr.GroupVersionKind().Version,Kind: cr.Kind,}),}if err := k.Patch(ctx, secret, patch); err != nil {return nil, err}}return secret, nil} 如果一个动作的处理时间较长,为了避免Reconcile阻塞,需要使请求返回并重新排队,有四种方法: // 请求成功,不再排队return ctrl.Result{}, nil// 请求失败,重新加入队列return ctrl.Result{}, err// 请求因某种原因需要重新加入队列return ctrl.Result{Requeue: true}, nil// 请求因某种原因,需要在指定时间后重新加入队列return ctrl.Result{RequeueAfter: time.Second*5}, nil 当删除CR时,如果需要预先清理Kubernetes之外的资源,此时仅凭ownerReferences无法实现,可以利用finalizers特性。利用finalizers延时删除资源的方法请参见Using Finalizers。 示例代码请参见Controller实现。
更多精彩内容
CDN加速
GaussDB
文字转换成语音
免费的服务器
如何创建网站
域名网站购买
私有云桌面
云主机哪个好
域名怎么备案
手机云电脑
SSL证书申请
云点播服务器
免费OCR是什么
电脑云桌面
域名备案怎么弄
语音转文字
文字图片识别
云桌面是什么
网址安全检测
网站建设搭建
国外CDN加速
SSL免费证书申请
短信批量发送
图片OCR识别
云数据库MySQL
个人域名购买
录音转文字
扫描图片识别文字
OCR图片识别
行驶证识别
虚拟电话号码
电话呼叫中心软件
怎么制作一个网站
Email注册网站
华为VNC
图像文字识别
企业网站制作
个人网站搭建
华为云计算
免费租用云托管
云桌面云服务器
ocr文字识别免费版
HTTPS证书申请
图片文字识别转换
国外域名注册商
使用免费虚拟主机
云电脑主机多少钱
鲲鹏云手机
短信验证码平台
OCR图片文字识别
SSL证书是什么
申请企业邮箱步骤
免费的企业用邮箱
云免流搭建教程
域名价格