AWS での自動スケーリング
Liferay の自動スケーリング機能は、Liferay クラスター内のレプリカ (ノード) を自動的に作成および破棄して、パフォーマンスを最適化します。 いつでも起動できるノードの最小数と最大数を選択できます。 自動スケーリングを必要とするアプリケーションのリソース使用量 (CPU とメモリ) を定期的に監視します。
クラスタリングと自動スケーリングには、有効な Liferay クラスタ ライセンスが必要です。
静的クラスタリング
静的クラスタリングは、 replicaCount プロパティを使用して、必要なレプリカの数を手動で設定することで構成されます。
replicaCount: 2
クラスターをスケーリングするように Helm を構成した後、必要なレプリカ数を指定して Kubernetes CLI を使用して次のコマンドを実行します。
kubectl scale statefulset/liferay --replicas=2
外部エージェントを使用してメトリックを確認し、いつどのようにスケーリングするかを決定することで、静的クラスタリングを使用して Liferay を自動的にスケーリングできます。 ただし、自動スケーリングに慣れているユーザーには、動的クラスタリングが推奨されます。
動的クラスタリング
動的クラスタリングを使用したデフォルトの自動スケーリングでは、Kubernetes Metrics Server によって発行されたメトリック (CPU とメモリ) に基づいてクラスターをスケーリングする方法を定義できます。 他のメトリックに基づいてスケーリングするには、 カスタムメトリックを使用した高度な自動スケーリングを参照してください。 動的クラスタリングを構成するには、次の手順に従います。
-
コンテナ リソースを構成して 、クラスターを自動スケーリングできるように準備します。
-
autoscaling.enabledポータルプロパティをtrueに設定します。 -
次に、
.yamlファイルで自動スケーリングHelm プロパティを定義します。 これを行うには、他のいくつかのプロパティを値として渡す必要があります。 -
enabledプロパティをtrueに設定します。enabled: true -
Kubernetes がクラスターをスケーリングできる方法を制限するには、
minReplicasとmaxReplicasの数を選択します。maxReplicas: 5 minReplicas: 1 -
スケーリングの基準となるメトリックを選択します。 たとえば、各レプリカの CPU とメモリの使用率を 80% に維持するには、次の値を使用します。 この方法では、レプリカの CPU またはメモリのいずれかが限界に近づいた場合に、負荷を軽減するために新しいレプリカが作成されます。 さらに、CPU とメモリの平均使用率がこれより低い場合、クラスターはリソースを節約するためにレプリカを破棄します。
metrics: - type: Resource resource: name: cpu target: averageUtilization: 80 type: Utilization - type: Resource resource: name: memory target: averageUtilization: 80 type: Utilization -
最後に、メトリックを検証する頻度、スケーリング前のタイムアウト、リソース使用量の許容範囲などの追加の動作を定義できます。
behavior: scaleDown: policies: - periodSeconds: 60 type: Percent value: 10 type: Pods value: 1 stabilizationWindowSeconds: 60 scaleUp: stabilizationWindowSeconds: 300
最終的に、 自動スケーリング プロパティは次のようになります。
autoscaling:
behavior:
scaleDown:
policies:
- periodSeconds: 60
type: Percent
value: 10
type: Pods
value: 1
stabilizationWindowSeconds: 60
scaleUp:
stabilizationWindowSeconds: 300
enabled: true
maxReplicas: 5
metrics:
- type: Resource
resource:
name: cpu
target:
averageUtilization: 80
type: Utilization
- type: Resource
resource:
name: memory
target:
averageUtilization: 80
type: Utilization
minReplicas: 1
カスタムメトリックを使用した高度な自動スケーリング
カスタム メトリックを使用した自動スケーリングには、 custom.metrics.k8s.io または external.metrics.k8s.io API を実装する外部アダプターが必要です。 これに対する推奨される解決策は KEDAです。 Kubernetes クラスターからメトリックを収集する方法も必要です。 詳細については、 Kubernetes からのメトリックの表示 を参照してください。
完了すると、必要なメトリック データがシステムに保存され、KEDA スケーラーがデータ ソースとして使用するように構成できるようになります。 次の Helm コマンドを使用して KEDA をインストールします。
-
liferay-aws-terraform/cloudに移動します。 これは、以前に Liferayをインストールしたディレクトリです。 -
KEDA helm チャートをインストールします。
helm repo add kedacore https://kedacore.github.io/charts helm repo update helm upgrade -i keda kedacore/keda \ --create-namespace \ --namespace keda-system -
収集されるカスタム メトリックを制御するリソースを定義します。
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: annotations: scaledobject.keda.sh/transfer-hpa-ownership: "true" name: liferay-scaledobject namespace: liferay-system spec: advanced: horizontalPodAutoscalerConfig: name: liferay-default restoreToOriginalReplicaCount: true cooldownPeriod: 300 maxReplicaCount: 5 minReplicaCount: 1 pollingInterval: 30 scaleTargetRef: apiVersion: apps/v1 kind: StatefulSet name: liferay-default triggers: [...] -
.yamlファイルのtriggersキーに対して、自動スケーリングの基準となるメトリックを選択します。 たとえば、 Prometheus をコレクターとして使用し 、ライブ ユーザー数がノードあたり 200 に達したときにスケーリングしたい場合:triggers: - type: prometheus metadata: serverAddress: http://prometheus-server.prometheus-system:9090 query: abs(server_live_users{instance="liferay-default-0", job="liferay-system/liferay-default"}) / on(job) group_left() count by (job) (server_live_users{job="liferay-system/liferay-default"}) threshold: '200' -
次のコマンドを使用してリソースをインストールします。
kubectl apply -n liferay-system -f liferay-scaledobject.yaml
現在、ユーザーがログインすると、ノードあたりの数が 200 を超えると、クラスターがスケールアップします。