k8sでのPrometheusの導入と実践的な運用の上級記事

k8sでのPrometheusの導入と実践的な運用の上級記事
1. 概要

Prometheus は、アプリケーションとシステムのメトリック データを収集および記録するためのオープン ソースの監視およびアラート ツールです。これは、Kubernetes クラスター内のコンテナ化されたアプリケーションを監視するのに特に適しています。 Kubernetes クラスターで Prometheus と共によく使用されるコンポーネントは、Prometheus Operator と Grafana です。

Kubernetes で Prometheus を使用する主な手順は次のとおりです。

Prometheus Operator をインストールします。Prometheus Operator は、Prometheus の展開と管理を簡素化する Kubernetes コントローラーです。 Kubernetes に Prometheus Operator をデプロイすることで、Prometheus インスタンスのセットアップと管理を自動化できます。

Prometheus インスタンスを構成する: Prometheus Operator は、Kubernetes カスタム リソース定義 (CRD) を通じて Prometheus インスタンスを作成および管理します。 PrometheusRule CRD を使用して監視ルールを定義し、ServiceMonitor CRD を使用して監視する必要があるターゲット (Kubernetes サービスなど) を定義できます。

ダッシュボードの構成とインポート: Grafana は、監視メトリックを視覚化するために Prometheus と併用されることがよくあります。 Prometheus の定義済みダッシュボードまたはカスタム ダッシュボードを Grafana にインポートして、メトリック データを表示および分析できます。

アプリケーションとシステムの監視: Prometheus は、HTTP エンドポイントを介してターゲット アプリケーションとシステムからメトリック データを取得します。アプリケーションで Prometheus 形式のメトリック データを公開し、ServiceMonitor で監視するターゲットを定義できます。

アラート設定: Prometheus は、特定のしきい値または条件に達したときにアラートがトリガーされるようにアラート ルールを設定することもサポートしています。アラート ルールは PrometheusRule CRD として定義できます。

ご使用の環境での Prometheus および Prometheus Operator の構成と使用方法は、バージョンと特定の Kubernetes ディストリビューションによって異なる場合があることに注意してください。より詳細で正確なガイダンスについては、特定の環境の公式ドキュメントとチュートリアルを参照してください。

写真

2. 一般的な監視ツール

次のツールを使用して、Kubernetes クラスターで監視とメトリック収集を実装し、クラスター内のさまざまなリソースとアプリケーションのパフォーマンスを監視できます。

  • Heapster: Heapster は、CPU、メモリ、ネットワークなどのリソース使用状況データを収集して集計する Kubernetes クラスターのリソース監視ツールです。
  • Metrics Server: Metrics Server は、Kubernetes によって公式に提供される軽量のインジケーター コレクターです。ノードやポッドなどのリソースのリアルタイムなパフォーマンス指標を提供するために使用され、水平自動拡張などに使用できます。
  • Prometheus Operator: Prometheus Operator は、Prometheus および関連する監視コンポーネントを管理およびデプロイするための Kubernetes コントローラーです。 Prometheus インスタンス、ServiceMonitor、その他の構成を自動的に作成および管理できます。
  • kube-prometheus または kube-prometheus-stack: これは、Prometheus に基づく Kubernetes クラスター監視ソリューションです。 Kubernetes クラスターとアプリケーションの包括的な監視を実現するために、Prometheus、Alertmanager、Grafana などをデプロイおよび管理するための一連のコンポーネントが含まれています。

heapster-》メトリクスサーバー-》プロメテウスオペレーター-》kube-プロメテウス-》kube-プロメテウススタック

  • prometheus-operator GitHub アドレス: https://github.com/prometheus-operator/prometheus-operator
  • kube-prometheus GitHub アドレス: https://github.com/prometheus-operator/kube-prometheus
  • kube-prometheus-stack GitHub アドレス: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack

