华为云用户手册

  • 第三方云厂商集群 由于第三方云厂商集群提供的KubeConfig文件格式存在差异,您需要自行创建一个具有所有集群资源操作权限的ServiceAccount,并获取这个ServiceAccount的token,用于配置UCS支持的KubeConfig文件。 通过kubectl连接集群。 创建ucs-service-account.yaml文件。 apiVersion: v1kind: ServiceAccountmetadata: name: ucs-user---apiVersion: v1kind: Secretmetadata: name: ucs-user-token annotations: kubernetes.io/service-account.name: "ucs-user"type: kubernetes.io/service-account-token---apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRolemetadata: name: ucs-user-rolerules:- apiGroups: - '*' resources: - '*' verbs: - '*'- nonResourceURLs: - '*' verbs: - get---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: ucs-user-role-bindingsubjects: - kind: ServiceAccount name: ucs-user namespace: defaultroleRef: kind: ClusterRole name: ucs-user-role apiGroup: rbac.authorization.k8s.io 在集群中执行以下命令创建ServiceAccount。 kubectl apply -f ucs-service-account.yaml 使用以下命令获取token。 kubectl get secret ucs-user-token -n default -oyaml | grep token: | awk '{print $2}' | base64 -d ;echo 配置KubeConfig文件。 参考以下示例创建一个kubeconfig.yaml文件,并将token替换为4中获取的值。 kubeconfig.yaml: kind: ConfigapiVersion: v1preferences: {}clusters: - name: internalCluster cluster: server: 'https://kubernetes.default.svc.cluster.local:443' insecure-skip-tls-verify: trueusers: - name: ucs-user user: token: 'MIIFbAYJKo*****'contexts: - name: internal context: cluster: internalCluster user: ucs-usercurrent-context: internal KubeConfig文件中的关键参数说明如下: 参数名 参数值 说明 是否可选 server 'https://kubernetes.default.svc.cluster.local:443' APIServer的集群内访问地址。由于部分厂商集群对APIServer地址做了外部访问限制,可能导致UCS无法正常接入集群,因此建议使用集群内访问地址。 必选 insecure-skip-tls-verify true 如使用该参数,表示跳过证书认证,参数值必须为true。 二选一 说明: 当server字段为集群内访问地址时,优选跳过证书认证。 certificate-authority-data base64加密字符串 如使用该参数,表示集群开启双向认证,参数值为经base64加密后的服务端证书。 原生K8s集群的服务端证书默认地址为master节点的“/etc/kubernetes/pki/ca.crt”。 token base64加密字符串 用户以token方式进行认证,参数值为4中获取的token值。 三选一 说明: 优选token方式,UCS不支持除这三种方式外的其他认证方式。 client-certificate-data client-key-data base64加密字符串 用户以证书加私钥的方式进行认证。 client-certificate-data:经base64加密后的客户端证书。 client-key-data:经base64加密后的客户端私钥。 username password 字符串 用户通过用户名密码进行认证。 username:访问集群的用户名。 password:用户名对应的密码。 使用5中配置的KubeConfig文件导入集群,详细步骤请继续参考注册附着集群(公网接入)或注册附着集群(私网接入)。 使用UCS期间,创建的ServiceAccount、ClusterRole、ClusterRoleBinding对象均不能删除,否则token将会失效。 如集群不再接入UCS,可使用kubectl delete -f ucs-service-account.yaml命令删除UCS创建的SA对象。
  • 配置含义 在CPU配额和内存配额设置中,申请与限制的含义如下: 勾选“申请”表示启动该配置,系统根据申请值调度该实例到满足条件的节点去部署工作负载。 不勾选“申请”表示系统调度实例到随机的一个节点去部署工作负载。 勾选“限制”表示启动该配置,根据设定的值,限制工作负载使用的资源。 不勾选“限制”表示实例使用的资源不做限制,但若实例使用的内存资源超过节点可分配内存时,可能会导致工作负载不可用或者节点不可用。 创建工作负载时,建议设置CPU和内存的资源上下限。同一个节点上部署的工作负载,对于未设置资源上下限的工作负载,如果其异常资源泄露会导致其它工作负载分配不到资源而异常。未设置资源上下限的工作负载,工作负载监控信息也会不准确。
  • 使用示例 以集群包含一个资源为4Core 8GB的节点为例,已经部署一个包含两个实例的工作负载到该集群上,并设置两个实例(实例1,实例2)的资源为{CPU申请,CPU限制,内存申请,内存限制}={1Core,2Core,2GB,2GB}。 那么节点上CPU和内存的资源使用情况如下: 节点CPU可分配量=4Core-(实例1申请的1Core+实例2申请的1Core)=2Core 节点内存可分配量=8GB-(实例1申请的2GB+实例2申请的2GB)=4GB 因此节点还剩余2Core 4GB的资源可供下一个新增的实例使用。
  • 启动命令 在默认情况下,镜像启动时会运行默认命令,如果想运行特定命令或重写镜像默认值,需要进行相应设置。 Docker的镜像拥有存储镜像信息的相关元数据,如果不设置生命周期命令和参数,容器运行时将运行镜像制作时提供的默认的命令和参数,Docker将这两个字段定义为ENTRYPOINT和 CMD。 如果在创建工作负载时填写了容器的运行命令和参数,将会覆盖镜像构建时的默认命令ENTRYPOINT、CMD,规则如下: 表1 容器如何执行命令和参数 镜像 ENTRYPOINT 镜像CMD 容器运行命令 容器运行参数 最终执行 [touch] [/root/test] 未设置 未设置 [touch /root/test] [touch] [/root/test] [mkdir] 未设置 [mkdir] [touch] [/root/test] 未设置 [/opt/test] [touch /opt/test] [touch] [/root/test] [mkdir] [/opt/test] [mkdir /opt/test] 在创建工作负载时,配置容器信息,选择“生命周期”。 在“启动命令”页签,输入运行命令和运行参数。 表2 容器启动命令 命令方式 操作步骤 运行命令 输入可执行的命令,例如“/run/server”。 若运行命令有多个,多个命令之间用空格进行分隔。若命令本身带空格,则需要加引号("")。 说明: 多命令时,运行命令建议用/bin/sh或其他的shell,其他全部命令作为参数来传入。 运行参数 输入控制容器运行命令参数,例如--port=8080。 若参数有多个,多个参数以换行分隔。
  • 启动后处理 在创建工作负载时,配置容器信息,选择“生命周期”。 在“启动后处理”页签,设置启动后处理的参数。 表3 启动后处理-参数说明 参数 说明 命令行方式 在容器中执行指定的命令,配置为需要执行的命令。命令的格式为Command Args[1] Args[2]…(Command为系统命令或者用户自定义可执行程序,如果未指定路径则在默认路径下寻找可执行程序),如果需要执行多条命令,建议采用将命令写入脚本执行的方式。不支持后台执行和异步执行的命令。 如需要执行的命令如下: exec: command: - /install.sh - install_agent 请在执行脚本中填写: /install install_agent。这条命令表示容器创建成功后将执行install.sh。 HTTP请求方式 发起一个HTTP调用请求。配置参数如下: 路径:请求的URL路径,可选项。 端口:请求的端口,必选项。 主机地址:请求的IP地址,可选项,默认是容器所在的节点IP。
  • 停止前处理 在创建工作负载时,配置容器信息,选择“生命周期”。 在“停止前处理”页签,设置停止前处理的命令。 表4 停止前处理 参数 说明 命令行方式 在容器中执行指定的命令,配置为需要执行的命令。命令的格式为Command Args[1] Args[2]…(Command为系统命令或者用户自定义可执行程序,如果未指定路径则在默认路径下寻找可执行程序),如果需要执行多条命令,建议采用将命令写入脚本执行的方式。 如需要执行的命令如下: exec: command: - /uninstall.sh - uninstall_agent 请在执行脚本中填写: /uninstall uninstall_agent。这条命令表示容器结束前将执行uninstall.sh。 HTTP请求方式 发起一个HTTP调用请求。配置参数如下: 路径:请求的URL路径,可选项。 端口:请求的端口,必选项。 主机地址:请求的IP地址,可选项,默认是容器所在的节点IP。
  • YAML样例 本节以nginx为例,说明kubectl命令设置容器生命周期的方法。 在以下配置文件中,您可以看到postStart命令在容器目录/bin/bash下写了个install.sh命令。 preStop执行uninstall.sh命令。 apiVersion: apps/v1kind: Deploymentmetadata: name: nginxspec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - image: nginx command: - sleep 3600 #启动命令 imagePullPolicy: Always lifecycle: postStart: exec: command: - /bin/bash - install.sh #启动后命令 preStop: exec: command: - /bin/bash - uninstall.sh #停止前命令 name: nginx imagePullSecrets: - name: default-secret
  • 非扁平网络 非扁平网络指的是两个或多个Kubernetes集群的Pod之间因为网络模型不支持、容器网段冲突等原因无法直接通信,而是通过一个东西向流量的转发网关,实现非扁平网络集群间的通信。 图2 非扁平网络 相比于扁平网络,非扁平网络的使用约束少: 所有集群VPC之间的网络需要互通,可以处于同一VPC内,也可以将多个集群的VPC通过其他方式(对等连接、云连接等)连通。 对等连接可参考:创建同一帐户下的对等连接。 云连接可参考:同区域同帐号VPC互通。 非扁平网络对用户集群的网络模型没有特别的要求,用户集群只需要将Gateway地址暴露出来,供其他集群访问即可。但是因为使用集中的流量入口,性能瓶颈主要集中在网关上,而且多一次的转发,会对通信时延产生一定的影响。 在ASM控制台为网格添加集群时,需要为集群配置一个东西向流量的私网ELB,作为其他集群的访问入口。 图3 添加集群
  • 扁平网络 扁平网络指的是两个或多个Kubernetes集群的Pod之间能够直接访问,而无需通过其他组件转发,能够提供更高的通信效率。 图1 扁平网络 使用扁平网络对Kubernetes集群的网络模型、网络连通性、规划网段有一定的约束: 所有集群必须使用容器对接ENI的网络模型,通过VPC的路由实现Pod之间跨集群通信。支持CCE集群和CCE Turbo集群。如果使用CCE集群,在创建时,网络模型需要选择“VPC网络”;如果使用CCE Turbo集群,在创建时,网络模型需要选择“云原生网络2.0”。 集群的网络类型可参考:集群网络构成。 所有集群VPC之间需要互通,可以处于同一VPC内,也可以将多个集群的VPC通过其他方式(对等连接、云连接等)连通。如果集群处于不同VPC内,要注意VPC的网段之间不要冲突。 对等连接可参考:创建同一帐户下的对等连接。 云连接可参考:同区域同帐号VPC互通。 所有集群要有统一的网络规划,所有集群的容器网段、服务网段之间不能冲突。如果多个集群处于不同VPC,那么所有集群的VPC网段也不能冲突。同时,以上网段不能和网格控制面网段冲突。
  • 扁平网络和非扁平网络集群混合场景 图4 扁平网络和非扁平网络混合部署 为了减少运维负担,不建议扁平网络和非扁平网络的集群混合加入ASM网格中,如果必须混合部署,有以下使用约束: 所有扁平网络的集群必须使用容器对接ENI的网络模型,对非扁平网络的集群没有特殊要求。 所有集群VPC之间的网络需要互通,可以处于同一VPC内,也可以将多个集群的VPC通过其他方式(对等连接、云连接等)连通。如果集群处于不同VPC内,要注意VPC的网段之间不要冲突。 对等连接可参考:创建同一帐户下的对等连接。 云连接可参考:同区域同帐号VPC互通。 所有集群(包括非扁平网络)的容器网段、服务网段之间不能冲突。例如:混合网络拓扑场景下,CCE集群Cluster1为扁平网络拓扑,CCE集群Cluster2为非扁平网络拓扑,那么Cluster1的容器网段、服务网段不能和Cluster2的容器网段、服务网段冲突,即使Cluster2集群为非扁平网络拓扑。 如果多个集群处于不同VPC,那么所有集群的VPC网段也不能冲突。同时,以上网段不能和网格控制面网段冲突。
  • 步骤一:注册集群 登录UCS控制台,在左侧导航栏中选择“容器舰队”。 单击本地集群选项卡中的“注册集群”按钮。 参考表1填写待添加集群的基础信息,其中带“*”的参数为必填参数。 表1 注册集群基础信息配置 参数 参数说明 集群名称* 输入集群的自定义名称,需以小写字母开头,由小写字母、数字、中划线(-)组成,且不能以中划线(-)结尾。 资源类型* 当前仅支持Bare Metal。 所属区域* 选择集群所在的区域。 集群标签 非必填项,以键值对的形式为集群添加标签,可以通过标签实现集群的分类。键值对可自定义,以字母或者数字开头和结尾,由字母、数字、连接符(-)、下划线(_)、点号(.)组成,且63个字符之内。 容器舰队 选择集群所属的舰队。 舰队用于权限精细化管理,一个集群只能加入一个舰队。若不选择舰队,集群注册成功后将显示在“未加入舰队的集群”页签下,后续还可以再添加至舰队中。 不支持在注册集群阶段选择已开通集群联邦能力的舰队,如果一定要加入这个舰队,请在集群注册成功后,再添加到该舰队中。关于集群联邦的介绍,请参见开通集群联邦章节。 如需新建舰队,请参见容器舰队管理。 单击“确定”,集群注册成功后如图1所示,请在24小时内接入网络。您可选择集群的接入方式或单击右上角按钮查看详细的网络接入流程。 如您未在24小时内接入网络,将会导致集群注册失败,可单击右上角按钮重新注册集群。如果已经接入但数据未采集上来,请等待2分钟后刷新集群。 图1 集群等待接入状态
  • 步骤二:接入网络 在UCS控制台成功添加集群后,集群状态将会显示为“等待安装并接入”,此时UCS并没有为集群安装Kubernetes软件以及打通与集群的网络连接,因此需要在集群中配置网络代理来接入网络并完成集群安装。 请在添加集群后的24小时内接入网络,您可单击右上角按钮查看详细的网络接入流程。如您未在24小时内接入网络,将会导致集群注册失败,可单击右上角按钮重新注册集群。如果已经接入但状态未更新,请等待2分钟后刷新集群。 前往UCS控制台,单击待接入集群栏的“公网接入”,可查看详细的公网接入流程。 下载本地集群代理配置文件“agent-[集群名称].yaml”。 集群代理配置存在私有秘钥信息,每个集群代理配置仅能下载一次,请您妥善保管。 输入集群安装所需参数并下载本地集群配置文件“cluster-[集群名称].yaml”。 图2 下载本地集群配置文件 通过远程传输工具,使用root用户将下载的“agent-[集群名称].yaml”和“agent-[集群名名称].yaml”文件上传到执行机的“/root/”目录下。 执行机如果出现SSH连接超时,请参考虚拟机SSH连接超时处理方法处理。 复制安装命令,并在“/root/”目录下执行命令: 图3 安装本地集群 前往UCS控制台刷新集群状态,集群处于“运行中”。 图4 集群运行中状态
  • 检查节点apt源 在本地集群执行纳管节点操作时(纳管节点是指待添加到本地集群管理的服务器),部分安装组件如ntpdate等,需要从apt源中获取依赖包。故纳管节点前,请确保节点上apt源是可用的,若不可用,请执行如下操作。 以安装用户(默认为root)登录待安装的集群管理节点。 编辑“/etc/apt/sources.list”。 具体信息以实际规划的apt源服务器地址为准。 保存文件,执行如下命令。 sudo apt-get update (可选)若有多个管理节点,如HA版本,请分别登录到规划的管理节点执行上述操作。
  • 主机最小化安装要求 不使用的软件包不允许存在系统中 遵循最小化安装原则,只安装业务需要的软件包与服务组件。减少系统漏洞,降低系统遭受攻击风险。 用于生产环境的系统中不允许保留开发和编译工具 系统中不允许存在如下开发工具和编译工具: 'cpp' (/usr/bin/cpp)'gcc' (/usr/bin/gcc)'ld' (/usr/bin/ld)'lex' (/usr/bin/lex)'rpcgen' (/usr/bin/rpcgen) 如果产品的生产环境,比如在部署或运行过程中需要python、lua等解释器,则可以保留解释器运行环境,否则不允许保留。 'python' (/usr/bin/python)'lua' (/usr/bin/lua) 同样情形适用于perl解释器,Suse系统的一些管理程序依赖perl解释器,在这种情形下,则可保留perl解释器,否则需要去除。 perl (/usr/bin/perl) 操作系统中不允许安装显示安全策略的工具 防止系统的安全信息泄露。依照业务需求,预安装的安全加固工具,限制其文件的所有者为root,并且仅root具有执行权限。 操作系统中不允许存在网络嗅探类的工具 tcpdump、ethereal等嗅探工具不允许出现在系统上,防止被恶意使用。 在不需要Modems系统中不应默认安装Modems 在不需要Modems系统中不应默认安装Modems,严格遵循系统最小化安装。
  • 集群安装检查项 检查类型 检查名 检查内容 检查通过标准 集群检查 节点架构检查 所有安装的Master节点架构检查 所有安装节点架构必须一致 节点主机名检查 所有安装的Master节点主机名检查 所有安装节点主机名必须不同 节点时钟同步检查 所有安装的Master节点时钟同步状态检查 所有安装节点主机时间差异必须小于10秒 VIP使用检查 VIP是否被其他节点占用 VIP必须处于空闲状态,检查依据22端口是否能被访问通 节点检查 节点语言检查 节点语言设置必须符合约束 节点语言设置符合en_US.UTF-8、en_GB.UTF-8任何一种 节点操作系统检查 节点操作系统必须符合约束 节点操作系统为Ubuntu 22.04 系统命令检查 节点具备基础命令行工具 操作系统具备以下命令行工具:ifconfig、netstat、curl、systemctl、nohup、pidof、mount、uname、lsmod、swapoff、hwclock、ip、ntpdate(对接ntp场景具备) 端口空闲检查 节点必装服务端口未被占用 操作系统以下端口未被占用: 4001、4002、4003、2380、2381、2382、4011、4012、4013、4005、4006、4007、5444、8080、10257、10259、4133、20100、9444、20102、9443、5443、4134、4194、10255、10248、10250、80、443、10256、10249、20101 keepalive安装检查 keepalive未安装 执行apt list --installed keepalive列表无对应服务 haproxy安装检查 haproxy未安装 执行apt list --installed haproxy列表无对应服务 runit安装检查 runit未安装 执行apt list --installed runit列表无对应服务 paas用户检查 节点paas用户处于可创建状态 节点paas用户不存在且id为1000的用户未被占用 ntp服务检查 ntp服务处于可用状态 节点执行ntpdate -u ${ntp_server}可正常访问ntp
  • 方案优势 UCS容器迁移的主要优势包括: 易用性 在集群评估、镜像迁移、应用备份和应用迁移阶段,迁移过程已实现工具化。这些工具免安装,简单轻量且配置灵活。 多版本 支持Kubernetes 1.19以上版本的集群迁移。 无依赖 迁移工具不需要任何外部依赖,可以独立运行。 多架构 迁移工具支持在Linux(x86、arm)、Windows环境中运行。 多场景 支持多种场景的集群迁移,满足您不同迁移需求,具体如表1所示。 表1 迁移场景 场景 说明 本地IDC集群迁移上云 将位于本地数据中心的Kubernetes集群迁移到华为云UCS管理的Kubernetes集群,实现应用程序的云端部署和运维管理。 第三方云集群跨云迁移 将位于其他云服务提供商的Kubernetes集群迁移到华为云UCS管理的Kubernetes集群,实现跨云迁移和统一管理。 不同Region UCS华为云集群迁移 在华为云UCS管理的Kubernetes集群间进行迁移,将应用程序从一个地理区域迁移到另一个地理区域,以满足数据合规性、延迟和可用性等需求。 同Region UCS华为云集群迁移 在同一地理区域内的华为云UCS管理的Kubernetes集群间进行迁移,实现资源优化、应用升级或其他管理需求。 不停机 迁移过程无需停机,不影响源集群业务。
  • 工具包 在集群评估、镜像迁移、应用备份和应用迁移阶段,迁移过程已实现工具化。您需要预先下载这些工具并将它们上传到前述服务器。 对于Linux操作系统来说,使用下述工具前,需要运行chmod u+x 工具名命令(例如chmod u+x kspider-linux-amd64),授予可执行权限。 表1 准备工作 工具 说明 下载链接 备注 kspider kspider是一款用于采集源集群信息的工具,它向用户提供了集群的Kubernetes版本、规模、工作负载数量、存储以及正在使用的镜像等数据,这些信息有助于用户了解集群的当前状况,评估迁移风险,并选择合适的目标集群版本和规模。 Linux x86:https://ucs-migration.obs.cn-north-4.myhuaweicloud.com/toolkits/kspider-linux-amd64 Linux arm:https://ucs-migration.obs.cn-north-4.myhuaweicloud.com/toolkits/kspider-linux-arm64 Windows:https://ucs-migration.obs.cn-north-4.myhuaweicloud.com/toolkits/kspider-windows-amd64.exe 这些工具均支持在Linux(x86、arm)和Windows系统上运行,请根据服务器操作系统类型下载对应的工具。 image-migrator image-migrator是一个镜像迁移工具,能够自动将基于Docker Registry v2搭建的Docker镜像仓库或第三方云镜像仓库中的镜像迁移到SWR中。 Linux x86:https://ucs-migration.obs.cn-north-4.myhuaweicloud.com/toolkits/image-migrator-linux-amd64 Linux arm:https://ucs-migration.obs.cn-north-4.myhuaweicloud.com/toolkits/image-migrator-linux-arm64 Windows:https://ucs-migration.obs.cn-north-4.myhuaweicloud.com/toolkits/image-migrator-windows-amd64.exe k8clone k8clone是一个简便的Kubernetes元数据克隆工具,它可以将Kubernetes元数据(对象)保存为本地压缩包,然后将这些元数据恢复到目标集群中。 Linux x86:https://ucs-migration.obs.cn-north-4.myhuaweicloud.com/toolkits/k8clone-linux-amd64 Linux arm:https://ucs-migration.obs.cn-north-4.myhuaweicloud.com/toolkits/k8clone-linux-arm64 Windows:https://ucs-migration.obs.cn-north-4.myhuaweicloud.com/toolkits/k8clone-windows-amd64.exe
  • 步骤三:购买终端节点 登录VPC终端节点控制台,单击“购买终端节点”。 选择终端节点的区域。 选择“按名称查找服务”,输入服务名称“cn-north-4.open-vpcep-svc.29696ab0-1486-4f70-ab35-a3f6b1b37c02”,并单击“验证”。 图3 购买终端节点 选择步骤一:准备网络环境中与集群网络连通的虚拟私有云以及对应的子网。 “节点IP”选择“自动分配”或“手动分配”均可。 单击“立即购买”,规格确认无误后,单击“提交”。 以同样方法购买其他VPCEP,并将他们配置到所使用的DNS服务器中。
  • 前提条件 已在UCS控制台申请本地集群试用。 UCS集群配额充足。 节点/tmp目录需要预留20GB空间。 根据安装前检查确保待安装节点检查项已满足。 准备一台执行机,要求与集群网络连通。 在UCS提供服务的区域中创建一个VPC,具体操作请参见创建虚拟私有云和子网,当前仅支持“华北-北京四”区域。 该VPC子网网段不能与IDC中已使用的网络网段重叠,否则将无法接入集群。例如,IDC中已使用的VPC子网为192.168.1.0/24,那么华为云VPC中不能使用192.168.1.0/24这个子网。
  • 步骤二:注册集群 登录UCS控制台,在左侧导航栏中选择“容器舰队”。 单击本地集群选项卡中的“注册集群”按钮。 参考表1填写待添加集群的基础信息,其中带“*”的参数为必填参数。 表1 注册集群基础信息配置 参数 参数说明 集群名称* 输入集群的自定义名称,需以小写字母开头,由小写字母、数字、中划线(-)组成,且不能以中划线(-)结尾。 资源类型* 当前仅支持Bare Metal。 所属区域* 选择集群所在的区域。 集群标签 非必填项,以键值对的形式为集群添加标签,可以通过标签实现集群的分类。键值对可自定义,以字母或者数字开头和结尾,由字母、数字、连接符(-)、下划线(_)、点号(.)组成,且63个字符之内。 容器舰队 选择集群所属的舰队。 舰队用于权限精细化管理,一个集群只能加入一个舰队。若不选择舰队,集群注册成功后将显示在“未加入舰队的集群”页签下,后续还可以再添加至舰队中。 不支持在注册集群阶段选择已开通集群联邦能力的舰队,如果一定要加入这个舰队,请在集群注册成功后,再添加到该舰队中。关于集群联邦的介绍,请参见开通集群联邦章节。 如需新建舰队,请参见容器舰队管理。 单击“确定”,集群注册成功后如图2所示,请在24小时内接入网络。您可选择集群的接入方式或单击右上角按钮查看详细的网络接入流程。 如您未在24小时内接入网络,将会导致集群注册失败,可单击右上角按钮重新注册集群。如果已经接入但数据未采集上来,请等待2分钟后刷新集群。 图2 集群等待接入状态
  • 步骤四:接入集群 登录UCS控制台,在“等待安装并接入”状态下的目标集群栏中单击“私网接入”。 选择步骤三:购买终端节点中创建的终端节点,创建并下载本地集群代理配置文件“agent-[集群名称].yaml”。 图4 下载本地集群代理配置文件 集群代理配置存在私有秘钥信息,每个集群代理配置仅能下载一次,请您妥善保管。 输入集群安装所需参数并下载本地集群配置文件“cluster-[集群名称].yaml”。 图5 下载本地集群配置文件 通过远程传输工具,使用root用户将下载的“agent-[集群名称].yaml”和“agent-[集群名名称].yaml”文件上传到执行机的“/root/”目录下。 执行机如果出现SSH连接超时,请参考虚拟机SSH连接超时处理方法处理。 复制安装命令,并在“/root/”目录下执行命令: 图6 安装本地集群 前往UCS控制台刷新集群状态,集群处于“运行中”。 图7 集群运行中状态
  • 操作步骤 登录UCS控制台,在左侧导航栏中选择“容器舰队”。 单击已开通集群联邦的容器舰队名称,进入容器舰队详情页面。 在左侧导航栏选择“HPA策略”,选择HPA策略所在的命名空间,并单击右上角“创建HPA策略”。 图1 HPA策略 设置参数。 图2 创建HPA策略 策略名称:新建策略的名称,命名必须唯一。 命名空间:选择HPA策略的命名空间,也就是无状态工作负载所在的命名空间。 生效工作负载:选择需要创建策略的无状态工作负载。 指标项:触发弹性扩缩容策略的系统指标,可选“CPU”或者“内存”。 触发策略:选择触发策略及其指标阈值,阈值需为整数。支持“使用率”和“平均使用量”两种触发策略。 使用率:单位为%,使用率 = 工作负载Pod的实际使用量 / 申请量。 平均使用量:指标项选择“CPU”时,单位为微核;指标项选择“内存”时单位为兆。 容忍度:实际监控指标相对于目标值的波动范围,大于该波动范围时,触发扩容或缩容。取值范围是:0-1,保留的小数不超过2位。例如触发策略为CPU使用率80%,容忍度0.1,则高于CPU使用率72%时触发扩容,低于CPU使用率88%时触发缩容。 冷却时间:上次扩/缩容和本次扩/缩容之间的时间间隔,表示策略成功触发后,在缩容/扩容冷却时间内,不会再次触发缩容/扩容。 目标集群:设置目标集群优先级和实例范围,仅显示工作负载部署的集群。优先级数字越大,优先级级别越高。 若提示“Metrics Server未安装”,请先在目标集群中安装Metrics Server插件,具体操作请参见安装Metrics Server插件。 单击“确定”。创建成功后可在HPA策略列表中查看。
  • 安装Metrics Server插件 Metrics Server插件作为集群核心资源监控数据的聚合器,可在您的集群中便捷地进行安装。 使用以下命令安装Metrics Server。 kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml 使用以下命令验证Metrics Server是否安装成功。 kubectl get deployment metrics-server -n kube-system 如果输出结果类似于以下内容,则表示安装成功。 NAME READY UP-TO-DATE AVAILABLE AGEmetrics-server 1/1 1 1 6m
  • 使用限制 需要创建弹性扩缩容策略的集群至少有一个Pod, 如果没有实例则会自动进行扩容。 一个集群一次扩容的实例数的上限为min(max(4,2 * currentReplicas),MaxReplicas)个,防止一次性扩容个数过多。 使用HPA需要在集群中安装能够提供Metrics API的插件,如metrics-server或Prometheus。若使用Prometheus,需要将Prometheus注册为Metrics API的服务,详见提供资源指标。
  • 版本记录 建议升级到跟集群配套的最新volcano版本。 表4 集群版本配套关系 集群版本 支持的插件版本 v1.25 1.7.1、1.7.2 v1.23 1.7.1、1.7.2 v1.21 1.7.1、1.7.2 v1.19.16 1.3.7、1.3.10、1.4.5、1.7.1、1.7.2 v1.19 1.3.7、1.3.10、1.4.5 v1.17(停止维护) 1.3.7、1.3.10、1.4.5 v1.15(停止维护) 1.3.7、1.3.10、1.4.5 表5 CCE插件版本记录 插件版本 支持的集群版本 更新特性 1.9.1 /v1.19.16.*|v1.21.*|v1.23.*|v1.25.*/ 修复networkresource插件计数pipeline pod占用subeni问题 修复binpack插件对资源不足节点打分问题 修复对结束状态未知的pod的资源的处理 优化事件输出 默认高可用部署 1.7.2 /v1.19.16.*|v1.21.*|v1.23.*|v1.25.*/ Volcano 支持 Kubernetes 1.25版本 提升Volcano调度性能。 1.7.1 /v1.19.16.*|v1.21.*|v1.23.*|v1.25.*/ Volcano 支持 Kubernetes 1.25版本 1.6.5 /v1.19.*|v1.21.*|v1.23.*/ 支持作为CCE的默认调度器 支持混部场景下统一调度 1.4.5 /v1.17.*|v1.19.*|v1.21.*/ volcano-scheduler的部署方式由statefulset调整为deployment,修复节点异常时Pod无法自动迁移的问题 1.4.2 /v1.15.*|v1.17.*|v1.19.*|v1.21.*/ 修复跨GPU分配失败问题 适配更新后的EAS API 1.3.3 /v1.15.*|v1.17.*|v1.19.*|v1.21.*/ 修复GPU异常导致的调度器崩溃问题;修复特权Init容器准入失败问题 1.3.1 /v1.15.*|v1.17.*|v1.19.*/ 升级Volcano框架到最新版本 支持Kubernetes 1.19版本 添加numa-aware插件 修复多队列场景下Deployment扩缩容的问题 调整默认开启的算法插件 1.2.5 /v1.15.*|v1.17.*|v1.19.*/ 修复某些场景下OutOfcpu的问题 修复queue设置部分capability情况下Pod无法调度问题 支持volcano组件日志时间与系统时间保持一致 修复队列间多抢占问题 修复ioaware插件在某些极端场景下结果不符合预期的问题 支持混合集群 1.2.3 /v1.15.*|v1.17.*|v1.19.*/ 修复因为精度不够引发的训练任务OOM的问题 修复CCE1.15以上版本GPU调度的问题,暂不支持任务分发时的CCE版本滚动升级 修复特定场景下队列状态不明的问题 修复特定场景下作业挂载PVC panic的问题 修复GPU作业无法配置小数的问题 添加ioaware插件 添加ring controller
  • Volcano 1.0.0版本升级说明 Volcano 1.0.0版本与后续版本不兼容,不支持在控制台升级。如想使用新版本Volcano插件,需要先卸载1.0.0版本,然后再在控制台安装新版本。 执行如下命令可以卸载Volcano。 kubectl delete crd jobs.batch.volcano.sh kubectl delete crd commands.bus.volcano.sh
  • Prometheus指标采集 volcano-scheduler通过端口8080暴露Prometheus metrics指标。您可以自建Prometheus采集器识别并通过http://{{volcano-schedulerPodIP}}:{{volcano-schedulerPodPort}}/metrics路径获取volcano-scheduler调度相关指标。 Prometheus指标暴露仅支持volcano插件1.8.5及以上版本。 表3 关键指标说明 指标名称 指标类型 描述 Labels e2e_scheduling_latency_milliseconds Histogram 端到端调度时延毫秒(调度算法+绑定) - e2e_job_scheduling_latency_milliseconds Histogram 端到端作业调度时延(毫秒) - e2e_job_scheduling_duration Gauge 端到端作业调度时长 labels=["job_name", "queue", "job_namespace"] plugin_scheduling_latency_microseconds Histogram 插件调度延迟(微秒) labels=["plugin", "OnSession"] action_scheduling_latency_microseconds Histogram 动作调度时延(微秒) labels=["action"] task_scheduling_latency_milliseconds Histogram 任务调度时延(毫秒) - schedule_attempts_total Counter 尝试调度Pod的次数。“unschedulable”表示无法调度Pod,而“error”表示内部调度器问题 labels=["result"] pod_preemption_victims Gauge 选定的抢占受害者数量 - total_preemption_attempts Counter 集群中的抢占尝试总数 - unschedule_task_count Gauge 无法调度的任务数 labels=["job_id"] unschedule_job_count Gauge 无法调度的作业数 - job_retry_counts Counter 作业的重试次数 labels=["job_id"]
  • 在控制台中修改volcano-scheduler配置 Volcano允许用户在安装,升级,编辑时,编写Volcano调度器配置信息,并将配置内容同步到volcano-scheduler-configmap里。 当前小节介绍如何使用自定义配置,以便用户让volcano-scheduler能更适合自己的场景。 仅Volcano 1.7.1及以上版本支持该功能。在新版插件界面上合并了原plugins.eas_service和resource_exporter_enable等选项,以新选项default_scheduler_conf代替。 您可登录CCE控制台,单击集群名称进入集群,单击左侧导航栏的“插件管理”,在右侧找到Volcano,单击“安装”或“升级”,并在“参数配置”中设置Volcano调度器配置参数。 使用resource_exporter配置,示例如下: { "ca_cert": "", "default_scheduler_conf": { "actions": "allocate, backfill", "tiers": [ { "plugins": [ { "name": "priority" }, { "name": "gang" }, { "name": "conformance" } ] }, { "plugins": [ { "name": "drf" }, { "name": "predicates" }, { "name": "nodeorder" } ] }, { "plugins": [ { "name": "cce-gpu-topology-predicate" }, { "name": "cce-gpu-topology-priority" }, { "name": "cce-gpu" }, { "name": "numa-aware" # add this also enable resource_exporter } ] }, { "plugins": [ { "name": "nodelocalvolume" }, { "name": "nodeemptydirvolume" }, { "name": "nodeCSIscheduling" }, { "name": "networkresource" } ] } ] }, "server_cert": "", "server_key": ""} 开启后可以同时使用volcano-scheduler的numa-aware插件功能和resource_exporter功能。 使用eas_service配置,示例如下: { "ca_cert": "", "default_scheduler_conf": { "actions": "allocate, backfill", "tiers": [ { "plugins": [ { "name": "priority" }, { "name": "gang" }, { "name": "conformance" } ] }, { "plugins": [ { "name": "drf" }, { "name": "predicates" }, { "name": "nodeorder" } ] }, { "plugins": [ { "name": "cce-gpu-topology-predicate" }, { "name": "cce-gpu-topology-priority" }, { "name": "cce-gpu" }, { "name": "eas", "custom": { "availability_zone_id": "", "driver_id": "", "endpoint": "", "flavor_id": "", "network_type": "", "network_virtual_subnet_id": "", "pool_id": "", "project_id": "", "secret_name": "eas-service-secret" } } ] }, { "plugins": [ { "name": "nodelocalvolume" }, { "name": "nodeemptydirvolume" }, { "name": "nodeCSIscheduling" }, { "name": "networkresource" } ] } ] }, "server_cert": "", "server_key": ""} 使用ief配置,示例如下: { "ca_cert": "", "default_scheduler_conf": { "actions": "allocate, backfill", "tiers": [ { "plugins": [ { "name": "priority" }, { "name": "gang" }, { "name": "conformance" } ] }, { "plugins": [ { "name": "drf" }, { "name": "predicates" }, { "name": "nodeorder" } ] }, { "plugins": [ { "name": "cce-gpu-topology-predicate" }, { "name": "cce-gpu-topology-priority" }, { "name": "cce-gpu" }, { "name": "ief", "enableBestNode": true } ] }, { "plugins": [ { "name": "nodelocalvolume" }, { "name": "nodeemptydirvolume" }, { "name": "nodeCSIscheduling" }, { "name": "networkresource" } ] } ] }, "server_cert": "", "server_key": ""}
  • 保留原volcano-scheduler-configmap配置 假如在某场景下希望插件升级后时沿用原配置,可参考以下步骤: 查看原volcano-scheduler-configmap配置,并备份。 示例如下: # kubectl edit cm volcano-scheduler-configmap -n kube-systemapiVersion: v1data: default-scheduler.conf: |- actions: "enqueue, allocate, backfill" tiers: - plugins: - name: priority - name: gang - name: conformance - plugins: - name: drf - name: predicates - name: nodeorder - name: binpack arguments: binpack.cpu: 100 binpack.weight: 10 binpack.resources: nvidia.com/gpu binpack.resources.nvidia.com/gpu: 10000 - plugins: - name: cce-gpu-topology-predicate - name: cce-gpu-topology-priority - name: cce-gpu - plugins: - name: nodelocalvolume - name: nodeemptydirvolume - name: nodeCSIscheduling - name: networkresource 在控制台“参数配置”中填写自定义修改的内容: { "ca_cert": "", "default_scheduler_conf": { "actions": "enqueue, allocate, backfill", "tiers": [ { "plugins": [ { "name": "priority" }, { "name": "gang" }, { "name": "conformance" } ] }, { "plugins": [ { "name": "drf" }, { "name": "predicates" }, { "name": "nodeorder" }, { "name": "binpack", "arguments": { "binpack.cpu": 100, "binpack.weight": 10, "binpack.resources": "nvidia.com/gpu", "binpack.resources.nvidia.com/gpu": 10000 } } ] }, { "plugins": [ { "name": "cce-gpu-topology-predicate" }, { "name": "cce-gpu-topology-priority" }, { "name": "cce-gpu" } ] }, { "plugins": [ { "name": "nodelocalvolume" }, { "name": "nodeemptydirvolume" }, { "name": "nodeCSIscheduling" }, { "name": "networkresource" } ] } ] }, "server_cert": "", "server_key": ""} 使用该功能时会覆盖原volcano-scheduler-configmap中内容,所以升级时务必检查是否在volcano-scheduler-configmap做过修改。如果是,需要把修改内容同步到升级界面里。
  • 安装插件 登录UCS控制台,单击集群名称进入集群,单击左侧导航栏的“插件管理”,找到Volcano,单击“安装”。 该插件可配置“单实例”、“高可用”或自定义规格。 选择自定义时,volcano-controller和volcano-scheduler的建议值如下: 小于100个节点,可使用默认配置,即CPU的申请值为500m,限制值为2000m;内存的申请值为500Mi,限制值为2000Mi。 高于100个节点,每增加100个节点(10000个Pod),建议CPU的申请值增加500m,内存的申请值增加1000Mi;CPU的限制值建议比申请值多1500m,内存的限制值建议比申请值多1000Mi。 申请值推荐计算公式: CPU申请值:计算“目标节点数 * 目标Pod规模”的值,并在表1中根据“集群节点数 * Pod规模”的计算值进行插值查找,向上取最接近规格的申请值及限制值。 例如2000节点和2w个Pod的场景下,“目标节点数 * 目标Pod规模”等于4000w,向上取最接近的规格为700/7w(“集群节点数 * Pod规模”等于4900w),因此建议CPU申请值为4000m,限制值为5500m。 内存申请值:建议每1000个节点分配2.4G内存,每1w个Pod分配1G内存,二者叠加进行计算。(该计算方法相比表1中的建议值会存在一定的误差,通过查表或计算均可) 即:内存申请值 = 目标节点数/1000 * 2.4G + 目标Pod规模/1w * 1G。 例如2000节点和2w个Pod的场景下,内存申请值 = 2 * 2.4G + 2 * 1G = 6.8G 表1 volcano-controller和volcano-scheduler的建议值 集群节点数/Pod规模 CPU Request(m) CPU Limit(m) Memory Request(Mi) Memory Limit(Mi) 50/5k 500 2000 500 2000 100/1w 1000 2500 1500 2500 200/2w 1500 3000 2500 3500 300/3w 2000 3500 3500 4500 400/4w 2500 4000 4500 5500 500/5w 3000 4500 5500 6500 600/6w 3500 5000 6500 7500 700/7w 4000 5500 7500 8500 选择插件实例是否多可用区部署。 优先模式:优先将插件的Deployment实例调度到不同可用区的节点上,如集群下节点不满足多可用区,插件实例将调度到单可用区。 强制模式:插件Deployment实例强制调度到不同可用区的节点上,如集群下节点不满足多可用区,插件实例将无法全部运行。 配置插件实例节点亲和策略。 指定节点调度:指定插件实例部署的节点 ,若不指定,将根据集群默认调度策略进行随机调度。 自定义亲和策略:填写期望插件部署的节点标签实现更灵活的调度策略,若不填写将根据集群默认调度策略进行随机调度。自定义亲和策略详情请参见调度策略(亲和与反亲和) 配置volcano默认调度器配置参数,详情请参见表2。 colocation_enable: ''default_scheduler_conf: actions: 'allocate, backfill' tiers: - plugins: - name: 'priority' - name: 'gang' - name: 'conformance' - name: 'lifecycle' arguments: lifecycle.MaxGrade: 10 lifecycle.MaxScore: 200.0 lifecycle.SaturatedTresh: 1.0 lifecycle.WindowSize: 10 - plugins: - name: 'drf' - name: 'predicates' - name: 'nodeorder' - plugins: - name: 'cce-gpu-topology-predicate' - name: 'cce-gpu-topology-priority' - name: 'cce-gpu' - plugins: - name: 'nodelocalvolume' - name: 'nodeemptydirvolume' - name: 'nodeCSIscheduling' - name: 'networkresource' 表2 Volcano插件配置参数说明 插件 功能 参数说明 用法演示 colocation_enable 是否开启混部能力。 参数值: true:表示开启混部。 false:不是不开启混部。 - binpack 将Pod调度到资源使用较高的节点以减少资源碎片 binpack.weight:binpack插件本身在所有插件打分中的权重 binpack.cpu:CPU资源在资源比重的比例,默认是1 binpack.memory:memory资源在所有资源中的比例,默认是1 binpack.resources:资源类型。 - plugins: - name: binpack arguments: binpack.weight: 10 binpack.cpu: 1 binpack.memory: 1 binpack.resources: nvidia.com/gpu, example.com/foo binpack.resources.nvidia.com/gpu: 2 binpack.resources.example.com/foo: 3 conformance 跳过关键Pod,比如在kube-system命名空间的Pod,防止这些Pod被驱逐 - - lifecycle 通过统计业务伸缩的规律,将有相近生命周期的Pod优先调度到同一节点,配合autoscaler的水平扩缩容能力,快速缩容释放资源,节约成本并提高资源利用率。 1. 统计业务负载中Pod的生命周期,将有相近生命周期的Pod调度到同一节点 2. 对配置了自动扩缩容策略的集群,通过调整节点的缩容注解,优先缩容使用率低的节点 arguments参数: lifecycle.WindowSize:为int型整数,不小于1,默认为10。 记录副本数变更的次数,负载变化规律、周期性明显时可适当调低;变化不规律,副本数频繁变化需要调大。若过大会导致学习周期变长,记录事件过多。 lifecycle.MaxGrade:为int型整数,不小于3,默认为3。 副本分档数,如设为3,代表分为高中低档。负载变化规律、周期性明显时可适当调低;变化不规律,需要调大。若过小会导致预测的生命周期不够准确。 lifecycle.MaxScore:为float64浮点数,不小于50.0,默认为200.0。 lifecycle插件的最大得分,等效于插件权重。 lifecycle.SaturatedTresh:为float64浮点数,小于0.5时取值为0.5;大于1时取值为1,默认为0.8。 用于判断节点利用率是否过高的阈值,当超过该阈值,调度器会优先调度作业至其他节点。 - plugins: - name: priority - name: gang enablePreemptable: false - name: conformance - name: lifecycle arguments: lifecycle.MaxGrade: 10 lifecycle.MaxScore: 200.0 lifecycle.SaturatedTresh: 1.0 lifecycle.WindowSize: 10 说明: 对不希望被缩容的节点,需要手动标记长周期节点,为节点添加volcano.sh/long-lifecycle-node: true的annotation。对未标记节点,lifecycle插件将根据节点上负载的生命周期自动标记。 MaxScore默认值200.0相当于其他插件权重的两倍,当lifecycle插件效果不明显或与其他插件冲突时,需要关闭其他插件,或将MaxScore调大。 调度器重启后,lifecycle插件需要重新记录负载的变化状况,需要统计数个周期后才能达到最优调度效果。 gang 将一组Pod看做一个整体去分配资源 - - priority 使用用户自定义负载的优先级进行调度 - - overcommit 将集群的资源放到一定倍数后调度,提高负载入队效率。负载都是deployment的时候,建议去掉此插件或者设置扩大因子为2.0。 overcommit-factor: 扩大因子,默认是1.2 - plugins: - name: overcommit arguments: overcommit-factor: 2.0 drf 根据作业使用的主导资源份额进行调度,用的越少的优先 - - predicates 预选节点的常用算法,包括节点亲和,Pod亲和,污点容忍,node ports重复,volume limits,volume zone匹配等一系列基础算法 - - nodeorder 优选节点的常用算法 nodeaffinity.weight:节点亲和性优先调度,默认值是1 podaffinity.weight:Pod亲和性优先调度,默认值是1 leastrequested.weight:资源分配最少的的节点优先,默认值是1 balancedresource.weight:node上面的不同资源分配平衡的优先,默认值是1 mostrequested.weight:资源分配最多的的节点优先,默认值是0 tainttoleration.weight:污点容忍高的优先调度,默认值是1 imagelocality.weight:node上面有Pod需要镜像的优先调度,默认值是1 selectorspread.weight: 把Pod均匀调度到不同的节点上,默认值是0 volumebinding.weight: local pv延迟绑定调度,默认值是1 podtopologyspread.weight: Pod拓扑调度,默认值是2 - plugins: - name: nodeorder arguments: leastrequested.weight: 1 mostrequested.weight: 0 nodeaffinity.weight: 1 podaffinity.weight: 1 balancedresource.weight: 1 tainttoleration.weight: 1 imagelocality.weight: 1 volumebinding.weight: 1 podtopologyspread.weight: 2 cce-gpu-topology-predicate GPU拓扑调度预选算法 - - cce-gpu-topology-priority GPU拓扑调度优选算法 - - cce-gpu 结合CCE的GPU插件支持GPU资源分配,支持小数GPU配置 说明: 小数GPU配置的前提条件为CCE集群GPU节点为共享模式,检查集群是否关闭GPU共享,请参见集群配置管理中的enable-gpu-share参数。 - - numaaware numa拓扑调度 weight: 插件的权重 - networkresource 支持预选过滤ENI需求节点,参数由CCE传递,不需要手动配置 NetworkType: 网络类型(eni或者vpc-router类型) - nodelocalvolume 支持预选过滤不符合local volume需求节点 - - nodeemptydirvolume 支持预选过滤不符合emptydir需求节点 - - nodeCSIscheduling 支持预选过滤everest组件异常节点 - - 单击“安装”。
共100000条