在 k8s 中部署 Prometheus

自從 上次 介紹了 Prometheus 之后瘦材,就想到要在 k8s 中使用了厅须,不過,在這之前食棕,先介紹下 k8s 的監(jiān)控朗和。

k8s 的監(jiān)控

k8s 默認以及推薦的監(jiān)控體系是它自己的一套東西:Heapster + cAdvisor + Influxdb + Grafana,具體可以看 這里 簿晓。

包括 k8s 自身的 HPA (Horizontal Pod Autoscaler)眶拉,默認從 Heapster 中獲取數(shù)據(jù)進行自動伸縮。(順便提一句憔儿,當你部署完 k8s 集群之后忆植,如果從 Dashboard 中看不到監(jiān)控數(shù)據(jù),往往就是因為你沒有部署 Heapster谒臼,或者網(wǎng)絡層有問題朝刊, Dashboard 無法訪問 Heapster。)

那蜈缤,這跟我們介紹的 Prometheus 有什么關系拾氓?

首先,它們都是一套監(jiān)控解決方案劫樟,而 k8s 沒有把 Prometheus 作為默認監(jiān)控痪枫,因此,如果你想直接使用 HPA叠艳,你還是需要部署 Heapster奶陈。

其次,kubelet 中的 cAdvisor 其實是支持 Prometheus 作為存儲的后端的附较,只是相對于 Prometheus 自己的 SD 解決方案來說吃粒,太弱了點。

最后拒课,k8s 1.6 之后徐勃,在 annotations 中配置 custom metrics 的方式已經(jīng)被移除了,而根據(jù)
Prometheus 的監(jiān)控數(shù)據(jù)來進行自動伸縮還是很有可操作性的早像。

部署

其實部署很簡單僻肖,關鍵是配置,因此這里著重介紹下卢鹦,如何配置臀脏。

Relabel

首先,先來了解下冀自,什么是 relabel_config揉稚。

就如字面意思而言,它的作用是 Prometheus 抓取 metrics 之前熬粗,就將對象相關的 labels 重寫搀玖。下面是它幾個重要的 label:

  • __address__:默認為 host:port,也是之后抓取之后 instance 的值驻呐;
  • __scheme__:http or https 灌诅?;
  • __metrics_path__:就是 metrics path含末,默認為 /metrics延塑;
  • __param_${name}:用來作為 URL parameter,比如 http://.../metrics?name=value答渔;
  • __meta_:這個開頭的配置都是 SD 相關的配置关带;

Kubernetes SD

其次,上次提到沼撕,我們可以用到 Service Discovery 這個功能宋雏,其中就包含 Kubernetes SD

它包含四種角色:

  • node
  • service
  • pod
  • endpoints

由于篇幅所限务豺,這里只是簡單介紹下其中的 node 還有 pod 角色:

- job_name: 'kubernetes-nodes'
  scheme: https
  tls_config:
    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
  bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  
  kubernetes_sd_configs:
  - role: node
  
  relabel_configs:
    # 即從 __meta_kubernetes_node_label_<labelname> 這個配置中取出 labelname 以及 value
  - action: labelmap
    regex: __meta_kubernetes_node_label_(.+)
    
    # 配置 address 為 k8s api 的地址磨总,相關的 ca 證書以及 token 在上面配置
  - target_label: __address__
    replacement: kubernetes.default.svc:443
    
    # 取出所有的 node,然后設置 /api/v1/nodes/<node_name>/proxy/metrics 為 metrics path
  - source_labels: 
    - __meta_kubernetes_node_name
    regex: (.+)
    target_label: __metrics_path__
    replacement: /api/v1/nodes/${1}/proxy/metrics

接下來的這個 pod 角色挺重要:

- job_name: 'kubernetes-pods'

  kubernetes_sd_configs:
  - role: pod

  relabel_configs:
  - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
    action: keep
    regex: true
  - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
    action: replace
    target_label: __metrics_path__
    regex: (.+)
  - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
    action: replace
    regex: ([^:]+)(?::\d+)?;(\d+)
    replacement: $1:$2
    target_label: __address__
  - action: labelmap
    regex: __meta_kubernetes_pod_label_(.+)
  - source_labels: [__meta_kubernetes_namespace]
    action: replace
    target_label: kubernetes_namespace
  - source_labels: [__meta_kubernetes_pod_name]
    action: replace
    target_label: kubernetes_pod_name