これらのツールを組み合わせることで、Kubernetes クラスター内のリソース使用率、アプリケーションのパフォーマンス、サービスの可用性などの指標を監視するための完全な監視システムを構築できます。 Kubernetes コミュニティのツールとテクノロジーは時間の経過とともに変化し、進化する可能性があるため、これらのツールを使用する際には、最新の情報とベスト プラクティスについて関連ドキュメントを参照することをお勧めします。

1) kube-prometheus と kube-prometheus-stack の違い

「kube-prometheus」と「kube-prometheus-stack」は本質的に同じプロジェクトですが、時期やバージョンによって名前が異なります。 「kube-prometheus-stack」は「kube-prometheus」プロジェクトの更新バージョンであり、より多くの機能、改善、修正を提供します。

  • 当初、このプロジェクトは「kube-prometheus」と呼ばれていましたが、時間の経過とともにプロジェクト チームはプロジェクトに多くの改善と拡張を加え、提供される包括的な監視ソリューションをより適切に反映するために「kube-prometheus-stack」に名前を変更しました。
  • 「kube-prometheus-stack」(または単に「kube-prometheus」) は、Kubernetes クラスター内の Prometheus 監視システムと関連コンポーネントをデプロイおよび管理するための包括的なソリューションです。 Prometheus、Grafana、Alertmanager などの一連のコンポーネントを統合し、事前設定された監視ルールとダッシュボード、ワンクリック展開機能も含まれています。ユーザーは、各コンポーネントを 1 つずつ構成する必要なく、「kube-prometheus-stack」をデプロイすることで、包括的な Kubernetes クラスター監視システムをすぐに開始できます。

要約すると、「kube-prometheus-stack」は「kube-prometheus」プロジェクトの更新バージョンであり、より多くの機能と改善が提供されています。これは、Kubernetes 環境での迅速な導入と使用に適した、便利な包括的な監視ソリューションです。

2) Prometheus Operatorとkube-prometheusまたはkube-prometheus-stackの比較

「Prometheus Operator」と「kube-prometheus」(または「kube-prometheus-stack」) はどちらも、Kubernetes クラスターで Prometheus 監視システムをデプロイおよび管理するためのツールです。類似点もありますが、相違点もあります。主な機能と相違点の比較は次のとおりです。

プロメテウスオペレーター:

  • コア機能: Prometheus Operator は、Prometheus および関連コンポーネントの構成とデプロイメントの管理専用の Kubernetes コントローラーです。 Prometheus インスタンス、ServiceMonitor、Alertmanager、PrometheusRule などの Kubernetes リソースを自動的に作成および管理します。
  • 宣言型構成: Prometheus Operator は、カスタム リソース定義 (CRD) を通じて宣言型構成を実装します。 Prometheus や ServiceMonitor などのリソース オブジェクトを作成して、監視構成を定義できます。 Operator はこれらの定義に基づいて関連リソースを自動的に作成および管理します。
  • 自動検出: Prometheus Operator は、各監視ターゲットを手動で構成する必要なく、Kubernetes 内のサービス、ポッド、名前空間などのリソースの自動検出をサポートします。
  • エコシステム統合: Prometheus Operator は Grafana および Alertmanager と統合され、他の監視ツールとも簡単に統合できます。
  • 柔軟性: Prometheus Operator を使用すると、さまざまな要件と構成に基づいて複数の Prometheus インスタンスを選択的にデプロイでき、各インスタンスを特定の監視タスク用に構成できます。

kube-prometheus または kube-prometheus-stack:

  • 包括的なソリューション: kube-prometheus (または kube-prometheus-stack) は、Prometheus、Grafana、Alertmanager、およびいくつかの事前構成された監視ルールとダッシュボードなどの一連のコンポーネントを統合した完全な監視ソリューションです。
  • クイック スタート: Kube-prometheus はワンクリック デプロイメント メソッドを提供します。これは、各コンポーネントを 1 つずつ構成することなく、完全な監視システムをすばやく開始するのに適しています。
  • 事前設定されたルールとダッシュボード: kube-prometheus は、監視機能をすばやく有効にするためのいくつかのデフォルトの監視ルールと Grafana ダッシュボードを提供します。
  • 統合と拡張: kube-prometheus は複数のコンポーネントを統合しているため、このソリューションを使用して、必要に応じてカスタマイズおよび拡張できる包括的な監視システムを迅速に展開できます。

