华为云用户手册

  • 容忍策略 容忍策略允许调度器将Pod调度至带有对应污点的节点上,需要与节点污点配合使用。每个节点可以添加一个或多个污点,对于未设置节点容忍策略的Pod,调度器会根据集群上的污点效果进行选择性调度,以避免Pod被分配到不合适的节点上。 通过控制台配置容忍策略 登录U CS 控制台。 在创建工作负载时,单击“下一步:调度与差异化”。 添加污点容忍策略。 参数名 参数描述 污点键 节点的污点键。 操作符 Equal:设置此操作符表示准确匹配指定污点键(必填)和污点值的节点。如果不填写污点值,则表示可以与所有污点键相同的污点匹配。 Exists:设置此操作符表示匹配存在指定污点键的节点,此时容忍度不能指定污点值。若不填写污点键则可以容忍全部污点。 污点值 如果操作符的值是 Exists,则value属性可省略。 如果操作符的值是 Equal,则表示其key与value之间的关系是Equal(等于)。 如果不指定操作符属性,则默认值为Equal。 污点策略 全部:表示匹配所有污点效果。 NoSchedule:表示匹配污点效果为NoSchedule的污点。 NoExecute:表示匹配污点效果为NoExecute的污点。 容忍时间窗 即tolerationSeconds参数,当污点策略为NoExecute时支持配置。 在容忍时间窗内,Pod还会在拥有污点的节点上运行,超出时间后会被驱逐。 父主题: 工作负载
  • 为什么需要控制扩缩速率 HPA controller默认的扩缩容总原则是:快速扩容,低速缩容。然而,若仅依靠配置稳定窗口时长,在窗口时长过后即失去了对扩缩容速率的控制能力,无法真正实现对扩缩容速率的精准控制。您可以通过配置负载伸缩策略的YAML文件中spec的behavior结构,来更精准灵活地控制FederatedHPA的自动扩缩速度。该结构支持为每个FederatedHPA策略独立配置扩缩容速率,以及为扩容与缩容配置不同的速率。
  • 编辑CronFederatedHPA策略 登录UCS控制台,在左侧导航栏中选择“容器舰队”。 单击已开通集群联邦的容器舰队名称,进入容器舰队详情页面。 在左侧导航栏选择“负载伸缩”,选择“定时伸缩策略”,在需要编辑的策略所在行右侧单击“编辑”,在策略详情页面可以删除或添加策略规则。 如需删除策略规则,在规则后单击“删除”即可。 如需添加规则,单击策略配置下的“添加规则”,在弹窗内填写相关参数,然后单击“确定”。详细的参数说明请参见表3。 修改完成后,单击“确定”。
  • 创建CronFederatedHPA策略 控制台创建 登录UCS控制台,在左侧导航栏中选择“容器舰队”。 单击已开通集群联邦的容器舰队名称,进入容器舰队详情页面。 在左侧导航栏选择“负载伸缩”,选择“定时伸缩策略”,并单击右上角“创建定时伸缩策略”。 参考表1配置CronFederatedHPA策略。 表1 基础配置参数说明 参数 参数说明 策略名称 CronFederatedHPA策略的名称。 命名空间 需要设置自动扩缩的工作负载所在命名空间的名称。 作用对象 可选择作用于工作负载或指标伸缩策略。 工作负载:选择需要应用该策略的工作负载,也可新建工作负载,新建的具体操作请参见创建工作负载。 指标伸缩策略:选择已创建的指标伸缩策略,也可单击右侧新建,新建的具体操作请参见创建FederatedHPA策略。 单击策略配置下的“添加规则”,参考表2配置策略规则。 表2 CronFederatedHPA策略规则配置 参数 参数说明 规则名称 CronFederatedHPA策略的名称。 目标副本数 CronFederatedHPA策略的目标Pod数。 触发时间 可选择每小时、每天、每周、每月、每年,或选择Cron表达式自行配置触发时间。 每小时:在每小时的第几分钟执行一次。例如选择“5”,策略将会在每小时的第5分钟执行一次。 每天:在每天具体的某一个时间执行一次,可具体到分钟。设置完成后,策略将会在每天的该时点执行。 每周:在每周具体的某一天内的某一时间执行一次,可具体到分钟。设置完成后,策略将会在每周的该天该时点执行。 每月:在每月具体的某一天内的某一时间执行一次,可具体到分钟。设置完成后,策略将会在每月的该天该时点执行。 每年:在每年具体的某月某天内的某一时间执行一次,可具体到分钟。设置完成后,策略将会在每年的该天该时点执行。 Cron表达式: Cron表达式遵循以下语法规则: ┌───────────── 分钟(0-59) │ ┌─────────── 小时(0-23) │ │ ┌────────── 月的某天(1-31) │ │ │ ┌──────── 月份(1-12) │ │ │ │ ┌─────── 周的某天(0-6) │ │ │ │ │ │ │ │ │ │ * * * * * 例如:0 0 13 * 5 表示此任务必须在每个星期五的午夜以及每个月的 13 日的午夜开始。 时区 可选择上海时区或新加坡时区。 设置完成后,单击“确定”,然后单击“创建”,即可跳转定时伸缩策略列表查看策略详情,完成CronFederatedHPA策略创建。 命令行创建 使用kubectl连接集群联邦,详细操作请参见使用kubectl连接集群联邦。 使用如下命令创建并编辑cfhpa.yaml文件。 vi cfhpa.yaml 文件内容定义如下所示,参数定义请参见表3。本示例中构建的CronFederatedHPA策略名称为cron-federated-hpa,直接作用于名称为test的工作负载,内含两条定时规则(名称为“Scale-Up”和“Scale-Down”)。其中,Scale-Up规则为每天8:30的目标Pod数为10,Scale-Down规则为每天21:00的目标Pod数为5。 apiVersion: autoscaling.karmada.io/v1alpha1 kind: CronFederatedHPA metadata: name: cron-federated-hpa # CronFederatedHPA策略名称 spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment # 可选择Deployment或FederatedHPA name: test # 工作负载或FederatedHPA的名称 rules: - name: "Scale-Up" # 规则名称 schedule: 30 08 * * * # 触发时间 targetReplicas: 10 # 目标Pod数,非负整数 timeZone: Asia/Shanghai # 时区 - name: "Scale-Down" # 规则名称 schedule: 0 21 * * * # 触发时间 targetReplicas: 5 # 目标Pod数,非负整数 timeZone: Asia/Shanghai # 时区 表3 关键参数说明 参数 是否必填 参数类型 描述 kind 是 String 可选择Deployment或FederatedHPA。 单独使用CronFederatedHPA策略:Deployment 同时使用FederatedHPA与CronFederatedHPA策略:FederatedHPA name 是 String CronFederatedHPA策略中定义的规则名称,长度为1~32字符。 schedule 是 String 策略触发时间,以Cron表达式呈现,具体遵循以下语法规则: ┌───────────── 分钟(0-59) │ ┌─────────── 小时(0-23) │ │ ┌────────── 月的某天(1-31) │ │ │ ┌──────── 月份(1-12) │ │ │ │ ┌─────── 周的某天(0-6) │ │ │ │ │ │ │ │ │ │ * * * * * 例如:0 0 13 * 5 表示此任务必须在每个星期五的午夜以及每个月的 13 日的午夜开始。 targetReplicas 是 String CronFederatedHPA策略的目标Pod数。 timeZone 是 String 时区,可选择上海时区或新加坡时区。 上海时区:Asia/Shanghai 新加坡时区:Asia/Singapore 执行如下命令创建CronFederatedHPA策略。 kubectl apply -f cfhpa.yaml 回显如下表明创建成功。 CronFederatedHPA.autoscaling.karmada.io/cron-federated-hpa created 创建完成后,可以执行如下命令观察负载伸缩的运行效果。 检查工作负载的当前Pod数:kubectl get deployments 查看CronFederatedHPA策略事件(仅保留最近三条):kubectl describe cronfederatedhpa cron-federated-hpa 可以执行如下命令管理CronFederatedHPA策略。其中cron-federated-hpa为CronFederatedHPA策略的名称,实际情况中需修改为自己所创建的策略名称。 获取CronFederatedHPA策略:kubectl get cronfederatedhpa cron-federated-hpa 更新CronFederatedHPA策略:kubectl edit cronfederatedhpa cron-federated-hpa 删除CronFederatedHPA策略:kubectl delete cronfederatedhpa cron-federated-hpa
  • 单独使用CronFederatedHPA 当不使用FederatedHPA策略,仅使用CronFederalHPA策略时,CronFederalHPA策略直接作用于工作负载,定时扩缩Pod数量。您可以通过设置CronFederalHPA策略的生效时间与目标Pod数,实现在固定时间段将工作负载自动扩缩至期望数量。 图2 单独使用CronFederatedHPA策略工作原理 具体流程为: 创建CronFederalHPA策略,设置CronFederatedHPA的生效时间与目标Pod数。 生效时间:CronFederalHPA策略会在该生效时间自动触发工作负载扩缩。 目标Pod数:在到达生效时间时,所期望的Pod数。 到达生效时间时,比较工作负载中的现有Pod数与1中设置的目标Pod数:目标Pod数大于现有Pod数时扩容工作负载,目标Pod数小于现有Pod数时缩容工作负载。 现有Pod数:CronFederatedHPA策略生效之前,工作负载中的Pod数量。
  • 选择插件 UCS提供两种插件以采集工作负载相关指标:Kubernetes Metrics Server与kube-prometheus-stack。两种插件适用的集群类型与指标类型不同,请参考表1选择插件进行安装。 表1 插件选择 适用的集群类型 支持的指标类型 插件 注意事项 华为云集群 系统指标 安装Kubernetes Metrics Server或kube-prometheus-stack。 若您选择安装kube-prometheus-stack插件,在安装该插件后,需要将Prometheus注册为Metrics API的服务,具体操作请参见通过Metrics API提供资源指标。 自定义指标 安装kube-prometheus-stack。 安装插件前,请检查您的华为云集群版本,若为v1.19以下,请先升级集群版本。 安装插件时,必须选择Server模式,该模式支持自定义指标。 安装插件后,需要将自定义指标聚合至Kubernetes API Server,具体操作请参见将自定义指标聚合到Kubernetes API Server。 非华为云集群 系统指标 安装Kubernetes Metrics Server。 参见安装插件相关文档。 自定义指标 暂无插件支持。 非华为云集群的自定义指标采集需要自行安装Prometheus Adapter组件并配置自定义指标采集规则,再进行FederatedHPA策略的创建。
  • 安装插件 选择适用的插件后,请结合表1内注意事项,参考相关文档为集群安装插件: 请为需要创建负载伸缩策略的集群联邦下所有集群安装指标采集插件,否则会造成指标采集异常,负载伸缩策略失效。 Kubernetes Metrics Server的安装方法请参见Kubernetes Metrics Server。 kube-prometheus-stack的安装方法请参见kube-prometheus-stack。
  • 如何计算Pod扩缩数量? HPA Controller基于当前指标值和期望指标值来计算扩缩比例,再依据当前Pod数与扩缩比例计算出期望Pod数。当前Pod数与期望Pod数的计算方法如下: 当前Pod数 = 所有集群中状态为Ready的Pod数量 在计算期望Pod数时,HPA Controller会选择最近5分钟内计算所得的Pod数的最大值,以避免之前的自动扩缩操作还未完成,就直接执行新的扩缩的情况。 期望Pod数 = 当前Pod数 * ( 当前指标值 / 期望指标值 ) 例如,当以CPU利用率为扩缩容参考指标时,若当前指标值为100%,期望指标值为50%,那么按照公式计算出的期望Pod数即为当前Pod数的两倍。
  • FederatedHPA工作原理 FederatedHPA的工作原理如图1,实现流程如下: HPA Controller通过API定期查询工作负载的指标数据。 karmada-apiserver收到查询请求,会路由到之前通过 API服务 注册的karmada-metrics-adapter。 karmada-metrics-adapter收到查询请求,会查询并收集集群中工作负载的指标数据。 karmada-metrics-adapter将计算的指标数据返回至HPA Controller。 HPA Controller基于返回的指标数据计算所需的Pod扩缩数量,并保持负载伸缩的稳定性。 图1 FederatedHPA工作原理
  • 如何保证负载伸缩的稳定性? 为了保证负载伸缩的稳定性,HPA controller设置了以下功能: 稳定窗口 在监控到指标数据达到期待值(即满足伸缩标准)时,HPA controller会在所设定的稳定窗口期内持续检测,如果检测结果显示该时间段内的指标数据持续达到期待值,才会进行伸缩。默认扩容稳定窗口时长为0秒,缩容稳定窗口时长为300秒,支持修改。在实际配置过程中,为避免服务抖动,稳定窗口的配置的原则是快速扩容,低速缩容。 容忍度 容忍度 = abs ( 当前指标值 / 期望指标值 -1 ) 其中abs为绝对值。当指标值的变动在设定的容忍度范围之内时,不会触发工作负载的弹性伸缩。UCS负载伸缩策略默认伸缩容忍度为0.1,不支持修改。
  • 如何计算指标数据? 指标数据分为系统指标与自定义指标,计算方法如下: 系统指标 主要包括CPU利用率和内存利用率两个指标,系统指标的查询与监控依赖Metrics API。例如,您希望控制工作负载对CPU资源的利用率在合理水平,可基于CPU利用率指标为其创建FederatedHPA策略。 利用率 = 工作负载Pod的实际资源使用量 / 资源申请量 自定义指标 主要提供Kubernetes Object相关的自定义监控指标,自定义指标的查询与监控依赖Custom Metrics API。例如,您可以基于每秒请求量、每秒写入次数等其他适合工作负载的自定义指标为其创建FederatedHPA策略。
  • CronFederatedHPA策略使用流程 单独使用CronFederatedHPA策略 单独使用CronFederatedHPA策略时,使用流程如图2所示,具体流程如下: 图2 CronFederatedHPA单独使用流程 负载伸缩能力基于部署在多集群上的工作负载,因此在创建负载伸缩策略前,您需要添加集群至容器舰队、为舰队开启集群联邦能力,并创建无状态工作负载。具体操作请参见注册集群、开启集群联邦和创建工作负载。 创建CronFederatedHPA策略,具体操作请参见创建CronFederatedHPA策略以定时扩缩工作负载。 若您需要修改或删除已经创建的策略,具体操作请参见管理CronFederatedHPA策略。 配合使用CronFederatedHPA策略与FederatedHPA策略 配合使用CronFederatedHPA策略与FederatedHPA策略时,使用流程如图3所示,具体流程如下: 图3 CronFederatedHPA与FederatedHPA配合使用流程 负载伸缩能力基于部署在多集群上的工作负载,因此在创建负载伸缩策略前,您需要添加集群至容器舰队、为舰队开启集群联邦能力,并创建无状态工作负载。具体操作请参见注册集群、开启集群联邦和创建工作负载。 为集群安装支持采集指标数据的插件,具体操作请参见安装指标采集插件。 创建FederatedHPA策略,具体操作请参见创建FederatedHPA策略以按指标扩缩工作负载。 创建CronFederatedHPA策略,具体操作请参见创建CronFederatedHPA策略以定时扩缩工作负载。 若您需要修改或删除已经创建的策略,具体操作请参见管理FederatedHPA策略和管理CronFederatedHPA策略。
  • FederatedHPA策略使用流程 FederatedHPA策略的使用流程如图1所示,具体流程如下: 图1 FederatedHPA使用流程 负载伸缩能力基于部署在多集群上的工作负载,因此在创建负载伸缩策略前,您需要添加集群至容器舰队、为舰队开启集群联邦能力,并创建无状态工作负载。具体操作请参见注册集群、开启集群联邦和创建工作负载。 为集群安装支持采集指标数据的插件,具体操作请参见安装指标采集插件。 创建FederatedHPA策略,具体操作请参见创建FederatedHPA策略以按指标扩缩工作负载。 若您需要配置更加精确的工作负载扩缩速率,请参见配置FederatedHPA策略以控制扩缩速率。 若您需要修改或删除已经创建的策略,请参见管理FederatedHPA策略。
  • 为什么需要负载伸缩 由于企业应用流量的不断变化,容器工作负载的资源需求也在不断变化。在部署、管理容器工作负载时,若时刻保持业务高峰期的资源数量,会造成大量的资源浪费;若为工作负载设置资源限制,则达到资源使用上限后可能会造成应用异常。Kubernetes中的HPA(Horizontal Pod Autoscaler)策略可基于监控资源指标变动实现单集群工作负载自动扩缩,暂不适用于多集群工作负载。 UCS为您提供多集群工作负载的自动扩缩能力。UCS负载伸缩能力可基于工作负载的系统指标变动、自定义指标变动或固定的时间周期对工作负载进行自动扩缩,以提升多集群工作负载的可用性和稳定性。
  • UCS负载伸缩的优势 UCS负载伸缩能力的优势主要在于: 多集群:多集群场景下的负载伸缩,可以对集群联邦中的多个集群实行统一的负载伸缩策略。 高可用:在业务高峰期快速扩容以保证工作负载的可用性,在业务平缓期快速缩容以节约资源成本。 多功能:支持基于系统指标变动、自定义指标变动和固定时间周期进行负载伸缩,实现复杂场景下的负载伸缩。 多场景:使用场景广泛,典型的场景包含在线业务弹性、大规模计算训练、深度学习GPU或共享GPU的训练与推理。
  • 负载伸缩实现机制 UCS的负载伸缩能力是由FederatedHPA和CronFederatedHPA两种负载伸缩策略所实现的,如图1所示。 创建FederatedHPA策略,支持基于系统指标与自定义指标对工作负载进行扩缩。指标到达所配置的期望值时,触发工作负载扩缩。 创建CronFederatedHPA策略,支持基于固定时间周期对工作负载进行扩缩。到达所配置的触发时间时,触发工作负载扩缩。 图1 负载伸缩策略机制
  • 设置集群网络类型 需要保证集群的网络类型支持underlay网络,以支持集群间Pod通信。支持underlay网络的集群类型如下: 表2 支持underlay网络的集群类型 集群类型 细分类型 网络类型 是否支持underlay网络 华为云集群/伙伴云集群 CCE集群 容器隧道网络 不支持 VPC网络 支持 CCE Turbo 集群 云原生网络2.0 支持 本地集群 本地集群 同时支持overlay和underlay网络。 默认为overlay网络,要启用underaly网络需要手动配置,underaly网络相关介绍与操作请参见Cilium。 支持 多云集群 多云集群 同时支持overlay和underlay网络。 默认为overlay网络,要启用underaly网络需要手动配置,underaly网络相关介绍与操作请参见Cilium。 支持 附着集群 附着集群 需支持underlay网络 取决于附着集群网络类型
  • 为什么需要MCI 在传统的Kubernetes集群中,每个集群都有其负载均衡器和Ingress,这使得在多个集群之间进行负载均衡和流量路由变得困难。UCS为多集群提供了统一的流量入口MCI(Multi Cluster Ingress),帮助您更加简单高效地跨集群、跨区域进行负载均衡和流量路由,进而提高应用程序的可用性和可靠性。 MCI是一种多集群Ingress资源对象,可以根据指定规则将外部流量路由到多个集群内的Pod。使用MCI,用户可自定义转发规则,完成对访问流量的细粒度划分。图1展示了流量如何从MCI流向集群:从 域名 foo.example.com 流入的流量流向了两个集群中带有标签 app:foo 的 Pod,从域名goo.example.com 流入的流量流向了两个集群中具有标签 app:goo的 Pod。 图1 MCI示意图 具体来说,MCI的优势在于: 多集群负载均衡:MCI为用户提供统一入口,将流量分发到多个Kubernetes集群中,与集群所处位置无关。 流量路由:使用MCI,用户可根据不同条件(URL、HTTP头、源IP等)自定义转发规则,将流量路由到不同集群,实现更灵活的流量控制。 高可用:MCI通过健康检查和流量自动切换,实现多集群、多区域的高可用性。 可扩展性:MCI发现和管理多个Kubernetes集群上的应用程序资源,实现应用程序自动扩展和部署。 安全性:MCI支持TLS安全策略和证书管理,保障应用程序的安全性。
  • MCI的工作原理 MCI的功能主要通过请求转发执行器MCI Controller实现。MCI Controller部署在集群联邦控制面,实时监控资源对象的变化,解析MCI对象定义的规则并负责将请求转发到相应的后端Service。 图2 MCI Controller工作原理 MCI Controller支持在同一个ELB实例(即同一IP)下设置不同域名、端口和转发规则,其工作原理如图2,实现流程如下: 部署人员在集群联邦控制面创建工作负载,并为其配置Service对象。 部署人员在集群联邦控制面创建MCI对象,并在MCI中配置流量访问规则,包括关联的负载均衡器、URL以及访问的后端Service及端口等。 MCI Controller监控到MCI对象发生变化,会根据MCI中定义的规则,在ELB侧重新配置监听器以及后端服务器路由。 当用户进行访问时,流量根据ELB中配置的转发策略被转发到对应的后端Service关联的各个工作负载。
  • 发布舰队应用 本节将指导您通过流水线,结合上述步骤的调测、编排,实现从源码构建到舰队应用发布全流程的自动化体验。 配置流水线、运行参数和产物地址后,单击“运行”,即可执行流水线,实现编译构建和云原生发布。 图1 执行流水线 单击流水线阶段中的“发布”,并单击“任务结果”查看发布单。 图2 查看发布单 发布单展示本次发布的基本信息,包括:工单名称、工单号、发布任务阶段展示。 工单详情页面展示发布过程的详细信息,可以查看当前容器舰队下对应的各集群指定工作负载的运行情况,并且用户可以进行重试、取消等操作。 单击“查看详情”可跳转至工单详情页。 工单详情页可查看应用在舰队内每个集群的发布过程和详细信息,可以查看到当前容器舰队下对应的华为云集群、附着集群及本地集群内工作负载的实例信息、创建时间、k8s事件信息等内容。 图3 工单详情 完成舰队应用发布后,登录UCS控制台,左侧导航栏选择“容器舰队”,单击舰队名称,左侧导航栏选择“工作负载”,查看对应的无状态工作负载是否已发布至对应集群内并正常运行。 父主题: 流水线
  • 步骤二:云专线/VPN接入 提交工单开通 云日志 服务(LTS)的 VPC终端节点 。具体步骤请参见步骤一:云日志服务VPC终端节点授权。 在本地集群详情页,编辑云原生日志采集插件配置。 未安装 云原生日志采集(log-agent)插件时,可在日志中心单击“立即开启”。 已安装 云原生日志采集(log-agent)插件时,可在插件中心编辑对应插件。 选择对应的VPC终端节点。若不存在可用的VPC终端节点,单击“创建终端节点”以创建VPC终端节点。再次提交工单云日志服务(LTS)的VPC终端节点需要经过LTS服务审批,操作方法请参见步骤一:云日志服务VPC终端节点授权。 创建的VPC终端节点需要和本地集群节点在同一个虚拟私有云或建立对等连接。 单击“确定”,完成云专线/VPN接入。
  • log-agent指标说明 log-agent插件的log-operator、fluent-bit和otel-collector组件提供了一系列指标,您可以使用 AOM 或Prometheus来监控这些指标,以便及时了解log-agent插件的运行情况,具体操作可参考使用AOM监控自定义指标或使用Prometheus监控自定义指标。详细的指标如下所述: log-operator组件(仅华为云集群) 端口:8443;地址:/metrics;协议:https 表7 指标 指标名 说明 类型 log_operator_aksk_latest_update_times AK/SK最后更新时间 Gauge log_operator_aksk_update_total AK/SK更新次数 Counter log_operator_send_request_total 发送请求数 Counter log_operator_webhook_listen_status Webhook监听状态 Gauge log_operator_http_request_duration_seconds HTTP请求时延 Histogram log_operator_http_request_total HTTP请求数 Counter log_operator_webhook_request_total Webhook请求数 Counter fluent-bit组件 端口:2020;地址:/api/v1/metrics/prometheus;协议:http 表8 指标 指标名 说明 类型 fluentbit_filter_add_records_total 用于记录在过滤器中添加的记录总数 Counter fluentbit_filter_drop_records_total 用于记录被过滤掉的日志记录数量 Counter fluentbit_input_bytes_total 用于衡量Fluent Bit在处理日志数据时输入的总字节数 Counter fluentbit_input_files_closed_total 用于记录关闭的文件总数 Counter fluentbit_input_files_opened_total 用于监控Fluent Bit的文件输入插件(input plugin)打开的文件数量 Counter fluentbit_input_files_rotated_total 用于记录Fluent Bit输入插件已经轮转的文件总数 Counter fluentbit_input_records_total 用于衡量 Fluent Bit 在输入插件中处理的记录数 Counter fluentbit_output_dropped_records_total 用于记录输出插件丢弃的记录数量 Counter fluentbit_output_errors_total 用于监控 Fluent Bit 的输出错误数量 Counter fluentbit_output_proc_bytes_total 用于监控 Fluent Bit 的输出插件(output plugin)处理的总字节数 Counter fluentbit_output_proc_records_total 用于监控 Fluent Bit 的输出插件处理的记录数 Counter fluentbit_output_retried_records_total 用于衡量 Fluent Bit 在输出数据时重试的次数 Counter fluentbit_output_retries_total 用于衡量 Fluent Bit 在发送数据到输出插件时发生重试的次数 Counter fluentbit_uptime Fluent Bit 运行的时间,通常以秒为单位 Counter fluentbit_build_info 用于显示Fluent Bit的版本和构建信息 Gauge otel-collector组件 端口:8888;地址:/metrics;协议:http 表9 指标 指标名 说明 类型 otelcol_exporter_enqueue_failed_log_records 用于衡量OpenTelemetry Collector在将日志记录发送到下游系统时,由于某些原因无法成功发送的日志记录数量 Counter otelcol_exporter_enqueue_failed_metric_points 用于衡量在将指标数据发送到后端时,由于某些原因导致无法成功发送的指标数据点的数量 Counter otelcol_exporter_enqueue_failed_spans 用于衡量otelcol exporter在将span发送到后端时失败的次数 Counter otelcol_exporter_send_failed_log_records 用于衡量日志记录发送失败的数量 Counter otelcol_exporter_sent_log_records 用于衡量OpenTelemetry Collector(otelcol)发送的日志记录数量 Counter otelcol_process_cpu_seconds 用于度量进程CPU使用时间的指标,它表示进程在特定时间段内使用的CPU时间,单位为秒 Counter otelcol_process_memory_rss 是OpenTelemetry中用于监控进程内存使用情况的一个指标。其中,rss代表Resident Set Size,即进程当前占用的物理内存大小 Gauge otelcol_process_runtime_heap_alloc_bytes 用于监控进程运行时堆内存分配的指标。它表示进程在运行时分配的堆内存的总字节数。 Gauge otelcol_process_runtime_total_alloc_bytes 用于衡量进程在运行时分配的总字节数 Counter otelcol_process_runtime_total_sys_memory_bytes 用于衡量进程在运行时使用的系统内存总量,单位为字节。 Gauge otelcol_process_uptime 指OpenTelemetry收集器进程的运行时间,以秒为单位。 Counter otelcol_receiver_accepted_log_records 用于衡量OpenTelemetry收集器接收并成功处理的日志记录数量 Counter otelcol_receiver_refused_log_records 用于衡量接收器(receiver)拒绝接收的日志记录数量 Counter
  • 本地集群安装云原生日志采集插件 登录UCS控制台,选择容器舰队,单击集群名称进入集群,在左侧导航栏中选择“插件中心”,在右侧找到云原生日志采集插件,单击“安装”。 在安装插件页面,设置“规格配置”。 表3 插件规格配置 参数 参数说明 插件规格 该插件可配置“小规格”、“大规格”或“自定义”规格。 实例数 选择上方插件规格后,显示插件中的实例数。 选择“自定义”规格时,您可根据需求调整插件实例数。 容器 log-agent插件包含以下容器,您可根据需求自定义调整规格: fluent-bit:日志收集器,以DaemonSet形式安装在每个节点。 cop-logs:负责采集侧配置文件生成及更新的组件。 log-operator:负责解析及更新日志规则的组件。 otel-collector:负责集中式日志转发的组件,将fluent-bit收集的日志转发到LTS。 设置插件支持的“参数配置”。 Kubernetes事件上报AOM:采集Kubernetes事件并上报到 应用运维管理 AOM,可在AOM配置事件告警规则。 设置插件实例日志上报的“网络配置”。 公网接入:通过公网Internet接入,要求集群能够访问公网,具有弹性灵活、成本低、易接入的优势。公网接入要求集群能够访问公网,请确保集群已符合此条件,否则会接入失败。 云专线/VPN接入:通过云专线(DC)或 虚拟专用网络 (VPN)服务将云下网络与云上虚拟私有云(VPC)连通,并利用VPC终端节点通过内网与容器智能分析建立连接,具有高速、低时延、安全的优势。详情见本地集群使用云专线/VPN上报日志。 完成以上配置后,单击“安装”。
  • 组件说明 表4 log-agent组件 容器组件 说明 资源类型 fluent-bit 轻量级的日志收集器和转发器,部署在每个节点上采集日志。 DaemonSet cop-logs 负责生成采集文件的软链接,和fluent-bit运行在同一Pod。 DaemonSet log-operator 负责生成内部的配置文件。 Deployment otel-collector 负责收集来自不同应用程序和服务的日志数据,集中后上报至LTS。 Deployment
  • 自定义事件上报AOM log-agent插件会将所有Warning级别事件以及部分Normal级别事件上报到AOM。您也可以根据需求自行设置需要上报的事件,具体方法如下: 在集群上执行以下命令,编辑当前的事件采集配置。 kubectl edit logconfig -n kube-system default-event-aom 根据需要修改事件采集配置。 apiVersion: logging.openvessel.io/v1 kind: LogConfig metadata: annotations: helm.sh/resource-policy: keep name: default-event-aom namespace: kube-system spec: inputDetail: #采集端配置 type: event #采集端类型,请勿修改 event: normalEvents: #Normal级别事件采集配置 enable: true #是否开启Normal级别事件采集 includeNames: #需要采集的事件名,不指定则采集所有事件 - NotTriggerScaleUp includeNames: #不采集的事件名,不指定则采集所有事件 - NotTriggerScaleUp warningEvents: #Warning级别事件采集配置 enable: true #是否开启Warning级别事件采集 includeNames: #需要采集的事件名,不指定则采集所有事件 - NotTriggerScaleUp includeNames: #不采集的事件名,不指定则采集所有事件 - NotTriggerScaleUp outputDetail: type: AOM #输出端类型,请勿修改 AOM: events: - name: DeleteNodeWithNoServer #事件名,必选 nameCn: 废弃节点清理 #事件对应的中文名,不填则上报的事件直接显示英文 resourceType: Namespace #事件对应的资源类型 severity: Major #事件上报到AOM后的事件级别,默认Major。可选值:Critical:紧急;Major:重要;Minor:次要;Info:提示
  • log-agent事件说明 在log-agent插件的安装和运行阶段,log-operator组件会上报事件,您可以根据这些事件来判断安装是否成功,并确定故障原因。具体如表6所示: 表6 log-agent事件说明 事件名称 说明 InitLTSFailed 初始化LTS日志组日志流失败 WatchAKSKFailed 监听AKSK失败 WatchAKSKSuccessful 监听AKSK成功 RequestLTSFailed 请求LTS接口失败 InitLTSSuccessful 初始化LTS日志组日志流成功 CreateWebhookConfigFailed 创建MutatingWebhookConfiguration失败 CreateWebhookConfigSuccessful 创建MutatingWebhookConfiguration成功 StartServerSuccessful 开启监听成功 StartServerFailed 开启监听失败 StartManagerFailed 开启CRD监听失败 InjectAnnotationFailed annotation注入失败 InjectAnnotationSuccessful annotation注入成功 UpdateLogConfigFailed 更新logconfig信息失败 GetConfigListFailed 获取CR列表失败 GenerateConfigFailed 生成fluent-bit、otel配置失败
  • 本地集群安装云原生日志插件前置授权 由于云原生日志插件需要访问LTS和AOM两个云服务,访问云服务需要对云原生日志插件进行鉴权,本地集群云原生日志插件使用工作负载 Identity方式允许集群中的工作负载模拟 IAM 用户来访问云服务。 工作负载 Identity方式是将集群的公钥配置到IAM身份提供商中,并添加 ServiceAccount 与 IAM 账号映射规则。工作负载部署时挂载ServiceAccount对应的Token,使用此Token访问云服务,IAM 使用该公钥验证Token,从而无需直接使用 IAM 账号的 AK/SK 等信息,降低安全风险。 获取本地集群私钥签发的jwks,该公钥用于验证集群签发的 ServiceAccount Token。 使用kubectl连接本地集群。 执行如下命令获取公钥。 kubectl get --raw /openid/v1/jwks 返回结果为一个 json 字符串,是当前集群的签名公钥,用于访问身份供应商。 { "keys": [ { "kty": "RSA", "e": "AQAB", "use": "sig", "kid": "Ew29q....", "alg": "RS256", "n": "peJdm...." } ] } 在 IAM 配置身份供应商,标志当前集群在 IAM 侧的身份。 登录IAM控制台,查询本地集群所在项目的ID,创建身份供应商,协议选择OpenID Connect。指定插件需要配置指定的身份供应商名称,具体请参见表1。用户组的权限配置具体操作请参见用户组策略内容。 表1 log-agent身份供应商配置 插件名称 身份提供商名称 客户端 ID namespace ServiceAccountName 用户组需要开通的最小权限 log-agent ucs-cluster-identity-{项目ID} ucs-cluster-identity monitoring log-agent-serviceaccount aom:alarm:* lts:*:* 图1 修改身份提供商信息 单击“确定”,然后修改身份提供商信息,需要修改的信息如表2所示。随后创建身份转换规则,单击“创建规则”进行创建。 图2 修改身份提供商信息 表2 身份提供商配置参数说明 参数 说明 访问方式 选择“编程访问”。 配置信息 身份供应商 URL:https://kubernetes.default.svc.cluster.local。 客户端 ID:指定插件需要配置指定的客户端ID,请参见表1。 签名公钥:本地集群的 jwks,获取方法请参见1。涉及多个集群时,请用逗号分隔每个集群的keys数组内容。 身份转换规则 身份转换规则的作用将集群内的ServiceAccount和IAM用户组做映射。 属性:sub 条件:any_one_of 值: 值的格式为:system:serviceaccount:Namespace:ServiceAccountName 其中Namespace请修改为需要创建ServiceAccount的命名空间,ServiceAccountName请修改为需要创建的ServiceAccount名称。 例如:值为system:serviceaccount:monitoring:log-agent-serviceaccount,表明在monitoring命名空间下创建一个名为log-agent的ServiceAccount,并映射到对应用户组,后续使用该 ServiceAccount获取的IAM Token就拥有了对应用户组的权限。 说明: 本地集群中的相关插件需要配置指定的 ServiceAccountName 和用户组权限才能正常工作,请参见 表1。 图3 创建身份转换规则 单击“确定”。
  • 权限说明 云原生日志采集插件中的fluent-bit组件会根据用户的采集配置,读取各节点上容器标准输出、容器内文件日志以及节点日志并采集。 fluent-bit组件运行会使用到以下权限: CAP_DAC_OVERRIDE:忽略文件的 DAC 访问限制。 CAP_FOWNER:忽略文件属主 ID 必须和进程用户 ID 相匹配的限制。 DAC_READ_SEARCH:忽略文件读及目录搜索的 DAC 访问限制。 SYS_PTRACE:允许跟踪任何进程。
  • 约束与限制 云原生日志采集插件有如下限制: 仅支持1.21及以上版本集群。 每个集群限制50条日志规则。 不采集.gz、.tar、.zip后缀类型的日志文件。 采集容器文件日志时,若节点存储模式为Device Mapper模式,路径配置必须为节点数据盘挂载路径。 若容器运行时为containerd模式,容器标准输出日志中的多行配置暂不生效。 每个集群限制单行日志采集速率不超过10000条/秒,多行日志不超过2000条/秒。 容器运行时间建议不小于1分钟,防止日志文件删除过快,无法及时采集。
  • Kubernetes事件上报云日志服务(LTS) 集群未安装云原生日志采集插件 安装云原生日志采集插件时,可通过勾选采集Kubernetes事件,创建默认日志采集策略,采集所有事件上报到LTS。安装方法见:收集数据面日志 集群已安装云原生日志采集插件 登录云容器引擎(CCE)控制台,单击集群名称进入集群,选择左侧导航栏的“日志管理”。 右上角单击“日志采集策略”,将显示当前集群所有上报LTS的日志策略。 单击上方“创建日志策略”,输入要采集的配置信息。 策略模板:若安装插件时未勾选采集Kubernetes事件,或者删除了对应的日志策略,可通过该方式重新创建默认事件采集策略。 事件查看:可直接在“日志管理”页面查看,选择日志策略配置的日志流名称,即可查看上报到云日志服务(LTS)的事件。
共100000条