Kubernetesシリーズkubernetesプロメテウス演算子
オペレータは、アプリケーション固有のコントローラKubernetesのAPIを拡張するために開発さCoreOSは、キャッシュとシステムを監視、構成を作成するために使用され、MySQLなどの複雑なステートフル・アプリケーションを管理されています。プロメテウス演算子を含むいくつかのオペレータのコードの実装現在CoreOS公式申し出、
ショープロメテウス演算子以下のチャート
コアコントローラとして操作者が、それは、プロメテウス、のServiceMonitor、のAlertManagerと我々プロメテウスルール4つのリソースオブジェクトを作成し、オペレータ絶えず監視し、オブジェクトがリソースプロメテウスプロメテウスを作成することである4つの状態のリソース・オブジェクトを維持しますサーバーの監視、および私たちは輸出者の使用することを様々な抽象のServiceMonitorメトリクスデータのServiceMonitorプロメテウスは、我々がオーバープルデータにより提供されるインタフェースを介してである(輸出者は、この資料で説明してきたが、私たちのさまざまなサービスのためのメトリクスのツールを提供することです)。今、私たちは、別途各サービス用に作成されたルールを変更するモニタプロメテウスする必要はありません。直接管理オペレータを介してクラスタを監視します。ここでもマッチングサービスのServiceMonitorは、当社の内部クラスタラベルラベルを通過することができ、そして私たちのプロメテウスもレーベルよりのServiceMonitorを一致させることができますように、と言います
これは、コントローラが存在し、オペレータがプロメテウス、のServiceMonitor、のAlertManagerとPrometheusRule 4 CRDリソース・オブジェクトを作成し、連続的にモニターし、4つのCRDリソースオブジェクトの状態を維持するようにオペレータは、コア部であります
- リソースオブジェクトとしてプロメテウスプロメテウスサービスが存在し、
- ServiceMonitorリソースオブジェクトはの抽象輸出インターフェースメトリックデータを提供するように設計され、プロメテウスは、プルデータへのServiceMonitorインタフェースによって提供されるメトリックデータであります
- AlerManagerリソースオブジェクトコンポーネント対応のAlertManager
- PrometheusRuleリソースオブジェクトは、アラートルールファイルプロメテウスの例で使用されています
プロフィールCRD
Kubernetes1.7後にオープン拡張KubernetesのAPIのCRDカスタム二次開発のための完全なすべてのものは資源として見ることができるKubernetesに名前CustomResourceDefinition、増加のリソースを、私たちはあなたのために新しいCRD、Kubernetes APIサーバーを作成するときに新しいパスを作成するためのRESTfulな資源の開発の各バージョンは、我々は、APIのパスに応じたリソースのいくつかの種類の当社独自の定義を作成することができます。CRDは、名前空間であってもよいし、それはクラスタ全体のことができます。既存の組み込みオブジェクトと同じように作りのCRD scpoeフィールドの範囲、名前空間を削除するには、の名の下に、すべてのカスタムオブジェクトを削除します
単にCRDは、各リソースは、そのようなファイル仕様で定義されたYAMLなどのAPIオブジェクトの集合であり、Kubernetes Kubernetes APIのの拡張であるKubernetesのリソースオブジェクトの定義である、すべてのカスタムリソースを置きます同様Kubernetesは内蔵の資源利用Kubectl
したがって、クラスタ内のデータを監視し、それをモニタに直接Kubernetesリソース・オブジェクトとなり、のServiceMonitorはKubernetesサービスリソースオブジェクトであり、一致がLabelSelectorによってサービスクラスのServiceMonitorであってもよい、プロメテウスは、複数のServiceMonitor LabelSelectorにマッチすることができ、プロメテウスそして、のAlertManagerが自動的に設定変更を監視し、アラームを検知している、あなたはリロード動作考慮する必要はありません。
インストール
オペレータは、プロメテウスをネイティブにサポートされ、クラスタサービス検出、およびユニバーサルマウントによって監視することができます。オペレータによって提供されるYAMLファイルは、あなたがどこほんの数を変更する必要があり、直接使用することができプロメテウスに基本的にあります
#官方下载 (使用官方下载的出现镜像版本不相同请自己找镜像版本)
wget -P /root/ https://github.com/coreos/kube-prometheus/archive/master.zip
unzip master.zip
cd /root/kube-prometheus-master/manifests
プロメテウス-serviceMonitorKubelet.yaml(このファイルは、当社のサービスの収集メトリクスデータに使用されています)
変更する必要はありません
cat prometheus-serviceMonitorKubelet.yaml
APIVERSION:monitoring.coreos.com/v1の
種類:のServiceMonitor
メタデータ:
ラベル:
K8Sアプリ:kubelet
名:kubelet
名前空間:監視
仕様:
エンドポイント:
- bearerTokenFile:/var/run/secrets/kubernetes.io/serviceaccount/token
honorLabels:真の
間隔:1930
ポート:HTTPS-メトリクスの
スキーム:HTTPS
tlsConfig:
insecureSkipVerify:真 - bearerTokenFile:/var/run/secrets/kubernetes.io/serviceaccount/token
honorLabels:真
間隔:30代の
metricRelabelings:- アクション:ドロップ
正規表現:container_(network_tcp_usage_total | network_udp_usage_total | tasks_state | cpu_load_average_10s)
sourceLabels:- 名前の
パス:/メトリック/ cadvisor
ポート:HTTPS-メトリクスの
スキーム:HTTPS
tlsConfig:
insecureSkipVerify:trueに
K8S-アプリケーション:jobLabel
namespaceSelector:#一致する名前空間、この手段代表はk8s-で、KUBE-システムの名前空間に一致するように行くことアプリ= kubeletラベルは、ラベルが監視たちのプロメテウスにマッチします
matchNamesました:
- 名前の
- システム-KUBE
セレクター:#3行は、当社のサービス一致させるために使用されている
:matchLabels
K8S-アプリケーション:kubeletを这里修改完毕后,我们就可以直接创建配置文件
[ルートHUOBAN-K8S-MASTER01マニフェスト@]#は-f ./適用kubectl
名前空間/変わらず監視
customresourcedefinition.apiextensions.k8s.io/alertmanagers.monitoring.coreos.com変わらない
customresourcedefinition.apiextensions.k8s.io/podmonitors.monitoring.coreosを.COM変わらず
customresourcedefinition.apiextensions.k8s.io/prometheuses.monitoring.coreos.com変わらない
customresourcedefinition.apiextensions.k8s.io/prometheusrules.monitoring.coreos.com変わらず
customresourcedefinition.apiextensions.k8s.io/servicemonitors.monitoring.coreos.comそのまま
clusterrole.rbac.authorization.k8s.io/prometheus-operator変わらず
clusterrolebinding.rbac.authorization.k8s.io/prometheus-operator変わらない
deployment.apps /プロメテウス、オペレータ変わらず
サービス/プロメテウス-オペレータ変わらない
serviceaccount /プロメテウス-オペレータ変わら
作成servicemonitor.monitoring.coreos.com/prometheus-operator
作成alertmanager.monitoring.coreos.com/main
秘密/のAlertManager-メイン変わらない
サービス/のAlertManager-メイン変わらない
serviceaccount / alertmanager-メイン変わらず
servicemonitor.monitoring.coreos.com/alertmanager作成した
秘密/のgrafana-データソース変わらない
configmap / grafana-ダッシュボード-apiserver変わらない
configmap / grafana-ダッシュボード・コントローラ・マネージャー変わらない
configmap / grafana-ダッシュボード-K8S-リソース・クラスタ変わらない
configmap / grafana-ダッシュボード-K8S-リソース名前空間変わらない
configmap / grafana-ダッシュボード-K8S-資源ノード変わらず
configmap / grafana-ダッシュボード-K8S-リソース・ポッド変わらない
configmap / grafana-ダッシュボード-K8S-リソース・ワークロード変わらない
configmap / grafana-ダッシュボード-K8S-リソース・ワークロードの名前空間変わらない
configmap / grafana-ダッシュボード-kubelet変わらない
configmap / grafana-ダッシュボードノードクラスタRSRC使用不変
configmap / grafana-ダッシュボードノード-RSRC使用不変
configmap / grafana、ダッシュボード、ノード不変
configmap / grafana-ダッシュボードpersistentvolumesusage不変
configmap / grafana-ダッシュボードポッド不変
configmap / grafana-ダッシュボード・プロメテウス・リモート・ライト変わらない
configmap / grafana-ダッシュボード-プロメテウス変わらない
configmap / grafana-ダッシュボードプロキシそのまま
変わらないconfigmap / grafana-ダッシュボード-スケジューラ
configmap / grafana-ダッシュボード-statefulset変わらない
configmap / grafana-ダッシュボード変わらない
deployment.apps / grafanaに構成
/ grafana変わらないサービス
serviceaccount / grafana変わらない
servicemonitor.monitoring.coreos.com/grafana作成
clusterrole.rbac.authorization.k8s.io/kube-状態メトリック変わらない
clusterrolebinding.rbac.authorization.k8s.io/kube-state-metricsそのまま
変わらずdeployment.apps / KUBE-状態メトリック
role.rbac.authorization.k8s.io/kube-state-metricsをそのまま
rolebinding.rbac。そのままauthorization.k8s.io/kube-state-metrics
サービス/ KUBE-状態メトリック変わらない
serviceaccount / KUBE-状態メトリック変わらず
servicemonitor.monitoring.coreos.com/kube-state-metrics作成
clusterrole.rbac.authorization.k8s.io/node-exporter変わらない
clusterrolebinding.rbac.authorization.k8s.io/node-exporter変わらない
daemonset.apps /ノード・輸出国で構成されました
サービス/ノード・輸出変わらない
serviceaccount /ノード・輸出変わらない
servicemonitor.monitoring.coreos.com/node-exporterが作成
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io変わらない
clusterrole.rbac.authorization.k8s.io/をプロメテウスアダプタ変わらない
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-readerそのまま
変わらずclusterrolebinding.rbac.authorization.k8s.io/prometheus-adapter
clusterrolebinding.rbac.authorization.k8s.io/resource-metrics:system:auth-delegator変わらず
clusterrole.rbac.authorization.k8s.io/resource-metrics-server-resources変わらない
configmap /アダプタ-CONFIG変わらない
deployment.appsを/ prometheus-アダプタが設定され
そのままrolebinding.rbac.authorization.k8s.io/resource-metrics-auth-reader
サービス/プロメテウス-アダプタ変わらない
serviceaccount /プロメテウスアダプタ変わらない
clusterrole.rbac.authorization.k8s.io/prometheus-k8s変わらない
clusterrolebinding.rbac。 authorization.k8s.io/prometheus-k8s変わらず
prometheus.monitoring.coreos.com/k8sが作成
変わらずrolebinding.rbac.authorization.k8s.io/prometheus-k8s-config
そのままrolebinding.rbac.authorization.k8s.io/prometheus-k8s
rolebinding.rbac.authorization.k8s.io/prometheus-k8s変わらない
rolebinding.rbac.authorization.k8s.io/prometheus-k8s変わらない
role.rbac.authorization.k8s。 IO /プロメテウス-K8S-CONFIG変わらない
role.rbac.authorization.k8s.io/prometheus-k8sそのまま
変わらずrole.rbac.authorization.k8s.io/prometheus-k8s
変わらないrole.rbac.authorization.k8s.io/prometheus-k8sを
prometheusrule.monitoring.coreos.com/prometheus-k8s-rulesは、作成
サービス/プロメテウス-K8Sそのまま
変わらないserviceaccount /プロメテウス-K8Sを
servicemonitor.monitoring.coreos.com/prometheusが作成した
servicemonitor.monitoring.coreos.com/kube-apiserver作成します
servicemonitor.monitoring.coreos.com/coredns作成
servicemonitor.monitoring.coreos.com/kube-controller-manager作成
servicemonitor.monitoring.coreos.com/kube-scheduler作成
servicemonitor.monitoring.coreos.com/kubeletを作成します当我们部署成功之后,我们可以查看一下crd,yaml文件会自动帮我们创建crd文件。只有我们创建了crd文件,我们的serviceMonitor才会有用
[ルート@ HUOBAN-K8S-MASTER01マニフェスト]#kubectl GET CRD
で作成されたNAME
alertmanagers.monitoring.coreos.com 2019-10-18T08:32:57Z
podmonitors.monitoring.coreos.com 2019-10-18T08:32:58Z
prometheuses .monitoring.coreos.com 2019-10-18T08:32:58Z
prometheusrules.monitoring.coreos.com 2019-10-18T08:32:58Z
servicemonitors.monitoring.coreos.com 2019-10-18T08:32:59Z其他的资源文件都会部署在一个命名空间下面,在monitoring里面是operator Pod对应的列表
監視[HUOBAN-K8S-MASTER01マニフェスト@ルート]#kubectl GETポッド-n
NAME READY状況は、AGEの再起動
のAlertManagerメイン-0 2/2ランニング0 11メートル
のAlertManagerメイン-1 2/2ランニング0 11メートル
のAlertManagerメイン-2 2 / 2 0 11メートル走行
0 11メートル走行grafana-55488b566f-g2sm9 1/1
0 11メートルランニングKUBEステートメトリックff5cb7949-wq7pb 3/3
ノード輸出-6wb5v 2/2 0 11メートルランニング
ノード輸出-785rf 2/2 0 11メートルの実行
ノード輸出-7kvkp 2/2は0 11メートルの実行
0 11メートル実行ノード輸出-85bnh 2/2
0 11メートル実行ノード輸出-9vxwf 2/2
0 11メートルの実行ノード輸出-bvf4r 2/2
ノード輸出0 11メートル実行中の2/2を-j6d2d
0 11メートルの実行プロメテウスアダプタ668748ddbd-d8k7f 1/1
プロメテウス-K8S-0 3/3 1つの11メートルを実行します
プロメテウス-K8S-1 3/3 1 11メートルの実行
0 11メートルを実行プロメテウス・オペレータ55b978b89-qpzfk 1/1其中prometheus和alertmanager采用的StatefulSet,其他的Pod则采用deployment创建
[ルート@ HUOBAN-K8S-MASTER01マニフェスト]#kubectl GET deployments.apps -n監視
NAME READY UP-TO-DATE AVAILABLE AGEの
grafana 1/1 1 1 12メートル
KUBE-状態メトリック1/1 1 1 12メートルの
プロメテウス-アダプタ1 / 1 1 1 12メートルの
プロメテウスオペレータ1/1 1 1 12メートル
#kubectl GET statefulsets.apps -N監視[ルートHUOBAN-K8S-MASTER01マニフェスト@]
NAME READY年齢
のAlertManagerメイン3/3 11メートルの
プロメテウス-K8S 2/2 11メートル
- アクション:ドロップ
私たちのプロメテウスとのAlertManagerファイルを監視することで、当社のコアファイルで#プロメテウス、オペレータ、
现在创建完成后我们还无法直接访问prometheus
[HUOBAN-K8S-MASTER01マニフェスト@ルート]#kubectl GET SVC -n監視| egrepの"プロメテウス| grafana | alertmanage"
のAlertManager-メインCLUSTERIP 10.96.226.38 <なし> 9093 / TCP 3m55s
のAlertManager-操作CLUSTERIPなし<なし> 9093 / TCP、9094 / TCP、9094 / UDP 3m10s
grafana CLUSTERIP 10.97.175.234 <なし> 3000 / TCP 3m53s
プロメテウスアダプタCLUSTERIP 10.96.43.155 <なし> 443 / TCP 3m53s
プロメテウス-K8S CLUSTERIP 10.105.75.186 <なし> 9090 / TCPの3m52s
プロメテウス・運営CLUSTERIPなし<なし> 9090 / TCP 3メートル
プロメテウスオペレータCLUSTERIPなし<なし> 8080 / TCP 3m55s
由于默认的yaml文件svc采用的是ClusterIP,我们无法进行访问。这里我们可以使用ingress进行代理,或者使用node-port临时访问。我这里就修改一下svc,使用node-port进行访问
#私が編集を使用して変更、またはYAMLを適用下にあるファイルを修正するためにここにいます
プロメテウスkubectl-K8S監視-n編集SVC
これはCLUSTERIPがあるため、SVCを修正するために#(注)は、プロメテウス-K8Sある
kubectl編集SVC -n監視grafanaの
編集SVC -n監視のAlertManager-メインkubectl
#3のファイルを変更する必要があるが、間違って変更しません。修正CLUSTERIPあります
...
タイプのは:NodePort#修正この行はNodePortです
prometheus-k8s、grafana和alertmanager-main都是只修改type=clusterIP这行
![image.png](https://upload-images.jianshu.io/upload_images/6064401-efe1ddb97a7d8c65.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
修改完毕后,我们在查看svc,就会发现这几个都包含node端口了,接下来在任意集群节点访问即可
egrepの|#kubectl GET SVC -n監視[HUOBAN-K8S-MASTER01マニフェスト@ルート] "プロメテウス| grafana | alertmanage"
のAlertManager-メインNodePort 10.96.226.38 <なし> 9093:32477 / TCP 13メートル
のAlertManager-操作CLUSTERIPなし<なし> 9093 / TCP、9094 / TCP、9094 / UDP 12メートル
grafana NodePort 10.97.175.234 <なし> 3000:32474 / TCP 13メートル
プロメテウスアダプタCLUSTERIP 10.96.43.155 <なし> 443 / TCP 13メートル
プロメテウス-K8S NodePort 10.105.75.186 <なし> 9090:32489 / TCP 13メートル
プロメテウス-操作CLUSTERIPなし<なし> 9090 / TCP 12メートル
プロメテウスオペレータCLUSTERIPなし<なし> 8080 / TCP 13メートル
接下来我们查看prometheus的Ui界面
[HUOBAN-K8S-MASTER01マニフェスト@ルート]#kubectl GET SVC -n監視| grepのプロメテウス-K8S
プロメテウス-K8S NodePort 10.105.75.186 <なし> 9090:32489 / TCPの19メートル
#ホスト名[HUOBAN-K8S-MASTER01マニフェスト@ルート] -i
172.16.17.191
我们访问的集群172.16.17.191:32489
![image.png](https://upload-images.jianshu.io/upload_images/6064401-90275be27c1d9f95.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
这里kube-controller-manager和kube-scheduler并管理的目标,其他的都有。这里的就是和官方yaml文件里面定义的有关系
![image.png](https://upload-images.jianshu.io/upload_images/6064401-80b0213e740d6398.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
配置文件解释
vimのプロメテウス-serviceMonitorKubeScheduler.yaml
apiVersion:monitoring.coreos.com/v1 #kubectl GET CRD変更せずに、含ま
種類:のServiceMonitor
メタデータ:
ラベル:
K8S-のApp:KUBE-スケジューラ
名:KUBE-スケジューラ#名前が定義された
名前空間を:監視
:スペック
エンドポイント:
- 30代:インターバル
ポート:ここで定義されたHTTP-#メトリックは、SVCのポート名です
K8S-アプリケーション:jobLabel
trueの場合、すべての名前空間のクエリ戻る:namespaceSelector:#は、名前空間の一致を示すには、configure任意の
matchNames:- KUBE-システム
セレクター:これはおそらく手段マッチング#1 KUBE-システムの名前空間K8S-アプリ= SVC KUBE-スケジューラタグ持つこと
matchLabels:
K8S-のApp:KUBE-スケジューラ
- KUBE-システム