[プロメテウス]はGPUクラスタのパフォーマンスの監視をkubernetes

手動でプログラムをインストール - アリのクラウドソリューションを(デプロイメントが失敗しました):

https://www.jianshu.com/p/1c7ddf18e8b2

 

手動でプログラムのインストール - (成功した展開が、唯一のCPUメモリおよびその他の監視情報を、何の監視情報GPUのはありません):

https://github.com/camilb/prometheus-kubernetes/tree/master

ヘルムインストールプログラム--GPU - モニタリング・ツール・ソリューション(導入成功):

参考ます。http://fly-luck.github.io/2018/12/10/gpu-monitoring-tools%20Prometheus/

对应githubのします。https://github.com/NVIDIA/gpu-monitoring-tools/tree/helm-charts

 

  1. GPU-監視ツール(以下、GMTと呼ばれる)プログラムのメトリック取得いくつかのセットを含みます。
    1. NVMLゴーバインディング(CのAPI)。
    2. DCGM輸出国(DCGM上プロメテウスメトリクス)。
  2. GMTの監視フレームワークプログラムのいくつかのセットを提供します。
    1. プロメテウスDaemonSet DCGM輸出、のみ収集と監視を直接使用します。
    2. 完全取得、モニタリング、アラーム、および他のグラフィカル要素を含むプロメテウスオペレータ(のNvidiaによって修飾)+ KUBE-プロメテウス、。

私たちは、監視フレームワークプログラムの第2のセットを使用して、このプログラムの機能はまだGPUマシンのCPUのために有効です。
証明、このプログラムは(等CPU、GPU、メモリ、ディスク、)ハードウェアをホスト同時に監視することができ、KubernetesにKubernetesコアコンポーネント(apiserver、コントローラマネージャ、スケジューラ、等)だけでなく、ビジネスサービスは、動作を実行します。

オペレータは何ですか

  1. ステートレスアプリケーションでは、リソース(例えば展開)ネイティブKubernetesはよくサポート自動スケーリング、自動再起動やアップグレードを受けます。
  2. そのようなデータベース、キャッシュ、モニタリング・システム、特定の用途に応じて異なる操作及びメンテナンス作業の必要性などのステートフル・アプリケーションのため。
  3. ユーザーが作成、構成、アプリケーションを管理することができ、サードパーティのリソースによって拡張オペレータ特定のアプリケーションのためのソフトウェア・パッケージへの運用・保守業務、およびKubernetes APIは、一般的にCRD一連のKubernetesコレクションが含まれています。
  4. 同様のリソースコントローラとKubernetesの対応関係は、オペレータコントローラは、ユーザに提示する要求に応じて、インスタンスの実際の数とインスタンスの状態は、ユーザが所望するが、パッケージの操作の詳細の多くと同様の効果に維持されます。

事前準備

ミラーリング

クラスタのすべてのノードにインポートし、次の画像:

1 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#あなたは、元のkubernetesは、リソースを作成するために2つのミラーを使用して、プロメテウスを構築するが、唯一の指標を得ることができ、何のドッキングアラーム監視を使用する場合
#ドッカーは、NVIDIA / dcgm-輸出を引っ張らない:1.4.6
#ドッカーはquay.io/prometheus/node-引きます輸出:v0.16.0

#演算子ベース画像
ドッカーがquay.io/coreos/prometheus-operator:v0.17.0プル
ドッカーがquay.io/coreos/hyperkube:v1.7.6_coreos.0プル

#輸出
ドッカーNVIDIA / dcgm-輸出を引きます。 1.4.3
ドッカープルquay.io/prometheus/node-exporter:v0.15.2

#プロメテウスコンポーネント
ドッカーquay.io/coreos/configmap-reload:v0.0.1引っ張る
ドッカーがquay.io/coreos/prometheus-config-reloader引っ張っ: v0.0.3
ドッカーはgcr.io/google_containers/addon-resizer:1.7引っ張っ
ドッカーがgcr.io/google_containers/kube-state-metrics:v1.2.0を引きます
ドッカーquay.io/coreos/grafana-watcher:v0.0.8はプル
ドッカーgrafana / grafanaを引っ張っ:5.0.0
ドッカーはquay.io/prometheus/prometheus:v2.2.1を引きます

 

ヘルムテンプレート

舵次のテンプレートをダウンロードし、解凍します。

1 
2
3
4
wgetのhttps://nvidia.github.io/gpu-monitoring-tools/helm-charts/kube-prometheus-0.0.43.tgz 
タールzxvf KUBE-プロメテウス-0.0.43.tgz
wgetのHTTPS://nvidia.github。 IO / GPU-監視ツール/舵-チャート/プロメテウス-オペレータ0.0.15.tgz
タールzxvfプロメテウス-オペレータ0.0.15.tgz

 

インストール手順

1.設定
ノードラベル

ラベルの付いたGPUノードの監視の必要性。

