云服务器内容精选

  • Chart元素说明 ConfigMap 是一种用于存储工作负载所需配置信息的资源类型,内容由用户决定。配置项创建完成后,可在工作负载中作为文件或环境变量使用。允许将配置文件从容器镜像中解耦,从而增强容器工作负载的可移植性。 Secret(密钥) 是一种用于存储工作负载所需要认证信息、密钥的敏感信息等的资源类型,内容由用户决定。资源创建完成后,可在容器工作负载中作为文件或环境变量使用。其配置页面上参数含义与ConfigMap大体相同,差异的参数说明如下: “密钥类型”取值为“Opaque”,表示一般密钥类型。 “密钥数据”的“值”必须使用Base64编码。对字符串进行Base64加密,可以直接使用“echo -n 待编码内容 | base64”命令。 root@ubuntu:~# echo -n "待编码内容" | base64 无状态负载 等同于Kubernetes中的“Deployment”概念,所有Pod实例之间是对等的,互不依赖,少了任意一个Pod实例,并不影响整个工作负载的功能。 有状态负载 等同于Kubernetes中的“StatefulSet”概念,是用来管理有状态应用的工作负载API对象。和“无状态负载”相同的是,“有状态负载”管理了基于相同容器定义的一组Pod。和“无状态负载”不同的是,“有状态负载”为每个Pod维护了一个固定的ID。这些Pod是基于相同的声明来创建的,但是不能相互替换。无论怎么调度,每个Pod都有一个永久不变的ID。选择“有状态负载”时,必须要配置“实例间发现服务”。 实例间发现服务指的是Kubernetes的Headless Service,Headless Service用于控制Pod的网络 域名 ,通过Pod的网络域名可以访问特定的Pod实例。例如,集群域名为cluster.local,有状态负载的名称为web,有3个Pod实例,则3个Pod的名称分别为web-0、web-1和web-2,Headless Service的名称为nginx,则3个Pod的域名分别是web-0.nginx.$(命名空间).svc.cluster.local、web-1.nginx.$(命名空间).svc.cluster.local、web-2.nginx.$(命名空间).svc.cluster.local,通过Pod域名访问到具体的Pod实例。
  • 前提条件 已接入服务实例,具体操作请参考注册Native Service。 已在需要调用原生服务的应用中,添加待调用的原生服务。添加后,在该应用的服务编排中,才可以调用Native服务。 “Internal dependencies”为内部依赖文件夹,导入的BO服务或者Native服务,在打包上层应用时也会随应用打包发布出去。 “External dependencies”为外部依赖文件夹,导入的BO服务或者Native服务,在打包上层应用时不会打包出去。 图1 应用中添加原生服务 若AstroZero开启了根证书校验,请先上传原生服务的根证书,再调用原生服务。关于根证书的更多内容,请参考开启根证书校验。
  • 服务包来源 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。
  • 如何使用原生服务 租户线下开发了一些服务,服务运行在Docker容器中。租户希望可将线下开发的这些服务集成到AstroZero上,供AstroZero内部应用或者其他第三方系统调用。 Native Service在AstroZero内的使用场景包括但不限于: 在服务编排内部进行调用 租户线下开发的服务集成到AstroZero上,可以作为Native服务,被服务编排调用。 外部系统通过Restful接口调用 通过下面的REST接口,调用原生服务,输入参数在body中填写。 https://AstroZero域名/native/NativeService1/0.1.0/health 其中,“AstroZero域名”为AstroZero对外提供的默认域名,“/native/NativeService1/0.1.0/health”为该服务开放接口的URL,可以在开放接口详情中获取。该调用方式,只适用于外部接口。 图3 查看接口URL 在脚本中调用 租户线下开发的服务集成到AstroZero上,且在AstroZero上自定义该服务的开放接口后,可以在脚本中内部调用开放接口。 脚本部分示例如下: let resp3 = httpClient.post("https://AstroZero域名" + "/native/NativeService1/0.1.0/health", callOptions3); console.log(context.getHost()) console.log(resp3.body); if (resp3.body.resCode == "0" && resp.body.result) { console.log('auth success, currrent user is: ', resp3.body.result.name) } 其中,“AstroZero域名”为AstroZero对外提供的开发态默认域名,“/native/NativeService1/0.1.0/health”为该服务开放接口的URL。该调用方式,只适用于外部接口。 在页面中调用 在高级页面的Widget代码中,调用原生服务的开放接口。标准页面则可在事件代码中直接调用原生服务的开放接口或通过定义服务模型,关联调用原生服务的服务编排,再在页面事件代码中,调用服务模型,从而来调用原生服务。 在标准页面上传组件中,还可以调用原生服务的自定义接口实现上传功能。标准页面中上传组件功能介绍,请参见上传。 在工作流中调用 在服务编排中调用原生服务后,向工作流设计页面的泳道中,拖入“调用服务编排”图元。选择,在服务编排配置页面,选择需要调用的服务编排。 在触发器中调用 在服务编排中调用原生服务后,在触发器中可调用该服务编排,当满足触发器规则时,系统会执行该服务编排。
  • 使用原生服务具备哪些优势 面向第三方技术开发人员,原有资产不用重新开发,复用原有的业务和技术能力,可快速接入AstroZero,实现与现网系统快速集成,提升系统粘性。 提升微服务构建能力,优化应用系统架构,助力伙伴基于AstroZero构建重量级行业应用。 自有资产可基于AstroZero资产市场,实现共享、共建合作生态。 使用CCE/CCE敏捷版部署,接入AstroZero,投资小、成本低。传统的IT实现,客户如果要构建应用系统,必须从硬件和软件全部一次性购买。使用AstroZero,像住酒店一样,按需入驻,不需要关注酒店的建筑、运营和维修。初始投资少、成本低、减少投资风险。
  • 相关概念 由于Native Service涉及的概念比较多,在做Native Service配置前,建议先提前了解如下相关概念。部分概念说明源于Kubernetes官网介绍,若需要了解更多Kubernetes相关内容,请参考Kubernetes资料。 Native Service 将租户已有的一些服务(服务为租户线下开发,运行在Docker容器中,并非在AstroZero上开发)的API集成到AstroZero上,供上层应用调用,帮助租户更加高效的构建应用。 Chart 在部署Native Service前,需要配置Chart,用于生成kubernetes(简称“K8s”)资源配置文件。配置Chart,其实是配置部署Docker容器时需要的资源、存储、网络等一系列参数,为容器的部署、服务的运行提供支撑。 Kubernetes(简称“K8s”) Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容和维护等功能。 节点(Node) 每一个节点对应一台服务器(可以是虚拟机实例或者物理服务器),容器应用运行在节点上。节点上运行着Agent代理程序(kubelet),用于管理节点上运行的容器实例。 实例(Pod) 实例(Pod)是 Kubernetes 部署应用或服务的最小的基本单位。一个Pod 封装多个应用容器(也可以只有一个容器)、存储资源、一个独立的网络 IP 以及管理控制容器运行方式的策略选项。 图1 实例(Pod) 容器 一个通过Docker镜像创建的运行实例,一个节点可运行多个容器。容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。 图2 实例Pod、容器Container、节点Node的关系 Docker Docker在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等,极大的简化了容器的创建和维护。使得Docker技术比虚拟机技术更为轻便、快捷。Docker是Kubernetes Pod中最常用的容器运行时,但Pod也能支持其他的容器运行时。若需要了解更多Docker相关内容,请参考Docker官网。 Docker镜像 Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。 镜像(Image)和容器(Contianer)的关系,像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。 云容器引擎(Cloud Container Engine,简称“CCE”) 云容器引擎提供高可靠高性能的企业级容器应用管理服务,支持Kubernetes社区原生应用和工具,简化云上自动化容器运行环境搭建。 密钥(Secret) 密钥是一种用于存储工作负载所需要认证信息、密钥的敏感信息等的资源类型,内容由用户决定。资源创建完成后,可在容器工作负载中作为文件或者环境变量使用。 ConfigMap ConfigMap是一种用于存储工作负载所需配置信息的资源类型,内容由用户决定。配置项创建完成后,可在容器工作负载中作为文件或者环境变量使用。允许您将配置文件从容器镜像中解耦,从而增强容器工作负载的可移植性。 无状态负载 等同于Kubernetes中的“Deployment”概念,所有Pod实例之间是对等的,互不依赖,少了任意一个Pod实例,并不影响整个工作负载的功能。 有状态负载 等同于Kubernetes中的“StatefulSet”概念,是用来管理有状态应用的工作负载API对象。和“无状态负载”相同的是,“有状态负载”管理了基于相同容器定义的一组Pod,和“无状态负载”不同的是,“有状态负载”为每个Pod维护了一个固定的ID。这些Pod是基于相同的声明来创建的,但是不能相互替换。无论怎么调度,每个Pod都有一个永久不变的ID。 Service 可以理解为使用标签选择器(selectors)标识的一组Pod,通过Service可以访问到这组Pod。 Ingress Ingress是对集群中服务的外部访问进行管理的API对象,访问方式是HTTP或者HTTPS。
  • 操作步骤 在Native Service配置页面,选择“导航”。 图1 单击导航 在“API设计”页签,单击“开始设计API”。 选择“使用模板”,配置基本信息和新URL对应的版本号,单击“创建”。 图2 创建一个新版本 openApi版本:接口定义需要符合openApi规范,这里配置具体openApi的版本号。 选择模板:选择系统预置的模板。 版本:输入服务版本号。 标题:原生服务API的名称。 创建完成后,单击“新增资源”。 在“增加资源及操作方法”页面,配置相关参数,单击“确认”。 图3 增加资源及操作方法配置页面 输入一个新的资源路径(以/开头):与镜像文件中的接口路径保持一致。 方法:调用的方法,如GET(查询)、PUT(增加)、POST(修改)、DELETE(删除)、PATCH(对资源进行部分修改)。 操作名称:与镜像文件中的操作名称保持一致。 公共接口:若勾选,则只能在公共接口中调用,无法在服务编排和脚本中使用。 内容类型:当勾选“公共接口”时,您需要配置内容类型,即请求中的body类型。其中,“application/x-www-form-urlencoded”、“application/xml”、“multipart/form-data”、“text/html”和“text/plain”用于文件上传接口,选择该内容类型,只能调用post类型的方法。 描述:描述信息。 单击生成的方法,可以在右侧编辑方法的URL、Header、Response参数,需要和镜像文件中接口的URL参数、Header参数、请求参数、返回参数保持一致。编辑参数后,需要单击参数操作列的,再单击“保存”。 您可参考界面上“/case”、“/case/{CaseId}”两个示例编辑生成的方法。每个方法都需要定义Response参数,否则会部署失败。返回体数据结构在模式对象中定义。 当Body参数和Response参数较多,一些参数可以封装成对象类型的参数,并在“模式对象”页签设置该类型参数,注意“模式对象”页签中参数名与操作中URL参数不能同名。 支持按照操作名称和资源路径单过滤或者组合过滤搜索方法。 图4 编辑方法 图5 定义模式对象 参考4~6,新增其他API方法。 编辑方法完成后,需要手动删除“/case”、“/case/{CaseId}”两个示例,删除示例模式对象。 单击“保存”,创建的自定义接口会出现在页面上。 在页面右上方,单击,可以查看自定义接口中的方法和模型对象。单击,可导出该原生服务下接口定义yaml文件。 单击,发布API。 发布后如果需要修改API,需要单击,取消发布后进行修改,修改后再保存并发布。 已发布的API可能在服务编排中已经使用,如果修改API导致不兼容,请同步修改引用该API的服务编排。
  • 前提条件 已下载之前设计的Chart包。 在AstroZero开发环境的Native Service配置页面,选择“导航”。 在“Chart设计”页签版本列表区域,单击需要导出的Chart后的导出按钮。 图1 导出Chart包 操作列按钮分别提供编辑Chart包、修改Chart包状态(单击后,Chart包状态是“Published”,无法再编辑该Chart包。单击后,Chart包状态是“Draft”,可编辑该Chart包。该界面不提供发布功能,实际发布要去CCE部署和发布)、预览Chart配置、导出Chart包、克隆已有Chart包配置和删除功能。
  • 配置Chart时的规则约束 规则1:在配置Chart时,Chart中应尽量避免包含密码等敏感信息。若需要配置敏感信息,用户需要自行对敏感信息进行加密,且Chart中不能包含解密敏感信息需要的密钥。 规则2:将Chart中的易变参数定义为全局变量,可避免因为参数变更时,修改并重新生成Chart包。 全局变量将用于生成Chart包中的“values.yaml”文件。在华为云CCE上部署Chart时,“values.yaml”文件的内容可以通过界面进行修改。因此,应将和环境相关的信息或其他易变参数定义为全局参数,例如镜像地址、pod实例数等。 规则3: 必须要为Ingress资源配置注解,注解中键为“nginx.ingress.kubernetes.io/ssl-redirect”,值为“false”。 华为云CCE的Kubernetes集群默认部署Nginx控制器,需要在Ingress上添加注解。如何添加注解,请参考Kubernetes资料。 AstroZero平台在调用Native服务的接口时,无法处理重定向的响应,必须给Ingress添加表1中的注解。 表1 注解1 注解中键 注解中值 nginx.ingress.kubernetes.io/ssl-redirect false Nginx控制器默认后端service使用http协议,如果后端service使用的是https协议,请添加表2中的注解。 表2 注解2 注解中键 注解中值 nginx.ingress.kubernetes.io/backend-protocol HTTPS nginx.ingress.kubernetes.io/secure-backends true 建议1:保持Chart简洁,建议一个Chart中工作负载不超过3个。 保持Chart简洁,可以降低部署、升级失败的概率,在升级时能更有效地控制升级的范围。 建议2 :同一个Chart中,为所有图元的名称定义相同的前缀。 例如,某Chart中所有图元以“template-”为前缀,无状态负载的名称可以命名为“template-deployment”,ConfigMap的名称可以命名为“template-dbconfig”等。使用相同的前缀,可以使用户更方便识别Kubernetes资源的归属,同时降低命名冲突的可能性。 建议3:当全局变量的值是多行文本时,文本中出现的空行应不含任何空格字符。 全局变量将用于生成Chart包中的“values.yaml”文件,在yaml文件中,通过缩进表达层次关系,而空行中的空格字符会影响yaml文档的缩进排版。例如,当全局变量名为“dbConfig”,变量值为: jdbc.url: jdbc:mysql://127.0.0.1:3306/testdb jdbc.username: admin jdbc.password: {XXXXXXXX} jdbc.driver-class-name: org.mariadb.jdbc.Driver 生成的values.yaml内容为: dbConfig: |- jdbc.url: jdbc:mysql://127.0.0.1:3306/testdb jdbc.username: admin jdbc.password: {XXXXXXXX} jdbc.driver-class-name: org.mariadb.jdbc.Driver 当全局变量名为“dbConfig”,变量值为(第4行中包含一个空格字符)。 jdbc.url: jdbc:mysql://127.0.0.1:3306/testdb jdbc.username: admin jdbc.password: {XXXXXXXX} jdbc.driver-class-name: org.mariadb.jdbc.Driver 生成的values.yaml内容为: dbConfig: "jdbc.url: jdbc:mysql://127.0.0.1:3306/testdb\njdbc.username: admin\njdbc.password:\ \ changeit\n \njdbc.driver-class-name: org.mariadb.jdbc.Driver" 通过流水线部署Chart时,第一种格式的“values.yaml”文件,更容易通过脚本进行修改。
  • 配置API时的规则约束 规则:在“API设计”页签,单击“开始设计API”,创建API时,API的命名空间应选择“局部命名空间”。 在创建API时,“命名空间”支持选择“局部命名空间”和“全局命名空间”。使用“局部命名空间”,可保证API的名称不会和其他Native服务的API名称出现冲突。而“全局命名空间”,是为了版本向前兼容而保留的。在AstroZero 1.2.10及之前的版本中,API无命名空间的概念,相当于API定义在全局名称空间中,因此,不同Native服务的API命名出现冲突的可能性比较大。
  • 镜像开发中的规则约束 用户可自行开发镜像,并上传到CCE华为云容器中或使用第三方镜像仓库的镜像。在进行镜像开发时,需要遵循如下的规则约束: 规则1:容器镜像必须使用,1.11.2或以上版本的Docker客户端进行制作。 如何制作Docker镜像,请参考如何编写高效的Dockerfile。 规则2:Native服务向AstroZero平台开放的接口,必须是“application/json”格式的restful接口。 开放给AstroZero应用调用的Native服务接口,请求消息和响应消息的“Content-Type”都必须是“application/json”。 规则3:Native服务开放的接口应使用HTTP消息头进行认证,不要依赖于Cookie。 AstroZero会丢弃Native服务返回的Cookie信息,因此,Native不能使用Cookie来维持状态。 Native服务示例代码如下: LOG .info("Authentication begin."); String auth = request.getHeader("Authorization"); // next: verify auth 建议:服务的日志建议输出到一个独立的目录,且日志文件命名以“.log”、“.trace”或“.out”后缀结尾,方便后续使用华为云的 应用运维管理 (简称 AOM ),采集日志文件,并将日志展示在AOM的界面上。
  • 接入规范说明 开源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规范