Prometheus Operator與kube-prometheus之二-如何監(jiān)控1.23+ kubeadm集群

簡(jiǎn)介

kube-prometheus-stack捆綁了監(jiān)控Kubernetes 集群所需的Prometheus Operator豺旬、Exporter案糙、Rule循榆、Grafana 和 AlertManager并淋。

但要為使用kubeadm構(gòu)建的Kubernetes集群定制Helm安裝沐寺,還是有必要進(jìn)行定制色瘩。

這一次結(jié)合近期比較新的 Kubernetes 版本 v1.23+, 以及較為常見的安裝方式 kubeadm, 來實(shí)戰(zhàn)說明:

  • kubeadm 需要哪些特殊配置
  • 如何安裝 Prometheus Operator: 通過 kube-prometheus-stack helm chart
  • 如何配置對(duì) kubeadm 安裝的集群的組件監(jiān)控

開始!

前提條件

  • kubeadm
  • helm3

kubeadm 需要哪些特殊配置

為了后面能夠正常通過 Prometheus Operator 獲取到 kubeadm 搭建的 Kubernetes v1.23+ 集群的指標(biāo), 需要對(duì) kubeadm 做一些特殊配置.

默認(rèn)情況下单绑,kubeadm將它的幾個(gè)管理組件綁定到 node 的 localhost 127.0.0.1 地址上, 涉及到: Kube Controller Manager嘱函、Kube Proxy和Kube Scheduler币厕。

然而庆冕,對(duì)于監(jiān)控來說,我們需要這些端點(diǎn)的暴露劈榨,以便他們的指標(biāo)可以被Prometheus提取访递。因此,我們需要將這些組件暴露在他們的 0.0.0.0 地址上同辣。

當(dāng)?shù)卿浀絢ubeadm主節(jié)點(diǎn)時(shí)拷姿,運(yùn)行以下修改:

Controller Manager 和 Scheduler 組件

默認(rèn)情況下惭载,kubeadm 并沒有公開我們要監(jiān)控的兩個(gè)服務(wù)(kube-controller-manager 和 kube-scheduler)。因此响巢,為了充分利用kube-prometheus-stack helm chart描滔,我們需要對(duì)Kubernetes集群做一些快速調(diào)整。后面我們會(huì)監(jiān)控kube-controller-manager和kube-scheduler踪古,我們必須將它們的地址端口暴露給集群含长。

默認(rèn)情況下,kubeadm 在你的主機(jī)上運(yùn)行這些 pod伏穆,并綁定到 127.0.0.1拘泞。有幾種方法可以改變這一點(diǎn)。建議改變這些配置的方法是使用 kubeadm config file枕扫。下面是配置示例:

apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
...
controllerManager:
  extraArgs:
    bind-address: "0.0.0.0"
scheduler:
  extraArgs:
    bind-address: "0.0.0.0"
...
kubernetesVersion: "v1.23.1"
...

??上面的 .scheduler.extraArgs.controllerManager.extraArgs陪腌。這樣就把 kube-controller-managerkube-scheduler 服務(wù)暴露給集群的其他組件。

另外, 如果你把 kubernetes 核心組件作為pods放在 kube-system namespace烟瞧,就要確保kube-prometheus-exporter-kube-schedulerkube-prometheus-exporter-kube-controller-manager service (這 2 個(gè) service 是 kube-prometheus-stack 創(chuàng)建出來用于 Prometheus Operator 通過 ServiceMonitor 監(jiān)控這兩個(gè)組件用的)的spec.selector 值與pods的值一致诗鸭。

如果你已經(jīng)有一個(gè)部署了 kubeadm 的Kubernetes,可以直接 kube-controller-manager 和 kube-scheduler 的監(jiān)聽地址:

sed -e "s/- --bind-address=127.0.0.1/- --bind-address=0.0.0.0/" -i /etc/kubernetes/manifests/kube-controller-manager.yaml
sed -e "s/- --bind-address=127.0.0.1/- --bind-address=0.0.0.0/" -i /etc/kubernetes/manifests/kube-scheduler.yaml

Kube Proxy 組件

??Notes:
一般情況下, kube-proxy 總是綁定所有地址的, 但是對(duì)應(yīng)的 metricsBindAddress 可能并不一定會(huì)follow 配置. 具體如下面的"改動(dòng)前"