1
kubectlラベルなし<ノード名>ハードウェア型= NVIDIAGPU

 

外因性etcd

etcd開始前etcd外因性、すなわち、方法ではないetcd Kubernetesクラスタの初期化を開始すると、容器が、クラスタ外、etcdのクラスタのアドレスを指定する必要があります。
外因性は、HTTPを使用してIP etcd0、etcd1、etcd2、外部アクセスポート2379、直接アクセスとしetcd。

1
VimのKUBE-プロメテウス/チャート/輸出-KUBE-etcd / values.yaml

 

1 
2
3
4
5
6
7
#etcdPort:4001 
etcdPort:2379

#endpoints:[]
エンドポイント:[etcd0、etcd1、etcd2]
スキーム:のhttp
...

一方、グラフのデータgrafanaを挿入する必要が、注意してください:

  1. 465で行を追加します「」
  2. ライン465の前"title": "Crashlooping Control Plane Pods"パネル。
  3. インデントを維持するために465に次の行を追加します。
    1
    VimのKUBE-プロメテウス/チャート/ grafana /ダッシュボード/ kubernetes-クラスタのステータス-dashboard.json
1 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
{ 
ヌル、 "cacheTimeoutの"
"colorBackground":偽、
"colorValue":偽、
"色":
"RGBA(245、54、54、0.9)"、
"RGBA(237、129、40、100)"、
"RGBA(50、172、45、0.97)"
]、
"データソース": "プロメテウス"、
"編集可能":真、
"フォーマット": "パーセント"、
"ゲージ":{
"maxValueの":100、
"のminValue" :0、
"ショー":真、
"thresholdLabels":偽、
"thresholdMarkers":真
}、
"gridPos":{
"H":5、
"W":6、
「X ":0、
"Y":11
}、
"ID" 14、
"間隔":ヌル、
"リンク":[]、
"mappingType":1、
"mappingTypesの":[
{
"名前": "テキストに値が"、
"値":1
}、
{
"名前": "テキストする範囲"、
"値":2
}
]、
"maxDataPoints":100、
「nullPointMode 「: "接続"、
"nullText":ヌル、
"接尾辞": ""、
"postfixFontSize": "50%"、
"接頭辞": ""、
"prefixFontSize": "50%"、
"rangeMaps":[
{
"から": "NULL"、
"テキスト": "N / A"、
"を": "NULL"
}
]、
"スパークライン":{
"fillcolorの": "RGBA(31、118、189、0.18)"、
"フル":偽、
"lineColor": "RGB(31、120、193)"、
"表示":偽
}
"TableColumnの": ""、
"ターゲット":[
{
"exprは": "(和(アップ{ジョブ= \" KUBE-etcd \ "} == 1)/カウント(アップ{ジョブ= \" KUBE-etcd \ "}))* 100"、
"フォーマット": "time_series"、
"intervalFactor":2、
"REFID": "A"、
"ステップ":600
}
]、
"閾値": "50、80"、
「タイトル「: "外部etcdサーバUP"、
"タイプ": "singlestat"、
"valueFontSize": "80%"、
"valueMaps":[
{
"OP": "="、
"テキスト": "N / A"、
「値」:「ヌル」
}
]、
"VALUENAME": "現在"
}
暴露端口

暴露prometheus、alertmanager、grafana的访问端口,以备排障。这些端口需要能从开发VPC直接访问。

1
vim kube-prometheus/values.yaml

 

1
2
3
4
5
6
7
8
9
10
11
12
alertmanager:
...
service:
...
nodePort: 30779
type: NodePort
prometheus:
...
service:
...
nodePort: 30778
type: NodePort
1
vim kube-prometheus/charts/grafana/values.yaml
1
2
3
service:
nodePort: 30780
type: NodePort
告警接收器

配置告警接收器,通常我们选择在同一个集群内的ControlCenter Service来接收,并将告警信息转换格式后转发给IMS。

1
vim kube-prometheus/values.yaml

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
alertmanager:
config:
route:
receiver: 'webhook_test'
routes:
- match:
alertname: DeadMansSwitch
receiver: 'webhook_test'
- match:
severity: critical
receiver: 'webhook_test'
- match:
severity: warning
receiver: 'webhook_test'
receivers:
- name: 'webhook_test'
webhook_configs:
- send_resolved: true
# short for controlcenter.default.svc or controlcenter.default.svc.cluster.local
url: "http://controlcenter.default:7777/api/alerts"
告警规则

平台监控包括Node硬件(CPU、内存、磁盘、网络、GPU)、K8s组件(Kube-Controller-Manager、Kube-Scheduler、Kubelet、API Server)、K8s应用(Deployment、StatefulSet、Pod)等。
由于篇幅较长,因此将监控告警规则放在附录。

2. 启动
1
2
cd prometheus-operator
helm install . --name prometheus-operator --namespace monitoring
1
2
cd kube-prometheus
helm install . --name kube-prometheus --namespace monitoring
3. 清理
1
helm delete --purge kube-prometheus
1
helm delete --purge prometheus-operator

