Cluster Services for OpenShift Telemetry オペレーターを設定する

このドキュメントでは、Cluster Services for OpenShift Telemetry オペレータをインストールし、Compute Engine インスタンスで実行されている OpenShift クラスタに接続するように構成する方法について説明します。

このテレメトリー オペレーターをインストールして構成すると、クラスタの健全性とクラスタ構成を継続的にモニタリングするホストネットワーク テレメトリー デーモンがデプロイされます。オペレーターは、収集した指標をワークロード マネージャーに送信します。ワークロード マネージャーの評価を使用して、クラスタで実行されているワークロードをスキャンし、OpenShift クラスタのベスト プラクティスからの逸脱を検出できます。

始める前に

テレメトリー オペレータをインストールして構成する前に、次の前提条件が満たされていることを確認する必要があります。

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 連携を使用してテレメトリー オペレータをサービス アカウントとして認証するには、次の操作を行います。

  1. ターミナルで、テレメトリー オペレータ バンドルから CredentialsRequest マニフェストをローカル ディレクトリに抽出します。

    mkdir -p credrequests
    oc image extract us-docker.pkg.dev/workload-agent-products/cluster-services-for-openshift-telemetry/bundle:VERSION --path /manifests/:./credrequests --confirm
    

    VERSION は、OperatorHub でテレメトリー オペレーターに登録したバージョン番号に置き換えます。テレメトリー オペレーターの認定バージョン番号のリストは、Red Hat Ecosystem Catalog で確認できます。

  2. 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
  3. 生成された OpenID Connect(OIDC)プロバイダ、IAM ロール、シークレット マニフェストをクラスタに適用します。

    oc apply -f ./ccoctl-out/manifests/
    

上記の手順では、 Google Cloud プロジェクトにサービス アカウントを作成し、次の IAM ロールを割り当てます。

サービス アカウント キーを使用してオペレーターを認証する

組織が認証目的で Workload Identity 連携の使用をサポートしていない場合は、サービス アカウント キーを使用してテレメトリー オペレータを認証できます。

サービス アカウント キーを使用してテレメトリー オペレーターをサービス アカウントとして認証するには、次の操作を行います。

  1. ターミナルで、テレメトリー オペレータ バンドルから CredentialsRequest マニフェストをローカル ディレクトリに抽出します。

    mkdir -p credrequests
    oc image extract us-docker.pkg.dev/workload-agent-products/cluster-services-for-openshift-telemetry/bundle:VERSION --path /manifests/:./credrequests --confirm
    
  2. Google Cloud プロジェクトで、テレメトリー オペレーターのサービス アカウントを作成します。

    gcloud iam service-accounts create cso-telemetry-agent \
      --description="Service account for OpenShift Telemetry Operator" \
      --display-name="CSO Telemetry Agent" \
      --project=PROJECT_ID
    

    PROJECT_ID は、OpenShift クラスタが実行されているGoogle Cloud プロジェクトの ID に置き換えます。

  3. サービス アカウントが Google Cloud リソースにアクセスできるようにするには、CredentialsRequest マニフェストで定義されている IAM ロールをサービス アカウントに付与します。このマニフェストには、オペレーターに必要な次の最小限の IAM ロールが含まれています。

    このマニフェストで定義されている 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 ロールに置き換えます。

  4. サービス アカウントの秘密鍵を作成してダウンロードします。

    gcloud iam service-accounts keys create ./sa_key.json \
      --iam-account=cso-telemetry-agent@PROJECT_ID.iam.gserviceaccount.com \
      --project=PROJECT_ID
    
  5. openshift-operators Namespace で、作成したサービス アカウント キーの 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 クラスタにテレメトリー オペレータをインストールする手順は次のとおりです。

  1. Red Hat OpenShift ウェブ コンソールにログインします。
  2. [管理者] パースペクティブになっていることを確認します。
  3. 左側のナビゲーションで、[オペレーター] セクションを開き、[OperatorHub] をクリックします。
  4. [すべてのアイテム] の下の検索バーに「Cluster Services for OpenShift Telemetry」と入力します。

    または、「Google」と入力して検索することもできます。これにより、Google が提供するオペレーター(Cluster Services for OpenShift Telemetry オペレーターなど)がフィルタされます。

  5. [Cluster Services for OpenShift Telemetry] という名前のカードをクリックします。

  6. [Cluster Services for OpenShift Telemetry] ペインで、[インストール] をクリックします。

  7. [Operator のインストール] ページで、次の操作を行います。

    1. [更新チャンネル] フィールドで [安定版] を選択します。
    2. [インストール モード] フィールドで、[クラスタ上の特定の Namespace] を選択します。
    3. [インストールされた Namespace] フィールドで、openshift-operators プロジェクトを選択するか、カスタム モニタリング Namespace を作成します。
    4. [承認戦略] フィールドで、[自動] または [手動] を選択します。
    5. [インストール] をクリックします。
  8. Operator が正常にインストールされたことを確認するには、次の操作を行います。

    1. [Operators] > [Installed Operators] に移動します。
    2. オペレーターのリストで、Cluster Services for OpenShift Telemetry オペレーターが存在することを確認します。
    3. [ステータス] 列に [成功] または [最新] の値が表示されていることを確認します。
    4. 必要に応じて、オペレーターをクリックして詳細を表示します。

