欢迎光临散文网 会员登陆 & 注册

如何用helm在k8s上快速部署Prometheus+Grafana

2023-02-21 09:16 作者:bili_39183997178  | 我要投稿

如果监控的是物理机,推荐使用 Zabbix 做监控,Zabbix 在传统的监控系统中,尤其是在服务器监控方面,占据绝对优势。但如果是云环境,非常推荐使用 Prometheus,Prometheus 已经是容器监控方面的标配

文章的内容比较长,请看内容提要:

文章概要

接下来,我们就跟大家一起一步一步的演示,如何部署Prometheus,在安装Prometheus之前,我们要安装helm工具。

一 安装Helm3

Helm 是什么?我们可以将 Helm 看作是 k8s 的 apt-get/yum。Helm 仓库里面只有配置清单文件,并没有镜像,镜像还是由镜像仓库来提供,比如 hub.docker.com、私有仓库等。

对于使用者而言,使用 Helm 的好处是,不需要了解 k8s 的 yaml 应用部署文件了,可以通过 Helm 下载并在 k8s 上安装需要的应用。

Helm 的官方地址:https://helm.sh

1.1 版本选择

选择安装哪个版本的 Helm 呢?当一个 Helm 的新版本发布时,它是针对 Kubernetes 的一个特定的版本编译的。

在 Helm 的官方地址,
https://helm.sh/zh/docs/topics/version_skew/,提供了 k8s 和 Helm 的兼容版本对照表。我仅仅列出了一部分,由于我安装的k8s版本是1.22.6,因此,我选择下载 Helm3.9.x版本。

helm版本兼容性

1.2 安装helm

[bigdata@k8s-master ~]$ cd /opt/module/

# 下载安装包

[bigdata@k8s-master module]$ wget https://get.helm.sh/helm-v3.9.4-linux-amd64.tar.gz

# 解压压缩包

[bigdata@k8s-master module]$ tar -zxvf helm-v3.9.4-linux-amd64.tar.gz 

# 在解压目中找到helm程序,移动到需要的目录中

[bigdata@k8s-master module]$ sudo mv linux-amd64/helm /usr/local/bin/helm# 验证[bigdata@k8s-master module]$ helm version


安装helm

1.3 配置仓库

  • 安装好 Helm 之后,就可以添加 chart 仓库了

# 添加公用的仓库

[bigdata@k8s-master module]$ helm repo add bitnami https://charts.bitnami.com/bitnami

# 配置helm阿里源地址

[bigdata@k8s-master module]$ helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

# 查看仓库

[bigdata@k8s-master module]$ helm repo list

  • 当添加完成,就可以看到可以被安装的 chart 列表了:

[bigdata@k8s-master module]$ helm search repo bitnami


bitnami chart 列表

[bigdata@k8s-master module]$ helm search repo aliyun


阿里云chart 列表

二 选择Prometheus的版本

既然是云原生的环境,我们就使用kube-prometheus,github地址:
https://github.com/prometheus-operator/kube-prometheus

目前Prometheus的版本已经到了v0.11版,我们该下载哪个版本呢?

Prometheus版本列表

在 github 代码下方,用一个表格介绍了 k8s 和 Prometheus 的兼容性。

k8s 和 Prometheus 的兼容性列表

由于我们安装的 k8s 版本是 1.22.6,因此下载 Prometheus0.9 和 Prometheus0.10 都是可以的,我选择下载比较新的版本:Prometheus0.10。

k8s 版本是 1.22.6

三 安装kube-prometheus

3.1 下载kube-prometheus0.10

下载Prometheus0.10的过程会比较慢,有可能会失败,可能需要重试几次。

# 下载Prometheus0.10

[bigdata@k8s-master module]$ git clone https://github.com/prometheus-operator/kube-prometheus.git -b release-0.10

3.2 安装kube-prometheus

安装manifest/setup目录下的所有yaml文件。