常见问题

无法暴露Kubelet metrics

在1.13.0版本的kubernetes未出现此问题。

  1. 对于1.13.0之前的版本,需将获取kubelet metrics的方式由https改为http,否则Prometheus的kubelet targets将down掉。[github issue 926]
    1
    vim kube-prometheus/charts/exporter-kubelets/templates/servicemonitor.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
spec:
endpoints:
# - port: https-metrics
# scheme: https
- port: http-metrics
scheme: http
...
# - port: https-metrics
# scheme: https
- port: http-metrics
scheme: http
path: /metrics/cadvisor
...
  1. 验证
    在Prometheus页面可以看到kubelet target。
无法暴露controller-manager及scheduler的metrics
方法一

针对Kubernetes v1.13.0。

  1. 将下述内容添加到kubeadm.conf,并在kubeadm初始化时kubeadm init –config kubeadm.conf。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    apiVersion: kubeadm.k8s.io/v1alpha3
    kind: ClusterConfiguration
    kubernetesVersion: 1.13.0
    networking:
    podSubnet: 10.244.0.0/16
    controllerManagerExtraArgs:
    address: 0.0.0.0
    schedulerExtraArgs:
    address: 0.0.0.0
    ...
  2. 为pod打上label。

    1
    2
    3
    4
    kubectl get po -n kube-system
    kubectl -n kube-system label po kube-controller-manager-<nodename> k8s-app=kube-controller-manager
    kubectl -n kube-system label po kube-scheduler-<nodename> k8s-app=kube-scheduler
    kubectl get po -n kube-system --show-labels
  3. 验证
    在Prometheus页面可以看到kube-controller-manager及kube-scheduler两个target。
    在grafana页面可以看到controller-manager及scheduler的状态监控。

方法二

guide
针对1.13.0之前的Kubernetes。

  1. 修改kubeadm的核心配置。
    1
    kubeadm config view

将上述输出保存为newConfig.yaml,并添加以下两行:

1
2
3
4
controllerManagerExtraArgs:
address: 0.0.0.0
schedulerExtraArgs:
address: 0.0.0.0

 

应用新配置:

1
kubeadm config upload from-file --config newConfig.yaml

 

  1. 为pod打上label。

    1
    2
    3
    4
    kubectl get po -n kube-system
    kubectl label po kube-controller-manager-<nodename> k8s-app=kube-controller-manager
    kubectl label po kube-scheduler-<nodename> k8s-app=kube-scheduler
    kubectl get po -n kube-system --show-labels
  2. 重建exporters。

    1
    kubectl -n kube-system get svc

可以看到以下两个没有CLUSTER-IP的Service:

1
2
kube-prometheus-exporter-kube-controller-manager
kube-prometheus-exporter-kube-scheduler

 

1
2
kubectl -n kube-system get svc kube-prometheus-exporter-kube-controller-manager -o yaml
kubectl -n kube-system get svc kube-prometheus-exporter-kube-scheduler -o yaml

将上述输出分别保存为newKubeControllerManagerSvc.yaml和newKubeSchedulerSvc.yaml,删除一些非必要信息(如uid、selfLink、resourceVersion、creationTimestamp等)后重建。

1
2
3
kubectl delete -n kube-system svc kube-prometheus-exporter-kube-controller-manager kube-prometheus-exporter-kube-scheduler
kubectl apply -f newKubeControllerManagerSvc.yaml
kubectl apply -f newKubeSchedulerSvc.yaml

 

  1. 确保Prometheus pod到kube-controller-manager和kube-scheduler的NodePort 10251/10252的访问是通畅的。

  2. 验证与方法一相同。

无法暴露coredns

在Kubernetes v1.13.0中,集群DNS组件默认为coredns,因此需修改kube-prometheus的配置,才能监控到DNS服务的状态。

方法一
  1. 修改配置中的selectorLabel值与coredns的pod标签对应。
    1
    2
    3
    kubectl -n kube-system get po --show-labels | grep coredns
    # 输出
    coredns k8s-app=kube-dns
1
vim kube-prometheus/charts/exporter-coredns/values.yaml
1
2
#selectorLabel: coredns
selectorLabel: kube-dns
  1. 重启kube-prometheus。

    1
    2
    helm delete --purge kube-prometheus
    helm install --name kube-prometheus --namespace monitoring kube-prometheus
  2. 验证
    在Prometheus可以看到kube-dns target。

方法二
  1. 修改pod的标签与配置中的一致。

    1
    kubectl -n kube-system label po
  2. 验证与方法一相同。

 

部署成功后需要使用port-forward才能访问到grafana面板,可视化看到监控效果:

https://blog.csdn.net/aixiaoyang168/article/details/81661459

おすすめ

転載: www.cnblogs.com/zealousness/p/11116764.html