在定義了這個角色之后笼沥,你只要在你部署的應用 Pod 描述中蚪燕,加入以下 annotations 就能讓 Prometheus 自動發(fā)現(xiàn)此 Pod 并采集監(jiān)控數(shù)據(jù)了:

annotations:
  prometheus.io/scrape: "true"
  prometheus.io/port: "<your app port>"

其它詳細配置請看 這里娶牌。

Kubernetes Deployment

最后,部署 Prometheus馆纳,需要注意的是诗良,我們已經(jīng)在 k8s 之外單獨部署了一套,為了統(tǒng)一處理鲁驶,在這里是打算作為中轉(zhuǎn)的鉴裹。

apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus
  namespace: kube-system
  labels:
    app: prometheus
data:
  prometheus.yml: |-
  # 省略,在這里定義你需要的配置
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: prometheus
  namespace: kube-system
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: prometheus
    spec:
      containers:
      - name: prometheus
        image: prom/prometheus:latest
        args:
          - '-config.file=/prometheus-data/prometheus.yml'
          # 顯然钥弯,這里沒有用 `Stateful Sets`径荔,存儲時間不用太長
          - '-storage.local.retention=48h0m0s'
        ports:
        - name: prometheus
          containerPort: 9090
        volumeMounts:
        - name: data-volume
          mountPath: /prometheus-data
      volumes:
      - name: data-volume
        configMap:
          name: prometheus
---
# 簡單處理,直接使用 NodePort 暴露服務脆霎,你也可以使用 Ingress
apiVersion: v1
kind: Service
metadata:
  name: prometheus
  namespace: kube-system
spec:
  selector:
    app: prometheus
  ports:
  - name: prometheus
    protocol: TCP
    port: 9090
    nodePort: 30090
  type: NodePort

Prometheus Federate

而在我們外部單獨的 Prometheus 中总处,需要配置 Federate,將 k8s 中 Prometheus 采集的 metrics 全部同步出來睛蛛。

  - job_name: 'federate'
    scrape_interval: 15s

    honor_labels: true
    metrics_path: '/federate'

    params:
      'match[]':
        - '{job=~".+"}' # 取 k8s 里面部署的  Prometheus 中所有的 job 數(shù)據(jù)

    static_configs:
      - targets:
        - '<k8s-node1>:30090'
        - '<k8s-node2>:30090'
        - '<k8s-node3>:30090'

原地址:https://xizhibei.github.io/2017/08/19/deploy-prometheus-in-k8s/

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辨泳,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子玖院,更是在濱河造成了極大的恐慌菠红,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件难菌,死亡現(xiàn)場離奇詭異试溯,居然都是意外死亡,警方通過查閱死者的電腦和手機郊酒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門遇绞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人燎窘,你說我怎么就攤上這事摹闽。” “怎么了褐健?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵付鹿,是天一觀的道長。 經(jīng)常有香客問我蚜迅,道長舵匾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任谁不,我火速辦了婚禮坐梯,結果婚禮上,老公的妹妹穿的比我還像新娘刹帕。我一直安慰自己吵血,他們只是感情好谎替,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蹋辅,像睡著了一般钱贯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上晕翠,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天喷舀,我揣著相機與錄音砍濒,去河邊找鬼淋肾。 笑死,一個胖子當著我的面吹牛爸邢,可吹牛的內(nèi)容都是我干的樊卓。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼杠河,長吁一口氣:“原來是場噩夢啊……” “哼碌尔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起券敌,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤唾戚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后待诅,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叹坦,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年卑雁,在試婚紗的時候發(fā)現(xiàn)自己被綠了募书。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡测蹲,死狀恐怖莹捡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情扣甲,我是刑警寧澤篮赢,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站琉挖,受9級特大地震影響荷逞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜粹排,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一种远、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧顽耳,春花似錦坠敷、人聲如沸妙同。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽粥帚。三九已至,卻和暖如春限次,著一層夾襖步出監(jiān)牢的瞬間芒涡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工卖漫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留费尽,地道東北人。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓羊始,卻偏偏與公主長得像旱幼,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子突委,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

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