Prometheus を使用したマルチクラスター Istio の監視
概要
このガイドは、2 つ以上の個別の Kubernetes クラスターで構成される Istio メッシュの監視を設定する方法について、運用ガイダンスを提供することを目的としています。これは、マルチクラスター テレメトリと Prometheus に対する*唯一*の可能な方法を確立することを意図したものではなく、Prometheus を使用したマルチクラスター テレメトリへの実用的なアプローチを示すためのものです。
Prometheus を使用した Istio のマルチクラスター監視に関する推奨事項は、Prometheus の階層型フェデレーションの基盤に基づいています。Istio によって各クラスターにローカルにデプロイされた Prometheus インスタンスは、初期コレクターとして機能し、本番環境のメッシュ全体の Prometheus インスタンスにフェデレートされます。そのメッシュ全体の Prometheus は、メッシュの外部(外部)に存在することも、メッシュ内のクラスターの 1 つに存在することもできます。
マルチクラスター Istio のセットアップ
サポートされている マルチクラスタデプロイメントモデル のいずれかで Istio クラスタをセットアップするには、マルチクラスタインストール セクションに従ってください。このガイドの目的では、以下の注意事項を踏まえれば、どのアプローチでも機能します。
各クラスタにクラスタローカルの Istio Prometheus インスタンスがインストールされていることを確認してください。
クラスタごとに個別の Istio デプロイメントで Prometheus を実行することで、外部またはいずれかのクラスタで実行される本番環境対応の Prometheus インスタンスへのフェデレーションによるクラスタ間のモニタリングの基盤を形成するために必要です。
各クラスタで Prometheus のインスタンスが実行されていることを確認してください。
$ kubectl -n istio-system get services prometheus
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
prometheus ClusterIP 10.8.4.109 <none> 9090/TCP 20h
Prometheus フェデレーションの設定
外部本番 Prometheus
Istio デプロイメントの外部で Prometheus インスタンスを実行したい理由はいくつかあります。モニタリング対象のクラスタとは別に長期モニタリングを行いたい場合や、複数の個別のメッシュを1か所でモニタリングしたい場合など、さまざまな動機が考えられます。いずれの場合でも、すべてを機能させるには特別な構成が必要になります。
Istio は、ゲートウェイ を介してクラスタサービスを外部に公開する方法を提供します。クラスタローカルの Prometheus のイングレスゲートウェイを構成することで、クラスタ内の Prometheus エンドポイントへの外部接続を提供できます。
各クラスタについて、テレメトリアドオンへのリモートアクセス タスクの適切な手順に従ってください。また、安全な (HTTPS) アクセスを確立**する必要があります**。
次に、以下のような構成を使用して、外部 Prometheus インスタンスがクラスタローカルの Prometheus インスタンスにアクセスするように構成します (イングレスドメインとクラスタ名を置き換えます)。
scrape_configs:
- job_name: 'federate-{{CLUSTER_NAME}}'
scrape_interval: 15s
honor_labels: true
metrics_path: '/federate'
params:
'match[]':
- '{job="kubernetes-pods"}'
static_configs:
- targets:
- 'prometheus.{{INGRESS_DOMAIN}}'
labels:
cluster: '{{CLUSTER_NAME}}'
注意事項
CLUSTER_NAME
は、クラスタの作成に使用した値 (values.global.multiCluster.clusterName
で設定) と同じ値に設定する必要があります。Prometheus エンドポイントへの認証は提供されません。これは、誰でもクラスタローカルの Prometheus インスタンスにクエリできることを意味します。これは望ましくない場合があります。
ゲートウェイの適切な HTTPS 構成がない場合、すべてがプレーンテキストで転送されます。これは望ましくない場合があります。
メッシュ内クラスターの本番 Prometheus
いずれかのクラスタで本番環境 Prometheus を実行する場合は、そこからメッシュ内の他のクラスタローカル Prometheus インスタンスへの接続を確立する必要があります。
これは、外部フェデレーションの構成のバリエーションにすぎません。この場合、本番環境 Prometheus を実行しているクラスタの構成は、リモートクラスタ Prometheus スクレイピングの構成とは異なります。
本番環境 Prometheus が *ローカル* と *リモート* の両方の Prometheus インスタンスにアクセスするように構成します。
最初に次のコマンドを実行します。
$ kubectl -n istio-system edit cm prometheus -o yaml
次に、*リモート* クラスタの構成を追加し (各クラスタのイングレスドメインとクラスタ名を置き換えます)、*ローカル* クラスタの構成を1つ追加します。
scrape_configs:
- job_name: 'federate-{{REMOTE_CLUSTER_NAME}}'
scrape_interval: 15s
honor_labels: true
metrics_path: '/federate'
params:
'match[]':
- '{job="kubernetes-pods"}'
static_configs:
- targets:
- 'prometheus.{{REMOTE_INGRESS_DOMAIN}}'
labels:
cluster: '{{REMOTE_CLUSTER_NAME}}'
- job_name: 'federate-local'
honor_labels: true
metrics_path: '/federate'
metric_relabel_configs:
- replacement: '{{CLUSTER_NAME}}'
target_label: cluster
kubernetes_sd_configs:
- role: pod
namespaces:
names: ['istio-system']
params:
'match[]':
- '{__name__=~"istio_(.*)"}'
- '{__name__=~"pilot(.*)"}'