k8s 安装 prometheus 过程记录
开始以为只要安装 prometheus-operator 就行了。
git clone https://github.com/coreos/prometheus-operator.git
cd prometheus-operator
sed 's/namespace: default/namespace: monitoring/g' bundle.yaml | kubectl apply -f -
安装后发现只有一个 prometheus-operator pod 。
$ kubectl get pods -n monitoring
NAME READY STATUS RESTARTS AGE
prometheus-operator-99dccdc56-qq5lm 1/1 Running 0 20m
这时才发现真正要安装的是 kube-prometheus 。
git clone https://github.com/coreos/kube-prometheus.git
cd kube-prometheus
kubectl create -f manifests/setup && \
until kubectl get servicemonitors --all-namespaces ; do date; sleep 1; echo ""; done && \
kubectl create -f manifests/
kube-prometheus 中包含了 prometheus 监控所用到的所有组件,当然也包含 prometheus-operator 。
$ kubectl get pods -n monitoring
NAME READY STATUS RESTARTS AGE
alertmanager-main-0 2/2 Running 0 112m
grafana-58dc7468d7-pv256 1/1 Running 0 112m
kube-state-metrics-769f4fd4d5-4hfpk 3/3 Running 0 112m
node-exporter-4grdx 2/2 Running 0 112m
prometheus-adapter-5cd5798d96-6zq6f 1/1 Running 0 112m
prometheus-k8s-0 3/3 Running 1 112m
prometheus-operator-99dccdc56-vqq7m 1/1 Running 0 112m
注:如果在部署过程中出现 ErrImagePull 错误,那是因为下载 docker 镜像超时了,可以登录到对应的 node 手动 pull 镜像。
安装 prometheus 之前,运行 kubectl top 命令会报错 。
$ kubectl top node
Error from server (NotFound): the server could not find the requested resource (get services http:heapster:)
这是由于没有安装 metrics-server ,在 kube-prometheus 的 readme 中有这样一段说明文字:
The kube-prometheus stack includes a resource metrics API server, so the metrics-server addon is not necessary. Ensure the metrics-server addon is disabled on minikube.
从而知道 kube-prometheus 中包含了 resource metrics API server ,所以安装好 kube-prometheus 之后 kubectl top node 也能正常执行了。
kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
k8s-master0 1715m 85% 1001Mi 26%
k8s-master1 347m 17% 972Mi 25%
k8s-master2 286m 14% 1016Mi 26%
k8s-node4 373m 9% 1550Mi 19%
安装好 prometheus 之后通过 kubectl port-forward 命令暴露端口,可以通过浏览器分别访问 Prometheus, Grafana, AlertManager 控制台了,控制台效果见 Kubernetes Monitoring with Prometheus 。
kubectl --namespace monitoring port-forward svc/prometheus-k8s 9090 --address 10.0.1.81
kubectl port-forward $(kubectl get pods --selector=app=grafana -n monitoring --output=jsonpath="{.items..metadata.name}") -n monitoring 3000 --address 10.0.1.81
kubectl port-forward -n monitoring alertmanager-main-0 9093 --address 10.0.1.81
注1:上面的 10.0.1.81 换成你的服务器 IP 地址,如果不指定 --address ,只能通过 localhost 访问。
注2:也可以通过修改 prometheus-service.yaml , grafana-service.yaml , alertmanager-service.yaml 配置文件暴露控制台端口。
到这里只是部署了 metrics api server ,只能获取到 CPU 与内存这2个核心指标,通过下面的命令可以看到这个 api service v1beta1.metrics.k8s.io :
kubectl get apiservices -n monitoring | grep metrics
NAME SERVICE AVAILABLE AGE
v1beta1.metrics.k8s.io monitoring/prometheus-adapter True 27h
通过下面的命令可以向已经部署的 metrics api 发请求。
kubectl get --raw "/apis/metrics.k8s.io/v1beta1" | jq .
接下来需要进一步安装 k8s-prometheus-adapter 以部署 custom metrics api server (walkthrough)。
首先从 github 上签出 k8s-prometheus-adapter 仓库
git clone https://github.com/DirectXMan12/k8s-prometheus-adapter.git
cd k8s-prometheus-adapter
接着创建 CA 证书并将证书用 secret 保存
$ export PURPOSE=serving
$ openssl req -x509 -sha256 -new -nodes -days 365 -newkey rsa:2048 -keyout ${PURPOSE}.key -out ${PURPOSE}.crt -subj "/CN=ca"
$ echo '{"signing":{"default":{"expiry":"43800h","usages":["signing","key encipherment","'${PURPOSE}'"]}}}' > "${PURPOSE}-ca-config.json"
$ kubectl -n monitoring create secret generic cm-adapter-serving-certs --from-file=./serving.crt --from-file=./serving.key
然后进入 deploy 文件夹,用下面的脚本进行部署:
for f in manifests/*.yaml
do
sed -i 's/namespace: custom-metrics/namespace: monitoring/g' $f | kubectl apply -f -
done
该脚本是为了将 namespace 由 custom-metrics 替换为 monitoring ,因为之前部署 prometheus 时用的是 monitoring 命名空间。
部署完成后就可以看到 v1beta1.custom.metrics.k8s.io 这个 custom metrics api 。
$ kubectl get apiservices -n monitoring | grep metrics
v1beta1.custom.metrics.k8s.io monitoring/custom-metrics-apiserver True 12h
v1beta1.metrics.k8s.io monitoring/prometheus-adapter True 43h
用下面的命令请求这个 api :
kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1" | jq .
{
"kind": "APIResourceList",
"apiVersion": "v1",
"groupVersion": "custom.metrics.k8s.io/v1beta1",
"resources": []
}
发现 resources 为空,参考 github 上的 issue Resources list is empty at /apis/custom.metrics.k8s.io/v1beta1/ ,将 k8s-prometheus-adapter/deploy/manifests/custom-metrics-apiserver-deployment.yaml 中的 --prometheus-url=http://prometheus.prom.svc:9090/
改为 --prometheus-url=http://prometheus-k8s.monitoring.svc:9090/
,重新部署后解决。
kubectl apply -f custom-metrics-apiserver-deployment.yaml
后续:排查 Kubernetes HPA 通过 Prometheus 获取不到 http_requests 指标的问题
参考资料
- k8s学习笔记- 部署prometheus
- Facing issues while launching prometheus and the adapter using the walkthrough
- Resources list is empty at /apis/custom.metrics.k8s.io/v1beta1/
k8s 安装 prometheus 过程记录的更多相关文章
- xp硬盘安装Fedora14 过程记录及心得体会(fedora14 live版本680M 和fedora14 DVD版本3.2G的选择)
这次电脑奔溃了,奇怪的是直接ghost覆盖c盘竟然不中.之前电脑上硬盘安装的fedora14操作系统,也是双系统.不知道是不是这个问题,记得同学说过,在硬盘装fedora之后,要手动修改c盘隐藏的那个 ...
- redhat6.0 安装ORACLE11GR2过程记录
vawaretools安装 我的是8.0vm 1,vm=>install vmtools 2,会在redhat里出现一个虚拟光驱图标. 3,复制里面的文件到root目录下. 4,解压缩文件 ta ...
- k8s安装部署过程个人总结及参考文章
以下是本人安装k8s过程 一.单机配置 1. 环境准备 主机名 IP 配置 master1 192.168.1.181 1C 4G 关闭所有节点的seliux以及firewalld sed -i 's ...
- vim安装 YCM 过程记录
YCM(YouComplateMe) 属于Vim中大神级的插件,提供了类似于巨硬爸爸的VS中的代码补全,但是其安装方式也是比较复杂,因此特意写下一篇记录,记录下我自己如何安装这一插件的过程: 检查自己 ...
- 安装 MySQL 过程记录
最近安装 MySQL 时 遇到了许多问题,记录一下安装过程以及遇到的问题. 第一步:在官网上下载适合自己版本的 MySQL,我选择的是 Windows 64 位免安装版的: 官网地址:https ...
- 安装scikit-learn过程记录
环境:Windows 10 X64企业版. 安装python2.7: 官网下载python-2.7.12.amd64.msi安装文件,过程不赘述.安装完成后在PATH环境变量中加入%PYTHON_HO ...
- Linux系统中安装Oracle过程记录
第一章 安装数据库软件 1.1 修改密码及创建目录和权限 创建oracle用户和组 创建相关目录并赋权 1.2 设置oracle用户环境变量 ORACLE_BASE:产品基目录 ORACLE_HOME ...
- CentOS 6.5 安装mysql 过程记录
下载的时候一定选对应的版本, el6 还是el7 或者其他版本,不然会出现意向不到的惊喜 比如:我刚开始的时候下载的 el7 版本的 mysql , 然后安装的时候 就会出现: libc.so.(GL ...
- 虚拟机安装Ubuntu过程记录
1.WMware中新建虚拟机 2.选择安装程序光盘镜像iso 3.个性化Linux(全名.用户名.密码等) 4.指定虚拟机名称以及安装位置 5.指定虚拟机磁盘容量大小 6.完成虚拟机配置 安装过程.. ...
随机推荐
- 6、使用基元类型而不要使用 FCL 类型
基元类型: int string object uint long ulong 等 ; FCL (Framework Class Library ) System.Int32 等. 一些定义在一些语言 ...
- cogs 173. 词链 字典树模板
173. 词链 ★★☆ 输入文件:link.in 输出文件:link.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述]给定一个仅包含小写字母的英文单词表,其中每个 ...
- python中各种文件打开模式
在python中,总的来说有三种大的模式打开文件,分别是:a, w, r 当以a模式打开时,只能写文件,而且是在文件末尾添加内容. 当以a+模式打开时,可以写文件,也可读文件,可是在读文件的时候,会发 ...
- item方法
class Person: def __init__(self, name, age): self.name = name self.age = age def __getitem__(self, i ...
- log4j的xml配置
主要记录下方便下次查找 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:conf ...
- EFK教程(5) - ES集群开启用户认证
基于ES内置及自定义用户实现kibana和filebeat的认证 作者:"发颠的小狼",欢迎转载 目录 ▪ 用途 ▪ 关闭服务 ▪ elasticsearch-修改elastics ...
- 【javaScript】加减乘除的精确计算
在js中使用"+"."-"等符号进行运算会出现很大的误差,所以需要自己创建函数进行精确运算. //说明:javascript的加法结果会有误差,在两个浮点数相加 ...
- 夜晚 暴力 十点钟 jQuery 的 extend 实现 原理
jQuery 的 extend 是怎么实现的 一看代码 喉咙 就不爽 这是 jQuery JavaScript Library v1.6 一看代码 多的 屁股疼 , 排名 前三 的 文章 可以去参考下 ...
- hihoCoder 1387 A Research on "The Hundred Family Surnames"
搬家一个月,庆祝一下 啪啪啪啪啪啪啪啪啪啪❀❀❀❀ 题目传送门 分析: 这什么奇奇怪怪的OJ,以前从来不知道的2333 以前只知道合并两个连通块时,其中一边直径端点为A,B,另一边为C,D D=max ...
- 什么是Druid
一.Druid是什么 Druid 单词来源于西方古罗马的神话人物,中文常常翻译成德鲁伊. 玩过魔兽世界,暗黑破坏神,Dota,炉石传说,Dota自走棋的朋友,对这个词一定不陌生. 本文中所介绍的Dru ...