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に設定します。 -
次に、
オートスケーリングHelmプロパティを.yamlファイルで定義します。 そのためには、いくつかの他のプロパティをその値として渡す必要があります。 -
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 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ファイル内で、自動スケーリングの基準となるメトリックを選択します。 たとえば、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人を超えると、クラスターは自動的にスケールアップします。