[bigdata@k8s-master kube-prometheus]$ kubectl apply --server-side -f manifests/setup


安装kube-prometheus

安装manifest目录下的所有yaml文件,kube-prometheus默认安装在 monitoring 命名空间中,安装过程是非常缓慢的,有些镜像在国外,还会因为拉取不到而安装失败。

[bigdata@k8s-master kube-prometheus]$ cd manifests/setup/ 

[bigdata@k8s-master setup]$ until kubectl get servicemonitors --all-namespaces ; do date; sleep 1; echo ""; done

[bigdata@k8s-master setup]$ cd ../.. 

[bigdata@k8s-master kube-prometheus]$ kubectl apply -f manifests/

我们通过下面的命令查看安装进度。

[bigdata@k8s-master kube-prometheus]$ kubectl get all -n monitoring


查看安装进度

3.3 处理pod下载失败问题

3.3.1 查看哪些pod拉取失败

通过下面的命令,查看每个pod的安装情况,发现有的pod状态是ImagePullBackOff(重新拉取),一旦状态变成ImagePullBackOff,就说明拉取失败了。如果不做处理,一直都拉取不到镜像。

[bigdata@k8s-master module]$ kubectl get pods -n monitoring -o wide


查看哪些pod拉取失败

3.3.2 查看pod报错信息

通过kubectl describe pod [pod_name] -n [namespace]命令,查看每个pod的安装情况。

[bigdata@k8s-master module]$ kubectl describe pod kube-state-metrics-5fcb7d6fcb-zxtqj -n monitoring


查看pod报错信息

例如,上面这个pod的报错信息表示,从"
k8s.gcr.io/kube-state-metrics"中拉取kube-state-metrics:v2.3.0失败,因此我们要修改这个镜像源。需要找到该镜像所在的yaml文件。

3.3.3 更改报错pod的镜像源

kube-prometheus中的镜像对应的yaml文件非常好找,名字有对应关系。例如:
k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.3.0 对应的 yaml文件是:kubeStateMetrics-deployment.yaml

[bigdata@k8s-master manifests]$ vi kubeStateMetrics-deployment.yaml


更改报错pod的镜像源

修成成什么样的镜像源呢?有一个非常好的网站https://hub.docker.com/,通过dockerhub查找对应的镜像,因为dockerhub上的资源都是可以pull下来的。

输入kube-state-metrics,回车搜索。

搜索kube-state-metrics

选择stars数量最多的仓库源,
bitnami/kube-state-metrics的Stars数量最多,点击bitnami/kube-state-metrics。

选择仓库源

里面有很多版本,需要找到我们按照的v2.3.0版本号,点击左侧的复制,查看地址为:docker pull
bitnami/kube-state-metrics:2.3.0

kube-state-metrics:2.3.0

因此,将
kubeStateMetrics-deployment.yaml 中的 image 替换成 bitnami/kube-state-metrics:2.3.0

[bigdata@k8s-master manifests]$ vi kubeStateMetrics-deployment.yaml image: bitnami/kube-state-metrics:2.3.0


kube-state-metrics:2.3.0

重新加载
kubeStateMetrics-deployment.yaml文件,helm会从新的镜像地址拉取并按照pod。

[bigdata@k8s-master manifests]$ kubectl apply -f kubeStateMetrics-deployment.yaml

同样的道理,我们再通过kubectl get pods -n monitoring查看,现在还有prometheus-adpther报错。

kubectl get pods -n monitoring

同理,我们直接修改
prometheusAdapter-deployment.yaml的镜像源。

[bigdata@k8s-master manifests]$ vi prometheusAdapter-deployment.yaml


kubectl get pods -n monitoring

在https://hub.docker.com/上找到,它的镜像地址是:
willdockerhub/prometheus-adapter:v0.9.1


prometheusAdapter-deployment.yaml 中 k9s.gcr.io/prometheus-adapter:v0.9.1 的镜像地址替换成willdockerhub/prometheus-adapter:v0.9.1

