postgres_exporter prometheus k8s k8s secret

Prometheus 監控 PostgreSQL server 實作 part.2 - 利用k8s secret管理PostgreSQL連線密碼

曹應忠 2019/07/23 16:26:43
512

前言

最近應觀眾(客戶)要求,原本的postgres_exporter是使用export datasource設置環境變數方式,有名馬明碼被看光光的疑慮。

所以我們要讓postgres_exporter跑在k8s cluster上,利用k8s secret resource來粉飾太平處理明碼問題。

記錄一下設定的步驟,避免我的金魚腦馬上就忘光了。

原本的postgres_exporter監控可以先參考另一位同事的力作:

Prometheus 監控 PostgreSQL server 實作

 

環境說明

  Version
kubernetes cluster v1.15.0
helm 2.14.2
postgres-exporter 0.4.7

 

實作

因為我們有使用helm來管理k8s的package,所以當然先搜一下helm chart有沒有方便好用即成的囉!

[root@caai1 k8s-monitoring]# helm search postgres-exporter
NAME                               	CHART VERSION	APP VERSION	DESCRIPTION
stable/prometheus-postgres-exporter	0.6.2        	0.4.7      	A Helm chart for prometheus postgres-exporter

 

非常好!果然有,那我們就直接下載回來使用吧。

[root@caai1 k8s-monitoring]# helm fetch stable/prometheus-postgres-exporter --untar
[root@caai1 k8s-monitoring]# cd prometheus-postgres-exporter/

 

先看一下目錄裡有什麼

[root@caai1 prometheus-postgres-exporter]# ls -al
total 36
drwx------  3 root root 4096 Jul 17 11:56 .
drwxr-xr-x 10 root root 4096 Jul 17 17:41 ..
-rwxr-xr-x  1 root root  360 Jul  3 17:49 Chart.yaml
-rwxr-xr-x  1 root root  333 Jul  3 17:49 .helmignore
-rwxr-xr-x  1 root root 4490 Jul  3 17:49 README.md
drwx------  2 root root 4096 Jul 17 11:58 templates
-rwxr-xr-x  1 root root 7526 Jul 17 11:53 values.yaml

 

要調整的地方不多,先修改values.yaml

[root@caai1 prometheus-postgres-exporter]# vi values.yaml

 

有二個區塊要調整的,首先是看到service這部分。

這邊先將type修改為NodePort,另外增加一行參數nodePort: 31987,指定要將服務port開在31987。

 

接下來往下找到config區塊。這邊填入要監控的PostgreSQL資訊。

咦!但這邊的密碼依舊是明碼的呀?這不是在唬客人嗎!?

這邊很貼心的有提供了二種方式:password or passwordSecret,二個擇一填即可。

如果客官您不熟怎麼先建立一個k8s secret resource來放密碼的話,這邊先使用password這個欄位。

在helm install時會判斷並建立一個新的secret來存放編碼過的密碼。

 

接下來我們要對templates/service.yaml動一點小手腳。

找到spec.ports這一段,在底下加上這段:

{{- if eq .Values.service.type "NodePort" }}
      nodePort: {{ .Values.service.nodePort }}
{{- end }}

說明一下這邊為什麼需要將service.type改為NodePort:

因為我們的prometheus是單獨跑在k8s cluster外的另一台機器,若維持原本的ClusterIP方式。

只有k8s cluster裡才能連的到postgres-exporter。

因此需調整讓postgres-exporter service,能夠被k8s cluster以外的機器也連的到。

 

改完存檔離開,接下來要安裝囉。

[root@caai1 prometheus-postgres-exporter]# helm install -n postgres-exporter . --namespace monitoring

 

檢查一下安裝狀態,看起來pod有正常在running了。

[root@caai1 prometheus-postgres-exporter]# helm ls postgres-exporter
NAME             	REVISION	UPDATED                 	STATUS  	CHART                             	APP VERSION	NAMESPACE
postgres-exporter	1       	Wed Jul 17 11:58:52 2019	DEPLOYED	prometheus-postgres-exporter-0.6.2	0.4.7      	monitoring
[root@caai1 prometheus-postgres-exporter]#
[root@caai1 prometheus-postgres-exporter]#
[root@caai1 prometheus-postgres-exporter]# kubectl -n monitoring get pod -l release=postgres-exporter
NAME                                                              READY   STATUS    RESTARTS   AGE
postgres-exporter-prometheus-postgres-exporter-7c5c5fd6c5-75f7h   1/1     Running   0          2d5h

 

接著就去修改prometheus server上的prometheus.yaml,

將postgres-exporter的scrap_config修改成新啟動的這組。

[tpuser@caai4 ~]$ sudo vim /etc/prometheus/prometheus.yml

 

大功告成!登入Grafana,就能看到已經是由新的這組postgres-exporter提供metric資料囉。

 

補充知識

還記得在前面我們有提到密碼會存放在k8s secret裡嗎,但是實際的密碼依舊是好端端的明碼設定在values.yaml裡呀~

那怎麼辦!?

這時候我們就可以在初次安裝後,改用passwordSecret這項設定。(或是在安裝前就已經有建立了secret也可以依照這樣的設定法)

 

先查出要使用的secret名稱

 

編輯values.yaml。

1.將password的值拿掉

2.將passwordSecret後面的大括號{}刪除

3.設定上圖查出來的name與key

其實postgres-exporter chart裡已經有考慮到種種情況,

因此即使第一次安裝完成後,就將password密碼清空;且沒設定passwordSecret,helm upgrade時也會抓首次安裝建立出來的secret。

這種事應該要早點講啊!( ´_ゝ`)

 

 

 

曹應忠
Vicky Shih
2019/07/23 22:52:04

太讚了 .... 但圖不給看啦 orz

曹應忠
2019/07/24 09:22:08

怪了,沒登入或用FB登入真的看不到圖~“~