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

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

インストールして構成すると、このテレメトリー オペレーターは、クラスタの健全性とクラスタ構成を継続的にモニタリングするホスト ネットワーク テレメトリー デーモンをデプロイします。オペレーターは、収集した指標をワークロード マネージャーに送信します。その後、Workload Manager の評価を使用して、クラスタで実行されているワークロードをスキャンし、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)バインディングと認証情報をプロビジョニングします。

    • (推奨)OpenShift バージョン 4.22 以降の場合:

      OpenShift バージョン 4.22 以降で --key-storage-method=pool-jwk-file フラグを使用して、クラスタの JSON ウェブキー セット(JWKS)を Workload Identity プール プロバイダに直接保存することを強くおすすめします。これにより、Cloud Storage バケットを作成する必要がなくなります。

      ccoctl gcp create-all \
        --name=NAME \
        --region=REGION \
        --project=PROJECT_ID \
        --credentials-requests-dir=./credrequests \
        --output-dir=./ccoctl-out \
        --key-storage-method=pool-jwk-file
      
    • OpenShift バージョン 4.18 ~ 4.21 の場合:

      ccoctl gcp create-all \
        --name=NAME \
        --region=REGION \
        --project=PROJECT_ID \
        --credentials-requests-dir=./credrequests \
        --output-dir=./ccoctl-out
      

    次のように置き換えます。

    • NAME: ccoctl ユーティリティによって作成された認証情報とリソースの名前。クラスタまたは組織には、一意でランダム性の高い名前(ランダムな英数字の接尾辞を含むなど)を指定することを強くおすすめします。
    • 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 で、作成したサービス アカウント キーに telemetry-agent-sa という名前の Secret を作成します。

    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 のドキュメントクラスタへの Operator の追加をご覧ください。

OpenShift ウェブコンソール

OpenShift Container Platform ウェブ コンソールを使用して OpenShift クラスタにテレメトリー オペレーターをインストールする手順は次のとおりです。

  1. Red Hat OpenShift ウェブ コンソールにログインします。
  2. 管理者の視点になっていることを確認します。
  3. 左側のナビゲーションで、[Operators] セクションを開き、[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] ペインで、[Install] をクリックします。

  7. [Install Operator] ページで、次の手順を完了します。

    1. [更新チャンネル] フィールドで [stable] を選択します。
    2. [Installation mode] フィールドで、[A specific namespace on the cluster] を選択します。
    3. [Installed Namespace] フィールドで、openshift-operators プロジェクトを選択するか、カスタム モニタリング名前空間を作成します。
    4. [承認戦略] フィールドで、[自動] または [手動] を選択します。
    5. [インストール] をクリックします。
  8. オペレーターが正常にインストールされたことを確認するには、次の手順を完了します。

    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 分待つ代わりに、オペレーターを手動でトリガーして指標を収集し、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
    

次のステップ