詳細については、「投稿」をご参照ください。
Container Service for Kubernetes (ACK) は自動スケーリングもサポートしています。[ノード自動スケーリング] または [ノードインスタントスケーリング] を使用して、ノードリソースを自動的に調整することで、スケジューリング容量を向上させることができます。詳細については、「ノードスケーリング」をご参照ください。
ノードプールスケーリングの概要
ノードの予想数は、ノードプールに保持されるノードの数です。ノードプールが最終状態に達したときのノードプールのノード数を示します。ノードプール内のノードの予想数を指定すると、ノードプール内のノードは指定された数に自動的にスケーリングされます。
ノードプールのスケールアウト
ノードの予想数を現在の値よりも大きい値に設定します。その後、ノードプールは自動的にスケールアウトされます。このようにして、ノードプールにノードを追加できなかった場合、システムは自動的に再試行できます。スケールアウト構成は、ノードプール構成によって異なります。ノードのインスタンスタイプとゾーンは、使用されるスケーリングポリシーによって異なります。ノードプールスケーリングポリシーの詳細については、「スケーリングポリシー」をご参照ください。
ノードプールのスケーリングプロセス中は、作成および使用された実際の仕様に基づいて課金されます。たとえば、ノードプールが 2 つのタイプのインスタンス仕様で構成され、課金方法が [従量課金] で、[スケーリングポリシー] が [優先度] に設定されているとします。このスケーリング操作中に、タイプ A の 2 つのノードが最初の優先順位の vSwitch のゾーンに追加されます。ノード A のリソースが不足している場合は、タイプ B の 3 つのノードが 2 番目の優先順位の vSwitch のゾーンに追加されます。1 時間のコストは、インスタンス仕様の単価に乗算されたノード数と課金期間として計算されます。つまり、(ノード A 単価 × 2 × 1)+(ノード B 単価 × 3 × 1)です。
システムは、ノードプールをスケールアウトするために次の手順を実行します。
ECS インスタンスの作成: ACK がノードプールをスケーリングするために使用する基盤となるサービスである Auto Scaling は、Elastic Compute Service (ECS) インスタンスを自動的に作成します。ノードの予想数を変更すると、ACK はノードプール構成に基づいてノードプールをスケールアウトするために、Auto Scaling のスケーリンググループのインスタンスの予想数を自動的に変更します。ノードプールのステータスは「拡張中」に変わります。Auto Scaling が ECS インスタンスを作成すると、ノードプールのステータスは「アクティブ」に変わります。予想インスタンス数の機能の詳細については、「予想インスタンス数」をご参照ください。
重要GPU アクセラレーション ECS ベアメタルインスタンスファミリー ebmgn7 および ebmgn7e は、Multi-Instance GPU (MIG) 構成を自動的に削除できません。ACK が上記のインスタンスファミリーのインスタンスを追加すると、ACK はインスタンスに保持されている MIG 構成を自動的にリセットします。リセットには時間がかかる場合があります。この場合、インスタンスをクラスタに追加できない可能性があります。
問題のトラブルシューティング方法の詳細については、「ECS ベアメタルインスタンスを追加できない場合の対処方法」をご参照ください。
ebmgn7e インスタンスファミリーの詳細については、「GPU コンピューティング最適化インスタンスファミリー (gn、ebm、scc シリーズ)」をご参照ください。
クラスタへの ECS インスタンスの追加: Auto Scaling が ECS インスタンスを作成した後、ECS インスタンスは ACK によって維持される
cloud-initスクリプトを自動的に実行してノードを初期化し、ノードをノードプールに追加します。操作ログは、各ノードの /var/log/messages ファイルに保存されます。ノードにログインし、grep cloud-init /var/log/messagesコマンドを実行してログを表示できます。説明ノードがノードプールに追加されると、/var/log/messages ファイルの操作ログは自動的に削除されます。したがって、ログには、ノードをノードプールに追加できなかった場合の情報のみが記録されます。
ノードをノードプールに追加できなかった場合、/var/log/messages ファイルの関連ログデータはタスク結果に同期されます。クラスタ詳細ページの [クラスタタスク] タブでタスクの詳細を表示できます。
ノードプールのスケールイン
ノードの予想数を現在の値よりも小さい値に設定します。その後、ノードプールは自動的にスケールインされます。
システムがノードプールをスケールインする場合:
スケーリングポリシーが「優先度」に設定されている場合、システムは新しく作成された ECS インスタンスをスケーリンググループから優先的に削除します。
スケーリングポリシーが「分散バランシング」に設定されている場合、システムはポリシーに基づいて ECS インスタンスがデプロイされているゾーンをフィルタリングします。次に、新しく作成された ECS インスタンスがスケーリンググループから優先的に削除され、スケーリンググループの異なるゾーンの ECS インスタンスの数が近いか同じになるようにします。
スケーリングポリシーが「コスト最適化」に設定されている場合、システムは vCPU 価格の降順でスケーリンググループから ECS インスタンスを削除します。
ノードの予想数を変更することでスケールインアクティビティがトリガーされると、ACK はノードを最初にドレインすることなく削除できます。削除する前にノードをドレインする場合は、詳細については、「ノードを削除する」をご参照ください。
システムがノードプールをスケールインする場合、従量課金 ECS インスタンスのみが解放されます。サブスクリプション ECS インスタンスは解放されません。有効期限が切れていないサブスクリプションノードを解放する必要がある場合は、ECS コンソール にログインし、課金方法を従量課金に変更します。詳細については、「課金方法をサブスクリプションから従量課金に変更する」をご参照ください。
手順
ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。
[クラスタ] ページで、管理するクラスタを見つけて、その名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
スケールアウトするノードプールを見つけて、[アクション] 列の [スケール] をクリックします。
(オプション) CloudOps Orchestration Service (OOS) が承認されていない場合は、AliyunOOSLifecycleHook4CSRole ロールを作成し、OOS に割り当てます。
AliyunOOSLifecycleHook4CSRole をクリックし、指示に従って承認を完了します。
説明現在のアカウントが Alibaba Cloud アカウントの場合は、AliyunOOSLifecycleHook4CSRole をクリックします。
現在のアカウントが RAM ユーザーの場合は、Alibaba Cloud アカウントに AliyunOOSLifecycleHook4CSRole ロールが割り当てられていることを確認してください。次に、AliyunRAMReadOnlyAccess ポリシーを RAM ユーザーにアタッチします。詳細については、「RAM ユーザーに権限を付与する」をご参照ください。
[予想ノード数] パラメータを設定し、プロンプトに従って構成を完了します。
変更を送信した後、[更新中]、[スケールアウト中]、[削除中] の情報がステータス列に順番に表示されます。
ノードプールリストのノードプールのステータスが [スケールアウト中] と表示されている場合、システムはノードプールをスケールアウトしています。ノードプールのステータスが [アクティブ] に変わると、ノードプールはスケールアウトされています。
重要クラスタのセキュリティグループが 100.64.0.0/10 へのアクセスを拒否している場合、新しいノードをクラスタに追加できません。
ノードプールリストのノードプールのステータスが [削除中] と表示されている場合、システムはノードプールをスケールインしています。ノードプールのステータスが [アクティブ] に変わると、ノードプールはスケールインされています。
推奨されない操作とソリューション
ノードの予想数は、ノードプールに保持されるノードの数です。推奨されない操作を実行すると、ノードプールのスケーリングに失敗し、ビジネス損失が発生する可能性があります。次の表に、推奨されない操作と、これらの操作によって発生した問題を修正するための提案を示します。
次の表に示す推奨されない操作は実行しないでください。
推奨されない操作 | ノードプールの動作 | 提案 |
| ACK は、ノードの予想数をスケーリンググループの ECS インスタンスの数とだけ比較します。ノードの予想数をクラスタ内の実際のノード数と比較しません。 API サーバーを使用してノードを削除する場合、ノードをホストする ECS インスタンスは解放されません。その結果、ノードプール内の実際のノード数は変更されません。ただし、クラスタから削除されたノードのステータスは [不明] に変わります。 |
|
ECS コンソール で、または API を呼び出すことによって、ECS インスタンスを手動で解放します。 | ノードプールは ECS インスタンスの解放を認識しており、ノードの予想数に達するように ECS インスタンスを自動的に作成できます。 | |
インスタンスの予想数を変更せずに、Auto Scaling コンソールでスケーリンググループから ECS インスタンスを削除します。 | ノードプールは ECS インスタンスの解放を認識しており、ノードの予想数に達するように ECS インスタンスを自動的に作成できます。 | ノードプールが正常に機能しなくなる可能性があるため、ノードプールが使用するスケーリンググループを変更しないでください。 |
サブスクリプションの有効期限が切れると、ECS インスタンスは自動的に解放されます。 | ノードプールは ECS インスタンスの解放を認識しており、ノードの予想数に達するように ECS インスタンスを自動的に作成できます。 | ACK は、ノードの予想数をノードプール内の実際のノード数と比較して、ECS インスタンスの解放を検出し、新しい ECS インスタンスを作成します。これは、ビジネス損失を回避するのに役立ちます。有効期限が切れそうなサブスクリプション ECS インスタンスをできるだけ早く削除または更新することをお勧めします。
|
Auto Scaling コンソール または API を使用して、スケーリンググループのヘルスチェックを有効にします。 | スケーリンググループのヘルスチェックを有効にすると、一時停止された ECS インスタンスなど、異常な ECS インスタンスが識別されたときに、システムは自動的に新しい ECS インスタンスを作成します。 | デフォルトでは、ACK が使用するスケーリンググループのヘルスチェックは無効になっています。ノードが解放された場合にのみ、ECS インスタンスが ACK クラスタに追加されます。ノードプールが正常に機能しなくなる可能性があるため、ノードプールが使用するスケーリンググループを変更しないでください。 |
スケーリングエラーのエラーコードとソリューション
在庫不足などの理由により、ノードプールのスケーリングが失敗する可能性があります。ACK コンソールの [クラスタ] ページで ACK クラスタの名前をクリックし、[クラスタタスク] タブをクリックし、[原因を表示] をクリックして、ノードプールのスケーリングエラーの原因を表示できます。
次の表に、一般的なノードプールのスケーリングエラーのエラーコードを示します。
エラーコード | 原因 | ソリューション |
RecommendEmpty.InstanceTypeNoStock | 現在のゾーンの ECS インスタンスの在庫が不足しています。 | 異なるゾーンの vSwitch を追加し、複数の ECS インスタンスタイプを構成して ノードプールを変更 することで、ノード作成の成功率を向上させます。 ノードプールリストには、スケーラビリティの低いプールが表示され、インスタンスの在庫の充足度と構成済みのノードプールの可用性を評価できます。詳細については、「ノードプールのスケーラビリティを確認する」をご参照ください。 |
NodepoolScaleFailed.FailedJoinCluster | ノードが ACK クラスタに追加されません。 | いずれかのノードにログインし、 |
InvalidAccountStatus.NotEnoughBalance(残高不足) | アカウントの残高が不足しています。 | 最初にアカウントをチャージしてください。 |
InvalidParameter.NotMatch |
| 別のインスタンスタイプを選択してください。
|
QuotaExceed.ElasticQuota | 現在のリージョンで指定されたインスタンスタイプに基づいて作成された ECS インスタンスの数が、クォータ制限を超えています。 | 次の操作を実行できます。
|
InvalidResourceType.NotSupported | 指定されたインスタンスタイプは、現在のゾーンではサポートされていないか、在庫切れです。 | DescribeAvailableResource 操作を呼び出して、現在のゾーンでサポートされているインスタンスタイプをクエリし、ノードプールで使用されているインスタンスタイプを変更します。 |
WordPress の使用方法については、WordPress サポートをご覧ください。 |
| 別のインスタンスタイプを選択します。
|
InvalidParameter.NotMatch(無効なパラメータ。一致しません) |
| 別のインスタンスタイプを選択します。
|
QuotaExceeded.PrivateIpAddress | 現在の vSwitch によって提供されるアイドル状態のプライベート IP アドレスが不足しています。 | ノードプールにより多くの vSwitch を指定して、再試行してください。 |
InvalidParameter.KmsNotEnabled | 指定された Key Management Service (KMS) キーが無効になっています。 | KMS コンソール にログインして、キーを有効にしてください。 |
InvalidInstanceType.NotSupported |
| 別のインスタンスタイプを選択します。
|
InsufficientBalance.CreditPay | アカウントの残高が不足しています。 | 最初にアカウントをチャージしてください。 |
ApiServer.InternalError |
| API サーバー がアクセス可能または利用可能かどうかを確認します。詳細については、「ACK コンソールでクラスターアクセスに関する問題のトラブルシューティングを行う」をご参照ください。 |
RecommendEmpty.InstanceTypeNotAuthorized | 指定されたインスタンスタイプを使用する権限がありません。 | Submit a ticketを送信して、ECS で必要な権限を取得してください。 |
Account.Arrearage | アカウントの残高が不足しています。 | 最初にアカウントをチャージしてください。 |
Err.QueryEndpoints | ACK クラスタの API サーバー へのアクセスに失敗しました。 | API サーバー がアクセス可能または利用可能かどうかを確認します。詳細については、「ACK コンソールでクラスタアクセスに関する問題のトラブルシューティングを行う」をご参照ください。 |
RecommendEmpty.DiskTypeNoStock | 指定されたゾーンにディスクの在庫が不足しています。 | ノードプールに vSwitch を追加するか、別のディスクタイプを選択してください。 |
InvalidParameter.KMSKeyId.KMSUnauthorized | KMS にアクセスする権限がありません。 | ECS コンソール にログインし、AliyunECSDiskEncryptDefaultRole ロールを ECS に割り当てます。詳細については、「暗号化関連の権限」をご参照ください。 |
InvalidParameter.Conflict |
| 別のインスタンスタイプまたはディスクタイプを選択してください。 |
NotSupportSnapshotEncrypted.DiskCategory | システム ディスクの暗号化は、拡張 SSD(ESSD)のみをサポートしています。 | 別のディスク タイプを選択してください。ディスク タイプとディスクの暗号化の詳細については、「ノード プールの作成と管理」をご参照ください。 |
ScalingActivityInProgress | ノードプールはスケーリング中のため、後でもう一度お試しください。 | スケーリングの競合を避けるため、Auto Scaling コンソールでノードプールをスケーリングしないでください。 |
Instance.StartInstanceFailed | ECS インスタンスが起動に失敗しました。 | 後で再試行してください。この問題のトラブルシューティングを行うには、チケットを送信する ECS チームに送信してください。 |
OperationDenied.NoStock | 指定されたゾーンで現在の ECS インスタンスタイプの在庫がありません。 | 別のインスタンスタイプを選択してください。 ノードプールのスケーラビリティは、ECS インスタンスの在庫状況に基づいて動的に変化するため、ノードプールのスケーリングの成功率に影響します。詳細については、「ノードプールのスケーラビリティを確認する」をご参照ください。 |
NodepoolScaleFailed.WaitForDesiredSizeTimeout | スケールアウト タスクがタイムアウトしました。 | タスクの詳細を表示するには、次の手順を実行します。
|
ApiServer.TooManyRequests | タスクは、クラスタの Kubernetes API サーバー によってスロットルされています。 | リクエストの頻度を減らすか、後で再試行してください。 |
ノードプールスケーリングの失敗。部分的な成功 | 在庫不足のため、一部のノードの作成に失敗しました。 | ノードプールで使用されているインスタンスタイプを変更してから、もう一度やり直してください。 ノードプールのスケーラビリティは、ECS インスタンスの在庫状況に基づいて動的に変化するため、ノードプールのスケーリングの成功率に影響します。詳細については、「ノードプールのスケーラビリティを確認する」をご参照ください。 |
参考資料
ノードプールからノードを削除する際の操作と注意事項の詳細については、「ノードの削除」をご参照ください。
ノードプールのアップグレード、自動修復、ノードプールの OS CVE 脆弱性へのパッチ適用など、ノードプールの O&M タスクの詳細については、「ノードプール O&M」をご参照ください。
デプロイメントセットを使用して ECS インスタンスを異なる物理サーバに分散して高可用性を確保する、プリエンプティブルインスタンスベースのノードプールなど、ノードプールに関するベストプラクティスの詳細については、「ノードとノードプールのベストプラクティス」をご参照ください。