华为云用户手册

  • 弹性云服务器-虚拟机 表1 弹性云服务器-虚拟机节点操作系统 操作系统 集群版本 CCE Standard集群 CCE Turbo集群 最新内核信息 VPC网络模型 容器隧道网络模型 云原生网络2.0 Huawei Cloud EulerOS 2.0 v1.29 √ √ √ 5.10.0-60.18.0.50.r1083_58.hce2.x86_64 v1.28 √ √ √ 5.10.0-60.18.0.50.r1083_58.hce2.x86_64 v1.27 √ v1.27.3-r0及以上版本支持 √ 5.10.0-60.18.0.50.r1083_58.hce2.x86_64 v1.25 √ v1.25.6-r0及以上版本支持 √ 5.10.0-60.18.0.50.r1083_58.hce2.x86_64 v1.23 √ v1.23.11-r0及以上版本支持 √ 5.10.0-60.18.0.50.r1083_58.hce2.x86_64 Huawei Cloud EulerOS 2.0 (ARM) v1.29 √ √ √ 5.10.0-60.18.0.50.r1083_58.hce2.aarch64 v1.28 √ √ √ 5.10.0-60.18.0.50.r1083_58.hce2.aarch64 v1.27 √ v1.27.3-r0及以上版本支持 √ 5.10.0-60.18.0.50.r1083_58.hce2.aarch64 v1.25 √ v1.25.6-r0及以上版本支持 √ 5.10.0-60.18.0.50.r1083_58.hce2.aarch64 v1.23 √ v1.23.11-r0及以上版本支持 √ 5.10.0-60.18.0.50.r1083_58.hce2.aarch64 Ubuntu 22.04 v1.29 √ × √ 5.15.0-92-generic v1.28 √ × √ 5.15.0-92-generic v1.27 √ × √ 5.15.0-92-generic v1.25 √ × √ 5.15.0-92-generic v1.23 √ × √ 5.15.0-92-generic Huawei Cloud EulerOS 1.1 v1.29 √ √ √ 3.10.0-1160.76.2.hce1c.x86_64 v1.28 √ √ √ 3.10.0-1160.76.2.hce1c.x86_64 v1.27 √ √ √ 3.10.0-1160.76.2.hce1c.x86_64 v1.25 √ √ √ 3.10.0-1160.76.2.hce1c.x86_64 v1.23 √ √ √ 3.10.0-1160.76.2.hce1c.x86_64 v1.21 √ √ √ 3.10.0-1160.76.2.hce1c.x86_64 CentOS Linux release 7.6 v1.29 √ √ √ 3.10.0-1160.108.1.el7.x86_64 v1.28 √ √ √ 3.10.0-1160.108.1.el7.x86_64 v1.27 √ √ √ 3.10.0-1160.108.1.el7.x86_64 v1.25 √ √ √ 3.10.0-1160.108.1.el7.x86_64 v1.23 √ √ √ 3.10.0-1160.108.1.el7.x86_64 v1.21(停止维护) √ √ √ 3.10.0-1160.108.1.el7.x86_64 v1.19(停止维护) √ √ √ 3.10.0-1160.108.1.el7.x86_64 v1.17.17(停止维护) √ √ √ 3.10.0-1160.15.2.el7.x86_64 v1.17.9(停止维护) √ √ √ 3.10.0-1062.12.1.el7.x86_64 v1.15.11(停止维护) √ √ √ 3.10.0-1062.12.1.el7.x86_64 v1.15.6-r1(停止维护) √ √ √ 3.10.0-1062.1.1.el7.x86_64 v1.13.10-r1(停止维护) √ √ √ 3.10.0-957.21.3.el7.x86_64 v1.13.7-r0(停止维护) √ √ √ 3.10.0-957.21.3.el7.x86_64 EulerOS release 2.9 v1.29 √ √ √ 4.18.0-147.5.1.6.h1152.eulerosv2r9.x86_64 v1.28 √ √ √ 4.18.0-147.5.1.6.h1152.eulerosv2r9.x86_64 v1.27 √ √ √ 4.18.0-147.5.1.6.h1152.eulerosv2r9.x86_64 v1.25 √ √ √ 4.18.0-147.5.1.6.h1152.eulerosv2r9.x86_64 v1.23 √ √ √ 4.18.0-147.5.1.6.h1152.eulerosv2r9.x86_64 v1.21(停止维护) √ √ √ 4.18.0-147.5.1.6.h1152.eulerosv2r9.x86_64 v1.19(停止维护) √ √ √ 4.18.0-147.5.1.6.h1152.eulerosv2r9.x86_64 EulerOS release 2.9 (ARM) v1.29 √ √ √ 4.19.90-vhulk2103.1.0.h1144.eulerosv2r9.aarch64 v1.28 √ √ √ 4.19.90-vhulk2103.1.0.h1144.eulerosv2r9.aarch64 v1.27 √ √ √ 4.19.90-vhulk2103.1.0.h1144.eulerosv2r9.aarch64 v1.25 √ √ √ 4.19.90-vhulk2103.1.0.h1144.eulerosv2r9.aarch64 v1.23 √ √ √ 4.19.90-vhulk2103.1.0.h1144.eulerosv2r9.aarch64 v1.21(停止维护) √ √ √ 4.19.90-vhulk2103.1.0.h1144.eulerosv2r9.aarch64 v1.19(停止维护) √ √ √ 4.19.90-vhulk2103.1.0.h1144.eulerosv2r9.aarch64 EulerOS release 2.8(ARM)(停止维护) v1.27及以上 × × × - v1.25(停止维护) √ √ √ 4.19.36-vhulk1907.1.0.h1350.eulerosv2r8.aarch64 v1.23(停止维护) √ √ √ 4.19.36-vhulk1907.1.0.h1350.eulerosv2r8.aarch64 v1.21(停止维护) √ √ √ 4.19.36-vhulk1907.1.0.h1350.eulerosv2r8.aarch64 v1.19.16(停止维护) √ √ √ 4.19.36-vhulk1907.1.0.h1350.eulerosv2r8.aarch64 v1.19.10(停止维护) √ √ √ 4.19.36-vhulk1907.1.0.h962.eulerosv2r8.aarch64 v1.17.17(停止维护) √ √ √ 4.19.36-vhulk1907.1.0.h962.eulerosv2r8.aarch64 v1.15.11(停止维护) √ √ √ 4.19.36-vhulk1907.1.0.h702.eulerosv2r8.aarch64 EulerOS release 2.5(停止维护) v1.27及以上 × × × - v1.25(停止维护) √ √ √ 3.10.0-862.14.1.5.h687.eulerosv2r7.x86_64 v1.23(停止维护) √ √ √ 3.10.0-862.14.1.5.h687.eulerosv2r7.x86_64 v1.21(停止维护) √ √ √ 3.10.0-862.14.1.5.h687.eulerosv2r7.x86_64 v1.19.16(停止维护) √ √ √ 3.10.0-862.14.1.5.h687.eulerosv2r7.x86_64 v1.19.10(停止维护) √ √ √ 3.10.0-862.14.1.5.h520.eulerosv2r7.x86_64 v1.19.8(停止维护) √ √ √ 3.10.0-862.14.1.5.h520.eulerosv2r7.x86_64 v1.17.17(停止维护) √ √ √ 3.10.0-862.14.1.5.h470.eulerosv2r7.x86_64 v1.17.9(停止维护) √ √ √ 3.10.0-862.14.1.5.h428.eulerosv2r7.x86_64 v1.15.11(停止维护) √ √ √ 3.10.0-862.14.1.5.h428.eulerosv2r7.x86_64 v1.15.6-r1(停止维护) √ √ √ 3.10.0-862.14.1.5.h328.eulerosv2r7.x86_64 v1.13.10-r1(停止维护) √ √ √ 3.10.0-862.14.1.2.h249.eulerosv2r7.x86_64 v1.13.7-r0(停止维护) √ √ √ 3.10.0-862.14.1.0.h197.eulerosv2r7.x86_64 Ubuntu 18.04 server 64bit(停止维护) v1.27及以上 × × × - v1.25(停止维护) √ × √ 4.15.0-171-generic v1.23(停止维护) √ × √ 4.15.0-171-generic v1.21(停止维护) √ × √ 4.15.0-171-generic v1.19.16(停止维护) √ × √ 4.15.0-171-generic v1.19.8(停止维护) √ × √ 4.15.0-136-generic v1.17.17(停止维护) √ × √ 4.15.0-136-generic
  • 使用kubectl创建配置项 请参见通过kubectl连接集群配置kubectl命令。 创建并编辑cce-configmap.yaml文件。 vi cce-configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: cce-configmap data: SPECIAL_LEVEL: Hello SPECIAL_TYPE: CCE 表2 关键参数说明 参数 说明 apiVersion 固定值为v1。 kind 固定值为ConfigMap。 metadata.name 配置项名称,可自定义。 data 配置项的数据,需填写键值对形式。 创建配置项。 kubectl create -f cce-configmap.yaml 查看已创建的配置项。 kubectl get cm NAME DATA AGE cce-configmap 3 7m
  • 操作场景 配置项(ConfigMap)是一种用于存储工作负载所需配置信息的资源类型,内容由用户决定。配置项创建完成后,可在容器工作负载中作为文件或者环境变量使用。 配置项允许您将配置文件从容器镜像中解耦,从而增强容器工作负载的可移植性。 配置项价值如下: 使用配置项功能可以帮您管理不同环境、不同业务的配置。 方便您部署相同工作负载的不同环境,配置文件支持多版本,方便您进行更新和回滚工作负载。 方便您快速将您的配置以文件的形式导入到容器中。
  • 操作步骤 登录CCE控制台,单击集群名称进入集群。 在左侧导航栏中选择“配置与密钥”,在右上角单击“创建配置项”。 填写参数。 表1 新建配置参数说明 参数 参数说明 名称 新建的配置项名称,同一个命名空间里命名必须唯一。 命名空间 新建配置项所在的命名空间。若不选择,默认为default。 描述 配置项的描述信息。 配置数据 配置项的数据。 键值对形式,单击添加。其中值支持String、JSON和YAML格式。 标签 配置项的标签。键值对形式,输入键值对后单击“确认添加”。 配置完成后,单击“确定”。 工作负载配置列表中会出现新创建的工作负载配置。
  • 集群控制面组件说明 当前CCE支持收集以下三种类型的控制面日志,每个日志流对应一个Kubernetes控制层面组件。关于这些组件的更多信息,请参见Kubernetes组件。 表1 集群控制面组件说明 类别 组件 日志流 说明 控制面组件日志 kube-apiserver kube-apiserver-{{clusterID}} kube-apiserver组件是暴露Kubernetes API接口的控制层面的组件。更多信息,请参见kube-apiserver。 kube-controller-manager kube-controller-manager-{{clusterID}} kube-controller-manager组件是Kubernetes集群内部的管理控制中心,内嵌了Kubernetes发布版本中核心的控制链路。更多信息,请参见kube-controller-manager。 kube-scheduler kube-scheduler-{{clusterID}} kube-scheduler组件是Kubernetes集群的默认调度器。更多信息,请参见kube-scheduler。
  • 查看集群控制面组件日志 通过CCE控制台查看目标集群控制面组件日志 登录CCE控制台,进入一个已有的集群,在左侧导航栏中选择“日志中心”。 选择“控制面组件日志”页签,在控制面日志中选中需要查看的日志主题,支持的控制面组件日志请参见集群控制面组件说明。关于该页面的操作详情,请参见LTS用户指南。 图3 查看控制面组件日志 通过LTS控制台查看目标集群控制面组件日志 登录LTS控制台,选择“日志管理”页面。 通过集群ID查到对应的日志组,单击该日志组名称,查看日志流,详情请参见LTS用户指南。 图4 通过LTS控制台查看控制面组件日志
  • 工作负载事件中出现Cluster pod max limit exceeded如何解决? 创建工作负载时,事件中出现以下错误: Cluster pod max limit exceeded(x) 该事件信息表示集群中的Pod数量达到上限值,无法再新建Pod,其中x为集群Pod数量上限,默认为500。 解决方案 请合理规划集群中的Pod数量,避免达到上限值。 集群中安装的插件实例会占用Pod配额,请合理规划。
  • 创建工作负载时无法拉取SWR镜像如何解决? 在Autopilot集群中创建工作负载时,出现以下错误: Failed to pull image "swr.cn-north-**.myhuaweicloud.com/**/nginx:latest": rpc error: code = Unknown desc = failed to pull and unpack image "swr.cn-north-7.myhuaweicloud.com/**/nginx:latest": failed to resolve reference "swr.cn-north-7.myhuaweicloud.com/**/nginx/latest": failed to do request: Head "https://swr.cn-north-**.myhuaweicloud.com/v2/**/nginx/manifests/latest": dial tcp 100.79.**.**:443: i/o timeout 报错信息中说明创建工作负载时无法拉取SWR镜像,请检查OBS和SWR终端节点是否正常。 解决方案 如果未创建OBS和SWR终端节点,请参考配置访问SWR和OBS服务的VPC终端节点进行配置。
  • 运维工程师:WILLIAM 运维工程师“WILLIAM”虽然也有了所有集群和命名空间的只读权限,但还需要在统一身份认证服务 IAM中为其设置区域的集群管理权限,因此单独为其创建一个用户组“cce-sre-b4”,然后配置区域项目的“CCE FullAccess”。 图7 为用户WILLIAM所在的用户组配置北京四项目的集群管理权限 由于之前已经为其设置过所有命名空间的只读权限,所以运维工程师“WILLIAM”现在就拥有了区域的集群管理权限和所有命名空间的只读权限。
  • 主管:DAVID 用户“DAVID”为该公司某部门的主管,根据权限设计需要为其配置CCE服务的所有权限(包括集群权限和命名空间权限),因此需要在统一身份认证服务 IAM中单独为DAVID创建用户组“cce-admin”,并配置所有项目的权限:“CCE Administrator”,这样主管DAVID的权限就配置好了。 CCE Administrator:CCE的管理员权限,拥有该服务的所有权限,不需要再赋予其他权限。 CCE FullAccess、CCE ReadOnlyAccess:CCE的集群管理权限,仅针对与集群相关的资源(如集群、节点)有效,您必须确保同时配置了“命名空间权限”,才能有操作Kubernetes资源(如工作负载、Service等)的权限。
  • 运维组长:JAMES 用户“JAMES”为该部门的运维组长,需要设置所有项目的集群权限和所有命名空间的只读权限。 在统一身份认证服务 IAM中先为用户“JAMES”单独创建并加入用户组“cce-sre”,然后为用户组“cce-sre”配置所有项目的集群权限:“CCE FullAccess”,用户组“cce-sre”便拥有了所有项目的集群管理权限,接下来还需要为其设置命名空间的只读权限。 图2 为运维组长JAMES所在的用户组授权 为所有组长和工程师添加所有集群和命名空间的只读权限 在统一身份认证服务 IAM中再创建一个只读用户组“read_only”,然后将相关用户都添加到此用户组中。 两个开发工程师虽然不需要配置集群的管理权限,但也需要查看CCE控制台,因此需要有集群的只读权限才能满足需求。 运维工程师需要某区域集群的管理权限,为方便管理,这里先为其赋予集群的只读权限。 运维组长已经拥有了所有集群的管理权限,为方便管理,也可以将其添加到“read_only”用户组中,为其赋予集群的只读权限。 将JAMES、ROBERT、WILLIAM、LINDA、PETER五个用户都添加到用户组“read_only”中。 图3 将相关用户添加到“read_only”用户组中 接下来为用户组“read_only”赋予集群的只读权限。 图4 为用户组赋予集群的只读权限 然后返回CCE控制台,为这五个用户所在的用户组“read_only”增加命名空间的只读权限,单击左侧栏目树中的“权限管理”,为用户组“read_only”逐个赋予所有集群的只读权限。 图5 为用户组赋予命名空间的只读权限 设置完成后,运维组长“JAMES”就拥有了所有项目的集群管理权限和所有命名空间的只读权限,而开发组长“ROBERT”、运维工程师“WILLIAM”以及两位开发工程师“LINDA”和“PRTER”则拥有了所有集群和命名空间的只读权限。
  • 概述 随着容器技术的快速发展,原有的分布式任务调度模式正在被基于Kubernetes的技术架构所取代。云容器引擎(Cloud Container Engine,简称CCE)是高度可扩展的、高性能的企业级Kubernetes集群,支持社区原生应用和工具。借助云容器引擎,您可以在云上轻松部署、管理和扩展容器化应用程序,快速高效的将微服务部署在云端。 为方便企业中的管理人员对集群中的资源权限进行管理,CCE后台提供了多种维度的细粒度权限策略和管理方式。CCE的权限管理包括“集群权限”和“命名空间权限”两种能力,分别从集群和命名空间两个层面对用户组或用户进行细粒度授权,具体解释如下: 集群权限:是基于IAM系统策略的授权,可以让用户组拥有“集群管理”、“节点管理”、“节点池管理”、“模板市场”、“插件管理”权限。 命名空间权限:是基于Kubernetes RBAC能力的授权,可以让用户或用户组拥有Kubernetes资源的权限,如“工作负载”、“网络管理”、“存储管理”、“命名空间”等的权限。 基于IAM系统策略的“集群权限”与基于Kubernetes RBAC能力的“命名空间权限”,两者是完全独立的,互不影响,但要配合使用。同时,为用户组设置的权限将作用于用户组下的全部用户。当给用户或用户组添加多个权限时,多个权限会同时生效(取并集)。
  • 配置镜像拉取策略 创建工作负载会从镜像仓库拉取容器镜像到节点上,当前Pod重启、升级时也会拉取镜像。 默认情况下容器镜像拉取策略imagePullPolicy是IfNotPresent,表示如果节点上有这个镜像就直接使用节点已有镜像,如果没有这个镜像就会从镜像仓库拉取。 容器镜像拉取策略还可以设置为Always,表示无论节点上是否有这个镜像,都会从镜像仓库拉取,并覆盖节点上的镜像。 apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - image: nginx:alpine name: container-0 resources: limits: cpu: 100m memory: 200Mi requests: cpu: 100m memory: 200Mi imagePullPolicy: Always imagePullSecrets: - name: default-secret 在CCE控制台也可以设置镜像拉取策略,在创建工作负载时设置“更新策略”:勾选表示总是拉取镜像(Always),不勾选则表示按需拉取镜像(IfNotPresent)。 图1 设置更新策略 建议您在制作镜像时,每次制作一个新的镜像都使用一个新的Tag,如果不更新Tag只更新镜像,当拉取策略选择为IfNotPresent时,CCE会认为当前节点已经存在这个Tag的镜像,不会重新拉取。 父主题: 容器设置
  • CCE Turbo集群Pod批量创建性能说明 CCE Turbo集群的Pod容器网卡申请自VPC的弹性网卡或者辅助弹性网卡,目前Pod与网卡(弹性网卡或辅助弹性网卡)的关联操作发生在Pod调度完成之后,Pod创建的速度受网卡创建与绑定速度的影响,具体限制如下表所示。 表3 容器网卡创建耗时 节点类型 网卡类型 可支持的最大网卡数 网卡绑定到节点上的操作 网卡可用耗时 并发控制 节点上的容器网卡默认预热配置 ECS节点 辅助弹性网卡 256 指定该节点的弹性网卡创建辅助弹性网卡 1s以内 租户级别:600/分钟 1.19.16-r2、1.21.5-r0、1.23.3-r0之前的集群版本:容器网卡不预热 1.19.16-r2、1.21.5-r0、1.23.3-r0到1.19.16-r4、1.21.7-r0、1.23.5-r0之间的集群版本:容器网卡动态预热(nic-minimum-target=10;nic-warm-target=2) 1.19.16-r4、1.21.7-r0、1.23.5-r0、1.25.1-r0及以上集群版本:容器网卡动态预热(nic-minimum-target=10;nic-maximum-target=0;nic-warm-target=2;nic-max-above-warm-target=2) BMS节点 弹性网卡 128 节点绑定弹性网卡 20s-30s 节点级别:3并发 1.19.16-r4、1.21.7-r0、1.23.5-r0之前的集群版本:容器网卡总数高低水位预热(nic-threshold=0.3:0.6) 1.19.16-r4、1.21.7-r0、1.23.5-r0、1.25.1-r0、1.28.1-r0及以上集群版本:容器网卡动态预热(nic-minimum-target=10;nic-maximum-target=0;nic-warm-target=2;nic-max-above-warm-target=2) 容器网卡预热会提前消耗容器子网的IP地址,进而影响集群可运行的Pod数规模,请根据业务规模合理规划配置容器网卡动态预热参数,详情请参见CCE Turbo配置容器网卡动态预热。 ECS节点创建Pod说明(采用辅助弹性网卡) 当Pod调度的节点上没有可用的已经预热的容器网卡时,会调用辅助弹性网卡的创建API,在该节点的一个弹性网卡上创建一个辅助弹性网卡;并把该辅助弹性网卡分配给该Pod。 当Pod调度的节点上有可用的已经预热的容器网卡时,会选择创建时间最长且未使用的一张辅助弹性网卡分配给该Pod。 受限于辅助弹性网卡的租户并发创建速度,容器网卡不预热的场景下,每分钟最多创建成功600个Pod;如果有更高的弹性要求,可根据业务场景合理配置容器网卡动态预热参数。 BMS节点创建Pod说明(采用弹性网卡) 当Pod调度的节点上没有可用的已经预热的容器网卡时,会调用节点绑定网卡的API,在该节点上绑定一个弹性网卡;并把该弹性网卡分配给该Pod。目前BMS节点绑定一张弹性网卡直至完全可用大约耗时在20s到30s不等。 当Pod调度的节点上有可用的已经预热的容器网卡时,会选择创建时间最长且未使用的一张弹性网卡分配给该Pod。 受限于BMS节点绑定弹性网卡的速度,容器网卡不预热的场景下,同一节点的Pod启动速度为:3个/20秒;所以针对BMS节点,强烈建议用户配置容器网卡全预热。
  • 云原生网络2.0网络模型 云原生网络2.0是自研的新一代容器网络模型,深度整合了虚拟私有云VPC的弹性网卡(Elastic Network Interface,简称ENI)和辅助弹性网卡(Sub Network Interface,简称Sub-ENI)的能力,直接从VPC网段内分配容器IP地址,支持ELB直通容器,绑定安全组,绑定弹性公网IP,享有高性能。 图1 云原生网络2.0 说明如下: 裸金属节点上Pod使用ENI网卡;ECS节点上Pod使用Sub-ENI网卡,Sub-ENI网卡通过VLAN子接口挂载在ENI上。 节点内Pod间通信:直接通过VPC的弹性网卡/弹性辅助网卡进行流量转发。 跨节点Pod间通信:直接通过VPC的弹性网卡/弹性辅助网卡进行流量转发。
  • 网段规划建议 在集群网络构成中介绍集群中网络地址可分为节点网络、容器网络、服务网络三块,在规划网络地址时需要从如下方面考虑: 三个网段不能重叠,否则会导致冲突。且集群所在VPC下所有子网(包括扩展网段子网)不能和容器网段、服务网段冲突。 保证每个网段有足够的IP地址可用。 节点网段的IP地址要与集群规模相匹配,否则会因为IP地址不足导致无法创建节点。 容器网段的IP地址要与业务规模相匹配,否则会因为IP地址不足导致无法创建Pod。 云原生网络2.0模型下,由于容器网段与节点网段共同使用VPC下的网络地址,建议容器子网与节点子网不要使用同一个子网,否则容易出现IP资源不足导致容器或节点创建失败的情况。 另外云原生网络2.0模型下容器网段支持在创建集群后增加子网,扩展可用IP数量,此时需要注意增加的子网不要与容器网段其他子网存在网络冲突。 图4 网段配置(创建集群时配置)
  • 步骤1:创建工作负载,并通过Ingress对外暴露服务 在cluster-1集群中部署应用,并测试访问。 复制以下文件保存到nginx-deploy.yaml文件。 apiVersion: apps/v1 kind: Deployment metadata: labels: version: v1 name: nginx namespace: default spec: selector: matchLabels: app: nginx version: v1 template: metadata: labels: app: nginx version: v1 spec: containers: - name: container-1 image: nginx:latest imagePullPolicy: IfNotPresent terminationGracePeriodSeconds: 30 dnsPolicy: ClusterFirst replicas: 1 --- apiVersion: v1 kind: Service metadata: name: nginx labels: app: nginx namespace: default spec: selector: app: nginx externalTrafficPolicy: Cluster ports: - name: cce-service-0 targetPort: 80 port: 80 protocol: TCP type: NodePort --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: nginx namespace: default spec: rules: - host: example.com http: paths: - path: / backend: service: name: nginx port: number: 80 property: ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH pathType: ImplementationSpecific ingressClassName: nginx 对cluster-1集群执行以下命令,创建工作负载。 kubectl apply -f nginx-deploy.yaml 在cluster-2集群中部署相同的应用,重复执行以上命令,创建相同的工作负载。
  • Node-problem-controller故障隔离 故障隔离仅1.16.0及以上版本的插件支持。 默认情况下,若多个节点发生故障,NPC至多为10%的节点添加污点,可通过参数npc. maxTaintedNode提高数量限制。 开源NPD插件提供了故障探测能力,但未提供基础故障隔离能力。对此,CCE在开源NPD的基础上,增强了Node-problem-controller(节点故障控制器组件,简称NPC),该组件参照Kubernetes节点控制器实现,针对NPD探测上报的故障,自动为节点添加污点以进行基本的节点故障隔离。 表11 参数说明 参数 说明 默认值 npc.enable 是否启用npc 1.18.0及以上版本不再支持该参数 true npc.maxTaintedNode 单个故障在多个节点间发生时,至多多少节点允许被npc添加污点,避免雪崩效应 支持int格式和百分比格式 10% 值域: int格式,数值范围为1到无穷大 百分比格式,数值范围为1%到100%,与集群节点数量乘积计算后最小值为1。 npc.nodeAffinity Controller的节点亲和性配置 N/A
  • Prometheus指标采集 NPD 守护进程POD通过端口19901暴露Prometheus metrics指标,NPD Pod默认被注释metrics.alpha.kubernetes.io/custom-endpoints: '[{"api":"prometheus","path":"/metrics","port":"19901","names":""}]'。您可以自建Prometheus采集器识别并通过http://{{NpdPodIP}}:{{NpdPodPort}}/metrics路径获取NPD指标。 NPD插件为1.16.5版本以下时,Prometheus指标的暴露端口为20257。 目前指标信息包含异常状态计数problem_counter与异常状态problem_gauge,如下所示 # HELP problem_counter Number of times a specific type of problem have occurred. # TYPE problem_counter counter problem_counter{reason="DockerHung"} 0 problem_counter{reason="DockerStart"} 0 problem_counter{reason="EmptyDirVolumeGroupStatusError"} 0 ... # HELP problem_gauge Whether a specific type of problem is affecting the node or not. # TYPE problem_gauge gauge problem_gauge{reason="CNIIsDown",type="CNIProblem"} 0 problem_gauge{reason="CNIIsUp",type="CNIProblem"} 0 problem_gauge{reason="CRIIsDown",type="CRIProblem"} 0 problem_gauge{reason="CRIIsUp",type="CRIProblem"} 0 ..
  • 版本记录 表12 CCE节点故障检测插件版本记录 插件版本 支持的集群版本 更新特性 社区版本 1.19.1 v1.21 v1.23 v1.25 v1.27 v1.28 v1.29 修复部分问题 0.8.10 1.19.0 v1.21 v1.23 v1.25 v1.27 v1.28 修复部分问题 0.8.10 1.18.48 v1.21 v1.23 v1.25 v1.27 v1.28 修复部分问题 0.8.10 1.18.46 v1.21 v1.23 v1.25 v1.27 v1.28 适配CCE v1.28版本 0.8.10 1.18.24 v1.19 v1.21 v1.23 v1.25 v1.27 修复部分问题 0.8.10 1.18.23 v1.19 v1.21 v1.23 v1.25 v1.27 修复部分问题 0.8.10 1.18.22 v1.19 v1.21 v1.23 v1.25 v1.27 - 0.8.10 1.18.21 v1.19 v1.21 v1.23 v1.25 v1.27 - 0.8.10 1.18.18 v1.19 v1.21 v1.23 v1.25 v1.27 适配CCE v1.27集群 0.8.10 1.18.14 v1.19 v1.21 v1.23 v1.25 支持插件实例AZ反亲和配置 支持在竞价实例被释放前给节点加污点,驱逐节点上的pod 插件挂载节点时区 0.8.10 1.18.10 v1.19 v1.21 v1.23 v1.25 配置界面优化 优化DiskSlow检查项,支持阈值配置 优化NTPProblem检查项,支持阈值配置 支持插件实例AZ反亲和配置 支持竞价实例中断检测,中断前驱逐节点上的pod 0.8.10 1.17.4 v1.17 v1.19 v1.21 v1.23 v1.25 优化DiskHung检查项 0.8.10 1.17.3 v1.17 v1.19 v1.21 v1.23 v1.25 NPC最大可打污点节点数支持百分比配置 新增进程Z状态检查项ProcessZ 优化NTPProblem检查项,支持检测时间偏差 修复BMS节点场景存在常驻D状态进程,干扰ProcessD检查项 0.8.10 1.17.2 v1.17 v1.19 v1.21 v1.23 v1.25 新增磁盘卡IO检查项DiskHung 新增磁盘慢IO检查项DiskSlow 新增进程D状态检查项ProcessD 新增挂载点健康检查MountPointProblem 避免与Service端口范围冲突,默认健康检查监听端口修改为19900,默认Prometheus指标暴露端口修改为19901。 新增支持1.25集群版本 0.8.10 1.16.4 v1.17 v1.19 v1.21 v1.23 新增beta检查项ScheduledEvent,支持通过metadata接口检测宿主机异常导致虚拟机进行冷热迁移事件。该检查项默认不开启。 0.8.10 1.16.3 v1.17 v1.19 v1.21 v1.23 新增ResolvConf配置文件检查。 0.8.10 1.16.1 v1.17 v1.19 v1.21 v1.23 新增node-problem-controller。支持基本故障隔离能力。 新增PID、FD、磁盘、内存、临时卷存储池、持久卷存储池检查项。 0.8.10 1.15.0 v1.17 v1.19 v1.21 v1.23 检测项全面加固,避免误报。 支持内核巡检。支持OOMKilling事件,TaskHung事件上报。 0.8.10 1.14.11 v1.17 v1.19 v1.21 适配CCE v1.21集群 0.7.1 1.14.5 v1.17 v1.19 修复监控指标无法被获取的问题 0.7.1 1.14.4 v1.17 v1.19 适配ARM64节点部署 适配containerd运行时节点 0.7.1 1.14.2 v1.17 v1.19 适配CCE v1.19集群 新增支持Ubuntu操作系统和安全容器场景 0.7.1 1.13.8 v1.15.11 v1.17 修复容器隧道网络下CNI健康检查问题 调整资源配额 0.7.1 1.13.6 v1.15.11 v1.17 修复僵尸进程未被回收的问题 0.7.1 1.13.5 v1.15.11 v1.17 增加污点容忍配置 0.7.1 1.13.2 v1.15.11 v1.17 增加资源限制,增强cni插件的检测能力 0.7.1
  • 插件简介 CCE节点故障检测插件(node-problem-detector,简称NPD)是一款监控集群节点异常事件的插件,以及对接第三方监控平台功能的组件。它是一个在每个节点上运行的守护程序,可从不同的守护进程中搜集节点问题并将其报告给apiserver。node-problem-detector可以作为DaemonSet运行, 也可以独立运行。 有关社区开源项目node-problem-detector的详细信息,请参见node-problem-detector。
  • 安装插件 登录CCE控制台,单击集群名称进入集群,单击左侧导航栏的“插件中心”,在右侧找到CCE节点故障检测插件,单击“安装”。 在安装插件页面,设置“规格配置”。 表1 npd插件规格配置 参数 参数说明 插件规格 该插件可配置“自定义”规格。 实例数 选择“自定义”规格时,您可根据需求调整插件实例数。 实例数为1时插件不具备高可用能力,当插件实例所在节点异常时可能导致插件功能无法正常使用,请谨慎选择。 容器 选择“自定义”规格时,您可根据需求调整插件实例的容器规格。 设置插件支持的“参数配置”。 仅v1.16.0及以上版本支持配置。 表2 npd插件参数配置 参数 参数说明 common.image.pullPolicy 镜像拉取策略,默认为IfNotPresent。 feature_gates 特性门控。 npc.maxTaintedNode 单个故障在多个节点间发生时,至多多少节点允许被npc添加污点,避免雪崩效应。 支持int格式和百分比格式。 npc.nodeAffinity Controller的节点亲和性配置。 设置插件实例的“调度策略”。 调度策略对于DaemonSet类型的插件实例不会生效。 设置多可用区部署或节点亲和策略时,需保证集群中存在满足调度策略的节点且拥有足够的资源,否则插件实例将无法运行。 表3 插件调度配置 参数 参数说明 多可用区部署 优先模式:优先将插件的Deployment实例调度到不同可用区的节点上,如集群下节点不满足多可用区,插件实例将调度到单可用区。 均分模式:插件Deployment实例均匀调度到当前集群下各可用区,增加新的可用区后建议扩容插件实例以实现跨可用区高可用部署;均分模式限制不同可用区间插件实例数相差不超过1,单个可用区资源不足会导致后续其他实例无法调度。 强制模式:插件Deployment实例强制调度到不同可用区的节点上,如集群下节点不满足多可用区,插件实例将无法全部运行。 节点亲和 不配置:插件实例不指定节点亲和调度。 指定节点调度:指定插件实例部署的节点。若不指定,将根据集群默认调度策略进行随机调度。 指定节点池调度:指定插件实例部署的节点池。若不指定,将根据集群默认调度策略进行随机调度。 自定义亲和策略:填写期望插件部署的节点标签实现更灵活的调度策略,若不填写将根据集群默认调度策略进行随机调度。 同时设置多条自定义亲和策略时,需要保证集群中存在同时满足所有亲和策略的节点,否则插件实例将无法运行。 容忍策略 容忍策略与节点的污点能力配合使用,允许(不强制)插件的 Deployment 实例调度到带有与之匹配的污点的节点上,也可用于控制插件的 Deployment 实例所在的节点被标记污点后插件的 Deployment 实例的驱逐策略。 插件会对实例添加针对node.kubernetes.io/not-ready和node.kubernetes.io/unreachable污点的默认容忍策略,容忍时间窗为60s。 详情请参见容忍策略。 单击“安装”。
  • 验证数据持久化 查看部署的应用及云硬盘文件。 执行以下命令,查看已创建的Pod。 kubectl get pod | grep web-evs 预期输出如下: web-evs-0 1/1 Running 0 38s 执行以下命令,查看云硬盘是否挂载至/data路径。 kubectl exec web-evs-0 -- df | grep data 预期输出如下: /dev/sdc 10255636 36888 10202364 0% /data 执行以下命令,查看/data路径下的文件。 kubectl exec web-evs-0 -- ls /data 预期输出如下: lost+found 执行以下命令,在/data路径下创建static文件。 kubectl exec web-evs-0 -- touch /data/static 执行以下命令,查看/data路径下的文件。 kubectl exec web-evs-0 -- ls /data 预期输出如下: lost+found static 执行以下命令,删除名称为web-evs-0的Pod。 kubectl delete pod web-evs-0 预期输出如下: pod "web-evs-0" deleted 删除后,StatefulSet控制器会自动重新创建一个同名副本。执行以下命令,验证/data路径下的文件是否更改。 kubectl exec web-evs-0 -- ls /data 预期输出如下: lost+found static static文件仍然存在,则说明云硬盘中的数据可持久化保存。
  • 前提条件 您已经创建好一个集群,并且在该集群中安装CCE容器存储(Everest)。 您已经创建好一块云硬盘,并且云硬盘满足以下条件: 已有的云硬盘不可以是系统盘、专属盘或共享盘。 云硬盘模式需选择SCSI(购买云硬盘时默认为VBD模式)。 云硬盘的状态可用,且未被其他资源使用。 云硬盘的可用区需要与集群节点的可用区相同,否则无法挂载将导致实例启动失败。 若云硬盘加密,所使用的密钥状态需可用。 仅支持选择集群所属企业项目和default企业项目下的云硬盘。 不支持使用已进行分区的云硬盘。 仅支持使用ext4类型的云硬盘。 如果您需要通过命令行创建,需要使用kubectl连接到集群,详情请参见通过kubectl连接集群。
  • 约束与限制 云硬盘不支持跨可用区挂载,且不支持被多个工作负载、同一个工作负载的多个实例或多个任务使用。由于CCE集群各节点之间暂不支持共享盘的数据共享功能,多个节点挂载使用同一个云硬盘可能会出现读写冲突、数据缓存冲突等问题,所以创建无状态工作负载时,若使用了EVS云硬盘,建议工作负载只选择一个实例。 1.19.10以下版本的集群中,如果使用HPA策略对挂载了EVS卷的负载进行扩容,当新Pod被调度到另一个节点时,会导致之前Pod不能正常读写。 1.19.10及以上版本集群中,如果使用HPA策略对挂载了EVS卷的负载进行扩容,新Pod会因为无法挂载云硬盘导致无法成功启动。
  • 解决方案 解决方案一:删除关联无IPv4私网地址ELB的负载均衡型Service。 解决方案二:为无IPv4私网IP地址的ELB绑定一个私网IP。步骤如下: 查找负载均衡类型的Service所关联的ELB。 方法一:通过升级前检查的日志信息中,获取对应的ELB ID。然后前往ELB控制台通过ELB ID进行筛选。 elbs (ids: [*****]) without ipv4 private ip, please bind private ip tothese elbs and try again 方法二:登录CCE控制台,前往“服务”页面查看服务,单击ELB名称,跳转到ELB界面。 确认ELB实例是否包含IPv4私网IP。 为无IPv4私网IP地址的ELB绑定一个私网IP。 登录CCE控制台,单击目标ELB名称。 在基本信息页面,单击“IPv4私有IP”旁的“绑定”。 设置子网及IPv4地址,并单击“确定”。
  • 部署应用并转换指标 如上所述的nginx:exporter提供的监控数据,其数据格式并不满足Prometheus的要求,需要将其转换成Prometheus需要的格式,可以使用nginx-prometheus-exporter来转换Nginx的指标,如下所示。 图2 使用exporter转换数据格式 使用nginx:exporter和nginx-prometheus-exporter部署到同一个Pod,如下所示。 kind: Deployment apiVersion: apps/v1 metadata: name: nginx-exporter namespace: default spec: replicas: 1 selector: matchLabels: app: nginx-exporter template: metadata: labels: app: nginx-exporter annotations: metrics.alpha.kubernetes.io/custom-endpoints: '[{"api":"prometheus","path":"/metrics","port":"9113","names":""}]' spec: containers: - name: container-0 image: 'nginx:exporter' # 替换为您上传到SWR的镜像地址 resources: limits: cpu: 250m memory: 512Mi requests: cpu: 250m memory: 512Mi - name: container-1 image: 'nginx/nginx-prometheus-exporter:0.9.0' command: - nginx-prometheus-exporter args: - '-nginx.scrape-uri=http://127.0.0.1:8080/stub_status' imagePullSecrets: - name: default-secret nginx/nginx-prometheus-exporter:0.9.0需要从公网拉取,需要集群节点绑定公网IP。 nginx-prometheus-exporter需要一个启动命令,nginx-prometheus-exporter -nginx.scrape-uri=http://127.0.0.1:8080/stub_status,用于获取nginx的监控数据。 另外Pod需要添加一个annotations,metrics.alpha.kubernetes.io/custom-endpoints: '[{"api":"prometheus","path":"/metrics","port":"9113","names":""}]'。
  • Prometheus监控数据采集说明 Prometheus通过周期性的调用应用程序的监控指标接口(默认为“/metrics”)获取监控数据,应用程序需要提供监控指标接口供Prometheus调用,且监控数据需要满足Prometheus的规范,如下所示。 # TYPE nginx_connections_active gauge nginx_connections_active 2 # TYPE nginx_connections_reading gauge nginx_connections_reading 0 Prometheus提供了各种语言的客户端,客户端具体请参见Prometheus CLIENT LIBRARIES,开发Exporter具体方法请参见WRITING EXPORTERS。Prometheus社区提供丰富的第三方exporter可以直接使用,具体请参见EXPORTERS AND INTEGRATIONS。
  • 网络 表2 网络 高危操作 导致后果 误操作后解决方案 修改内核参数net.ipv4.ip_forward=0 网络不通 修改内核参数为 net.ipv4.ip_forward=1 修改内核参数net.ipv4.tcp_tw_recycle=1 导致nat异常 修改内核参数 net.ipv4.tcp_tw_recycle=0 修改内核参数net.ipv4.tcp_tw_reuse=1 导致网络异常 修改内核参数 net.ipv4.tcp_tw_reuse=0 节点安全组配置未放通容器CIDR的53端口udp 集群内DNS无法正常工作 参照新建集群的安全组进行修复,放通安全组。 删除default-network的network-attachment-definitions的crd资源 容器网络不通,集群删除失败等 误删除该资源需要使用正确的配置重新创建default-network资源。 启动iptables防火墙 CCE默认不开启iptables防火墙,开启后可能造成网络不通 说明: 不建议开启iptables防火墙。如必须启动iptables防火墙,请在测试环境中确认/etc/sysconfig/iptables和/etc/sysconfig/ip6tables中配置的规则是否会对网络连通性造成影响。 关闭iptables防火墙,并检查/etc/sysconfig/iptables和/etc/sysconfig/ip6tables中配置的规则。
  • 负载均衡 表3 Service ELB 高危操作 导致后果 误操作后解决方案 禁止通过ELB的控制台删除已绑定CCE集群的ELB实例 导致Service/Ingress访问不通。 不建议删除。 通过ELB的控制台停用已绑定CCE集群的ELB实例 导致Service/Ingress访问不通。 不建议停用,请自行恢复。 通过ELB的控制台修改ELB的IPv4私有IP 基于IPv4私有IP进行私网流量转发功能会出现中断 Service/Ingress的YAML中status字段下的IP变化 不建议修改,请自行恢复。 通过ELB的控制台解绑ELB的IPv4公网IP 解绑公网IP后,该弹性负载均衡器变更为私网类型,无法进行公网流量转发。 请自行恢复。 通过ELB的控制台在CCE管理的ELB创建自定义的监听器 若ELB是创建Service/Ingress时自动创建的,在Service/Ingress删除时无法删除ELB的自定义监听器,会导致无法自动删除ELB。 通过Service/Ingress自动创建监听器,否则需要手动删除ELB。 通过ELB的控制台删除CCE自动创建的监听器 导致Service/Ingress访问不通。 在集群升级等需要重启控制节点的场景,所做修改会被CCE侧重置。 重新创建或更新Service/Ingress。 通过ELB的控制台修改CCE创建的监听器名称、访问控制、超时时间、描述等基本配置 如果监听器被删除,在集群升级等需要重启控制节点的场景,所做修改会被CCE侧重置。 不建议修改,请自行恢复。 通过ELB的控制台修改CCE创建的监听器后端服务器组,添加、删除后端服务器 导致Service/Ingress访问不通。 在集群升级等需要重启控制节点的场景,所做修改会被CCE侧重置: 用户删除的后端服务器会恢复 用户添加的后端服务器会被移除 重新创建或更新Service/Ingress。 通过ELB的控制台更换CCE创建的监听器后端服务器组 导致Service/Ingress访问不通。 在集群升级等需要重启控制节点的场景,后端服务器组中的后端服务器会被CCE侧重置。 重新创建或更新Service/Ingress。 通过ELB的控制台修改CCE创建的监听器转发策略,添加、删除转发规则 导致Service/Ingress访问不通。 如果该转发规则由Ingress添加,在集群升级等需要重启控制节点的场景,所做修改会被CCE侧重置。 不建议修改,请自行恢复。 通过ELB的控制台修改CCE管理的ELB证书 在集群升级等需要重启控制节点的场景,后端服务器组中的后端服务器会被CCE侧重置。 通过Ingress的YAML来自动管理证书。
共100000条