對(duì)于 Kube Proxy 組件, 在使用 kubeadm 安裝完成之后, 需要修改 kube-system 下的 configmap kube-proxy 的 metricsBindAddress.

改動(dòng)如下:

改動(dòng)前:

...
kind: KubeProxyConfiguration
bindAddress: 0.0.0.0
metricsBindAddress: 127.0.0.1:10249
...

改動(dòng)后:

kind: KubeProxyConfiguration
bindAddress: 0.0.0.0
metricsBindAddress: 0.0.0.0:10249

并重啟:

kubectl -n kube-system rollout restart daemonset/kube-proxy

Etcd 配置

Etcd 配置, 這里就不詳細(xì)說明了, 可以直接參見: Prometheus Operator 監(jiān)控 etcd 集群-陽(yáng)明的博客

但是上面鏈接提到的方法比較麻煩, 推薦一個(gè)更簡(jiǎn)單的: 可以在 etcd 的配置中加上監(jiān)聽 Metrics URL 的flag:

# 在 etcd 所在的機(jī)器上
master_ip=192.168.1.5
sed -i "s#--listen-metrics-urls=.*#--listen-metrics-urls=http://127.0.0.1:2381,http://$master_ip:2381#" /etc/kubernetes/manifests/etcd.yaml

驗(yàn)證 kubeadm 配置

小結(jié)一下, 通過之前的這些配置, Kubernetes 組件的 Metrics 監(jiān)聽端口分別為:

  • Controller Manager: (Kubernetes v1.23+)
    • 端口: 10257
    • 協(xié)議: https
  • Scheduler: (Kubernetes v1.23+)
    • 端口: 10259
    • 協(xié)議: https
  • Kube Proxy
    • 端口: 10249
    • 協(xié)議: http
  • etcd
    • 端口: 2381
    • 協(xié)議: http

可以通過 netstat 命令查看之前的配置是否全部生效:

在 master 和 etcd node 上執(zhí)行:

$ sudo netstat -tulnp | grep -e 10257 -e 10259 -e 10249 -e 2381
tcp        0      0 192.168.1.5:2381    0.0.0.0:*               LISTEN      1400/etcd           
tcp        0      0 127.0.0.1:2381          0.0.0.0:*               LISTEN      1400/etcd
tcp6       0      0 :::10257                :::*                    LISTEN      1434/kube-controlle 
tcp6       0      0 :::10259                :::*                    LISTEN      1486/kube-scheduler 
tcp6       0      0 :::10249                :::*                    LISTEN      4377/kube-proxy

# 測(cè)試etcd指標(biāo)
curl -k http://localhost:2381/metrics

# 測(cè)試 kube-proxy 指標(biāo)
curl -k http://localhost:10249/metrics

通過 kube-prometheus-stack 安裝并定制 helm values

這里直接完成上面提到的 2 步:

在我們用 Helm 安裝kube-prometheus-stack之前参滴,我們需要?jiǎng)?chuàng)建一個(gè)values.yaml來調(diào)整kubeadm 集群的默認(rèn) chart value强岸。

為 Prometheus 和 AlertManager 配置持久化存儲(chǔ)

推薦要為 Prometheus 和 AlertManager 配置持久化存儲(chǔ), 而不要直接使用 emptyDir.
存儲(chǔ)具體如何配置根據(jù)您的集群的實(shí)際情況來, 這邊就不做過多介紹.

etcd 相關(guān)配置

Kubeadm etcd 監(jiān)控的端口是 2381(而不是Helm chart中指定的默認(rèn)值: 2379)],所以我們需要明確覆蓋這個(gè)值砾赔。

kubeEtcd:
  enabled: true
  service:
    enabled: true
    port: 2381
    targetPort: 2381

Controller Manger 相關(guān)配置

這里不需要做太多配置, 關(guān)于 https 和 端口, 如果相關(guān) key 為空或未設(shè)置蝌箍,該值將根據(jù)目標(biāo)Kubernetes 版本動(dòng)態(tài)確定,原因是默認(rèn)端口在Kubernetes 1.22中的變化过蹂。注意下面的: .kubeControllerManager.service.port.kubeControllerManager.service.targetPort 以及 .kubeControllerManager.serviceMonitor.https.kubeControllerManager.serviceMonitor.insecureSkipVerify.

