予想インスタンス数を調整することで、ノードプールを手動でスケーリングできます。これにより、望ましいノード数を維持し、O&M 効率を向上させることができます。ノードプールをスケールアウトしてサービスをサポートするのに十分なノードを確保したり、ノードプールをスケールインしてリソースコストを節約したりできます。
ACK は自動スケーリングもサポートしています。2 つの弾力性ソリューション、ノードの自動スケーリングまたはNode Instant Elasticity から選択して、ノードリソースを自動的にスケーリングし、スケジューリング容量を増やすことができます。詳細については、「ノードのスケーリング」をご参照ください。
ノードプールスケーリングの概要
予想インスタンス数は、ノードプールが維持するターゲットノード数です。これは、ノードプールの望ましい状態を表します。ノードプールの予想インスタンス数を指定すると、ノードプールは現在のノード数に基づいてスケールアウトまたはスケールイン操作を自動的にトリガーします。このプロセスにより、手動介入を必要とせずに、ノード数が予想レベルに維持されます。
ノードプールのスケールアウト
ノードプールの予想インスタンス数を現在のノード数より大きい値に設定すると、システムはスケールアウト操作をトリガーします。システムがスケールアウトノードの追加に失敗した場合、ノードプール内のノード数が予想インスタンス数に達するまで、操作は自動的にリトライされます。新しいノードの構成は、ノードプールの構成によって異なります。ノードのインスタンスタイプとゾーンは、スケーリングポリシーによって決定されます。スケーリングポリシーの詳細については、「スケーリングポリシー」をご参照ください。
ノードプールのスケールアウト中、作成されるインスタンスタイプに基づいて課金されます。たとえば、ノードプールが 2 つのインスタンスタイプで構成されており、[課金方法] が [従量課金] で、[スケーリングポリシー] が [優先度ポリシー] であるとします。このスケールアウト中に、優先度 1 の vSwitch のゾーンに 2 つのノード A インスタンスが作成されます。ノード A のリソースが不足している場合、優先度 2 の vSwitch のゾーンに 3 つのノード B インスタンスが作成されます。1 時間のコストは、数式 インスタンスタイプの単価 × ノード数 × 課金期間 を使用して計算されます。この例では、コストは ノード A の単価 × 2 × 1 + ノード B の単価 × 3 × 1 です。
ノードプールのスケールアウトは 2 つのステップで構成されます。
ECS インスタンスの作成: ACK ノードプールは、基盤となるサービスとして Auto Scaling を使用してノードを作成します。予想インスタンス数を調整すると、ACK は Auto Scaling グループの予想インスタンス数を変更し、ノードプールの構成に基づいてスケールアウトを実行します。ノードプールのステータスは「スケールアウト中」に変わります。Auto Scaling が ECS インスタンスを作成すると、ノードプールのステータスは「アクティブ」に変わります。予想インスタンス数の詳細については、「予想インスタンス数」をご参照ください。
重要ECS Bare Metal GPU インスタンス (インスタンスファミリー ebmgn7 および ebmgn7e) は、自動マルチインスタンス GPU (MIG) クリーンアップをサポートしていません。したがって、ACK がこれらのタイプのノードを追加すると、既存の MIG 設定がリセットされます。リセットの期間は予測できません。リセットに時間がかかりすぎると、ノードの自動追加が失敗する可能性があります。
障害のトラブルシューティングについては、「ECS Bare Metal インスタンスノードの追加に失敗した場合はどうすればよいですか?」をご参照ください。
ebmgn7e の詳細については、「GPU 高速化コンピューティング最適化 (gn/ebm/scc シリーズ)」をご参照ください。
ECS インスタンスをクラスターに追加する: Auto Scaling が ECS インスタンスをプロビジョニングした後、インスタンスは自動的に (ACK によって維持される)
cloud-initスクリプトを実行してノードを初期化し、ノードプールに追加します。実行ログはノードの /var/log/messages ファイルに保存されます。ノードにログインし、grep cloud-init /var/log/messagesコマンドを実行して実行ログを表示できます。説明ノードがノードプールに正常に追加されると、
/var/log/messagesのログメッセージは自動的にパージされます。したがって、これらのログは、ノードがクラスターに追加できなかった場合にのみ参照できます。ノードがクラスターに追加できなかった場合、
/var/log/messagesログからのキー情報が抽出され、タスク結果に含まれます。ターゲットクラスターをクリックし、[クラスタータスク] タブで理由を表示できます。
ノードプールのスケールイン
予想インスタンス数を現在のノード数より小さい値に設定すると、システムはスケールイン操作をトリガーしてノードを削除します。
ノードをスケールインする場合:
ノードプールのスケーリングポリシーが [優先度ポリシー] に設定されている場合、システムは最後に作成されたインスタンスをスケールインします。
ノードプールのスケーリングポリシーが [分散ポリシー] に設定されている場合、システムは 等リリース ポリシーに従ってゾーンごとに ECS インスタンスをフィルター処理し、スケールインのために最後に作成されたインスタンスを選択します。これにより、インスタンスが削除された後、スケーリンググループの各ゾーンの ECS インスタンスの数がほぼ等しくなります。
ノードプールのスケーリングポリシーが [コスト最適化ポリシー] に設定されている場合、システムはスケールイン中に vCPU 単価が最も高い ECS インスタンスを優先的に削除します。
予想インスタンス数を変更してノードプールをスケールインすると、ドレイン操作が失敗した場合でもノードは削除されます。ノードを削除する前にドレインしたい場合は、特定のノードを削除する必要があります。詳細については、「ノードの削除」をご参照ください。
ノードプールをスケールインしても、サブスクリプション ECS インスタンスはリリースされません。サブスクリプションインスタンスをリリースするには、ECS コンソールにログインし、サブスクリプションインスタンスを従量課金インスタンスに変換してからリリースします。詳細については、「サブスクリプションインスタンスを従量課金インスタンスに変換する」をご参照ください。
システムディスクとデータディスクのライフサイクルはノードにリンクされています。スケールイン中にノードがリリースされると、そのディスクもリリースされます。ディスク上のすべてのデータは永久に失われ、回復できません。データの永続性を確保するには、PersistentVolume (PV) を使用します。これにより、ストレージデータがノードのライフサイクルから切り離され、データのセキュリティが確保されます。
手順
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、管理するクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
ターゲットノードプールの [操作] 列で [スケーリング] をクリックし、[スケーリングモード] を [手動] に設定します。
(オプション) OOS O&M オーケストレーションサービスを承認していない場合は、AliyunOOSLifecycleHook4CSRole ロールを作成して承認を付与する必要があります。AliyunOOSLifecycleHook4CSRole をクリックし、画面の指示に従って承認を完了します。
説明Alibaba Cloud アカウントを使用している場合は、AliyunOOSLifecycleHook4CSRole をクリックして必要な権限を付与します。
RAM ユーザーを使用している場合は、Alibaba Cloud アカウントに AliyunOOSLifecycleHook4CSRole ロールが割り当てられていることを確認してください。次に、AliyunRAMReadOnlyAccess ポリシーを RAM ユーザーにアタッチします。詳細については、「RAM ユーザーに権限を付与する」をご参照ください。
[予想インスタンス数] の値を入力し、プロンプトに従って構成を送信します。
送信後、ノードプールのステータスは [更新中] に変わり、その後 [スケールアウト中] または [ノードの削除中] になります。
ノードプールリストの [ステータス] 列で、ステータスが [スケールアウト中] の場合、ノードプールがスケールアウト中であることを示します。ステータスが [アクティブ] の場合、スケールアウトが完了したことを示します。
重要クラスター内のノードをスケールアウトするときに、セキュリティグループが 100.64.0.0/10 へのアクセスを拒否すると、ノードをクラスターに追加できません。
ノードプールリストの [ステータス] 列で、ステータスが [ノードの削除中] の場合、ノードプールはスケールイン中です。ステータスが [アクティブ] の場合、スケールインは完了です。
非標準操作と推奨されるアクション
予想インスタンス数は、ノードプールが維持すべきターゲットノード数です。特定の非標準操作は、ノードプールが期待どおりにスケーリングするのを妨げ、リソースの損失につながる可能性があります。次の表に、一般的な非標準操作と推奨されるアクションを示します。
非標準操作は実行しないでください。
非標準操作 | ノードプールの動作 | 推奨 |
| 予想インスタンス数は、クラスター内のノード数ではなく、Auto Scaling グループ内の ECS インスタンスの数に基づいています。 API サーバーを使用してノードを削除しても、対応する ECS インスタンスはリリースされません。その結果、ノードプール内の実際のノード数は変わりません。ただし、ノードはクラスターから削除されるため、ノードプールのノードリストではステータスは [不明] と表示されます。 |
|
ECS コンソールから、または OpenAPI 操作を呼び出して ECS インスタンスをリリースします。 | ノードプールは ECS インスタンスのリリースを検出し、予想インスタンス数を維持するために新しい ECS インスタンスを自動的に作成します。 | |
予想インスタンス数を変更せずに Auto Scaling を使用してスケーリンググループから ECS インスタンスを削除します。 | ノードプールは ECS インスタンスのリリースを検出し、予想インスタンス数を維持するために新しい ECS インスタンスを自動的に作成します。 | ノードプールに関連付けられているスケーリンググループを直接管理しないでください。これにより、ノードプールが予期せず動作する可能性があります。 |
サブスクリプション ECS インスタンスは有効期限が切れるとリリースされます。 | ノードプールは ECS インスタンスのリリースを検出し、予想インスタンス数を維持するために新しい ECS インスタンスを自動的に作成します。 | ACK はノードのリリースを検出し、予想インスタンス数を維持するために新しいインスタンスを作成します。これにより、予期しないコストが発生する可能性があります。期限切れの ECS インスタンスは迅速に処理してください。ノードを削除するか、ECS インスタンスのサブスクリプションを更新することができます。
|
Auto Scaling コンソールから、または OpenAPI 操作を呼び出して、Auto Scaling グループインスタンスのヘルスチェックを手動で有効にします。 | Auto Scaling グループのヘルスチェックが有効になると、停止したインスタンスなどの異常なインスタンスが検出されるたびに、新しい ECS インスタンスが自動的に作成されます。 | デフォルトでは、ACK は Auto Scaling のヘルスチェックを有効にしません。新しい ECS インスタンスは、ノードがリリースされた場合にのみ作成されます。ノードプールの Auto Scaling グループを直接管理しないでください。これにより、ノードプールが予期せず動作する可能性があります。 |
スケーリング失敗のエラーコードと解決策
ノードプールのスケーリングは、在庫不足などの理由で失敗する可能性があります。失敗の理由を表示するには、[クラスターリスト] ページでターゲットクラスターの名前をクリックします。次に、[クラスタージョブ] タブで [理由の表示] をクリックします。
次の表に、スケールアウト失敗の一般的なエラーコードを示します。
エラーコード | 原因 | 解決策 |
RecommendEmpty.InstanceTypeNoStock | 現在のゾーンの ECS インスタンスの在庫が不足しています。 | ノードプールを編集して、異なるゾーンに vSwitch を追加し、複数のインスタンスタイプを構成します。これにより、ノード作成の成功確率が高まります。 ノードプールリストは、弾力性が低いノードプールを識別します。これにより、ノードプールの構成の可用性とインスタンスプロビジョニングの健全性を評価できます。詳細については、「ノードプールの弾力性を表示する」をご参照ください。 |
NodepoolScaleFailed.FailedJoinCluster | ノードを ACK クラスターに追加できませんでした。 | スケールアウトノードにログインし、 |
InvalidAccountStatus.NotEnoughBalance | アカウントの残高が不足しています。 | アカウントに資金を追加して、操作をリトライしてください。 |
InvalidParameter.NotMatch | エラーメッセージ | インスタンスタイプを変更します。
|
QuotaExceed.ElasticQuota | 現在のリージョンで選択されたインスタンスタイプの ECS インスタンス数がクォータを超えています。 | 次のいずれかの操作を実行できます。
|
InvalidResourceType.NotSupported | 指定された ECS インスタンスタイプは、現在のゾーンではサポートされていないか、在庫切れです。 | DescribeAvailableResource 操作を呼び出して、インスタンスタイプがゾーンで利用可能かどうかを確認します。次に、ノードプールのインスタンスタイプを変更します。 |
InvalidImage.NotSupported | エラーメッセージ | インスタンスタイプを変更します。
|
InvalidParameter.NotMatch | エラーメッセージ | インスタンスタイプを変更します。
|
QuotaExceeded.PrivateIpAddress | vSwitch で使用可能なプライベート IP アドレスの数が不足しています。 | ノードプールにさらに vSwitch を構成してから、操作をリトライします。 |
InvalidParameter.KmsNotEnabled | 指定した KMS キーが有効になっていません。 | Key Management Service (KMS) コンソールにログインして、キーのステータスを確認します。 |
InvalidInstanceType.NotSupported | エラーメッセージ | インスタンスタイプを変更します。
|
InsufficientBalance.CreditPay | アカウントの残高が不足しています。 | 続行するには、アカウントに資金を追加してください。 |
ApiServer.InternalError | エラーメッセージ | クラスターの API サーバーが利用可能でアクセス可能かどうかを確認します。詳細については、「コンソールからクラスターへのアクセスに関する問題のトラブルシューティング」をご参照ください。 |
RecommendEmpty.InstanceTypeNotAuthorized | 指定したインスタンスタイプは、使用前に権限付与が必要です。 | ECS にチケットを送信して権限付与をリクエストできます。 |
Account.Arrearage | アカウントの残高が不足しています。 | 続行する前に、アカウントに資金を追加してください。 |
Err.QueryEndpoints | ACK クラスターの API サーバーへのアクセスに失敗しました。 | クラスターの API サーバーが利用可能でアクセス可能かどうかを確認します。詳細については、「コンソールからクラスターへのアクセスに関する問題のトラブルシューティング」をご参照ください。 |
RecommendEmpty.DiskTypeNoStock | 指定されたゾーンのディスク在庫が不足しています。 | ノードプールにゾーン (vSwitch) を追加するか、ディスクタイプを変更してから、操作をリトライします。 |
InvalidParameter.KMSKeyId.KMSUnauthorized | Key Management Service (KMS) へのアクセスが承認されていません。 | ECS コンソールにログインして、ECS に `AliyunECSDiskEncryptDefaultRole` サービスロールを付与します。これにより、ECS は KMS にアクセスできるようになります。詳細については、「暗号化の権限」をご参照ください。 |
InvalidParameter.Conflict | エラーメッセージ | インスタンスタイプまたはディスクタイプを変更してから、操作をリトライします。 |
NotSupportSnapshotEncrypted.DiskCategory | システムディスクの暗号化は、拡張 SSD (ESSD) でのみサポートされています。 | 別のディスクタイプを選択します。 ディスクタイプと暗号化の詳細については、「ノードプールの作成と管理」をご参照ください。 |
ScalingActivityInProgress | ノードプールはすでにスケーリングアクティビティを実行中です。後でもう一度お試しください。 | スケーリングアクティビティの競合を避けるため、Auto Scaling コンソールから直接ノードをスケールインまたはスケールアウトしないでください。 |
Instance.StartInstanceFailed | ECS インスタンスの起動に失敗しました。 | 後でもう一度操作を試してください。問題をトラブルシューティングするには、ECS にチケットを送信できます。 |
OperationDenied.NoStock | 選択した ECS インスタンスタイプは、指定されたゾーンで在庫切れです。 | ノードプールの構成でインスタンスタイプを変更して、もう一度試してください。 弾力性は、リアルタイムの在庫に基づいてノードプールのスケールアウトが成功する確率を示します。詳細については、「ノードプールの弾力性を表示する」をご参照ください。 |
NodepoolScaleFailed.WaitForDesiredSizeTimeout | スケールアウトタスクがタイムアウトしました。 | 次の手順を実行して、スケーリングアクティビティの詳細を表示します。
|
ApiServer.TooManyRequests | API サーバーがスケールアウトジョブをスロットリングしています。 | API サーバーがスケールアウトジョブをスロットリングしています。API サーバーに送信されるリクエストの数を減らすか、後でジョブをリトライしてください。 |
NodepoolScaleFailed.PartialSuccess | スケールアウトは部分的に成功しました。一部のノードは作成されましたが、在庫不足のために他のノードは失敗しました。 | 異なるインスタンスタイプを選択して、操作をリトライします。 弾力性は、リアルタイムの在庫に基づいてノードプールのスケールアウトが成功する確率を示します。詳細については、「ノードプールの弾力性を表示する」をご参照ください。 |
リファレンス
クラスターからノードを削除するための詳細な手順と注意事項については、「ノードの削除」をご参照ください。
ノードプールのアップグレード、自動ノード回復の有効化、OS CVE の修正などのノードプールの O&M 操作については、「ノードプールの O&M」をご参照ください。
デプロイメントセットを使用してノードを異なる物理サーバーに分散させて高可用性を実現したり、スポットインスタンスからノードプールを作成したりするなど、ノードとノードプールのベストプラクティスについては、「ノードとノードプールのベストプラクティス」をご参照ください。