一般的に、Prometheus Operator は Prometheus と関連リソースの管理と自動構成に重点を置いていますが、kube-prometheus または kube-prometheus-stack はより包括的なソリューションであり、完全な監視システムを迅速に開始するのに適しており、特に Prometheus を使い始めたばかりのユーザーにとっては、構成の複雑さを軽減できます。実際のニーズや状況に応じて適切なツールを選択できます。

3. Prometheus オペレーターのアーキテクチャ

写真

Prometheus Operator は、Kubernetes クラスター内の Prometheus 監視システムの展開と管理を自動化するコントローラーです。宣言型の構成アプローチを使用して、Kubernetes カスタム リソース定義 (CRD) を通じて Prometheus、ServiceMonitor、Alertmanager、PrometheusRule などのリソース オブジェクトを定義および管理します。以下は Prometheus Operator アーキテクチャの説明です。

  • Prometheus Operator コントローラー: Prometheus Operator コントローラーは、Kubernetes クラスターで実行されるコントローラーであり、Prometheus 関連のカスタム リソースの変更を監視し、変更に基づいて対応する操作を自動的に実行します。
  • Prometheus CRD: Prometheus Operator は、Prometheus インスタンスの構成を定義するために使用されるカスタム リソース定義 (CRD) Prometheus を導入します。 Prometheus CRD では、監視ルール、データ ストレージ、データ保持ポリシーなどを定義できます。
  • ServiceMonitor CRD: ServiceMonitor は、監視対象のアプリケーションを定義する別のカスタム リソースです。各 ServiceMonitor は 1 つ以上の Kubernetes サービスに関連付けられており、Prometheus Operator はこれらの関連サービスを自動的に検出し、適切な監視構成を生成します。
  • Alertmanager CRD: Prometheus や ServiceMonitor と同様に、Prometheus Operator も Alertmanager インスタンスの構成を定義するための Alertmanager カスタム リソースをサポートしています。
  • PrometheusRule CRD: PrometheusRule カスタム リソースは、Prometheus のアラート ルールを定義するために使用されます。これらのルールを使用すると、Prometheus でどのアラートを生成するかを指定できます。
  • 自動検出と構成生成: Prometheus Operator は、定義された ServiceMonitor と PrometheusRule に基づいて、対応する監視構成を自動的に検出して生成します。サービス作成、削除、ラベル変更、ルール更新など、Kubernetes の変更を監視し、Prometheus 構成ファイルを自動的に更新します。
  • Prometheus のデプロイメント: Prometheus Operator は、Prometheus カスタム リソースの定義に基づいて、Kubernetes クラスターに Prometheus インスタンスをデプロイします。オペレーターは、構成、Pod ライフサイクル、バージョン アップグレードなどの管理を担当します。
  • Grafana および Alertmanager との統合: Prometheus Operator は通常、Grafana および Alertmanager とも統合されます。 Grafana および Alertmanager のカスタム リソースを構成して、これらのコンポーネントを自動的にデプロイおよび構成できます。

ServiceMonitor の機能と例:

ServiceMonitor は、監視対象のアプリケーション サービスを定義する Prometheus Operator のカスタム リソース定義 (CRD) です。その役割は、Prometheus によって監視する必要があるサービスと、それらの監視方法を指定することです。 Prometheus Operator での ServiceMonitor の使用は、監視対象のサービスを自動的に検出し、適切な監視構成を生成できるため、非常に重要です。

ServiceMonitor の説明例を次に示します。

Kubernetes クラスターで「my-app」という名前のアプリケーションが実行されており、Prometheus でこのアプリケーションのパフォーマンス メトリックを監視するとします。まず、アプリケーションの監視構成を定義するために、ServiceMonitor カスタム リソースを作成する必要があります。

 apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: my-app-monitor namespace: default spec: selector: matchLabels: app: my-app endpoints: - port: web interval: 30s

