当然前提环境是你得先有一个Kubernetes集群,版本在v1.21.*~v1.27.*之间,当然我已经准备好了Kubernetes:
可以看到我准备的Kubernetes版本为1.21.14的,符合要求。本篇文章也以这个版本来进行安装,上面提到的版本安装步骤和这个版本大体相同,按照步骤来即可。
因为在Kubernetes上安装Prometheus很麻烦,所以有一些大佬在Github上贡献了一些安装它们的项目,这次我推荐使用的项目是 kube-prometheus
,地址为:https://github.com/prometheus-operator/kube-prometheus,但是你要注意安装 kube-prometheus 的版本,版本的对应列表:
Kubernetes版本 | Kube-prometheus版本 |
---|---|
1.21.* | 0.9.0 |
1.22.* | 0.9.0、0.10.0 |
1.23.* | 0.10.0、0.11.0 |
1.24.* | 0.11.0、0.12.0 |
1.25.* | 0.12.0 |
1.26.* | main |
1.27.* | main |
如图:
要注意最好不要使用main分支的项目,因为还没有正式发版,所以建议使用1.25.*以下的Kubernetes
来到这个网址:https://github.com/prometheus-operator/kube-prometheus/releases,选择对应版本的发行版本进行下载,因为我的Kubernetes安装的是1.21.*,所以我下载的是0.9.0版本:
下载之后如图:
我们先将这个项目给解压:
tar -zxvf kube-prometheus-0.9.0.tar.gz
解压之后如图会出现一个 kube-prometheus-0.9.0
文件夹:
我们先去到 kube-prometheus-0.9.0/manifests
目录当中:
cd kube-prometheus-0.9.0/manifests/
因为有部分镜像是在 k8s.gcr.io
上拉取的,这个镜像是谷歌上的,国内拉取不下来,所以我们要修改一下拉取地址。因为dockerhub上已经有人提供了这个镜像的替代品,所以我们这里可以直接替换
修改 ./kube-state-metrics-deployment.yaml
文件(在kube-prometheus-0.9.0/manifests/kube-state-metrics-deployment.yaml):
vim kube-state-metrics-deployment.yaml
在大概34行这个位置有 k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.1.1
镜像(版本号可能不同,不影响安装):
在dockerhub上查询收藏最多的:
选择相同的版本号(⚠️注意这个版本号没有v前缀):
所以我们将 k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.1.1
改为 docker.io/bitnami/kube-state-metrics:2.1.1
(加上docker.io前缀):
修改 ./prometheus-adapter-deployment.yaml
文件(在kube-prometheus-0.9.0/manifests/prometheus-adapter-deployment.yaml):
vim ./prometheus-adapter-deployment.yaml
在大概34行这个位置有 k8s.gcr.io/prometheus-adapter/prometheus-adapter:v0.9.0
镜像(版本号可能不同,不影响安装):
我们在此来到dockerhub搜索,同样使用这个下载和收藏最多的:
同样注意版本号对应:
所以我们将 k8s.gcr.io/prometheus-adapter/prometheus-adapter:v0.9.0
改为 docker.io/willdockerhub/prometheus-adapter:v0.9.0
(加上docker.io前缀):
因为有一些我们需要外部访问的Service设置的类型是ClusterIP,所以我们要将它改为NodePort或LoadBalancer
这个文件在 kube-prometheus-0.9.0/manifests/alertmanager-service.yaml
,我们直接修改:
vim alertmanager-service.yaml
按照图片提示修改,在 spec
下新增一行 type: NodePort
修改类型为 NodePort
,然后再在 spec.ports
下面新增一行 nodePort: 30093
修改nodePort端口为 30093
这个端口可以自行指定 30000~32767
之间的端口:
修改完成后保存并退出。
这个文件在 kube-prometheus-0.9.0/manifests/grafana-service.yaml
,我们直接修改:
vim grafana-service.yaml
操作步骤一样,这里不再过多赘述,但要注意端口号不要冲突:
这个文件在 kube-prometheus-0.9.0/manifests/prometheus-service.yaml
,我们直接修改:
vim prometheus-service.yaml
操作步骤一样,这里不再过多赘述,但要注意端口号不要冲突:
先来到 kube-prometheus-0.9.0
目录:
然后执行下面几行命令:
kubectl apply --server-side -f manifests/setup
kubectl wait \
--for condition=Established \
--all CustomResourceDefinition \
--namespace=monitoring
kubectl apply -f manifests/
执行结果如图,创建了一堆的资源:
我们使用以下命令查询是否创建成功:
watch kubectl get pod -o wide -n monitoring
当安装完成之后 STATUS
的值都是 Running
,并且 READY
的值也是全部没有问题的:
使用这行命令查看grafana的端口:
kubectl get svc -o wide -n monitoring | grep grafana
可以看到grafana对外部访问的nodePort端口为 30300
,这也是我们之前设置的值:
我们直接通过浏览器访问任何一个节点的IP地址带上这个端口就可以访问到grafana了:
默认的用户名和密码是 admin/admin
,我们可以直接登陆,登陆之后要我们从新设置密码,为你们的admin用户从新设置一个新密码即可:
接下来我们就访问到Grafana的主页了:
按照我的提示点击 Dashboards
-> Manage
:
然后再展开这个Default:
可以看到有很多的 kube-prometheus
已经为我们准备好的Dashboard:
我们选择 Node Exporter/Nodes
的 Dashboard 进去:
这个里面可以看到各个节点的 CPU 和内存信息:
点击 Kubernetes/Networking/Cluster
进去:
可以看到各个命名空间下的网络访问情况;
好的,更多的Dashboard你们可以自己去查看
使用以下命令查看Prometheus的NodePort端口:
kubectl get svc -o wide -n monitoring | grep prometheus-k8s
可以看到Prometheus的NodePort端口是我们自己设置的 30090:
访问进来可以直接到达Prometheus的主页:
然后你可以对Prometheus做一些你想要的操作
我们可以直接通过以下命令查询 alertmanager 的NodePort端口:
kubectl get svc -o wide -n monitoring | grep alertmanager-main
可以看到端口依然是我们之前设置的30093:
同样访问我们任何一个节点的30093端口就能访问到AlertManager的主页:
好了,Kubernetes上搭建Prometheus和Grafana的步骤就已经执行完毕了,祝你们编码开心