このドキュメントでは、Cluster Services for OpenShift Telemetry オペレータをインストールし、Compute Engine インスタンスで実行されている OpenShift クラスタに接続するように構成する方法について説明します。
このテレメトリー オペレーターをインストールして構成すると、クラスタの健全性とクラスタ構成を継続的にモニタリングするホストネットワーク テレメトリー デーモンがデプロイされます。オペレーターは、収集した指標をワークロード マネージャーに送信します。ワークロード マネージャーの評価を使用して、クラスタで実行されているワークロードをスキャンし、OpenShift クラスタのベスト プラクティスからの逸脱を検出できます。
始める前に
テレメトリー オペレータをインストールして構成する前に、次の前提条件が満たされていることを確認する必要があります。
- Red Hat OpenShift Container Platform のバージョン 4.18 以降を使用している。
- 1 つ以上のコンピューティング インスタンスに OpenShift クラスタをデプロイしている。
- 管理者が、Red Hat OpenShift Container Platform のクラスタに対する ClusterAdmin ロールを付与している。
- ターミナルに Google Cloud CLI をダウンロードしてインストールしている。Cloud Shell を使用している場合は、この前提条件をスキップできます。
- クラスタに OpenShift CLI(
oc)がインストールされている。この CLI のインストール方法については、Red Hat のドキュメント OpenShift CLI のインストールをご覧ください。 - Cloud Credentials Operator(
ccoctl)ユーティリティがインストールされている。このユーティリティのインストール方法については、Red Hat のドキュメント OpenShift 4 用のccoctlツールを入手する方法をご覧ください。 - Workload Manager の評価を作成できるサポートされているリージョンを確認した。
- 管理者が、ワークロード マネージャー評価の作成と実行に必要な IAM ロールを付与している。
- Cloud APIs へのアクセスを有効にしている。
Cloud APIs へのアクセスを有効にする
Compute Engine では、すべての Cloud APIs にすべてのアクセス スコープを使用できるようにインスタンスを構成し、インスタンス サービス アカウントの IAM 権限のみを使用してGoogle Cloud リソースへのアクセスを制御することをおすすめします。詳細については、ユーザー管理のサービス アカウントを使用する VM を作成するをご覧ください。
Cloud APIs へのアクセスを制限する場合、Cluster Services for OpenShift Telemetry オペレータには、ホスト コンピューティング インスタンスで次の最小 Cloud APIs アクセス スコープが必要です。
https://www.googleapis.com/auth/cloud-platform
詳細については、スコープのベスト プラクティスをご覧ください。
外部 IP アドレスを持たないコンピューティング インスタンスで OpenShift クラスタを実行している場合は、インスタンスのサブネットでプライベート Google アクセスを有効にして、Cluster Services for OpenShift Telemetry オペレーターが Google API とサービスにアクセスできるようにする必要があります。プライベート Google アクセスを有効にする方法については、プライベート Google アクセスを構成するをご覧ください。
OpenShift クラスタに対するユーザーの認証
管理アクションを実行するには、OpenShift CLI を使用して OpenShift クラスタに対して認証を行う必要があります。OpenShift クラスタに対してユーザーを認証するには、次のオプションから選択します。
次のコマンドを実行し、プロンプトに従います。
oc login "https://api.CLUSTER_DOMAIN:6443" -u kubeadminまたは、
ocバイナリで使用するセッション認証トークンを取得します。このトークンを取得するには、ウェブブラウザで次の URL を開きます。https://oauth-openshift.apps.CLUSTER_DOMAIN/oauth/token/request
CLUSTER_DOMAIN は、OpenShift クラスタのドメインに置き換えます。例: mycluster.google.com。
Google Cloudに対するオペレーターの認証
テレメトリー オペレーターが認証を行い、 Google Cloudリソースにアクセスできるようにするには、 Google Cloud プロジェクトにサービス アカウントを作成する必要があります。
次のオプションを使用して、テレメトリー オペレーターをサービス アカウントとして認証できます。
Workload Identity 連携を使用してオペレーターを認証する
Workload Identity 連携を使用してテレメトリー オペレータをサービス アカウントとして認証するには、次の操作を行います。
ターミナルで、テレメトリー オペレータ バンドルから
CredentialsRequestマニフェストをローカル ディレクトリに抽出します。mkdir -p credrequests oc image extract us-docker.pkg.dev/workload-agent-products/cluster-services-for-openshift-telemetry/bundle:VERSION --path /manifests/:./credrequests --confirmVERSIONは、OperatorHub でテレメトリー オペレーターに登録したバージョン番号に置き換えます。テレメトリー オペレーターの認定バージョン番号のリストは、Red Hat Ecosystem Catalog で確認できます。ccoctlユーティリティを使用して、抽出したCredentialsRequestマニフェストを処理し、 Google Cloud Identity and Access Management(IAM)バインディングと認証情報をプロビジョニングします。ccoctl gcp create-all \ --name=cso-telemetry \ --region=REGION \ --project=PROJECT_ID \ --credentials-requests-dir=./credrequests \ --output-dir=./ccoctl-out次のように置き換えます。
REGION: OpenShift クラスタが実行されている Compute Engine リージョンPROJECT_ID: OpenShift クラスタが実行されている Google Cloud プロジェクトのプロジェクト ID
生成された OpenID Connect(OIDC)プロバイダ、IAM ロール、シークレット マニフェストをクラスタに適用します。
oc apply -f ./ccoctl-out/manifests/
上記の手順では、 Google Cloud プロジェクトにサービス アカウントを作成し、次の IAM ロールを割り当てます。
- コンピューティング インスタンスから指標を収集する: コンピューティング閲覧者(
roles/compute.viewer) - ワークロード マネージャー データ ウェアハウスにデータを書き込むには: Workload Manager Insights Writer(
roles/workloadmanager.insightWriter) - オペレーターログを Cloud Logging に送信するには: ログ書き込み(
roles/logging.logWriter)
サービス アカウント キーを使用してオペレーターを認証する
組織が認証目的で Workload Identity 連携の使用をサポートしていない場合は、サービス アカウント キーを使用してテレメトリー オペレータを認証できます。
サービス アカウント キーを使用してテレメトリー オペレーターをサービス アカウントとして認証するには、次の操作を行います。
ターミナルで、テレメトリー オペレータ バンドルから
CredentialsRequestマニフェストをローカル ディレクトリに抽出します。mkdir -p credrequests oc image extract us-docker.pkg.dev/workload-agent-products/cluster-services-for-openshift-telemetry/bundle:VERSION --path /manifests/:./credrequests --confirmGoogle Cloud プロジェクトで、テレメトリー オペレーターのサービス アカウントを作成します。
gcloud iam service-accounts create cso-telemetry-agent \ --description="Service account for OpenShift Telemetry Operator" \ --display-name="CSO Telemetry Agent" \ --project=PROJECT_IDPROJECT_IDは、OpenShift クラスタが実行されているGoogle Cloud プロジェクトの ID に置き換えます。サービス アカウントが Google Cloud リソースにアクセスできるようにするには、
CredentialsRequestマニフェストで定義されている IAM ロールをサービス アカウントに付与します。このマニフェストには、オペレーターに必要な次の最小限の IAM ロールが含まれています。- コンピューティング インスタンスから指標を収集する: コンピューティング閲覧者(
roles/compute.viewer) - ワークロード マネージャー データ ウェアハウスにデータを書き込むには: Workload Manager Insights Writer(
roles/workloadmanager.insightWriter) - オペレーターログを Cloud Logging に送信するには: ログ書き込み(
roles/logging.logWriter)
このマニフェストで定義されている IAM ロールごとに、次のコマンドを実行します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:cso-telemetry-agent@PROJECT_ID.iam.gserviceaccount.com" \ --role="IAM_ROLE"IAM_ROLEは、サービス アカウントに付与する IAM ロールに置き換えます。- コンピューティング インスタンスから指標を収集する: コンピューティング閲覧者(
サービス アカウントの秘密鍵を作成してダウンロードします。
gcloud iam service-accounts keys create ./sa_key.json \ --iam-account=cso-telemetry-agent@PROJECT_ID.iam.gserviceaccount.com \ --project=PROJECT_IDopenshift-operatorsNamespace で、作成したサービス アカウント キーの Secret をtelemetry-agent-saという名前で作成します。oc create secret generic telemetry-agent-sa \ --from-file=workload_agent_sa_key.json=./sa_key.json \ -n openshift-operators
Cluster Services for OpenShift Telemetry オペレーターをインストールする
Cluster Services for OpenShift Telemetry Operator は、Red Hat OpenShift Container Platform ウェブ コンソールまたは宣言型サブスクリプション YAML マニフェストを使用してインストールできます。これらのオプションについては、Red Hat のドキュメント Adding Operators to a cluster をご覧ください。
OpenShift ウェブ コンソール
OpenShift Container Platform ウェブ コンソールを使用して OpenShift クラスタにテレメトリー オペレータをインストールする手順は次のとおりです。
- Red Hat OpenShift ウェブ コンソールにログインします。
- [管理者] パースペクティブになっていることを確認します。
- 左側のナビゲーションで、[オペレーター] セクションを開き、[OperatorHub] をクリックします。
[すべてのアイテム] の下の検索バーに「Cluster Services for OpenShift Telemetry」と入力します。
または、「Google」と入力して検索することもできます。これにより、Google が提供するオペレーター(Cluster Services for OpenShift Telemetry オペレーターなど)がフィルタされます。
[Cluster Services for OpenShift Telemetry] という名前のカードをクリックします。
[Cluster Services for OpenShift Telemetry] ペインで、[インストール] をクリックします。
[Operator のインストール] ページで、次の操作を行います。
- [更新チャンネル] フィールドで [安定版] を選択します。
- [インストール モード] フィールドで、[クラスタ上の特定の Namespace] を選択します。
- [インストールされた Namespace] フィールドで、openshift-operators プロジェクトを選択するか、カスタム モニタリング Namespace を作成します。
- [承認戦略] フィールドで、[自動] または [手動] を選択します。
- [インストール] をクリックします。
Operator が正常にインストールされたことを確認するには、次の操作を行います。
- [Operators] > [Installed Operators] に移動します。
- オペレーターのリストで、Cluster Services for OpenShift Telemetry オペレーターが存在することを確認します。
- [ステータス] 列に [成功] または [最新] の値が表示されていることを確認します。
- 必要に応じて、オペレーターをクリックして詳細を表示します。
OpenShift CLI
OpenShift CLI と宣言型 Subscription YAML マニフェストを使用して OpenShift クラスタにテレメトリー オペレータをインストールする手順は次のとおりです。
次の構成で
subscription.yamlという名前のSubscriptionカスタム リソース マニフェストを作成します。apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: google-cloud-cluster-services-for-openshift-telemetry namespace: openshift-operators spec: channel: stable installPlanApproval: Automatic name: google-cloud-cluster-services-for-openshift-telemetry source: certified-operators sourceNamespace: openshift-marketplaceサブスクリプションをクラスタに適用します。
oc apply -f subscription.yamlClusterServiceVersionのステータスを確認して、テレメトリー オペレーターが正常にインストールされたことを確認します。oc get csv -n openshift-operators出力で、
cluster-services-for-openshift-telemetryのPHASE列の値がSucceededであることを確認します。
指標の収集を有効にする
オペレータが OpenShift クラスタから指標を収集できるようにするには、TelemetryConfig カスタム リソースを適用する必要があります。このリソースは、コンピューティング ワークロード用エージェント のデーモン Pod をクラスタノードにデプロイします。
オペレーターが OpenShift クラスタから指標を収集できるようにするには、次の操作を行います。
telemetryconfig.yamlという名前のTelemetryConfigカスタム リソース マニフェストを作成します。Workload Identity 連携を使用してテレメトリー オペレーターの認証を設定した場合は、次の最小限のカスタム リソースを使用します。このカスタム リソースは、
google-cloud-cluster-services-telemetry-agent-wif-secretシークレットに保存されている認証情報を自動的に取得します。apiVersion: cluster-services-openshift.cloud.google.com/v1alpha1 kind: TelemetryConfig metadata: name: telemetryconfig namespace: openshift-operators spec: enabled: trueサービス アカウント キーを使用してテレメトリー オペレーターの認証を設定している場合は、次のカスタム リソースを使用します。
apiVersion: cluster-services-openshift.cloud.google.com/v1alpha1 kind: TelemetryConfig metadata: name: telemetryconfig namespace: openshift-operators spec: enabled: true serviceAccountCredentialsSecretName: telemetry-agent-sa serviceAccountCredentialsPath: SERVICE_ACCOUNT_KEY_PATHSERVICE_ACCOUNT_KEY_PATHは、サービス アカウント キーをマウントしたパスに置き換えます。マウントの名前は、サービス アカウント キーの JSON ファイルと一致する必要があります。例:/var/run/secrets/google/workload_agent_sa_key.json。
カスタム リソースをクラスタに適用します。
oc apply -f telemetryconfig.yamlテレメトリー エージェント Pod の状態が Running であることを確認します。
oc get pods -n openshift-operators -l app.kubernetes.io/name=workloadagent-operatorPod のログを調べて、指標の収集を確認することもできます。
"openshiftmetrics/openshiftmetrics.go:126","msg":"Metric payload after collection","pid":5,"context":"OpenShiftMetricCollection","payload":"version:\"v0.1.0-pre\" agent_version:\"1.3\"
Cloud Logging でオペレーター ログを表示する
デフォルトでは、Cluster Services for OpenShift Telemetry オペレーターからのログは Cloud Logging に送信されます。これらのログは Logging で確認できます。Logging でオペレーターのログを表示する手順は次のとおりです。
Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。
クエリペインにクエリを入力します。
Google Cloud プロジェクトのログをフィルタするには、次のクエリを使用します。
logName="projects/PROJECT_ID/logs/google-cloud-workload-agent"
PROJECT_IDは、OpenShift クラスタが実行されているGoogle Cloud プロジェクトのプロジェクト ID に置き換えます。Google Cloud プロジェクトで複数のクラスタを実行していて、特定のクラスタのログをフィルタする場合は、次のクエリを使用します。
resource.labels.instance_id=("COMPUTE_INSTANCE_ID_1" OR "COMPUTE_INSTANCE_ID_2" OR "COMPUTE_INSTANCE_ID_3")COMPUTE_INSTANCE_IDは、OpenShift クラスタを実行する Compute Engine インスタンスのインスタンス ID に置き換えます。コンピューティング インスタンス ID を確認する方法については、VM の詳細を表示するをご覧ください。
[クエリを実行] をクリックします。
ログベースのアラート ポリシーを設定する
デフォルトでは、テレメトリー オペレーターからのログは Cloud Logging に送信されます。ログに特定のメッセージが表示されたときに通知するテレメトリー オペレーター ログに基づいてアラート ポリシーを構成することをおすすめします。これらのアラートは、オペレーターの機能をモニタリングし、問題のトラブルシューティングを行うのに役立ちます。
テレメトリー オペレータによって生成されたログに基づいてアラート ポリシーを構成するには、次の操作を行います。
ログベースのアラート ポリシーを構成するの「始める前に」セクションに記載されている前提条件を満たしていることを確認します。
Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。
クエリペインに必要なクエリを入力します。
logName="projects/PROJECT_ID/logs/google-cloud-workload-agent" severity=SEVERITY_LEVEL
SEVERITY_LEVELは、サポートされている重大度レベルの値(DEBUG、INFO、WARNING、ERRORなど)に置き換えます。ERROR以上のログレベル値を使用することをおすすめします。[クエリを実行] をクリックしてクエリを検証します。
ログアラートを作成します。
このアラートの作成方法については、ログ エクスプローラを使用してログベースのアラート ポリシーを作成するの手順 3 をご覧ください。
省略可: 本番環境固有の評価を有効にする
Workload Manager が OpenShift クラスタでサポートするベスト プラクティスのうち、一部は本番環境にのみ適用されます。ワークロード マネージャー は、クラスタ、Deployment、Pod で environment ラベルを確認することで、この区別を行います。このラベルに関連付けられた値が production の場合、ワークロード マネージャー はそのリソースを本番環境リソースと見なします。
クラスタが本番環境に属していることを Workload Manager に通知する手順は次のとおりです。
workloadmanagerNamespace を作成します。oc create namespace workloadmanager次の構成を使用して、
workloadmanager名前空間にConfigMapを作成します。apiVersion: v1 kind: ConfigMap metadata: name: wlm-cluster-environment namespace: workloadmanager data: # Options: "production" or "non-production" environment: "production"
デプロイまたは Pod が本番環境に属していることをワークロード マネージャーに通知するには、次のいずれかのオプションを使用して、environment という名前のラベルをリソース定義に追加します。
次の構成を手動で適用します。
apiVersion: apps/v1 kind: Deployment metadata: name: my-app labels: # Options: "production" or "non-production" environment: "production" spec: ...次のコマンドを実行します。
oc label --overwrite deployments DEPLOYMENT_NAME environment=productionDEPLOYMENT_NAMEは、Deployment の名前に置き換えます。
OpenShift クラスタと、クラスタで実行される Deployment または Pod に environment ラベルを適用すると、ワークロード マネージャーは、クラスタに設定されたラベル値よりも Deployment または Pod に設定されたラベル値を優先します。
省略可: 指標の収集をトリガーする
OpenShift クラスタで Cluster Services for OpenShift Telemetry オペレーターを正常に設定すると、オペレーターはクラスタから指標を収集し、30 分ごとにワークロード マネージャーに送信します。
必要に応じて、指標の収集がスケジュール設定された 30 分間待つ代わりに、オペレーターを手動でトリガーして指標を収集し、ワークロード マネージャーに送信できます。
指標収集のオペレータを手動でトリガーする手順は次のとおりです。
ターミナルを開きます。
実行中の Pod の名前を確認します。
POD_NAME=$(oc get pods -l app.kubernetes.io/name=workloadagent-operator --field-selector=status.phase=Running -o=name)指標を収集して送信するようにオペレーターをトリガーします。
oc debug -t $POD_NAME -- /openshift-docker-entrypoint.sh