Kubernetesシリーズkubernetesプロメテウス演算子

Kubernetesシリーズkubernetesプロメテウス演算子

オペレータは、アプリケーション固有のコントローラKubernetesのAPIを拡張するために開発さCoreOSは、キャッシュとシステムを監視、構成を作成するために使用され、MySQLなどの複雑なステートフル・アプリケーションを管理されています。プロメテウス演算子を含むいくつかのオペレータのコードの実装現在CoreOS公式申し出、

ショープロメテウス演算子以下のチャート

コアコントローラとして操作者が、それは、プロメテウス、のServiceMonitor、のAlertManagerと我々プロメテウスルール4つのリソースオブジェクトを作成し、オペレータ絶えず監視し、オブジェクトがリソースプロメテウスプロメテウスを作成することである4つの状態のリソース・オブジェクトを維持しますサーバーの監視、および私たちは輸出者の使用することを様々な抽象のServiceMonitorメトリクスデータのServiceMonitorプロメテウスは、我々がオーバープルデータにより提供されるインタフェースを介してである(輸出者は、この資料で説明してきたが、私たちのさまざまなサービスのためのメトリクスのツールを提供することです)。今、私たちは、別途各サービス用に作成されたルールを変更するモニタプロメテウスする必要はありません。直接管理オペレータを介してクラスタを監視します。ここでもマッチングサービスのServiceMonitorは、当社の内部クラスタラベルラベルを通過することができ、そして私たちのプロメテウスもレーベルよりのServiceMonitorを一致させることができますように、と言います

プロメテウス-operator.png-147.6kB

これは、コントローラが存在し、オペレータがプロメテウス、の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-スケジューラ

おすすめ

転載: blog.51cto.com/79076431/2480861