华为云用户手册

  • 通过控制台创建 登录CCE控制台。 单击集群名称进入集群,在左侧选择“工作负载”,在右上角单击“创建工作负载”。 配置工作负载的信息。 基本信息 负载类型:选择无状态工作负载Deployment。 负载名称:填写工作负载的名称。请输入1到63个字符的字符串,可以包含小写英文字母、数字和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。 命名空间:选择工作负载的命名空间,默认为default。您可以单击后面的“创建命名空间”,命名空间的详细介绍请参见创建命名空间。 实例数量:填写实例的数量,即工作负载Pod的数量。 容器配置 容器信息 Pod中可以配置多个容器,您可以单击右侧“添加容器”为Pod配置多个容器。 基本信息:配置容器的基本信息。 参数 说明 容器名称 为容器命名。 更新策略 镜像更新/拉取策略。可以勾选“总是拉取镜像”,表示每次都从镜像仓库拉取镜像;如不勾选则优使用节点已有的镜像,如果没有这个镜像再从镜像仓库拉取。 镜像名称 单击后方“选择镜像”,选择容器使用的镜像。 如果需要使用第三方镜像,请参见使用第三方镜像。 镜像版本 选择需要部署的镜像版本。 CPU配额 CPU资源限制值,即允许容器使用的CPU最大值,防止占用过多资源。 内存配额 内存资源限制值,即允许容器使用的内存最大值。如果超过,容器会被终止。 初始化容器(可选) 选择容器是否作为初始化(Init)容器。初始化(Init)容器不支持设置健康检查。 Init容器是一种特殊容器,可以在Pod中的其他应用容器启动之前运行。每个Pod中可以包含多个容器,同时Pod中也可以有一个或多个先于应用容器启动的Init容器,当所有的Init 容器运行完成时,Pod中的应用容器才会启动并运行。详细说明请参见Init 容器。 生命周期(可选):在容器的生命周期的特定阶段配置需要执行的操作,例如启动命令、启动后处理和停止前处理,详情请参见设置容器生命周期。 健康检查(可选):根据需求选择是否设置存活探针、就绪探针及启动探针,详情请参见设置容器健康检查。 环境变量(可选):支持通过键值对的形式为容器运行环境设置变量,可用于把外部信息传递给Pod中运行的容器,可以在应用部署后灵活修改,详情请参见设置环境变量。 数据存储(可选):在容器内挂载本地存储或 云存储 ,不同类型的存储使用场景及挂载方式不同,详情请参见存储。 安全设置(可选):对容器权限进行设置,保护系统和其他容器不受其影响。请输入用户ID,容器将以当前用户权限运行。 镜像访问凭证:用于访问镜像仓库的凭证,默认取值为default-secret,使用default-secret可访问SWR镜像仓库的镜像。default-secret详细说明请参见default-secret。 服务配置(可选) 服务(Service)可为Pod提供外部访问。每个Service有一个固定IP地址,Service将访问流量转发给Pod,而且Service可以为这些Pod自动实现负载均衡。 您也可以在创建完工作负载之后再创建Service,不同类型的Service概念和使用方法请参见服务(Service)。 高级配置(可选) 升级策略:指定工作负载的升级方式及升级参数,支持滚动升级和替换升级,详情请参见设置工作负载升级策略。 标签与注解:以键值对形式为工作负载Pod添加标签或注解,填写完成后需单击“确认添加”。关于标签与注解的作用及配置说明,请参见设置标签与注解。 DNS配置:为工作负载单独配置DNS策略,详情请参见工作负载DNS配置说明。 单击右下角“创建工作负载”。
  • 查看CRD及其对应的资源 登录CCE控制台。 单击集群名称进入集群,在左侧选择“自定义资源”。 在自定义资源页面,查看CRD或CRD对应的资源对象。 查看CRD及其YAML 列表中列出了集群中所有CRD,以及对应的API组、API版本、资源作用范围,单击操作列中的“查看YAML”按钮即可查看CRD的YAML。 您可以通过上方的搜索框,使用关键词搜索全部资源类型。 查看CRD对应的资源对象 在列表中选择一个自定义资源类型,单击操作列中的“查看资源”按钮即可浏览对应的资源对象。
  • 解决方案 问题场景一:插件状态异常 请登录CCE控制台,单击集群名称进入集群控制台,前往“插件中心”处查看并处理处于异常状态的插件。 问题场景二:目标集群版本不支持当前插件版本 检查到该插件由于兼容性等问题无法随集群自动升级。请您登录CCE控制台,在“插件中心”处进行手动升级。 问题场景三:插件升级到最新版本后,仍不支持目标集群版本 请您登录CCE控制台,单击集群名称进入集群控制台,在“插件中心”处进行手动卸载,具体插件支持版本以及替换方案可查看帮助文档。 问题场景四:插件配置不满足在升级条件,请在插件升级页面升级插件之后重试 升级前检查出现以下报错: please upgrade addon [ ] in the page of addon managecheck and try again 请您登录CCE控制台,在“插件中心”处手动升级插件。
  • 使用kubectl创建Namespace 使用如下方式定义Namespace。 apiVersion: v1 kind: Namespace metadata: name: custom-namespace 使用kubectl命令创建。 $ kubectl create -f custom-namespace.yaml namespace/custom-namespace created 您还可以使用kubectl create namespace命令创建。 $ kubectl create namespace custom-namespace namespace/custom-namespace created
  • 创建命名空间 登录CCE控制台,单击集群名称进入集群。 在左侧导航栏中选择“命名空间”,在右上角单击“创建命名空间”。 参照表1设置命名空间参数。 表1 命名空间基本信息 参数 参数说明 名称 新建命名空间的名称,命名必须唯一。 描述 输入对命名空间的描述信息。 配额管理 资源配额可以限制命名空间下的资源使用,进而支持以命名空间为粒度的资源划分。 须知: 建议根据需要在命名空间中设置资源配额,避免因资源过载导致集群或节点异常。 请输入整型数值,不输入表示不限制该资源的使用。 若您需要限制CPU或内存的配额,则创建工作负载时必须指定CPU或内存请求值。 配置完成后,单击“确定”。
  • 命名空间类别 命名空间按创建类型分为两大类:集群默认创建的、用户创建的。 集群默认创建的:集群在启动时会默认创建default、kube-public、kube-system、kube-node-lease命名空间。 default:所有未指定Namespace的对象都会被分配在default命名空间。 kube-public:此命名空间下的资源可以被所有人访问(包括未认证用户),用来部署公共插件、容器模板等。 kube-system:所有由Kubernetes系统创建的资源都处于这个命名空间。 kube-node-lease:每个节点在该命名空间中都有一个关联的“Lease”对象,该对象由节点定期更新。NodeStatus和NodeLease都被视为来自节点的心跳,在v1.13之前的版本中,节点的心跳只有NodeStatus,NodeLease特性从v1.13开始引入。NodeLease比NodeStatus更轻量级,该特性在集群规模扩展性和性能上有明显提升。 用户创建的:用户可以按照需要创建命名空间,例如开发环境、联调环境和测试环境分别创建对应的命名空间。或者按照不同的业务创建对应的命名空间,例如系统若分为登录和游戏服务,可以分别创建对应命名空间。
  • 使用密钥设置工作负载的环境变量 使用控制台方式 登录CCE控制台,单击集群名称进入集群。 在左侧导航栏选择“工作负载”,单击右上角“创建工作负载”。 在创建工作负载时,在“容器配置”中找到“环境变量”,单击“新增变量”。 密钥导入:选择一个密钥,将密钥中所有键值都导入为环境变量。 密钥项键值导入:将密钥中某个键的值导入作为某个环境变量的值。 变量名称:工作负载中的环境变量名称,可自定义,默认为密钥中选择的键名。 变量/变量引用:选择一个密钥及需要导入的键名,将其对应的值导入为工作负载环境变量。 例如将mysecret这个密钥中“username”的值导入,作为工作负载环境变量“username”的值,导入后容器中将会有一个名为“username”的环境变量。 配置其他工作负载参数后,单击“创建工作负载”。 等待工作负载正常运行后,您可登录容器执行以下语句,查看该密钥是否已被设置为工作负载的环境变量。 printenv username 如输出与Secret中的内容一致,则说明该密钥已被设置为工作负载的环境变量。 使用kubectl方式 请参见通过kubectl连接集群配置kubectl命令。 创建并编辑nginx-secret.yaml文件。 vi nginx-secret.yaml YAML文件内容如下: 密钥导入:如果要将一个密钥中所有数据都添加到环境变量中,可以使用envFrom参数,密钥中的Key会成为工作负载中的环境变量名称。 apiVersion: apps/v1 kind: Deployment metadata: name: nginx-secret spec: replicas: 1 selector: matchLabels: app: nginx-secret template: metadata: labels: app: nginx-secret spec: containers: - name: container-1 image: nginx:latest envFrom: # 使用envFrom来指定环境变量引用的密钥 - secretRef: name: mysecret # 引用的密钥名称 imagePullSecrets: - name: default-secret 密钥键值导入:您可以在创建工作负载时将密钥设置为环境变量,使用valueFrom参数单独引用Secret中的Key/Value。 apiVersion: apps/v1 kind: Deployment metadata: name: nginx-secret spec: replicas: 1 selector: matchLabels: app: nginx-secret template: metadata: labels: app: nginx-secret spec: containers: - name: container-1 image: nginx:latest env: # 设置工作负载中的环境变量 - name: SECRET_USERNAME # 工作负载中的环境变量名称 valueFrom: # 使用valueFrom来指定环境变量引用的密钥 secretKeyRef: name: mysecret # 引用的密钥名称 key: username # 引用的密钥中的key - name: SECRET_PASSWORD # 添加多个环境变量参数,可同时导入多个环境变量 valueFrom: secretKeyRef: name: mysecret key: password imagePullSecrets: - name: default-secret 创建工作负载。 kubectl apply -f nginx-secret.yaml 创建完成后,查看Pod中的环境变量。 执行以下命令,查看已创建的Pod。 kubectl get pod | grep nginx-secret 预期输出如下: nginx-secret-*** 1/1 Running 0 2m18s 执行以下命令,查看该Pod中的环境变量。 kubectl exec nginx-secret-*** -- printenv SPECIAL_USERNAME SPECIAL_PASSWORD 如输出与Secret中的内容一致,则说明该密钥已被设置为工作负载的环境变量。
  • 权限说明 云原生日志采集插件中的fluent-bit组件会根据用户的采集配置,读取容器标准输出、容器内文件日志并采集。 fluent-bit组件运行需要以下权限: CAP_DAC_OVERRIDE:忽略文件的 DAC 访问限制。 CAP_FOWNER:忽略文件属主 ID 必须和进程用户 ID 相匹配的限制。 DAC_READ_SEARCH:忽略文件读及目录搜索的 DAC 访问限制。 SYS_PTRACE:允许跟踪任何进程。
  • 安装插件 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“插件中心”,在右侧找到云原生日志采集插件,单击“安装”。 在安装插件页面,设置“规格配置”。 表1 插件规格配置 参数 参数说明 实例数 选择上方插件规格后,显示插件中的实例数。 选择“自定义”规格时,您可根据需求调整插件实例数。 容器 log-agent插件包含以下容器,您可根据需求自定义调整规格: fluent-bit:日志收集器,以DaemonSet形式安装在每个节点。 log-operator:负责解析及更新日志规则的组件。 otel-collector:负责集中式日志转发的组件,将fluent-bit收集的日志转发到LTS。 完成以上配置后,单击“安装”。
  • 插件简介 云原生日志采集插件(log-agent)是基于开源fluent-bit和opentelemetry构建的云原生日志、K8s事件采集插件。log-agent支持基于CRD的日志采集策略,可以根据您配置的策略规则,对集群中的容器标准输出日志、容器文件日志及K8s事件日志进行采集与转发。同时支持上报K8s事件到 AOM ,用于配置事件告警,默认上报所有异常事件和部分正常事件。采集日志的详细使用方法请参见收集容器日志。
  • 指标清单 Kubelet视图使用的指标清单如下: 表2 Kubelet指标说明 指标 类型 说明 storage_operation_errors_total Counter 存储操作期间发生的错误次数 storage_operation_duration_seconds_count Counter 存储操作的操作次数 storage_operation_duration_seconds_bucket Histogram 存储操作的持续时间 kubelet_pod_start_duration_seconds_count Counter 进行过pod start的数量 kubelet_pod_start_duration_seconds_bucket Histogram pod start的耗时分布情况 kubelet_runtime_operations_duration_seconds_bucket Histogram 不同操作的累计操作耗时分布情况 kubelet_runtime_operations_errors_total Counter 不同操作的累计操作失败的数量 kubelet_node_config_error Gauge 如果节点遇到与配置相关的错误,则此指标为true(1),否则为false(0) volume_manager_total_volumes Gauge Volume Manager中的卷数 kubelet_running_containers Gauge 当前运行的Containers数 kubelet_running_pods Gauge 当前运行的pod数 kubelet_node_name Gauge 节点名称,值始终为1 kubelet_runtime_operations_total Counter 运行过程中不同的操作类型的累计操作次数 kubelet_cgroup_manager_duration_seconds_count Counter 销毁和更新的数量 kubelet_cgroup_manager_duration_seconds_bucket Histogram 销毁和更新操作的耗时分布情况 kubelet_pleg_relist_duration_seconds_count Counter PLEG relist pod不同耗时的数量 kubelet_pleg_relist_interval_seconds_bucket Histogram PLEG relist 间隔的分布情况 kubelet_pleg_relist_duration_seconds_bucket Histogram PLEG relist pod耗时的分布情况 rest_client_requests_total Counter 请求apiserver的总次数(按照返回码code和请求类型method统计) rest_client_request_duration_seconds_bucket Histogram 请求apiserver的总次数(按照返回码code和请求类型method统计)的分布情况 process_resident_memory_bytes Gauge 进程驻留内存大小(以字节为单位) process_cpu_seconds_total Counter 进程用户和系统 CPU 总时间(以秒为单位) go_goroutines Gauge 协程数量
  • 新建流水线 访问CodeArts Pipeline首页。 单击“新建流水线”,进入“基本信息”页面,参考表1配置流水线基本信息。 表1 流水线基本信息参数说明 参数项 说明 名称 流水线的名称,自定义。支持中文、大小写英文字母、数字、“-”、“_”,长度不超过128个字符。 所属项目 流水线归属项目。 从流水线服务首页入口新建流水线,请根据实际需要选择已创建的项目。 从项目下流水线入口新建流水线,所属项目默认为当前项目,不可更改。 代码源 流水线关联的代码源类型: CodeArts Repo代码源 Repo:提供企业代码托管的全方位服务,为软件开发者提供基于Git的在线 代码托管服务 。 非CodeArts的第三方代码源 码云:连接码云账号之后可以获取该账号下的仓库、分支等信息。 Github:连接Github账号后可以获取该账号下的仓库、分支等信息。 Gitcode:连接Gitcode账号后可以获取该账号下的仓库、分支等信息。 通用Git:连接第三方通用Git仓库后可以获取该账号下的仓库、分支等信息。 说明: GitCode流水线源当前仅支持“北京四”和“广州”局点白名单用户。如果您需要开通此功能,请新建工单或拨打客服热线进行咨询。 如果用户新建的流水线任务不需要关联代码仓,也可以选择“暂不选择”,不关联代码仓时,如果添加了需要关联代码仓的任务,执行时会提示错误,具体问题请参考常见问题。 服务扩展点 关联非CodeArts的第三方代码源时,需通过服务扩展点实现与对应仓库的连接。可选择准备工作中提前创建的扩展点,也可单击“新建服务扩展点”进行创建,具体操作请参考新建CodeArts服务扩展点。 代码仓 流水线关联的代码仓库。 默认分支 仓库默认分支,手工或定时执行流水线时默认使用的分支。 Repo HTTPS授权 关联Repo代码源时,可配置授权扩展点以提升代码库操作权限,当前主要用于流水线服务的微服务变更功能模块及其相关插件。可选择准备工作中提前创建的扩展点,也可单击“新建授权”进行创建,具体操作请参考新建CodeArts服务扩展点。 别名 仓库别名,设置别名后可基于别名生成仓库对应的系统参数,如:“别名_REPOSITORY_NAME”,表示仓库名称。生成的参数可在参数设置页面查看,并在流水线中通过“${参数名}”进行引用。 描述 不超过1024个字符。 配置完基本信息,单击“下一步”,进入“选择模板”页面。 您可以选择系统模板或自定义模板,在模板基础上快速新建流水线,并自动生成模板预置的任务,模板来源请参考管理流水线模板。 也可以选择“空模板”,即不使用模板,新建空任务流水线。 选择完模板,单击“确定”,完成流水线创建。 页面自动进入流水线“任务编排”页面,您可以继续配置流水线,也可以单击“取消”返回流水线列表。
  • codearts-extension.json文件定义 codearts-extension.json文件示例: { "type": "Task", "name": "demo_plugin", "friendlyName": "示例插件", "description": "这是一个示例插件", "category": "Gate", "version": "0.0.2", "versionDescription": "0.0.1初始化版本", "dataSourceBindings": [], "inputs": [ { "name": "samplestring", # 如插件业务脚本中使用${samplestring}获取运行者在流水线上配置的值 "type": "input", # 不同类型信息对应不同展示功能,可选项见下文 "description": "Sample String", # input条目的描述信息,用于描述其值含义 "defaultValue": "00", # 默认值,required属性为false时,如不在流水线上重新输入,则默认使用此值 "required": true, # true则流水线编辑时必须重新填值,false则不填使用默认值 "label": "测试输入框", # input条目在流水线编辑页面显示的名称信息 "validation": { "requiredMessage": "请输入值", # (可选) 如required字段为true,未填写时的提示信息 "regex": "^[a-zA-Z0-9-_\\u4e00-\\u9fa5]{1,32}$", # (可选)可填写正则校验的内容 "regexMessage": "类型错误" # (可选) 如正则校验失败的提示信息 } } ], "execution": { "type": "Shell", "target": "scripts/execution.sh" }, "outputs": [] } codearts-extension.json文件参数说明如下: 表2 codearts-extension.json文件参数说明 参数项 说明 type 填写固定值“Task”,标识为一个插件类型。 name 请与注册插件时页面填写的基本信息“唯一标识”字段一致。 friendlyName 请与注册插件时页面填写的基本信息“插件名称”字段一致。 category 请与注册插件时页面填写的基本信息“插件类型”字段一致,包括以下可选值: Build:对应“构建”插件类型。 Test:对应“测试”插件类型。 Gate:对应“代码检查”插件类型。 Normal:对应“通用”插件类型。 Deploy:对应“部署”插件类型。 version 插件版本,支持填写3组0-99的数字,如需新增正式版本,请修改此字段。 description 插件的描述信息。 versionDescription 此版本插件的描述信息,建议体现每个版本的差异点。 dataSourceBindings 此字段暂时未启用,请将值设置为“[]”。 inputs 插件输入内容,对应流水线页面插件展示格式,其值可在业务脚本中通过引用环境变量的方式引用。 execution 业务插件执行内容,其中type字段为业务脚本语言类型,target字段为执行文件入口,建议放在scripts文件夹下。 outputs 插件输出内容,在插件运行结束后写入此处定义值,可对应用作门禁指标metrics,不同的展示结果output。
  • 准备自定义插件包 插件包结构 图1 插件包结构 文件结构 extension.zip # 插件zip包 | -- scripts # (可选)脚本文件夹,用于存放包含插件执行逻辑的脚本 | | -- xxx # 包含插件执行逻辑的脚本 | -- i18n # (可选)多语言,存放所有文案信息 | | -- zh-cn # 中文环境内容 | | -- resources.json # 对应语言的国际化资源 | | -- en-us # 英文环境内容 | | -- resources.json # 对应语言的国际化资源 | -- codearts-extension.json # (必选)插件执行定义文件,Json格式,包括扩展插件的基本信息+input+execution 注意事项 插件包必须为.zip后缀。 插件包根目录下必须包含元数据文件codearts-extension.json,codearts-extension.json文件介绍请参考codearts-extension.json文件定义。 resources.json文件只能使用utf-8进行编码,不支持中文标点符号与其他编码形式,若输入则为乱码展示。
  • 编排流水线任务 访问CodeArts Pipeline首页。 在流水线列表页搜索目标流水线,单击操作列,选择“编辑”。 进入流水线“任务编排”页面,单击阶段下“新建任务”,弹出“新建任务”侧滑框。 单击任务下方的,可以添加一个和该任务串行编排的任务,即按顺序执行,如:构建任务和部署任务应该按顺序先后执行。 单击“并行任务”,可以添加一个和已有任务并行编排的任务,即同时执行,如:代码检查任务和构建任务可以同时执行。 为任务配置插件及任务信息,操作说明如下: 表1 配置任务 操作项 说明 添加插件 流水线插件分为构建插件、代码检查插件、部署插件、测试插件和通用插件5种类型,可以根据不同类型进行过滤或搜索,插件来源请参考管理流水线扩展插件。 将鼠标移动到插件卡片,单击“添加”,即可将插件添加到任务中,请根据需要配置插件相关信息: 填写插件名称。 选择需要调用的任务,如果找不到合适的任务,请根据界面提示新建任务。 如果调用的任务有参数,参数也会显示出来,请根据需要配置相应参数。 插件名称后有对应标记,单个任务中最多只能添加一个带“任务”标记的插件;带“草稿”标记的插件表示当前用户发布为草稿的自定义插件。 “挂起流水线”插件只能添加在不含并行任务的阶段中。 删除插件 将鼠标移动到已经添加的插件卡片,单击,选择“删除”,可以删除当前插件。 更换插件 将鼠标移动到已经添加的插件卡片,单击,选择“更换”,或者单击插件上方“更换插件”,可以返回插件列表,更换当前插件。 排序插件 单击插件卡片不松开,可以移动插件调整插件顺序。 任务配置 配置任务ID、执行主机和执行条件。 任务ID:。流水线阶段任务的ID,同一条流水线上的任务ID不能重复。支持大小写英文字母、数字、“-”、“_”,长度范围为1~128个字符。 执行主机:包括内置执行机和自定义执行机。 内置执行机:服务提供的执行主机,用户无需配置开箱即用。 自定义执行机:支持用户自行配置工具和运行环境,以满足不同任务的需求。选择自定义执行机需提前在资源池添加代理资源池,详细操作请参见资源池管理。 说明: 执行主机仅针对非任务级插件。 执行条件:即流水线阶段任务执行时需要满足的前提条件,通过配置执行条件,可以控制阶段任务是否执行。 前置任务未选择仍执行:上一个任务状态执行成功或未选择,都继续执行当前任务。 前置任务成功时执行:上一个任务执行成功才执行当前任务。 前置任务失败时执行:上一个任务执行失败才执行当前任务。 始终执行:始终执行当前任务,上一个任务状态是失败、成功、中止或忽略执行,都继续执行当前任务。 表达式:当前置任务到达终态,包括:成功(COMPLETED)、失败(FAILED)、中止(CANCELED)、忽略执行(IGNORED),且表达式结果为“true”时,执行当前任务,否则不执行。表达式形式为“${{ }}”,由流水线上下文、操作符、函数或常量任意组合而成。表达式编写请参考流水线执行条件表达式。 示例: 如需在执行条件中指定不管前置任务(任务ID为“job_1”)运行成功或失败,均执行当前任务,则表达式语法如下。 ${{ jobs.job_1.status == 'COMPLETED' || jobs.job_1.status == 'FAILED' }} 配置完任务,单击“确定”,完成任务添加,可根据实际需要编辑、复制、删除、移动任务。 表2 管理任务 操作项 说明 编辑任务 单击任务卡片,可以编辑当前任务。 复制任务 将鼠标移动到任务卡片,单击,可以复制一个和该任务串行编排的任务。 删除任务 将鼠标移动到任务卡片,单击,根据删除提示确定是否删除任务。 排序任务 单击任务卡片不松开,可以移动任务调整任务顺序。 说明: 任务并行执行时不支持调整顺序。 任务编排完成后,保存流水线。
  • 配置流水线权限 访问CodeArts Pipeline首页。 在流水线列表页搜索目标流水线,单击操作列,选择“编辑”。 进入流水线“任务编排”页面,切换至“权限管理”页面,关闭“使用项目权限配置”,即可为流水线配置角色权限和人员权限。 配置角色权限 通过勾选/取消勾选,指定角色对当前流水线的查看、执行、编辑、删除操作权限。 图1 配置角色权限 配置人员权限 通过勾选/取消勾选,指定人员对当前流水线的查看、执行、编辑、删除操作权限。 图2 配置人员权限
  • 配置发布管理原子插件 微服务发布提供滚动升级插件、灰度起负载插件、灰度引流插件、灰度下线插件和人工卡点插件五种插件,用于滚动升级和灰度升级,以下分别介绍各插件配置方法。 滚动升级插件 滚动升级包括两种部署方式:镜像创建和YAML创建。 镜像创建:替换工作负载中容器的镜像。 表2 参数说明 参数项 说明 命名空间 待升级的服务所在的命名空间。 工作负载 填写YAML文件的相对路径。 当前目录为代码分支的根目录。 仅支持单个YAML文件。 YAML路径可以使用“${变量名}”引用环境变量,YAML文件中可以使用“{{变量名}}”引用环境变量。 容器 工作负载中需要升级的容器。 YAML创建:使用yaml文件升级或上线工作负载。 表3 参数说明 参数项 说明 仓库类型 代码仓库的类型,当前仅支持Repo。 代码仓 当前项目下的代码仓。 分支 代码仓库分支。 工作负载YAML路径 升级的工作负载YAML路径,填写YAML文件的相对路径。 当前目录为代码分支的根目录。 仅支持单个YAML文件。 YAML路径可以使用“${变量名}”引用环境变量,YAML文件中可以使用“{{变量名}}”引用环境变量。 灰度起负载插件 灰度起负载包括两种部署方式:镜像升级和YAML部署。 镜像创建:替换工作负载中容器的镜像,创建与线上配置完全一致的工作负载,仅更新构建产物(镜像包)。 表4 参数说明 参数项 说明 命名空间 待升级的服务所在的命名空间。 服务 集群命名空间下的Service,需要确保该Service有且仅有一个工作负载与其关联。 自定义版本号 开关关闭,系统将自动随机生成灰度版本号;开关开启,用户可以按需配置灰度版本号。 灰度版本号 灰度版本号将作为新旧负载的引流标识,用于区分正式版本和灰度版本,请按需配置,支持使用${ENV}引用环境变量。如:${TIMESTAMP},表示引用系统时间戳环境变量作为灰度版本号。 支持大小写英文字母、数字、“-”、“_”、“.”,长度不超过62个字符。 YAML创建:使用yaml文件上线或升级工作负载。 表5 参数说明 参数项 说明 命名空间 待升级的服务所在的命名空间。 服务 集群命名空间下的服务,需要确保该服务有且仅有一个工作负载与其关联。 仓库类型 代码仓库的类型,当前仅支持Repo。 代码仓 当前项目下的代码仓。 分支 代码仓库分支。 工作负责YAML路径 填写YAML文件的相对路径。 当前目录为代码分支的根目录。 仅支持单个YAML文件。 YAML路径可以使用“${变量名}”引用环境变量,YAML文件中可以使用“{{变量名}}”引用环境变量。 灰度引流插件 选择引流类型,包括:Service蓝绿引流和ASM灰度引流。 Service蓝绿引流:基于集群Service将所有流量切换至新负载(灰度负载)。 ASM灰度引流:基于ASM的VirtualService和DestinationRule配置来控制访问流量,可以基于流量比例、请求Header等进行灰度引流,要求集群内安装ASM(应用服务网格)。 灰度下线插件 灰度下线插件会自动下线服务关联的旧工作负载,无需配置。 人工卡点插件 可以在卡点确认时进行批准或驳回部署策略,运行至人工卡点时流水线将暂停,若审批通过则继续执行,若驳回则终止执行。 表6 参数说明 参数项 说明 超时处理 超过等待审批时间后流水线的处理方案。 卡点失败,发布流终止执行:运行至人工卡点时流水线将暂停,若超时不处理则终止执行流水线。 忽略结果,发布流继续执行:运行至人工卡点时流水线将暂停,若超时不处理则继续执行流水线。 卡点时长 等待审批的时间,时间范围为1分钟至12小时。 卡点说明 卡点内容说明。长度不超过200个字符。
  • 新建发布管理自定义策略 发布管理环境预置了滚动升级模板和灰度升级模板,用户可以基于任一模板,添加原子插件,编辑发布策略。 进入发布管理环境列表页面。 单击环境名称,进入“环境信息”页面。 单击“发布策略”页签,切换至“发布策略”页面。 单击“自定义策略”旁的,弹出“新建策略”对话框,选择策略模板,单击“确定”。 在模板的基础上自定义编排插件,并配置相关信息。 表1 新建微服务 参数项 说明 策略名称 策略的名称。支持中英文字母、数字、“-”、“_”,不超过128个字符。 策略描述 长度不超过200个字符。 编排插件 选择策略模板后会自动生成相应的插件,可根据需要自定义编排并配置插件信息,插件参数配置请参考配置发布管理原子插件。 单击,可添加插件。 单击,可复制当前插件。 单击,可删除当前插件。 配置完成后,单击“保存”。 在左侧目录找到刚创建的策略,单击策略所在行,即可应用该策略,应用后策略会变为“使用中”的状态。
  • 查看发布管理发布结果 进入发布管理环境列表页面。 单击环境名称,进入“环境信息”页面。 单击“部署历史”页签,切换至“部署历史”页面,页面展示该环境的所有工单历史。 单击工单名称,可以进入工单的详情页面,详情页面展示本次发布的发布流信息、基本信息以及各原子插件发布单信息。 发布流信息 图1 发布流信息 展示工单执行结果、工单类型、触发人、流水线、发布策略模板等信息,单击对应原子插件可展示该插件的发布单信息。 取消:在发布过程中,单击“取消”可手动取消本次发布。 重试:在发布过程中,如果出现失败或取消运行,单击“重试”可重试发布流。 回滚:单击“回滚”弹出提示确认框,确认后将取消本次发布过程,将服务状态恢复至发布前,并自动跳转到回滚单。 支持在发布流的任意时刻回滚,可用于当前部署版本不符合预期,需要快速将环境恢复到上一次可用状态的场景。 基本信息 展示环境名称、策略、服务扩展点、变量版本、镜像、开始时间、结束时间。 原子插件发布单信息 展示各原子插件的发布详情,单击可以手动刷新发布单详情。 图2 原子插件的发布详情 表1 原子插件发布单信息 插件类型 发布单信息 滚动升级 发布单展示升级的工作负载信息、工作负载对应的实例信息以及关键事件信息。 工作负载信息 负载名称、类型、命名空间及创建时间。 实例信息 实例名称、实例运行状态、Pod IP、Host IP (Pod所在节点的IP)、实例创建的时间。 关键事件 查看Pod的关键事件信息,可用于辅助Pod问题定位,包括Kubernetes组件名、事件类型、K8s事件、首次发生时间、最近发生时间。 灰度起负载 发布单展示升级的工作负载信息、工作负载对应的实例信息以及关键事件信息,单击卡片可以切换新旧负载,查看对应负载信息。 工作负载信息 旧负载名称、新负载名称、负载类型及命名空间。 实例信息 实例名称、实例运行状态、Pod IP、Host IP (Pod所在节点的IP)、实例创建的时间。 关键事件 查看Pod的关键事件信息,可用于辅助Pod问题定位,包括Kubernetes组件名、事件类型、K8s事件、首次发生时间、最近发生时间。 灰度引流 发布单展示服务名称、旧版本号、新版本号和命名空间。 灰度下线 发布单展示负载名称、负载类型和命名空间。 人工卡点 发布单展示卡点时长、操作时间、卡点说明、卡点状态等信息。 父主题: 发布管理(CodeArts Release)使用指南
  • 通过云原生发布插件进行发布 配置流水线。 在流水线阶段新建任务, 添加“云原生发布”插件,参数说明如表1。 云原生发布提供环境级别的服务发布能力,支持在CCE集群对环境进行自定义编排发布(如:滚动发布和灰度发布)。 图1 配置云原生发布插件 表1 参数说明 参数项 说明 名称 插件的名称。支持输入中文、大小写英文字母、数字、“-”、“_”、“,”、“;”、“:”、“.”、“/”、“(”、“)”、“(”、“)”、空格,长度不超过128个字符。 环境级别 任务发布的环境类别,对发布管理的环境类型,目前支持开发环境、测试环境、预发环境和生产环境。 环境 需要发布的环境,对发布管理的环境,详见新建发布管理环境。 产物地址 微服务部署时使用的镜像地址,如:swr.example.com/demo/springboot-helloworld:v1.1,可以通过“${}”引用流水线参数,如:swr.example.com/demo/springboot-helloworld:${version}。 说明: 推荐使用 SWR容器镜像 服务,可通过编译构建制作镜像并推送到SWR仓库。 配置完成后,运行流水线,可实时查看运行进展。 单击云原生发布插件任务,可查看任务运行情况,包括任务日志和任务结果。 图2 查看云原生发布插件运行结果 任务日志:查看实时日志信息和运行状态。 任务结果:查看任务基本信息,包括工单名称、工单ID、触发人等。 单击工单ID或“查看详情”可进入发布管理工单详情页面,工单详情页介绍请参见查看发布管理发布结果。
  • 执行流水线 访问CodeArts Pipeline首页。 在流水线列表页找到待执行的流水线,单击操作列。 弹出“执行配置”侧滑框,配置如下信息: 代码源:选择代码源的分支或标签。 运行参数配置:如果流水线配置了运行时参数,请根据需要设置参数值。运行参数配置及使用请参见配置流水线参数。 执行阶段配置:流水线支持选择任务执行,可以选择一个或多个,默认执行全部任务。 流水线阶段如果在配置时选择了“总是运行”,则该阶段的任务默认选中且不能取消。 执行描述:填写本次执行的信息说明。 单击“执行”,进入流水线执行详情页面,可实时查看流水线执行进展及任务执行状态。 图1 执行流水线 单击“停止”,可中止任务执行。 单击“编辑”,可修改流水线配置信息。 流水线支持并发执行,继续单击“执行”,可以再次执行流水线,单条流水线最大支持同时执行的次数由购买套餐决定(体验版:1次;基础版:5次;专业版:10次;企业版:20次)。 执行完成后,即可查看流水线执行结果。执行过程遇到的问题请参考流水线常见问题。
  • 配置流水线定时执行 配置流水线在指定的时间自动执行。 访问CodeArts Pipeline首页。 在流水线列表页搜索目标流水线,单击操作列,选择“编辑”。 进入流水线“任务编排”页面,切换至“执行计划”页面。 单击“定时任务”区域的“创建定时任务”,增加一个定时任务,打开“启用定时执行”开关(默认开启),选择执行日和执行时间。 图4 配置定时任务 最多可以设置10个定时任务。 单击右上角,可删除定时任务;单击右上角,可复制定时任务。 配置完成后,保存流水线。
  • 配置流水线并发策略 默认单条流水线最大执行并发数为5,超过并发数后新的触发忽略不执行。可以通过并发策略为单条流水线配置同时处于运行中和暂停状态的流水线最大实例个数,即并发数,更细粒度地为用户分配并发资源。 访问CodeArts Pipeline首页。 在流水线列表页搜索目标流水线,单击操作列,选择“编辑”。 进入流水线“任务编排”页面,切换至“执行计划”页面。 打开“并发策略”开关,设置并发数和超过并发后执行策略。 图5 配置并发策略 表1 配置并发策略 参数项 说明 并发个数 单条流水线最大执行并发数,受套餐和购买并发数限制。 超过并发后执行策略 超过并发数后可选择如下两种处理方式: 排队等待:超过并发数后新的触发排队等待执行,可进入流水线详情页查看排队记录。 单条流水线最多支持100条排队记录。 单条排队记录排队时长超过24小时后会被放弃执行。 排队记录支持手动取消排队,即放弃执行。 排队记录执行时,配置信息以入队时为准。 忽略不执行:超过并发数后新的触发忽略不执行。 配置完成后,保存流水线。
  • 配置流水线事件触发 事件触发包括代码提交时触发、合并请求时触发、创建标签时触发。码云代码仓还支持Pull Request、新建issue、评论issue等其他事件。 访问CodeArts Pipeline首页。 在流水线列表页搜索目标流水线,单击操作列,选择“编辑”。 进入流水线“任务编排”页面,切换至“执行计划”页面,在“事件触发”勾选触发事件进行配置。 代码提交时触发(代码托管/码云) 监听代码提交触发事件,可以组合分支和具体路径的包含/排除范围,当在关联的代码仓库中有代码提交且所在的分支和变更文件的路径满足包含/排除策略,会自动触发关联流水线执行。 分支包含:提交代码的目标分支在包含分支中,则匹配成功。 分支排除:提交代码的目标分支在排除分支中,则匹配失败。 路径包含:变更文件有任意一个(若配置了路径排除,则必须为排除范围外的变更文件)在包含范围内,则匹配成功。 路径排除:变更文件全部在排除范围内,则匹配失败。 图1 配置代码提交时触发 合并请求时触发(代码托管/码云) 启用合并请求事件触发:监听合并请求触发事件,可以组合分支和具体路径的包含/排除范围,对新建、合并、更新和重新打开事件设置触发策略,当在关联的代码仓库侧触发合并请求事件且分支满足包含/排除策略,会自动触发关联流水线执行。 事件说明: 新建:合并请求创建时触发。 合并:合并请求合入时触发,该事件会同时触发代码提交事件。 重新打开:合并请求重新打开时触发。 更新:合并请求内容更新、设置更新或者源代码更新时触发,打开“仅代码更新触发”,则仅源代码更新时触发。 分支说明: 分支包含:合并请求的目标分支在包含分支中,则匹配成功。 分支排除:合并请求的目标分支在排除分支中,则匹配失败。 路径包含:变更文件有任意一个(若配置了路径排除,则必须为排除范围外的变更文件)在包含范围内,则匹配成功。 路径排除:变更文件全部在排除范围内,则匹配失败。 图2 配置合并请求时触发 创建标签时触发(代码托管) 监听创建标签触发事件,可以添加标签包含/排除范围,当在关联的代码仓库创建标签且满足标签包含/排除策略,会自动触发关联流水线执行。 标签包含:在代码仓库创建的标签在包含标签中,则匹配成功。 标签排除:在代码仓库创建的标签在排除标签中,则匹配失败。 图3 配置创建标签时触发 其他事件(码云) 评论Pull Request:评论Pull Request时触发流水线执行。 新建issue:新建issue时触发流水线运行。 评论issue:评论issue时触发流水线运行。 除了上述事件外,码云代码仓还支持开启事件触发成功后自动评论。 先匹配分支,再匹配路径,都匹配成功,则触发流水线。 分支排除优先于分支包含,即目标分支同时在包含和排除中时,匹配失败。 路径排除优先于路径包含,即先匹配排除的路径,如果变更文件没有全部在排除范围内,则继续匹配包含的路径。若未配置包含路径,则匹配成功;若配置了包含路径,并且变更文件在路径排除范围外有任意一个在包含范围内,则匹配成功。 标签排除优先于标签包含,即标签同时在包含和排除中时,则匹配失败。 配置完成后,保存流水线。
  • 前提条件 弹性云服务器正常运行。 关机、故障、删除状态的弹性云服务器,无法在 云监控 中查看其监控指标。当弹性云服务器再次启动或恢复后,即可正常查看。 关机、故障24小时的弹性云服务器,云监控将默认该弹性云服务器不存在,并在监控列表中删除,不再对其进行监控,但告警规则需要用户手动清理。 弹性云服务器已对接云监控,即已在云监控页面设置告警规则。 对接云监控之前,用户无法查看到未对接资源的监控数据。具体操作,请参见设置告警规则。 弹性云服务器已正常运行一段时间(约10分钟)。 对于新创建的弹性云服务器,需要等待一段时间,才能查看上报的监控数据和监控视图。
  • 取消定时消息 取消定时消息的示例代码如下: import org.apache.rocketmq.client.apis.ClientConfiguration; import org.apache.rocketmq.client.apis.ClientException; import org.apache.rocketmq.client.apis.ClientServiceProvider; import org.apache.rocketmq.client.apis.SessionCredentialsProvider; import org.apache.rocketmq.client.apis.StaticSessionCredentialsProvider; import org.apache.rocketmq.client.apis.message.Message; import org.apache.rocketmq.client.apis.producer.Producer; import org.apache.rocketmq.client.apis.producer.SendReceipt; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.time.Duration; public class ProducerDelayMessageExample { private static final Logger log = LoggerFactory.getLogger(ProducerDelayMessageExample.class); public static void main(String[] args) throws ClientException, IOException { final ClientServiceProvider provider = ClientServiceProvider.loadService(); String topic = "yourDelayTopic"; // 填入grpc连接地址/grpc公网连接地址 String endpoints = "yourEndpoints"; // 填入用户名/密钥,用户名和密钥直接硬编码到代码中或者明文存储都存在很大的风险,建议在配置文件或者环境变量中密文存放,使用时解密。创建实例时,如果开启了ACL才需要添加以下代码。 String accessKey = System.getenv("ROCKETMQ_AK"); String secretKey = System.getenv("ROCKETMQ_SK"); SessionCredentialsProvider sessionCredentialsProvider = new StaticSessionCredentialsProvider(accessKey, secretKey); ClientConfiguration clientConfiguration = ClientConfiguration.newBuilder() .setEndpoints(endpoints) // .enableSsl(false) // 创建实例时,如果开启了SSL,请增加此行代码。 // .setCredentialProvider(sessionCredentialsProvider) // 创建实例时,如果开启了ACL,请添加此行代码。 .build(); final Producer producer = provider.newProducerBuilder() .setClientConfiguration(clientConfiguration) .setTopics(topic) .build(); try { // ====== 发送定时消息逻辑 ====== byte[] body = "This is a delay message for Apache RocketMQ".getBytes(StandardCharsets.UTF_8); String tag = "yourMessageTagA"; Duration messageDelayTime = Duration.ofSeconds(10); final Message message = provider.newMessageBuilder() .setTopic(topic) .setTag(tag) .setKeys("yourMessageKey") // 设置定时消息投递时间戳 .setDeliveryTimestamp(System.currentTimeMillis() + messageDelayTime.toMillis()) .setBody(body) .build(); final SendReceipt sendReceipt = producer.send(message); log.info("Send message successfully, messageId={}", sendReceipt.getMessageId()); // ====== 发送取消消息逻辑 ====== // 创建取消消息对象 Message cancle = provider.newMessageBuilder() .setTopic(topic) .setBody("cancel".getBytes(StandardCharsets.UTF_8)) // 设置取消消息的时间戳,该时间戳必须与要取消的定时消息的定时时间戳一致。 .setDeliveryTimestamp(message.getDeliveryTimestamp().get()) // 设置要取消消息的ID,为发送消息的唯一ID(UNIQUE_KEY),可以从发送消息的结果中获取。 .addProperty("__CANCEL_SCHEDULED_MSG", sendReceipt.getMessageId().toString()) .build(); // 发送取消消息,必须在定时消息被投递之前发送才可以取消。 final SendReceipt cancelSendReceipt = producer.send(cancle); log.info("Send cancel message successfully, messageId={}", cancelSendReceipt.getMessageId()); } catch (Throwable t) { log.error("Failed to send message", t); } // 不再使用后,手动关闭producer。 producer.close(); } }
  • 响应参数 状态码: 200 表2 响应Body参数 参数 参数类型 描述 data UploadMediaRsp object 上传智能信息服务号图片资源响应体。 表3 UploadMediaRsp 参数 参数类型 描述 resource_type Integer 资源类型。 1:图片 resource_id String 资源ID。 resource_url String 资源路径。 状态码: 400 表4 响应Body参数 参数 参数类型 描述 error_code String 错误码。 error_msg String 结果详情。 状态码: 500 表5 响应Body参数 参数 参数类型 描述 error_code String 错误码。 error_msg String 结果详情。
  • 响应示例 状态码: 200 返回信息。 { "data" : { "resource_id" : "708feafdf1354805bd66e7fddc678dc3", "resource_type" : null, "resource_url" : "AimSauploadService/0ee8432935c84290bd67993ac7059ed720220530-141334( WeLink PC).png" } }
  • 请求参数 表1 FormData参数 参数 是否必选 参数类型 描述 file 是 File 图片资源。 说明: 文件格式与文件名后缀需保持一致,请勿修改原始文件后缀,否则导致资源上传失败。 file_type 是 String 文件类型。 PUB_ LOG O:上传服务号LOGO。支持jpg、bmp、png和jpeg格式,分辨率大于等于240*240且比例为1:1,大小不超过100k。 BG_IMAGE:上传服务号主页背景图。支持jpg、bmp、png和jpeg格式,分辨率大于等于1440*810且比例为16:9,大小不超过4M。 FASTAPP_LOGO:上传快应用LOGO。支持jpg、bmp、png和jpeg格式,分辨率大于等于192*192且比例为1:1,大小不超过4M。 OTHER:上传授权证明和营业执照等。
  • 请求示例 根据主页ID修改主页信息。设置修改原因为"我想修改主页",修改主页背景图片资源ID为"1d191b06da9a485895e10e48cbc5cccc",快应用跳转地址为"hap://app/122"。 https://koomessage.myhuaweicloud.com/v1/aim-sa/portals/bcce7e60df6445a592c09ca95dfdcccc { "change_reason" : "我想修改主页", "background_img" : "1d191b06da9a485895e10e48cbc5cccc", "summary" : "测试-欢迎来到酷玩影视", "tels" : [ { "tel" : "131****0000", "usage" : "加入我们" }, { "tel" : "131****0001", "usage" : "联系我们" } ], "fastapps" : [ { "name" : "酷玩", "description" : "这是一个快应用的描述", "deeplink" : "hap://app/122", "depend_engine_version" : "1", "logo_img" : "d2fe995119584f88be9e9ef53d2ccccc" } ] }
共100000条