如果配置后監(jiān)控抓不到或有異常, 可以按實(shí)際情況調(diào)整.

kubeControllerManager:
  enabled: true
  ...
  service:
    enabled: true
    port: null
    targetPort: null
  serviceMonitor:
    enabled: true
    ...
    https: null
    insecureSkipVerify: null
    ...

Kubernetes Scheduler

同上, 這里不需要做太多配置, 關(guān)于 https 和 端口, 如果相關(guān) key 為空或未設(shè)置十绑,該值將根據(jù)目標(biāo)Kubernetes 版本動(dòng)態(tài)確定,原因是默認(rèn)端口在Kubernetes 1.23中的變化酷勺。注意下面的: .kubeScheduler.service.port.kubeScheduler.service.targetPort 以及 .kubeScheduler.serviceMonitor.https.kubeScheduler.serviceMonitor.insecureSkipVerify.

如果配置后監(jiān)控抓不到或有異常, 可以按實(shí)際情況調(diào)整.

kubeScheduler:
  enabled: true
  ...
  service:
    enabled: true
    port: 10259
    targetPort: 10259
  serviceMonitor:
    enabled: true
    ...
    https: true
    insecureSkipVerify: true
    ...

Kubernetes Proxy

也是如此, 根據(jù) 是否 https 和 端口進(jìn)行調(diào)整, 如下:

kubeProxy:
  enabled: true
  endpoints: []
  service:
    enabled: true
    port: 10249
    targetPort: 10249
  serviceMonitor:
    enabled: true
    ...
    https: false
  ...

通過 Helm 安裝 kube-prometheus-stack

添加 Helm 倉(cāng)庫(kù):

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo list
helm repo update prometheus-community

安裝:

helm upgrade --install \
  --namespace prom \
  --create-namespace \
  -f values.yaml \
  monitor prometheus-community/kube-prometheus-stack

驗(yàn)證

這里主要驗(yàn)證 kubeadm 的 Kubernetes 組件有沒有正常監(jiān)控到, 可以通過 Prometheus UI 或 Grafana UI 直接查看進(jìn)行驗(yàn)證.

可以通過 Ingress 或 NodePort 將 Prometheus UI 或 Grafana UI 地址暴露出去, 然后訪問:

Status -> Targets 查看監(jiān)控狀態(tài), 這里舉幾個(gè)組件來進(jìn)行說明:

Controller Manager 監(jiān)控狀態(tài)
Kube Proxy 監(jiān)控狀態(tài)
Kube Scheduler 監(jiān)控狀態(tài)

Grafana 可以直接登錄后查看對(duì)應(yīng)的儀表板, 如下圖:

etcd Grafana Dashboard

??????

??? 參考文檔

本文由東風(fēng)微鳴技術(shù)博客 EWhisper.cn 編寫本橙!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市脆诉,隨后出現(xiàn)的幾起案子甚亭,更是在濱河造成了極大的恐慌,老刑警劉巖击胜,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亏狰,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡偶摔,警方通過查閱死者的電腦和手機(jī)暇唾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人策州,你說我怎么就攤上這事瘸味。” “怎么了够挂?”我有些...
    開封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵旁仿,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我孽糖,道長(zhǎng)枯冈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任办悟,我火速辦了婚禮尘奏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘誉尖。我一直安慰自己罪既,他們只是感情好铸题,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開白布铡恕。 她就那樣靜靜地躺著,像睡著了一般丢间。 火紅的嫁衣襯著肌膚如雪探熔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天烘挫,我揣著相機(jī)與錄音诀艰,去河邊找鬼。 笑死饮六,一個(gè)胖子當(dāng)著我的面吹牛其垄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播卤橄,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼绿满,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了窟扑?” 一聲冷哼從身側(cè)響起喇颁,我...
    開封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嚎货,沒想到半個(gè)月后橘霎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡殖属,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年姐叁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡外潜,死狀恐怖谭溉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情橡卤,我是刑警寧澤扮念,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站碧库,受9級(jí)特大地震影響柜与,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嵌灰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一弄匕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧沽瞭,春花似錦迁匠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至豌鹤,卻和暖如春亡哄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背布疙。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工蚊惯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人灵临。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓截型,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親儒溉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子宦焦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容