简介
本文主要讲解如何使用helm3在gke上安装prometheus-operator,包含持久化存储的使用。
今天会先最简单安装一下prometheus-operator,然后再一步一步优化,最终我们使用自定义Chart文件保存为私有的安装包。
前提
- 安装并会使用helm3
步骤
安装helm3
最简安装prometheus-operator
使用ingress来暴露服务
创建自定义chart文件
① 设置自定义ns
② 设置svc暴露方式为NodePort
③ 自定义ingress
④ 设置持久化存储
⑤ 自定义镜像
⑥ 修改默认grafana的用户密码
⑦ 打包
开始
1. 安装helm3
非常简单,官方文档给出了几种安装方式,随便一个都行。文档
这里我采用最简单的二进制文件安装即可
1.到这里下载适合你系统的二进制文件包https://github.com/helm/helm/releases
2.tar -zxvf helm-v3.0.0-linux-amd64.tar.gz
3.mv linux-amd64/helm /usr/local/bin/helm
4.helm help 验证下是否安装成功
安装好之后,我们配置下helm的仓库,既然安装prometheus-operator,那么就先add一个他的仓库。
1.helm repo add stable https://charts.helm.sh/stable
2.验证仓库,helm repo list
helm repo list
NAME URL
stable https://charts.helm.sh/stable
最简安装prometheus-operator
如果你不知道prometheus-operator是什么,以及他包含了啥,请移步这里:文档
1.查找一下我们仓库中的prometheus-operator的包
helm search repo prometheus-operator
NAME CHART VERSION APP VERSION DESCRIPTION
stable/prometheus-operator 9.3.2 0.38.1 DEPRECATED Provides easy monitoring definitions...
2.直接安装,报错暂时忽略
helm install <release-name> --namespace <your-namespace> stable/prometheus-operator
WARNING: This chart is deprecated
manifest_sorter.go:192: info: skipping unknown hook: "crd-install"
manifest_sorter.go:192: info: skipping unknown hook: "crd-install"
manifest_sorter.go:192: info: skipping unknown hook: "crd-install"
manifest_sorter.go:192: info: skipping unknown hook: "crd-install"
manifest_sorter.go:192: info: skipping unknown hook: "crd-install"
manifest_sorter.go:192: info: skipping unknown hook: "crd-install"
NAME: eve-prometheus-operator
LAST DEPLOYED: Fri Nov 6 13:50:46 2020
NAMESPACE: meitu-monitoring
STATUS: deployed
REVISION: 1
NOTES:
*******************
*** DEPRECATED ****
*******************
* stable/prometheus-operator chart is deprecated.
* Further development has moved to https://github.com/prometheus-community/helm-charts
* The chart has been renamed kube-prometheus-stack to more clearly reflect
* that it installs the `kube-prometheus` project stack, within which Prometheus
* Operator is only one component.
The Prometheus Operator has been installed. Check its status by running:
kubectl --namespace meitu-monitoring get pods -l "release=eve-prometheus-operator"
Visit https://github.com/coreos/prometheus-operator for instructions on how
3.安装完成之后,你就可以在你的ns下看到资源了
[root@beautyplus-bigdata-gcp pre]# kubectl get pods -n monitoring
NAME READY STATUS RESTARTS AGE
alertmanager-prometheus-operator-alertmanager-0 2/2 Running 0 53m
prometheus-operator-grafana-b4494db55-f87mt 2/2 Running 0 53m
prometheus-operator-kube-state-metrics-5fd49d67d-xhpjs 1/1 Running 0 53m
prometheus-operator-operator-75d86956bb-4rg99 2/2 Running 0 53m
prometheus-operator-prometheus-node-exporter-hvccz 1/1 Running 0 53m
prometheus-operator-prometheus-node-exporter-l4kdx 1/1 Running 0 53m
prometheus-prometheus-operator-prometheus-0 3/3 Running 0 53m
3.使用ingress来暴露服务
注意:我们首先看下安装好之后的svc信息
kubectl get svc -n monitoring
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
alertmanager-operated ClusterIP None <none> 9093/TCP,9094/TCP,9094/UDP 56m
prometheus-operator-alertmanager ClusterIP 10.220.0.220 <none> 9093:31261/TCP 57m
prometheus-operator-grafana ClusterIP 10.220.0.54 <none> 80:30830/TCP 57m
prometheus-operator-kube-state-metrics ClusterIP 10.220.0.249 <none> 8080/TCP 57m
prometheus-operator-operator ClusterIP 10.220.0.178 <none> 8080/TCP,443/TCP 57m
prometheus-operator-prometheus ClusterIP 10.220.0.55 <none> 9090:32218/TCP 57m
prometheus-operator-prometheus-node-exporter ClusterIP 10.220.0.253 <none> 9100/TCP 57m
prometheus-operated ClusterIP None <none> 9090/TCP 56m
正常来讲都是ClusterIP的方式,如果我们没有公网代理等,请直接修改ClusterIP为NodePort方式。如果你有公网代理等,直接不用修改,创建ingress资源即可。
不过,gke特殊,如果你想暴露你的服务,必须要求你的svc是NodePort方式或者是LoadBalancer方式,所以在gke上使用ingress方式来暴露服务,那么必须要先修改svc为NodePort方式
kubectl edit svc prometheus-operator-alertmanager -n monitoring
kubectl edit svc prometheus-operator-grafana -n monitoring
kubectl edit svc prometheus-operator-prometheus -n monitoring
修改完上述内容,那么我们直接创建ingress资源:(注意需要提前创建下secret证书)
cat ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/enable-cors: "true"
name: prometheus-ingress
namespace: monitoring
spec:
rules:
- host: grafana.xx.com
http:
paths:
- backend:
serviceName: prometheus-operator-grafana
servicePort: 80
- host: prometheus.xx.com
http:
paths:
- backend:
serviceName: prometheus-operator-prometheus
servicePort: 9090
- host: alertmanager.xx.com
http:
paths:
- backend:
serviceName: prometheus-operator-alertmanager
servicePort: 9093
tls:
- secretName: x-xx-com-20201106
创建完直接apply一下,应用即可:
kubectl apply -f ingress.yaml
最后到gcp控制台观察下该ingress创建的状态,拿到公网ip,本地绑定host测试下就行。
注意:grafana默认的用户密码是admin/prom-operator
4. 创建自定义chart文件
首先我们下载chart文件
helm pull stable/prometheus-operator
tar xzvf prometheus-operator-9.3.2.tgz
cd prometheus-operator/
① 设置自定义ns
修改values.yaml中的namespaceOverride字段,设置为自己的ns
② 设置svc暴露方式为NodePort
1.修改alertmanager.service.type为NodePort
2.修改prometheus.service.type为NodePort
3.grafana比较特殊,需要在charts/grafana/values.yaml文件中的service下添加以下内容:
service:
type: NodePort
port: 3000
targetPort: 3000
③ 自定义ingress
这个不建议了,因为这样默认会创建出三个公网ip,比较麻烦,最好的方式是安装好之后,单独定义一个ingress资源,去代理这三个服务:alertmanager、grafana、prometheus。
具体方法看上面说的ingress服务暴露。(注意:你前面已经吧grafana的暴露方式修改成NodePort,并且把端口也改了,注意修改ingress文件)
④ 设置持久化存储(prometheus+grafana)
首先你需要了解pv,pvc,StorageClass三个概念,不然没法进行下去。
注意:其实正常来讲你不用手动创建一个sc的,因为而且在gke提供了一个默认的standard (default) ,而且在gke上,我们是直接创建pvc,不用创建pv的,因为gke的csi已经帮我们管理pv了,即云厂商的磁盘服务而已。
【prometheus持久化存储】
当我们使用helm来设置自定义存储的时候,我们只需要:
1.创建一个sc
2.并且修改values文件的配置,不用再创建pvc了。
cat sc.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: gke-standard-sc
namespace: monitoring
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-standard
volumeBindingMode: WaitForFirstConsumer # pvc创建后不会创建pv,只有pod正常后才会创建pv,也就是具体存储
reclaimPolicy: Retain # 回收策略,pvc删除后,数据不会删除
kubectl apply -f sc.yaml
创建好sc就可以在gcp看到如下内容:
![png1](https://i-blog.csdnimg.cn/blog_migrate/62bb676801fcd37163f861533a622051.png)
vim values.yaml(注意是prometheus.prometheusSpec)
storageSpec:
volumeClaimTemplate:
spec:
storageClassName: gke-standard-sc
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 50Gi
修改完上述内容,然后安装好prometheus后,就能看到新的pvc创建出来了。
![png1](https://i-blog.csdnimg.cn/blog_migrate/04fd4587ef29fd367ddaedfa454eae46.png)
【grafana持久化存储】
首先也是要使用上面创建的sc,并自已创建pvc
cat grafana-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: gke-grafana-pvc
namespace: meitu-monitoring
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: gke-standard-sc
kubectl apply -f grafana-pvc.yaml
然后修改charts/grafana/values.yaml
,使用上面的pvc
persistence:
type: pvc
enabled: true
storageClassName: gke-standard-sc
accessModes:
- ReadWriteOnce
size: 10Gi
annotations: {}
finalizers:
- kubernetes.io/pvc-protection
subPath: ""
existingClaim: gke-grafana-pvc
持久化存储搞定之后,我们可以看看我们的grafana和prometheus运行在哪台机器上,然后登录到机器,就可以看到这台机器挂载了你的存储磁盘。
(注意:gke的node节点是不允许登录的,所以你就在控制台看看就行)
![png3](https://i-blog.csdnimg.cn/blog_migrate/ac49a4e19946d7b392ef6d37adb4eb13.png)
⑤ 自定义镜像
这里只需要注意,你的镜像如果是私有的,那么请设置全局的global.imagePullSecrets
⑥ 修改grafana默认用户密码
注意要注释掉默认values中的grafana.adminPassword配置
vim charts/grafana/values.yaml
adminUser: meitu_sre
adminPassword: Meitu@2020
⑦ 打包
1. 修改Chart.yaml中的name字段,设置为自己的name
2. helm package self-define-name --debug
我们的helm仓库一般使用chartmuseum,如果想看怎么安装或者推送私有镜像到chartmuseum,请看我之前的博客:chartmuseum