华为云用户手册

  • 版本记录 表3 CCE AI套件(NVIDIA GPU)版本记录 插件版本 支持的集群版本 更新特性 2.6.4 v1.28 v1.29 更新GPU卡逻辑隔离逻辑 2.6.1 v1.28 v1.29 升级GPU插件基础镜像 2.5.6 v1.28 修复安装驱动的问题 2.5.4 v1.28 支持v1.28集群 2.0.72 v1.21 v1.23 v1.25 v1.27 更新GPU卡逻辑隔离逻辑 2.0.69 v1.21 v1.23 v1.25 v1.27 升级GPU插件基础镜像 2.0.48 v1.21 v1.23 v1.25 v1.27 修复安装驱动的问题 2.0.46 v1.21 v1.23 v1.25 v1.27 支持535版本Nvidia驱动 支持非root用户使用XGPU 优化启动逻辑 2.0.44 v1.21 v1.23 v1.25 v1.27 支持535版本Nvidia驱动 支持非root用户使用XGPU 优化启动逻辑 2.0.18 v1.21 v1.23 v1.25 v1.27 支持HCE 2.0 2.0.17 v1.21 v1.23 v1.25 v1.27 RollingUpdate参数配置优化 2.0.14 v1.19 v1.21 v1.23 v1.25 v1.27 支持xGPU设备监控 支持nvidia.com/gpu与volcano.sh/gpu-* api兼容 2.0.5 v1.19 v1.21 v1.23 v1.25 - 2.0.0 v1.19 v1.21 v1.23 v1.25 支持GPU虚拟化 驱动安装目录更新至节点/usr/local/nvidia 1.2.28 v1.19 v1.21 v1.23 v1.25 适配OS Ubuntu22.04 GPU驱动目录自动挂载优化 1.2.24 v1.19 v1.21 v1.23 v1.25 节点池支持配置GPU驱动版本 支持GPU指标采集 1.2.20 v1.19 v1.21 v1.23 v1.25 设置插件别名为gpu 1.2.17 v1.15 v1.17 v1.19 v1.21 v1.23 增加nvidia-driver-install pod limits 配置 1.2.15 v1.15 v1.17 v1.19 v1.21 v1.23 适配CCE v1.23集群 1.2.11 v1.15 v1.17 v1.19 v1.21 支持EulerOS 2.10系统 1.2.10 v1.15 v1.17 v1.19 v1.21 CentOS系统支持新版本GPU驱动 1.2.9 v1.15 v1.17 v1.19 v1.21 适配CCE v1.21集群 1.2.2 v1.15 v1.17 v1.19 适配EulerOS新内核 1.2.1 v1.15 v1.17 v1.19 适配CCE v1.19集群 插件增加污点容忍 1.1.13 v1.13 v1.15 v1.17 支持Centos7.6 3.10.0-1127.19.1.el7.x86_64内核系统 1.1.11 v1.15 v1.17 支持用户自定义驱动地址下载驱动 支持v1.15、v1.17集群
  • 验证插件 插件安装完成后,在GPU节点及调度了GPU资源的容器中执行nvidia-smi命令,验证GPU设备及驱动的可用性。 GPU节点: # 插件版本为2.0.0以下时,执行以下命令: cd /opt/cloud/cce/nvidia/bin && ./nvidia-smi # 插件版本为2.0.0及以上时,驱动安装路径更改,需执行以下命令: cd /usr/local/nvidia/bin && ./nvidia-smi 容器: cd /usr/local/nvidia/bin && ./nvidia-smi 若能正常返回GPU信息,说明设备可用,插件安装成功。
  • 安装插件 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“插件中心”,在右侧找到CCE AI套件(NVIDIA GPU)插件,单击“安装”。 设置插件支持的“参数配置”。 Nvidia驱动:填写Nvidia驱动的下载链接,集群下全部GPU节点将使用相同的驱动。 如果下载链接为公网地址,如nvidia官网地址(https://us.download.nvidia.com/tesla/470.103.01/NVIDIA-Linux-x86_64-470.103.01.run),各GPU节点均需要绑定EIP。获取驱动链接方法请参考获取驱动链接-公网地址。 若下载链接为OBS上的链接,无需绑定EIP 。获取驱动链接方法请参考获取驱动链接-OBS地址。 请确保Nvidia驱动版本与GPU节点适配。配套关系请参见GPU驱动支持列表。 更改驱动版本后,需要重启节点才能生效。 对于Linux 5.x内核系统:Huawei Cloud EulerOS 2.0建议使用470及以上版本驱动;Ubuntu 22.04建议使用515及以上版本驱动。 图1 填写Nvidia驱动 驱动选择:若您不希望集群中的所有GPU节点使用相同的驱动,CCE支持以节点池为单位安装不同的GPU驱动。 插件将根据节点池指定的驱动版本进行安装,仅对节点池新建节点生效。 更新驱动版本后,节点池中新建节点可直接生效,存量节点需重启节点生效。 GPU虚拟化(2.0.5及以上版本支持):选择开启GPU虚拟化,支持GPU单卡的算力、显存分割与隔离。 图2 开启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资源的工作负载删除才可重新调度。 单击“安装”,安装插件的任务即可提交成功。 卸载插件将会导致重新调度的GPU Pod无法正常运行,但已运行的GPU Pod不会受到影响。
  • 约束与限制 下载的驱动必须是后缀为“.run”的文件。 仅支持Nvidia Tesla驱动,不支持GRID驱动。 安装或重装插件时,需要保证驱动下载链接正确且可正常访问,插件对链接有效性不做额外校验。 插件仅提供驱动的下载及安装脚本执行功能,插件的状态仅代表插件本身功能正常,与驱动是否安装成功无关。 对于GPU驱动版本与您业务应用的兼容性(GPU驱动版本与CUDA库版本的兼容性),CCE不保证两者之间兼容性,请您自行验证。 对于已经安装GPU驱动的自定义操作系统镜像,CCE无法保证其提供的GPU驱动与CCE其他GPU组件兼容(例如监控组件等)。 如果您使用不在GPU驱动支持列表内的GPU驱动版本,可能引发GPU驱动与操作系统版本、 ECS实例类型 、Container Runtime等不兼容,继而导致驱动安装失败或者GPU插件异常。对于使用自定义GPU驱动的场景,请您自行验证。
  • 访问Grafana Prometheus插件同时安装了Grafana(一款开源可视化工具),并且与Prometheus进行了对接。您可以创建一个公网LoadBalancer类型Service,这样就可以从公网访问Grafana,从Grafana中看到Prometheus的监控数据。 单击访问地址,访问Grafana,选择合适的DashBoard,即可以查到相应的聚合内容。 登录CCE控制台,选择一个已安装Prometheus插件的集群,在左侧导航栏中选择“服务”。 单击右上角“YAML创建”,为Grafana创建一个公网LoadBalancer类型Service。 apiVersion: v1 kind: Service metadata: name: grafana-lb #服务名称,可自定义 namespace: monitoring labels: app: grafana annotations: kubernetes.io/elb.id: 038ff*** #请替换为集群所在VPC下的ELB实例ID,且ELB实例为公网访问类型 spec: ports: - name: cce-service-0 protocol: TCP port: 80 #服务端口号,可自定义 targetPort: 3000 #Grafana的默认端口号,无需更改 selector: app: grafana type: LoadBalancer 创建完成后在浏览器访问“负载均衡公网IP地址:服务端口”,访问Grafana并选择合适的DashBoard,即可查看GPU资源状态。 图4 查看GPU虚拟化资源
  • 监控GPU指标 创建一个使用GPU的工作负载,等工作负载正常运行后,访问Prometheus,在“Graph”页面中,查看GPU指标。 图3 查看GPU监控指标 表1 GPU基础监控指标 类型 指标 监控级别 说明 利用率指标 cce_gpu_utilization GPU卡 GPU卡算力使用率 cce_gpu_memory_utilization GPU卡 GPU卡显存使用率 cce_gpu_encoder_utilization GPU卡 GPU卡编码使用率 cce_gpu_decoder_utilization GPU卡 GPU卡解码使用率 cce_gpu_utilization_process GPU进程 GPU各进程算力使用率 cce_gpu_memory_utilization_process GPU进程 GPU各进程显存使用率 cce_gpu_encoder_utilization_process GPU进程 GPU各进程编码使用率 cce_gpu_decoder_utilization_process GPU进程 GPU各进程解码使用率 内存指标 cce_gpu_memory_used GPU卡 GPU显存使用量 cce_gpu_memory_total GPU卡 GPU显存总量 cce_gpu_memory_free GPU卡 GPU显存空闲量 cce_gpu_bar1_memory_used GPU卡 GPU bar1 内存使用量 cce_gpu_bar1_memory_total GPU卡 GPU bar1 内存总量 频率 cce_gpu_clock GPU卡 GPU时钟频率 cce_gpu_memory_clock GPU卡 GPU显存频率 cce_gpu_graphics_clock GPU卡 GPU图形处理器频率 cce_gpu_video_clock GPU卡 GPU视频处理器频率 物理状态数据 cce_gpu_temperature GPU卡 GPU温度 cce_gpu_power_usage GPU卡 GPU功率 cce_gpu_total_energy_consumption GPU卡 GPU总能耗 带宽数据 cce_gpu_pcie_link_bandwidth GPU卡 GPU PCIE 带宽 cce_gpu_nvlink_bandwidth GPU卡 GPU nvlink 带宽 cce_gpu_pcie_throughput_rx GPU卡 GPU PCIE 接收带宽 cce_gpu_pcie_throughput_tx GPU卡 GPU PCIE 发送带宽 cce_gpu_nvlink_utilization_counter_rx GPU卡 GPU nvlink 接收带宽 cce_gpu_nvlink_utilization_counter_tx GPU卡 GPU nvlink 发送带宽 隔离内存页面 cce_gpu_retired_pages_sbe GPU卡 GPU单比特错误隔离页数量 cce_gpu_retired_pages_dbe GPU卡 GPU双比特错误隔离页数量 表2 GPU虚拟化监控指标 指标 监控级别 说明 xgpu_memory_total GPU进程 GPU虚拟化显存总量。 xgpu_memory_used GPU进程 GPU虚拟化显存使用量。 xgpu_core_percentage_total GPU进程 GPU虚拟化算力总量。 xgpu_core_percentage_used GPU进程 GPU虚拟化算力使用量。 gpu_schedule_policy GPU卡 GPU虚拟化分三种模式: 0:显存隔离算力共享模式 1:显存算力隔离模式 2:默认模式,表示当前卡还没被用于GPU虚拟化设备分配。 xgpu_device_health GPU卡 GPU虚拟化设备的健康情况。 0:表示GPU虚拟化设备为健康状态。 1:表示GPU虚拟化设备为非健康状态。
  • 安装步骤 登录CCE控制台,单击集群名称进入集群,单击左侧导航栏的“插件中心”,在右侧找到Kubernetes Dashboard插件,单击“安装”。 在参数配置页面,配置以下参数。 访问方式:支持“节点访问”,通过集群节点绑定的弹性公网IP进行访问,当集群节点未绑定弹性IP时无法正常使用。 证书配置:dashboard服务端使用的证书。 使用自定义证书 您需要参考样例填写pem格式的“证书文件”和“证书私钥”。 使用默认证书 dashboard默认生成的证书不合法,将影响浏览器正常访问,建议您选择手动上传合法证书,以便通过浏览器校验,保证连接的安全性。 单击“安装”。
  • 权限修改 安装Dashboard插件后初始角色仅拥有对大部分资源的只读权限,若想让Dashboard界面支持更多操作,需自行在后台对RBAC相关资源进行修改。 具体修改方式: 可对名为“kubernetes-dashboard-minimal”这个ClusterRole中的规则进行调整。 关于使用RBAC的具体细节可参看文档:https://kubernetes.io/docs/reference/access-authn-authz/rbac/。
  • 访问dashboard 登录CCE控制台,单击集群名称进入集群,单击左侧导航栏的“插件中心”,确认dashboard插件状态为“运行中”后,单击“访问”。 在CCE控制台弹出的窗口中复制token。 在登录页面中选择“令牌”的登录方式,粘贴输入复制的token,单击“登录”按钮。 本插件默认不支持使用证书认证的kubeconfig进行登录,推荐使用令牌方式登录。详细信息请参考:https://github.com/kubernetes/dashboard/issues/2474#issuecomment-348912376 图1 令牌方式登录 登录后效果,如图2。 图2 Dashboard概览页
  • 附:访问报错解决方法 使用Chrome浏览器访问时,会出现如下“ERR_CERT_INVALID”的报错导致无法正常进入登录界面,原因是dashboard默认生成的证书未通过Chrome校验,当前有以下两种解决方式: 图3 Chrome浏览器报错信息 方式一:使用火狐浏览器访问链接,为当前地址添加“例外”后即可进入登录页面。 方式二:通过启动Chrome时添加“--ignore-certificate-errors”开关忽略证书报错。 Windows:保存链接地址,关闭所有已经打开的Chrome浏览器窗口,Windows键 +“R”弹出“运行”对话框,输入“chrome --ignore-certificate-errors”启动新的chrome窗口,输入地址进入登录界面。
  • 版本记录 表2 Kubernetes Dashboard插件版本记录 插件版本 支持的集群版本 更新特性 社区版本 2.2.27 v1.21 v1.23 v1.25 修复部分问题 2.7.0 2.2.7 v1.21 v1.23 v1.25 - 2.7.0 2.2.5 v1.21 v1.23 v1.25 插件与节点时区一致 2.7.0 2.2.3 v1.21 v1.23 v1.25 - 2.7.0 2.1.1 v1.19 v1.21 v1.23 适配CCE v1.23集群 更新至社区v2.5.0版本 2.5.0 2.0.10 v1.15 v1.17 v1.19 v1.21 适配CCE v1.21集群 2.0.0 2.0.4 v1.15 v1.17 v1.19 配置seccomp默认规则 2.0.0 2.0.3 v1.15 v1.17 v1.19 兼容CCE v1.15集群 2.0.0 2.0.2 v1.17 v1.19 适配CCE v1.19集群 2.0.0 2.0.1 v1.15 v1.17 支持鲲鹏集群 2.0.0 2.0.0 v1.17 支持对接CCE v1.17 2.0.0
  • 插件简介 Kubernetes Dashboard是一个旨在为Kubernetes世界带来通用监控和操作Web界面的项目,集合了命令行可以操作的所有命令。 使用Kubernetes Dashboard,您可以: 向Kubernetes集群部署容器化应用 诊断容器化应用的问题 管理集群的资源 查看集群上所运行的应用程序 创建、修改Kubernetes上的资源(例如Deployment、Job、DaemonSet等) 展示集群上发生的错误 例如:您可以伸缩一个Deployment、执行滚动更新、重启一个Pod或部署一个新的应用程序。 开源社区地址:https://github.com/kubernetes/dashboard 由于Kubernetes Dashboard社区目前还未正式发布支持v1.27版本集群的插件,v1.27集群中暂不支持安装该插件。待社区发布稳定版本后,CCE将会尽快提供配套插件,并确保与最新版本的CCE兼容。
  • 相关操作 密钥创建完成后,您还可以执行表2中的操作。 密钥列表中包含系统密钥资源,系统密钥资源不可更新,也不能删除,只能查看。 表2 其他操作 操作 说明 编辑YAML 单击密钥名称后的“编辑YAML”,可编辑当前密钥的YAML文件。 更新密钥 选择需要更新的密钥名称,单击“更新”。 根据表1更改信息。 单击“确定”。 删除密钥 选择要删除的密钥,单击“删除”。 根据系统提示删除密钥。 批量删除密钥 勾选需要删除的密钥名称。 单击页面左上角的“批量删除”,删除选中的密钥。 根据系统提示删除密钥。
  • 操作步骤 登录CCE控制台,单击集群名称进入集群。 在左侧导航栏中选择“配置与密钥”,选择“密钥”页签,在右上角单击“创建密钥”。 填写参数。 表1 基本信息说明 参数 参数说明 名称 新建的密钥的名称,同一个命名空间内命名必须唯一。 命名空间 新建密钥所在的命名空间,默认为default。 描述 密钥的描述信息。 密钥类型 新建的密钥类型。 Opaque:一般密钥类型。 kubernetes.io/dockerconfigjson:存放拉取私有仓库镜像所需的认证信息。 kubernetes.io/tls:Kubernetes的TLS密钥类型,用于存放7层负载均衡服务所需的证书。kubernetes.io/tls类型的密钥示例及说明请参见TLS Secret。 IngressTLS:CCE提供的TLS密钥类型,用于存放7层负载均衡服务所需的证书。 其他:若需要创建其他类型的密钥,请手动输入密钥类型。 密钥数据 工作负载密钥的数据可以在容器中使用。 当密钥为Opaque类型时,单击,在弹出的窗口中输入键值对,并且可以勾选“自动Base64转码”。 当密钥为kubernetes.io/dockerconfigjson类型时,输入私有镜像仓库的账号和密码。 当密钥为kubernetes.io/tls或IngressTLS类型时,上传证书文件和私钥文件。 说明: 证书是自签名或CA签名过的凭据,用来进行身份认证。 证书请求是对签名的请求,需要使用私钥进行签名。 密钥标签 密钥的标签。键值对形式,输入键值对后单击“确认添加”。 配置完成后,单击“确定”。 密钥列表中会出现新创建的密钥。
  • 使用Ingress规则 使用podSelector设置访问范围 apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: test-network-policy namespace: default spec: podSelector: # 规则对具有role=db标签的Pod生效 matchLabels: role: db ingress: # 表示入规则 - from: - podSelector: # 只允许具有role=frontend标签的Pod访问 matchLabels: role: frontend ports: # 只能使用TCP协议访问6379端口 - protocol: TCP port: 6379 示意图如下所示。 图1 podSelector 使用namespaceSelector设置访问范围 apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: test-network-policy spec: podSelector: # 规则对具有role=db标签的Pod生效 matchLabels: role: db ingress: # 表示入规则 - from: - namespaceSelector: # 只允许具有project=myproject标签的命名空间中的Pod访问 matchLabels: project: myproject ports: # 只能使用TCP协议访问6379端口 - protocol: TCP port: 6379 示意图如下所示。 图2 namespaceSelector
  • 在控制台创建网络策略 登录CCE控制台,单击集群名称进入集群。 在左侧导航栏中选择“策略”,在右侧选择“网络策略”页签,单击右上角“创建网络策略”。 策略名称:自定义输入NetworkPolicy名称。 命名空间:选择网络策略所在命名空间。 选择器:输入标签选择要关联的Pod,然后单击添加。您也可以单击“引用负载标签”直接引用已有负载的标签。 入方向规则:单击添加入方向规则,参数设置请参见表1。 表1 添加入方向规则 参数 参数说明 协议端口 请选择对应的协议类型和端口,目前支持TCP和UDP协议。 源对象命名空间 选择允许哪个命名空间的对象访问。不填写表示和当前策略属于同一命名空间。 源对象Pod标签 允许带有这个标签的Pod访问,不填写表示命名空间下全部Pod。 设置完成后,单击“确定”。
  • 配置镜像拉取策略 创建工作负载会从镜像仓库拉取容器镜像到节点上,当前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的镜像,不会重新拉取。 父主题: 容器设置
  • 约束与限制 支持设置超时时间的场景如下: 超时时间类型 支持的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及以上版本 其他更高版本集群 请求超时时间 独享型 响应超时时间 独享型 空闲超时时间 共享型 v1.23集群:v1.23.13-r0及以上版本 v1.25集群:v1.25.8-r0及以上版本 v1.27集群:v1.27.5-r0及以上版本 v1.28集群:v1.28.3-r0及以上版本 其他更高版本的集群 请求超时时间 共享型 响应超时时间 共享型 更新Ingress时,如果删除超时时间配置,不会修改已有监听器的超时时间配置。
  • 通过控制台创建 登录CCE控制台,单击集群名称进入集群。 在左侧导航栏中选择“服务”,切换至“路由”页签,在右上角单击“创建路由”。 设置Ingress参数。本示例中仅列举必选参数,其余参数可根据需求参考通过控制台创建ELB Ingress进行设置。 名称:自定义服务名称,可与工作负载名称保持一致。 负载均衡器:选择弹性负载均衡的类型、创建方式。 类型:可选择“共享型”或“独享型”。 创建方式:本文中以选择已有ELB为例进行说明,关于自动创建的配置参数请参见负载均衡器。 监听器配置: 前端协议:支持HTTP和HTTPS。本文以HTTP协议为例。 对外端口:开放在负载均衡服务地址的端口,可任意指定。 高级配置: 配置 说明 空闲超时时间 客户端连接空闲超时时间。在超过空闲超时时间一直没有请求, 负载均衡会暂时中断当前连接,直到下一次请求时重新建立新的连接。 请求超时时间 等待客户端请求超时时间。包括两种情况: 读取整个客户端请求头的超时时长,如果客户端未在超时时长内发送完整个请求头,则请求将被中断。 两个连续body体的数据包到达LB的时间间隔,超出请求超时时间将会断开连接。 响应超时时间 等待后端服务器响应超时时间。请求转发后端服务器后,在等待超过响应超时时间没有响应,负载均衡将终止等待,并返回 HTTP504错误码。 图1 配置超时时间 转发策略配置:填写 域名 匹配规则及需要访问的目标Service。请求的访问地址与转发规则匹配时(转发规则由域名、URL组成,例如:10.117.117.117:80/helloworld),此请求将被转发到对应的目标Service处理。 单击“确定”,创建Ingress。
  • Service Service是用来解决Pod访问问题的。每个Service有一个固定IP地址,Service将访问流量转发给Pod,而且Service可以给这些Pod做负载均衡。 图1 通过Service访问Pod 根据创建Service的类型不同,可分成如下模式: ClusterIP:用于在集群内部互相访问的场景,通过ClusterIP访问Service。 NodePort:用于从集群外部访问的场景,通过节点上的端口访问Service。 LoadBalancer:用于从集群外部访问的场景,其实是NodePort的扩展,通过一个特定的LoadBalancer访问Service,这个LoadBalancer将请求转发到节点的NodePort,而外部只需要访问LoadBalancer。 DNAT:用于从集群外部访问的场景,为集群节点提供 网络地址转换 服务,使多个节点可以共享使用弹性IP。 Service的详细介绍请参见服务概述。
  • 网络访问场景 工作负载网络访问可以分为如下几种场景。 从集群内部访问工作负载:创建ClusterIP类型的Service,通过Service访问工作负载。 从集群外部访问工作负载:从集群外部访问工作负载推荐使用Service(NodePort类型或LoadBalancer类型)或Ingress访问。 通过公网访问工作负载:需要节点或LoadBalancer绑定公网IP。 通过内网访问工作负载:通过节点或LoadBalancer的内网IP即可访问工作负载。如果跨VPC需要通过对等连接等手段打通不同VPC网络。 工作负载访问外部网络: 工作负载访问内网:负载访问内网地址,在不同容器网络模型下有不同的表现,需要注意在对端安全组放通容器网段,具体请参见容器如何访问VPC内部网络。 工作负载访问公网:访问公网有几种方法可以实现,一是让容器所在节点绑定公网IP(容器网络模型为VPC网络或容器隧道网络),或给Pod IP绑定公网IP(云原生2.0网络),另一个是通过NAT网关配置SNAT规则,具体请参见从容器访问公网。 图3 网络访问示意图
  • 集群网络构成 集群中节点都位于VPC中,节点使用VPC的网络,容器的网络是使用专门的网络插件来管理。 节点网络 节点网络为集群内主机(节点,图中的Node)分配IP地址,您需要选择VPC中的子网用于CCE集群的节点网络。子网的可用IP数量决定了集群中可以创建节点数量的上限(包括Master节点和Node节点),集群中可创建节点数量还受容器网络的影响,在容器网络模型中会进一步说明。 容器网络 为集群内容器分配IP地址。CCE继承Kubernetes的IP-Per-Pod-Per-Network的容器网络模型,即每个Pod在每个网络平面下都拥有一个独立的IP地址,Pod内所有容器共享同一个网络命名空间,集群内所有Pod都在一个直接连通的扁平网络中,无需NAT可直接通过Pod的IP地址访问。Kubernetes只提供了如何为Pod提供网络的机制,并不直接负责配置Pod网络;Pod网络的具体配置操作交由具体的容器网络插件实现。容器网络插件负责为Pod配置网络并管理容器IP地址。 当前CCE支持如下容器网络模型。 容器隧道网络:容器隧道网络在节点网络基础上通过隧道封装构建的独立于节点网络平面的容器网络平面,CCE集群容器隧道网络使用的封装协议为VXLAN,后端虚拟交换机采用的是openvswitch,VXLAN是将以太网报文封装成UDP报文进行隧道传输。 VPC网络:VPC网络采用VPC路由方式与底层网络深度整合,适用于高性能场景,节点数量受限于 虚拟私有云VPC 的路由配额。每个节点将会被分配固定大小的IP地址段。VPC网络由于没有隧道封装的消耗,容器网络性能相对于容器隧道网络有一定优势。VPC网络集群由于VPC路由中配置有容器网段与节点IP的路由,可以支持集群外直接访问容器实例等特殊场景。 云原生2.0网络:云原生网络2.0是自研的新一代容器网络模型,深度整合了虚拟私有云VPC的弹性网卡(Elastic Network Interface,简称ENI)和辅助弹性网卡(Sub Network Interface,简称Sub-ENI)的能力,直接从VPC网段内分配容器IP地址,支持ELB直通容器,绑定安全组,绑定弹性公网IP,享有高性能。 不同容器网络模型,容器网络的性能、组网规模、适用场景各不相同,在容器网络模型对比章节,将会详细介绍不同容器网络模型的功能特性,了解这些有助于您选择容器网络模型。 服务网络 服务(Service)是Kubernetes内的概念,每个Service都有一个固定的IP地址,在CCE上创建集群时,可以指定Service的地址段(即服务网段)。服务网段不能和节点网段、容器网段重叠。服务网段只在集群内使用,不能在集群外使用。
  • 资源消耗Top统计 在资源消耗Top统计中,CCE服务会将CPU使用率和内存使用率排名前五的无状态负载、有状态负载和Pod纳入统计范围,以帮助您识别资源消耗“大户”。如果您需要查看全部数据,可前往工作负载或Pod页面。 图2 资源消耗Top统计 监控名词解释: CPU使用率 工作负载CPU使用率 = 工作负载各个Pod中CPU使用率的平均值 Pod CPU使用率 = Pod实际使用的CPU核数 / 业务容器CPU核数限制值之和 内存使用率 工作负载内存使用率 = 工作负载各个Pod中内存使用率的平均值 Pod内存使用率 = Pod实际使用的物理内存 / 业务容器物理内存限制值之和
  • 通过控制台创建 登录CCE控制台,单击集群名称进入集群。 在左侧导航栏中选择“服务”,在右上角单击“创建服务”。 设置Service参数。本示例中仅列举使用TLS的必选参数,其余参数可根据需求参考创建LoadBalancer类型Service进行设置。 Service名称:自定义服务名称,可与工作负载名称保持一致。 访问类型:选择“负载均衡”。 选择器:添加标签,Service根据标签选择Pod,填写后单击“确认添加”。也可以引用已有工作负载的标签,单击“引用负载标签”,在弹出的窗口中选择负载,然后单击“确定”。 负载均衡器:选择弹性负载均衡的类型、创建方式。 类型:本例中仅支持选择“独享型”,且需选择“网络型(TCP/UDP/TLS)”或“网络型(TCP/UDP/TLS)&应用型(HTTP/HTTPS)”,否则监听器端口将无法启用TLS。 创建方式:本文中以选择已有ELB为例进行说明,关于自动创建的配置参数请参见表1。 端口配置: 协议:请选择TCP协议,选择UDP协议将无法使用TLS。 服务端口:Service使用的端口,端口范围为1-65535。 容器端口:工作负载程序实际监听的端口,需用户确定。例如nginx默认使用80端口。 监听器前端协议:本例中Service需选择TLS协议。当选择独享型负载均衡器类型时,需包含“网络型(TCP/UDP/TLS)”方可支持配置TLS协议。 监听器配置: SSL解析方式:当监听器端口启用HTTPS/TLS时可选择SSL解析方式。 单向认证:仅进行服务器端认证。如需认证客户端身份,请选择双向认证。 双向认证:双向认证需要负载均衡实例与访问用户互相提供身份认证,从而允许通过认证的用户访问负载均衡实例,后端服务器无需额外配置双向认证。 CA证书:SSL解析方式选择“双向认证”时需要添加CA证书,用于认证客户端身份。CA证书又称客户端CA公钥证书,用于验证客户端证书的签发者;在开启双向认证功能时,只有当客户端能够出具指定CA签发的证书时,连接才能成功。 服务器证书:选择一个服务器证书。如果当前无可选证书,需前往弹性负载均衡控制台进行创建,详情请参见创建证书。 ProxyProtocol:支持通过ProxyProtocol协议携带客户端真实IP到后端服务器。 请确保后端服务器具有解析ProxyProtocol协议的能力,否则可能导致业务中断,请谨慎开启。 后端协议:当监听器端口启用TLS时,支持使用TCP或TLS协议对接后端服务,默认为TCP。 图1 配置TLS 单击“确定”,创建Service。
  • 约束与限制 支持多个PV挂载同一个SFS或SFS Turbo,但有如下限制: 多个不同的PVC/PV使用同一个底层SFS或SFS Turbo卷时,如果挂载至同一Pod使用,会因为PV的volumeHandle参数值相同导致无法为Pod挂载所有PVC,出现Pod无法启动的问题,请避免该使用场景。 PV中persistentVolumeReclaimPolicy参数建议设置为Retain,否则可能存在一个PV删除时级联删除底层卷,其他关联这个底层卷的PV会由于底层存储被删除导致使用出现异常。 重复用底层存储时,建议在应用层做好多读多写的隔离保护,防止产生的数据覆盖和丢失。 对SFS Turbo类型的存储来说,删除集群或删除PVC时不会回收包周期的SFS Turbo资源,您需要在SFS Turbo控制台中自行回收。
  • 验证数据持久化及共享性 查看部署的应用及文件。 执行以下命令,查看已创建的Pod。 kubectl get pod | grep web-demo 预期输出如下: web-demo-846b489584-mjhm9 1/1 Running 0 46s web-demo-846b489584-wvv5s 1/1 Running 0 46s 依次执行以下命令,查看Pod的/data路径下的文件。 kubectl exec web-demo-846b489584-mjhm9 -- ls /data kubectl exec web-demo-846b489584-wvv5s -- ls /data 两个Pod均无返回结果,说明/data路径下无文件。 执行以下命令,在/data路径下创建static文件。 kubectl exec web-demo-846b489584-mjhm9 -- touch /data/static 执行以下命令,查看/data路径下的文件。 kubectl exec web-demo-846b489584-mjhm9 -- ls /data 预期输出如下: static 验证数据持久化 执行以下命令,删除名称为web-demo-846b489584-mjhm9的Pod。 kubectl delete pod web-demo-846b489584-mjhm9 预期输出如下: pod "web-demo-846b489584-mjhm9" deleted 删除后,Deployment控制器会自动重新创建一个副本。 执行以下命令,查看已创建的Pod。 kubectl get pod | grep web-demo 预期输出如下,web-demo-846b489584-d4d4j为新建的Pod: web-demo-846b489584-d4d4j 1/1 Running 0 110s web-demo-846b489584-wvv5s 1/1 Running 0 7m50s 执行以下命令,验证新建的Pod中/data路径下的文件是否更改。 kubectl exec web-demo-846b489584-d4d4j -- ls /data 预期输出如下: static static文件仍然存在,则说明数据可持久化保存。 验证数据共享性 执行以下命令,查看已创建的Pod。 kubectl get pod | grep web-demo 预期输出如下: web-demo-846b489584-d4d4j 1/1 Running 0 7m web-demo-846b489584-wvv5s 1/1 Running 0 13m 执行以下命令,在任意一个Pod的/data路径下创建share文件。本例中选择名为web-demo-846b489584-d4d4j的Pod。 kubectl exec web-demo-846b489584-d4d4j -- touch /data/share 并查看该Pod中/data路径下的文件。 kubectl exec web-demo-846b489584-d4d4j -- ls /data 预期输出如下: share static 由于写入share文件的操作未在名为web-demo-846b489584-wvv5s的Pod中执行,在该Pod中查看/data路径下是否存在文件以验证数据共享性。 kubectl exec web-demo-846b489584-wvv5s -- ls /data 预期输出如下: share static 如果在任意一个Pod中的/data路径下创建文件,其他Pod下的/data路径下均存在此文件,则说明两个Pod共享一个存储卷。
  • 优势 监控中心深度整合云原生基金会(CNCF)的监控项目Prometheus。对关键指标、事件等运维数据进行统一采集、存储和可视化展现,精心打造云原生应用的良好可观测性能力。 将云原生基础设施监控和应用负载监控进行关联,提供全栈监控,使用户能够随时随地清晰地感知基础设施和应用负载状态。 能够对Kubernetes集群、节点、容器组(Pod)等进行详细监控,对业务提供端到端追踪和可视化,提供集群健康诊断能力,大大缩短问题分析定位时间。 提供开箱即用的插件安装、数据采集、云原生监控能力,相比基于开源组件构建的监控能力,在可靠性、高可用、安装部署便捷性上更具有竞争力,能够更好地为您的云原生应用保驾护航。 提供了轻量化的指标采集插件,和社区Prometheus相比,资源使用量大大降低,部署模式方便快捷。
  • 监控中心架构 图1 监控中心架构 云原生监控插件将在CCE集群中采集exporter暴露的指标,通过Prometheus RemoteWrite的方式,将数据写入至 AOM 实例。 监控中心将基于AOM实例中存储的指标,提供多维度数据洞察、仪表盘的功能。 云原生监控插件也提供了基于RemoteWrite对接三方云原生监控平台的能力,将集群内的监控指标通过Bearer Token认证鉴权的方式上报三方监控平台。
  • Prometheus监控 Prometheus已经成为了当前云原生可观测性的最常见工具,其强大的监控能力和活跃的社区生态,使其成功CNCF最活跃的托管项目之一。当前CCE插件市场提供了云原生监控插件用于Kubernetes集群的监控。 云原生监控插件具有轻量级Agent模式和兼容开源社区原生的Server模式可供选择。Agent模式提供了轻量级的指标采集器,用于监控指标的采集。Server模式下提供了基于thanos的高可用部署模式,保证Prometheus能够在单点故障的场景下正常运行。 华为云AOM云服务基于Prometheus监控生态,提供了托管式的Prometheus实例 for CCE,适合需要对容器服务集群及其上面运行的应用进行一体化监控场景。AOM实例默认提供对容器服务CCE集群的云原生监控插件的集成,监控中心开通后,指标将自动上报指标到指定的AOM实例。详情请参见Prometheus监控。
  • 使用云原生日志采集插件采集日志 启用云原生日志采集插件日志采集功能 在集群创建时启用云原生日志采集插件日志采集 登录云容器引擎(CCE)控制台。 在控制台上方导航栏,单击“购买集群”。 在“插件选择”页面中,选择“云原生日志采集插件”。 单击右下角“下一步:插件配置”,根据需求勾选以下配置。 容器日志:开启后,将创建名为default-stdout的日志策略,并上报所有命名空间下的标准输出到 云日志 服务(LTS)。 Kubernetes事件:开启后,将创建名为default-event的日志策略,并上报所有命名空间下的Kubernetes事件到云日志服务(LTS)。 配置完成后,单击右下角“下一步:确认配置”,在弹出的窗口中单击“确定”,完成创建。 为已有集群启用CCE 云原生日志采集插件日志采集 登录云容器引擎(CCE)控制台,单击集群名称进入集群,选择左侧导航栏的“日志中心”。 未进行授权的用户需要先授权,已授权的用户直接跳转下一步。 在弹出框中单击“确认授权”。 图1 添加授权 页面单击“一键开启”,等待约30秒后,页面自动跳转。 图2 一键开启 采集容器标准输出:开启后,将创建名为default-stdout的日志策略,并上报所有命名空间下的标准输出到云日志服务(LTS)。 采集Kubernetes事件:开启后,将创建名为default-event的日志策略,并上报所有命名空间下的Kubernetes事件到云日志服务(LTS)。 查看并配置日志采集策略。 登录云容器引擎(CCE)控制台,单击集群名称进入集群,选择左侧导航栏的“日志中心”。 右上角单击“日志采集策略”,将显示当前集群所有上报LTS的日志策略。 图3 查看日志策略 若启用日志采集功能时勾选了采集容器标准输出和采集Kubernetes事件,将创建两个日志策略,并对接默认的LTS日志组、日志流。 default-stdout 采集标准输出。默认日志组:k8s-logs-{集群ID};默认日志流:stdout-{集群ID} default-event 采集Kubernetes事件。默认日志组:k8s-logs-{集群ID};默认日志流:event-{集群ID} 创建日志策略:单击上方“创建日志策略”,输入要采集的配置信息。 策略模板:若启用日志采集功能时未勾选采集容器标准输出和采集Kubernetes事件,或者删除了对应的日志策略,可通过该方式重新创建默认日志策略。 图4 使用策略模板 自定义策略:用于配置自定义日志策略。 图5 自定义策略 不同日志类型的日志采集策略,建议选择不同的日志流上报日志,避免日志混乱。 容器/节点文件日志路径配置要求如下: 日志目录:请填写绝对路径,如/log。文件路径必须以/ 开头,只能包含大写字母、小写字母、数字或特殊字符-_/*?,且长度不能超过512个字符。 日志文件名:文件名称只能包含大写字母、小写字母、数字或特殊字符-_*?.。且不支持.gz、.tar、.zip后缀类型。 目录名和文件名支持完整名称和通配符模式,最多有三级目录采用通配符匹配,且第一级目录不能使用通配符。通配符只支持星号(*)和半角问号(?)。星号(*)表示匹配多个任意字符。半角问号(?)表示匹配单个任意字符。例如: 日志路径为/var/logs/*,文件名为*.log,表示/var/logs下所有目录中后缀名为.log的文件。 日志路径为 /var/logs/app_*,文件名为*.log,表示/var/logs目录下所有符合app_*格式的目录中后缀名为.log的文件。 表1 自定义策略参数说明 参数 配置说明 日志类型 容器标准输出:用于采集容器标准输出,可以按命名空间、工作负载名称、实例标签配置采集策略。 容器文件日志:用于采集容器内的日志,可以指定工作负载或指定实例标签配置采集策略。 节点文件日志:用于采集节点上的日志文件,一条日志策略只能配置一个文件路径。 日志源 所有容器:可以指定采集某个命名空间的所有容器,如不指定则采集所有命名空间的容器。 指定工作负载:指定采集哪些工作负载容器的日志,可以指定采集工作负载中具体容器的日志,如不指定则采集所有容器的日志。 指定实例标签:根据标签指定采集哪些工作负载容器的日志,可以指定采集工作负载中具体容器的日志,如不指定则采集所有容器的日志。 指定工作负载:指定采集哪些工作负载容器的日志,可以指定采集工作负载中具体容器的日志,如不指定则采集所有容器的日志。 指定实例标签:根据标签指定采集哪些工作负载容器的日志,可以指定采集工作负载中具体容器的日志,如不指定则采集所有容器的日志。 采集容器文件日志时,还需指定容器中的日志路径,详情请参见文件日志路径配置要求。 路径配置:用于配置需要采集的日志路径,详情请参见文件日志路径配置要求。 日志格式 单行文本 每条日志仅包含一行文本,以换行符 \n 作为各条日志的分界线。 多行文本 有些程序打印的日志存在一条完整的日志数据跨占多行(例如 Java 程序日志)情况,日志采集系统默认是按行采集。如果您想在日志采集系统中按整条显示日志,可以开启多行文本,采用首行正则的方式进行匹配,当选择多行文本时,需填写“日志匹配格式”。 例如,假设采集的日志格式如下,每条日志以日期开头但是占据三行,则可在“日志匹配格式”处填写时间的正则匹配,如\d{4}-\d{2}-\d{2} \d{2}\:\d{2}\:\d{2}.* 在采集日志时,以日期开头三行日志会作为一条完整日志。 2022-01-01 00:00:00 Exception in thread "main" java.lang.RuntimeException: Something has gone wrong, aborting! at com.myproject.module.MyProject.badMethod(MyProject.java:22) at com.myproject.module.MyProject.oneMoreMethod(MyProject.java:18) 上报到云日志服务(LTS) 用于配置日志上报的日志组和日志流。 使用默认日志组/日志流:将为您自动选择默认日志组(k8s-log-{集群ID})和默认的日志流(stdout-{集群ID})。 自定义日志组/日志流:可在下拉框选择任意日志组和日志流。 日志组:云日志服务进行日志管理的基本单位。如果您未创建日志组,CCE会提示您进行创建,默认名称为k8s-log-{集群ID},如 k8s-log-bb7eaa87-07dd-11ed-ab6c-0255ac1001b3。 日志流:日志读写的基本单位,日志组中可以创建日志流,将不同类型的日志分类存储,方便对日志进一步分类管理。在安装插件或者根据模板创建日志策略时,会自动创建以下日志流: 容器日志:默认名称为stdout-{集群ID},如 stdout-bb7eaa87-07dd-11ed-ab6c-0255ac1001b3 k8s事件:默认名称为event-{集群ID},如 event-bb7eaa87-07dd-11ed-ab6c-0255ac1001b3 编辑日志策略:单击“编辑”按钮,可对已经存在的日志策略进行修改。 删除日志策略:单击“删除”按钮,可对已经存在的日志策略进行删除。 查看日志。 登录云容器引擎(CCE)控制台,单击集群名称进入集群,选择左侧导航栏的“日志中心”。 日志中心下有5个页签,支持不同类型日志查看。 容器日志:显示默认日志组(k8s-log-{集群ID})下默认日志流(stdout-{集群ID})中的所有日志数据,支持通过工作负载搜索。 图6 容器日志查询 Kubernetes事件:显示默认日志组(k8s-log-{集群ID})下默认日志流(event-{集群ID})中的所有日志数据,用于查询集群产生的Kubernetes事件。 控制面组件日志:显示默认日志组(k8s-log-{集群ID})下默认日志流({组件名}-{集群ID})中的所有日志数据,用于查看集群控制面重要组件的日志信息。 控制面审计日志:显示默认日志组(k8s-log-{集群ID})下默认日志流audit-{集群ID})中的所有日志数据,用于查看集群控制面审计日志信息。 全局日志查询:支持查看所有日志组日志流下的日志信息。可通过选择日志流查看所选日志流中的日志信息,默认会选择集群默认日志组(k8s-log-{集群ID}),可通过单击切换日志组右侧的图标切换其他日志组。 图7 全局日志查询 单击右上角“日志采集策略”,单击“查看日志”,可以直接跳转至对应日志策略的日志列表。 图8 查看日志
共100000条