k8s-mon 部署整理
时间:2021-07-21
本文章向大家介绍k8s-mon 部署整理,主要包括k8s-mon 部署整理使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
k8s-mon是滴滴夜莺监控k8s的组件,原理上和prometheus类似把,都是基于ksm和k8s内置的指标接口来抓取数据的,根据我实际部署情况和github官方文档进行了整理
指标类型 | 采集源 | 应用举例 | 部署方式 |
容器基础指标 | kubelet内置cadvisor | 查看容器cpu,mem等 | deamonset |
k8s资源指标 | kube-stats-metrics(ksm) | 查看pod状态,查看deployment信息 | deployment(依赖ksm) |
k8s服务组件指标 | 各服务组件的metrics接口(多实例自动发现) | 查看请求延迟/QPS等 | deployment集成至ksm |
业务指标(暂不支持) | pod暴露的metrics接口 | 暂时无需采集 |
一、准备工作
1、准备k8s环境,确保每个node节点都部署了夜莺agent
2、创建命名空间
kubectl create ns kube-admin # 创建访问etcd所需secret,在master上执行(不采集etcd则不需要) # 注意如果 不采集etcd,没有创建对应的证书(如k8s使用公有云托管的),默认 deployment中挂载证书那几行是注释掉的,开启etcd采集再打开 # etcd证书信息依据自己环境替换即可 kubectl create secret generic etcd-certs --from-file=/etc/kubernetes/pki/etcd/healthcheck-client.crt --from-file=/etc/kubernetes/pki/etcd/healthcheck-client.key --from-file=/etc/kubernetes/pki/etcd/ca.crt -n kube-admin
3、直接使用阿里公共源的镜像
registry.cn-beijing.aliyuncs.com/n9e/k8s-mon:v1 或者自己下载代码,打镜像 mkdir -pv $GOPATH/github.com/n9e cd $GOPATH/github.com/n9e git clone https://github.com/n9e/k8s-mon
cd k8s-mon && docker build -t k8s-mon:v1 .
# 使用docker 命令,或者ci工具,将镜像同步到仓库中
# 如需修改镜像名字,需要同步修改daemonset 和deployment yaml文件中的image字段
# 镜像需要同步到所有node,最好上传到仓库中
二、修改配置
1、修改对接夜莺nid标签的名字
- 对应配置为配置文件中的
n9e_nid_label_name
- 默认为:
N9E_NID
,与之前k8s-mon采集cadvisor指标要求容器环境变量名一致 - 如需修改则需要改
k8s-config/configMap_deployment.yaml
和k8s-config/configMap_daemonset.yaml
中的n9e_nid_label_name
字段
2、pod yaml文件中传入上述的nid标签,例如:N9E_NID
- 举例:deployment中定义pod的
N9E_NID
label,假设test-server01这个模块对应的服务树节点nid为5 - 后续该pod的容器的基础指标出现在nid=5的节点下: 如 cpu.user
- 后续该pod的k8s的基础指标出现在nid=5的节点下: 如 kube_deployment_status_replicas_available
- 其余自定义标签不采集,如:
region: A
cluster: B
3、修改配置文件
apiVersion: apps/v1 kind: Deployment metadata: name: test-server01-deployment labels: app: test-server01 # 这里表示此deployment的nid为5 N9E_NID: "5" spec: replicas: 1 selector: matchLabels: app: test-server01 template: metadata: labels: app: test-server01 region: A cluster: B # 这里表示此deployment启动的容器nid为5 N9E_NID: "5"
4、服务组件监控需要指定server_side_nid
- 修改
k8s-config/configMap_deployment.yaml
将 server_side_nid: 字段改为指定的服务组件监控叶子节点的nid - 举例:server_side_nid: "6":代表6为k8s集群的服务树叶子节点,k8s控制平面的指标都会上报到这里
5、k8s服务组件指标(master),如果不是部署在pod中,需要指定采集地址
apiserver 、kube-scheduler、coredns、etcd等 k8s-mon默认认这些组件部署在pod中,通过getpod获取地址列表 如果不是部署在pod中,需要指定采集地址(将user_specified设置为true,并指定addr,其余配置保持不变即可),举例如下 apiserver: user_specified: true addrs: - "https://1.1.1.1:6443/metrics" - "https://2.2.2.2:6443/metrics"
三、可以调整的配置(维持默认值可跳过此配置)
1、如果不想采集某类指标可以去掉配置
- 举例:不想采集
apiserver
的指标 - 则去掉/注释掉
k8s-config/configMap_deployment.yaml
中apiserver
段即可 - deployment中需要采集每node的
kube-proxy
和kubelet
(node量大的时候)不需要可以去掉
2、每个node的kube-proxy和kubelet静态分片采集
- 默认采集所有node的指标,在node数量大时会导致性能问题,则需要开启分片采集
- 举例有1万个node需要采集kube-proxy,则部署3个k8s-mon,配置值开启kube-proxy段
- 其中
hash_mod_num
代表总分片数量hash_mod_shard
代表本实例取模后的index(取值范围是0 ~ hash_mod_num-1) - 那么这三个实例则会将1万个node分片采集
# 实例1 kube_proxy: hash_mod_num: 3 hash_mod_shard: 0 # 实例2 kube_proxy: hash_mod_num: 3 hash_mod_shard: 1 # 实例3 kube_proxy: hash_mod_num: 3 hash_mod_shard: 2
3、想给某个采集项指定采集地址
举例:想设置kube-scheduler的采集地址为 https://1.1.1.1:1234/metrics 和 https://2.2.2.2:1234/metrics 则修改k8s-config/configMap_deployment.yaml中 user_specified 和addrs即可 kube_scheduler: user_specified: true addrs: - "https://1.1.1.1:1234/metrics" - "https://2.2.2.2:1234/metrics"
4、如需给采集的指标添加自定义tag
则修改 k8s-config/configMap_deployment.yaml k8s-config/configMap_daemonset.yaml中的append_tags字段即可
append_tags:
key1: value1
key2: value2
5、如需修改采集周期
- 修改
k8s-config/configMap_deployment.yaml
k8s-config/configMap_daemonset.yaml
中的collect_step
字段
7、如需修改某个项目的采集并发
- 修改
k8s-config/configMap_deployment.yaml
中的指定项目的concurrency_limit
字段,默认10
8、如需服务组件采集多实例时的特征标签
- 修改
k8s-config/configMap_deployment.yaml
中的multi_server_instance_unique_label
字段
9、调整日志级别
修改k8s-config/deployment.yaml 中的 spec.containers.command 加上--log.level=debug即可看到debug日志,日志样例如下 单项数据处理耗时 level=debug ts=2021-02-24T15:47:31.810+08:00 caller=kube_controller_manager.go:180 msg=DoCollectSuccessfullyReadyToPush funcName=kube-controller-manager metrics_num=621 time_took_seconds=0.307592776 单项推送耗时 level=debug ts=2021-02-24T15:47:31.863+08:00 caller=push.go:25 msg=PushWorkSuccess funcName=kube-controller-manager url=http://localhost:2080/api/collector/push metricsNum=621 time_took_seconds=0.053355322 获取pod耗时 level=debug ts=2021-02-24T15:50:01.523+08:00 caller=get_pod.go:99 msg=server_pod_ips_result num_kubeSchedulerIps=1 num_kubeControllerIps=1 num_apiServerIps=1 num_coreDnsIps=2 num_kubeProxyIps=2 num_etcdIps=1 time_took_seconds=0.020384107
四、启动服务
1、启动ksm服务(部署在kube-system命名空间中,需要采集才启动)
kubectl apply -f k8s-config/kube-stats-metrics
2、启动k8s-mon的deployment和daemonset(部署在kube-admin命名空间中,按需启动)
kubectl apply -f k8s-config
五、查看日志
查看日志 kubectl logs -l app=k8s-mon-deployment -n kube-admin -f kubectl logs -l app=k8s-mon-daemonset -n kube-admin -f
六、查看指标,导入大盘
即时看图查看指标 # 浏览器访问及时看图path: http://<n9e_addr>/mon/dashboard?nid=<nid> 导入大盘图 # 大盘图在 metrics-detail/夜莺大盘-xxxjson中 # 将三个大盘json文件放到夜莺服务端机器 <n9e_home>/etc/screen 下 # 或者 克隆夜莺3.5+代码,内置大盘图json在 etc/screen 下 # 刷新页面,在对应的节点选择导入内置大盘即可
原文地址:https://www.cnblogs.com/opsdemo/p/15038563.html
- ASP.NET AJAX(1)__Microsoft AJAX LibraryASP.NET AJAX(1)__Microsoft AJAX Library
- 大数据流处理平台的技术选型参考
- PHP预定义变量数组种类概览
- PHP网络技术(二)——模拟网络灌水攻防
- PHP Predefined Interfaces 预定义接口
- 如何在咨询项目开展Inception
- PHP网络技术(三)——CURL实现跨服务取接口功能
- PHP网络技术(四)——Socket简介
- PHP网络技术(五)——cookie及记住用户名功能实现
- 数据优化
- Oracle12.2 多租户环境下的授权管理
- PHP网络技术(六)——session及与cookie的比较
- Shell基本操作与命令
- PHP PDO——单例模式实现数据库操作
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- codeforces 1328D(思维)
- codeforces 1283D(BFS)
- codeforces 1213D2(贪心+思维)
- codeforces 1426E(贪心)
- codeforces 1374E1(贪心+优先队列)
- codeforces 455A(dp)
- codeforces 1296E1(贪心+思维)
- codeforces 1216E1(数学+暴力)
- JDBC基础入门使用
- codeforces 1353E(dp)
- codeforces 1396A(构造)
- codeforces 1335E1+E2(思维)
- JSP开发基础入门学习1
- codeforces 1407C(数学+交互题)
- codeforces 1420C1