2.5. カスタムメトリクスに基づいて Pod を自動的にスケーリングする
開発者は、カスタムメトリクスオートスケーラーを使用して、デプロイメント、ステートフルセット、カスタムリソース、またはジョブに対して、CPU やメモリーに基づくだけではないカスタムメトリクスに基づいて OpenShift Container Platform が自動的に Pod 数を増減する方法を指定することができます。
Red Hat OpenShift の Custom Metrics Autoscaler Operator は、Kubernetes Event Driven Autoscaler (KEDA) に基づくオプションの Operator であり、Pod メトリクス以外の追加のメトリクスソースを使用してワークロードをスケーリングできます。
カスタムメトリクスオートスケーラーは現在、Prometheus、CPU、メモリー、および Apache Kafka メトリクスのみをサポートしています。
カスタムメトリクスオートスケーラーはテクノロジープレビュー機能のみとなります。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は実稼働環境でこれらを使用することを推奨していません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
2.5.1. Custom Metrics Autoscaler Operator リリースノート
Red Hat Openshift の Custom Metrics Autoscaler Operator のリリースノートでは、新機能および拡張機能、非推奨となった機能、および既知の問題について説明しています。
Custom Metrics Autoscaler Operator は、Kubernetes ベースの Event Driven Autoscaler (KEDA) を使用し、OpenShift Container Platform の Horizontal Pod Autoscaler (HPA) の上に構築されます。
Red Hat OpenShift の Custom Metrics Autoscaler Operator のロギングサブシステムは、インストール可能なコンポーネントとして提供され、コアの OpenShift Container Platform とは異なるリリースサイクルを備えています。Red Hat OpenShift Container Platform ライフサイクルポリシー はリリースの互換性を概説しています。
2.5.1.1. サポート対象バージョン
以下の表は、各 OpenShift Container Platform バージョンの Custom Metrics Autoscaler Operator バージョンを定義しています。
バージョン | OpenShift Container Platform バージョン | 一般公開 |
---|---|---|
2.8.2-174 | 4.12 | テクノロジープレビュー |
2.8.2-174 | 4.11 | テクノロジープレビュー |
2.8.2-174 | 4.10 | テクノロジープレビュー |
2.5.1.2. Custom Metrics Autoscaler Operator 2.8.2-174 リリースノート
この Custom Metrics Autoscaler Operator 2.8.2-174 リリースでは、OpenShift Container Platform クラスターで Operator を実行するための新機能とバグ修正を使用できます。Custom Metrics Autoscaler Operator 2.8.2-174 のコンポーネントは RHEA-2023:1683 でリリースされました。
Custom Metrics Autoscaler Operator は現在、テクノロジープレビュー 機能です。
2.5.1.2.1. 新機能および機能拡張
2.5.1.2.1.1. Operator のアップグレードサポート
以前の Custom Metrics Autoscaler Operator バージョンからアップグレードできるようになりました。Operator のアップグレードについて、詳しくは「関連情報'の「Operator の更新チャネルの変更」を参照してください。
2.5.1.2.1.2. must-gather サポート
OpenShift Container Platform must-gather
ツールを使用して、Custom Metrics Autoscaler Operator およびそのコンポーネントについてのデータを収集できるようになりました。現時点で、Custom Metrics Autoscaler で must-gather
ツールを使用するプロセスは、他の Operator とは異なります。詳細は、「関連情報」の「デバッグデータの収集」を参照してください。
2.5.1.3. Custom Metrics Autoscaler Operator 2.8.2 リリースノート
Custom Metrics Autoscaler Operator 2.8.2 のこのリリースは、OpenShift Container Platform クラスターで Operator を実行するための新機能とバグ修正を提供します。Custom Metrics Autoscaler Operator 2.8.2 のコンポーネントは RHSA-2023:1042 でリリースされました。
Custom Metrics Autoscaler Operator は現在、テクノロジープレビュー 機能です。
2.5.1.3.1. 新機能および機能拡張
2.5.1.3.1.1. 監査ロギング
Custom Metrics Autoscaler Operator とその関連コンポーネントの監査ログを収集して表示できるようになりました。監査ログは、システムに影響を与えた一連のアクティビティーを個別のユーザー、管理者その他システムのコンポーネント別に記述したセキュリティー関連の時系列のレコードです。
2.5.1.3.1.2. Apache Kafka メトリクスに基づくアプリケーションのスケーリング
KEDA Apache kafka トリガー/スケーラーを使用して、Apache Kafka トピックに基づいてデプロイメントをスケーリングできるようになりました。
Apache Kafka メトリクスに基づく自動スケーリングは、すべての Custom Metrics Autoscaler TP リリースおよび Custom Metrics Autoscaler General Availability リリースで使用できるテクノロジープレビュー (TP) 機能です。
テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は実稼働環境でこれらを使用することを推奨していません。
2.5.1.3.1.3. CPU メトリクスに基づくアプリケーションのスケーリング
KEDA CPU トリガー/スケーラーを使用して、CPU メトリクスに基づいてデプロイメントをスケーリングできるようになりました。
2.5.1.3.1.4. メモリーメトリクスに基づくアプリケーションのスケーリング
KEDA メモリートリガー/スケーラーを使用して、メモリーメトリクスに基づいてデプロイメントをスケーリングできるようになりました。
2.5.2. カスタムメトリクスオートスケーラーについて
カスタムメトリクスオートスケーラー Operator は、特定のアプリケーションからのカスタムの外部メトリクスに基づいて、Pod をスケールアップおよびスケールダウンします。他のアプリケーションは引き続き他のスケーリング方法を使用します。スケーラーとも呼ばれる トリガー を設定します。これは、カスタムメトリクスオートスケーラーがスケーリング方法を決定するために使用するイベントとメトリクスのソースです。カスタムメトリクスオートスケーラーはメトリクス API を使用して、外部メトリクスを OpenShift Container Platform が使用できる形式に変換します。カスタムメトリクスオートスケーラーは、実際のスケーリングを実行する Horizontal Pod Autoscaler (HPA) を作成します。
カスタムメトリクスオートスケーラーを使用するには、スケーリングメタデータを定義するカスタムリソース (CR) である ScaledObject
または ScaledJob
オブジェクトを作成します。スケーリングするデプロイメントまたはジョブ、スケーリングするメトリクスのソース (トリガー)、許可される最小および最大レプリカ数などのその他のパラメーターを指定します。
スケーリングするワークロードごとに、スケーリングされたオブジェクトまたはスケーリングされたジョブを 1 つだけ作成できます。また、スケーリングされたオブジェクトまたはスケーリングされたジョブと Horizontal Pod Autoscaler (HPA) を同じワークロードで使用することはできません。
カスタムメトリクスオートスケーラーは、HPA とは異なり、ゼロにスケーリングできます。カスタムメトリクスオートスケーラー CR の minReplicaCount
値を 0
に設定すると、カスタムメトリクスオートスケーラーはワークロードを 1 レプリカから 0 レプリカにスケールダウンするか、0 レプリカから 1 にスケールアップします。これは、アクティベーションフェーズ として知られています。1 つのレプリカにスケールアップした後、HPA はスケーリングを制御します。これは スケーリングフェーズ として知られています。
一部のトリガーにより、クラスターメトリクスオートスケーラーによってスケーリングされるレプリカの数を変更できます。いずれの場合も、アクティベーションフェーズを設定するパラメーターは、activation で始まる同じフレーズを常に使用します。たとえば、threshold
パラメーターがスケーリングを設定する場合、activationThreshold
はアクティベーションを設定します。アクティベーションフェーズとスケーリングフェーズを設定すると、スケーリングポリシーの柔軟性が向上します。たとえば、アクティベーションフェーズをより高く設定することで、メトリクスが特に低い場合にスケールアップまたはスケールダウンを防ぐことができます。
それぞれ異なる決定を行う場合は、スケーリングの値よりもアクティベーションの値が優先されます。たとえば、threshold
が 10
に設定されていて、activationThreshold
が 50
である場合にメトリクスが 40
を報告した場合、スケーラーはアクティブにならず、HPA が 4 つのインスタンスを必要とする場合でも Pod はゼロにスケーリングされます。
カスタムリソース内の Pod の数を確認するか、Custom Metrics Autoscaler Operator ログで次のようなメッセージを確認することで、自動スケーリングが行われたことを確認できます。
Successfully set ScaleTarget replica count
Successfully updated ScaleTarget
必要に応じて、ワークロードオブジェクトの自動スケーリングを一時停止できます。たとえば、クラスターのメンテナンスを実行する前に自動スケーリングを一時停止できます。
2.5.3. カスタムメトリクスオートスケーラーのインストール
OpenShift Container Platform Web コンソールを使って Custom Metrics Autoscaler Operator をインストールすることができます。
インストールにより、5 つの CRD が作成されます。
-
ClusterTriggerAuthentication
-
KedaController
-
ScaledJob
-
ScaledObject
-
TriggerAuthentication
前提条件
コミュニティー KEDA を使用する場合:
- コミュニティー KEDA をアンインストールします。同じ OpenShift Container Platform クラスターで KEDA とカスタムメトリクスオートスケーラーの両方を実行することはできません。
次のコマンドを実行して、KEDA 1.x カスタムリソース定義を削除します。
$ oc delete crd scaledobjects.keda.k8s.io
$ oc delete crd triggerauthentications.keda.k8s.io
手順
- OpenShift Container Platform Web コンソールで、Operators → OperatorHub をクリックします。
- 使用可能な Operator のリストから Custom Metrics Autoscaler を選択し、Install をクリックします。
- Install Operator ページで、Installation Mode に All namespaces on the cluster (default) オプションが選択されていることを確認します。これにより、Operator がすべての namespace にインストールされます。
- Installed Namespace に openshift-keda namespace が選択されていることを確認します。クラスターに存在しない場合、OpenShift Container Platform は namespace を作成します。
- Install をクリックします。
Custom Metrics Autoscaler Operator コンポーネントを一覧表示して、インストールを確認します。
- Workloads → Pods に移動します。
-
ドロップダウンメニューから
openshift-keda
プロジェクトを選択し、custom-metrics-autoscaler-operator-*
Pod が実行されていることを確認します。 -
Workloads → Deployments に移動して、
custom-metrics-autoscaler-operator
デプロイメントが実行されていることを確認します。
オプション: 次のコマンドを使用して、OpenShift CLI でインストールを確認します。
$ oc get all -n openshift-keda
以下のような出力が表示されます。
出力例
NAME READY STATUS RESTARTS AGE pod/custom-metrics-autoscaler-operator-5fd8d9ffd8-xt4xp 1/1 Running 0 18m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/custom-metrics-autoscaler-operator 1/1 1 1 18m NAME DESIRED CURRENT READY AGE replicaset.apps/custom-metrics-autoscaler-operator-5fd8d9ffd8 1 1 1 18m
必要な CRD を作成する
KedaController
カスタムリソースをインストールします。- OpenShift Container Platform Web コンソールで、Operators → Installed Operators をクリックします。
- Custom Metrics Autoscaler をクリックします。
- Operator Details ページで、KedaController タブをクリックします。
KedaController タブで、Create KedaController をクリックしてファイルを編集します。
kind: KedaController apiVersion: keda.sh/v1alpha1 metadata: name: keda namespace: openshift-keda spec: watchNamespace: '' 1 operator: logLevel: info 2 logEncoder: console 3 metricsServer: logLevel: '0' 4 auditConfig: 5 logFormat: "json" logOutputVolumeClaim: "persistentVolumeClaimName" policy: rules: - level: Metadata omitStages: "RequestReceived" omitManagedFields: false lifetime: maxAge: "2" maxBackup: "1" maxSize: "50" serviceAccount: {}
- 1 1
- カスタムオートスケーラーが監視する namespace を指定します。コンマ区切りのリストに名前を入力します。すべての namespace を監視するには、省略するか空に設定します。デフォルトは空です。
- 2
- Custom Metrics Autoscaler Operator ログメッセージの詳細レベルを指定します。許可される値は
debug
、info
、error
です。デフォルトはinfo
です。 - 3
- Custom Metrics Autoscaler Operator ログメッセージのログ形式を指定します。許可される値は
console
またはjson
です。デフォルトはコンソール
です。 - 4
- Custom Metrics Autoscaler Metrics Server のログレベルを指定します。許可される値は、
info
の場合は0
で、debug
の場合は4
です。デフォルトは0
です。 - 5
- Custom Metrics Autoscaler Operator の監査ログをアクティブにして、使用する監査ポリシーを指定します (「監査ログの設定」セクションを参照)。
- Create をクリックして、KEDAController を作成します。
2.5.4. カスタムメトリクスオートスケーラートリガーについて
スケーラーとも呼ばれるトリガーは、Custom Metrics Autoscaler Operator が Pod をスケーリングするために使用するメトリクスを提供します。
カスタムメトリクスオートスケーラーは現在、Prometheus、CPU、メモリー、および Apache Kafka トリガーのみをサポートしています。
以下のセクションで説明するように、ScaledObject
または ScaledJob
カスタムリソースを使用して、特定のオブジェクトのトリガーを設定します。
2.5.4.1. Prometheus トリガーについて
Prometheus メトリクスに基づいて Pod をスケーリングできます。このメトリクスは、インストール済みの OpenShift Container Platform モニタリングまたは外部 Prometheus サーバーをメトリクスソースとして使用できます。OpenShift Container Platform モニタリングをメトリクスのソースとして使用するために必要な設定については、関連情報 を参照してください。
カスタムメトリクスオートスケーラーがスケーリングしているアプリケーションから Prometheus がメトリクスを取得している場合は、カスタムリソースで最小レプリカ数を 0
に設定しないでください。アプリケーション Pod がない場合、カスタムメトリクスオートスケーラーにはスケールするメトリクスがありません。
Prometheus ターゲットを使用したスケーリングされたオブジェクトの例
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: prom-scaledobject namespace: my-namespace spec: ... triggers: - type: prometheus 1 metadata: serverAddress: https://thanos-querier.openshift-monitoring.svc.cluster.local:9092 2 namespace: kedatest 3 metricName: http_requests_total 4 threshold: '5' 5 query: sum(rate(http_requests_total{job="test-app"}[1m])) 6 authModes: "basic" 7 cortexOrgID: my-org 8 ignoreNullValues: false 9 unsafeSsl: "false" 10
- 1
- スケーラー/トリガータイプとして Prometheus を指定します。
- 2
- Prometheus サーバーのアドレスを指定します。この例では、OpenShift Container Platform モニタリングを使用します。
- 3
- オプション: スケーリングするオブジェクトの namespace を指定します。メトリクスのソースとして OpenShift Container Platform モニタリングを使用する場合、このパラメーターは必須です。
- 4
external.metrics.k8s.io
API でメトリクスを識別する名前を指定します。複数のトリガーを使用している場合、すべてのメトリクス名は一意である必要があります。- 5
- スケーリングを開始する値を指定します。
- 6
- 使用する Prometheus クエリーを指定します。
- 7
- 使用する認証方法を指定します。Prometheus スケーラーは、ベアラー認証 (
bearer
)、基本認証 (basic
)、または TLS 認証 (tls
) をサポートしています。以下のセクションで説明するように、トリガー認証で特定の認証パラメーターを設定します。必要に応じて、シークレットを使用することもできます。 - 8
- 9
- オプション: Prometheus ターゲットが失われた場合のトリガーの処理方法を指定します。
-
true
の場合、Prometheus ターゲットが失われても、トリガーは動作し続けます。これはデフォルトになります。 -
false
の場合、Prometheus ターゲットが失われると、トリガーはエラーを返します。
-
- 10
- オプション: 証明書チェックをスキップするかどうかを指定します。たとえば、Prometheus エンドポイントで自己署名証明書を使用する場合は、チェックをスキップできます。
-
true
の場合、証明書チェックが実行されます。 -
false
の場合、証明書チェックは実行されません。これはデフォルトになります。
-
2.5.4.2. CPU トリガーについて
CPU メトリクスに基づいて Pod をスケーリングできます。このトリガーは、クラスターメトリクスをメトリクスのソースとして使用します。
カスタムメトリクスオートスケーラーは、オブジェクトに関連付けられた Pod をスケーリングして、指定された CPU 使用率を維持します。オートスケーラーは、すべての Pod で指定された CPU 使用率を維持するために、最小数と最大数の間でレプリカ数を増減します。メモリートリガーは、Pod 全体のメモリー使用率を考慮します。Pod に複数のコンテナーがある場合、メモリー使用率はすべてのコンテナーの合計になります。
-
このトリガーは、
ScaledJob
カスタムリソースでは使用できません。 -
メモリートリガーを使用してオブジェクトをスケーリングすると、複数のトリガーを使用している場合でも、オブジェクトは
0
にスケーリングされません。
CPU ターゲットを使用してスケーリングされたオブジェクトの例
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: cpu-scaledobject namespace: my-namespace spec: ... triggers: - type: cpu 1 metricType: Utilization 2 metadata: value: "60" 3 containerName: "api" 4
- 1
- スケーラー/トリガータイプとして CPU を指定します。
- 2
- 使用するメトリックのタイプ (
Utilization
またはAverageValue
のいずれか) を指定します。 - 3
- スケーリングアクションをトリガーする値を指定します。
-
Utilization
を使用する場合、ターゲット値は、関連する全 Pod のリソースメトリクスの平均値であり、Pod のリソースの要求値に占めるパーセンテージとして表されます。 -
AverageValue
を使用する場合、ターゲット値は、関連する全 Pod のメトリクスの平均値です。
-
- 4
- オプション:Pod 全体ではなく、そのコンテナーのみのメモリー使用率に基づいて、スケーリングする個々のコンテナーを指定します。ここでは、
api
という名前のコンテナーのみがスケーリングされます。
2.5.4.3. メモリートリガーについて
メモリーメトリクスに基づいて Pod をスケーリングできます。このトリガーは、クラスターメトリクスをメトリクスのソースとして使用します。
カスタムメトリクスオートスケーラーは、オブジェクトに関連付けられた Pod をスケーリングして、指定されたメモリー使用率を維持します。オートスケーラーは、すべての Pod で指定のメモリー使用率を維持するために、最小数と最大数の間でレプリカ数を増減します。メモリートリガーは、Pod 全体のメモリー使用率を考慮します。Pod に複数のコンテナーがある場合、メモリー使用率はすべてのコンテナーの合計になります。
-
このトリガーは、
ScaledJob
カスタムリソースでは使用できません。 -
メモリートリガーを使用してオブジェクトをスケーリングすると、複数のトリガーを使用している場合でも、オブジェクトは
0
にスケーリングされません。
メモリーターゲットを使用してスケーリングされたオブジェクトの例
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: memory-scaledobject namespace: my-namespace spec: ... triggers: - type: memory 1 metricType: Utilization 2 metadata: value: "60" 3 containerName: "api" 4
- 1
- スケーラー/トリガータイプとしてメモリーを指定します。
- 2
- 使用するメトリックのタイプ (
Utilization
またはAverageValue
のいずれか) を指定します。 - 3
- スケーリングアクションをトリガーする値を指定します。
-
Utilization
を使用する場合、ターゲット値は、関連する全 Pod のリソースメトリクスの平均値であり、Pod のリソースの要求値に占めるパーセンテージとして表されます。 -
AverageValue
を使用する場合、ターゲット値は、関連する全 Pod のメトリクスの平均値です。
-
- 4
- オプション:Pod 全体ではなく、そのコンテナーのみのメモリー使用率に基づいて、スケーリングする個々のコンテナーを指定します。ここでは、
api
という名前のコンテナーのみがスケーリングされます。
2.5.4.4. Kafka トリガーについて
Apache Kafka トピックまたは Kafka プロトコルをサポートするその他のサービスに基づいて Pod をスケーリングできます。カスタムメトリクスオートスケーラーは、スケーリングされるオブジェクトまたはスケーリングされるジョブで allowIdleConsumers
パラメーターを true
に設定しない限り、Kafka パーティションの数を超えてスケーリングしません。
コンシューマーグループの数がトピック内のパーティションの数を超えると、余分なコンシューマーグループはアイドル状態になります。
これを回避するために、デフォルトではレプリカの数は次の値を超えません。
- トピックのパーティションの数 (トピックが指定されている場合)。
- コンシューマーグループ内の全トピックのパーティション数 (トピックが指定されていない場合)。
-
スケーリングされるオブジェクトまたはスケーリングされるジョブの CR で指定された
maxReplicaCount
。
これらのデフォルトの動作は、allowIdleConsumers
パラメーターを使用して無効にすることができます。
Kafka ターゲットを使用してスケーリングされたオブジェクトの例
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: kafka-scaledobject namespace: my-namespace spec: ... triggers: - type: kafka 1 metadata: topic: my-topic 2 bootstrapServers: my-cluster-kafka-bootstrap.openshift-operators.svc:9092 3 consumerGroup: my-group 4 lagThreshold: '10' 5 activationLagThreshold 6 offsetResetPolicy: 'latest' 7 allowIdleConsumers: true 8 scaleToZeroOnInvalidOffset: false 9 excludePersistentLag: false 10 version: 1.0.0 11 partitionLimitation: '1,2,10-20,31' 12
- 1
- スケーラー/トリガータイプとして Kafka を指定します。
- 2
- Kafka がオフセットラグを処理している Kafka トピックの名前を指定します。
- 3
- 接続する Kafka ブローカーのコンマ区切りリストを指定します。
- 4
- トピックのオフセットの確認と、関連するラグの処理に使用される Kafka コンシューマーグループの名前を指定します。
- 5
- オプション: スケーリングアクションをトリガーする平均ターゲット値を指定します。デフォルトは
5
です。 - 6
- オプション: アクティベーションフェーズのターゲット値を指定します。
- 7
- オプション: Kafka コンシューマーの Kafka オフセットリセットポリシーを指定します。使用可能な値は
latest
およびearliest
です。デフォルトはlatest
です。 - 8
- オプション: Kafka レプリカの数がトピックのパーティションの数を超えることを許可するかどうかを指定します。
-
true
の場合、Kafka レプリカの数はトピックのパーティションの数を超えることができます。これにより、Kafka コンシューマーがアイドル状態になることが許容されます。 -
false
の場合、Kafka レプリカの数はトピックのパーティションの数を超えることはできません。これはデフォルトになります。
-
- 9
- Kafka パーティションに有効なオフセットがない場合のトリガーの動作を指定します。
-
true
の場合、そのパーティションのコンシューマーはゼロにスケーリングされます。 -
false
の場合、スケーラーはそのパーティションのために 1 つのコンシューマーを保持します。これはデフォルトになります。
-
- 10
- オプション: 現在のオフセットが前のポーリングサイクルの現在のオフセットと同じであるパーティションのパーティションラグをトリガーに含めるか除外するかを指定します。
-
true
の場合、スケーラーはこれらのパーティションのパーティションラグを除外します。 -
false
の場合、すべてのパーティションのコンシューマーラグがすべてトリガーに含まれます。これはデフォルトになります。
-
- 11
- オプション: Kafka ブローカーのバージョンを指定します。デフォルトは
1.0.0
です。 - 12
- オプション: スケーリングのスコープを適用するパーティション ID のコンマ区切りリストを指定します。指定されている場合、ラグの計算時にリスト内の ID のみが考慮されます。デフォルトでは、すべてのパーティションが考慮されます。
2.5.5. カスタムメトリクスオートスケーラートリガー認証について
トリガー認証を使用すると、関連付けられたコンテナーで使用できるスケーリングされたオブジェクトまたはスケーリングされたジョブに認証情報を含めることができます。トリガー認証を使用して、OpenShift Container Platform シークレット、プラットフォームネイティブの Pod 認証メカニズム、環境変数などを渡すことができます。
スケーリングするオブジェクトと同じ namespace に TriggerAuthentication
オブジェクトを定義します。そのトリガー認証は、その namespace 内のオブジェクトによってのみ使用できます。
または、複数の namespace のオブジェクト間で認証情報を共有するには、すべての namespace で使用できる ClusterTriggerAuthentication
オブジェクトを作成できます。
トリガー認証とクラスタートリガー認証は同じ設定を使用します。ただし、クラスタートリガー認証では、スケーリングされたオブジェクトの認証参照に追加の kind
パラメーターが必要です。
シークレットを使用したトリガー認証の例
kind: TriggerAuthentication apiVersion: keda.sh/v1alpha1 metadata: name: secret-triggerauthentication namespace: my-namespace 1 spec: secretTargetRef: 2 - parameter: user-name 3 name: my-secret 4 key: USER_NAME 5 - parameter: password name: my-secret key: USER_PASSWORD
シークレットを使用したクラスタートリガー認証の例
kind: ClusterTriggerAuthentication apiVersion: keda.sh/v1alpha1 metadata: 1 name: secret-cluster-triggerauthentication spec: secretTargetRef: 2 - parameter: user-name 3 name: secret-name 4 key: USER_NAME 5 - parameter: user-password name: secret-name key: USER_PASSWORD
トークンを使用したトリガー認証の例
kind: TriggerAuthentication apiVersion: keda.sh/v1alpha1 metadata: name: token-triggerauthentication namespace: my-namespace 1 spec: secretTargetRef: 2 - parameter: bearerToken 3 name: my-token-2vzfq 4 key: token 5 - parameter: ca name: my-token-2vzfq key: ca.crt
環境変数を使用したトリガー認証の例
kind: TriggerAuthentication apiVersion: keda.sh/v1alpha1 metadata: name: env-var-triggerauthentication namespace: my-namespace 1 spec: env: 2 - parameter: access_key 3 name: ACCESS_KEY 4 containerName: my-container 5
Pod 認証プロバイダーを使用したトリガー認証の例
kind: TriggerAuthentication apiVersion: keda.sh/v1alpha1 metadata: name: pod-id-triggerauthentication namespace: my-namespace 1 spec: podIdentity: 2 provider: aws-eks 3
関連情報
- OpenShift Container Platform シークレットの詳細は、Providing sensitive data to pods を参照してください。
2.5.5.1. トリガー認証の使用
トリガー認証とクラスタートリガー認証は、カスタムリソースを使用して認証を作成し、スケーリングされたオブジェクトまたはスケーリングされたジョブへの参照を追加することで使用します。
前提条件
- Custom Metrics Autoscaler Operator をインストールしている必要がある。
シークレットを使用している場合は、
Secret
オブジェクトが存在する必要があります。次に例を示します。シークレットの例
apiVersion: v1 kind: Secret metadata: name: my-secret data: user-name: <base64_USER_NAME> password: <base64_USER_PASSWORD>
手順
TriggerAuthentication
またはClusterTriggerAuthentication
オブジェクトを作成します。オブジェクトを定義する YAML ファイルを作成します。
シークレットを使用したトリガー認証の例
kind: TriggerAuthentication apiVersion: keda.sh/v1alpha1 metadata: name: prom-triggerauthentication namespace: my-namespace spec: secretTargetRef: - parameter: user-name name: my-secret key: USER_NAME - parameter: password name: my-secret key: USER_PASSWORD
TriggerAuthentication
オブジェクトを作成します。$ oc create -f <file-name>.yaml
ScaledObject
YAML ファイルを作成または編集します。スケーリングされたオブジェクトの例
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: scaledobject namespace: my-namespace spec: scaleTargetRef: name: example-deployment maxReplicaCount: 100 minReplicaCount: 0 pollingInterval: 30 triggers: - authenticationRef: type: prometheus metadata: serverAddress: https://thanos-querier.openshift-monitoring.svc.cluster.local:9092 namespace: kedatest # replace <NAMESPACE> metricName: http_requests_total threshold: '5' query: sum(rate(http_requests_total{job="test-app"}[1m])) authModes: "basic" - authenticationRef: 1 name: prom-triggerauthentication metadata: name: prom-triggerauthentication type: object - authenticationRef: 2 name: prom-cluster-triggerauthentication kind: ClusterTriggerAuthentication metadata: name: prom-cluster-triggerauthentication type: object
注記namespace トリガー認証とクラスタートリガー認証の両方を指定する必要はありません。
オブジェクトを作成します。以下に例を示します。
$ oc apply -f <file-name>
2.5.6. Configuring the custom metrics autoscaler to use OpenShift Container Platform monitoring
カスタムメトリクスオートスケーラーが使用するメトリクスのソースとして、インストール済みの OpenShift Container Platform Prometheus モニタリングを使用できます。ただし、実行する必要がある追加の設定がいくつかあります。
これらの手順は、外部 Prometheus ソースには必要ありません。
このセクションで説明するように、次のタスクを実行する必要があります。
- トークンを取得するためのサービスアカウントを作成します。
- ロールを作成します。
- そのロールをサービスアカウントに追加します。
- Prometheus が使用するトリガー認証オブジェクトでトークンを参照します。
前提条件
- OpenShift Container Platform モニタリングをインストールしている必要がある。
- ユーザー定義のワークロードのモニタリングを、OpenShift Container Platform モニタリングで有効にする必要がある (ユーザー定義のワークロードモニタリング設定マップの作成 セクションで説明)。
- Custom Metrics Autoscaler Operator をインストールしている必要がある。
手順
スケーリングするオブジェクトを含むプロジェクトに変更します。
$ oc project my-project
クラスターにサービスアカウントがない場合は、次のコマンドを使用してサービスアカウントを作成します。
$ oc create serviceaccount <service_account>
ここでは、以下のようになります。
- <service_account>
- サービスアカウントの名前を指定します。
次のコマンドを使用して、サービスアカウントに割り当てられたトークンを見つけます。
$ oc describe serviceaccount <service_account>
ここでは、以下のようになります。
- <service_account>
- サービスアカウントの名前を指定します。
出力例
Name: thanos Namespace: my-project Labels: <none> Annotations: <none> Image pull secrets: thanos-dockercfg-nnwgj Mountable secrets: thanos-dockercfg-nnwgj Tokens: thanos-token-9g4n5 1 Events: <none>
- 1
- トリガー認証でこのトークンを使用します。
サービスアカウントトークンを使用してトリガー認証を作成します。
以下のような YAML ファイルを作成します。
apiVersion: keda.sh/v1alpha1 kind: TriggerAuthentication metadata: name: keda-trigger-auth-prometheus spec: secretTargetRef: 1 - parameter: bearerToken 2 name: thanos-token-9g4n5 3 key: token 4 - parameter: ca name: thanos-token-9g4n5 key: ca.crt
CR オブジェクトを作成します。
$ oc create -f <file-name>.yaml
Thanos メトリクスを読み取るためのロールを作成します。
次のパラメーターを使用して YAML ファイルを作成します。
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: thanos-metrics-reader rules: - apiGroups: - "" resources: - pods verbs: - get - apiGroups: - metrics.k8s.io resources: - pods - nodes verbs: - get - list - watch
CR オブジェクトを作成します。
$ oc create -f <file-name>.yaml
Thanos メトリクスを読み取るためのロールバインディングを作成します。
以下のような YAML ファイルを作成します。
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: thanos-metrics-reader 1 namespace: my-project 2 roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: thanos-metrics-reader subjects: - kind: ServiceAccount name: thanos 3 namespace: my-project 4
CR オブジェクトを作成します。
$ oc create -f <file-name>.yaml
以下のセクションで説明するように、スケーリングされたオブジェクトまたはスケーリングされたジョブをデプロイして、アプリケーションの自動スケーリングを有効化できるようになりました。ソースとして OpenShift Container Platform モニタリングを使用するには、トリガーまたはスケーラーで prometheus
タイプを指定し、https://thanos-querier.openshift-monitoring.svc.cluster.local:9092
を serverAddress
として使用します。
関連情報
- ユーザー定義のワークロードのモニタリングを有効化する方法については、 ユーザー定義のワークロードモニタリング設定マップの作成 を参照してください。
2.5.7. ワークロードのカスタムメトリクスオートスケーラーの一時停止
autoscaling.keda.sh/paused-replicas
アノテーションをそのワークロードのカスタムメトリクスオートスケーラーに追加することで、必要に応じてワークロードの自動スケーリングを一時停止できます。カスタムメトリクスオートスケーラーは、そのワークロードのレプリカを指定された値にスケーリングし、アノテーションが削除されるまで自動スケーリングを一時停止します。
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: annotations: autoscaling.keda.sh/paused-replicas: "4" ...
自動スケーリングを再開するには、ScaledObject
CR を編集してアノテーションを削除します。
たとえば、クラスターのメンテナンスを実行する前に自動スケーリングを一時停止したり、ミッションクリティカルではないワークロードを削除してリソース不足を回避したりできます。
手順
次のコマンドを使用して、ワークロードの
ScaledObject
CR を編集します。$ oc edit ScaledObject scaledobject
autoscaling.keda.sh/paused-replicas
アノテーションに任意の値を追加します。apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: annotations: autoscaling.keda.sh/paused-replicas: "4" 1 creationTimestamp: "2023-02-08T14:41:01Z" generation: 1 name: scaledobject namespace: my-project resourceVersion: "65729" uid: f5aec682-acdf-4232-a783-58b5b82f5dd0
- 1
- Custom Metrics Autoscaler Operator がレプリカを指定された値にスケーリングし、自動スケーリングを停止するよう指定します。
2.5.8. 監査ログの設定
システムに影響を与えた一連のアクティビティーを個別のユーザー、管理者その他システムのコンポーネント別に記述したセキュリティー関連の時系列のレコードを提供する、監査ログを収集できます。
たとえば、監査ログは、自動スケーリングリクエストの送信元を理解するのに役立ちます。これは、ユーザーアプリケーションによる自動スケーリングリクエストによってバックエンドが過負荷になり、問題のあるアプリケーションを特定する必要がある場合に重要な情報です。KedaController
カスタムリソースを編集することで、Custom Metrics Autoscaler Operator の監査を設定できます。ログは、KedaController
CR の永続ボリューム要求を使用して保護されたボリューム上の監査ログファイルに送信されます。
前提条件
- Custom Metrics Autoscaler Operator をインストールしている必要がある。
手順
KedaController
カスタムリソースを編集して、auditConfig
スタンザを追加します。kind: KedaController apiVersion: keda.sh/v1alpha1 metadata: name: keda namespace: openshift-keda spec: ... metricsServer: ... auditConfig: logFormat: "json" 1 logOutputVolumeClaim: "pvc-audit-log" 2 policy: rules: 3 - level: Metadata omitStages: "RequestReceived" 4 omitManagedFields: false 5 lifetime: 6 maxAge: "2" maxBackup: "1" maxSize: "50"
- 1
- 監査ログの出力形式を
legacy
またはjson
のいずれかで指定します。 - 2
- ログデータを格納するための既存の永続ボリューム要求を指定します。API サーバーに送信されるすべてのリクエストは、この永続ボリューム要求に記録されます。このフィールドを空のままにすると、ログデータは stdout に送信されます。
- 3
- どのイベントを記録し、どのデータを含めるかを指定します。
-
None
: イベントをログに記録しません。 -
Metadata
: ユーザー、タイムスタンプなど、リクエストのメタデータのみをログに記録します。リクエストテキストと応答テキストはログに記録しないでください。これはデフォルトになります。 -
Request
: メタデータと要求テキストのみをログに記録しますが、応答テキストはログに記録しません。このオプションは、リソース以外の要求には適用されません。 -
RequestResponse
: イベントのメタデータ、要求テキスト、および応答テキストをログに記録します。このオプションは、リソース以外の要求には適用されません。
-
- 4
- イベントを作成しないステージを指定します。
- 5
- リクエストおよび応答本文のマネージドフィールドが API 監査ログに書き込まれないようにするかどうかを指定します。フィールドを省略する場合は
true
、フィールドを含める場合はfalse
を指定します。 - 6
- 監査ログのサイズと有効期間を指定します。
-
maxAge
: ファイル名にエンコードされたタイムスタンプに基づく、監査ログファイルを保持する最大日数。 -
maxBackup
: 保持する監査ログファイルの最大数。すべての監査ログファイルを保持するには、0
に設定します。 -
maxSize
: ローテーションされる前の監査ログファイルの最大サイズ (メガバイト単位)。
-
検証
監査ログファイルを直接表示します。
keda-metrics-apiserver-*
Pod の名前を取得します。oc get pod -n openshift-keda
出力例
NAME READY STATUS RESTARTS AGE custom-metrics-autoscaler-operator-5cb44cd75d-9v4lv 1/1 Running 0 8m20s keda-metrics-apiserver-65c7cc44fd-rrl4r 1/1 Running 0 2m55s keda-operator-776cbb6768-zpj5b 1/1 Running 0 2m55s
次のようなコマンドを使用して、ログデータを表示します。
$ oc logs keda-metrics-apiserver-<hash>|grep -i metadata 1
- 1
- オプション:
grep
コマンドを使用して、表示するログレベル (Metadata
、Request
、RequestResponse
) を指定できます。
以下に例を示します。
$ oc logs keda-metrics-apiserver-65c7cc44fd-rrl4r|grep -i metadata
出力例
... {"kind":"Event","apiVersion":"audit.k8s.io/v1","level":"Metadata","auditID":"4c81d41b-3dab-4675-90ce-20b87ce24013","stage":"ResponseComplete","requestURI":"/healthz","verb":"get","user":{"username":"system:anonymous","groups":["system:unauthenticated"]},"sourceIPs":["10.131.0.1"],"userAgent":"kube-probe/1.26","responseStatus":{"metadata":{},"code":200},"requestReceivedTimestamp":"2023-02-16T13:00:03.554567Z","stageTimestamp":"2023-02-16T13:00:03.555032Z","annotations":{"authorization.k8s.io/decision":"allow","authorization.k8s.io/reason":""}} ...
または、特定のログを表示できます。
次のようなコマンドを使用して、
keda-metrics-apiserver-*
Pod にログインします。$ oc rsh pod/keda-metrics-apiserver-<hash> -n openshift-keda
以下に例を示します。
$ oc rsh pod/keda-metrics-apiserver-65c7cc44fd-rrl4r -n openshift-keda
/var/audit-policy/
ディレクトリーに移動します。sh-4.4$ cd /var/audit-policy/
利用可能なログを一覧表示します。
sh-4.4$ ls
出力例
log-2023.02.17-14:50 policy.yaml
必要に応じてログを表示します。
sh-4.4$ cat <log_name>/<pvc_name>|grep -i <log_level> 1
- 1
- オプション:
grep
コマンドを使用して、表示するログレベル (Metadata
、Request
、RequestResponse
) を指定できます。
以下に例を示します。
sh-4.4$ cat log-2023.02.17-14:50/pvc-audit-log|grep -i Request
出力例
... {"kind":"Event","apiVersion":"audit.k8s.io/v1","level":"Request","auditID":"63e7f68c-04ec-4f4d-8749-bf1656572a41","stage":"ResponseComplete","requestURI":"/openapi/v2","verb":"get","user":{"username":"system:aggregator","groups":["system:authenticated"]},"sourceIPs":["10.128.0.1"],"responseStatus":{"metadata":{},"code":304},"requestReceivedTimestamp":"2023-02-17T13:12:55.035478Z","stageTimestamp":"2023-02-17T13:12:55.038346Z","annotations":{"authorization.k8s.io/decision":"allow","authorization.k8s.io/reason":"RBAC: allowed by ClusterRoleBinding \"system:discovery\" of ClusterRole \"system:discovery\" to Group \"system:authenticated\""}} ...
関連情報
2.5.9. デバッグデータの収集
サポートケースを作成する際、ご使用のクラスターについてのデバッグ情報を Red Hat サポートに提供していただくと Red Hat のサポートに役立ちます。
以下の情報を指定することが推奨されます。
-
must-gather
ツールを使用して収集されるデータ。 - 一意のクラスター ID。
must-gather
ツールを使用して、以下を含む Custom Metrics Autoscaler Operator とそのコンポーネントに関するデータを収集できます。
-
openshift-keda
namespace とその子オブジェクト。 - Custom Metric Autoscaler Operator のインストールオブジェクト。
- Custom Metric Autoscaler Operator の CRD オブジェクト。
以下のコマンドは、Custom Metrics Autoscaler Operator の must-gather
ツールを実行します。
$ oc adm must-gather --image="$(oc get packagemanifests openshift-custom-metrics-autoscaler-operator \ -n openshift-marketplace \ -o jsonpath='{.status.channels[?(@.name=="stable")].currentCSVDesc.annotations.containerImage}')"
標準の OpenShift Container Platform must-gather
コマンドである oc adm must-gather
は、Custom Metrics Autoscaler Operator データを収集しません。
前提条件
-
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。 -
OpenShift Container Platform CLI (
oc
) がインストールされている。
手順
must-gather
データを保存するディレクトリーに移動します。注記クラスターがネットワークが制限された環境を使用している場合、追加の手順を実行する必要があります。ミラーレジストリーに信頼される CA がある場合、まず信頼される CA をクラスターに追加する必要があります。制限されたネットワーク上のすべてのクラスターでは、次のコマンドを実行して、デフォルトの
must-gather
イメージをイメージストリームとしてインポートする必要があります。$ oc import-image is/must-gather -n openshift
以下のいずれかを実行します。
Custom Metrics Autoscaler Operator の
must-gather
データのみを取得するには、以下のコマンドを使用します。$ oc adm must-gather --image="$(oc get packagemanifests openshift-custom-metrics-autoscaler-operator \ -n openshift-marketplace \ -o jsonpath='{.status.channels[?(@.name=="stable")].currentCSVDesc.annotations.containerImage}')"
must-gather
コマンドのカスタムイメージは、Operator パッケージマニフェストから直接プルされます。そうすることで、Custom Metric Autoscaler Operator が利用可能なクラスター上で機能します。Custom Metric Autoscaler Operator 情報に加えてデフォルトの
must-gather
データを収集するには、以下を実行します。以下のコマンドを使用して Custom Metrics Autoscaler Operator イメージを取得し、これを環境変数として設定します。
$ IMAGE="$(oc get packagemanifests openshift-custom-metrics-autoscaler-operator \ -n openshift-marketplace \ -o jsonpath='{.status.channels[?(@.name=="stable")].currentCSVDesc.annotations.containerImage}')"
Custom Metrics Autoscaler Operator イメージで
oc adm must-gather
を使用するには、以下を実行します。$ oc adm must-gather --image-stream=openshift/must-gather --image=${IMAGE}
例2.1 Custom Metric Autoscaler の must-gather 出力例:
└── openshift-keda ├── apps │ ├── daemonsets.yaml │ ├── deployments.yaml │ ├── replicasets.yaml │ └── statefulsets.yaml ├── apps.openshift.io │ └── deploymentconfigs.yaml ├── autoscaling │ └── horizontalpodautoscalers.yaml ├── batch │ ├── cronjobs.yaml │ └── jobs.yaml ├── build.openshift.io │ ├── buildconfigs.yaml │ └── builds.yaml ├── core │ ├── configmaps.yaml │ ├── endpoints.yaml │ ├── events.yaml │ ├── persistentvolumeclaims.yaml │ ├── pods.yaml │ ├── replicationcontrollers.yaml │ ├── secrets.yaml │ └── services.yaml ├── discovery.k8s.io │ └── endpointslices.yaml ├── image.openshift.io │ └── imagestreams.yaml ├── k8s.ovn.org │ ├── egressfirewalls.yaml │ └── egressqoses.yaml ├── keda.sh │ ├── kedacontrollers │ │ └── keda.yaml │ ├── scaledobjects │ │ └── example-scaledobject.yaml │ └── triggerauthentications │ └── example-triggerauthentication.yaml ├── monitoring.coreos.com │ └── servicemonitors.yaml ├── networking.k8s.io │ └── networkpolicies.yaml ├── openshift-keda.yaml ├── pods │ ├── custom-metrics-autoscaler-operator-58bd9f458-ptgwx │ │ ├── custom-metrics-autoscaler-operator │ │ │ └── custom-metrics-autoscaler-operator │ │ │ └── logs │ │ │ ├── current.log │ │ │ ├── previous.insecure.log │ │ │ └── previous.log │ │ └── custom-metrics-autoscaler-operator-58bd9f458-ptgwx.yaml │ ├── custom-metrics-autoscaler-operator-58bd9f458-thbsh │ │ └── custom-metrics-autoscaler-operator │ │ └── custom-metrics-autoscaler-operator │ │ └── logs │ ├── keda-metrics-apiserver-65c7cc44fd-6wq4g │ │ ├── keda-metrics-apiserver │ │ │ └── keda-metrics-apiserver │ │ │ └── logs │ │ │ ├── current.log │ │ │ ├── previous.insecure.log │ │ │ └── previous.log │ │ └── keda-metrics-apiserver-65c7cc44fd-6wq4g.yaml │ └── keda-operator-776cbb6768-fb6m5 │ ├── keda-operator │ │ └── keda-operator │ │ └── logs │ │ ├── current.log │ │ ├── previous.insecure.log │ │ └── previous.log │ └── keda-operator-776cbb6768-fb6m5.yaml ├── policy │ └── poddisruptionbudgets.yaml └── route.openshift.io └── routes.yaml
作業ディレクトリーに作成された
must-gather
ディレクトリーから圧縮ファイルを作成します。たとえば、Linux オペレーティングシステムを使用するコンピューターで以下のコマンドを実行します。$ tar cvaf must-gather.tar.gz must-gather.local.5421342344627712289/ 1
- 1
must-gather-local.5421342344627712289/
を実際のディレクトリー名に置き換えます。
- 圧縮ファイルを Red Hat カスタマーポータル で作成したサポートケースに添付します。
2.5.10. パフォーマンスメトリックへのアクセス
Custom Metrics Autoscaler Operator は、クラスター上のモニタリングコンポーネントからプルした、すぐに使用可能なメトリクスを公開します。Prometheus Query Language (PromQL) を使用してメトリクスをクエリーし、問題を分析および診断できます。コントローラー Pod の再起動時にすべてのメトリクスがリセットされます。
OpenShift Container Platform Web コンソールを使用し、メトリクスにアクセスしてクエリーを実行できます。
手順
- OpenShift Container Platform Web コンソールの Administrator パースペクティブを選択します。
- Observe → Metrics の順に選択します。
- カスタムクエリーを作成するには、PromQL クエリーを Expression フィールドに追加します。
- 複数のクエリーを追加するには、Add Query を選択します。
2.5.10.1. 提供されるメトリクス
Custom Metrics Autoscaler Operator は、以下のメトリクスを公開します。メトリクスは、OpenShift Container Platform Web コンソールを使用して表示できます。
表2.2 Custom Metric Autoscaler Operator メトリクス
メトリクス名 | 説明 |
---|---|
|
特定のスケーラーがアクティブか非アクティブかを示します。値が |
| 各スケーラーのメトリクスの現在の値。ターゲットの平均を計算する際に Horizontal Pod Autoscaler (HPA) によって使用されます。 |
| 各スケーラーから現在のメトリクスを取得する際のレイテンシー。 |
| 各スケーラーで発生したエラーの数。 |
| すべてのスケーラーで発生したエラーの合計数。 |
| スケーリングされた各オブジェクトで発生したエラーの数。 |
| 各カスタムリソースタイプの各 namespace における Custom Metrics Autoscaler カスタムリソースの合計数。 |
| トリガータイプごとのトリガー合計数。 |
Custom Metrics Autoscaler Admission Webhook メトリクス
Custom Metrics Autoscaler Admission Webhook は、以下の Prometheus メトリクスも公開します。
メトリクス名 | 説明 |
---|---|
| スケーリングされたオブジェクトの検証数。 |
| 検証エラーの数。 |
2.5.11. カスタムメトリクスオートスケーラーの追加方法について
カスタムメトリクスオートスケーラーを追加するには、デプロイメント、ステートフルセット、またはカスタムリソース用の ScaledObject
カスタムリソースを作成します。ジョブの ScaledJob
カスタムリソースを作成します。
スケーリングするワークロードごとに、スケーリングされたオブジェクトまたはスケーリングされたジョブを 1 つだけ作成できます。また、スケーリングされたオブジェクトまたはスケーリングされたジョブと Horizontal Pod Autoscaler (HPA) を同じワークロードで使用することはできません。
2.5.11.1. ワークロードへのカスタムメトリクスオートスケーラーの追加
Deployment
、StatefulSet
、または custom resource
オブジェクトによって作成されるワークロード用のカスタムメトリクスオートスケーラーを作成できます。
前提条件
- Custom Metrics Autoscaler Operator をインストールしている必要がある。
CPU またはメモリーに基づくスケーリングにカスタムメトリクスオートスケーラーを使用する場合:
クラスター管理者は、クラスターメトリクスを適切に設定する必要があります。メトリクスが設定されているかどうかは、
oc describe PodMetrics <pod-name>
コマンドを使用して判断できます。メトリクスが設定されている場合、出力は以下の Usage の下にある CPU と Memory のように表示されます。$ oc describe PodMetrics openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
出力例
Name: openshift-kube-scheduler-ip-10-0-135-131.ec2.internal Namespace: openshift-kube-scheduler Labels: <none> Annotations: <none> API Version: metrics.k8s.io/v1beta1 Containers: Name: wait-for-host-port Usage: Memory: 0 Name: scheduler Usage: Cpu: 8m Memory: 45440Ki Kind: PodMetrics Metadata: Creation Timestamp: 2019-05-23T18:47:56Z Self Link: /apis/metrics.k8s.io/v1beta1/namespaces/openshift-kube-scheduler/pods/openshift-kube-scheduler-ip-10-0-135-131.ec2.internal Timestamp: 2019-05-23T18:47:56Z Window: 1m0s Events: <none>
スケーリングするオブジェクトに関連付けられた Pod には、指定されたメモリーと CPU の制限が含まれている必要があります。以下に例を示します。
Pod 仕様の例
apiVersion: v1 kind: Pod ... spec: containers: - name: app image: images.my-company.example/app:v4 resources: limits: memory: "128Mi" cpu: "500m"
手順
以下のような YAML ファイルを作成します。名前
<2>
、オブジェクト名<4>
、およびオブジェクトの種類<5>
のみが必要です。スケーリングされたオブジェクトの例
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: annotations: autoscaling.keda.sh/paused-replicas: "0" 1 name: scaledobject 2 namespace: my-namespace spec: scaleTargetRef: apiVersion: apps/v1 3 name: example-deployment 4 kind: Deployment 5 envSourceContainerName: .spec.template.spec.containers[0] 6 cooldownPeriod: 200 7 maxReplicaCount: 100 8 minReplicaCount: 0 9 metricsServer: 10 auditConfig: logFormat: "json" logOutputVolumeClaim: "persistentVolumeClaimName" policy: rules: - level: Metadata omitStages: "RequestReceived" omitManagedFields: false lifetime: maxAge: "2" maxBackup: "1" maxSize: "50" fallback: 11 failureThreshold: 3 replicas: 6 pollingInterval: 30 12 advanced: restoreToOriginalReplicaCount: false 13 horizontalPodAutoscalerConfig: name: keda-hpa-scale-down 14 behavior: 15 scaleDown: stabilizationWindowSeconds: 300 policies: - type: Percent value: 100 periodSeconds: 15 triggers: - type: prometheus 16 metadata: serverAddress: https://thanos-querier.openshift-monitoring.svc.cluster.local:9092 namespace: kedatest metricName: http_requests_total threshold: '5' query: sum(rate(http_requests_total{job="test-app"}[1m])) authModes: "basic" - authenticationRef: 17 name: prom-triggerauthentication metadata: name: prom-triggerauthentication type: object - authenticationRef: 18 name: prom-cluster-triggerauthentication metadata: name: prom-cluster-triggerauthentication type: object
- 1
- オプション: 「ワークロードのカスタムメトリクスオートスケーラーの一時停止」セクションで説明されているように、Custom Metrics Autoscaler Operator がレプリカを指定された値にスケーリングし、自動スケーリングを停止するよう指定します。
- 2
- このカスタムメトリクスオートスケーラーの名前を指定します。
- 3
- オプション: ターゲットリソースの API バージョンを指定します。デフォルトは
apps/v1
です。 - 4
- スケーリングするオブジェクトの名前を指定します。
- 5
kind
をDeployment
、StatefulSet
またはCustomResource
として指定します。- 6
- オプション: カスタムメトリクスオートスケーラーがシークレットなどを保持する環境変数を取得する、ターゲットリソース内のコンテナーの名前を指定します。デフォルトは
.spec.template.spec.containers[0]
です。 - 7
- オプション:
minReplicaCount
が0
に設定されている場合、最後のトリガーが報告されてからデプロイメントを0
にスケールバックするまでの待機時間を秒単位で指定します。デフォルトは300
です。 - 8
- オプション: スケールアップ時のレプリカの最大数を指定します。デフォルトは
100
です。 - 9
- オプション: スケールダウン時のレプリカの最小数を指定します。
- 10
- オプション: 「監査ログの設定」セクションで説明されているように、監査ログのパラメーターを指定します。
- 11
- オプション:
failureThreshold
パラメーターで定義された回数だけスケーラーがソースからメトリクスを取得できなかった場合に、フォールバックするレプリカの数を指定します。フォールバック動作の詳細は、KEDA のドキュメント を参照してください。 - 12
- オプション: 各トリガーをチェックする間隔を秒単位で指定します。デフォルトは
30
です。 - 13
- オプション: スケーリングされたオブジェクトが削除された後に、ターゲットリソースを元のレプリカ数にスケールバックするかどうかを指定します。デフォルトは
false
で、スケーリングされたオブジェクトが削除されたときのレプリカ数をそのまま保持します。 - 14
- オプション: Horizontal Pod Autoscaler の名前を指定します。デフォルトは
keda-hpa-{scaled-object-name}
です。 - 15
- オプション: 「スケーリングポリシー」セクションで説明されているように、Pod をスケールアップまたはスケールダウンするレートを制御するために使用するスケーリングポリシーを指定します。
- 16
- カスタムメトリクスオートスケーラートリガーについてのセクションで説明されているように、スケーリングの基礎として使用するトリガーを指定します。この例では、OpenShift Container Platform モニタリングを使用します。
- 17
- オプション: カスタムメトリクスオートスケーラートリガー認証の作成のセクションで説明されているように、トリガー認証を指定します。
- 18
- オプション: カスタムメトリクスオートスケーラートリガー認証の作成のセクションで説明されているように、クラスタートリガー認証を指定します。
注記namespace トリガー認証とクラスタートリガー認証の両方を指定する必要はありません。
カスタムメトリクスオートスケーラーを作成します。
$ oc create -f <file-name>.yaml
検証
コマンド出力を表示して、カスタムメトリクスオートスケーラーが作成されたことを確認します。
$ oc get scaledobject <scaled_object_name>
出力例
NAME SCALETARGETKIND SCALETARGETNAME MIN MAX TRIGGERS AUTHENTICATION READY ACTIVE FALLBACK AGE scaledobject apps/v1.Deployment example-deployment 0 50 prometheus prom-triggerauthentication True True True 17s
出力の次のフィールドに注意してください。
-
TRIGGERS
: 使用されているトリガーまたはスケーラーを示します。 -
AUTHENTICATION
: 使用されているトリガー認証の名前を示します。 READY
: スケーリングされたオブジェクトがスケーリングを開始する準備ができているかどうかを示します。-
True
の場合、スケーリングされたオブジェクトの準備は完了しています。 -
False
の場合、作成したオブジェクトの 1 つ以上に問題があるため、スケーリングされたオブジェクトの準備は完了していません。
-
ACTIVE
: スケーリングが行われているかどうかを示します。-
True
の場合、スケーリングが行われています。 -
False
の場合、メトリクスがないか、作成したオブジェクトの 1 つ以上に問題があるため、スケーリングは行われていません。
-
FALLBACK
: カスタムメトリクスオートスケーラーがソースからメトリクスを取得できるかどうかを示します。-
False
の場合、カスタムメトリクスオートスケーラーはメトリクスを取得しています。 -
True
の場合、メトリクスがないか、作成したオブジェクトの 1 つ以上に問題があるため、カスタムメトリクスオートスケーラーはメトリクスを取得しています。
-
2.5.11.2. ジョブへのカスタムメトリクスオートスケーラーの追加
任意の Job
オブジェクトに対してカスタムメトリクスオートスケーラーを作成できます。
前提条件
- Custom Metrics Autoscaler Operator をインストールしている必要がある。
手順
以下のような YAML ファイルを作成します。
kind: ScaledJob apiVersion: keda.sh/v1alpha1 metadata: name: scaledjob namespace: my-namespace spec: failedJobsHistoryLimit: 5 jobTargetRef: activeDeadlineSeconds: 600 1 backoffLimit: 6 2 parallelism: 1 3 completions: 1 4 template: 5 metadata: name: pi spec: containers: - name: pi image: perl command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] maxReplicaCount: 100 6 pollingInterval: 30 7 successfulJobsHistoryLimit: 5 8 failedJobsHistoryLimit: 5 9 envSourceContainerName: 10 rolloutStrategy: gradual 11 scalingStrategy: 12 strategy: "custom" customScalingQueueLengthDeduction: 1 customScalingRunningJobPercentage: "0.5" pendingPodConditions: - "Ready" - "PodScheduled" - "AnyOtherCustomPodCondition" multipleScalersCalculation : "max" triggers: - type: prometheus 13 metadata: serverAddress: https://thanos-querier.openshift-monitoring.svc.cluster.local:9092 namespace: kedatest metricName: http_requests_total threshold: '5' query: sum(rate(http_requests_total{job="test-app"}[1m])) authModes: "bearer" - authenticationRef: 14 name: prom-triggerauthentication metadata: name: prom-triggerauthentication type: object - authenticationRef: 15 name: prom-cluster-triggerauthentication metadata: name: prom-cluster-triggerauthentication type: object
- 1
- ジョブを実行できる最大期間を指定します。
- 2
- ジョブの再試行回数を指定します。デフォルト値は
6
です。 - 3
- オプション: ジョブを並行して実行する Pod レプリカの数を指定します。デフォルトは
1
です。-
非並列ジョブの場合は、未設定のままにします。設定されていない場合、デフォルトは
1
になります。
-
非並列ジョブの場合は、未設定のままにします。設定されていない場合、デフォルトは
- 4
- オプション: ジョブを完了したとマークするために必要な、正常に完了した Pod 数を指定します。
-
非並列ジョブの場合は、未設定のままにします。設定されていない場合、デフォルトは
1
になります。 - 固定の完了数を持つ並列ジョブの場合、完了の数を指定します。
-
ワークキューのある並列ジョブでは、未設定のままにします。設定されていない場合、デフォルトは
parallelism
パラメーターの値になります。
-
非並列ジョブの場合は、未設定のままにします。設定されていない場合、デフォルトは
- 5
- コントローラーが作成する Pod のテンプレートを指定します。
- 6
- オプション: スケールアップ時のレプリカの最大数を指定します。デフォルトは
100
です。 - 7
- オプション: 各トリガーをチェックする間隔を秒単位で指定します。デフォルトは
30
です。 - 8
- オプション: 保持する必要がある正常に終了したジョブの数を指定します。デフォルトは
100
です。 - 9
- オプション: 保持する必要がある失敗したジョブの数を指定します。デフォルトは
100
です。 - 10
- オプション: カスタムオートスケーラーがシークレットなどを保持する環境変数を取得するターゲットリソース内のコンテナーの名前を指定します。デフォルトは
.spec.template.spec.containers[0]
です。 - 11
- オプション: スケーリングされたジョブが更新されるたびに、既存のジョブを終了するかどうかを指定します。
-
default
: 関連するスケーリングされたジョブが更新されると、オートスケーラーは既存のジョブを終了します。オートスケーラーは、最新の仕様でジョブを再作成します。 -
gradual
: 関連するスケーリングされたジョブが更新された場合、オートスケーラーは既存のジョブを終了しません。オートスケーラーは、最新の仕様で新しいジョブを作成します。
-
- 12
- オプション: スケーリングストラテジーを指定します:
default
、custom
、またはaccurate
。デフォルトはdefault
です。詳細については、以下の関連情報セクションのリンクを参照してください。 - 13
- カスタムメトリクスオートスケーラートリガーについてのセクションで説明されているように、スケーリングの基礎として使用するトリガーを指定します。
- 14
- オプション: カスタムメトリクスオートスケーラートリガー認証の作成のセクションで説明されているように、トリガー認証を指定します。
- 15
- オプション: カスタムメトリクスオートスケーラートリガー認証の作成のセクションで説明されているように、クラスタートリガー認証を指定します。注記
namespace トリガー認証とクラスタートリガー認証の両方を指定する必要はありません。
カスタムメトリクスオートスケーラーを作成します。
$ oc create -f <file-name>.yaml
検証
コマンド出力を表示して、カスタムメトリクスオートスケーラーが作成されたことを確認します。
$ oc get scaledjob <scaled_job_name>
出力例
NAME MAX TRIGGERS AUTHENTICATION READY ACTIVE AGE scaledjob 100 prometheus prom-triggerauthentication True True 8s
出力の次のフィールドに注意してください。
-
TRIGGERS
: 使用されているトリガーまたはスケーラーを示します。 -
AUTHENTICATION
: 使用されているトリガー認証の名前を示します。 READY
: スケーリングされたオブジェクトがスケーリングを開始する準備ができているかどうかを示します。-
True
の場合、スケーリングされたオブジェクトの準備は完了しています。 -
False
の場合、作成したオブジェクトの 1 つ以上に問題があるため、スケーリングされたオブジェクトの準備は完了していません。
-
ACTIVE
: スケーリングが行われているかどうかを示します。-
True
の場合、スケーリングが行われています。 -
False
の場合、メトリクスがないか、作成したオブジェクトの 1 つ以上に問題があるため、スケーリングは行われていません。
-
2.5.12. Custom Metrics Autoscaler Operator のアンインストール
OpenShift Container Platform クラスターからカスタムメトリクスオートスケーラーを削除できます。Custom Metrics Autoscaler Operator を削除した後、潜在的な問題を回避するために、Operator に関連付けられている他のコンポーネントを削除します。
最初に KedaController
カスタムリソース (CR) を削除する必要があります。CR を明確に削除しないと、openshift-keda
プロジェクトを削除したときに OpenShift Container Platform がハングアップする可能性があります。CR を削除する前に Custom Metrics Autoscaler Operator を削除すると、CR を削除することはできません。
前提条件
- Custom Metrics Autoscaler Operator をインストールしている必要がある。
手順
- OpenShift Container Platform Web コンソールで、Operators → Installed Operators をクリックします。
- openshift-keda プロジェクトに切り替えます。
KedaController
カスタムリソースを削除します。- CustomMetricsAutoscaler Operator を見つけて、KedaController タブをクリックします。
- カスタムリソースを見つけてから、Delete KedaController をクリックします。
- Uninstall をクリックします。
Custom Metrics Autoscaler Operator を削除します。
- Operators → Installed Operators をクリックします。
-
CustomMetricsAutoscaler Operator を見つけて Options メニュー
をクリックし、Uninstall Operator を選択します。
- Uninstall をクリックします。
オプション: OpenShift CLI を使用して、カスタムメトリクスオートスケーラーコンポーネントを削除します。
カスタムメトリクスオートスケーラー CRD を削除します。
-
clustertriggerauthentications.keda.sh
-
kedacontrollers.keda.sh
-
scaledjobs.keda.sh
-
scaledobjects.keda.sh
-
triggerauthentications.keda.sh
$ oc delete crd clustertriggerauthentications.keda.sh kedacontrollers.keda.sh scaledjobs.keda.sh scaledobjects.keda.sh triggerauthentications.keda.sh
CRD を削除すると、関連付けられたロール、クラスターロール、およびロールバインディングが削除されます。ただし、手動で削除する必要のあるクラスターロールがいくつかあります。
-
カスタムメトリクスオートスケーラークラスターのロールを一覧表示します。
$ oc get clusterrole | grep keda.sh
一覧表示されているカスタムメトリクスオートスケーラークラスターのロールを削除します。以下に例を示します。
$ oc delete clusterrole.keda.sh-v1alpha1-admin
カスタムメトリクスオートスケーラークラスターのロールバインディングを一覧表示します。
$ oc get clusterrolebinding | grep keda.sh
一覧表示されているカスタムメトリクスオートスケーラークラスターのロールバインディングを削除します。以下に例を示します。
$ oc delete clusterrolebinding.keda.sh-v1alpha1-admin
カスタムメトリクスオートスケーラープロジェクトを削除します。
$ oc delete project openshift-keda
Cluster Metric Autoscaler Operator を削除します。
$ oc delete operator/openshift-custom-metrics-autoscaler-operator.openshift-keda