CLI (az または kubectl) を使用した Azure Database for PostgreSQL サーバーのスケールアップとスケールダウン
場合によっては、サーバーの特性または定義の変更が必要になることがあります。 次に例を示します。
- サーバーで使用する仮想コアの数をスケールアップまたはスケールダウンする
- サーバーで使用するメモリをスケールアップまたはスケールダウンする
このガイドでは、仮想コアやメモリをスケーリングする方法について説明します。
サーバーの仮想コアまたはメモリの設定をスケールアップまたはスケールダウンすると、各仮想コアとメモリの設定に対して最小値または最大値を設定できます。 特定の数の仮想コアまたは特定の量のメモリを使用するようにサーバーを構成する場合は、最小設定の値を最大設定の値にします。 仮想コアとメモリに設定された値を大きくする前に、次を確認する必要があります。
- デプロイをホストする物理インフラストラクチャで十分なリソースを使用できる
- 同じシステム上に併置されている複数のワークロードが同じ仮想コアまたはメモリに関して競合していない
Note
この記事で紹介しているテクノロジはプレビュー機能であり、「Microsoft Azure プレビューの追加利用規約」に従うことを条件として提供されます。
最新の更新プログラムについては、リリース ノートを参照してください。
サーバーの現在の定義を表示する
サーバーの現在の定義を表示し、現在の仮想コアとメモリの設定を確認するには、次のいずれかのコマンドを実行します。
Azure CLI (az) の場合
az postgres server-arc show -n <server name> --k8s-namespace <namespace> --use-k8s
kubectl を使用した CLI
kubectl describe postgresql/<server name> -n <namespace name>
サーバー グループの構成が返されます。 既定の設定でサーバーを作成した場合は、次のように定義が表示されます。
Spec:
Dev: false
Scheduling:
Default:
Resources:
Requests:
Memory: 256Mi
...
サーバーの定義を解釈する
サーバーの定義では、ノードあたりの最小または最大の仮想コアとノードあたりの最小または最大のメモリの各設定を含むセクションが "スケジュール" セクションです。 このセクションでは、最大設定が "制限" と呼ばれるサブセクションに保存されます。最小設定は "要求" と呼ばれるサブセクションに保存されます。
最小設定を最大設定とは異なる値にすると、必要に応じて、サーバーに要求されたリソースが割り当てられることが保証されます。 設定した制限を超えることはありません。
サーバーで実際に使用されるリソース (仮想コアとメモリ) は最大設定までであり、クラスターで使用可能なワークロードとリソースによって異なります。 設定を最大値で制限しない場合、サーバーは、スケジュールされている Kubernetes ノードに対して Kubernetes クラスターが割り当てているすべてのリソースを使用できます。
既定の構成では、最小メモリのみが 256 Mi に設定されています。これは、PostgreSQL サーバーを実行するために推奨される最小メモリ量です。
Note
最小値を設定しても、サーバーで必ずしもその最小値が使用されるとは限りません。 つまり、サーバーに必要な場合は、少なくともこの最小値が割り当てられることが保証されます。 たとえば、--minCpu 2
の設定を考えてみましょう。 サーバーが常に 2 つ以上の仮想コアを使用することを意味するわけではありません。 これは、その必要がない場合にはサーバーは 2 つ未満の仮想コアを使用して起動し、後で必要になったときに少なくとも 2 つの仮想コアが割り当てられることが保証されることを意味します。 これは、Kubernetes クラスターが、必要に応じて 2 つの仮想コアをサーバーに割り当てることができるように、他のワークロードにリソースを割り当てることを含意します。 また、スケールアップとスケールダウンは、kubernetes ポッドの再起動が必要になるため、オンライン操作ではありません。
Note
システムの構成を変更する前に、こちらで Kubernetes リソース モデルについてよく理解していることを確認してください
サーバーをスケールアップおよびスケールダウンする
スケールアップとは、サーバーの仮想コアやメモリの設定の値を大きくすることです。 スケールダウンとは、サーバーの仮想コアやメモリの設定の値を小さくすることです。
設定を行う場合は、Kubernetes クラスターに設定した構成内で考慮する必要があります。 Kubernetes クラスターが満たすことができない値を設定していないことを確認します。 これにより、データベース インスタンスを利用できないといったエラーや予測できない動作が発生する可能性があります。 例として、構成を変更した後にサーバーの状態が "更新中" のままになっている場合は、以下のパラメーターを Kubernetes クラスターが満たすことができない値に設定している可能性があります。 その場合は、変更を元に戻すか、_troubleshooting_section を参照してください。
設定方法
- 最小仮想コアを設定するには、
--cores-request
を設定します。 - 最大仮想コアを設定するには、
--cores-limit
を設定します。 - 最小メモリを設定するには、
--memory-request
を設定します。 - 最大メモリを設定するには、
--memory-limit
を設定します。
注意事項
Kubernetes では、対応する要求の設定を構成せずに制限の設定を構成すると、要求値が制限と同じ値になります。 これによりサーバーが使用できなくなる可能性があります。十分なリソースがある Kubernetes ノードがない場合に、そのポッドが再スケジュールされない場合があるためです。 このような状況を回避するために、下の例では、要求と制限の両方の設定を設定する方法を示しています。
一般的な構文は次のとおりです。
az postgres server-arc edit -n <server name> --memory-limit/memory-request/cores-request/cores-limit <val> --k8s-namespace <namespace> --use-k8s
メモリ設定に指定する値は、数値の後にボリュームの単位が続きます。 たとえば、1 Gb を指定するには、1024 Mi または 1 Gi を指定します。 コアの数を示すには、単位を付けずに数値を渡します。
Azure CLI を使用した例
2 コアを超えないようにサーバーを構成します。
az postgres server-arc edit -n postgres01 --cores-request 1, --cores-limit 2 --k8s-namespace arc --use-k8s
Note
これらのパラメーターの詳細については、az postgres server-arc update --help
を実行してください。
Kubernetes ネイティブ ツール (kubectl
など) を使用した例
次のコマンドを実行します。
kubectl edit postgresql/<server name> -n <namespace name>
これにより、vi
エディターが表示されます。ここで、構成の参照や変更を行うことができます。 次のコードを使用して、目的の設定を仕様のフィールド名にマップします。
注意事項
以下は、この構成の編集方法を解説するための例です。 構成を更新する前に、Kubernetes クラスターで適用できる値にパラメーターを必ず設定してください。
たとえば、次のコーディネーターとワーカー両方のロールの設定を、次の値に設定するとします。
- 最小仮想コア数 =
2
- 最大仮想コア数 =
4
- 最小メモリ =
512Mb
- 最大メモリ =
1Gb
サーバー グループの定義を、下の構成と一致するように設定します。
...
spec:
dev: false
scheduling:
default:
resources:
requests:
cpu: "2"
memory: 256Mi
limits:
cpu: "4"
memory: 1Gi
...
vi
エディターに慣れていない場合は、こちらで必要なコマンドの説明を参照してください。
- 編集モード:
i
- 矢印で移動
- 編集の停止:
esc
- 保存せずに終了:
:qa!
- 保存して終了:
:qw!
既定値にリセットする
コア/メモリ制限/要求のパラメーターを既定値にリセットするには、それらのパラメーターを編集して、実際の値ではなく空の文字列を渡します。 たとえば、コア制限パラメーターをリセットする場合は、次のコマンドを実行します。
az postgres server-arc edit -n postgres01 --cores-request '' --k8s-namespace arc --use-k8s
az postgres server-arc edit -n postgres01 --cores-limit '' --k8s-namespace arc --use-k8s
または
az postgres server-arc edit -n postgres01 --cores-request '' --cores-limit '' --k8s-namespace arc --use-k8s