prometheusAdapter-deployment.yaml

然后执行
prometheusAdapter-deployment.yaml 文件

[bigdata@k8s-master manifests]$ kubectl apply -f prometheusAdapter-deployment.yaml

以此类推,都是这样重新拉取失败的镜像。拉取镜像的时间还是比较长的,这种方式肯定是可以拉取到的。

3.4 减少pod副本数量

经过一段时间的努力,最后终于拉取成功。虽然拉取成功了,但是有的pod是3副本,有的pod是两副本。由于我们演示环境的虚拟机配置比较低,需要减少一些副本数量。

减少pod副本数量

对于内存空间本就不是很充裕的演示环境来说,就不考虑高可用了。在哪些yaml中配置了副本数量呢?

grep -rn 'replicas:' *

查找副本

安装下面的副本策略,修改副本数量。

  • alertmanager-alertmanager.yaml(保留2副本)

  • prometheusAdapter-deployment.yaml(保留1副本)

  • prometheus-prometheus.yaml(保留1副本)

然后重新运行yaml文件,验证副本数是否复合要求。

[bigdata@k8s-master kube-prometheus]$ kubectl apply -f manifests/ 

[bigdata@k8s-master kube-prometheus]$ kubectl get pods -n monitoring



然后重新运行yaml文件

也可以通过kubernetes dashboard,验证Prometheus+Grafana是否安装成功。可见Prometheus+Grafana都已经安装成功。

验证Prometheus+Grafana是否安装成功

查看svc,都已经安装成功。

[bigdata@k8s-master ~]$ kubectl get svc -n monitoring

验证Prometheus+Grafana是否安装成功

四 通过web访问Prometheus和Grafana

虽然现在pod都已经安装好了,但如果想访问Prometheus,还需要做一点修改。把访问类型改成type: NodePort。

4.1 修改alertmanager-service.yaml

Alertmanager除了基本的告警通知能力外,Alertmanager还支持对告警进行去重、分组、抑制、静默和路由等功能;在如下位置新增type: NodePort

[bigdata@k8s-master ~]$ cd /opt/module/kube-prometheus/manifests/[bigdata@k8s-master manifests]$ vi alertmanager-service.yaml

alertmanager-service.yaml

重新加载alertmanager-service.yaml

[bigdata@k8s-master manifests]$ kubectl apply -f alertmanager-service.yaml [bigdata@k8s-master manifests]$ kubectl get svc -n monitoring

alertmanager-service.yaml

通过web方式访问Alertmanager

web方式访问Alertmanager

4.2 修改grafana-service.yaml

Grafana 是一款用 Go 语言开发的开源数据可视化工具,可以做数据监控和数据统计,带有告警功能。

同样,新增type: NodePort

[bigdata@k8s-master manifests]$ vi grafana-service.yaml

web方式访问Alertmanager

重新加载grafana-service.yaml 文件。

[bigdata@k8s-master manifests]$ kubectl apply -f grafana-service.yaml [bigdata@k8s-master manifests]$ kubectl get svc -n monitoring

grafana-service.yaml

通过web方式访问Grafana,用户名:密码/admin:admin

访问Grafana

在Grafana上,可以展示自定义报表、图表等。Grafana的UI更加灵活,有丰富的插件,功能强大。


访问Grafana

访问Grafana

4.3 修改prometheus-service.yaml

增加type: NodePort

[bigdata@k8s-master manifests]$ vi prometheus-service.yaml

prometheus-service.yaml

重新加载prometheus-service.yaml

[bigdata@k8s-master manifests]$ kubectl apply -f prometheus-service.yaml [bigdata@k8s-master manifests]$ kubectl get svc -n monitoring


kubectl get svc -n monitoring

prometheus已经帮我们配置好了一些监控报警。

prometheus


如何用helm在k8s上快速部署Prometheus+Grafana的评论 (共 条)

分享到微博请遵守国家法律