华为云用户手册

  • 静态创建对象存储卷时指定挂载Secret 使用访问密钥创建Secret后,在创建PV时只需要关联上Secret,就可以使用Secret中的访问密钥(AK/SK)挂载对象存储卷。 登录OBS控制台,创建对象存储桶,记录桶名称和存储类型,以并行文件系统为例。 新建一个pv的yaml文件,如pv-example.yaml。 apiVersion: v1 kind: PersistentVolume metadata: name: pv-obs-example annotations: pv.kubernetes.io/provisioned-by: everest-csi-provisioner spec: accessModes: - ReadWriteMany capacity: storage: 1Gi csi: nodePublishSecretRef: name: test-user namespace: default driver: obs.csi.everest.io fsType: obsfs volumeAttributes: everest.io/obs-volume-type: STANDARD everest.io/region: cn-north-4 storage.kubernetes.io/csiProvisionerIdentity: everest-csi-provisioner volumeHandle: obs-normal-static-pv persistentVolumeReclaimPolicy: Delete storageClassName: csi-obs 参数 描述 nodePublishSecretRef 挂载时指定的密钥,其中 name:指定secret的名字 namespace:指定secret的命令空间 fsType 文件类型,支持“obsfs”与“s3fs”,取值为s3fs时创建是obs对象桶,配套使用s3fs挂载;取值为obsfs时创建的是obs并行文件系统,配套使用obsfs挂载,推荐使用。 volumeHandle 对象存储的桶名称。 创建PV。 kubectl create -f pv-example.yaml PV创建完成后,就可以创建PVC关联PV。 新建一个PVC的yaml文件,如pvc-example.yaml。 PVC yaml文件配置示例: apiVersion: v1 kind: PersistentVolumeClaim metadata: annotations: csi.storage.k8s.io/node-publish-secret-name: test-user csi.storage.k8s.io/node-publish-secret-namespace: default volume.beta.kubernetes.io/storage-provisioner: everest-csi-provisioner everest.io/obs-volume-type: STANDARD csi.storage.k8s.io/fstype: obsfs name: obs-secret namespace: default spec: accessModes: - ReadWriteMany resources: requests: storage: 1Gi storageClassName: csi-obs volumeName: pv-obs-example 参数 描述 csi.storage.k8s.io/node-publish-secret-name 指定secret的名字 csi.storage.k8s.io/node-publish-secret-namespace 指定secret的命令空间 创建PVC。 kubectl create -f pvc-example.yaml PVC创建后,就可以创建工作负载挂载PVC使用存储。
  • 通过控制台创建 登录CCE控制台,单击集群名称进入集群。 在左侧导航栏中选择“服务”,在右上角单击“创建服务”。 设置Service参数。本示例中仅列举设置超时时间的必选参数,其余参数可根据需求参考创建LoadBalancer类型Service进行设置。 Service名称:自定义服务名称,可与工作负载名称保持一致。 访问类型:选择“负载均衡”。 选择器:添加标签,Service根据标签选择Pod,填写后单击“确认添加”。也可以引用已有工作负载的标签,单击“引用负载标签”,在弹出的窗口中选择负载,然后单击“确定”。 负载均衡器:选择弹性负载均衡的类型、创建方式。 类型:“独享型”或“共享型”。 创建方式:本文中以选择已有ELB为例进行说明,关于自动创建的配置参数请参见表1。 端口配置: 协议:请选择协议,其中共享型ELB使用UDP协议时不支持设置超时时间。 服务端口:Service使用的端口,端口范围为1-65535。 容器端口:工作负载程序实际监听的端口,需用户确定。例如nginx默认使用80端口。 监听器前端协议:请选择监听器的协议。不启用HTTP/HTTPS协议时,仅支持设置空闲超时时间。 监听器配置: 高级配置:选择合适的超时时间进行设置。 配置 说明 使用限制 空闲超时时间 客户端连接空闲超时时间。在超过空闲超时时间一直没有请求, 负载均衡会暂时中断当前连接,直到下一次请求时重新建立新的连接。 共享型ELB实例的端口使用UDP协议时不支持此配置。 请求超时时间 等待客户端请求超时时间。包括两种情况: 读取整个客户端请求头的超时时长,如果客户端未在超时时长内发送完整个请求头,则请求将被中断。 两个连续body体的数据包到达LB的时间间隔,超出请求超时时间将会断开连接。 仅端口启用HTTP/HTTPS时支持配置。 响应超时时间 等待后端服务器响应超时时间。请求转发后端服务器后,在等待超过响应超时时间没有响应,负载均衡将终止等待,并返回 HTTP504错误码。 仅端口启用HTTP/HTTPS时支持配置。 图1 配置超时时间 单击“确定”,创建Service。
  • 约束与限制 支持设置超时时间的场景如下: 超时时间类型 支持的ELB类型 使用限制 支持的集群版本 空闲超时时间 独享型 - v1.19集群:v1.19.16-r30及以上版本 v1.21集群:v1.21.10-r10及以上版本 v1.23集群:v1.23.8-r10及以上版本 v1.25集群:v1.25.3-r10及以上版本 其他更高版本集群 空闲超时时间 共享型 不支持UDP协议。 v1.23集群:v1.23.13-r0及以上版本 v1.25集群:v1.25.8-r0及以上版本 v1.27集群:v1.27.5-r0及以上版本 v1.28集群:v1.28.3-r0及以上版本 其他更高版本的集群 请求超时时间 独享型、共享型 仅支持HTTP、HTTPS协议。 响应超时时间 独享型、共享型 仅支持HTTP、HTTPS协议。 配置超时时间后,如果您在CCE控制台删除超时时间配置或在YAML中删除对应的annotation,ELB侧的配置将会保留。
  • 指标清单 CoreDNS视图使用的指标清单如下: 表2 CoreDNS视图指标清单 指标 类型 说明 coredns_dns_request_count_total counter 记录所有请求查询的累计值 coredns_dns_requests_total counter DNS请求的总数 coredns_dns_request_type_count_total counter 每种类型的请求累计值 coredns_dns_request_do_count_total counter 设置了DO标志位的请求次数累计值 coredns_dns_do_requests_total counter 设置了DO标志位的请求总数 coredns_dns_request_size_bytes_bucket histogram CoreDNS请求字节数 coredns_dns_response_rcode_count_total counter 不同返回码个数的累计值 coredns_dns_responses_total counter 返回码的总数 coredns_dns_request_duration_seconds_bucket histogram CoreDNS请求时延 coredns_dns_response_size_bytes_bucket histogram CoreDNS返回字节数 coredns_cache_size gauge CoreDNS缓存大小 coredns_cache_hits_total counter CoreDNS缓存命中个数
  • 指标说明 CoreDNS视图暴露的指标如下: 图1 CoreDNS视图指标 表1 CoreDNS指标说明 指标名称 单位 说明 请求速率 个/秒 CoreDNS每秒请求个数 请求速率(记录类型) 个/秒 根据请求类型统计CoreDNS的请求速率 请求速率(区域) 个/秒 根据区域统计CoreDNS的请求速率 请求速率(DO标志位) 个/秒 设置了DO标志位的请求速率 请求数据包(UDP) 字节数 基于UDP协议的请求数据包的P99、P90、P50的大小 请求数据包(TCP) 字节数 基于TCP协议的请求数据包的P99、P90、P50的大小 响应速率(响应状态码) 个/秒 CoreDNS不同状态码每秒的请求数 响应时延 毫秒 CoreDNS P99、P90、P50的请求时延 响应数据包(UDP) 字节数 基于UDP协议的响应数据包的P99、P90、P50的大小 响应数据包(TCP) 字节数 基于TCP协议的响应数据包的P99、P90、P50的大小 缓存记录数 个 CoreDNS缓存的DNS记录数 缓存命中率 个/秒 CoreDNS缓存每秒的命中请求数
  • 操作场景 集群中的每一个节点对应一台云服务器,集群节点创建成功后,您仍可以根据需求,修改云服务器的名称或变更规格。由于规格变更对业务有影响,建议一台成功完成后再对下一台进行规格变更。 CCE节点的部分信息是独立于弹性云服务器ECS维护的,当您在ECS控制台修改云服务器的名称、弹性公网IP,以及变更计费方式或变更规格后,需要通过“同步云服务器”功能将信息同步到CCE控制台相应节点中,同步后信息将保持一致。 ECS常见信息修改如下: 修改节点名称请参见修改云服务器名称。 当您购买的节点规格无法满足业务需要时,可参考变更规格通用操作变更节点规格,升级vCPU、内存。
  • 自定义检查项配置 登录CCE控制台,单击集群名称进入集群。 在左侧选择“节点管理”,切换至“节点”页签,单击“故障检测策略”。 在跳转的页面中查看当前检查项配置,单击检查项操作列的“编辑”,自定义检查项配置。 当前支持以下配置: 启用/停用:自定义某个检查项的开启或关闭。 目标节点配置:检查项默认运行在全部节点,用户可根据特殊场景需要自定义修改故障阈值。例如竞价实例中断回收检查只运行在竞价实例节点。 触发阈值配置:默认阈值匹配常见故障场景,用户可根据特殊场景需要自定义修改故障阈值。例如调整“连接跟踪表耗尽”触发阈值由90%调整至80%。 检查周期:默认检查周期为30秒,可根据用户场景需要自定义修改检查周期。 故障应对策略:故障产生后,可根据用户场景自定义修改故障应对策略,当前故障应对策略如下: 表1 故障应对策略 故障应对策略 效果 提示异常 上报Kuberentes事件。 禁止调度 上报Kuberentes事件,并为节点添加NoSchedule污点。 驱逐节点负载 上报Kuberentes事件,并为节点添加NoExecute污点。该操作会驱逐节点上的负载,可能导致业务不连续,请谨慎选择。
  • 开启节点故障检测 登录CCE控制台,单击集群名称进入集群。 在左侧选择“节点管理”,切换至“节点”页签,检查集群中是否已安装npd插件,或将其升级至最新版本。npd安装成功后,可正常使用故障检测策略功能。 npd运行正常时,单击“故障检测策略”,可查看当前故障检测项。关于NPD检查项列表请参见NPD检查项。 当前节点检查结果异常时,将在节点列表处提示“指标异常”。 您可单击“指标异常”,按照修复建议提示修复。
  • 告警中心概述 云原生告警是可观测性体系里面比较重要的一环。在云原生告警中,除了传统的CPU、内存等资源使用量的告警以外,还有容器重启等事件告警、应用访问失败等自定义的监控指标告警。 CCE的云原生告警能力是由AOM服务提供的,支持指标和事件的告警。同时,CCE集群详情中增加了告警中心能力,能支持快速配置资源等常用告警和告警查看。 图1 告警中心架构 告警中心 基于AOM服务的告警能力实现,提供集群内的告警快速检索、告警快速配置的能力。用户可以通过告警中心一键配置常用的告警规则。 AOM服务 华为云应用运维管理服务,是云上应用的一站式立体化运维管理平台,是云上监控、告警的基础。 SMN服务 华为云的消息通知服务,是云上应用发送告警或通知的依赖服务。在云原生场景中,在AOM服务触发的告警将通过SMN里面配置的短信、电子邮件、HTTP等方式发送。 父主题: 告警中心
  • 启用命名空间节点亲和 启用命名空间节点亲和后,命名空间下新创建的工作负载只能调度到拥有特定标签的节点上,详情请参见PodNodeSelector。 登录CCE控制台,单击集群名称进入集群,在左侧选择“命名空间”。 找到目标命名空间,单击“节点亲和”列的。 在弹出的窗口中,选择“启用”并单击“确定”。 启用后,命名空间下新创建的工作负载只能调度到拥有特定标签的节点上。例如,对于名为test的命名空间来说,该命名空间下的负载只能调度到添加了标签键为kubelet.kubernetes.io/namespace,值为test的节点上。 您可以在节点管理中通过“标签与污点管理”为节点添加上述指定标签,详情请参见管理节点标签。
  • 命名空间使用实践 按照不同环境划分命名空间 一般情况下,工作负载发布会经历开发环境、联调环境、测试环境,最后到生产环境的过程。这个过程中不同环境部署的工作负载相同,只是在逻辑上进行了定义。分为两种做法: 分别创建不同集群。 不同集群之间,资源不能共享。同时,不同环境中的服务互访需要通过负载均衡才能实现。 不同环境创建对应命名空间。 同个命名空间下,通过服务名称(Service name)可直接访问。跨命名空间的可以通过服务名称、命名空间名称访问。 例如下图,开发环境/联调环境/测试环境分别创建了命名空间。 图1 不同环境创建对应命名空间 按照应用划分命名空间 对于同个环境中,应用数量较多的情况,建议进一步按照工作负载类型划分命名空间。例如下图中,按照APP1和APP2划分不同命名空间,将不同工作负载在逻辑上当做一个工作负载组进行管理。且同一个命名空间内的工作负载可以通过服务名称访问,不同命名空间下的通过服务名称、命名空间名称访问。 图2 按照工作负载划分命名空间
  • 上传模板 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“应用模板”,在右上角单击“上传模板”。 单击“添加文件”,选中待上传的工作负载包后,单击“上传”。 图1 上传模板包 由于上传模板时创建OBS桶的命名规则由cce-charts-{region}-{domain_name}变为cce-charts-{region}-{domain_id},其中旧命名规则中的domain_name系统会做base64转化并取前63位,如果您在现有命名规则的OBS桶中找不到模板,请在旧命名规则的桶中进行查找。
  • 创建模板实例 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“应用模板”。 在“我的模板”页签中,单击目标模板下的“安装”。 参照表2设置安装工作负载参数。 表2 安装工作负载参数说明 参数 参数说明 实例名称 新建模板实例名称,命名必须唯一。 命名空间 指定部署的命名空间。 选择版本 选择模板的版本。 配置文件 用户可以导入values.yaml文件,导入后可替换模板包中的values.yaml文件;也可直接在配置框中在线编辑模板参数。 说明: 此处导入的values.yaml文件需符合yaml规范,即KEY:VALUE格式。对于文件中的字段不做任何限制。 导入的value.yaml的key值必须与所选的模板包的values.yaml保持一致,否则不会生效。即key不能修改。 单击“添加文件”。 选择对应的values.yaml文件,单击“打开”。 配置完成后,单击“安装”。 在“模板实例”页签下可以查看模板实例的安装情况。
  • Containerd和Docker组件常用命令对比 Containerd不支持dockerAPI和dockerCLI,但是可以通过cri-tool命令实现类似的功能。 表5 镜像相关功能 操作 Docker命令 Containerd命令 docker crictl ctr 列出本地镜像列表 docker images crictl images ctr -n k8s.io i ls 拉取镜像 docker pull crictl pull ctr -n k8s.io i pull 上传镜像 docker push 无 ctr -n k8s.io i push 删除本地镜像 docker rmi crictl rmi ctr -n k8s.io i rm 检查镜像 docker inspect crictl inspecti 无 表6 容器相关功能 操作 Docker命令 Containerd命令 docker crictl ctr 列出容器列表 docker ps crictl ps ctr -n k8s.io c ls 创建容器 docker create crictl create ctr -n k8s.io c create 启动容器 docker start crictl start ctr -n k8s.io run 停止容器 docker stop crictl stop 无 删除容器 docker rm crictl rm ctr -n k8s.io c del 连接容器 docker attach crictl attach 无 进入容器 docker exec crictl exec 无 查看容器详情 docker inspect crictl inspect ctr -n k8s.io c info 查看容器日志 docker logs crictl logs 无 查看容器的资源使用情况 docker stats crictl stats 无 更新容器资源限制 docker update crictl update 无 表7 Pod相关功能 操作 Docker命令 Containerd命令 docker crictl ctr 列出Pod列表 无 crictl pods 无 查看Pod详情 无 crictl inspectp 无 启动Pod 无 crictl start 无 运行Pod 无 crictl runp 无 停止Pod 无 crictl stopp 无 删除Pod 无 crictl rmp 无 Containerd创建并启动的容器会被kubelet立即删除,不支持暂停、恢复、重启、重命名、等待容器,Containerd不具备docker构建、导入、导出、比较、推送、查找、打标签镜像的能力,Containerd不支持复制文件,可通过修改containerd的配置文件实现登录镜像仓库。
  • 节点操作系统与容器引擎对应关系 v1.23及以上的VPC网络集群都支持Containerd,容器隧道网络集群从v1.23.2-r0开始支持Containerd。 表2 CCE集群节点操作系统与容器引擎对应关系 操作系统 内核版本 容器引擎 容器存储Rootfs 容器运行时 CentOS 7.6 3.x Docker 1.23起支持Containerd 1.19.16以下版本集群使用Device Mapper 1.19.16及以上版本集群使用OverlayFS runC EulerOS 2.3 3.x Docker Device Mapper runC EulerOS 2.5 3.x Docker Device Mapper runC EulerOS 2.9 4.x Docker 1.23起支持Containerd OverlayFS runC Ubuntu 18.04 4.x Docker 1.23起支持Containerd OverlayFS runC Ubuntu 22.04 4.x Docker 1.23起支持Containerd OverlayFS runC Huawei Cloud EulerOS 1.1 3.x Docker Containerd OverlayFS runC Huawei Cloud EulerOS 2.0 5.x Docker Containerd OverlayFS runC 表3 CCE Turbo集群节点操作系统与容器引擎对应关系 节点类型 操作系统 内核版本 容器引擎 容器存储Rootfs 容器运行时 弹性云服务器-虚拟机 CentOS 7.6 3.x Docker Containerd OverlayFS runC Ubuntu 18.04 4.x EulerOS 2.9 4.x Huawei Cloud EulerOS 1.1 3.x Huawei Cloud EulerOS 2.0 5.x 弹性云服务器-物理机 EulerOS 2.9 4.x Containerd Device Mapper Kata 表4 鲲鹏节点操作系统与容器引擎对应关系 操作系统 内核版本 容器引擎 容器存储Rootfs 容器运行时 Huawei Cloud EulerOS 2.0 5.x Docker Containerd OverlayFS runC EulerOS 2.9 4.x Docker Containerd OverlayFS runC EulerOS 2.8 4.x Docker OverlayFS runC
  • 动态创建对象存储卷时指定挂载密钥 动态创建对象存储卷时,可通过如下方法指定挂载密钥。 新建一个pvc的yaml文件,如pvc-example.yaml。 apiVersion: v1 kind: PersistentVolumeClaim metadata: annotations: csi.storage.k8s.io/node-publish-secret-name: test-user csi.storage.k8s.io/node-publish-secret-namespace: default everest.io/obs-volume-type: STANDARD csi.storage.k8s.io/fstype: obsfs name: obs-secret namespace: default spec: accessModes: - ReadWriteMany resources: requests: storage: 1Gi storageClassName: csi-obs 参数 描述 csi.storage.k8s.io/node-publish-secret-name 指定secret的名字 csi.storage.k8s.io/node-publish-secret-namespace 指定secret的命令空间 创建PVC。 kubectl create -f pvc-example.yaml PVC创建后,就可以创建工作负载挂载PVC使用存储。
  • 配置验证 根据上述步骤,使用IAM用户的密钥挂载对象存储卷。假设工作负载名称为obs-secret,容器内挂载目录是/temp,IAM用户权限为CCE ReadOnlyAccess和Tenant Guest。 查询工作负载实例名称。 kubectl get po | grep obs-secret 期望输出: obs-secret-5cd558f76f-vxslv 1/1 Running 0 3m22s 查询挂载目录下对象,查询正常。 kubectl exec obs-secret-5cd558f76f-vxslv -- ls -l /temp/ 尝试在挂载目录内写入数据,写入失败。 kubectl exec obs-secret-5cd558f76f-vxslv -- touch /temp/test 期望输出: touch: setting times of '/temp/test': No such file or directory command terminated with exit code 1 参考桶策略配置,给挂载桶的子用户设置读写权限。 再次尝试在挂载目录内写入数据,写入成功。 kubectl exec obs-secret-5cd558f76f-vxslv -- touch /temp/test 查看容器内挂载目录,验证数据写入成功。 kubectl exec obs-secret-5cd558f76f-vxslv -- ls -l /temp/ 期望输出: -rwxrwxrwx 1 root root 0 Jun 7 01:52 test
  • 关闭自动挂载访问密钥 老版本控制台会要求您上传AK/SK,对象存储卷挂载时默认使用您上传的访问密钥,相当于所有IAM用户(即子用户)都使用的是同一个访问密钥挂载的对象捅,对桶的权限都是一样的,导致无法对IAM用户使用对象存储桶进行权限控制。 如果您之前上传过AK/SK,为防止IAM用户越权,建议关闭自动挂载访问密钥,即需要在everest插件中将disable_auto_mount_secret参数打开,这样使用对象存储时就不会自动使用在控制台上传的访问密钥。 设置disable-auto-mount-secret时要求当前集群中无对象存储卷,否则挂载了该对象卷的工作负载扩容或重启的时候会由于必须指定访问密钥而导致挂卷失败。 disable-auto-mount-secret设置为true后,则创建PV和PVC时必须指定挂载访问密钥,否则会导致对象卷挂载失败。 kubectl edit ds everest-csi-driver -nkube-system 搜索disable-auto-mount-secret,并将值设置为true。 执行 :wq 保存退出,等待实例重启完毕即可。
  • 静态创建对象存储卷时指定挂载Secret 使用访问密钥创建Secret后,在创建PV时只需要关联上Secret,就可以使用Secret中的访问密钥(AK/SK)挂载对象存储卷。 登录OBS控制台,创建对象存储桶,记录桶名称和存储类型,以并行文件系统为例。 新建一个pv的yaml文件,如pv-example.yaml。 apiVersion: v1 kind: PersistentVolume metadata: name: pv-obs-example annotations: pv.kubernetes.io/provisioned-by: everest-csi-provisioner spec: accessModes: - ReadWriteMany capacity: storage: 1Gi csi: nodePublishSecretRef: name: test-user namespace: default driver: obs.csi.everest.io fsType: obsfs volumeAttributes: everest.io/obs-volume-type: STANDARD everest.io/region: cn-north-4 storage.kubernetes.io/csiProvisionerIdentity: everest-csi-provisioner volumeHandle: obs-normal-static-pv persistentVolumeReclaimPolicy: Delete storageClassName: csi-obs 参数 描述 nodePublishSecretRef 挂载时指定的密钥,其中 name:指定secret的名字 namespace:指定secret的命令空间 fsType 文件类型,支持“obsfs”与“s3fs”,取值为s3fs时创建是obs对象桶,配套使用s3fs挂载;取值为obsfs时创建的是obs并行文件系统,配套使用obsfs挂载,推荐使用。 volumeHandle 对象存储的桶名称。 创建PV。 kubectl create -f pv-example.yaml PV创建完成后,就可以创建PVC关联PV。 新建一个PVC的yaml文件,如pvc-example.yaml。 PVC yaml文件配置示例: apiVersion: v1 kind: PersistentVolumeClaim metadata: annotations: csi.storage.k8s.io/node-publish-secret-name: test-user csi.storage.k8s.io/node-publish-secret-namespace: default volume.beta.kubernetes.io/storage-provisioner: everest-csi-provisioner everest.io/obs-volume-type: STANDARD csi.storage.k8s.io/fstype: obsfs name: obs-secret namespace: default spec: accessModes: - ReadWriteMany resources: requests: storage: 1Gi storageClassName: csi-obs volumeName: pv-obs-example 参数 描述 csi.storage.k8s.io/node-publish-secret-name 指定secret的名字 csi.storage.k8s.io/node-publish-secret-namespace 指定secret的命令空间 创建PVC。 kubectl create -f pvc-example.yaml PVC创建后,就可以创建工作负载挂载PVC使用存储。
  • 使用访问密钥创建Secret 获取访问密钥。 对访问密钥进行base64编码(假设上文获取到的ak为“xxx”,sk为“yyy”)。 echo -n xxx|base64 echo -n yyy|base64 记录编码后的AK和SK。 新建一个secret的yaml,如test-user.yaml。 apiVersion: v1 data: access.key: WE5WWVhVNU***** secret.key: Nnk4emJyZ0***** kind: Secret metadata: name: test-user namespace: default labels: secret.kubernetes.io/used-by: csi type: cfe/secure-opaque 其中: 参数 描述 access.key base64编码后的ak。 secret.key base64编码后的sk。 name secret的名称 namespace secret的命名空间 secret.kubernetes.io/used-by: csi 带上这个标签才能在控制台上创建OBS PV/PVC时可见。 type 密钥类型,该值必须为cfe/secure-opaque 使用该类型,用户输入的数据会自动加密。 创建Secret。 kubectl create -f test-user.yaml
  • 集群过载监控 方式一:CCE界面 登录CCE控制台,进入一个已有的集群(集群版本为v1.23及以上)。 在“总览”页面,查看控制节点信息,将会显示“过载等级”指标。 过载等级如下: 熔断:拒绝所有外部流量 重度过载:拒绝75%外部流量 中度过载:拒绝50%外部流量 轻度过载:拒绝25%外部流量 正常:不拒绝外部流量 方式二:AOM 2.0界面 您可登录AOM 2.0控制台,创建一个仪表盘,并在仪表盘中添加名为vein_overload_level的监控指标,详情请参见创建仪表盘。 监控指标对应的含义如下: 0:熔断,拒绝所有外部流量 1:重度过载,拒绝75%外部流量 2:中度过载,拒绝50%外部流量 3:轻度过载,拒绝25%外部流量 4:正常,不拒绝外部流量 此处以AOM 2.0的操作步骤为例,供您参考。 登录AOM 2.0控制台,在左侧导航栏中选择“仪表盘”,单击“创建仪表盘”。 图3 创建仪表盘 仪表盘创建完成后,添加指标图表。 图表标题:集群过载指标 添加方式:全量指标 指标名称:vein_overload_level 范围:可不选 图4 添加指标图表 以上参数填写完成后,单击“添加到指标列表”。 单击“添加至仪表盘”,完成指标图表创建。 单击右上角保存按钮,保存仪表盘。 图5 保存仪表盘
  • 约束与限制 集群节点规格要求:CPU必须2核及以上,内存必须4GB及以上。 为了保证节点的稳定性,CCE集群节点上会根据节点的规格预留一部分资源给Kubernetes的相关组件(kubelet、kube-proxy以及docker等)和Kubernetes系统资源,使该节点可作为您的集群的一部分。 因此,您的节点资源总量与节点在Kubernetes中的可分配资源之间会存在差异。节点的规格越大,在节点上部署的容器可能会越多,所以Kubernetes自身需预留更多的资源,详情请参见节点预留资源策略说明。 节点的网络(如虚机网络、容器网络等)均被CCE接管,请勿自行添加删除网卡、修改路由和IP地址。若自行修改可能导致服务不可用。例如,节点上名为的gw_11cbf51a@eth0网卡为容器网络网关,不可修改。 节点购买后如需对其进行升级或降低规格等操作,请将节点关机后参照变更规格通用操作进行变更,也可以重新购买节点后,将老节点删除。 创建节点过程中会使用域名方式从OBS下载软件包,需要能够使用云上内网DNS解析OBS域名,否则会导致创建不成功。为此,节点所在子网的DNS服务器地址需要配置为内网DNS地址,从而使得节点使用内网DNS。在创建子网时DNS默认配置为内网DNS,如果您修改过子网的DNS,请务必确保子网下的DNS服务器可以解析OBS服务域名,否则需要将DNS改成内网DNS。 集群中的节点一旦创建后不可变更可用区。 集群中通过“按需计费”模式购买的节点,在CCE“节点管理”中进行删除操作后将会直接被删除;通过“包年/包月”模式购买的节点不能直接删除,请通过页面右上角“费用-我的订单”执行资源退订操作。 节点进程ID数量上限对业务有影响,您需要评估是否调整节点进程ID数量大小,如需要调整请参见修改节点进程 ID数量上限kernel.pid_max。 集群开启IPv4/IPv6双栈时,所选节点子网不允许开启DHCP无限租约。
  • 云服务器名称、节点名称与K8s节点名称说明 云服务器名称:ECS页面的云服务器名称,创建节点时支持自定义云服务器名称。 节点名称:CCE页面的节点名称,可与ECS页面的云服务器名称同步。但在指定K8s节点名称后,ECS云服务器名称的修改将无法被同步至节点名称。 K8s节点名称:即节点YAML文件中的“metadata.labels.kubernetes.io/hostname”标签值。仅支持在创建(纳管)时将节点云服务器名称指定为K8s节点名称。创建(纳管)完成后,K8s节点名称无法修改。 云服务器名称、节点名称与K8s节点名称之间的同步关系如图1所示。 图1 节点名称关系示意图
  • 监控 在此处,您可以方便地查看实例在近1小时、近8小时、近24小时以及自定义时间段内各维度资源的使用情况。如需查看更多监控信息,请单击“查看全部仪表盘”,跳转至“仪表盘”页面,相应指导请参见使用仪表盘。 图4 Pod监控 CPU相关指标 CPU:Pod 的所有容器在不同的时间段 CPU 使用总量占 Pod 的所有容器 CPU Limit 总量的比例。 CPU 使用量:Pod 已经使用的 CPU 核数。 CPU 申请量:Pod CPU Request 值。 CPU 限制量:Pod CPU Limit 值,使用量接近该值时容器的 CPU 资源会被限流,影响容器性能。 内存相关指标 内存使用率:Pod 的所有容器在不同的时间段内存使用总量占 Pod 的所有容器内存 Limit 总量。 内存使用量:Pod 已经使用的内存量。 内存申请量:Pod 内存 Request 值。 内存限制量:Pod 内存 Limit 值, 使用量到达该值时会导致容器 OOM。 网络相关指标 网络总流出速率:Pod 的所有容器每秒钟发送的总字节数。 网络总流入速率:Pod 的所有容器每秒钟接收的总字节数。 容器相关指标 容器CPU使用率:Pod 的每个容器在不同的时间段的 CPU 使用量占它们的 CPU Limit 量的比例。 容器内存使用率:Pod 的每个容器在不同的时间段的内存使用量占它们的内存 Limit 量的比例。 容器CPU受限:Pod 的每个容器在不同的时间段的 CPU 受限时间所占的比例。 容器网络丢包率:Pod 的每个的容器在不同的时间段接收丢失的数据包总量占接收的数据包总量的比例。 其他指标 Pod 历史状态:Pod 在不同时间段所处的状态。 容器历史状态:Pod 的每个容器在不同的时间段所处的状态。
  • Pod列表 Pod列表中包含Pod名称、状态、命名空间、Pod IP、所在节点、重启次数、CPU申请/限制、内存申请/限制、CPU使用率,以及内存使用率等信息。 图1 Pod列表 您可以利用列表上方的命名空间,以及搜索栏中的Pod名称、状态、Pod IP和所在节点进行筛选,快速定位所需的Pod。 您也可以单击“导出”按钮来导出全部Pod数据,或者选择部分Pod进行导出,此时仅导出所选中的数据。导出的文件为“.xlsx”格式,文件命名中包含时间戳。
  • 概览 单击Pod名称,您可以方便地查看资源概况,包括Pod状态、容器数量(异常/总数)以及异常事件。此外,还可以浏览Pod近一小时的监控概览,其中包括CPU使用率、内存使用率和网络流入/流出速率这些常见的监控指标。 图2 资源概况和监控概览 同时,概览页面还提供了容器使用趋势功能,您可以从中了解Pod中各容器的CPU使用率、CPU使用量、内存使用率和内存使用量(在图表右上角切换对应指标),并且支持查看降序Top5和升序Top5数据(在图表左上角进行切换)。 如需了解更多指标,请前往监控页面查看。
  • 参数说明 表1 灰度发布参数说明 参数 是否必填 参数类型 描述 kubernetes.io/elb.canary 否 string 设置Ingress灰度发布的开关。设置为true后,配合不同的注解,可以实现不同的灰度发布功能。 取值范围:true 独享型负载均衡器生效。 设置为true后,不允许删除或修改。 kubernetes.io/elb.canary-weight 否 string 权重灰度发布权重值,设置后Ingress以权重灰度形式发布。 取值为0-100的正整数,为灰度流量分配的百分比。 发布成权重灰度Ingress时,该参数必填。 不能与其他灰度发布功能同时设置。 kubernetes.io/elb.session-affinity-mode 否 string 开启权重灰度发布后,配置会话保持能力。 灰度发布仅支持设置为 "HTTP_COOKIE"。 kubernetes.io/ elb.session-affinity-option 否 string 开启权重灰度发布会话保持能力后,会话保持的超时时间。 参数值为json字符串,格式如下: {"persistence_timeout": "1440"} 参数说明: 超时时间范围为1-1440。 默认值为1440。 kubernetes.io/elb.canary-by-header 否 string header灰度发布的Key值,表示请求头参数的名称。需要与kubernetes.io/elb.canary-by-header-value成对使用。 参数说明: 长度限制1-40字符,只允许包含字母、数字、中划线(-)和下划线(_)。 kubernetes.io/elb.canary-by-header-value 否 string header灰度发布的Values值,需要与kubernetes.io/elb.canary-by-header成对使用。 参数值为json格式的数组,例如: '{"values":["a","b"]}' 参数说明: 数组长度:最小值为1,最大值为10。 数组取值:长度限制1-128字符,不支持空格,双引号,支持以下通配符:*(匹配0个或更多字符)和?(正好匹配1个字符)。 kubernetes.io/elb.canary-by-cookie 否 string cookie灰度发布的key值,表示请求cookie参数的名称。需要与kubernetes.io/elb.canary-by-cookie-value成对使用。 参数说明: 长度限制1-100字符,支持包含字母、数字、以及 !%'"()*+,./:=?@^\\-_`~ 等字符。 kubernetes.io/elb.canary-by-cookie-value 否 string cookie灰度发布的values值,需要与kubernetes.io/elb.canary-by-cookie成对使用。 参数值为json格式的数组,例如: '{"values":["a","b"]}' 参数说明: 数组长度:最小值为1,最大值为10。 数组取值:长度限制1-100字符,不支持空格,支持包含字母、数字、以及 !%'"()*+,./:=?@^\\-_`~ 等字符。 kubernetes.io/elb.canary-related-ingress-uid 否 string 灰度发布Ingress关联的原始Ingress的uid信息,用于前端展示原始Ingress和灰度发布的Ingress的关联关系。 ● 参数格式:字符串 ● 取值:原始Ingress的metadata.uid字段
  • 灰度发布服务部署 部署原服务。 部署名为origin-server的工作负载。 部署名为origin-service的service,关联刚创建的origin-server工作负载。(CCE Standard集群创建nodeport类型Service,Turbo集群创建ClusterIP类型Service) 部署名为origin-ingress的Ingress,关联刚创建的origin-service服务。 Ingress的配置如下: apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: origin-ingress namespace: default annotations: kubernetes.io/elb.port: '81' kubernetes.io/elb.id: e491f4e7-2351-4984-ad0a-8569e5e964a3 kubernetes.io/elb.class: performance spec: rules: - host: nginx1.com http: paths: - path: / backend: service: name: origin-service port: number: 81 property: ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH pathType: ImplementationSpecific ingressClassName: cce 灰度发布新版本服务。 部署新版本工作负载、服务和Ingress,使得流量能够通过权重或者头域导流到新版本服务上。 部署名为canary-server的工作负载。 部署名为canary-service的服务,关联刚创建的canary-server工作负载。(CCE Standard集群创建nodeport类型Service,Turbo集群创建ClusterIP类型Service) 部署名为canary-weight-ingress的Ingress,关联刚创建的canary-service服务,实现权重灰度发布。 Ingress的配置如下: apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: canary-weight-ingress namespace: default annotations: kubernetes.io/elb.canary: 'true' // 设置为true,表示启用canary注解功能。 kubernetes.io/elb.canary-weight: '40' // 权重值设置,表示对应请求40%的流量将被导流到新版本服务上。 kubernetes.io/elb.class: performance // 仅独享型ELB支持灰度发布 kubernetes.io/elb.id: e491f4e7-2351-4984-ad0a-8569e5e964a3 kubernetes.io/elb.port: '81' spec: ingressClassName: cce rules: - host: nginx1.com http: paths: - path: / pathType: ImplementationSpecific backend: service: name: canary-service port: number: 81 property: ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH 部署名为canary-header-ingress的Ingress,关联刚创建的canary-service服务,实现Header灰度发布。 Ingress的配置如下: apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: canary-header-ingress namespace: default annotations: kubernetes.io/elb.canary: 'true' kubernetes.io/elb.canary-by-header: 'location' // header的key值设置为location kubernetes.io/elb.canary-by-header-value: '{"values":["hz","sz","sh"]}' // header的value值设置为hz、sz、sh kubernetes.io/elb.class: performance kubernetes.io/elb.id: e491f4e7-2351-4984-ad0a-8569e5e964a3 kubernetes.io/elb.port: '81' spec: ingressClassName: cce rules: - host: nginx1.com http: paths: - path: / pathType: ImplementationSpecific backend: service: name: canary-service port: number: 80 property: ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH 查看灰度发布新版本服务是否成功。 查看Ingress创建: $ kubectl get ingress NAME CLASS HOSTS ADDRESS PORTS AGE canary-header-ingress cce nginx1.com 88.88.88.165 80 46s canary-weight-ingress cce nginx1.com 88.88.88.165 80 117s origin-ingress cce nginx1.com 88.88.88.165 80 2m25s 查看ELB生成规则: 服务请求返回结果: 使用location:hz请求头的请求访问服务: $ curl -H "Host: nginx1.com" -H "location: hz" http://88.88.88.165:81/ 预期结果: $ new 多次访问,返回结果均为new 不使用请求头的请求访问服务: $ curl -H "Host: nginx1.com" http://88.88.88.165:81/ 预期结果:返回值40%为new,60%为old。 老版本服务下线。 新版本服务运行稳定后,需要下线老版本服务。下线流程将原服务Ingress中的Service修改为新版本服务的Service,使流量都路由到新版本服务上,然后删除灰度Ingress。 将原服务Ingress关联的Service更新为新版本Service。 apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: origin-ingress namespace: default annotations: kubernetes.io/elb.port: '81' kubernetes.io/elb.id: e491f4e7-2351-4984-ad0a-8569e5e964a3 kubernetes.io/elb.class: performance spec: rules: - host: nginx1.com http: paths: - path: / backend: service: name: canary-service port: number: 81 property: ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH pathType: ImplementationSpecific ingressClassName: cce 验证老版本服务是否下线完成。 使用带header和不带header的请求,多次访问。 $ curl -H "Host: nginx1.com" -H "location: hz" http://88.88.88.165:81/ $ curl -H "Host: nginx1.com" http://88.88.88.165:81/ 预期结果:输出均为new,无old返回。 确认老版本服务下线完成后,删除灰度发布Ingress。 $ kubectl delete ingress canary-weight-ingress canary-header-ingress
  • 约束与限制 该特性存在集群版本限制,仅在以下版本中生效: v1.23集群:v1.23.14-r0 及以上版本 v1.25集群:v1.25.9-r0 及以上版本 v1.27集群:v1.27.6-r0 及以上版本 v1.28集群:v1.28.4-r0 及以上版本 其他更高版本的集群 创建灰度Ingress后,不应删除原Ingress。 单个ELB下的监听器,如果关联的多个Ingress配置了多个灰度策略,头域优先级最高,cookie次之,权重优先级最低。
  • 集群信息 集群信息包括多个维度: 集群ID:集群资源唯一标识,创建成功后自动生成,可用于API接口调用等场景。 集群名称:集群创建成功后可以单击进行修改。 集群原名:修改集群名称后显示的集群原名,设置其他集群的名称时和该集群的原名同样不可以重复。 集群状态:当前集群的运行状态,详情请参见集群生命周期。 集群类别:显示当前集群为CCE Standard集群或CCE Turbo集群,两者差异请参见集群类型对比。 集群创建时间:显示集群创建的时间,CCE以该时间作为计费依据。
共100000条