OpenShift CLI

OpenShift CLI と宣言型 Subscription YAML マニフェストを使用して OpenShift クラスタにテレメトリー オペレータをインストールする手順は次のとおりです。

  1. 次の構成で 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
    
  2. サブスクリプションをクラスタに適用します。

    oc apply -f subscription.yaml
    
  3. ClusterServiceVersion のステータスを確認して、テレメトリー オペレーターが正常にインストールされたことを確認します。

    oc get csv -n openshift-operators
    

    出力で、cluster-services-for-openshift-telemetry の PHASE 列の値が Succeeded であることを確認します。

指標の収集を有効にする

オペレータが OpenShift クラスタから指標を収集できるようにするには、TelemetryConfig カスタム リソースを適用する必要があります。このリソースは、コンピューティング ワークロード用エージェント のデーモン Pod をクラスタノードにデプロイします。

オペレーターが OpenShift クラスタから指標を収集できるようにするには、次の操作を行います。

  1. 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_PATH
      

      SERVICE_ACCOUNT_KEY_PATH は、サービス アカウント キーをマウントしたパスに置き換えます。マウントの名前は、サービス アカウント キーの JSON ファイルと一致する必要があります。例: /var/run/secrets/google/workload_agent_sa_key.json。

  2. カスタム リソースをクラスタに適用します。

    oc apply -f telemetryconfig.yaml
    
  3. テレメトリー エージェント Pod の状態が Running であることを確認します。

    oc get pods -n openshift-operators -l app.kubernetes.io/name=workloadagent-operator
    

    Pod のログを調べて、指標の収集を確認することもできます。

    "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 でオペレーターのログを表示する手順は次のとおりです。

  1. Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。

    [ログ エクスプローラ] に移動

  2. クエリペインにクエリを入力します。

    • 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 の詳細を表示するをご覧ください。

  3. [クエリを実行] をクリックします。

ログベースのアラート ポリシーを設定する

デフォルトでは、テレメトリー オペレーターからのログは Cloud Logging に送信されます。ログに特定のメッセージが表示されたときに通知するテレメトリー オペレーター ログに基づいてアラート ポリシーを構成することをおすすめします。これらのアラートは、オペレーターの機能をモニタリングし、問題のトラブルシューティングを行うのに役立ちます。

テレメトリー オペレータによって生成されたログに基づいてアラート ポリシーを構成するには、次の操作を行います。

  1. ログベースのアラート ポリシーを構成するの「始める前に」セクションに記載されている前提条件を満たしていることを確認します。

  2. Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。

    [ログ エクスプローラ] に移動

  3. クエリペインに必要なクエリを入力します。

    logName="projects/PROJECT_ID/logs/google-cloud-workload-agent"
    severity=SEVERITY_LEVEL

    SEVERITY_LEVEL は、サポートされている重大度レベルの値(DEBUG、INFO、WARNING、ERROR など)に置き換えます。ERROR 以上のログレベル値を使用することをおすすめします。

  4. [クエリを実行] をクリックしてクエリを検証します。

  5. ログアラートを作成します。

    このアラートの作成方法については、ログ エクスプローラを使用してログベースのアラート ポリシーを作成するの手順 3 をご覧ください。

省略可: 本番環境固有の評価を有効にする

Workload Manager が OpenShift クラスタでサポートするベスト プラクティスのうち、一部は本番環境にのみ適用されます。ワークロード マネージャー は、クラスタ、Deployment、Pod で environment ラベルを確認することで、この区別を行います。このラベルに関連付けられた値が production の場合、ワークロード マネージャー はそのリソースを本番環境リソースと見なします。

クラスタが本番環境に属していることを Workload Manager に通知する手順は次のとおりです。

  1. workloadmanager Namespace を作成します。

    oc create namespace workloadmanager
    
  2. 次の構成を使用して、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=production
    

    DEPLOYMENT_NAME は、Deployment の名前に置き換えます。

OpenShift クラスタと、クラスタで実行される Deployment または Pod に environment ラベルを適用すると、ワークロード マネージャーは、クラスタに設定されたラベル値よりも Deployment または Pod に設定されたラベル値を優先します。

省略可: 指標の収集をトリガーする

OpenShift クラスタで Cluster Services for OpenShift Telemetry オペレーターを正常に設定すると、オペレーターはクラスタから指標を収集し、30 分ごとにワークロード マネージャーに送信します。

必要に応じて、指標の収集がスケジュール設定された 30 分間待つ代わりに、オペレーターを手動でトリガーして指標を収集し、ワークロード マネージャーに送信できます。

指標収集のオペレータを手動でトリガーする手順は次のとおりです。

  1. ターミナルを開きます。

  2. 実行中の Pod の名前を確認します。

    POD_NAME=$(oc get pods -l app.kubernetes.io/name=workloadagent-operator --field-selector=status.phase=Running -o=name)
    
  3. 指標を収集して送信するようにオペレーターをトリガーします。

    oc debug -t $POD_NAME -- /openshift-docker-entrypoint.sh
    

次のステップ