华为云用户手册

  • 域名 双向认证 CCE当前支持域名双向认证。 集群API Server绑定EIP后,使用kubectl连接集群时域名双向认证默认不开启,可通过 kubectl config use-context externalTLSVerify 命令切换到externalTLSVerify这个context开启使用。 集群绑定或解绑弹性IP、配置或更新自定义域名时,集群服务端证书将同步签入最新的集群访问地址(包括集群绑定的弹性IP、集群配置的所有自定义域名)。 异步同步集群通常耗时约5-10min,同步结果可以在操作记录中查看“同步证书”。 对于已绑定EIP的集群,如果在使用双向认证时出现认证不通过的情况(x509: certificate is valid),需要重新绑定EIP并重新下载kubeconfig.yaml。 早期未支持域名双向认证时,kubeconfig.yaml中包含"insecure-skip-tls-verify": true字段,如图3所示。如果需要使用双向认证,您可以重新下载kubeconfig.yaml文件并配置开启域名双向认证。 图3 未开启域名双向认证
  • 常见问题 Error from server Forbidden 使用kubectl在创建或查询Kubernetes资源时,显示如下内容: # kubectl get deploy Error from server (Forbidden): deployments.apps is forbidden: User "0c97ac3cb280f4d91fa7c0096739e1f8" cannot list resource "deployments" in API group "apps" in the namespace "default" 原因是用户没有操作该Kubernetes资源的权限,请参见命名空间权限(Kubernetes RBAC授权)为用户授权。 The connection to the server localhost:8080 was refused 使用kubectl在创建或查询Kubernetes资源时,显示如下内容: The connection to the server localhost:8080 was refused - did you specify the right host or port? 原因是由于该kubectl客户端未配置集群认证,请参见3进行配置。
  • 使用kubectl连接集群 若您需要从客户端计算机连接到Kubernetes集群,可使用Kubernetes命令行客户端kubectl,您可登录CCE控制台,单击待连接集群名称,在集群总览页面查看访问地址以及kubectl的连接步骤,如图1所示。 CCE支持“内网访问”和“公网访问”两种方式访问集群。 内网访问:访问集群的客户端机器需要位于集群所在的同一VPC内。 公网访问:访问集群的客户端机器需要具备访问公网的能力,并为集群绑定公网地址。 通过“公网访问”方式访问集群,您需要在总览页中的“连接信息”版块为集群绑定公网地址,如图1所示。绑定公网集群的kube-apiserver将会暴露到互联网,存在被攻击的风险,建议对kube-apiserver所在节点的EIP配置 DDoS高防服务 或设置安全组规则。 图1 集群连接信息 您需要先下载kubectl以及配置文件,复制到您的客户端机器,完成配置后,即可以访问Kubernetes集群。使用kubectl连接集群的步骤如下: 下载kubectl 您需要准备一台可访问公网的客户端计算机,并通过命令行方式安装kubectl。如果已经安装kubectl,则跳过此步骤,您可执行kubectl version命令判断是否已安装kubectl。 本文以Linux环境为例安装和配置kubectl,详情请参考安装kubectl。 登录到您的客户端机器,下载kubectl。 cd /home curl -LO https://dl.k8s.io/release/{v1.25.0}/bin/linux/amd64/kubectl 其中{v1.25.0}为指定的版本号,请根据集群版本进行替换。 安装kubectl。 chmod +x kubectl mv -f kubectl /usr/local/bin 获取kubectl配置文件 在集群总览页中的“连接信息”版块,单击kubectl后的“配置”按钮,查看kubectl的连接信息,并在弹出页面中选择“内网访问”或“公网访问”,然后下载对应的配置文件。 图2 下载配置文件 kubectl配置文件(kubeconfig)用于对接认证集群,请您妥善保存该认证凭据,防止文件泄露后,集群有被攻击的风险。 IAM 用户下载的配置文件所拥有的Kubernetes权限与CCE控制台上IAM用户所拥有的权限一致。 如果Linux系统里面配置了KUBECONFIG环境变量,kubectl会优先加载KUBECONFIG环境变量,而不是$home/.kube/config,使用时请注意。 配置kubectl 以Linux环境为例配置kubectl。 登录到您的客户端机器,复制2中下载的配置文件(以kubeconfig.yaml为例)到您客户端机器的/home目录下。 配置kubectl认证文件。 cd /home mkdir -p $HOME/.kube mv -f kubeconfig.yaml $HOME/.kube/config 根据使用场景,切换kubectl的访问模式。 VPC内网接入访问请执行: kubectl config use-context internal 互联网接入访问请执行(集群需绑定公网地址): kubectl config use-context external 互联网接入访问如需开启双向认证请执行(集群需绑定公网地址): kubectl config use-context externalTLSVerify 关于集群双向认证的说明请参见域名双向认证。
  • 权限说明 kubectl访问CCE集群是通过集群上生成的配置文件(kubeconfig)进行认证,kubeconfig文件内包含用户信息,CCE根据用户信息的权限判断kubectl有权限访问哪些Kubernetes资源。即哪个用户获取的kubeconfig文件,kubeconfig就拥有哪个用户的信息,这样使用kubectl访问时就拥有这个用户的权限。 用户拥有的权限请参见集群权限(IAM授权)与命名空间权限(Kubernetes RBAC授权)的关系。
  • 使用NPU 创建工作负载申请NPU资源,可按如下方法配置,指定显卡的数量。 kind: Deployment apiVersion: apps/v1 metadata: name: npu-test namespace: default spec: replicas: 1 selector: matchLabels: app: npu-test template: metadata: labels: app: npu-test spec: containers: - name: container-0 image: nginx:perl resources: limits: cpu: 250m huawei.com/ascend-310: '1' memory: 512Mi requests: cpu: 250m huawei.com/ascend-310: '1' memory: 512Mi imagePullSecrets: - name: default-secret 通过huawei.com/ascend-310指定申请NPU的数量。 使用huawei.com/ascend-310参数指定NPU数量时,requests和limits值需要保持一致。 指定huawei.com/ascend-310后,在调度时不会将负载调度到没有NPU的节点。如果缺乏NPU资源,会报类似“0/2 nodes are available: 2 Insufficient huawei.com/ascend-310.”的Kubernetes事件。 在CCE控制台使用NPU资源,只需在创建工作负载时,勾选NPU配额,并指定使用NPU芯片的数量。 图1 使用NPU
  • 配置重定向规则 表2 重定向规则注解 参数 类型 描述 nginx.ingress.kubernetes.io/permanent-redirect String 将访问请求永久重定向至某个目标网址(状态码为301)。 nginx.ingress.kubernetes.io/permanent-redirect-code String 修改永久重定向的返回状态码为指定值。 nginx.ingress.kubernetes.io/temporal-redirect String 将访问请求临时重定向至某个目标网址(状态码为302)。 nginx.ingress.kubernetes.io/ssl-redirect String 是否只能通过SSL访问(当Ingress包含证书时默认为true),将HTTP请求重定向至HTTPS。 nginx.ingress.kubernetes.io/force-ssl-redirect String 是否强制重定向到HTTPS,即使Ingress未启用TLS,通过HTTP访问时,请求将会被强制重定向(状态码为308)到HTTPS。 具体使用场景和说明请参见Nginx Ingress配置重定向规则。
  • 创建一致性哈希负载均衡规则 表5 一致性哈希负载均衡注解 参数 类型 描述 nginx.ingress.kubernetes.io/upstream-hash-by String 为后端启用一致性哈希进行负载均衡,参数值支持nginx参数、文本值或任意组合,例如: nginx.ingress.kubernetes.io/upstream-hash-by: "$request_uri"代表按照请求uri进行hash。 nginx.ingress.kubernetes.io/upstream-hash-by: "$request_uri$host"代表按照请求uri和域名进行hash。 nginx.ingress.kubernetes.io/upstream-hash-by: "${request_uri}-text-value"代表按照请求uri和文本值进行hash。 具体使用场景和说明请参见Nginx Ingress使用一致性哈希负载均衡。
  • Ingress类型 表1 Ingress类型注解 参数 类型 描述 支持的集群版本 kubernetes.io/ingress.class String nginx:表示使用Nginx Ingress。 cce:表示使用自研ELB Ingress。 通过API接口创建Ingress时必须增加该参数。 v1.23及以上集群使用ingressClassName参数代替,详情请参见通过Kubectl命令行创建Nginx Ingress。 仅v1.21及以下集群 上述注解的使用方法详情请参见通过Kubectl命令行创建Nginx Ingress。
  • 自定义Body体大小 表7 自定义Body体大小注解 参数 类型 描述 nginx.ingress.kubernetes.io/proxy-body-size String 当请求中的Body体大小超过允许的最大值时,将向客户端返回413错误,您可通过该参数调整Body体的限制大小。该参数值的基本单位为字节,您可以使用k、m、g等参数单位,换算关系如下: 1g=1024m;1m=1024k;1k=1024字节 例如: nginx.ingress.kubernetes.io/proxy-body-size: 8m
  • 域名正则化 Nginx Ingress支持配置“nginx.ingress.kubernetes.io/server-alias”注解实现域名配置正则表达式。 请参见通过kubectl连接集群,使用kubectl连接集群。 创建名为“ingress-test.yaml”的YAML文件,此处文件名可自定义。 vi ingress-test.yaml 以正则表达式~^www\.\d+\.example\.com$,abc.example.com为例,表示使用www.{一个或多个数字}.example.com和abc.example.com域名也可正常访问Ingress。 1.23及以上版本集群 apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/server-alias: '~^www\.\d+\.example\.com$,abc.example.com' name: ingress-test namespace: default spec: rules: - host: foo.bar.com http: paths: - backend: service: name: nginx-93244 #替换为您的目标服务名称 port: number: 80 #替换为您的目标服务端口 path: / pathType: ImplementationSpecific ingressClassName: nginx 1.21及以下版本集群 apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/ server-alias: '~^www\.\d+\.example\.com$,abc.example.com' name: ingress-test namespace: default spec: rules: - host: foo.bar.com http: paths: - path: '/' backend: serviceName: nginx-test #替换为您的目标服务名称 servicePort: 80 #替换为您的目标服务端口 执行以下命令,创建Ingress。 kubectl create -f ingress-test.yaml 预期输出: ingress.networking.k8s.io/ingress-test created 查看Nginx Ingress Controller的配置。 执行以下命令,查看Nginx Ingress Controller服务的Pod kubectl get pods -n kube-system | grep nginx-ingress-controller 预期输出: cceaddon-nginx-ingress-controller-68d7bcc67-dxxxx 1/1 Running 0 18h cceaddon-nginx-ingress-controller-68d7bcc67-cxxxx 1/1 Running 0 18h 执行以下命令,查看Nginx Ingress Controller的配置 kubectl exec -n kube-system cceaddon-nginx-ingress-controller-68d7bcc67-dxxxx cat /etc/nginx/nginx.conf | grep -C3 "foo.bar.com" 预期输出: ## start server foo.bar.com server { server_name foo.bar.com abc.example.com ~^www\.\d+\.example\.com$ ; listen 80 ; listen [::]:80 ; -- } } ## end server foo.bar.com 执行以下命令,获取Ingress对应的IP。 kubectl get ingress 预期输出: NAME CLASS HOSTS ADDRESS PORTS AGE nginx-test nginx foo.bar.com 10.3.xx.xx 80 14m 执行以下命令,测试不同规则下的服务访问。 执行以下命令,通过Host: foo.bar.com访问服务。 curl -H "Host: foo.bar.com" 10.3.xx.xx/ 预期可正常访问网页。 执行以下命令,通过Host: www.123.example.com访问服务 curl -H "Host: www.123.example.com" 10.3.xx.xx/ 预期可正常访问网页。 执行以下命令,通过Host: www.321.example.com访问服务 curl -H "Host: www.321.example.com" 10.3.xx.xx/ 预期可正常访问网页。
  • 约束与限制 单个GPU卡最多虚拟化成20个GPU虚拟设备。 使用GPU虚拟化后,不支持init容器。 GPU虚拟化支持显存隔离、显存与算力隔离两种隔离模式。单个GPU卡仅支持调度同一种隔离模式的工作负载。 使用GPU虚拟化后,不支持使用Autoscaler插件自动扩缩容GPU虚拟化节点。 XGPU服务的隔离功能不支持以UVM的方式申请显存,即调用CUDA API cudaMallocManaged(),更多信息,请参见NVIDIA官方文档。请使用其他方式申请显存,例如调用cudaMalloc()等。 受GPU虚拟化技术的限制,容器内应用程序初始化时,通过nvidia-smi监测工具监测到的实时算力可能超过容器可用的算力上限。
  • 操作步骤 登录CCE控制台,单击集群名称进入集群。 查看集群概览页,在右边“连接信息”下证书认证一栏,单击“下载”。 图1 获取证书 在弹出的“证书获取”窗口中,根据系统提示选择证书的过期时间并下载集群X509证书。 下载的证书包含client.key、client.crt、ca.crt三个文件,请妥善保管您的证书,不要泄露。 集群中容器之间互访不需要证书。 使用集群证书调用Kubernetes原生API。 例如使用curl命令调用接口查看Pod信息,如下所示,其中192.168.0.18:5443为集群API Server地址。 curl --cacert ./ca.crt --cert ./client.crt --key ./client.key https://192.168.0.18:5443/api/v1/namespaces/default/pods/ 更多集群接口请参见Kubernetes API。
  • 概览 单击工作负载名称,您可以方便地查看资源概况,包括负载状态、Pod数量(异常/总数)以及异常事件。此外,还可以浏览近一小时的监控概览,其中包括CPU使用率、内存使用率和网络流入/流出速率这些常见的监控指标。 图2 资源概况和监控概览 同时,概览页面还提供了Pod使用趋势功能,您可以从中了解工作负载中各Pod的CPU使用率、CPU使用量、内存使用率和内存使用量(在图表右上角切换对应指标),并且支持查看降序Top5和升序Top5数据(在图表左上角进行切换)。 图3 Pod使用趋势 如需了解更多指标,请前往监控页面查看。
  • 工作负载列表 工作负载列表中包含工作负载名称、状态、Pod个数(正常/全部)、命名空间、镜像名称、CPU使用率,以及内存使用率等信息。 图1 工作负载列表 您可以利用页面右上角的工作负载类型,以及列表上方的工作负载名称、状态和命名空间进行筛选,快速定位所需的工作负载。 您也可以单击“导出”按钮来导出全部工作负载数据,或者选择部分工作负载进行导出,此时仅导出所选中的数据。导出的文件为“.xlsx”格式,文件命名中包含时间戳。
  • Pod列表 Pod列表中包含了Pod名称、状态、命名空间、Pod IP、所在节点、重启次数、CPU申请/限制、内存申请/限制,以及CPU和内存使用率等详细信息。 图4 Pod列表 您可以通过在列表上方按照Pod名称、状态、命名空间、Pod IP和所在节点进行筛选,快速找到需要的Pod。您也可以单击“导出”按钮来导出全部Pod数据,或者选择部分Pod进行导出,此时仅导出所选中的数据。导出的文件为“.xlsx”格式,文件命名中包含时间戳。 单击Pod名称可以查看Pod的详细监控数据。更多相关内容,请参见Pod监控。
  • 监控 在此处,您可以方便地查看工作负载在近1小时、近8小时、近24小时以及自定义时间段内各维度资源的使用情况。如需查看更多监控信息,请单击“查看全部仪表盘”,跳转至“仪表盘”页面,相应指导请参见使用仪表盘。 图5 工作负载监控 CPU相关指标 CPU:负载的所有 Pod 的容器在不同的时间段使用的 CPU 总量占负载的所有 Pod 的容器的 CPU Limit 总量的比例。 CPU 受限(CPU Throttled):负载的所有 Pod 的容器在不同的时间段的 CPU 受限时间所占的平均比例。 内存相关指标 内存使用率:负载的所有 Pod 的容器在不同的时间段使用的内存总量占负载的所有 Pod 的容器的内存 Limit 总量比例。 网络相关指标 网络总流出速率:负载的所有 Pod 的容器在不同的时间段的每秒钟发送的总字节数。 网络总流入速率:负载的所有 Pod 的容器在不同的时间段的每秒钟接收的总字节数。 网络发送丢包率:负载的所有 Pod 的容器在不同的时间段的发送丢失的数据包总量占发送的数据包总量的比例。 网络接收丢包率:负载的所有 Pod 的容器在不同的时间段的接收丢失的数据包总量占接收的数据包总量的比例。 Pod相关指标 Pod CPU使用率:负载的每个 Pod 在不同的时间段的CPU使用量除以它们的 CPU Limit 量。 Pod内存使用率:负载的每个 Pod 在不同的时间段的内存使用量除以它们的内存 Limit 量。 Pod状态数量趋势:负载在不同的时间段分别处于不可用、未就绪、运行中、已完成或其他的状态 Pod 数量之和。 Pod数量变化趋势:负载的 Pod(副本)在不同的时间段的数量。
  • 指标清单 GPU视图使用的指标清单如下: 表2 GPU指标说明 指标名称 类型 说明 cce_gpu_gpu_utilization Gauge GPU卡算力使用率 cce_gpu_memory_utilization Gauge GPU卡显存使用率 cce_gpu_memory_used Gauge GPU显存使用量 cce_gpu_memory_total Gauge GPU显存总量 cce_gpu_memory_free Gauge GPU显存空闲量 cce_gpu_memory_clock Gauge GPU显存频率 cce_gpu_gpu_temperature Gauge GPU温度 cce_gpu_pcie_link_bandwidth Gauge GPU pcie带宽 cce_gpu_pcie_throughput_rx Gauge GPU pcie接收带宽
  • 指标说明 图1 GPU资源指标 表1 GPU图表说明 图表名称 单位 说明 集群-显存使用率 百分比 集群的显存使用率 计算公式:集群内容器显存使用总量/集群内显存总量 集群-算力使用率 百分比 集群的算力使用率 计算公式:集群内容器算力使用总量/集群内算力总量 节点-显存使用量 字节 每个节点的显存使用量 节点-算力使用率 百分比 每个节点的算力使用率 计算公式:节点上容器算力使用总量/节点上算力总量 节点-显存使用率 百分比 每个节点的显存使用率 计算公式:节点上容器显存使用总量/节点上显存总量 GPU卡-显存使用量 字节 每张GPU的显存使用量 计算公式:显卡上容器显存使用总量/显卡的显存总量 GPU卡-算力使用率 百分比 每张GPU卡的算力使用率 计算公式:显卡上容器算力使用总量/显卡的算力总量 GPU卡-温度 摄氏度 每张GPU卡的温度 GPU-显存频率 赫兹 每张GPU卡的显存频率 GPU卡-PCle带宽 字节/秒 每张GPU卡的PCle带宽
  • 版本记录 表2 云原生监控插件版本记录 插件版本 支持的集群版本 更新特性 社区版本 3.10.0 v1.21 v1.23 v1.25 v1.27 v1.28 v1.29 支持v1.29集群。 2.37.8 3.9.5 v1.21 v1.23 v1.25 v1.27 v1.28 新增采集自定义指标的开关,默认开启。 移除对1.17和1.19版本集群的支持。 Grafana从云原生监控插件中移除,拆分为独立的Grafana插件。 默认只采集免费指标和服务发现自定义指标。 升级开源组件版本 2.37.8 3.8.2 v1.17 v1.19 v1.21 v1.23 v1.25 v1.27 修复部分问题。 2.35.0 3.8.1 v1.17 v1.19 v1.21 v1.23 v1.25 v1.27 支持v1.27集群。 优化Agent模式的资源占用并支持分片。 2.35.0 3.7.3 v1.17 v1.19 v1.21 v1.23 v1.25 - 2.35.0 3.7.2 v1.17 v1.19 v1.21 v1.23 v1.25 支持采集Virtual-Kubelet Pod指标。 2.35.0 3.7.1 v1.17 v1.19 v1.21 v1.23 v1.25 支持PrometheusAgent模式 2.35.0 3.6.6 v1.17 v1.19 v1.21 v1.23 v1.25 Grafana版本升级至7.5.17 支持containerd节点 2.35.0 3.5.1 v1.17 v1.19 v1.21 v1.23 - 2.35.0 3.5.0 v1.17 v1.19 v1.21 v1.23 更新至社区2.35.0版本 2.35.0
  • 安装插件 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“插件中心”,在右侧找到云原生监控插件,单击“安装”。 在安装插件页面,进行规格配置。 部署模式:3.7.1及以上版本的插件支持选择部署模式。 Agent模式:本地不存储数据,占用资源较少,但是不支持HPA能力。 使用Agent模式时,由于本地不再存储监控数据,因此必须对接 AOM 或第三方监控系统。 Server模式:本地存储数据,占用资源较多,支持所有能力。 容器:插件创建的组件实例,详情请参见组件说明。您可以根据需求选择相应的规格或自定义规格。 配置相关参数。 对接AOM:将普罗数据上报至 AOM 服务。开启后,可选择对应的AOM实例。采集的基础指标免费,自定义指标将由AOM服务进行收费,详情请参见价格详情。对接AOM需要用户具备一定权限,目前仅华为云/华为账号,或者在admin用户组下的用户支持此操作。 对接三方:将普罗数据上报至第三方监控系统,需填写第三方监控系统的地址和Token,并选择是否跳过证书认证。 自定义指标采集:以服务发现的形式自动采集应用的指标。开启后需要在目标应用添加相关配置,详情请参见使用云原生监控插件监控自定义指标。 普罗高可用:高可用会在集群中将Prometheus-server、Prometheus-operator、thanos-query、custom-metrics-apiserver、alertmanager组件按多实例方式部署。 安装grafana:通过 grafana 可视化浏览普罗监控数据。grafana 会默认创建大小为 5 GiB 的存储卷,卸载插件时 grafana 的存储卷不随插件被删除。首次登录默认用户名与密码均为 admin,登录后会立即让您修改密码。 3.9.0版本后,Grafana组件从云原生监控插件中移除,拆分为独立的Grafana插件,不再显示此选项。 采集分片数:将采集Targets分配到不同的Prometheus分片实例上,可以增加指标的采集吞吐上限,但会消耗更多的资源,建议在集群规模较大时设置。 采集周期:设置采集时间间隔周期。 存储:选择用于存储监控数据的磁盘类型和大小。卸载插件时存储卷不随插件删除。 若monitoring命名空间下已存在可使用的PVC(名称为pvc-prometheus-server),将使用该存储作为存储源。 调度策略:可单独配置插件各个组件的节点亲和性和污点容忍能力。可以配置多个调度策略,不配置亲和节点键和容忍节点污点键则默认不开启对应的调度策略。 作用范围:可选择调度策略生效的插件实例,默认对全部实例生效。当指定组件实例名称时,将覆盖全部实例所配置的调度策略。 亲和节点标签键:填写节点标签键,为插件实例设置节点亲和性。 亲和节点标签值:填写节点标签值,为插件实例设置节点亲和性。 容忍节点污点键:目前仅支持污点键级别的污点容忍策略,组件可以调度到拥有该污点键的节点。 完成以上配置后,单击“安装”。 插件安装完成后,根据您的使用需求,可能还需进行以下操作: 如需使用自定义指标创建弹性伸缩策略,请确认云原生监控插件的部署模式为Server模式,然后参考以下步骤: 采集应用上报的自定义指标至Prometheus,详情请参见使用云原生监控插件监控自定义指标。 将Prometheus采集到的自定义指标聚合到API Server,可供HPA策略使用,详情请参见使用自定义指标创建HPA策略。 如果您需要使用该插件为工作负载弹性伸缩提供系统资源指标(如CPU、内存使用量),还需要开启Metric API,详情请参见通过Metrics API提供资源指标。配置完成后,可使用Prometheus采集系统资源指标。(不推荐)
  • 组件说明 安装kube-prometheus-stack插件创建的Kubernetes资源,全部都创建在monitoring命名空间下。 表1 kube-prometheus-stack组件 容器组件 说明 支持的部署模式 资源类型 prometheusOperator (负载名称:prometheus-operator) 根据自定义资源(Custom Resource Definition / CRDs)来部署和管理Prometheus Server,同时监控这些自定义资源事件的变化来做相应的处理,是整个系统的控制中心。 Agent模式/Server模式 Deployment prometheus (负载名称:prometheus-server) Operator根据自定义资源Prometheus类型中定义的内容而部署Prometheus Server集群,这些自定义资源可以看作是用来管理Prometheus Server集群的StatefulSets资源。 Agent模式/Server模式 StatefulSet alertmanager (负载名称:alertmanager-alertmanager) 插件的告警中心,主要用于接收Prometheus发送的告警并通过去重、分组、分发等能力管理告警信息。 Server模式 StatefulSet thanosSidecar 仅在高可用模式下部署。和prometheus-server运行在同一个Pod中,用于实现普罗指标数据的持久化存储。 Server模式 Container thanosQuery 仅在高可用模式下部署。PromQL查询的入口,能够对来自Store或Prometheus的相同指标进行重复数据删除。 Server模式 Deployment adapter (负载名称:custom-metrics-apiserver) 将自定义指标聚合到原生的Kubernetes API Server。 Server模式 Deployment kubeStateMetrics (负载名称:kube-state-metrics) 将Prometheus的metrics数据格式转换成K8s API接口能识别的格式。kube-state-metrics组件在默认配置下,不采集K8s资源的所有labels和annotation。如需采集,请参考采集Pod所有labels和annotations进行配置。 说明: 该组件如果存在多个Pod,只会有一个Pod暴露指标。 Agent模式/Server模式 Deployment nodeExporter (负载名称:node-exporter) 每个节点上均有部署,收集Node级别的监控数据。 Agent模式/Server模式 DaemonSet grafana (负载名称:grafana) 可视化浏览普罗监控数据。grafana会默认创建大小为5 GiB的存储卷,卸载插件时grafana的存储卷不随插件被删除。 Agent模式/Server模式 Deployment clusterProblemDetector (负载名称:cluster-problem-detector) 用于监控集群异常。 Server模式 Deployment
  • 采集Pod所有labels和annotations 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“工作负载”。 切换至“monitoring”命名空间,在“无状态负载”页签找到kube-state-metrics负载,并单击“升级”。 在容器配置的“生命周期”中,编辑启动命令。 图5 编辑启动命令 采集labels时,在原有的kube-state-metrics的启动参数最后添加: --metric-labels-allowlist=pods=[*],nodes=[node,failure-domain.beta.kubernetes.io/zone,topology.kubernetes.io/zone] 如需采集annotations时,则在启动参数中以相同方法添加参数: --metric-annotations-allowlist=pods=[*],nodes=[node,failure-domain.beta.kubernetes.io/zone,topology.kubernetes.io/zone] 编辑启动命令时,请勿修改其他原有的启动参数,否则可能导致组件异常。 kube-state-metrics将开始采集Pod和node的labels/annotations指标,查询kube_pod_labels/kube_pod_annotations是否在普罗的采集任务中。 kubectl get servicemonitor kube-state-metrics -nmonitoring -oyaml | grep kube_pod_labels 更多kube-state-metrics的启动参数请参见kube-state-metrics/cli-arguments。
  • 通过Metrics API提供资源指标 容器和节点的资源指标,如CPU、内存使用量,可通过Kubernetes的Metrics API获得。这些指标可以直接被用户访问,比如用kubectl top命令,也可以被HPA或者CustomedHPA使用,根据资源使用率使负载弹性伸缩。 插件可为Kubernetes提供Metrics API,但默认未开启,若要将其开启,需要创建以下APIService对象: apiVersion: apiregistration.k8s.io/v1 kind: APIService metadata: labels: app: custom-metrics-apiserver release: cceaddon-prometheus name: v1beta1.metrics.k8s.io spec: group: metrics.k8s.io groupPriorityMinimum: 100 insecureSkipTLSVerify: true service: name: custom-metrics-apiserver namespace: monitoring port: 443 version: v1beta1 versionPriority: 100 可以将该对象保存为文件,命名为metrics-apiservice.yaml,然后执行以下命令: kubectl create -f metrics-apiservice.yaml 执行kubectl top pod -n monitoring命令,若显示如下,则表示Metrics API能正常访问: # kubectl top pod -n monitoring NAME CPU(cores) MEMORY(bytes) ...... custom-metrics-apiserver-d4f556ff9-l2j2m 38m 44Mi ...... 卸载插件时,需要执行以下kubectl命令,同时删除APIService对象,否则残留的APIService资源将导致metrics-server插件安装失败。 kubectl delete APIService v1beta1.metrics.k8s.io
  • 插件简介 云原生监控插件(kube-prometheus-stack)通过使用Prometheus-operator和Prometheus,提供简单易用的端到端Kubernetes集群监控能力。 使用kube-prometheus-stack可将监控数据与监控中心对接,在监控中心控制台查看监控数据,配置告警等。 开源社区地址:https://github.com/prometheus/prometheus
  • 约束与限制 在默认配置下,插件中的kube-state-metrics组件不采集Kubernetes资源的所有的labels和annotation。如需采集,您需要手动在启动参数中开启采集开关,并同时检查名称为kube-state-metrics的ServiceMonitor中采集白名单是否添加相应指标,详情请参见采集Pod所有labels和annotations。 自3.8.0版本起,自定义指标采集将默认不再采集kube-system和monitoring命名空间下的组件指标,若您有相关负载在这两个命名空间下,建议使用Pod Monitor或Service Monitor的方式采集。 自3.8.0版本起,默认不再采集etcd-server、kube-controller、kube-scheduler、autoscaler、fluent-bit、volcano-agent、volcano-scheduler、otel-collector的指标,您可按需开启。 开启方式:前往“配置项与密钥”页面并切换至monitoring命名空间,单击名为persistent-user-config的配置项的“编辑YAML”按钮,按需移除customSettings字段下serviceMonitorDisable或podMonitorDisable中的配置或置为空数组。 ... customSettings: podMonitorDisable: [] serviceMonitorDisable: [] 在3.9.0版本后,Grafana组件从云原生监控插件中移除,拆分为独立的Grafana插件。因此,当插件版本从3.9.0后的版本回滚至3.9.0前的版本,请先卸载Grafana插件再进行回滚操作。
  • 指标说明 集群视图暴露的指标包括基础资源指标、网络指标和磁盘指标,具体说明如下: 图1 基础资源图表 表1 基础资源图表说明 指标名称 单位 说明 节点数 个 集群中的节点个数。 磁盘不可用节点数 个 集群中磁盘不可用的节点个数。 不可用节点数 个 集群中未就绪的节点个数。 CPU使用率 百分比 集群中所有容器的CPU使用量总和占所有容器设置的Limit总和的百分比。 CPU Requests水位 百分比 集群整体CPU Requests占集群CPU容量的百分比。 CPU Limits水位 百分比 集群整体CPU Limits占集群CPU容量的百分比。 内存使用率 百分比 集群中所有容器的内存使用量总和占所有容器设置的Limit总和的百分比。 内存Request水位 百分比 集群整体内存Requests占集群内存容量的百分比。 内存Limit水位 百分比 集群整体内存Limits占集群内存容量的百分比。 Pod数 个 集群中处在不同运行状态下的Pod个数(状态包含:Failed、Pending、Running、Succeeded、Unknown等)。 容器数 个 集群中处在不同运行状态下的容器个数(状态包含:Containers Running、Containers Waiting、Containers Terminated等)。 CPU使用量 Cores 以命名空间为粒度统计各个命名空间内的所有容器的CPU使用量之和。 内存使用量 字节 以命名空间为粒度统计各个命名空间内的所有容器的内存使用量之和。 图2 网络图表 表2 网络图表说明 指标名称 单位 说明 网络接收速率 字节/秒 以命名空间为粒度统计各个命名空间内的所有容器每秒接收的字节数之和。 网络发送速率 字节/秒 以命名空间为粒度统计各个命名空间内的所有容器每秒传输的字节数之和。 网络平均接收速率 字节/秒 以命名空间为粒度统计各个命名空间内的容器每秒平均接收的字节数。 网络平均发送速率 字节/秒 以命名空间为粒度统计各个命名空间内的容器每秒平均传输的字节数。 接收数据包速率 个/秒 以命名空间为粒度统计各个命名空间内的所有容器每秒接收的数据包数之和。 集群发送数据包速率 个/秒 以命名空间为粒度统计各个命名空间内所有容器每秒发送的数据包数之和。 丢包速率(接收) 个/秒 以命名空间为粒度统计各个命名空间内所有容器每秒接收的数据丢包数之和。 丢包速率(发送) 个/秒 以命名空间为粒度统计各个命名空间内所有容器每秒发送的数据丢包数之和。 图3 磁盘图表 表3 磁盘图表说明 指标说明 单位 说明 磁盘读写IO速率(读+写) 次数/秒 以命名空间为粒度统计各个命名空间内所有容器每秒的磁盘读写IO的次数之和。 磁盘读写吞吐量(读+写) 字节/秒 以命名空间为粒度统计各个命名空间内所有容器每秒的磁盘读写字节量之和。
  • 指标清单 集群视图使用的指标清单如下: 表4 集群视图指标清单 指标 指标类型 说明 kube_pod_container_resource_requests gauge 容器请求的请求资源数 kube_pod_container_resource_limits gauge 容器请求的限制资源数 kube_node_status_allocatable gauge 节点可分配的资源总数 kube_pod_status_phase gauge Pod当前阶段 node_memory_MemAvailable_bytes gauge 节点内存可用字节数 node_memory_MemTotal_bytes gauge 节点内存总字节数 node_cpu_seconds_total counter 在不同模式下节点累计CPU花费的时间 kube_node_info gauge 节点信息 kube_node_status_condition gauge 节点状态信息 kube_pod_container_status_waiting gauge 容器是否处在waiting状态 kube_pod_container_status_terminated gauge 容器是否处在终止状态 container_cpu_usage_seconds_total counter 容器CPU累计使用时间 container_memory_rss gauge RSS内存,即常驻内存集。是分配给进程使用的实际物理内存字节数,不是磁盘上缓存的虚机内存。 container_network_receive_bytes_total counter 容器网络累积接收字节数 container_network_transmit_bytes_total counter 容器网络累积传输字节数 container_network_receive_packets_total counter 容器网络收到的累计数据包数 container_network_transmit_packets_total counter 容器网络传输的累计数据包数 container_network_receive_packets_dropped_total counter 容器网络接收时丢失的数据包数 container_network_transmit_packets_dropped_total counter 容器网络传输时丢失的数据包数 container_fs_reads_total counter 容器磁盘读取次数 container_fs_reads_bytes_total counter 容器磁盘读取的总字节数
  • 步骤一:安装插件 集群中需要同时安装CCE AI套件(NVIDIA GPU)插件和Volcano调度器插件。 登录CCE控制台,单击集群名称进入集群,在左侧选择“插件中心”。 在右侧找到CCE AI套件(NVIDIA GPU)插件,单击“安装”。 在安装插件页面,填写插件配置。 插件规格:可配置“默认”或“自定义”规格,请根据实际情况选择。 容器:选择“自定义”规格时支持设置。 Nvidia驱动:您需要填写Nvidia驱动的下载链接,集群下全部GPU节点将使用相同的驱动。 如果下载链接为公网地址,如nvidia官网地址(https://us.download.nvidia.com/tesla/470.57.02/NVIDIA-Linux-x86_64-470.57.02.run),各GPU节点均需要绑定EIP。获取驱动链接方法请参考获取驱动链接-公网地址。 若下载链接为OBS上的链接,无需绑定EIP 。获取驱动链接方法请参考获取驱动链接-OBS地址。 请确保Nvidia驱动版本与GPU节点适配。 更改驱动版本后,需要重启节点才能生效。 驱动选择:若您不希望集群中的所有GPU节点使用相同的驱动,CCE支持以节点池为单位安装不同的GPU驱动。 插件将根据节点池指定的驱动版本进行安装,仅对节点池新建节点生效。 更新驱动版本后,节点池中新建节点可直接生效,存量节点需重启节点生效。 GPU虚拟化(2.0.5及以上版本支持):选择开启GPU虚拟化,支持GPU单卡的算力、显存分割与隔离。 图1 开启GPU虚拟化 若集群中未安装Volcano插件,将不支持开启GPU虚拟化,您可单击“一键安装”进行安装。如需配置Volcano插件参数,请单击“自定义安装”,详情请参见Volcano调度器。 若集群中已安装Volcano插件,但插件版本不支持使用GPU虚拟化,您可单击“一键升级”进行升级。如需配置Volcano插件参数,请单击“自定义升级”,详情请参见Volcano调度器。 开启GPU虚拟化后,可选择“虚拟化节点兼容GPU共享模式”选项,即兼容Kubernetes默认GPU调度能力。该能力需要配套gpu-device-plugin插件版本为2.0.10及以上、Volcano插件版本为1.10.5及以上。 开启该兼容能力后,在工作负载中声明nvidia.com/gpu配额(即配置nvidia.com/gpu为小数,例如0.5)时将通过虚拟化GPU提供,实现GPU显存隔离,按照设定值的百分比为容器分配GPU显存(例如分配0.5×16GiB=8GiB的GPU显存,该数值需为128MiB的整数倍否则会自动向下取整)。如果在开启兼容能力前工作负载中已经使用nvidia.com/gpu资源,则不会转成虚拟化GPU,依然使用整卡资源。 开启该兼容能力后,使用nvidia.com/gpu配额时等价于开启虚拟化GPU显存隔离,可以和显存隔离模式的工作负载共用一张GPU卡,但不支持和算显隔离模式负载共用一张GPU卡。同时,还需遵循GPU虚拟化的其他约束与限制。 未开启该兼容能力时,在工作负载中声明nvidia.com/gpu配额仅影响调度结果,并不会有显存隔离的限制。即虽然配置nvidia.com/gpu为0.5,依然可以在容器中看到完整的GPU显存资源。且使用nvidia.com/gpu资源的工作负载无法和使用虚拟化显存的工作负载共同调度到同一节点。 编辑插件配置时,修改“虚拟化节点兼容GPU共享模式”选项,不会影响已运行的工作负载。修改该配置可能工作负载导致调度失败。例如,兼容能力从开启到关闭,已使用nvidia.com/gpu资源的工作负载仍存在虚拟化GPU显存隔离,会导致该GPU卡无法调度算显隔离模式的工作负载,您需要将使用nvidia.com/gpu资源的工作负载删除才可重新调度。 单击“安装”。
  • 步骤三(可选):修改Volcano调度策略 Volcano针对GPU节点的调度策略默认为Spread,即如果节点配置相同,会选择一个正在运行的容器数量最少的节点,可以尽量将容器平均分配到各个节点。而Binpack调度策略与之相反,它会尽可能的把所有的容器调度到一台节点上运行,尽量少用节点,避免资源碎片化。 如果在使用GPU虚拟化特性时需要使用Binpack调度策略,可以在Volcano插件的高级配置中进行修改,具体操作步骤如下。 登录CCE控制台,单击集群名称进入集群,在左侧选择“插件中心”。 在右侧找到Volcano调度器插件,单击“编辑”。 在编辑插件页面,修改插件的“高级配置”。 在nodeorder插件中,添加arguments参数,配置leastrequested.weight为0,即资源分配最少的节点优先级设置为0。 新增binpack插件,并指定xGPU自定义资源(volcano.sh/gpu-core.percentage和volcano.sh/gpu-mem.128Mi)的权重。 完整示例如下: { "colocation_enable": "", "default_scheduler_conf": { "actions": "allocate, backfill, preempt", "tiers": [ { "plugins": [ { "name": "priority" }, { "enablePreemptable": false, "name": "gang" }, { "name": "conformance" } ] }, { "plugins": [ { "enablePreemptable": false, "name": "drf" }, { "name": "predicates" }, { "name": "nodeorder", //将资源分配最少的节点优先级设置为0 "arguments": { "leastrequested.weight": 0 } } ] }, { "plugins": [ { "name": "cce-gpu-topology-predicate" }, { "name": "cce-gpu-topology-priority" }, { "name": "xgpu" }, //添加binpack插件,指定xGPU资源的权重。 { "name": "binpack", "arguments": { "binpack.resources": "volcano.sh/gpu-core.percentage,volcano.sh/gpu-mem.128Mi", "binpack.resources.volcano.sh/gpu-mem.128Mi": 10, "binpack.resources.volcano.sh/gpu-core.percentage": 10 } } ] }, { "plugins": [ { "name": "nodelocalvolume" }, { "name": "nodeemptydirvolume" }, { "name": "node CS Ischeduling" }, { "name": "networkresource" } ] } ] }, "tolerations": [ { "effect": "NoExecute", "key": "node.kubernetes.io/not-ready", "operator": "Exists", "tolerationSeconds": 60 }, { "effect": "NoExecute", "key": "node.kubernetes.io/unreachable", "operator": "Exists", "tolerationSeconds": 60 } ] }
  • 前提条件 配置 支持版本 集群版本 v1.23.8-r0、v1.25.3-r0及以上 操作系统 Huawei Cloud EulerOS 2.0操作系统 GPU类型 支持T4、V100类型的GPU 驱动版本 GPU虚拟化功能仅支持470.57.02、510.47.03、535.54.03版本的GPU驱动。 运行时 仅支持containerd 插件 集群中需要同时安装以下插件: Volcano调度器插件:1.10.5及以上版本 CCE AI套件(NVIDIA GPU)插件:2.0.5及以上版本
共100000条