OpenShift Service Mesh 3.0 is a Technology Preview feature only
Technology Preview features are not supported with Red Hat production service level agreements (SLAs) and might not be functionally complete. Red Hat does not recommend using them in production. These features provide early access to upcoming product features, enabling customers to test functionality and provide feedback during the development process. This documentation is a work in progress and might not be complete or fully tested.可観測性
可観測性および Service Mesh
概要
第1章 可観測性および Service Mesh
Red Hat OpenShift Observability は、さまざまなシステムメトリクス、ログ、イベントのリアルタイムの可視性、監視、分析を提供し、問題がシステムやアプリケーションに影響を与える前に、問題を迅速に診断してトラブルシューティングできるようにします。
Red Hat OpenShift Observability は、オープンソースの可観測性ツールとテクノロジーを接続して、統合された可観測性ソリューションを作成します。Red Hat OpenShift Observability のコンポーネントは連携して、データの収集、保存、配信、分析、視覚化を支援します。
Red Hat OpenShift Service Mesh は、次の Red Hat OpenShift Observability コンポーネントと統合されます。
- OpenShift Monitoring
- Red Hat OpenShift 分散トレースプラットフォーム
OpenShift Service Mesh は以下とも統合されます。
- Red Hat が提供する Kiali は、サービスメッシュを視覚化および管理するための強力なコンソールです。
- OpenShift Service Mesh Console (OSSMC) プラグインは、Kiali コンソール機能を OpenShift コンソールにシームレスに統合する OpenShift Container Platform コンソールプラグインです。
第2章 メトリクスと Service Mesh
2.1. メトリクスの使用
モニタリングスタックコンポーネントは、すべての OpenShift Container Platform インストールにデフォルトでデプロイされ、Cluster Monitoring Operator (CMO) により管理されます。これらのコンポーネントには、Prometheus、Alertmanager、Thanos Querier などが含まれます。CMO は、プラットフォーム Prometheus インスタンスから Red Hat にデータのサブセットを送信してクラスターの Remote Health Monitoring を容易にする Telemeter クライアントも導入します。
アプリケーションをメッシュに追加すると、CPU とメモリーの使用状況、ネットワーク接続、その他のリソースの使用状況に関するメトリクスとカスタマイズされたアラートを使用して、OpenShift Container Platform で実行しているアプリケーションのクラスター内の健全性とパフォーマンスを監視できます。
2.1.1. Service Mesh を使用した OpenShift モニタリングの設定
Red Hat OpenShift Service Mesh をユーザーワークロード監視と統合できます。
前提条件
- Red Hat OpenShift Service Mesh がインストールされている。
- ユーザーのワークロードの監視が有効になっている。ユーザー定義プロジェクトのモニタリングの有効化 を参照してください。
手順
servicemonitor.yml
という名前の YAML ファイルを作成して、Istio コントロールプレーンを監視します。ServiceMonitor
オブジェクトの例apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: istiod-monitor namespace: istio-system spec: targetLabels: - app selector: matchLabels: istio: pilot endpoints: - port: http-monitoring interval: 30s
以下のコマンドを実行して、YAML ファイルを適用します。
$ oc apply -f servicemonitor.yml
podmonitor.yml
という名前の YAML ファイルを作成し、Istio プロキシーからメトリクスを収集します。PodMonitor
オブジェクトの例apiVersion: monitoring.coreos.com/v1 kind: PodMonitor metadata: name: istio-proxies-monitor namespace: istio-system 1 spec: selector: matchExpressions: - key: istio-prometheus-ignore operator: DoesNotExist podMetricsEndpoints: - path: /stats/prometheus interval: 30s relabelings: - action: keep sourceLabels: ["__meta_kubernetes_pod_container_name"] regex: "istio-proxy" - action: keep sourceLabels: ["__meta_kubernetes_pod_annotationpresent_prometheus_io_scrape"] - action: replace regex: (\d+);(([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4}) replacement: '[$2]:$1' sourceLabels: ["__meta_kubernetes_pod_annotation_prometheus_io_port","__meta_kubernetes_pod_ip"] targetLabel: "__address__" - action: replace regex: (\d+);((([0-9]+?)(\.|$)){4}) replacement: '$2:$1' sourceLabels: ["__meta_kubernetes_pod_annotation_prometheus_io_port","__meta_kubernetes_pod_ip"] targetLabel: "__address__" - action: labeldrop regex: "__meta_kubernetes_pod_label_(.+)" - sourceLabels: ["__meta_kubernetes_namespace"] action: replace targetLabel: namespace - sourceLabels: ["__meta_kubernetes_pod_name"] action: replace targetLabel: pod_name
- 1
- OpenShift Container Platform モニタリングは
ServiceMonitor
オブジェクトとPodMonitor
オブジェクトのnamespaceSelector
仕様を無視するため、コントロールプレーンの namespace を含むすべてのメッシュ namespace にPodMonitor
オブジェクトを適用する必要があります。
以下のコマンドを実行して、YAML ファイルを適用します。
$ oc apply -f podmonitor.yml
OpenShift コンソールで Observe → Metrics に移動し、クエリー
istio_requests_total
を実行します。注記Metrics の実装では、クエリーが結果を返すまでに数分かかる場合があります。
第3章 分散トレースと Service Mesh
3.1. サービスメッシュを使用した Red Hat OpenShift 分散トレーシングプラットフォームの設定
Red Hat OpenShift 分散トレーシングプラットフォームと Red Hat OpenShift Service Mesh の統合は、Red Hat OpenShift 分散トレーシングプラットフォーム (Tempo) と Red Hat OpenShift distributed tracing data collection の 2 つの部分で構成されます。
- Red Hat OpenShift distributed tracing platform (Tempo)
複雑な分散システム内のトランザクションを監視およびトラブルシューティングするための分散トレーシングを提供します。これはオープンソースの Grafana Tempo プロジェクトに基づいています。
分散トレーシングプラットフォーム (Tempo)、その機能、インストール、および設定の詳細は、Red Hat OpenShift 分散トレーシングプラットフォーム (Tempo) を参照してください。
- Red Hat OpenShift distributed tracing data collection
クラウドネイティブソフトウェア向けに、統一され、標準化された、ベンダー中立のテレメトリーデータ収集を提供することを目的としたオープンソースの OpenTelemetry プロジェクト に基づいています。Red Hat OpenShift distributed tracing data collection 製品は、OpenTelemetry Collector のデプロイおよび管理をサポートし、ワークロードの計装を簡素化します。
OpenTelemetry Collector は、テレメトリーデータを複数の形式で受信、処理、転送できるため、テレメトリー処理とテレメトリーシステム間の相互運用性にとって理想的なコンポーネントとなります。Collector は、メトリクス、トレース、ログを収集および処理するための統合ソリューションを提供します。
分散トレースデータ収集、その機能、インストール、および設定の詳細は、Red Hat OpenShift distributed tracing data collection を参照してください。
3.1.1. Service Mesh を使用した Red Hat OpenShift 分散トレーシングデータ収集の設定
Red Hat OpenShift Service Mesh を Red Hat OpenShift distributed tracing data collection と統合して、OpenTelemetry トレース、メトリクス、ログ計測、生成、収集、エクスポートし、ソフトウェアのパフォーマンスと動作を分析および理解できます。
前提条件
- Tempo Operator がインストールされている。Tempo Operator のインストール を参照してください。
- Red Hat OpenShift distributed tracing data collection Operator がインストールされている。Red Hat build of OpenTelemetry のインストール を参照してください。
-
TempoStack が
tempo
namespace にインストールされ、設定されている。TempoStack インスタンスのインストール を参照してください。 - Istio インスタンスが作成されている。
- Istio CNI インスタンスが作成されている。
手順
Red Hat OpenShift distributed tracing data collection Operator に移動し、
istio-system
namespace にOpenTelemetryCollector
リソースをインストールします。istio-system
namespace の OpenTelemetry Collector の例kind: OpenTelemetryCollector apiVersion: opentelemetry.io/v1beta1 metadata: name: otel namespace: istio-system spec: observability: metrics: {} deploymentUpdateStrategy: {} config: exporters: otlp: endpoint: 'tempo-sample-distributor.tempo.svc.cluster.local:4317' tls: insecure: true receivers: otlp: protocols: grpc: endpoint: '0.0.0.0:4317' http: {} service: pipelines: traces: exporters: - otlp receivers: - otlp
トレースを有効にするように Red Hat OpenShift Service Mesh を設定し、
meshConfig
で分散トレースデータ収集プロバイダーを定義します。トレースプロバイダーの有効化および定義の例
apiVersion: sailoperator.io/v1alpha1 kind: Istio metadata: # ... name: default spec: namespace: istio-system # ... values: meshConfig: enableTracing: true extensionProviders: - name: otel opentelemetry: port: 4317 service: otel-collector.istio-system.svc.cluster.local 1
- 1
service
フィールドは、istio-system
namespace のOpenTelemetry
コレクターサービスです。
Istio Telemetry リソースを作成し、
spec.values.meshConfig.ExtensionProviders
で定義されたトレーサーを有効にします。Istio Telemetry リソースの例
apiVersion: telemetry.istio.io/v1 kind: Telemetry metadata: name: otel-demo namespace: istio-system spec: tracing: - providers: - name: otel randomSamplingPercentage: 100
注記トレースが表示されることを確認したら、
randomSamplingPercentage
値を減らすか、default
に設定してリクエストの数を減らします。次のコマンドを実行して、
info
namespace を作成します。$ oc create ns info
使用している更新ストラテジーに応じて、適切なコマンドを実行して namespace でサイドカーインジェクションを有効にします。
InPlace
更新ストラテジーを使用している場合は、次のコマンドを実行します。$ oc label namespace curl istio-injection=enabled
RevisionBased
更新ストラテジーを使用している場合は、次のコマンドを実行します。次のコマンドを実行してリビジョン名を表示します。
$ oc get istiorevisions.sailoperator.io
出力例
NAME TYPE READY STATUS IN USE VERSION AGE default-v1-23-0 Local True Healthy True v1.23.0 3m33s
次のコマンドを実行して、namespace にリビジョン名のラベルを付け、サイドカーインジェクションを有効にします。
$ oc label namespace curl istio.io/rev=default-v1-23-0
次のコマンドを実行して、
bookinfo
namespace にinfo
アプリケーションをデプロイします。$ oc apply -f https://raw.githubusercontent.com/istio/istio/release-1.23/samples/info/platform/kube/bookinfo.yaml -n bookinfo
トレースを生成するために、
productpage
Pod へのトラフィックを生成します。$ oc exec -it -n info deployments/productpage-v1 -c istio-proxy -- curl localhost:9080/productpage
次のコマンドを実行してインテグレーションを検証し、UI でトレースを確認します。
$ oc get routes -n tempo tempo-sample-query-frontend
注記Jaeger UI の OpenShift ルートは、Tempo namespace に作成する必要があります。
tempo-sample-query-frontend
サービス用に手動で作成するか、.spec.template.queryFrontend.jaegerQuery.ingress.type: route
を使用してTempo
カスタムリソースを更新できます。
第4章 Red Hat が提供する Kiali Operator
4.1. Red Hat 提供の Kiali Operator の使用
アプリケーションをメッシュに追加したら、Red Hat が提供する Kiali Operator を使用して、アプリケーションを通るデータフローを表示できます。
4.1.1. Kiali について
Red Hat 提供の Kiali Operator を使用すると、単一のコンソールでの設定表示、トラフィックの監視、トレースの分析が可能になります。これはオープンソースの Kiali プロジェクトに基づいています。
Red Hat が提供する Kiali Operator は、Red Hat OpenShift Service Mesh の管理コンソールです。ダッシュボード、可観測性、および堅牢な設定、ならびに検証機能を提供します。これは、トラフィックトポロジーを推測して Service Mesh の構造を示し、メッシュの正常性を表示します。Kiali は、詳細なメトリクス、強力な検証、Grafana へのアクセス、Red Hat OpenShift 分散トレーシングプラットフォーム (Tempo) とシームレスに統合できます。
4.1.2. Red Hat が提供する Kiali Operator のインストール
以下の手順では、Red Hat が提供する Kiali Operator をインストールする方法を説明します。
Operator のコミュニティーバージョンはインストールしないでください。コミュニティーバージョンはサポートされていません。
前提条件
- Red Hat OpenShift Service Mesh Web コンソールにアクセスできる。
手順
- Red Hat OpenShift Service Mesh Web コンソールにログインします。
- Operators → OperatorHub に移動します。
- フィルターボックスに Kiali と入力して、Red Hat が提供する Kiali Operator を検索します。
- Red Hat が提供する Kiali Operator をクリックし、Operator に関する情報を表示します。
- Install をクリックします。
- Operator Installation ページで、stable 更新チャネルを選択します。
-
All namespaces on the cluster(default) を選択します。これにより、Operator がデフォルトの
openshift-operators
プロジェクトにインストールされ、Operator はクラスター内のすべてのプロジェクトで利用可能になります。 Automatic Approval Strategy を選択します。
注記手動の承認ストラテジーには、Operator のインストールおよびサブスクリプションプロセスを承認するための適切な認証情報を持つユーザーが必要です。
- Install をクリックします。
- Installed Operators ページには、Kiali Operator のインストールの進捗状況が表示されます。
4.1.3. Kiali を使用した OpenShift モニタリングの設定
次の手順は、Red Hat が提供する Kiali Operator をユーザーワークロード監視と統合する方法を示しています。
前提条件
- Red Hat OpenShift Service Mesh がインストールされている。
- ユーザーのワークロードの監視が有効になっている。ユーザー定義プロジェクトのモニタリングの有効化 を参照してください。
- OpenShift Monitoring が Service Mesh で設定されている。「サービスメッシュを使用した OpenShift Monitoring の設定」を参照してください。
- Red Hat が提供する Kiali Operator 1.89 がインストールされている。
手順
Kiali の
ClusterRoleBinding
リソースを作成します。ClusterRoleBinding
の設定例apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: kiali-monitoring-rbac roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-monitoring-view subjects: - kind: ServiceAccount name: kiali-service-account namespace: istio-system
Kiali リソースを作成し、それを Istio インスタンスにポイントします。
Kiali リソース設定の例
apiVersion: kiali.io/v1alpha1 kind: Kiali metadata: name: kiali-user-workload-monitoring namespace: istio-system spec: external_services: prometheus: auth: type: bearer use_kiali_token: true thanos_proxy: enabled: true url: https://thanos-querier.openshift-monitoring.svc.cluster.local:9091
Kiali リソースの準備ができたら、以下のコマンドを実行してルートから Kiali URL を取得します。
$ echo "https://$(oc get routes -n istio-system kiali -o jsonpath='{.spec.host}')"
- URL に従い、Web ブラウザーで Kiali を開きます。
4.1.4. Red Hat OpenShift 分散トレースプラットフォームと Red Hat が提供する Kiali Operator の統合
Red Hat OpenShift 分散トレーシングプラットフォームを Red Hat が提供する Kiali Operator と統合すると、次の機能が有効になります。
- トレースオーバーレイとグラフの詳細を表示します。
- 詳細ページに散布図チャートと詳細なトレース/スパン情報を表示します。
- ログとメトリックチャートにスパン情報を統合します。
- 外部トレース UI へのリンクを提供します。
4.1.4.1. Red Hat が提供する Kiali Operator を使用した Red Hat OpenShift 分散トレーシングプラットフォームの設定
Red Hat が提供する Kiali Operator を Red Hat OpenShift 分散トレーシングプラットフォームと統合すると、Kiali コンソールで分散トレースを表示できるようになります。これらのトレースを表示すると、サービスメッシュ内のサービス間の通信に関するインサイトが得られ、リクエストがシステム内をどのように流れているか、発生する可能性のある問題はなにかを理解するのに役立ちます。
前提条件
- Red Hat OpenShift Service Mesh をインストールしている。
- 分散トレースプラットフォームを Red Hat OpenShift Service Mesh で設定している。
手順
トレース用に
Kiali
リソースspec
設定を更新します。トレース用の
Kiali
リソース仕様
の設定例spec: external_services: tracing: enabled: true 1 provider: tempo use_grpc: false in_cluster_url: http://tempo-sample-query-frontend.tempo:3200 url: https://tempo-sample-query-frontend-tempo.apps-crc.testing 2
-
更新された
spec
をkiali_cr.yaml
に保存します。 設定を適用するには、次のコマンドを実行します。
$ oc patch -n istio-system kiali kiali --type merge -p "$(cat kiali_cr.yaml)"
出力例:
kiali.kiali.io/kiali patched
検証
以下のコマンドを実行して Kiali ルートを取得します。
$ oc get route kiali ns istio-system
- Kiali UI に移動します。
- Workload → Traces タブに移動し、Kiali UI でトレースを確認します。