上記の例では、

  • apiVersion と kind は、これが ServiceMonitor カスタム リソースであることを指定します。
  • メタデータ内の名前は、ServiceMonitor オブジェクトの名前を指定します。
  • spec セクションでは監視構成を定義します。セレクターでは、matchLabels を使用して、ラベル app: my-app を持つ Pod を選択します。つまり、そのラベルが付いた Pod のみが監視されます。
  • エンドポイントでは、監視するエンドポイント情報を定義します。この例では、「web」という名前のポートを監視し、データを取得する間隔を 30 秒に指定します。

この ServiceMonitor オブジェクトを作成すると、Prometheus Operator はラベル app: my-app を持つ Pod を自動的に検出し、Prometheus 構成で対応する監視ジョブを生成します。このようにして、Prometheus は監視とアラートのためにこれらのポッドのインジケーター データを定期的にキャプチャします。

Prometheus Operator を使用すると、シンプルな宣言型構成を通じて Prometheus 監視システムを自動的に管理および拡張できるため、監視の展開とメンテナンスがよりシンプルかつ信頼性が高まります。

4. k8sでPrometheusバケットを素早く構築する

当初は、Prometheus Operator が登場する前の k8s 監視ソリューションであった Heapster+cAdvisor によって監視されていました。その後、Prometheus Operator が登場しましたが、現在では Prometheus Operator には完全な機能が含まれなくなり、完全なソリューションは kube-prometheus (または kube-prometheus-stack) になりました。

「kube-prometheus」と「kube-prometheus-stack」は本質的に同じプロジェクトですが、時期やバージョンによって名前が異なります。 「kube-prometheus-stack」は「kube-prometheus」プロジェクトの更新バージョンであり、より多くの機能、改善、修正を提供します。

kube-prometheus-stack GitHub アドレス: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack

1) k8s環境のインストール

k8s 環境をインストールする前に、たくさんのドキュメントを書きました。以下の記事を参考にしてください。

  • 【クラウドネイティブ】k8sオフラインデプロイ解説と実践操作
  • [クラウドネイティブ] k8s環境の迅速な導入(1時間以内に導入)

2) ヘルムをインストールする

ダウンロードアドレス: https://github.com/kubernetes/helm/releases

 # 下载包wget https://get.helm.sh/helm-v3.7.1-linux-amd64.tar.gz # 解压压缩包tar -xf helm-v3.7.1-linux-amd64.tar.gz # 制作软连接ln -s /opt/helm/linux-amd64/helm /usr/local/bin/helm # 验证helm version helm help

3) [最初のインストール方法] 直接インストール (kube-prometheus)

最初の方法は、マニフェスト パッケージ内の YAML をダウンロードし、kubectl を通じてデプロイすることです。

1. kube-prometheusをダウンロードする

ダウンロードアドレス: https://github.com/prometheus-operator/kube-prometheus

 git clone https://github.com/prometheus-operator/kube-prometheus.git cd kube-prometheus

