K8s部署kube-state-metrics和cAdvisor

embedded/2025/3/6 9:49:42/

在 Kubernetes (K8s) 上部署 kube-state-metrics 和 cAdvisor,并允许外部访问它们的 metrics 接口,同时配置 RBAC 鉴权,可以按照以下步骤进行。

1. 部署 kube-state-metrics

kube-state-metrics 是一个服务,它监听 Kubernetes API 并生成关于集群状态的 metrics。

1.1 创建 RBAC 资源

首先,创建 kube-state-metrics 所需的 RBAC 资源。

apiVersion: v1
kind: ServiceAccount
metadata:name: kube-state-metricsnamespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: kube-state-metrics
rules:
- apiGroups: [""]resources: ["nodes", "pods", "services", "resourcequotas", "replicationcontrollers", "limitranges", "persistentvolumeclaims", "persistentvolumes", "namespaces", "endpoints"]verbs: ["list", "watch"]
- apiGroups: ["extensions", "apps"]resources: ["daemonsets", "deployments", "replicasets", "statefulsets"]verbs: ["list", "watch"]
- apiGroups: ["batch"]resources: ["cronjobs", "jobs"]verbs: ["list", "watch"]
- apiGroups: ["autoscaling"]resources: ["horizontalpodautoscalers"]verbs: ["list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: kube-state-metrics
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: kube-state-metrics
subjects:
- kind: ServiceAccountname: kube-state-metricsnamespace: kube-system

1.2 部署 kube-state-metrics

接下来,部署 kube-state-metrics。

apiVersion: apps/v1
kind: Deployment
metadata:name: kube-state-metricsnamespace: kube-system
spec:replicas: 1selector:matchLabels:app: kube-state-metricstemplate:metadata:labels:app: kube-state-metricsspec:serviceAccountName: kube-state-metricscontainers:- name: kube-state-metricsimage: k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.4.2ports:- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:name: kube-state-metricsnamespace: kube-systemlabels:app: kube-state-metrics
spec:ports:- port: 8080targetPort: 8080protocol: TCPselector:app: kube-state-metricstype: LoadBalancer

1.3 外部访问

通过 LoadBalancer 类型的 Service,kube-state-metrics 的 metrics 接口可以通过外部 IP 访问。

2. 部署 cAdvisor

cAdvisor 是一个容器资源使用和性能分析工具,通常与 kubelet 集成。你可以通过 kubelet 的 metrics 接口访问 cAdvisor 的数据。

2.1 配置 kubelet 以暴露 cAdvisor metrics

cAdvisor 的 metrics 通常通过 kubelet 的 --cadvisor-port 参数暴露。默认情况下,kubelet 会在 4194 端口暴露 cAdvisor metrics。

确保 kubelet 的配置中包含以下参数:

--cadvisor-port=4194

2.2 创建 Service 以暴露 cAdvisor metrics

创建一个 Service 来暴露 kubelet 的 cAdvisor metrics。

apiVersion: v1
kind: Service
metadata:name: cadvisornamespace: kube-system
spec:ports:- port: 4194targetPort: 4194protocol: TCPselector:k8s-app: kubelettype: LoadBalancer

2.3 外部访问

通过 LoadBalancer 类型的 Service,cAdvisor 的 metrics 接口可以通过外部 IP 访问。

3. 配置 RBAC 鉴权

为了确保只有授权的用户或服务可以访问这些 metrics,你可以配置 RBAC 规则。

3.1 创建 Role 和 RoleBinding

假设你希望允许某个特定的 ServiceAccount 访问 kube-state-metrics 和 cAdvisor 的 metrics。

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:name: metrics-readernamespace: kube-system
rules:
- apiGroups: [""]resources: ["services"]verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: metrics-reader-bindingnamespace: kube-system
roleRef:apiGroup: rbac.authorization.k8s.iokind: Rolename: metrics-reader
subjects:
- kind: ServiceAccountname: <your-service-account>namespace: <your-namespace>

3.2 使用 Token 进行访问

你可以使用 ServiceAccount 的 Token 来访问 metrics 接口。获取 Token 的方式如下:

kubectl -n <your-namespace> get secret $(kubectl -n <your-namespace> get sa <your-service-account> -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode

然后,使用该 Token 访问 metrics 接口:

curl -k -H "Authorization: Bearer <token>" https://<external-ip>:<port>/metrics

4. 总结

通过以上步骤,你可以在 Kubernetes 集群中部署 kube-state-metrics 和 cAdvisor,并通过 LoadBalancer 类型的 Service 暴露它们的 metrics 接口。同时,通过 RBAC 配置,你可以控制哪些用户或服务可以访问这些 metrics。


http://www.ppmy.cn/embedded/170451.html

相关文章

java后端开发day27--常用API(二)正则表达式爬虫

&#xff08;以下内容全部来自上述课程&#xff09; 1.正则表达式&#xff08;regex&#xff09; 可以校验字符串是否满足一定的规则&#xff0c;并用来校验数据格式的合法性。 1.作用 校验字符串是否满足规则在一段文本中查找满足要求的内容 2.内容定义 ps&#xff1a;一…

Kylin麒麟操作系统服务部署 | NFS服务部署

以下所使用的环境为&#xff1a; 虚拟化软件&#xff1a;VMware Workstation 17 Pro 麒麟系统版本&#xff1a;Kylin-Server-V10-SP3-2403-Release-20240426-x86_64 一、 NFS服务概述 NFS&#xff08;Network File System&#xff09;&#xff0c;即网络文件系统。是一种使用于…

VSCode配置优化指南:打造高效开发环境的终极实践

一、为什么需要优化VSCode&#xff1f; 作为一款轻量级但功能强大的编辑器&#xff0c;VSCode的默认配置虽然能满足基本需求&#xff0c;但面对大型项目、多插件协作或复杂开发场景时&#xff0c;性能瓶颈和操作低效问题会逐渐暴露。优化目标包括&#xff1a; 减少内存和CPU占…

MQ保证消息的顺序性

在消息队列&#xff08;MQ&#xff09;中保证消息的顺序性是一个常见的需求&#xff0c;尤其是在需要严格按顺序处理业务逻辑的场景&#xff08;例如&#xff1a;订单创建 → 支付 → 发货&#xff09;。 一、消息顺序性被破坏的原因 生产者异步/并行发送&#xff1a;消息可能…

CSS Selectors

当然&#xff0c;理解纯CSS选择器&#xff08;CSS Selectors&#xff09;对于进行UI自动化测试非常重要。CSS选择器允许您通过元素的属性、层级关系、类名、ID等来精准定位页面上的元素。下面我将详细讲解CSS选择器的常见用法&#xff0c;并结合您的需求提供具体的示例。 1. 基…

AI浪潮下的软件工程师:如何在变革中突破自我,掌握AI技术

AI浪潮下的软件工程师&#xff1a;如何在变革中突破自我&#xff0c;掌握AI技术 引言 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;各行各业都在经历前所未有的变革。软件工程师作为技术领域的核心力量&#xff0c;面临着新的挑战和机遇。本文将探讨在…

Docker01 - docker快速入门

Docker快速入门 文章目录 Docker快速入门一&#xff1a;Docker概述1&#xff1a;虚拟机技术和容器化技术2&#xff1a;Docker名词解释2.1&#xff1a;Docker镜像(images)2.2&#xff1a;Docker容器(containers)2.3&#xff1a;Docker仓库(registry) 3&#xff1a;Docker下载安装…

【LeetCode226】翻转二叉树

题目描述 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 思路与算法 这个问题自然是递归的&#xff0c;因为反转一棵树涉及到反转它的子树。 让 f(node) 是一个函数&#xff0c;用于反转以 node 为根的二叉树。如果 node 有左子树 L…