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

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

インストールして構成すると、このテレメトリー オペレーターは、クラスタの健全性とクラスタ構成を継続的にモニタリングするホストネットワーク テレメトリー デーモンをデプロイします。オペレーターは、収集した指標を Workload Manager に送信します。Workload Manager の評価を使用して、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 の評価を作成できるサポート対象リージョン を確認している。
  • 管理者が、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 APIs とサービスにアクセスできるようにする必要があります。プライベート 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/
    

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

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

組織で認証に 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 名前空間で、作成したサービス アカウント キーの 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 オペレーターは、Red Hat OpenShift Container Platform ウェブ コンソールまたは宣言型サブスクリプション YAML マニフェストを使用してインストールできます。これらのオプションの詳細については、Red Hat のドキュメント クラスタへのオペレーターの追加をご覧ください。

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. [オペレーターのインストール] ページで、次の手順を行います。

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

    1. [オペレーター] > [インストール済みオペレーター] に移動します。
    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-telemetryPHASE 列の値が Succeeded であることを確認します。

指標の収集を有効にする

オペレーターが OpenShift クラスタから指標を収集できるようにするには、TelemetryConfig カスタム リソースを適用する必要があります。このリソースは、Agent for Compute Workloads のデーモン 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 の状態が [**実行中**] であることを確認します。

    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. コンソールで、[Logs Explorer] ページに移動します。 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. コンソールで、[Logs Explorer] ページに移動します。 Google Cloud

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

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

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

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

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

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

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

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

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

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

  1. workloadmanager 名前空間を作成します。

    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 が本番環境に属していることを Workload Manager に通知するには、次のいずれかのオプションを使用して、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 は、デプロイの名前に置き換えます。

OpenShift クラスタと、クラスタで実行されるデプロイまたは Pod に environment ラベルを適用すると、Workload Manager は、クラスタに設定されたラベル値よりも、デプロイまたは Pod に設定されたラベル値を優先します。

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

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

必要に応じて、指標のスケジュールされた収集を 30 分間待つのではなく、オペレーターを手動でトリガーして指標を収集し、Workload Manager に送信できます。

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

  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
    

次のステップ