[注意] リリース 0.11 以降では、新しい NetworkPolicy が追加されます。デフォルトでは、それ自体によるアクセスが許可されます。 NetworkPolicy を理解している場合は、デフォルトのルールを変更できます。 ls manifests/*networkPolicy* を実行すると表示できます。変更しないと、NodePort タイプの変更に影響し、アクセスできなくなります。 NetworkPolicy がわからない場合は、削除するだけでかまいません。

2. 画像ソースを変更する

外部の画像ソースから取得できない画像もあります。ここでは、prometheus-operator、prometheus、alertmanager、kube-state-metrics、node-exporter、prometheus-adapter のイメージソースを国内のイメージソースに変更します。ここではUSTCのミラーソースを使用しています。

 # 查找grep -rn 'quay.io' * # 批量替换sed -i 's/quay.io/quay.mirrors.ustc.edu.cn/g' `grep "quay.io" -rl *` # 再查找grep -rn 'quay.io' * grep -rn 'image: ' *

3. サービス構成タイプをNodePortに変更する

外部からprometheus、alertmanager、grafanaにアクセスするために、prometheus、alertmanager、grafanaのサービスタイプをNodePortタイプに変更します。

【1】Prometheusサービスを変更する
# 设置对外访问端口,增加如下两行,完整配置也贴出来了。 # type: NodePort # nodePort: 30090 vi manifests/prometheus-service.yaml

完全な構成

apiVersion: v1 kind: Service metadata: labels: app.kubernetes.io/component: prometheus app.kubernetes.io/instance: k8s app.kubernetes.io/name: prometheus app.kubernetes.io/part-of: kube-prometheus app.kubernetes.io/version: 2.46.0 name: prometheus-k8s namespace: monitoring spec: type: NodePort ports: - name: web port: 9090 targetPort: web nodePort: 30090 - name: reloader-web port: 8080 targetPort: reloader-web selector: app.kubernetes.io/component: prometheus app.kubernetes.io/instance: k8s app.kubernetes.io/name: prometheus app.kubernetes.io/part-of: kube-prometheus sessionAffinity: ClientIP
【2】Grafanaサービスを変更する

完全な構成

# 设置对外访问端口,增加如下两行,完整配置也贴出来了。 # type: NodePort # nodePort: 30300 vi manifests/grafana-service.yaml

完全な構成

apiVersion: v1 kind: Service metadata: labels: app.kubernetes.io/component: grafana app.kubernetes.io/name: grafana app.kubernetes.io/part-of: kube-prometheus app.kubernetes.io/version: 9.5.3 name: grafana namespace: monitoring spec: type: NodePort ports: - name: http port: 3000 targetPort: http nodePort: 30300 selector: app.kubernetes.io/component: grafana app.kubernetes.io/name: grafana app.kubernetes.io/part-of: kube-prometheus
【3】alertmanagerサービスを変更する
# 设置对外访问端口,增加如下两行,完整配置也贴出来了。 # type: NodePort # nodePort: 30093 vi manifests/grafana-service.yaml

完全な構成

apiVersion: v1 kind: Service metadata: labels: app.kubernetes.io/component: alert-router app.kubernetes.io/instance: main app.kubernetes.io/name: alertmanager app.kubernetes.io/part-of: kube-prometheus app.kubernetes.io/version: 0.25.0 name: alertmanager-main namespace: monitoring spec: type: NodePort ports: - name: web port: 9093 targetPort: web nodePort: 30093 - name: reloader-web port: 8080 targetPort: reloader-web selector: app.kubernetes.io/component: alert-router app.kubernetes.io/instance: main app.kubernetes.io/name: alertmanager app.kubernetes.io/part-of: kube-prometheus sessionAffinity: ClientIP

4. インストールを開始する

kubectl apply --server-side -f manifests/setup kubectl wait \ --for cnotallow=Established \ --all CustomResourceDefinition \ --namespace=monitoring kubectl apply -f manifests/ # 查看kubectl get all -n monitoring

写真

[ヒント] 上記のイメージのダウンロードが失敗した場合は、次のアドレスを使用してダウンロードするか、hub.docker.com にアクセスしてダウンロードすることができます。

ミラーパッケージもこちらからご利用いただけます

リンク: https://pan.baidu.com/s/10ksK1OtKwlvZqbExKmZgLw?pwd=bcu6 抽出コード: bcu6

6. ブラウザアクセス

プロメテウス: http://ip:30090/

写真

Grafana: http://ip:30300/デフォルトアカウント/パスワード: admin/admin

写真

アラートマネージャー: http://ip:30093/

写真

5. アンインストール

kubectl delete --ignore-not-found=true -f manifests/ -f manifests/setup

4) [2番目のインストール方法] helm3経由でkube-prometheus-stackのインストールを開始する

1. インストールパッケージをダウンロードする

# 添加repo helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update # 查询helm search repo prometheus-community/prometheus # 拉包helm pull prometheus-community/kube-prometheus-stack --versinotallow=48.4.0 # 解包tar -xf kube-prometheus-stack-48.4.0.tgz

2. 設定を変更する

必要な画像を確認してください。事前にイメージをダウンロードしておくことをお勧めします。そうしないと、イメージのダウンロードに失敗したためにインストールが失敗する可能性があります。

 grep -A3 'image:' kube-prometheus-stack/values.yaml

写真

3. インストールを開始する

helm install mykube-prometheus-stack kube-prometheus-stack \ -n kube-prometheus-stack --create-namespace \ --set prometheus-node-exporter.hostRootFsMount=false \ --set prometheus.ingress.enabled=true \ --set prometheus.ingress.hosts='{prometheus.k8s.local}' \ --set prometheus.ingress.paths='{/}' \ --set prometheus.ingress.pathType=Prefix \ --set alertmanager.ingress.enabled=true \ --set alertmanager.ingress.hosts='{alertmanager.k8s.local}' \ --set alertmanager.ingress.paths='{/}' \ --set alertmanager.ingress.pathType=Prefix \ --set grafana.ingress.enabled=true \ --set grafana.ingress.hosts='{grafana.k8s.local}' \ --set grafana.ingress.paths='{/}' \ --set grafana.ingress.pathType=Prefix

4. アンインストール

helm uninstall mykube-prometheus-stack -n kube-prometheus-stack

<<:  Kubernetes コンテナ ランタイム インターフェース CRI

>>:  IoTとエッジコンピューティング:ニュアンスを分析

推薦する

教えるのが下手な教師だけが語る、サスのウェブサイトコンテンツシステム構築

ベッドに横になりながら、蘇貞潔の『尊厳は無価ではない』を楽しく読みました。本を手に取りながら、蘇貞潔...

最も効果的なオンラインマーケティング手法の分析

オンラインマーケティングには、数え切れないほど多くの活用方法があります。人が使う媒体であれば、マーケ...

ショッピングモールのウェブサイトが自然ランキングを向上させる方法の詳細な分析

A5 Taoke 冬の特別テーマのため、私はこのウェブサイト Yilianwang に注目しました。...

ixwebhosting 終末セール

ixwebhosting は、米国の老舗ホスティング会社であり、無制限のトラフィックを提供する世界初...

企業がクラウドに移行すべきいくつかの理由

現在では、企業がクラウドに移行することがコンセンサスとなっています。企業はクラウドに移行し、すべてが...

APPプロモーション:Apple StoreでのASOプロモーションを詳しく解説!

 ASOのトラフィックの入り口は、アプリストアとアプリストア外に分かれています。ストア外:Baidu...

エッジコンピューティング向け統合スケジューリングソリューションの検討

パート01エッジコンピューティングソリューションの概念的定義図1上図1に示すように、「AIエッジコン...

企業のウェブサイトはどうすればユーザーを維持できるのでしょうか?

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています今日、イン...

獣医薬企業ウェブサイトの構築に関する私の意見

最初の記事に何を書こうかと考えていたところ、獣医会社が電子商取引をしたい場合、最初にやらなければなら...

調査によると、マルチクラウドの最大の推進要因は依然としてコスト

イタリアの保険会社 Reale Group では、ワークロードの約 15% を 4 つのクラウド ベ...

モバイル アプリケーション市場の爆発的成長: APP 開発アウトソーシングの新たなパイを獲得

編集者注/スマート端末の急速な普及により、アプリケーションのダウンロードが劇的に増加しました。モバイ...

フルーツ宅配サイトが倒産:もう少し待ってください

12月初旬、「北京大学のフルーツ宅配サイト『小超知佳』が閉鎖。最後の言葉は起業家にとって非常に役立つ...

データセンターの「武装」、クラウドコンピューティング大手が「新インフラ」へ進出

国家発展改革委員会が2020年4月20日に「新型インフラ」の範囲を明確にしたことに伴い、ビッグデータ...

supremevps: 6 ドル/Windows VPS/1g メモリ/30g SSD/3T トラフィック/ロサンゼルス

新しいマーチャントである supremevps は、コロクロッシングのロサンゼルスとシカゴのデータセ...