华为云用户手册

  • 访问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 查看日志
  • 约束与限制 每个集群最多支持创建50条日志规则。 云原生日志采集插件不会采集.gz、.tar、.zip后缀类型的日志文件,且不支持采集日志文件的软链接。 采集容器文件日志时,若节点存储模式为Device Mapper模式,路径配置必须为节点数据盘挂载路径。 若容器运行时为containerd模式,容器标准输出日志中的多行配置暂不生效。(插件1.3.0及以上版本没有该限制) 如果业务容器的数据目录是通过数据卷(Volume)挂载的,插件不支持采集它的父目录,需设置采集目录为完整的数据目录。 当容器存活时间低于1分钟时,日志无法及时采集,可能存在日志丢失的情况。
  • 指标清单 Pod视图使用的指标清单如下: 表4 Pod视图指标清单 指标 指标类型 说明 kube_pod_container_status_running gauge 容器当前是否在运行中的状态 kube_pod_container_info gauge Pod中的容器信息 kube_pod_status_phase gauge Pod当前的阶段 kube_pod_container_status_restarts_total counter 容器重启次数 container_cpu_usage_seconds_total counter 容器CPU累计使用时间 kube_pod_container_resource_requests gauge 容器请求的请求资源数 container_spec_cpu_quota gauge 容器的CPU配额 container_memory_working_set_bytes gauge 容器内存使用量 container_spec_memory_limit_bytes gauge 容器内存限制量 container_cpu_cfs_throttled_periods_total counter 容器限制周期间隔数 container_cpu_cfs_periods_total counter 容器经过强制限制的周期间隔数 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_writes_total counter 容器已完成磁盘写入的累计计数 container_fs_reads_bytes_total counter 容器读取的累计字节数 container_fs_writes_bytes_total counter 容器写入的累计在节数 container_fs_usage_bytes gauge 文件系统上容器已经使用的字节数 container_fs_limit_bytes gauge 文件系统上容器限制的字节数
  • 指标说明 Pod视图暴露的指标包括Pod资源指标、Pod网络指标和Pod磁盘指标,具体说明如下: 图1 Pod资源指标 表1 Pod资源指标说明 指标名称 单位 说明 容器数 个 Pod中的容器总数 运行中容器数 个 Pod中正在运行的容器个数 Pod状态 个 处在不同状态下的Pod个数 容器重启次数 次 容器被重启的次数 CPU使用量 Cores Pod CPU使用量 CPU 有效率&使用率 百分比 有效率:使用量/请求量;使用率:使用量/总量 内存使用量 字节 内存使用量 内存 有效率&使用率 百分比 有效率:使用量/请求量;使用率:使用量/总量 CPU Throttling 百分比 CPU节流周期限制率 图2 Pod网络指标 表2 Pod网络指标说明 指标名称 单位 说明 网络接收速 字节/秒 容器每秒接收的字节数 网络发送速率 字节/秒 容器每秒发送的字节数 接收数据包速率 个/秒 容器每秒接收数据包数 发送数据包速 个/秒 容器每秒发送数据包数 丢包速率(接收) 字节/秒 容器每秒接收的数据丢包数 丢包速率(发送) 字节/秒 容器每秒发送的数据丢包数 图3 Pod磁盘指标 表3 Pod磁盘指标说明 指标名称 单位 说明 Pod容器磁盘读写IO速率(读+写) 次数/秒 Pod磁盘每秒读写IO次数 Pod磁盘读写吞吐量(读+写) 字节/秒 Pod磁盘每秒读写字节数 容器磁盘读写IO速率(读+写) 次数/秒 容器磁盘每秒读写IO次数 容器磁盘读写吞吐量(读+写) 字节/秒 容器磁盘每秒读写字节数 文件系统使用率 百分比 文件系统的使用率 文件系统使用量 字节 文件系统已经使用的字节数
  • 前提条件 使用HPA需要安装能够提供Metrics API的插件,您可根据集群版本和实际需求选择其中之一: Kubernetes Metrics Server:提供基础资源使用指标,例如容器CPU和内存使用率。所有集群版本均可安装。 云原生监控插件:该插件支持v1.17及以后的集群版本。 根据基础资源指标进行弹性伸缩:需将Prometheus注册为Metrics API的服务,详见通过Metrics API提供资源指标。 根据自定义指标进行弹性伸缩:需要将自定义指标聚合到Kubernetes API Server,详情请参见使用自定义指标创建HPA策略。 Prometheus(停止维护):需将Prometheus注册为Metrics API的服务,详见通过Metrics API提供资源指标。该插件仅支持v1.21及之前的集群版本。
  • 使用云原生日志采集插件采集日志 启用云原生日志采集插件日志采集功能 在集群创建时启用云原生日志采集插件日志采集 登录云容器引擎(CCE)控制台。 在控制台上方导航栏,单击“购买集群”。 在“插件选择”页面中,选择“云原生日志采集插件”。 单击右下角“下一步:插件配置”,根据需求勾选以下配置。 容器日志:开启后,将创建名为default-stdout的日志策略,并上报所有命名空间下的标准输出到云日志服务(LTS)。 Kubernetes事件:开启后,将创建名为default-event的日志策略,并上报所有命名空间下的Kubernetes事件到云日志服务(LTS)。 配置完成后,单击右下角“下一步:确认配置”,在弹出的窗口中单击“确定”,完成创建。 为已有集群启用CCE 云原生日志采集插件日志采集 登录云容器引擎(CCE)控制台,单击集群名称进入集群,选择左侧导航栏的“日志中心”。 未进行授权的用户需要先授权,已授权的用户直接跳转下一步。 在弹出框中单击“确认授权”。 页面单击“一键开启”,等待约30秒后,页面自动跳转。 采集容器标准输出:开启后,将创建名为default-stdout的日志策略,并上报所有命名空间下的标准输出到云日志服务(LTS)。 采集Kubernetes事件:开启后,将创建名为default-event的日志策略,并上报所有命名空间下的Kubernetes事件到云日志服务(LTS)。 查看并配置日志采集策略。 登录云容器引擎(CCE)控制台,单击集群名称进入集群,选择左侧导航栏的“日志中心”。 右上角单击“日志采集策略”,将显示当前集群所有上报LTS的日志策略。 图1 查看日志策略 若启用日志采集功能时勾选了采集容器标准输出和采集Kubernetes事件,将创建两个日志策略,并对接默认的LTS日志组、日志流。 default-stdout 采集标准输出。默认日志组:k8s-logs-{集群ID};默认日志流:stdout-{集群ID} default-event 采集Kubernetes事件。默认日志组:k8s-logs-{集群ID};默认日志流:event-{集群ID} 创建日志策略:单击上方“创建日志策略”,输入要采集的配置信息。 策略模板:若启用日志采集功能时未勾选采集容器标准输出和采集Kubernetes事件,或者删除了对应的日志策略,可通过该方式重新创建默认日志策略。 图2 使用策略模板 自定义策略:用于配置自定义日志策略。 图3 自定义策略 表1 自定义策略参数说明 参数 说明 日志类型 指定采集哪类日志。 容器标准输出:用于采集容器标准输出,可以按命名空间、工作负载名称、实例标签配置采集策略。 容器文件路径:用于采集容器内的日志,可以按工作负载和实例标签配置采集策略。 日志源 采集哪些容器的日志。 所有容器:可以指定采集某个命名空间的所有容器,如不指定则采集所有命名空间的容器。 指定工作负载:指定采集哪些工作负载容器的日志,可以指定采集工作负载中具体容器的日志,如不指定则采集所有容器的日志。 指定实例标签:根据标签指定采集哪些工作负载容器的日志,可以指定采集工作负载中具体容器的日志,如不指定则采集所有容器的日志。 路径配置 用于配置需要采集的日志路径。 文件路径必须以/ 开头,只能包含大写字母、小写字母、数字或特殊字符-_/*?,且长度不能超过512个字符。 文件名称只能包含大写字母、小写字母、数字或特殊字符-_*?.。 日志文件夹:请填写绝对路径。日志文件名:不支持.gz、.tar、.zip后缀类型。 最多有三级目录采用通配符匹配,且第一级目录不能使用通配符。 目录名和文件名支持完整名称和通配符模式,通配符只支持星号(*)和半角问号(?)。 星号(*)表示匹配多个任意字符。半角问号(?)表示匹配单个任意字符。例如: 日志路径为/var/logs/* 文件名*.log,表示/var/logs下所有目录中后缀名为.log的文件。 日志路径为 /var/logs/app_* 文件名*.log,表示/var/logs目录下所有符合app_*格式的目录中后缀名为.log的文件。 如果业务容器的数据目录是通过数据卷(Volume)挂载的,插件不支持采集它的父目录,需设置采集目录为完整的数据目录。例如/var/log/service目录是数据卷挂载的路径,则设置采集目录为/var/log或/var/log/*将采集不到该目录下的日志,需设置采集目录为/var/log/service。 日志格式 单行文本 每条日志仅包含一行文本,以换行符 \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。 日志流 日志流(LogStream):日志流是日志读写的基本单位,日志组中可以创建日志流,将不同类型的日志分类存储,方便对日志进一步分类管理。在安装插件或者根据模板创建日志策略时,会自动创建以下日志流: 容器日志:默认名称为stdout-{集群ID},如 stdout-bb7eaa87-07dd-11ed-ab6c-0255ac1001b3 k8s事件:默认名称为event-{集群ID},如 event-bb7eaa87-07dd-11ed-ab6c-0255ac1001b3 编辑日志策略:单击“编辑”按钮,可对已经存在的日志策略进行修改。 删除日志策略:单击“删除”按钮,可对已经存在的日志策略进行删除。 查看日志。 登录云容器引擎(CCE)控制台,单击集群名称进入集群,选择左侧导航栏的“日志中心”。 日志中心下有3个页签,支持不同类型日志查看。 容器日志:显示默认日志组(k8s-log-{集群ID})下默认日志流(stdout-{集群ID})中的所有日志数据,支持通过工作负载搜索。 图4 容器日志查询 Kubernetes事件:显示默认日志组(k8s-log-{集群ID})下默认日志流(event-{集群ID})中的所有日志数据,用于查询集群产生的Kubernetes事件。 全局日志查询:支持查看所有日志组日志流下的日志信息。可通过选择日志流查看所选日志流中的日志信息,默认会选择集群默认日志组(k8s-log-{集群ID}),可通过单击切换日志组右侧的图标切换其他日志组。 图5 全局日志查询 单击右上角“日志采集策略”,单击“查看日志”,可以直接跳转至对应日志策略的日志列表。 图6 查看日志
  • 常见问题处理 插件中除log-operator外组件均未就绪,且出现异常事件“实例挂卷失败”。 解决方案:请查看log-operator日志,安装插件时,其余组件所需的配置文件需要log-operator生成,log-operator生成配置出错,会导致所有组件无法正常启动。 日志信息如下: MountVolume.SetUp failed for volume "otel-collector-config-vol":configmap "log-agent-otel-collector-config" not found log-operator标准输出报错:Failed to create log group, the number of log groups exceeds the quota 示例: 2023/05/05 12:17:20.799 [E] call 3 times failed, resion: create group failed, projectID: xxx, groupName: k8s-log-xxx, err: create groups status code: 400, response: {"error_code":"LTS.0104","error_msg":"Failed to create log group, the number of log groups exceeds the quota"}, url: https://lts.cn-north-4.myhuaweicloud.com/v2/xxx/groups, process will retry after 45s 解决方案:LTS日志组有配额限制,如果出现该报错,请前往LTS下删除部分无用的日志组。限制详情见:日志组。 日志无法上报,otel组件标准输出报错:log's quota has full 解决方案: 云日志服务(LTS)有免费赠送的额度,超出后将收费,报错说明免费额度已用完,如果需要继续使用,请前往云日志服务控制台“配置中心”,打开“超额继续采集日志”开关。 图7 配额设置 采集容器内日志,且采集目录配置了通配符,日志无法采集。 排查方法:请检查工作负载配置中Volume挂载情况,如果业务容器的数据目录是通过数据卷(Volume)挂载的,插件不支持采集它的父目录,需设置采集目录为完整的数据目录。例如/var/log/service目录是数据卷挂载的路径,则设置采集目录为/var/log或/var/log/*将采集不到该目录下的日志,需设置采集目录为/var/log/service。 解决方案:若日志生成目录为/application/logs/{应用名}/*.log,建议工作负载挂载Volume时,直接挂载/application/logs,日志策略中配置采集路径为/application/logs/*/*.log
  • 方法一:配置Pod Annotations监控自定义指标 当Pod的Annotations配置符合Prometheus采集规范的规则后,Prometheus会自动采集这些Pod暴露的指标。 如上所述的nginx:exporter提供的监控数据,其数据格式并不满足Prometheus的要求,需要将其转换成Prometheus需要的格式,可以使用nginx-prometheus-exporter来转换Nginx的指标,将nginx:exporter和nginx-prometheus-exporter部署到同一个Pod,并在部署时添加如下Annotations就可以自动被Prometheus采集监控指标。 kind: Deployment apiVersion: apps/v1 metadata: name: nginx-exporter namespace: default spec: replicas: 1 selector: matchLabels: app: nginx-exporter template: metadata: labels: app: nginx-exporter annotations: prometheus.io/scrape: "true" prometheus.io/port: "9113" prometheus.io/path: "/metrics" prometheus.io/scheme: "http" spec: containers: - name: container-0 image: 'nginx:exporter' # 替换为您上传到SWR的镜像地址 resources: limits: cpu: 250m memory: 512Mi requests: cpu: 250m memory: 512Mi - name: container-1 image: 'nginx/nginx-prometheus-exporter:0.9.0' command: - nginx-prometheus-exporter args: - '-nginx.scrape-uri=http://127.0.0.1:8080/stub_status' imagePullSecrets: - name: default-secret 其中 prometheus.io/scrape:表示是否需要prometheus采集Pod的监控数据,取值为true。 prometheus.io/port:表示采集监控数据接口的端口,由需要采集的应用决定。本示例中采集端口为9113。 prometheus.io/path:表示采集监控数据接口的URL,如不配置则默认为“/metrics”。 prometheus.io/scheme:表示采集的协议,值可以填写http或https。 应用部署成功后,访问云原生监控插件,查询自定义监控指标。 图1 访问云原生监控插件 可以查询到nginx相关的自定义监控指标,通过job名称可以判断出是根据Pod配置上报的。 nginx_connections_accepted{cluster="2048c170-8359-11ee-9527-0255ac1000cf", cluster_category="CCE", cluster_name="cce-test", container="container-0", instance="10.0.0.46:9113", job="monitoring/kubernetes-pods", kubernetes_namespace="default", kubernetes_pod="nginx-exporter-77bf4d4948-zsb59", namespace="default", pod="nginx-exporter-77bf4d4948-zsb59", prometheus="monitoring/server"} 图2 查看监控指标
  • 方法二:配置Service Annotations监控自定义指标 当Service的Annotations配置符合Prometheus采集规范的规则后,Prometheus会自动采集这些Service暴露的指标。 Service Annotations使用方法和Pod Annotations基本相同,主要是采集的指标的适用场景不同,Pod Annotations更关注Pod的资源使用情况,Service Annotations侧重于对该业务的请求等指标。 部署示例应用如下: kind: Deployment apiVersion: apps/v1 metadata: name: nginx-test namespace: default spec: replicas: 1 selector: matchLabels: app: nginx-test template: metadata: labels: app: nginx-test spec: containers: - name: container-0 image: 'nginx:exporter' # 替换为您上传到SWR的镜像地址 resources: limits: cpu: 250m memory: 512Mi requests: cpu: 250m memory: 512Mi - name: container-1 image: 'nginx/nginx-prometheus-exporter:0.9.0' command: - nginx-prometheus-exporter args: - '-nginx.scrape-uri=http://127.0.0.1:8080/stub_status' imagePullSecrets: - name: default-secret 部署示例Service如下: apiVersion: v1 kind: Service metadata: name: nginx-test labels: app: nginx-test namespace: default annotations: prometheus.io/scrape: "true" # 配置为 true 表示开启服务发现 prometheus.io/port: "9113" # 配置为采集指标暴露的端口号 prometheus.io/path: "/metrics" # 填写指标暴露的 URI 路径,一般是 /metrics spec: selector: app: nginx-test externalTrafficPolicy: Cluster ports: - name: cce-service-0 targetPort: 80 nodePort: 0 port: 8080 protocol: TCP - name: cce-service-1 protocol: TCP port: 9113 targetPort: 9113 type: NodePort 查看指标,通过Service名称可以判断出该指标是根据Service配置上报的。 nginx_connections_accepted{app="nginx-test", cluster="2048c170-8359-11ee-9527-0255ac1000cf", cluster_category="CCE", cluster_name="cce-test", instance="10.0.0.38:9113", job="nginx-test", kubernetes_namespace="default", kubernetes_service="nginx-test", namespace="default", pod="nginx-test-78cfb65889-gtv7z", prometheus="monitoring/server", service="nginx-test"} 图3 查看监控指标
共100000条