四时宝库

程序员的知识宝库

36张图文讲解:利用helm在k8s上快速部署Prometheus+Grafana

大家好,这是一篇用helm安装Prometheus+Grafana的文章,大家可以按照文章的执行步骤安装helm、Prometheus和Grafana。通过helm安装Prometheus的步骤并不难,可以说非常简单,几条命令就可以搞定。唯一的难点就是有些镜像在国外,我们下载不到。我们在这篇文章中,不但和大家一步一步的安装Prometheus+Grafana,还要介绍如何下载这些国外的镜像。

在云原生的时代,Prometheus是监控届当之无愧的老大;在早些年,容器(Docker)还没有出现的时候,都是使用 Zabbix 和 Nagios 做监控。

总的来说,Zabbix 的成熟度更高,上手更快,但 Zabbix 的灵活性较差,更大的问题是,随着监控数据复杂度的增加,在 Zabbix 上做进一步的定制难度非常高。

Prometheus 正相反,上手难度大一些,但定制灵活度高,上手后的使用难度远小于 Zabbix。

如果监控的是物理机,推荐使用 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版本。

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

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
[bigdata@k8s-master module]$ helm search repo aliyun

二 选择Prometheus的版本

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

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

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

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

三 安装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

安装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

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的报错信息表示,从"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

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

输入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

因此,将 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

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

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

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

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

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

在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 文件

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

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

3.4 减少pod副本数量

经过一段时间的努力,最后终于拉取成功。虽然拉取成功了,但是有的pod是3副本,有的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

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

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

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

四 通过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

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

通过web方式访问Alertmanager

4.2 修改grafana-service.yaml

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

同样,新增type: NodePort

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

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

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

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

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

4.3 修改prometheus-service.yaml

增加type: NodePort

[bigdata@k8s-master manifests]$ vi 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

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

以上就是安装helm、Prometheus、Grafana的全过程,有喜欢的小伙伴,欢迎转发、点赞。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接