华为云用户手册

  • 创建工作负载 使用构建的hpa-example镜像创建无状态工作负载,副本数为1,镜像地址与上传到SWR仓库的组织有关,需要替换为实际取值。 kind: Deployment apiVersion: apps/v1 metadata: name: hpa-example spec: replicas: 1 selector: matchLabels: app: hpa-example template: metadata: labels: app: hpa-example spec: containers: - name: container-1 image: 'hpa-example:latest' # 替换为您上传到SWR的镜像地址 resources: limits: # limits与requests建议取值保持一致,避免扩缩容过程中出现震荡 cpu: 500m memory: 200Mi requests: cpu: 500m memory: 200Mi imagePullSecrets: - name: default-secret 然后再为这个负载创建一个Nodeport类型的Service,以便能从外部访问。 Nodeport类型的Service从外网访问需要为集群某个节点创建EIP,创建完后需要同步节点信息,具体请参见同步节点信息。如果节点已有EIP则无需再次创建。 或者您也可以创建带ELB的Service从外部访问,具体请参见通过kubectl命令行创建-自动创建ELB。 kind: Service apiVersion: v1 metadata: name: hpa-example spec: ports: - name: cce-service-0 protocol: TCP port: 80 targetPort: 80 nodePort: 31144 selector: app: hpa-example type: NodePort
  • 基本概念 集群:集群是计算资源的集合,包含一组节点资源,容器运行在节点上。在创建容器应用前,您需要存在一个可用集群。 节点:节点是指接入到平台的计算资源,包括虚拟机、物理机等。用户需确保节点资源充足,若节点资源不足,会导致创建应用等操作失败。 容器工作负载:容器工作负载指运行在CCE上的一组实例。CCE提供第三方应用托管功能,提供从部署到运维全生命周期管理。本节指导用户通过容器镜像创建您的第一个容器工作负载。
  • 使用云服务 云容器引擎CCE:提供高可靠高性能的企业级容器应用管理服务,支持Kubernetes社区原生应用和工具,简化云上自动化容器运行环境搭建。 弹性 云服务器ECS :一种可随时自助获取、可弹性伸缩的云服务器,帮助用户打造可靠、安全、灵活、高效的应用环境,确保服务持久稳定运行,提升运维效率。 虚拟私有云VPC :是用户在云上申请的隔离的、私密的虚拟网络环境。用户可以自由配置VPC内的IP地址段、子网、安全组等子服务,也可以申请弹性带宽和弹性IP搭建业务系统。
  • 安装MinIO MinIO 是一个兼容S3接口协议的高性能对象存储开源工具。若使用MinIO进行存放集群迁移的备份文件,您需要一台临时服务器用于部署MinIO并对外提供服务。若您使用OBS存放备份文件,请忽略此步骤,前往安装Velero。 MinIO的安装位置选择有如下几种: 集群外临时E CS 将MinIO服务端安装在集群外,能够保障集群发生灾难性故障时,备份文件不会受到影响。 集群内的空闲节点 您可以远程登录节点安装MinIO服务端,也可以选择容器化安装MinIO,请参考Velero官方文档https://velero.io/docs/v1.7/contributions/minio/#set-up-server。 如使用容器化安装MinIO: Velero官方文档提供的YAML文件中存储类型为empty dir,建议将其修改为HostPath或Local类型,否则容器重启后将永久丢失备份文件。 您需将MinIO服务对外提供访问,否则将无法在集群外下载备份文件,可选择将Service修改为NodePort类型或使用其他类型的公网访问服务。 无论使用何种方法进行部署,安装MinIO的服务器需要有足够的存储空间,且均需要绑定EIP并在安全组中开放MinIO的服务端口,否则将无法上传(下载)备份文件。 本示例选择在一台集群外的临时ECS上安装MinIO,步骤如下。 下载MinIO对象存储。 mkdir /opt/minio mkdir /opt/miniodata cd /opt/minio wget https://dl.minio.io/server/minio/release/linux-amd64/minio chmod +x minio 设置MinIO的用户名及密码。 此方法设置的用户名及密码为临时环境变量,在服务重启后需要重新设定,否则会使用默认root凭据minioadmin:minioadmin来创建服务。 export MINIO_ROOT_USER=minio export MINIO_ROOT_PASSWORD=minio123 创建服务,其中/opt/miniodata/为MinIO 存储数据的本地磁盘路径。 MinIO的API端口默认为9000,console端口默认为随机生成,您可使用--console-address参数指定console访问端口。 ./minio server /opt/miniodata/ --console-address ":30840" & 安装MinIO工具的服务器需开放防火墙、安全组中对应的API和console端口,否则将无法访问对象桶。 浏览器访问http://{minio所在节点的eip}:30840,可进入MinIO console界面。
  • 安装Velero 首先前往OBS控制台或MinIO console界面,创建存放备份文件的桶并命名为velero。此处桶名称可自定义,但安装Velero时必须指定此桶名称,否则将无法访问导致备份失败,参见4。 原集群和目标集群中均需要安装部署Velero实例,安装步骤一致,分别用于备份和恢复。 CCE集群的Master节点不对外提供远程登录端口,您可通过kubectl操作集群完成Velero安装。 如果备份资源量较大,请调整Velero及Restic工具的cpu和内存资源(建议调整至1U1G及以上),请参考备份工具资源分配不足。 用于存放备份文件的对象存储桶需要是空桶。 从Velero官方发布路径https://github.com/vmware-tanzu/velero/releases下载最新的稳定版二进制文件,本文以Velero 1.7.0版本为例。原集群和目标集群中的安装过程一致,请参考如下步骤。 下载Velero 1.7.0版本的二进制文件。 wget https://github.com/vmware-tanzu/velero/releases/download/v1.7.0/velero-v1.7.0-linux-amd64.tar.gz 安装Velero客户端。 tar -xvf velero-v1.7.0-linux-amd64.tar.gz cp ./velero-v1.7.0-linux-amd64/velero /usr/local/bin 创建备份对象存储访问密钥文件credentials-velero。 vim credentials-velero 文件内容如下,其中的AK/SK请根据实际情况进行替换。使用OBS时,可参考获取访问密钥(AK/SK)获取AK/SK。如使用MinIO,此处AK/SK则为2中所创建的用户名及密码。 [default] aws_access_key_id = {AK} aws_secret_access_key = {SK} 部署Velero服务端。注意其中--bucket参数需要修改为已创建的对象存储桶名称,本例中为velero。关于更多自定义安装参数,请参考自定义安装Velero。 velero install \ --provider aws \ --plugins velero/velero-plugin-for-aws:v1.2.1 \ --bucket velero \ --secret-file ./credentials-velero \ --use-restic \ --use-volume-snapshots=false \ --backup-location-config region=cn-north-4,s3ForcePathStyle="true",s3Url=http://obs.cn-north-4.myhuaweicloud.com 表1 Velero安装参数说明 安装参数 参数说明 --provider 声明使用“aws”提供的插件类型。 --plugins 使用AWS S3兼容的API组件,本文使用的OBS和MinIO对象存储均支持该S3协议。 --bucket 用于存放备份文件的对象存储桶名称,需提前创建。 --secret-file 访问对象存储的密钥文件,即3中创建的“credentials-velero”文件。 --use-restic 使用Restic工具支持PV数据备份,建议开启,否则将无法备份存储卷资源。 --use-volume-snapshots 是否创建 VolumeSnapshotLocation 对象进行PV快照,需要提供快照程序支持。该值设为false。 --backup-location-config 对象存储桶相关配置,包括region、s3ForcePathStyle、s3Url等。 region 对象存储桶所在区域。 OBS:请根据实际区域填写,如“cn-north-4”。 MinIO:参数值为minio。 s3ForcePathStyle 参数值为“true”,表示使用S3文件路径格式。 s3Url 对象存储桶的API访问地址。 OBS:该参数值需根据对象存储桶地域决定,参数值为“http://obs.{region}.myhuaweicloud.com”。例如区域为北京四(cn-north-4),则参数值为“http://obs.cn-north-4.myhuaweicloud.com”。 MinIO:该参数值需根据MinIO安装节点的IP及暴露端口确定,参数值为“http://{minio所在节点的eip}:9000”。 说明: s3Url中的访问端口需填写MinIO的API端口,而非console端口。MinIO API端口默认为9000。 访问集群外安装的MinIO时,需填写其公网IP地址。 Velero实例将默认创建一个名为velero的namespace,执行以下命令可查看pod状态。 $ kubectl get pod -n velero NAME READY STATUS RESTARTS AGE restic-rn29c 1/1 Running 0 16s velero-c9ddd56-tkzpk 1/1 Running 0 16s 为防止在实际生产环境中备份时出现内存不足的情况,建议您参照备份工具资源分配不足,修改Restic和Velero分配的CPU和内存大小。 查看Velero工具与对象存储的对接情况,状态需要为available。 $ velero backup-location get NAME PROVIDER BUCKET/PREFIX PHASE LAST VALIDATED AC CES S MODE DEFAULT default aws velero Available 2021-10-22 15:21:12 +0800 CST ReadWrite true
  • 前提条件 原始自建集群Kubernetes版本需1.10及以上,且集群可正常使用DNS与互联网服务。 若您使用OBS存放备份文件,需已有OBS操作权限用户的AK/SK,请参考获取访问密钥(AK/SK)。 若您使用MinIO存放备份文件,则安装MinIO的服务器需要绑定EIP并在安全组中开放MinIO的API端口和Console端口。 已创建迁移的目标CCE集群。 原集群和目标集群中需要至少各拥有一个空闲节点,节点规格建议为4U8G及以上。
  • 约束与限制 CCE Turbo 的1.19.16-r4、1.21.7-r0、1.23.5-r0、1.25.1-r0及以上版本支持用户配置容器网卡动态预热;支持集群级别的全局配置以及节点池级别的差异化配置,暂不支持非节点池下的节点差异化配置。 CCE Turbo的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)和节点动态预热容器网卡数(nic-warm-target)两个参数配置,且不支持节点池级别的差异化配置。 请通过console页面或API修改容器网卡动态预热参数配置,请勿直接后台修改节点annotations上对应的容器网卡动态预热参数,集群升级后,后台直接修改的annotations会被覆盖为原始的值。 CCE Turbo的1.19.16-r4、1.21.7-r0、1.23.5-r0、1.25.1-r0之前的集群版本支持用户配置容器网卡高低水位预热,如果用户配置了全局的容器网卡高低水位预热。集群升级后,原始的高低水位预热参数配置会自动转换为容器网卡动态预热参数配置;但如果用户要通过console页面进一步修改容器网卡动态预热参数,需要先通过集群的配置管理console页面把原始的高低水位预热配置修改为(0:0)。 CCE Turbo的节点池BMS裸机场景下,1.19.16-r4、1.21.7-r0、1.23.5-r0、1.25.1-r0之前的集群版本默认采用的是容器网卡高低水位预热(默认值0.3:0.6)。集群升级后,原始的高低水位预热依然生效,建议客户通过节点池的配置管理console页面把高低水位预热参数配置转换为容器网卡动态预热参数配置并一并删除高低水位预热配置,以启用最新的容器网卡动态预热的能力。 CCE Turbo的非节点池下BMS裸机场景下,1.19.16-r4、1.21.7-r0、1.23.5-r0、1.25.1-r0之前的集群版本默认采用的是容器网卡高低水位预热(默认值0.3:0.6)。集群升级后,原始的高低水位预热依然生效,如果用户想启用集群级别的全局配置,客户需要后台删除该节点的annotation(node.yangtse.io/eni-warm-policy),以启用集群级别配置的容器网卡动态预热的能力。
  • 原理说明 CCE Turbo的容器网卡动态预热提供了4个相关的容器网卡动态预热参数,您可以根据业务规划,合理设置集群的配置管理或节点池的配置管理中的容器网卡动态预热参数(其中节点池的容器网卡动态预热配置优先级高于集群的容器网卡动态预热配置)。 表1 容器网卡动态预热参数 容器网卡动态预热参数 默认值 参数说明 配置建议 节点最少绑定容器网卡数(nic-minimum-target) 10 保障节点最少有多少张容器网卡绑定在节点上。 参数值需为正整数。例如10,表示节点最少有10张容器网卡绑定在节点上。当超过节点的容器网卡配额时,后台取值为节点的容器网卡配额。 建议配置为大部分节点平时日常运行的Pod数。 节点预热容器网卡上限检查值(nic-maximum-target) 0 当节点绑定的容器网卡数超过节点预热容器网卡上限检查值(nic-maximum-target),不再主动预热容器网卡。 当该参数大于等于节点最少绑定容器网卡数(nic-minimum-target)时,则开启预热容器网卡上限值检查;反之,则关闭预热容器网卡上限值检查。 参数值需为正整数。例如0,表示关闭预热容器网卡上限值检查。当超过节点的容器网卡配额时,后台取值为节点的容器网卡配额。 建议配置为大部分节点平时最多运行的Pod数。 节点动态预热容器网卡数(nic-warm-target) 2 保障节点至少预热的容器网卡数,只支持数值配置。 当 节点动态预热容器网卡数(nic-warm-target) + 节点当前绑定的容器网卡数 大于 节点预热容器网卡上限检查值(nic-maximum-target) 时,只会预热nic-maximum-target与节点当前绑定的容器网卡数的差值。 建议配置为大部分节点日常10s内会瞬时弹性扩容的Pod数。 节点预热容器网卡回收阈值(nic-max-above-warm-target) 2 只有当 节点上空闲的容器网卡数 - 节点动态预热容器网卡数(nic-warm-target) 大于此阈值 时,才会触发预热容器网卡的解绑回收。只支持数值配置。 调大此值会减慢空闲容器网卡的回收,加快Pod的启动速度,但会降低IP地址的利用率,特别是在IP地址紧张的场景,请谨慎调大。 调小此值会加快空闲容器网卡的回收,提高IP地址的利用率,但在瞬时大量Pod激增的场景,部分Pod启动会稍微变慢。 建议配置为大部分节点日常在分钟级时间范围内会频繁弹性扩容缩容的Pod数 - 大部分节点日常10s内会瞬时弹性扩容的Pod数。
  • 配置示例 级别 用户业务场景 配置示例 集群级别 集群中所有节点采用c7.4xlarge.2机型(辅助弹性网卡配额128) 集群下大部分节点平时日常运行20个Pod左右 集群下大部分节点最多运行60个Pod 集群下大部分节点日常10s内会瞬时弹性扩容10个Pod 集群下大部分节点日常在分钟级时间范围内会频繁弹性扩容缩容15个Pod 集群级别的全局配置: nic-minimum-target: 20 nic-maximum-target: 60 nic-warm-target: 10 nic-max-above-warm-target: 5 节点池级别 集群中用户新创建了一个使用大规格机型c7.8xlarge.2的节点池(辅助弹性网卡配额256) 节点池下大部分节点平时日常运行100个Pod左右 节点池下大部分节点最多运行128个Pod 节点池下大部分节点日常在10s内会瞬时弹性扩容10个Pod 节点池下大部分节点日常在分钟级时间范围内会频繁弹性扩容缩容12个Pod 节点池级别的差异化配置: nic-minimum-target: 100 nic-maximum-target: 120 nic-warm-target: 10 nic-max-above-warm-target: 2 使用HostNetwork的Pod不计入Pod数中。
  • 创建StorageClass 本示例WordPress应用使用第三方SSD类型持久化数据卷,相应的在CCE中需要适配成华为云SSD。 本示例中使用的StorageClass是disk-ssd,需要创建一个同名的SC,但后端存储介质使用华为云SSD存储。此处请根据自己的应用来适配。 [root@ccenode-roprr hujun]# cat cce-sc-csidisk-ack.yaml allowVolumeExpansion: true apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: disk-ssd selfLink: /apis/storage.k8s.io/v1/storageclasses/csi-disk parameters: csi.storage.k8s.io/csi-driver-name: disk.csi.everest.io csi.storage.k8s.io/fstype: ext4 everest.io/disk-volume-type: SSD everest.io/passthrough: "true" provisioner: everest-csi-provisioner reclaimPolicy: Delete volumeBindingMode: Immediate [root@ccenode-roprr hujun]# kubectl create -f cce-sc-csidisk-ack.yaml
  • 场景一:容器与节点时区同步 登录CCE控制台。 在创建工作负载基本信息页面,开启“时区同步”,即容器与节点使用相同时区。 图1 开启时区同步 登录节点进入容器查询容器时区是否与节点保持一致。 date -R 命令行终端显示如下信息: Tue, 04 Jun 2019 15::08:47 +0800 docker ps -a|grep test 命令行终端显示如下信息: docker exec -it oedd74c66bdb /bin/sh date -R 命令行终端显示如下信息: Tue, 04 Jun 2019 15:09:20 +0800
  • 场景二:容器、容器日志与节点时区同步 Java应用打印的日志时间和通过date -R方式获取的容器标准时间相差8小时。 登录CCE控制台。 在创建工作负载基本信息页面,开启“时区同步”,即容器与节点使用相同时区。 图2 开启时区同步 登录节点进入容器,修改catalina.sh脚本。 cd /usr/local/tomcat/bin vi catalina.sh 若无法在容器中执行vi命令,可以直接执行4,也可以执行vi命令,在脚本中添加 -Duser.timezone=GMT+08,如下图所示: 将脚本先从容器内复制至节点,在脚本中添加-Duser.timezone=GMT+08后,从节点复制到容器中。 容器内的文件复制至宿主机: docker cp mycontainer: /usr/local/tomcat/bin/catalina.sh /home/catalina.sh 宿主机中的文件复制至容器内: docker cp /home/catalina.sh mycontainer:/ usr/local/tomcat/bin/catalina.sh 重启容器。 docker restart container_id 重启后查看日志中的时区是否与节点同一时区。 查看方法:单击工作负载名称进入工作负载详情页,单击右上角的“日志”按钮可查看日志详情。日志约需要等待5分钟查看。
  • 场景三:工作负载与节点时区同步 方法一:制作容器镜像时,将时区设置为CST。 方法二:若不希望修改容器,可在CCE控制台创建工作负载时,将本机的“/etc/localtime”目录挂载到容器的“/etc/localtime”目录下。 示例如下: kind: Deployment apiVersion: apps/v1 metadata: name: test namespace: default spec: replicas: 2 selector: matchLabels: app: test template: metadata: labels: app: test spec: volumes: - name: vol-162979628557461404 hostPath: path: /etc/localtime type: '' containers: - name: container-0 image: 'nginx:alpine' volumeMounts: - name: vol-162979628557461404 readOnly: true mountPath: /etc/localtime imagePullPolicy: IfNotPresent imagePullSecrets: - name: default-secret
  • 升级方式 表2 升级方式介绍 升级方式 介绍 升级范围 优点 约束 原地升级 节点上升级Kubernetes组件、网络组件和CCE管理组件,升级过程中业务Pod和网络均不受影响。 升级过程中,节点分批进行升级,存量节点将不可调度,升级完成的批次支持调度新业务。 节点操作系统不升级 插件在目标版本集群不兼容时自动升级 K8s组件自动升级 可一键式升级,用户无需迁移业务,可以基本上保证业务不断。 原地升级仅在v1.15及以上版本集群支持。 迁移 将老版本集群的业务迁移到新版本集群,适用于需要大幅度跨版本集群升级的需求。 集群内资源均重新部署。 可避免老版本连续升级导致的版本不兼容问题。 -
  • 默认节点池 登录CCE控制台。 单击集群名称进入集群,在左侧选择“节点管理”,在右侧选择“节点池”页签。 单击默认节点池名称后的“升级”。 在弹出的“升级操作系统”窗口中,设置升级参数。 目标操作系统:该项无需设置,用于展示目标版本的镜像信息。 升级方式:当前支持节点重置方式进行升级。 每批最大升级节点数:节点升级时,允许节点不可用的最大数量。节点重置方式进行同步时节点将不可用,请合理设置该参数,尽量避免出现集群节点不可用数量过多导致Pod无法调度的情况。 节点列表:选择需要升级的节点。 登录方式: 密码 用户名默认为“root”,请输入登录节点的密码,并确认密码。 登录节点时需要使用该密码,请妥善管理密码,系统无法获取您设置的密码内容。 密钥对 选择用于登录本节点的密钥对,支持选择共享密钥。 密钥对用于远程登录节点时的身份认证。若没有密钥对,可单击选项框右侧的“创建密钥对”来新建,创建密钥对操作步骤请参见创建密钥对。 安装前执行脚本: 请输入脚本命令,命令中不能包含中文字符。脚本命令会进行Base64转码。安装前/后执行脚本统一计算字符,转码后的字符总数不能超过10240。 脚本将在Kubernetes软件安装前执行,可能导致Kubernetes软件无法正常安装,需谨慎使用。 安装后执行脚本: 请输入脚本命令,命令中不能包含中文字符。脚本命令会进行Base64转码。安装前/后执行脚本统一计算字符,转码后的字符总数不能超过10240。 脚本将在Kubernetes软件安装后执行,不影响Kubernetes软件安装。 单击“确定”,即可开始操作系统滚动升级。
  • 步骤三:插件选择 单击“下一步:插件选择”,选择创建集群时需要安装的插件。 基础功能 参数 说明 CCE容器网络插件 (Yangtse CNI) 集群默认安装的基础插件,为集群内的Pod提供网络连通、公网访问、安全隔离等网络能力。 CCE 容器存储 (Everest) 默认安装CCE容器存储(Everest),可为集群提供基于 CSI 的容器存储能力,支持对接云上云硬盘等存储服务。 CoreDNS 域名解析 默认安装CoreDNS域名解析插件,可为集群提供域名解析、连接云上 DNS 服务器等能力。 节点本地域名解析加速 可选插件。勾选后自动安装节点本地域名解析加速插件,通过在集群节点上运行 DNS 缓存代理来提高集群 DNS 性能。 可观测性 参数 说明 云原生监控插件 可选插件。勾选后自动安装云原生监控插件,为集群提供普罗指标采集能力,并将指标上报至指定的 AOM 实例。轻量化模式暂不支持基于自定义普罗语句的HPA,若需要相关功能,可在集群创建完成后手动安装全量的插件。 AOM采集的基础指标免费,自定义指标将由AOM服务进行收费,详情请参见价格详情。关于如何采集自定义指标,请参见使用云原生监控插件监控自定义指标。 云原生日志采集插件 可选插件。勾选后自动安装云原生日志采集插件,将日志上报至 LTS 的日志采集器。集群创建完成后可在 CCE 日志中心页面对采集规则进行查询与管理。 LTS创建日志组免费,并每月赠送每个账号一定量免费日志采集额度,超过免费额度部分将产生费用(价格计算器)。关于如何采集自定义指标,请参见通过云原生日志采集插件采集容器日志。 CCE 节点故障检测 可选插件。勾选后自动安装CCE节点故障检测插件,安装后可为集群提供节点故障检测、隔离能力,帮助您及时识别节点问题。
  • 步骤四:插件配置 单击“下一步:插件配置”,配置插件。 基础功能 参数 说明 CCE容器网络插件 (Yangtse CNI) 不支持配置。 CCE 容器存储 (Everest) 不支持配置。集群创建完成后,可前往“插件中心”修改配置。 CoreDNS 域名解析 不支持配置。集群创建完成后,可前往“插件中心”修改配置。 节点本地域名解析加速 不支持配置。集群创建完成后,可前往“插件中心”修改配置。 可观测性 参数 说明 云原生监控插件 选择指标上报的AOM实例。如果没有可用实例,您可以单击“新建实例”进行创建。 AOM采集的基础指标免费,自定义指标将由AOM服务进行收费,详情请参见价格详情。关于如何采集自定义指标,请参见使用云原生监控插件监控自定义指标。 云原生日志采集插件 选择需要采集的日志。开启后将自动创建一个名称为k8s-log-{clusterId}的日志组,并为每个勾选的日志类型创建一个日志流。 容器日志:采集容器标准输出日志,对应的日志流名称为stdout-{clusterId}。 Kubernetes事件:采集Kubernetes日志,对应的日志流名称为event-{clusterId}。 Kubernetes审计日志:采集Master控制平面审计日志,对应的日志流名称为audit-{clusterId}。 控制面组件日志:采集Master控制平面(包括 kube-apiserver、 kube-controller-manage 和 kube-scheduler)日志,对应的日志流名称分别为kube-apiserver-{clusterId}、kube-controller-manage-{clusterId}、kube-scheduler-{clusterId}。 如果不开启日志采集能力。集群创建后可以前往 CCE 日志中心页面重新开启。 LTS创建日志组免费,并每月赠送每个账号一定量免费日志采集额度,超过免费额度部分将产生费用(价格计算器)。关于如何采集自定义指标,请参见通过云原生日志采集插件采集容器日志。 CCE 节点故障检测 不支持配置。集群创建完成后,可前往“插件中心”修改配置。
  • 步骤二:配置集群 在“购买集群”页面,填写集群配置参数。 基础配置 参数 说明 集群类型 根据需求选择“CCE Standard集群”或“CCE Turbo集群”。 CCE Standard集群:标准版本集群,提供高可靠、安全的商业级容器集群服务。 CCE Turbo集群:拥有更高性能的云原生网络,提供云原生混部调度能力,可实现更高的资源利用率和更广的全场景覆盖。 关于集群类型差异详情,请参见集群类型对比。 计费模式 根据需求选择集群的计费模式。 包年/包月:预付费模式,按订单的购买周期计费,适用于可预估资源使用周期的场景,价格比按需计费模式更优惠。 选择该计费模式时,需要设置“购买时长”并选择是否自动续费(按月购买时自动续费周期为1个月,按年购买时自动续费周期则为1年)。 按需计费:后付费模式,按资源的实际使用时长计费,可以随时开通/删除资源。 集群名称 请输入集群名称,同一账号下集群不可重名。 企业项目 该参数仅对开通企业项目的企业客户账号显示。 选择某企业项目(如:default)后,集群、集群下节点、集群安全组、节点安全组和自动创建的节点EIP(弹性公网IP)将创建到所选企业项目下。为方便管理资源,在集群创建成功后,建议不要修改集群下节点、集群安全组、节点安全组的企业项目。 企业项目是一种云资源管理方式,企业项目管理服务提供统一的云资源按项目管理,以及项目内的资源管理、成员管理。了解更多企业项目相关信息,请查看企业管理。 集群版本 选择集群使用的Kubernetes版本。 集群规模 集群支持管理的最大节点数量,请根据业务场景选择。创建完成后支持扩容,不支持缩容,详情请参见变更集群规格。 集群master实例数 选择集群控制平面的节点(master实例)数量。控制平面节点由系统自动托管,会部署Kubernetes集群的管控面组件,如 kube-apiserver,kube-controller-manager,kube-scheduler 等组件。 3实例(高可用):创建3个控制平面节点,确保集群高可用。 单实例:您的集群只会创建一个控制平面节点。 您还可以指定master实例的分布策略,默认为自动分配。 自动分配:即随机分配,尽可能将控制节点随机分布在不同可用区以提高容灾能力 。若某可用区资源不足,将分配至资源充足的可用区,优先保障集群创建成功,可能无法保障可用区级容灾。 自定义分配:自定义选择每台控制节点的位置。 单实例场景下,您可以选择一个可用区进行部署;多实例场景下,您可以选择多种分配场景: 可用区:通过把控制节点创建在不同的可用区中实现容灾。 主机:通过把控制节点创建在相同可用区下的不同主机中实现容灾。 自定义:用户自行决定每台控制节点所在的位置。 网络配置 集群网络涉及节点、容器和服务,强烈建议您详细了解集群的网络以及容器网络模型,具体请参见网络概述。 表1 集群网络配置 参数 说明 虚拟私有云 选择集群所在的虚拟私有云VPC,如没有可选项可以单击右侧“新建虚拟私有云”创建。创建后不可修改。 子网 选择节点所在子网,如没有可选项可以单击右侧“新建子网”创建。创建后子网不可修改。 默认安全组 您可选择使用CCE自动生成的安全组,或选择已有安全组作为节点默认安全组。 须知: 节点默认安全组必须放通指定端口来保证集群内部正常通信,否则将无法成功创建节点,安全组端口配置说明请参考集群安全组规则配置。 启用IPv6 开启后将支持通过IPv6地址段访问集群资源,包括节点,工作负载等。 v1.15及以上版本容器隧道网络的CCE Standard集群支持开启IPv4/IPv6双栈,并在v1.23版本中进入GA(Generally Available)阶段。 v1.23.8-r0、v1.25.3-r0及以上版本的CCE Turbo集群支持开启IPv4/IPv6双栈。 VPC网络模型的集群暂不支持开启IPv4/IPv6双栈。 具体请参见如何通过CCE搭建IPv4/IPv6双栈集群?。 表2 容器网络配置 参数 说明 容器网络模型 CCE Standard集群支持选择“VPC网络”和“容器隧道网络”。 CCE Turbo集群支持选择“云原生网络2.0”。 如需了解更多网络模型差异,请参见容器网络模型对比。 容器网段(CCE Standard集群设置) 设置容器使用的网段,决定了集群下容器的数量上限。VPC网络模型支持添加多个容器网段,且支持集群创建后添加容器网段,请参见扩展集群容器网段。 容器子网(CCE Turbo集群设置) 选择容器所在子网,如没有可选项可以单击右侧“新建子网”创建。容器子网决定了集群下容器的数量上限,创建后支持新增子网。 表3 服务网络配置 参数 说明 服务网段 同一集群下容器互相访问时使用的Service资源的网段。决定了Service资源的上限。 创建后不可修改。 服务转发模式 支持IPVS和iptables两种转发模式,具体请参见iptables与IPVS如何选择。 iptables:社区传统的kube-proxy模式。适用于Service数量较少或客户端会出现大量并发短链接的场景。IPv6集群不支持iptables模式。 IPVS:吞吐更高,速度更快的转发模式。适用于集群规模较大或Service数量较多的场景。 IPv6服务网段 仅CCE Turbo集群开启IPv6双栈时需要设置,创建后不可修改。 高级配置(可选) 参数 说明 证书认证 系统生成:默认开启X509认证模式,X509是一种非常通用的证书格式。 自有证书:您可以将自定义证书添加到集群中,用自定义证书进行认证。 您需要分别上传自己的CA根证书、客户端证书和客户端证书私钥。 注意: 请上传小于1MB的文件,CA根证书和客户端证书上传格式支持.crt或.cer格式,客户端证书私钥仅支持上传未加密的证书私钥。 客户端证书有效期需要5年以上。 上传的CA根证书既给认证代理使用,也用于配置kube-apiserver聚合层,如不合法,集群将无法成功创建。 从1.25版本集群开始,Kubernetes不再支持使用SHA1WithRSA、ECDSAWithSHA1算法生成的证书认证,推荐使用SHA256算法生成的证书进行认证。 开启CPU管理策略 支持为工作负载实例设置独占CPU核的功能,详情请参见CPU管理策略。 开启过载控制 过载控制开启后,将根据控制节点的资源压力,动态调整请求并发量,维护控制节点和集群的可靠性。详情请参见集群过载控制。 开启对华为分布式云(homezone/cloudpond)支持 集群可以统一管理数据中心和边缘的计算资源,用户可以根据业务诉求将容器部署到合适的区域。 该功能仅CCE Turbo集群支持,且需要提前注册智能边缘小站,详情请参见在CCE Turbo集群中使用分布式云资源。 告警中心 告警中心提供完善的集群告警能力,使您的集群在运行过程中发生故障及时预警,确保业务稳定。开启后将会创建默认告警规则,并发送告警通知到所选择的联系组。详细介绍请参见通过告警中心一键配置告警。 资源标签 通过为资源添加标签,可以对资源进行自定义标记,实现资源的分类。 说明: 如您的账号归属某个组织,且该组织已经设定云容器引擎服务的相关标签策略,则需按照标签策略规则为集群添加标签。标签如果不符合标签策略的规则,则可能会导致集群创建失败,请联系组织管理员了解标签策略详情。 您可以在TMS中创建“预定义标签”,预定义标签对所有支持标签功能的服务资源可见,通过使用预定义标签可以提升标签创建和迁移效率。具体请参见创建预定义标签。 KEY字符集规范: key不能为空,长度1~128个半角字符 _sys_开头属于系统标签,租户不能输入 可用 UTF-8 格式表示的字母(包含中文)、数字和空格,以及以下字符: _ . : / = + - @ 建议正则:^((?!_sys_)[\\p{L}\\p{Z}\\p{N}_.:\\/=+\\-@]*)$ VALUE字符集规范: VALUE长度 0~255 可用 UTF-8 格式表示的字母(包含中文)、数字和空格,以及以下字符: _ . : / = + - @ 建议正则:^([\p{L}\p{Z}\p{N}_.:\/=+\-@]*)$ 资源标签值可以为空(empty or null) 预定义标签值不可以为空 集群描述 支持200个英文字符。
  • 约束与限制 创建节点过程中会使用域名方式从OBS下载软件包,需要能够使用云上内网DNS解析OBS域名,否则会导致创建不成功。为此,节点所在子网的DNS服务器地址需要配置为内网 DNS地址 ,从而使得节点使用内网DNS。在创建子网时DNS默认配置为内网DNS,如果您修改过子网的DNS,请务必确保子网下的DNS服务器可以解析OBS服务域名,否则需要将DNS改成内网DNS。 单Region下单用户可创建的集群总数限制为50个,如果配额不满足业务需求,请前往“我的配额”提交申请。 集群一旦创建以后,不支持变更以下项: 变更集群类型。 变更集群的控制节点数量。 变更控制节点可用区。 变更集群的网络配置,如所在的虚拟私有云VPC、子网、服务网段、IPv6、kube-proxy代理模式(即服务转发模式)。 变更网络模型,例如“容器隧道网络”更换为“VPC网络”。
  • CCE事件列表 事件类告警是根据CCE上报到AOM的事件来决定是否告警,CCE上报了一系列事件到AOM,您可以在配置事件告警的处查看具体事件,根据自身需求添加事件类告警。 图2 CCE上报的事件 CCE当前支持集群数据面事件和集群控制面事件。 表2 集群数据面事件 类别 事件描述 事件名称 事件级别 更多说明 Pod Pod内存不足OOM PodOOMKilling 重要 检查Pod是否因OOM退出。 该事件依赖节点故障检测插件(1.18.41及以上版本)和云原生日志采集插件(1.3.2及以上版本)。 Pod 启动失败 FailedStart 重要 检查Pod是否启动成功。 Pod 拉取镜像失败 FailedPullImage 重要 检查Pod是否拉取镜像成功。 Pod 启动重试失败 BackOffStart 重要 检查Pod是否重启失败。 Pod 调度失败 FailedScheduling 重要 检查Pod是否调度成功。 Pod 拉取镜像重试失败 BackOffPullImage 重要 检查Pod重试拉取镜像是否成功。 Pod 创建失败 FailedCreate 重要 检查Pod创建是否成功。 Pod 状态异常 Unhealthy 次要 检查Pod状态是否正常。 Pod 删除失败 FailedDelete 次要 检查工作负载是否删除成功。 Pod 未拉取镜像异常 ErrImageNeverPull 次要 检查工作负载是否拉取镜像。 Pod 扩容失败 FailedScaleOut 次要 检查工作负载副本扩容是否正常。 Pod 待机失败 FailedStandBy 次要 检查Pod待机是否成功。 Pod 更新配置失败 FailedReconfig 次要 检查Pod更新配置是否成功。 Pod 激活失败 FailedActive 次要 检查Pod是否激活成功。 Pod 回滚失败 FailedRollback 次要 检查Pod回滚是否成功。 Pod 更新失败 FailedUpdate 次要 检查Pod更新是否成功。 Pod 缩容失败 FailedScaleIn 次要 检查Pod缩容是否失败。 Pod 重启失败 FailedRestart 次要 检查Pod重启是否成功。 Deployment 标签选择器冲突 SelectorOverlap 次要 检查集群中标签选择器是否存在冲突。 Deployment 副本集创建异常 ReplicaSetCreateError 次要 检查工作负载ReplicaSet创建副本是否正常。 Deployment 部署回滚版本未发现 DeploymentRollbackRevisionNotFound 次要 检查Deployment负载回滚版本是否存在。 DaemonSet 标签选择器异常 SelectingAll 次要 检查工作负载标签选择器是否设置异常。 Job 太多活跃Pod TooManyActivePods 次要 检查Job达到预定的Pod数后,是否还存在活动状态的Pod。 Job 太多成功Pod TooManySucceededPods 次要 检查Job达到预定的数量后,是否存在过多运行成功的Pod。 CronJob 查询失败 FailedGet 次要 查询CronJob是否成功。 CronJob 查询Pod列表失败 FailedList 次要 检查查询Pod列表是否成功。 CronJob 未知Job UnexpectedJob 次要 检查CronJob是否出现未知的Job。 Service 创建负载均衡失败 CreatingLoadBalancerFailed 次要 检查创建ELB是否成功。 Service 删除负载均衡失败 DeletingLoadBalancerFailed 次要 检查删除ELB是否成功。 Service 更新负载均衡失败 UpdateLoadBalancerFailed 次要 检查更新ELB是否成功。 Namespace 废弃节点清理 DeleteNodeWithNoServer 次要 检查是否清理废弃节点。 PV 主机卸载块存储失败 DetachVolumeFailed 次要 检查卸载块存储是否成功。 PV 卷回收策略未知 VolumeUnknownReclaimPolicy 次要 检查是否指定卷回收策略。 PV 挂载数据卷失败 SetUpAtVolumeFailed 次要 检查数据卷挂载是否成功。 PV 数据卷回收失败 VolumeFailedRecycle 次要 检查数据卷是否成功回收。 PV 等待主机挂载块存储失败 WaitForAttachVolumeFailed 次要 检查节点挂载块存储是否成功。 PV 数据卷删除失败 VolumeFailedDelete 次要 检查数据卷删除是否成功。 PV 挂载盘符失败 MountDeviceFailed 次要 检查数据卷挂盘是否成功。 PV 卸载数据卷失败 TearDownAtVolumeFailed 次要 检查数据卷卸载是否成功。 PV 卸载盘符失败 UnmountDeviceFailed 次要 检查数据卷卸载盘符是否成功。 PV 主机挂载块存储失败 AttachVolumeFailed 次要 检查节点卸载块存储是否成功。 PVC 数据卷扩容失败 VolumeResizeFailed 次要 检查数据卷扩容是否成功。 PVC 卷PVC丢失 ClaimLost 次要 检查PVC卷是否正常。 PVC 创建卷失败 ProvisioningFailed 次要 检查创建数据卷是否正常。 PVC 创建卷清理失败 ProvisioningCleanupFailed 次要 检查清理数据卷是否正常。 PVC 卷误绑定 ClaimMisbound 次要 检查PVC是否绑定错误的卷。 Node 节点重启 Rebooted 重要 检查节点是否重启。 Node 节点不可调度 NodeNotSchedulable 重要 检查节点是否可调度。 Node 节点状态异常 NodeNotReady 重要 检查节点状态是否异常。 Node 节点创建失败 NodeCreateFailed 重要 检查节点是否创建成功。 Node 节点kubelet故障 KUBELETIsDown 次要 检查节点kubelet是否正常。 Node 节点内存空间不足 NodeHasInsufficientMemory 次要 检查节点内存空间是否充足。 Node 节点上发现未注册的网络设备 UnregisterNetDevice 次要 检查节点上是否绑定了未注册的网络设备。 Node 网卡未发现 NetworkCardNotFound 次要 检查节点网卡状态。 Node 节点kube-proxy故障 KUBEPROXYIsDown 次要 检查节点上的kube-proxy是否正常。 Node 节点磁盘空间已满 NodeOutOfDisk 次要 检查节点磁盘空间是否正常。 Node 节点任务夯住 TaskHung 次要 检查节点上是否存在夯住的任务。 Node CIDR不可用 CIDRNotAvailable 次要 检查节点CIDR是否可用。 Node 节点的连接跟踪表已满 ConntrackFull 次要 检查节点的连接跟踪表是否已满。 Node 节点磁盘空间不足 NodeHasDiskPressure 次要 检查节点磁盘空间是否充足。 Node 节点纳管失败 NodeInstallFailed 次要 检查集群纳管节点是否成功。 Node 节点操作系统内核故障 KernelOops 次要 检查节点操作系统内核是否故障。 Node 节点内存不足强杀进程 OOMKilling 次要 检查节点是否出现OOM。 Node 节点docker故障 DOCKERIsDown 次要 检查节点容器引擎是否正常。 Node CIDR分配失败 CIDRAssignmentFailed 次要 检查节点CIDR分配是否成功。 Node 节点docker夯住 DockerHung 次要 检查节点Docker进程是否夯住。 Node 节点文件系统只读 FilesystemIsReadOnly 次要 检查节点文件系统是否只读。 Node 节点ntp服务故障 NTPIsDown 次要 检查节点NTP服务是否正常。 Node 节点卸载失败 NodeUninstallFailed 次要 检查节点卸载是否成功。 Node 节点磁盘卸载夯住 AUFSUmountHung 次要 检查节点磁盘卸载是否夯住。 Node 节点cni插件故障 CNIIsDown 次要 检查节点CNI插件是否故障。 Autoscaler 扩容节点超时 ScaleUpTimedOut 重要 检查节点池扩容节点是否超时。 Autoscaler 节点池资源充足 NodePoolAvailable 重要 检查节点池资源是否充足。 Autoscaler 缩容节点 ScaleDown 重要 集群正在缩容节点。 Autoscaler 未触发节点扩容 NotTriggerScaleUp 重要 检查节点是否成功触发扩容。 Autoscaler 删除未注册节点成功 DeleteUnregistered 重要 检查删除未注册的节点是否成功。 Autoscaler 缩容空闲节点成功 ScaleDownEmpty 重要 检查缩容空闲节点是否成功。 Autoscaler 缩容节点失败 ScaleDownFailed 重要 检查缩容节点是否成功。 Autoscaler 节点池扩容节点失败 FailedToScaleUpGroup 重要 检查节点池扩容节点是否异常。 Autoscaler 节点池扩容节点成功 ScaledUpGroup 重要 检查节点池扩容是否成功。 Autoscaler 扩容节点失败 ScaleUpFailed 重要 检查节点扩容是否成功。 Autoscaler 修复节点池节点个数成功 FixNodeGroupSizeDone 重要 检查修复节点池节点个数是否成功。 Autoscaler 节点池退避重试中 NodeGroupInBackOff 重要 检查节点池扩缩容是否存在回退重试。 Autoscaler 修复节点池节点个数失败 FixNodeGroupSizeError 重要 检查修复节点池节点个数是否成功。 Autoscaler 节点池资源售罄 NodePoolSoldOut 重要 检查节点池资源是否充足。 Autoscaler 触发节点扩容 TriggeredScaleUp 重要 检查节点是否触发扩容。 Autoscaler 节点池扩容节点启动 StartScaledUpGroup 重要 检查节点池扩容是否启动。 Autoscaler 删除未注册节点失败 DeleteUnregisteredFailed 重要 检查删除未注册的节点是否成功。 表3 集群控制面事件 事件名称 事件ID 事件级别 事件说明 内部故障 Internal error 重要 检查集群是否出现内部故障。 外部依赖异常 External dependency error 重要 检查集群是否存在外部依赖异常。 初始化执行线程失败 Failed to initialize process thread 重要 检查集群初始化执行线程是否成功。 更新数据库失败 Failed to update database 重要 检查集群更新数据库是否成功。 节点池触发创建节点失败 Failed to create node by nodepool 重要 检查节点池中创建节点是否成功。 节点池触发删除节点失败 Failed to delete node by nodepool 重要 检查节点池中删除节点是否成功。 创建包周期节点失败 Failed to create yearly/monthly subscription node 重要 检查集群创建包周期的节点是否成功。 解除资源租户访问控制节点镜像的授权失败 Failed to cancel the authorization of accessing the image of the master. 重要 创建集群时,检查解除资源租户访问控制节点镜像的授权是否成功。 创建虚拟IP失败 Failed to create the virtual IP for the master 重要 创建集群时检查创建虚拟IP是否成功。 删除节点虚拟机失败 Failed to delete the node VM 重要 检查集群删除节点虚拟机是否成功。 删除节点安全组失败 Failed to delete the security group of node 重要 检查集群删除节点安全组是否成功。 删除控制节点安全组失败 Failed to delete the security group of master 重要 检查集群删除控制节点安全组是否成功。 删除控制节点网卡安全组失败 Failed to delete the security group of port 重要 检查集群删除控制节点网卡安全组是否成功。 删除集群ENI/SubENI安全组失败 Failed to delete the security group of eni or subeni 重要 检查集群删除ENI/SubENI安全组是否成功。 解绑控制节点网卡失败 Failed to detach the port of master 重要 检查集群解绑控制节点网卡是否成功。 删除控制节点网卡失败 Failed to delete the port of master 重要 检查集群删除控制节点网卡是否成功。 删除控制节点虚拟机失败 Failed to delete the master VM 重要 检查集群删除控制节点虚拟机是否成功。 删除控制节点密钥对失败 Failed to delete the key pair of master 重要 检查集群删除控制节点密钥对是否成功。 删除控制节点subnet失败 Failed to delete the subnet of master 重要 检查集群删除控制节点subnet是否成功。 删除控制节点VPC失败 Failed to delete the VPC of master 重要 检查集群删除控制节点VPC是否成功。 删除集群证书失败 Failed to delete certificate of cluster 重要 检查集群删除集群证书是否成功。 删除控制节点云服务器组失败 Failed to delete the server group of master 重要 检查集群删除控制节点云服务器组是否成功。 删除虚拟IP失败 Failed to delete the virtual IP for the master 重要 检查集群删除虚拟IP是否成功。 获取控制节点浮动IP失败 Failed to get floating IP of the master 重要 检查获取控制节点浮动IP是否成功。 获取集群规格信息失败 Failed to get cluster flavor 重要 检查获取集群规格信息是否成功。 获取集群endpoint失败 Failed to get cluster endpoint 重要 检查获取集群endpoint是否成功。 获取Kubernetes集群连接失败 Failed to get kubernetes connection 重要 检查获取Kubernetes集群连接是否成功。 更新集群Secret失败 Failed to update secret 重要 检查更新集群Secret是否成功。 处理用户操作超时 Operation timed out 重要 检查处理用户操作是否超时。 连接Kubernetes集群超时 Connecting to Kubernetes cluster timed out 重要 检查连接Kubernetes集群是否超时。 检查组件状态失败或组件状态异常 Failed to check component status or components are abnormal 重要 检查集群检查组件状态是否成功,或组件状态是否异常。 无法在Kubernetes集群中找到该节点 The node is not found in kubernetes cluster 重要 检查是否能在Kubernetes集群中找到该节点。 节点在Kubernetes集群中状态异常 The status of node is not ready in kubernetes cluster 重要 检查节点在Kubernetes集群中状态是否正常。 无法在ECS服务中找到该节点对应的虚拟机 Can't find corresponding vm of this node in ECS 重要 检查能否在ECS服务中找到该节点对应的虚拟机。 升级控制节点失败 Failed to upgrade the master 重要 检查升级控制节点是否成功。 升级节点失败 Failed to upgrade the node 重要 检查升级节点是否成功。 变更控制节点规格失败 Failed to change flavor of the master 重要 检查变更控制节点规格是否成功。 变更控制节点规格超时 Change flavor of the master timeout 重要 检查变更控制节点规格是否超时。 创建包周期节点校验不通过 Failed to pass verification while creating yearly/monthly subscription node 重要 检查创建包周期节点校验是否成功。 安装节点失败 Failed to install the node 重要 检查集群安装节点是否成功。 清理VPC中集群容器网络路由表条目失败 Failed to clean routes of cluster container network in VPC 重要 检查清理VPC中集群容器网络路由表条目是否成功。 集群状态不可用 Cluster status is Unavailable 重要 检查集群状态是否可用。 集群状态故障 Cluster status is Error 重要 检查集群是否出现故障。 集群状态长时间不更新 Cluster status is not updated for a long time 重要 检查集群状态是否长时间不更新。 集群升级超时后更新控制节点状态失败 Failed to update master status after upgrading cluster timeout 重要 检查集群升级超时后更新控制节点状态是否成功。 集群升级超时后更新运行中的任务失败 Failed to update running jobs after upgrading cluster timeout 重要 检查集群升级超时后更新运行中的任务是否成功。 更新集群状态失败 Failed to update cluster status 重要 检查更新集群状态是否成功。 更新节点状态失败 Failed to update node status 重要 检查更新节点状态是否成功。 纳管节点超时后移除数据库中的节点记录失败 Failed to remove the static node from database 重要 检查纳管节点超时后移除数据库中的节点记录是否成功。 节点处理超时后更新节点状态为异常失败 Failed to update node status to abnormal after node processing timeout 重要 检查节点处理超时后,是否更新节点状态为异常。 更新集群访问地址失败 Failed to update the cluster endpoint 重要 检查更新集群访问地址是否成功。 删除不可用的Kubernetes连接失败 Failed to delete the unavailable connection of the Kubernetes cluster 重要 检查删除不可用的Kubernetes连接是否成功。 同步集群证书失败 Failed to sync the cluster cert 重要 检查同步集群证书是否成功。
  • SMN 创建主题 SMN(Simple Message Notification, 消息通知 服务)是向订阅者主动推送消息的服务,订阅者可以是电子邮件、短信、HTTP和HTTPS等。 主题是消息发布或客户端订阅通知的特定事件类型。它作为发送消息和订阅通知的信道,为发布者和订阅者提供一个可以相互交流的通道。 您需要创建一个主题,并订阅。具体方法请参见创建主题和订阅主题。 订阅主题后,请前往您的订阅终端(邮件或短信)手动确认添加订阅,消息通知才可生效。
  • Volcano开启NUMA亲和性调度 开启静态(static)CPU管理策略,具体请参考 开启CPU管理策略。 配置CPU拓扑策略。 登录CCE控制台,单击集群名称进入集群,在左侧选择“节点管理”,在右侧选择“节点池”页签,单击节点池名称后的“ 配置管理”。 将kubelet的拓扑管理策略(topology-manager-policy)的值修改为需要的CPU拓扑策略即可。 有效拓扑策略为“none”、“best-effort”、“restricted”、“single-numa-node”,具体策略对应的调度行为请参见Pod调度预测。 开启numa-aware插件功能和resource_exporter功能。 Volcano 1.7.1及以上版本 登录CCE控制台,单击集群名称进入集群,单击左侧导航栏的“插件中心”,在右侧找到Volcano,单击“编辑”,并在“参数配置”中设置Volcano调度器配置参数。 { "ca_cert": "", "default_scheduler_conf": { "actions": "allocate, backfill, preempt", "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" }, { // add this also enable resource_exporter "name": "numa-aware", // the weight of the NUMA Aware Plugin "arguments": { "weight": "10" } } ] }, { "plugins": [ { "name": "nodelocalvolume" }, { "name": "nodeemptydirvolume" }, { "name": "nodeCSIscheduling" }, { "name": "networkresource" } ] } ] }, "server_cert": "", "server_key": "" } Volcano 1.7.1以下版本 Volcano插件开启resource_exporter_enable参数,用于收集节点numa拓扑信息。 { "plugins": { "eas_service": { "availability_zone_id": "", "driver_id": "", "enable": "false", "endpoint": "", "flavor_id": "", "network_type": "", "network_virtual_subnet_id": "", "pool_id": "", "project_id": "", "secret_name": "eas-service-secret" } }, "resource_exporter_enable": "true" } 开启后可以查看当前节点的numa拓扑信息。 kubectl get numatopo NAME AGE node-1 4h8m node-2 4h8m node-3 4h8m 启用Volcano numa-aware算法插件。 kubectl edit cm -n kube-system volcano-scheduler-configmap kind: ConfigMap apiVersion: v1 metadata: name: volcano-scheduler-configmap namespace: kube-system data: default-scheduler.conf: |- actions: "allocate, backfill, preempt" tiers: - plugins: - name: priority - name: gang - name: conformance - plugins: - name: overcommit - 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 arguments: NetworkType: vpc-router - name: numa-aware # add it to enable numa-aware plugin arguments: weight: 10 # the weight of the NUMA Aware Plugin
  • 调度优先级 不管是什么拓扑策略,都是希望把Pod调度到当时最优的节点上,这里通过给每一个节点进行打分的机制来排序筛选最优节点。 原则:尽可能把Pod调度到需要跨NUMA节点最少的工作节点上。 打分公式如下: score = weight * (100 - 100 * numaNodeNum / maxNumaNodeNum) 参数说明: weight:NUMA Aware Plugin的权重。 numaNodeNum:表示工作节点上运行该Pod需要NUMA节点的个数。 maxNumaNodeNum:表示所有工作节点中该Pod的最大NUMA节点个数。 例如,假设有三个节点满足Pod的CPU拓扑策略,且NUMA Aware Plugin的权重设为10: Node A:由1个NUMA节点提供Pod所需的CPU资源,即numaNodeNum=1 Node B:由2个NUMA节点提供Pod所需的CPU资源,即numaNodeNum=2 Node C:由4个NUMA节点提供Pod所需的CPU资源,即numaNodeNum=4 则根据以上公式,maxNumaNodeNum=4 score(Node A) = 10 * (100 - 100 * 1 / 4) = 750 score(Node B) = 10 * (100 - 100 * 2 / 4) = 500 score(Node C) = 10 * (100 - 100 * 4 / 4) = 0 因此最优节点为Node A。
  • 确认NUMA使用情况 您可以通过lscpu命令查看当前节点的CPU概况: # 查看当前节点的CPU概况 lscpu ... CPU(s): 32 NUMA node(s): 2 NUMA node0 CPU(s): 0-15 NUMA node1 CPU(s): 16-31 然后查看NUMA节点使用情况。 # 查看当前节点的CPU分配 cat /var/lib/kubelet/cpu_manager_state {"policyName":"static","defaultCpuSet":"0,10-15,25-31","entries":{"777870b5-c64f-42f5-9296-688b9dc212ba":{"container-1":"16-24"},"fb15e10a-b6a5-4aaa-8fcd-76c1aa64e6fd":{"container-1":"1-9"}},"checksum":318470969} 以上示例中表示,节点上运行了两个容器,一个占用了NUMA node0的1-9核,另一个占用了NUMA node1的16-24核。
  • 使用Volcano设置NUMA亲和性调度 以下为使用Volcano设置NUMA亲和性调度的示例。 示例一:在无状态工作负载中配置NUMA亲和性。 kind: Deployment apiVersion: apps/v1 metadata: name: numa-tset spec: replicas: 1 selector: matchLabels: app: numa-tset template: metadata: labels: app: numa-tset annotations: volcano.sh/numa-topology-policy: single-numa-node # set the topology policy spec: containers: - name: container-1 image: nginx:alpine resources: requests: cpu: 2 # 必须为整数,且需要与limits中一致 memory: 2048Mi limits: cpu: 2 # 必须为整数,且需要与requests中一致 memory: 2048Mi imagePullSecrets: - name: default-secret 示例二:创建一个Volcano Job,并使用NUMA亲和性。 apiVersion: batch.volcano.sh/v1alpha1 kind: Job metadata: name: vj-test spec: schedulerName: volcano minAvailable: 1 tasks: - replicas: 1 name: "test" topologyPolicy: best-effort # set the topology policy for task template: spec: containers: - image: alpine command: ["/bin/sh", "-c", "sleep 1000"] imagePullPolicy: IfNotPresent name: running resources: limits: cpu: 20 memory: "100Mi" restartPolicy: OnFailure NUMA调度分析。 假设NUMA节点情况如下: 工作节点 节点策略拓扑管理器策略 NUMA 节点 0 上的可分配 CPU NUMA 节点 1 上的可分配 CPU node-1 single-numa-node 16U 16U node-2 best-effort 16U 16U node-3 best-effort 20U 20U 则根据以上示例, 示例一中,Pod的CPU申请值为2U,设置拓扑策略为“single-numa-node”,因此会被调度到相同策略的node-1。 示例二中,Pod的CPU申请值为20U,设置拓扑策略为“best-effort”,它将被调度到node-3,因为node-3可以在单个NUMA节点上分配Pod的CPU请求,而node-2需要在两个NUMA节点上执行此操作。
  • 背景信息 当节点运行许多CPU绑定的Pod时,工作负载可以迁移到不同的CPU核心,这取决于Pod是否被限制以及调度时哪些CPU核心可用。许多工作负载对此迁移不敏感,因此在没有任何干预的情况下工作正常。但是,在CPU缓存亲和性和调度延迟显著影响工作负载性能的工作负载中,如果CPU是从不同的NUMA节点分配的,会导致额外的延迟。因此kubelet允许使用拓扑管理器(Topology Manager)替代CPU管理策略来确定节点的分配。 CPU Manager和拓扑管理器都是kubelet组件,但有以下限制: K8s默认调度器不感知NUMA拓扑。因此,可能会调度到不满足NUMA拓扑要求的节点上,然后工作负载实例启动失败。这对于Tensorflow作业来说是不可接受的。如果节点上有任何工作进程或ps失败,则作业将失败。 管理器是节点级的,导致无法匹配整个集群中NUMA拓扑的最佳节点。 Volcano的目标是解决调度程序NUMA拓扑感知的限制,以便实现以下目标: 避免将Pod调度到NUMA拓扑不匹配的节点。 将Pod调度到NUMA拓扑的最佳节点。 更多资料请查看社区NUMA亲和性插件指导链接:https://github.com/volcano-sh/volcano/blob/master/docs/design/numa-aware.md
  • Pod调度预测 当Pod设置了拓扑策略时,Volcano会根据Pod设置的拓扑策略预测匹配的节点列表。调度过程如下: 根据Pod设置的Volcano拓扑策略,筛选具有相同策略的节点。Volcano提供的拓扑策略与拓扑管理器相同。 在设置了相同策略的节点中,筛选CPU拓扑满足该策略要求的节点进行调度。 Volcano拓扑策略 节点调度行为 1.筛选具有相同策略的节点 2.节点的CPU拓扑满足该策略的要求 none 无筛选行为: none:可调度 best-effort:可调度 restricted:可调度 single-numa-node:可调度 - best-effort 筛选拓扑策略同样为“best-effort”的节点: none:不可调度 best-effort:可调度 restricted:不可调度 single-numa-node:不可调度 尽可能满足策略要求进行调度: 优先调度至单NUMA节点,如果单NUMA节点无法满足CPU申请值,允许调度至多个NUMA节点。 restricted 筛选拓扑策略同样为“restricted”的节点: none:不可调度 best-effort:不可调度 restricted:可调度 single-numa-node:不可调度 严格限制的调度策略: 单NUMA节点的CPU容量上限大于等于CPU的申请值时,仅允许调度至单NUMA节点。此时如果单NUMA节点剩余的CPU可使用量不足,则Pod无法调度。 单NUMA节点的CPU容量上限小于CPU的申请值时,可允许调度至多个NUMA节点。 single-numa-node 筛选拓扑策略同样为“single-numa-node”的节点: none:不可调度 best-effort:不可调度 restricted:不可调度 single-numa-node:可调度 仅允许调度至单NUMA节点。 假设单个节点CPU总量为32U,由2个NUMA节点提供资源,分配如下: 工作节点 节点拓扑策略 NUMA节点1上的CPU总量 NUMA节点2上的CPU总量 节点-1 best-effort 16 16 节点-2 restricted 16 16 节点-3 restricted 16 16 节点-4 single-numa-node 16 16 Pod设置拓扑策略后,调度情况如图1所示。 当Pod的CPU申请值为9U时,设置拓扑策略为“best-effort”,Volcano会匹配拓扑策略同样为“best-effort”的节点-1,且该策略允许调度至多个NUMA节点,因此9U的申请值会被分配到2个NUMA节点,该Pod可成功调度至节点-1。 当Pod的CPU申请值为9U时,设置拓扑策略为“restricted”,Volcano会匹配拓扑策略同样为“restricted”的节点-2/节点-3,且单NUMA节点CPU总量满足9U的申请值,但单NUMA节点剩余可用的CPU量无法满足,因此该Pod无法调度。 当Pod的CPU申请值为17U时,设置拓扑策略为“restricted”,Volcano会匹配拓扑策略同样为“restricted”的节点-2/节点-3,且单NUMA节点CPU总量无法满足17U的申请值,可允许分配到2个NUMA节点,该Pod可成功调度至节点-3。 当Pod的CPU申请值为17U时,设置拓扑策略为“single-numa-node”,Volcano会匹配拓扑策略同样为“single-numa-node”的节点,但由于单NUMA节点CPU总量均无法满足17U的申请值,因此该Pod无法调度。 图1 NUMA调度策略对比
  • 调度优先级介绍 节点池软亲和调度,是通过节点池上的标签(Label)进行软亲和,具体是通过给每一个节点进行打分的机制来排序筛选最优节点。 原则:尽可能把Pod调度到带有相关标签的节点上。 打分公式如下: score = weight * MaxNodeScore * haveLabel 参数说明: weight:节点池软亲和plugin的权重。 MaxNodeScore:节点最大得分,值为100。 haveLabel:节点上是否存在插件中配置的label,如果有,值为1,如果节点上没有,值为0。
  • 配置Volcano节点池软亲和调度策略 在节点池上配置用于亲和调度的标签。 登录CCE控制台。 单击集群名称进入集群,在左侧选择“节点管理”,在右侧选择“节点池”页签。 单击节点池名称后的“更新”,在弹出的“更新节点池”页面中配置参数,在“K8s标签”中配置对应的标签。 示例如下: 单击左侧导航栏的“插件中心”,在右侧找到Volcano调度器,单击“安装”或“编辑”,并在“参数配置”中设置Volcano调度器配置参数。 { "ca_cert": "", "default_scheduler_conf": { "actions": "allocate, backfill, preempt", "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": "nodepoolaffinity", // 节点池亲和性调度权重及标签设置 "arguments": { "nodepoolaffinity.weight": 10000, "nodepoolaffinity.label": "nodepool1=nodepool1" } } ] }, { "plugins": [ { "name": "nodelocalvolume" }, { "name": "nodeemptydirvolume" }, { "name": "nodeCSIscheduling" }, { "name": "networkresource" } ] } ] }, "server_cert": "", "server_key": "" } 完成以上配置后,单击“确定”。
  • 其他插件 插件名称 插件简介 Kubernetes Dashboard Kubernetes Dashboard是Kubernetes集群基于Web的通用UI,集合了命令行可以操作的所有命令。它允许用户管理在集群中运行应用程序并对其进行故障排除,以及管理集群本身。 Kubernetes Web终端(停止维护) Kubernetes Web终端(web-terminal)是一款支持在Web界面上使用Kubectl的插件。它支持使用WebSocket通过浏览器连接Linux,提供灵活的接口便于集成到独立系统中,可直接作为一个服务连接,通过cmdb获取信息并登录服务器。 CCE集群备份恢复(停止维护) CCE集群备份恢复插件提供集群备份恢复能力。它将用户应用数据和业务数据备份到OBS桶中,并提供数据的本地备份和远程备份的能力。
共100000条