华为云用户手册

  • 创建普通任务 普通任务可用于创建仅执行一次的批处理任务,任务执行完成后会自动退出。使用场景为在创建工作负载前,执行普通任务,将镜像上传至镜像仓库。 (可选)普通任务需要基于镜像创建,若选择私有镜像,用户首先需要将镜像上传至镜像仓库。 登录集群控制台,在左侧导航栏中选择“工作负载”,选择“普通任务”页签,并单击右上角“镜像创建”。 配置工作负载的信息。 基本信息 负载类型:选择普通任务Job。 负载名称:填写工作负载的名称。 命名空间:选择工作负载的命名空间,默认为default。您可以单击后面的“创建命名空间”,命名空间的详细介绍请参见创建命名空间。 实例数量:填写实例的数量,也就是Pod的数量。 容器配置 容器信息:Pod中可以配置多个容器,您可以单击右侧“添加容器”为Pod配置多个容器。 基本信息:请参见表1。 表1 基本信息参数说明 参数 说明 容器名称 为容器命名。 镜像名称 单击后方“选择镜像”,选择容器使用的镜像。 我的镜像:当前区域下镜像仓库中的镜像。若无可用的镜像,可单击“上传镜像”进行上传。 镜像中心:开源镜像仓库中的官方镜像。 共享镜像:由他人账号共享的私有镜像,详情请参见共享私有镜像。 镜像版本 选择需要部署的镜像版本。 更新策略 镜像更新/拉取策略。勾选“总是拉取镜像”表示每次都从镜像仓库拉取镜像;如不勾选则优先使用节点已有的镜像,如果没有这个镜像再从镜像仓库拉取。 CPU配额 申请:容器需要使用的最小CPU值,默认0.25Core。 限制:允许容器使用的CPU最大值。建议设容器配额的最高限额,避免容器资源超额导致系统故障。 内存配额 申请:容器需要使用的内存最小值,默认512MiB。 限制:允许容器使用的内存最大值。如果超过,容器会被终止。 关于CPU/内存配额申请和限制的具体说明请参见设置容器规格。 初始化容器 选择容器是否作为初始化容器。 Init 容器是一种特殊容器,在Pod内的应用容器启动之前运行。详细说明请参见Init 容器。 特权容器 特权容器是指容器里面的程序具有一定的特权。 若选中,容器将获得超级权限,例如可以操作宿主机上面的网络设备、修改内核参数等。 生命周期:设置生命周期回调函数可在容器的特定阶段执行调用,比如容器在停止前希望执行某项操作,就可以设置相应的函数。目前提供的生命周期回调函数有启动命令、启动后处理、停止前处理,详情请参见设置容器生命周期。 环境变量:容器运行环境中设定的一个变量,通过环境变量设置的配置项不会随着Pod生命周期结束而变化,详情请参见设置环境变量。 数据存储:配置容器存储,可以使用本地存储和存储卷声明(PVC)。建议使用PVC将工作负载Pod数据存储在 云存储 上。若存储在本地磁盘上,节点异常无法恢复时,本地磁盘中的数据也将无法恢复。容器存储相关内容请参见容器存储。 镜像访问凭证:用于访问镜像仓库的凭证。该凭证仅访问私有镜像仓库时使用,如所选镜像为公开镜像,则无需选择密钥。密钥的创建方法请参见创建密钥。 高级配置 标签与注解:您可以单击“添加”为Pod增加标签或注解,新增标签或注解的键不能与已有的重复。 任务设置: 并行数:任务负载执行过程中允许同时创建的最大实例数,并行数应不大于实例数。 超时时间:当任务执行超出该时间时,任务将会被标识为执行失败,任务下的所有实例都会被删除。为空时表示不设置超时时间。 任务创建完成后,在“普通任务”列表中可查看已创建的普通任务。 待状态为“处理中”,普通任务创建成功。
  • 创建定时任务 定时任务可用于创建按照设定时间和周期重复执行的任务,任务执行完成后会自动退出。使用场景为在某个固定时间点,为所有运行中的节点做时间同步。 (可选)定时任务需要基于镜像创建,若选择私有镜像,用户首先需要将镜像上传至镜像仓库。 登录集群控制台,在左侧导航栏中选择“工作负载”,选择“定时任务”页签,并单击右上角“创建负载”。 配置工作负载的信息。 基本信息 负载类型:选择定时任务CronJob。 负载名称:填写工作负载的名称。 命名空间:选择工作负载的命名空间,默认为default。您可以单击后面的“创建命名空间”,命名空间的详细介绍请参见创建命名空间。 容器配置 容器信息:Pod中可以配置多个容器,您可以单击右侧“添加容器”为Pod配置多个容器。 基本信息:请参见表2。 表2 基本信息参数说明 参数 说明 容器名称 为容器命名。 镜像名称 单击后方“选择镜像”,选择容器使用的镜像。 我的镜像:当前区域下镜像仓库中的镜像。若无可用的镜像,可单击“上传镜像”进行上传。 镜像中心:开源镜像仓库中的官方镜像。 共享镜像:由他人账号共享的私有镜像,详情请参见共享私有镜像。 镜像版本 选择需要部署的镜像版本。 更新策略 镜像更新/拉取策略。勾选“总是拉取镜像”表示每次都从镜像仓库拉取镜像;如不勾选则优先使用节点已有的镜像,如果没有这个镜像再从镜像仓库拉取。 CPU配额 申请:容器需要使用的最小CPU值,默认0.25Core。 限制:允许容器使用的CPU最大值。建议设容器配额的最高限额,避免容器资源超额导致系统故障。 内存配额 申请:容器需要使用的内存最小值,默认512MiB。 限制:允许容器使用的内存最大值。如果超过,容器会被终止。 关于CPU/内存配额申请和限制的具体说明请参见设置容器规格。 初始化容器 选择容器是否作为初始化容器。 Init 容器是一种特殊容器,在 Pod 内的应用容器启动之前运行。详细说明请参见Init 容器。 特权容器 特权容器是指容器里面的程序具有一定的特权。 若选中,容器将获得超级权限,例如可以操作宿主机上面的网络设备、修改内核参数等。 生命周期:设置生命周期回调函数可在容器的特定阶段执行调用,比如容器在停止前希望执行某项操作,就可以设置相应的函数。目前提供的生命周期回调函数有启动命令、启动后处理、停止前处理,详情请参见设置容器生命周期。 环境变量:容器运行环境中设定的一个变量,通过环境变量设置的配置项不会随着Pod生命周期结束而变化,详情请参见设置环境变量。 镜像访问凭证:用于访问镜像仓库的凭证。该凭证仅访问私有镜像仓库时使用,如所选镜像为公开镜像,则无需选择密钥。密钥的创建方法请参见创建密钥。 定时规则 并发策略:支持如下三种模式: Forbid:在前一个任务未完成时,不创建新任务。 Allow:定时任务不断新的任务,会抢占集群资源。 Replace:当到达新任务创建时间点,而前一个任务未完成时,新的任务会取代前一个任务。 定时规则:指定新建定时任务在何时执行,YAML中的定时规则通过CRON表达式实现。 以固定周期执行定时任务,支持的周期单位为分钟、小时、日、月。例如,每30分钟执行一次任务,对应的CRON表达式为“*/30 * * * *”,执行时间将从单位范围内的0值开始计算,如00:00:00、00:30:00、01:00:00、...。 以固定时间(按月)执行定时任务。例如,在每个月1日的0时0分执行任务,对应的CRON表达式为“0 0 1 */1 *”,执行时间为****-01-01 00:00:00、****-02-01 00:00:00、...。 以固定时间(按周)执行定时任务。例如,在每周一的0时0分执行任务,对应的CRON表达式为“0 0 * * 1”,执行时间为****-**-01 周一 00:00:00、****-**-08 周一 00:00:00、...。 自定义CRON表达式:关于CRON表达式的用法,可参考CRON。 以固定时间(按月)执行定时任务时,在某月的天数不存在的情况下,任务将不会在该月执行。例如设置天数为30,而2月份没有30号,任务将跳过该月份,在3月30号继续执行。 由于CRON表达式的定义,这里的固定周期并非严格意义的周期。将从0开始按周期对其时间单位范围(例如单位为分钟时,则范围为0~59)进行划分,无法整除时最后一个周期会被重置。因此仅在周期能够平均划分其时间单位范围时,才能表示准确的周期。 举个例子,周期单位为小时,因为“/2、/3、/4、/6、/8和/12”可将24小时整除,所以可以表示准确的周期;而使用其他周期时,在新的一天开始时,最后一个周期将会被重置。比如CRON式为“* */12 * * *”时为准确的周期,每天的执行时间为00:00:00和12:00:00;而CRON式为“* */13 * * *”时,每天的执行时间为00:00:00和13:00:00,在第二天0时,虽然没到13个小时的周期还是会被刷新。 任务记录:可以设置保留执行成功或执行失败的任务个数,设置为0表示不保留。 高级配置 标签与注解:您可以单击“添加”为Pod增加标签或注解,新增标签或注解的键不能与已有的重复。 任务创建完成后,在“定时任务”列表中可查看已创建的定时任务。 待状态为“已启动”,定时任务创建成功。
  • 任务概述 任务管理对应Kubernetes中的Job,分为普通任务和定时任务。 普通任务(Job)是Kubernetes用来控制批处理型任务的资源对象。批处理业务与长期伺服业务(Deployment、StatefulSet)的主要区别是批处理业务的运行有头有尾,而长期伺服业务在用户不停止的情况下永远运行。Job管理的Pod根据用户的设置把任务成功完成就自动退出了。成功完成的标志根据不同的spec.completions策略而不同:单Pod型任务有一个Pod成功就标志成功。定数成功型任务保证有N个任务全部成功标志成功。工作队列型任务根据应用确认的全局成功而标志成功。 定时任务(CronJob)即定时任务,是基于时间的Job,类似于Linux系统的crontab,在指定的时间周期运行指定的Job,即: 在给定时间点只运行一次。 在给定时间点周期性地运行。 CronJob的典型用法如下所示: 在给定的时间点调度Job运行。 创建周期性运行的Job,例如数据库备份、发送邮件。
  • 约束与限制 目标集群Kubernetes版本需为1.15及以上,且集群中至少包含一个可用节点。 集群在安装插件时,需要保证集群可正常拉取SWR镜像。 备份/恢复过程中,需尽量保证集群处于稳态,不要触发增、删、改等变更行为,以免出现备份/恢复失败或不完整的情况。若集群发生变更,建议等15分钟后,集群处于稳态,再做备份操作。 E-Backup插件集成开源的Restic组件完成PV数据备份,会对备份时间点的数据做自有快照,并上传数据,不影响用户后续数据的读写,但Restic不进行文件内容的校验和业务一致性校验,其特性遵循restic约束。 Restic组件占用内存大小与初次备份的PV卷数据大小有关。若PV卷数据大于300G,建议采用云存储提供的迁移方式。若使用应用数据管理功能迁移大量PV数据,可修改restic实例的资源配额,具体操作方式请参见修改插件资源配额。 E-Backup插件遵循开源Velero和Restic插件的约束,例如在恢复过程中Service会清除ClusterIP以适应源集群和目标集群间的差异。 若在CCE集群中使用了扩展加密的Secret类型(cfe/secure-opaque),在恢复到其他集群时,需要提前手动创建同名、同类型的Secret(不同集群加解密物料不同),以免恢复的应用无法成功运行。
  • 安装插件 安装E-Backup插件后,请谨慎卸载,否则可能导致已有的备份无法恢复。因为E-Backup插件在执行备份恢复任务时,依赖自定义资源BackupStorageLocation及其Secret,该资源在卸载后重新安装会发生更改。 登录集群控制台。 在左侧导航栏中单击“插件管理”,在可安装插件栏中单击E-Backup插件下的“安装”按钮。 参照表1进行插件规格配置。 表1 E-Backup插件规格配置 参数 参数说明 插件规格 单实例部署。 容器 设置插件容器实例的资源配额。 velero:提供K8s元数据备份/恢复支持。 restic:提供应用数据存储卷备份/恢复支持。 说明: 集群中需要预留足够的资源,若资源不足,插件实例将无法调度。 申请值需小于等于限制值,否则无法成功创建。 请根据备份/恢复数据量大小,适当调整资源限制以避免插件故障。 进行参数配置,当前支持配置以下参数。 volumeWorkerNum:代表并发执行数据卷备份的工作数量,默认为3。 { "volumeWorkerNum": 3 } 单击“安装”后,返回“插件管理”页面查看已安装插件,插件状态为“运行中”,表明该插件已在当前集群中安装成功。
  • 插件简介 E-Backup是云原生存储系统(Everest2.0)中负责云原生应用数据保护的子系统。它支持用户将应用数据(k8s资源)和业务数据(pv卷中的数据)备份到OBS桶中,也允许用户将某次备份数据恢复到指定的K8s集群中。 E-Backup通过备份和恢复两个子功能提供对以下使用场景的支持: 单集群下的容灾 周期性地对集群内部署的应用进行备份,在集群或者应用被破坏时通过恢复功能将应用重新部署到集群中,继续向外提供服务,实现应用的容灾。 同集群/跨集群的克隆 对于需要大批量部署到多个集群中的应用,特别是应用已经在某个集群工作一段时间后需要增添实例的情况。首先对处于工作状态的应用进行备份,随后恢复到同集群的不同Namespace下或者其他集群中,实现应用的克隆。 跨集群/跨云的迁移 由于网络、成本、业务地点变动等原因,需要将应用从某个集群迁移到跨Region的另一个集群,或者从其他云的集群迁入CCE。对迁出集群中的应用进行备份,而后恢复到迁入集群中,实现应用的迁移。
  • 操作步骤 登录U CS 集群控制台。 如果是未加入舰队集群,直接单击集群名即可进入集群控制台。 如果是已加入容器舰队的集群,先进入对应容器舰队控制台,选择左侧 “集群管理”内的“容器集群”,再进入对应集群控制台。 左侧导航栏内选择“负载伸缩策略”,单击右上角的“创建 HPA 策略”。 填写待创建HPA策略的参数: 表1 HPA策略参数配置 参数 参数说明 策略名称 新建策略的名称,请自定义。 命名空间 请选择工作负载所在的命名空间。 关联工作负载 请选择要设置HPA 策略的工作负载。 实例范围 请输入最小实例数和最大实例数。 策略触发时,工作负载实例将在此范围内伸缩。 系统策略 指标:可选择“CPU利用率”或“内存利用率”。 说明: 利用率 = 工作负载容器组(Pod)的实际使用量 / 申请量 期望值:请输入期望资源平均利用率。 期望值表示所选指标的期望值,通过向上取整(当前指标值 / 期望值 × 当前实例数)来计算需要伸缩的实例数。 说明: HPA在计算扩容、缩容实例数时,会选择最近5分钟内实例数的最大值。 容忍范围:容忍度默认为0.1。指标处于范围内时不会触发伸缩,期望值必须在容忍范围之间。 当指标值大于缩容阈值且小于扩容阈值时,不会触发扩容或缩容。阈值仅在1.15及以上版本的集群中支持。 须知: 可以设置多条系统策略。
  • 前提条件 使用HPA前需要在集群内安装能够提供Metrics API的插件(详情请参见对Metrics API的支持): metrics-server:metrics-server从kubelet公开的Summary API中采集度量数据,提供基础资源使用指标,例如容器CPU和内存使用率。 为本地集群安装metrics-server,请参见metrics-server。 为其他集群安装metrics-server,请参见社区官方文档。对于附着集群,您也可安装对应厂商所提供的metric-server插件。 Prometheus:Prometheus是一套开源的系统监控报警框架,能够采集丰富的Metrics(度量数据),因此除基础资源指标外,Prometheus还支持提供自定义指标。
  • 获取AK/SK AK(Access Key ID):访问密钥ID。与私有访问密钥关联的唯一标识符;访问密钥ID和私有访问密钥一起使用,对请求进行加密签名。 SK(Secret Access Key):与访问密钥ID结合使用的密钥,对请求进行加密签名,可标识发送方,并防止请求被修改。 登录管理控制台。 单击用户名,在下拉列表中单击“我的凭证”。 在“我的凭证”页面,单击“访问密钥”页签。 单击“新增访问密钥”,输入验证码。 单击“确定”,生成并下载访问密钥。 为防止访问密钥泄露,建议您将其保存到安全的位置。
  • 非安全环境配置kubectl 参照上述操作,安装并设置kubectl。 编辑KubeConfig文件,删除敏感信息参数。 Linux系统,KubeConfig文件默认位于$HOME/.kube/config。 表2 待删除敏感信息参数 Command Flag Environment Value Description --domain-name DOMAIN_NAME 租户名 --user-name USER_NAME 子用户名 --password PASSWORD 用户密码 --ak AC CES S_KEY_ID Access Key --sk SECRET_ACCESS_KEY Secret Key --cache CREDENTIAL_CACHE 是否开启缓存Token 更多参数说明请参见asm-iam-authenticator使用参考。 配置删除参数相应的环境变量来使用kubectl,以CREDENTIAL_CACHE为例,其他环境变量如ACCESS_KEY_ID和SECRET_ACCESS_KEY可参考CREDENTIAL_CACHE进行配置。 export CREDENTIAL_CACHE=false 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。 kubectl get serviceentry -n xxx 执行上述命令后,提示如下类似信息:
  • 获取网格实例Endpoint 登录华为云UCS控制台,左侧菜单栏选择“服务网格”。 F12打开浏览器console切换到“网络”标签页,单击服务网格列表页右上角小刷新按钮,找到meshes接口,单击“预览”标签页,找到对应网格的返回体,找到status.meshEndpoint.vpcEndpointServiceName字段后复制。 登录 VPC终端节点 VPCEP,左侧菜单栏选择“终端节点”,找到终端节点服务名称为步骤2获取到的对应的终端节点,单击进入获取到节点IP。 ASM在您创建网格时选择的枢纽VPC创建终端节点,并将该终端节点连接到网格控制面apiserver,来打通访问网格控制面的网络。更多信息请参考1.2-操作步骤中VPC解释。
  • 安装并设置kubectl 以下操作以Linux环境为例,更多详情信息请参见安装和配置kubectl。 1、以下步骤需要在UCS网格接入集群纳管的节点上操作。 2、以下步骤2执行asm-iam-authenticator generate-kubeconfig命名后会更新节点默认配置的config内容,建议执行以下命令备份config文件。 cp $HOME/.kube/config $HOME/.kube/config.backup 将下载kubectl中下载的kubectl赋予可执行权限,并放到PATH目录下。 chmod +x ./kubectl mv ./kubectl $PATH 其中,$PATH为PATH路径(如/usr/local/bin),请替换为实际的值。 您还可以通过如下命令查看kubectl的版本,如下所示。 kubectl version --client=true Client Version: version.Info{Major:"1", Minor:"25", GitVersion:"v1.25.3", GitCommit:"434bfd82814af038ad94d62ebe59b133fcb50506", GitTreeState:"clean", BuildDate:"2022-10-12T10:57:26Z", GoVersion:"go1.19.2", Compiler:"gc", Platform:"linux/amd64"} Kustomize Version: v4.5.7 配置 IAM 认证信息并持久化到本地。 将下载asm-iam-authenticator中下载的asm-iam-authenticator赋予可执行权限,并放到PATH目录下。 chmod +x ./asm-iam-authenticator mv ./asm-iam-authenticator $PATH 初始化asm-iam-authenticator配置。 初始化asm-iam-authenticator提供了AK/SK和用户名/密码两种方式,请选择其中一种执行。 使用AK/SK的方式配置IAM认证信息 asm-iam-authenticator generate-kubeconfig --iam-endpoint=https://$iam_endpoint --mesh-endpoint=https://$mesh_endpoint --mesh-region=$mesh_region --ak=xxxxxxx --sk=xxxxxx 其中, iam_endpoint为IAM服务的Endpoint,请参见地区和终端节点 mesh_endpoint为网格实例的Endpoint,获取方法请参见获取网格实例Endpoint; mesh_region为网格所在区域; ak、sk的获取方法请参见获取AK/SK,ak为文件中Access Key部分,sk为文件中Secret Key部分。 例如,iam_endpoint为https://iam.cn-north-4.myhuaweicloud.com,mesh_endpoint为https://xx.xx.xx.xx:5443, mesh_region为cn-north-4, ak的值为my-ak,sk的值为ABCDEFAK.. ,则命令如下所示: asm-iam-authenticator generate-kubeconfig --iam-endpoint=https://iam.cn-north-4.myhuaweicloud.com --mesh-endpoint=https://xx.xx.xx.xx:5443 --mesh-region=cn-north-4 --ak=my-ak --sk=ABCDEFAK.. 执行上述命令后,显示如下类似信息: Switched to context "asm-context-cn-north-4-my-ak" 其中,asm-context-cn-north-4-my-ak为context名,可通过kubectl config get-contexts命令查看。 使用用户名/密码的方式配置IAM认证信息 asm-iam-authenticator generate-kubeconfig --iam-endpoint=https://$iam_endpoint --mesh-endpoint=https://$mesh_endpoint --mesh-region=$mesh_region --domain-name=xxxxxxx --user-name=xxxxxx --password='xxxxxx' 其中,iam_endpoint为IAM服务的Endpoint,请参见地区和终端节点, mesh_endpoint为网格实例的Endpoint,获取方法请参见获取网格实例Endpoint; mesh_region为网格所在区域; domain-name为租户名,user-name为子用户名,password为子用户密码,请根据替换为实际的值。 若无子用户,user-name与domain-name配置一致即可,也可以不添加user-name参数。 IAM的Endpoint请参见地区和终端节点,请注意需要使用与网格实例地区相同的Endpoint。 在非安全的环境中使用kubectl,建议您完成此步骤后,使用环境变量的方式重新配置认证信息,具体参考非安全环境配置kubectl。 配置完成后,即可通过kubectl命令操作网格实例的相关资源。 例如,查看北京四的namespace资源。 kubectl get serviceentry -n xxx 执行上述命令后,提示如下类似信息: 当通过API访问公有云系统时,需要使用访问用户名密码或者密钥(AK/SK)进行身份认证并对请求进行加密,确保请求的机密性、完整性和请求双方身份的正确性。请妥善保存$HOME/.kube/config配置文件,确保访问密钥不被非法使用。 当开启cache缓存token提高访问性能时,token会以文件的方式保存在$HOME/.asm/cache的子目录下,请及时清理。 当发现访问密钥被非法使用(包括丢失、泄露等情况),可以自行删除或者通知管理员重置访问密钥,重新配置。 删除的访问密钥将无法恢复。
  • 下载asm-iam-authenticator 在ASM官网下载asm-iam-authenticator二进制,最新版本为v1.0.0,下载地址如表1所示。 表1 下载地址 操作系统 下载地址 查看帮助 Linux AMD 64位 asm-iam-authenticator_linux-amd64 asm-iam-authenticator_linux-amd64_sha256 asm-iam-authenticator使用参考
  • k8clone恢复使用方法 k8clone工具支持在Linux(x86、arm)和Windows环境中运行,使用方法相似。本文将以Linux(x86)环境为例进行介绍。 若使用Linux(arm)或Windows环境,请将下述命令中的k8clone-linux-amd64分别替换为k8clone-linux-arm64或k8clone-windows-amd64.exe。 在k8clone工具所在目录下执行./k8clone-linux-amd64 restore -h,可以查看k8clone工具恢复的使用方法。 -k, --kubeconfig:指定kubectl的KubeConfig位置,默认是$HOME/.kube/config。kubeConfig文件:用于配置对Kubernetes集群的访问,KubeConfig文件中包含访问注册kubernetes集群所需要的认证凭据以及Endpoint(访问地址),详细介绍可参见Kubernetes文档。 -s, --api-server:Kubernetes API Server URL,默认是""。 -q, --context:Kubernetes Configuration Context,默认是""。 -f, --restore-conf:指定restore.json的路径,默认是k8clone工具所在目录下。 -d, --local-dir:备份数据放置的路径,默认是k8clone工具所在目录下。 $ ./k8clone-linux-amd64 restore -h ProcessRestore from backup Usage: k8clone restore [flags] Flags: -s, --api-server string Kubernetes api-server url -q, --context string Kubernetes configuration context -h, --help help for restore -k, --kubeconfig string The kubeconfig of k8s cluster's. Default is the $HOME/.kube/config. -d, --local-dir string Where to restore (default "./k8clone-dump.zip") -f, --restore-conf string restore conf file (default "./restore.json") 示例: ./k8clone-linux-amd64 restore -d ./k8clone-dump.zip -f ./restore.json
  • k8clone数据恢复原理 数据恢复的流程参考如下: 图1 数据恢复流程 在执行恢复操作前,需要准备一个数据恢复配置文件“restore.json”,目的是在应用恢复时自动更换PVC、StatefulSet的存储类名称,以及工作负载所使用镜像的Repository地址。 文件内容如下: { "StorageClass": "OldStorageClassName": "NewStorageClassName" //支持修改PVC、StatefulSet的StorageClassName字段 "ImageRepo": "OldImageRepo1": "NewImageRepo1", //eg:"dockerhub.com": "cn-north-4.swr.huaweicloud.com" "OldImageRepo2": "NewImageRepo2", //eg:"dockerhub.com/org1": "cn-north-4.swr.huaweicloud.com/org2" "NoRepo": "NewImageRepo3" //eg:"golang": "swr.cn-north-4.myhuaweicloud.com/paas/golang" } StorageClass:支持PVC、有状态应用VolumeClaimTemplates中存储类名称按照配置进行自动更换。 ImageRepo:支持工作负载所使用镜像的Repository地址的更换,工作负载包括Deployment(含initContainer)、StatefulSet、Orphaned Pod、Job、CronJob、Replica Set、Replication Controller、DaemonSet。
  • 应用恢复操作步骤 通过kubectl连接目标集群。具体方法可参考使用kubectl连接集群。 准备数据恢复配置文件:restore.json。 新建一个restore.json文件,按照格式修改,并将文件放置在k8clone工具所在目录下。 示例: { "StorageClass": { "csi-disk": "csi-disk-new" }, "ImageRepo": { "quay.io/coreos": "swr.cn-north-4.myhuaweicloud.com/paas" } } 进入k8clone工具所在目录,执行恢复命令,将备份数据恢复到目标集群。 示例: ./k8clone-linux-amd64 restore -d ./k8clone-dump.zip -f ./restore.json
  • 创建策略实例 登录UCS控制台,在左侧导航栏中选择“策略中心”。 在列表中找到已启用策略中心功能的容器舰队或集群,单击“创建策略实例”。 填写如下参数: 图1 创建策略实例 策略定义:从内置的33个策略定义中选择一个,本教程以“k8srequiredlabels”为例,该策略定义的作用是要求资源包含指定的标签,其值与提供的正则表达式匹配。这里设置标签的key为owner,正则表达式为^[a-zA-Z]+.agilebank.demo$。 策略执行方式:包括拦截和告警两种方式。拦截表示不符合策略要求的资源将无法创建,告警表示不符合策略要求的资源仅告警提醒,仍可以正常创建。本教程以“拦截”执行方式为例。 策略生效范围:选择生效的命名空间。本教程以“default”命名空间为例。 单击“创建”,创建完成后系统会自动分发策略,如果分发成功,策略实例将在集群中生效。
  • 验证策略实例是否生效 策略实例分发成功后可在集群中执行符合策略实例的动作,此时该动作可正常执行;若在集群中执行不符合策略实例的动作,该动作将被拒绝掉(取决于设置的策略执行方式)。 尝试在集群中创建一个Pod,定义标签为:owner: user.agilebank.demo,符合策略实例,Pod可以创建成功。 如果在创建Pod时不包含策略实例中定义的标签,则Pod创建不成功,同时在“不合规资源”页签会生成相应的记录。
  • 通过MCI访问服务 MCI对象创建成功后,您可以通过 http://IP:port/path 访问后端工作负载,其中IP:port为MCI关联ELB的IP和端口,path为MCI对象中定义的路径。 MCI对象中还可以设置外部域名,这样您就可以通过域名来访问到ELB,进而访问到后端服务。 spec: rules: - host: www.example.com # 域名 http: paths: - path: / backend: serviceName: nginx # 准备一个名为nginx的联邦service servicePort: 80 # 端口号为80 域名访问依赖于域名解析,需要您将域名解析指向ELB实例的IP地址,例如您可以使用云解析服务 DNS来实现域名解析。
  • 创建MCI对象 使用kubectl连接集群联邦,详细操作请参见使用kubectl连接集群联邦。 创建并编辑 mci.yaml 文件,文件内容定义如下所示,参数定义请参见表1。 vi mci.yaml apiVersion: networking.karmada.io/v1alpha1 kind: MultiClusterIngress metadata: name: nginx-ingress namespace: default annotations: karmada.io/elb.conditions.nginx-svc: '[{ "type": "header", "headerConfig": { "key":"x-header", "values": [ "green" ] } }]' karmada.io/elb.id: 90f9f782-1243-41cc-a57d-6157f6cb85bf karmada.io/elb.projectid: 65382450e8f64ac0870cd180d14e684b karmada.io/elb.health-check-flag: "on" karmada.io/elb.health-check-option.nginx-svc: '{"protocol":"TCP"}' spec: ingressClassName: public-elb rules: - host: demo.localdev.me http: paths: - backend: service: name: nginx-svc # 准备一个名为nginx-svc的联邦service port: number: 8080 # 端口号为8080 path: /web pathType: Prefix MCI对象的结构体定义与networking.kubernetes.io/v1版本Ingress一致,不同之处在于后端服务需要填写为联邦Service,即在UCS控制台创建的Service,具体请参见集群内访问(ClusterIP)。 在配置MCI文件内容的过程中需要遵守的约束条件如下: apiVersion,kind,name必须指定。 spec下不允许填写TLS和DefaultBackend字段。 rules、paths不能为空。 host必须是DNS名称,不可以是IP地址。 service中所指定的后端服务必须是存在的、且输入的相关信息(如端口)是正确的,否则会导致访问服务失败。若您已经创建了参数信息错误的MCI对象,请参考4中的命令更新该MCI对象。 paths中,配置的高级转发策略(karmada.io/elb.conditions.{service name})越多的后端(backend)在paths中的位置应该越靠前。因为backend在paths中配置的位置越靠前,其转发优先级越高。 示例:如果为后端X配置两条转发策略a和b,为后端Y配置一条转发规则a,则此时paths中X的配置顺序应在Y之前,否则,同时符合a、b两条转发规则的流量将按照优先级顺序全部转发至Y中。 backend下不允许填写resource字段。 path值需要是绝对路径;不合法的path值:invalidPathSequences = []string{"//", "/./", "/../", "%2f","%2F"},invalidPathSuffixes = []string{"/..", "/."}。 pathType合法值:Exact、Prefix、ImplementationSpecific。 表1 关键参数说明 参数 是否必填 参数类型 描述 karmada.io/elb.id 是 String MCI关联的elb的id,不允许为空。长度为1-32个字符。 karmada.io/elb.projectid 是 String MCI关联的elb所属的项目ID,获取方法请参见获取项目ID。长度为1-32个字符。 karmada.io/elb.port 否 String MCI关联的elb的端口,不填默认为80。支持值为1-65535。 karmada.io/elb.health-check-flag 否 String 是否启用健康检查,可选值为: on:开启 off:不开启 不填写时默认为off。 karmada.io/elb.health-check-option 否 HealthCheck Object 健康检查参数,详情请参见HealthCheck。 说明: 健康检查参数配置示例: karmada.io/elb.health-check-option.nginx-svc: '{"protocol":"TCP","delay":"5","connect_port":"80","timeout":"1","max_retries":"1","path":"/wd"}' karmada.io/elb.conditions.{service name} 否 Array of Condition Object 高级转发策略,详情请参见Condition。{service name}请修改为联邦Service的名称。 karmada.io/elb.lb-algorithm.{service name} 否 String 转发算法: ROUND_ROBIN:加权轮询算法。 LEAST_CONNECTIONS:加权最少连接算法。 SOURCE_IP:源IP算法。 不填写时默认为ROUND_ROBIN。 {service name}请修改为联邦Service的名称。 ingressClassName 是 String ingressClass名称。取值必须为public-elb。 host 否 String 为服务访问域名配置,默认为"",表示域名全匹配。请确保所填写的域名已注册并备案,一旦配置了域名规则后,必须使用域名访问。 backend 否 Backend Object 后端,是Service 和端口名称的组合, 。 对于发往MCI的 HTTP(和 HTTPS)请求,如果与规则中的主机和路径匹配, 则会被发送到所列出的后端。 注意: 后端在paths中的配置顺序决定了策略的转发优先级。 示例:如果为后端X配置两条转发策略a和b,为后端Y配置一条转发规则a,则此时paths中X的配置顺序应在Y之前,否则,同时符合a、b两条转发规则的流量将按照优先级顺序全部转发至Y中。 path 是 String 为路由路径,用户自定义设置。所有外部访问请求需要匹配host和path。 说明: 此处添加的访问路径要求后端应用内存在相同的路径,否则转发无法生效。 例如,Nginx应用默认的Web访问路径为“/usr/share/nginx/html”,在为Ingress转发策略添加“/test”路径时,需要应用的Web访问路径下也包含相同路径,即“/usr/share/nginx/html/test”,否则将返回404。 pathType 是 String 路径类型。 ImplementationSpecific: 匹配方法取决于具体Ingress Controller的实现。在CCE中会使用ingress.beta.kubernetes.io/url-match-mode指定的匹配方式。 Exact:精确匹配 URL 路径,且区分大小写。 Prefix:前缀匹配,且区分大小写。该方式是将URL路径通过“/”分隔成多个元素 ,并且对元素进行逐个匹配。 如果URL中的每个元素均和路径匹配,则说明该URL的子路径均可以正常路由。 说明: Prefix匹配时每个元素均需精确匹配,如果URL的最后一个元素是请求路径中最后一个元素的子字符串,则不会匹配 。例如:/foo/bar匹配/foo/bar/baz,但不匹配/foo/barbaz。 通过“/”分隔元素时,若URL或请求路径以“/”结尾,将会忽略结尾的“/”。例如:/foo/bar会匹配/foo/bar/。 关于Ingress路径匹配示例,请参见示例。 表2 HealthCheck参数说明 参数 是否必填 参数类型 描述 protocol 否 String 健康检查使用的协议,支持TCP/HTTP。 connect_port 否 Int 健康检查使用的端口。支持值为1-65535。 delay 否 Int 健康检查的延迟时间,以秒为单位,1-50。 timeout 否 Int 健康检查的超时时间,以秒为单位,1-50。 path 否 String 健康检查的请求URL,当type为HTTP/HTTPS时生效。 以"/"开头,默认为"/"。支持使用字母、数字和短划线(-)、正斜线(/)、半角句号(.)、百分号(%)、半角问号(?)、井号(#)和and(&)以及扩展字符集。长度为1-80个字符。 max_retries 否 Int 最大重试次数,取值范围1-10。 表3 Condition参数说明 参数 是否必填 参数类型 描述 type 是 String 高级转发策略类型,当前仅支持header。 headerConfig 是 headerConfig Object 高级转发策略对象,详情请参见headerConfig。 表4 headerConfig参数说明 参数 是否必填 参数类型 描述 key 是 String 转发Header头。 长度限制1-40字符,只允许包含字母、数字、短划线和下划线。 values 是 String数组 转发Header头对应的值。 长度限制1-128字符,不支持空格, 双引号,支持以下通配符:*(匹配0个或更多字符)和?(正好匹配1个字符)。 执行如下命令创建MCI对象。 kubectl apply -f mci.yaml 回显如下。 multiClusterIngress.networking.karmada.io/nginx-ingress created 创建完成后,可以执行如下命令操作MCI对象。其中nginx-ingress为MCI对象的名称。 获取MCI对象:kubectl get mci nginx-ingress 更新MCI对象:kubectl edit mci nginx-ingress 删除MCI对象:kubectl delete mci nginx-ingress
  • 准备工作 如您在同一VPC下没有可用的ELB,需要先创建ELB实例,具体请参考创建独享型负载均衡器。该ELB实例需要满足以下条件: ELB为独享型。 ELB必须支持应用型(HTTP/HTTPS)。 ELB网络类型必须支持私网(有私有IP地址)。 MCI为跨集群后端工作负载提供统一入口和七层网络访问,因此需要在联邦中提前部署可用的工作负载(Deployment)和服务(Service)。若您无可用工作负载和服务,请参考无状态负载和集群内访问(ClusterIP)创建。
  • 临时路径挂载 适用于临时存储、灾难恢复、共享运行时数据等场景,工作负载实例的删除或者迁移会导致临时路径被删除。 参考创建无状态负载、创建有状态负载或创建守护进程集,在设置容器基本信息后,选择“数据存储”,在“本地存储”页签下单击添加。 设置添加本地磁盘参数,如表2。 表2 临时路径挂载 参数 参数说明 存储类型 临时路径(EmptyDir)。 磁盘介质 默认:即存储在硬盘上,适用于数据量大,读写效率要求低的场景。 内存:可以提高运行速度,但存储容量受内存大小限制。适用于数据量少,读写效率要求高的场景。 挂载路径 输入数据卷挂载到容器上的路径。 须知: 请不要挂载在系统目录下,如“/”、“/var/run”等,会导致容器异常。建议挂载在空目录下,若目录不为空,请确保目录下无影响容器启动的文件,否则文件会被替换,导致容器启动异常,应用创建失败。 挂载高危目录的情况下 ,建议使用低权限账号启动,否则可能会造成宿主机高危文件被破坏。 子路径 使用子路径挂载本地磁盘,实现在单一Pod中重复使用同一个Volume。不填写时默认为根。 权限 只读:只能读容器路径中的数据卷。 读写:可修改容器路径中的数据卷,容器迁移时新写入的数据不会随之迁移,会造成数据丢失。 重复添加可增加多条设置,单击“确认”完成配置。
  • 配置项挂载 “配置项挂载”用于处理工作负载配置参数。用户需要提前创建工作负载配置,操作步骤请参见配置项(ConfigMap)。 参考创建无状态负载、创建有状态负载或创建守护进程集,在设置容器基本信息后,选择“数据存储”,在“本地存储”页签下单击添加。 设置添加本地磁盘参数,如表3。 表3 配置项挂载 参数 参数说明 存储类型 配置项(ConfigMap)。 配置项 选择对应的配置项名称。 说明: 配置项需要提前创建,详情请参见配置项(ConfigMap)。 挂载路径 输入数据卷挂载到容器上的路径。 须知: 请不要挂载在系统目录下,如“/”、“/var/run”等,会导致容器异常。建议挂载在空目录下,若目录不为空,请确保目录下无影响容器启动的文件,否则文件会被替换,导致容器启动异常,应用创建失败。 挂载高危目录的情况下 ,建议使用低权限账号启动,否则可能会造成宿主机高危文件被破坏。 子路径 使用子路径挂载本地磁盘,实现在单一Pod中重复使用同一个Volume。不填写时默认为根。 权限 仅支持“只读”,只能读容器路径中的数据卷。 重复添加可增加多条设置,单击“确认”完成配置。
  • 主机路径挂载 在容器上挂载宿主机上的文件或目录。通常用于:“容器应用程序生成的日志文件需要永久保存”或者“需要访问宿主机上Docker引擎内部数据结构的容器应用”。 参考创建无状态负载、创建有状态负载或创建守护进程集,在设置容器基本信息后,选择“数据存储”,在“本地存储”页签下单击添加。 设置添加本地磁盘参数,如表1。 表1 主机路径挂载 参数 参数说明 存储类型 主机路径(HostPath)。 主机路径 输入主机路径,如/etc/hosts。 挂载路径 输入数据卷挂载到容器上的路径。 须知: 请不要挂载在系统目录下,如“/”、“/var/run”等,会导致容器异常。建议挂载在空目录下,若目录不为空,请确保目录下无影响容器启动的文件,否则文件会被替换,导致容器启动异常,应用创建失败。 挂载高危目录的情况下 ,建议使用低权限账号启动,否则可能会造成宿主机高危文件被破坏。 子路径 使用子路径挂载本地磁盘,实现在单一Pod中重复使用同一个Volume。不填写时默认为根。 权限 只读:只能读容器路径中的数据卷。 读写:可修改容器路径中的数据卷,容器迁移时新写入的数据不会随之迁移,会造成数据丢失。 重复添加可增加多条设置,单击“确认”完成配置。
  • master节点与组件升级命令说明 本地集群用户可以通过最新版本的本地集群命令行工具ucs-ctl来进行集群升级,对于管理组件和管理节点的升级,命令如下: ./ucs-ctl upgrade cluster [cluster_name] [flags] 可以配置的flag如下: -a:节点的全量升级,默认情况下upgrade cluster只会升级管理面节点和服务组件,加上-a后则表示全量升级,包括升级所有的业务节点。 -y:默认同意所有请求。 -patch:升级补丁包。 -R:回滚选项。
  • 升级操作 登录UCS控制台,选择“容器舰队”或“未加入舰队的集群”内一个正在运行的低版本集群,单击右下方“升级集群”。 下载更新工具,请使用一台能连接集群的节点作为执行机,先使用如下命令下载新版本的集群管理工具: curl https://ucs-onprem.obs.XXXX.huawei.com/toolkits/ucs-ctl/ucs-ctl -o ucs-ctl && chmod +x ucs-ctl 升级master节点,这里可以使用-y命令来跳过所有选择项,其他可配置的flag请参照master节点与组件升级命令说明: ./ucs-ctl upgrade cluster [cluster name] 集群名称需要和创建本地集群时指定的名称一致,如果不确定名称可进集群内,使用命令查看: ./ucs-ctl get cluster node节点升级,node节点升级可以选择两种升级方式: 全量升级,全量升级指的是将集群内剩余节点全部升级,命令如下: ./ucs-ctl upgrade node -a -c [cluster name] 分批次部分升级,为了防止升级过程出现业务中断的情况,用户也可以选择分批次部分升级节点,此时需要手动选择节点。 ./ucs-ctl upgrade node -n [node ip] -c [cluster name] 特殊情况:若本地集群目前只有master节点,无node节点,此时仅提供master节点的升级命令。 其他可配置的flag请参照node节点升级命令说明。
  • node节点升级命令说明 对于常规业务节点的升级,命令如下: ./ucs-ctl upgrade node [flags] -c [cluster_name] 其中必须指定集群名称,即加上`-c [cluster_name]`这个flag。 可以配置的flag如下: -a:节点的全量升级。 -y:默认同意所有请求。 -c:指定集群名称。 -r:回滚选项。 -n:指定节点IP。 -f:指定节点配置文件。
  • 使用存储卷声明挂载云存储 参考创建无状态负载、创建有状态负载或创建守护进程集,在设置容器基本信息后,选择“数据存储”,在“存储卷声明PVC”页签下单击添加。 选择需要添加的存储卷声明。如没有可选的存储卷声明,可单击“创建存储卷声明”进行添加,相关参数请参见创建存储卷声明。参数填写完成后,单击“确认”。 填写容器挂载参数。 挂载路径:输入数据卷挂载到容器上的路径。 请不要挂载在系统目录下,如“/”、“/var/run”等,会导致容器异常。建议挂载在空目录下,若目录不为空,请确保目录下无影响容器启动的文件,否则文件会被替换,导致容器启动异常,工作负载创建失败。 挂载高危目录的情况下 ,建议使用低权限账号启动,否则可能会造成宿主机高危文件被破坏。 子路径:Kubernetes中数据卷挂载的subPath,指引用卷内的子路径而不是其根路径。该参数不填写时,默认挂载至根路径。 设置权限。 只读:只能读容器路径中的数据卷。 读写:可修改容器路径中的数据卷,容器迁移时新写入的数据不会随之迁移,会造成数据丢失。 重复添加可增加多条存储卷声明设置。
  • 外部依赖 依赖项 功能解释 DNS服务器 DNS服务器需要能够解析OBS、SWR、IAM、DNS以及CIA服务的域名,这些服务的域名请参见地区及终端节点。 公网接入情况下,节点可自动识别默认DNS配置,需提前将DNS服务器上游设置为公网DNS,接下来无需再手动进行DNS服务器配置。 私网接入情况下,节点无法识别默认DNS配置,因此需提前配置好VPCEP解析能力,详情请参考安装前准备。若没有DNS服务器,可参考DNS进行搭建。 apt源 确保有可用的apt源,因为在本地集群执行纳管节点时(纳管节点是指待添加到本地集群管理的服务器),部分安装组件如ntp等,需要从apt源中获取依赖包。 NTP服务器 可选,用于保证集群各节点时间同步,如果使用,推荐用户提供外置NTP服务器。
  • 磁盘挂卷建议 节点类型 磁盘挂载点 可用大小(GB) 用途 集群管理节点 /var/lib/containerd 50 存放containerd镜像目录 /run/containerd 30 containerd运行时目录 /var/paas/run 50 etcd数据目录(推荐使用ssd盘) /var/paas/sys/log 20 存放日志目录 /mnt/paas 40 容器运行挂载目录 /tmp 20 临时文件目录 集群计算节点 /var/lib/containerd 100 存放containerd镜像目录 /run/containerd 50 containerd运行时目录 /mnt/paas 50 容器运行挂载目录
共100000条