开始以为只要安装 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 过程记录的更多相关文章

  1. xp硬盘安装Fedora14 过程记录及心得体会(fedora14 live版本680M 和fedora14 DVD版本3.2G的选择)

    这次电脑奔溃了,奇怪的是直接ghost覆盖c盘竟然不中.之前电脑上硬盘安装的fedora14操作系统,也是双系统.不知道是不是这个问题,记得同学说过,在硬盘装fedora之后,要手动修改c盘隐藏的那个 ...

  2. redhat6.0 安装ORACLE11GR2过程记录

    vawaretools安装 我的是8.0vm 1,vm=>install vmtools 2,会在redhat里出现一个虚拟光驱图标. 3,复制里面的文件到root目录下. 4,解压缩文件 ta ...

  3. k8s安装部署过程个人总结及参考文章

    以下是本人安装k8s过程 一.单机配置 1. 环境准备 主机名 IP 配置 master1 192.168.1.181 1C 4G 关闭所有节点的seliux以及firewalld sed -i 's ...

  4. vim安装 YCM 过程记录

    YCM(YouComplateMe) 属于Vim中大神级的插件,提供了类似于巨硬爸爸的VS中的代码补全,但是其安装方式也是比较复杂,因此特意写下一篇记录,记录下我自己如何安装这一插件的过程: 检查自己 ...

  5. 安装 MySQL 过程记录

    最近安装 MySQL 时 遇到了许多问题,记录一下安装过程以及遇到的问题. 第一步:在官网上下载适合自己版本的 MySQL,我选择的是 Windows 64 位免安装版的:    官网地址:https ...

  6. 安装scikit-learn过程记录

    环境:Windows 10 X64企业版. 安装python2.7: 官网下载python-2.7.12.amd64.msi安装文件,过程不赘述.安装完成后在PATH环境变量中加入%PYTHON_HO ...

  7. Linux系统中安装Oracle过程记录

    第一章 安装数据库软件 1.1 修改密码及创建目录和权限 创建oracle用户和组 创建相关目录并赋权 1.2 设置oracle用户环境变量 ORACLE_BASE:产品基目录 ORACLE_HOME ...

  8. CentOS 6.5 安装mysql 过程记录

    下载的时候一定选对应的版本, el6 还是el7 或者其他版本,不然会出现意向不到的惊喜 比如:我刚开始的时候下载的 el7 版本的 mysql , 然后安装的时候 就会出现: libc.so.(GL ...

  9. 虚拟机安装Ubuntu过程记录

    1.WMware中新建虚拟机 2.选择安装程序光盘镜像iso 3.个性化Linux(全名.用户名.密码等) 4.指定虚拟机名称以及安装位置 5.指定虚拟机磁盘容量大小 6.完成虚拟机配置 安装过程.. ...

随机推荐

  1. 1z0-062 题库解析2

    Examine the parameters for a database instance: NAME TYPE VALUE-------------------------------- ---- ...

  2. SparkStreaming-Kafka集成

    SparkStreaming-Kafka集成 参考链接: Spark Streaming + Kafka Integration Guide 文章基本是官方的翻译, 最多再加入了一小部分自己的思考在内 ...

  3. element-ui input 组件 回车事件

    直接在el-input 标签上添加@keyup.enter="funName" 是不起作用的,在组件中使用需要加上.native. <el-input v-model = & ...

  4. 如何编写Robot Framework测试用例2---(测试用例语法1)

    基本语法 测试用例由关键字组成,关键字的来源有三种: 1从测试库引入:2从资源文件引入:3从关键字表中引入(自定义关键字) 下面就是一个典型的测试用例组织形式. 图中有2个测试用例“Valid Log ...

  5. Windows10内嵌Ubuntu子系统初始化设置

    第一次启动 重启ubuntu Since Windows 10 version 1803, closing all WSL terminal windows won't kill background ...

  6. 异数OS 星星之火(一)-- 异数OS-织梦师云 用户使用手册

    . 异数OS 星星之火(一)– 异数OS-织梦师云 用户使用手册 本文来自异数OS社区 github: https://github.com/yds086/HereticOS 异数OS社区QQ群: 6 ...

  7. BigInteger的权限设计

    通过储存菜单权限的一个字段(id自定义也是可以的) 1 将选中菜单树的id转换成字符数组的形式, 进行BigInteger对权限进行2的权的和计算 public static BigInteger s ...

  8. 代码审计之CVE-2017-6920 Drupal远程代码执行漏洞学习

     1.背景介绍: CVE-2017-6920是Drupal Core的YAML解析器处理不当所导致的一个远程代码执行漏洞,影响8.x的Drupal Core. Drupal介绍:Drupal 是一个由 ...

  9. 【java面试】IO流

    一.IO 1.IO概念 ·输入流:把能够读取一个字节序列的对象称为输入流(百度百科) ·输出流:把能够写一个字节序列的对象称为输出流(百度百科) 从定义上看可能会让你感到困惑,这里解释一下:];    ...

  10. 4、python基础语法

    前言:本文主要介绍python的一些基础语法,包括标识符的定义.行和缩进.引号和注释.输入输出.变量的定义. 一.标识符 1.凡是我们自己取的名字,都是标识符. 2.在Python里,标识符由字母.下 ...