Container Service for Kubernetes (ACK) では、ノードプール内のノードの予想数を変更することで、ノードプールをスケーリングできます。 ノードプールをスケールアウトしてビジネス開発の要件を満たし、ノードプールをスケールインしてリソースコストを削減できます。 ノードプールのスケーリングを自動化して、O&M効率を向上させることができます。
前提条件
クラスターが作成され、クラスターにノードプールがあります。 詳細については、「ノードプールの作成」をご参照ください。
kubectlクライアントがACKクラスターに接続されています。 詳細については、「クラスターのkubeconfigファイルを取得し、kubectlを使用してクラスターに接続する」をご参照ください。
ノードプールのスケーリングの紹介
ノードの予想数は、ノードプールに保持されるノードの数を指す。 ノードプールが最終状態に達したときのノードプール内のノード数を示します。 ノードプール内のノードの予想数を指定すると、ノードプール内のノードは指定された数に自動的にスケーリングされます。
ノードプールのスケールアウト
予想されるノード数を現在の値より大きい値に設定します。 その後、ノードプールは自動的にスケールアウトされます。 ノードプールをスケールアウトする場合は、この方法を使用することを推奨します。 このようにして、ノードプールにノードを追加できなかった場合、システムは自動的に再試行できます。
スケールアウトの設定は、ノードプールの設定によって異なります。 ノードのインスタンスタイプとゾーンは、使用されるスケーリングポリシーによって異なります。 ノードプールのスケーリングポリシーの詳細については、「スケーリングポリシー」をご参照ください。
システムは、ノードプールをスケールアウトするために以下のステップを実行する。
ECSインスタンスの作成: ノードプールをスケールするためにACKが使用する基盤となるサービスであるAuto Scalingは、Elastic Compute service (ECS) インスタンスを自動的に作成します。 ノードの予想数を変更すると、ACKはAuto scalingのスケーリンググループ内のインスタンスの予想数を自動的に変更し、ノードプールをスケールアウトします。 ノードプールのステータスが [展開] に変わります。 Auto ScalingがECSインスタンスを作成すると、ノードプールのステータスが [アクティブ] に変わります。 期待インスタンス数機能の詳細については、「期待インスタンス数」をご参照ください。
重要GPU高速化されたECS Bare Metalインスタンスファミリーebmgn7およびebmgn7eのインスタンスは、マルチインスタンスGPU (MIG) 設定を自動的に削除することはできません。 ACKが上記のインスタンスファミリーのインスタンスを追加すると、ACKはインスタンスに保持されているMIG設定を自動的にリセットします。 リセットには時間がかかることがある。 この場合、インスタンスのクラスターへの追加に失敗する可能性があります。
問題のトラブルシューティング方法の詳細については、ECS Bare Metalインスタンスの追加に失敗した場合はどうすればよいですか。
ebmgn7eインスタンスファミリーの詳細については、「ebmgn7e、GPU高速化コンピューティング最適化ECSベアメタルインスタンスファミリー」をご参照ください。
ECSインスタンスをクラスターに追加する: Auto ScalingがECSインスタンスを作成した後、ECSインスタンスはACKで管理されている
cloud-init
スクリプトを自動的に実行してノードを初期化し、ノードをノードプールに追加します。 操作ログは、各ノードの /var/log/messagesファイルに保存されます。 ノードにログインし、grep cloud-init /var/log/messages
コマンドを実行してログを表示します。説明ノードがノードプールに追加されると、/var/log/messagesファイルの操作ログは自動的に削除されます。 したがって、ログには、ノードプールにノードを追加する失敗に関する情報のみが記録されます。
システムがノードプールにノードを追加できなかった場合、/var/log/messagesファイル内の関連するログデータがタスク結果に同期されます。 タスクの詳細は、クラスター詳細ページの [クラスタータスク] タブで確認できます。
ノードプールのスケール
予想されるノード数を現在の値より小さい値に設定します。 その後、ノードプールは自動的にスケールインされます。
システムがノードプール内でスケーリングする場合:
スケーリングポリシーがPriorityに設定されている場合、システムは新しく作成されたECSインスタンスをスケーリンググループから削除することが望ましいです。
スケーリングポリシーがDistribution Balancingに設定されている場合、システムはポリシーに基づいて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 ユーザーへの権限の付与」をご参照ください。
On theクラウドリソースへのアクセス許可ページをクリックします。承認に同意する.
[Expected Nodes] パラメーターを設定し、プロンプトに従って他のパラメーターを設定します。
ノードプールリストのノードプールのステータスに [展開] が表示されている場合、システムはノードプールをスケールアウトしています。 ノードプールのステータスが [有効化] に変わると、ノードプールはスケールアウトされます。
重要クラスターのセキュリティグループが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操作を呼び出して、現在のゾーンでサポートされているインスタンスタイプを照会し、ノードプールで使用されているインスタンスタイプを変更します。 |
InvalidImage.NotSupported |
| 別のインスタンスタイプを選択します。
|
InvalidParameter.NotMatch |
| 別のインスタンスタイプを選択します。
|
QuotaExceeded.PrivateIpAddress | 現在のvSwitchが提供するアイドルプライベートIPアドレスが不十分です。 | ノードプールのvSwitchをさらに指定して、もう一度お試しください。 |
InvalidParameter.KmsNotEnabled | 指定されたキー管理サービス (KMS) キーは無効です。 | KMSコンソールにログインし、キーを有効にします。 |
InvalidInstanceType.NotSupported |
| インスタンスタイプを選択します。
|
不十分なバランス。CreditPay | アカウントに十分な残高がありません。 | 最初にアカウントを補充します。 |
ApiServer.InternalError |
| APIサーバーにアクセス可能か利用可能かを確認します。 詳細については、「ACKコンソールのトラブルシューティング (クラスターアクセス例外) 」をご参照ください。 |
RecommendEmpty.InstanceTypeNotAuthorized | 指定されたインスタンスタイプを使用する権限がありません。 | チケットを起票し、ECSで必要な権限を取得します。 |
Account.Arrearage | アカウントに十分な残高がありません。 | 最初にアカウントを補充します。 |
Err.QueryEndpoints | ACKクラスターのAPIサーバーへのアクセスに失敗します。 | APIサーバーにアクセス可能か利用可能かを確認します。 詳細については、「ACKコンソールのトラブルシューティング (クラスターアクセス例外) 」をご参照ください。 |
RecommendEmpty.DiskTypeNoStock | 指定されたゾーンでディスクのインベントリが不足しています。 | ノードプールのvSwitchをさらに指定するか、別のディスクタイプを選択します。 |
InvalidParameter.KMSKeyId.KMSUnauthorized | KMSにアクセスする権限がありません。 | ECSコンソールにログインし、AliyunECSDiskEncryptDefaultRoleロールをECSに割り当てます。 詳細については、「RAMロールを介したKMSキーへのアクセスの付与」をご参照ください。 |
InvalidParameter.Conflict |
| 別のインスタンスタイプまたはディスクタイプを選択します。 |
NotSupportSnapshotEncrypted.DiskCategory | システムディスク暗号化は、拡張SSD (ESSD) のみをサポートします。 | 別のディスクタイプを選択します。 ディスクタイプとディスク暗号化の詳細については、ノードプールの作成. |
ScalingActivityInProgress | ノードプールはスケーリング中なので、後でもう一度お試しください。 | スケーリングの競合を回避するには、Auto scalingコンソールでノードプールをスケーリングしないでください。 |
Instance.StartInstanceFailed | ECSインスタンスの起動に失敗しました。 | しばらくしてからもう一度お試しください。 この問題を解決するには、ECSチームにチケットを送信します。 |
OperationDenied.NoStock | 指定されたゾーンで現在のECSインスタンスタイプが在庫切れです。 | 別のインスタンスタイプを選択します。 ノードプールのスケーラビリティは、ECSインスタンスのストックに基づいて動的に変化し、ノードプールスケーリングの成功率に影響します。 詳細については、「ノードプールのスケーラビリティの確認」をご参照ください。 |
RecommendEmpty.InstanceTypeNoStock | 指定されたゾーンで現在のECSインスタンスタイプが在庫切れです。 | 別のインスタンスタイプを選択します。 ノードプールのスケーラビリティは、ECSインスタンスのストックに基づいて動的に変化し、ノードプールスケーリングの成功率に影響します。 詳細については、「ノードプールのスケーラビリティの確認」をご参照ください。 |
NodepoolScaleFailed.WaitForDesiredSizeTimeout | スケールアウトタスクがタイムアウトします。 | タスクの詳細を表示するには、次の手順を実行します。
|
ApiServer.TooManyRequests | タスクは、クラスターのKubernetes APIサーバーによって調整されます。 | リクエストの頻度を減らすか、後でもう一度お試しください。 |
NodepoolScaleFailed.PartialSuccess | インベントリ不足のため、一部のノードの作成に失敗しました。 | ノードプールで使用されるインスタンスタイプを変更してから、再試行してください。 ノードプールのスケーラビリティは、ECSインスタンスのストックに基づいて動的に変化し、ノードプールスケーリングの成功率に影響します。 詳細については、「ノードプールのスケーラビリティの確認」をご参照ください。 |
関連ドキュメント
ノードプールからノードを削除する際の操作と注意事項の詳細については、「ノードの削除」をご参照ください。
ノードプールのアップグレード、自動修復、ノードプールのOS CVE脆弱性のパッチ適用など、ノードプールのO&Mタスクの詳細については、「ノードプールのO&M」をご参照ください。
ノードプールのベストプラクティス (デプロイメントセットを使用してECSインスタンスを異なる物理サーバーに分散し、高可用性とプリエンプティブルインスタンスベースのノードプールを確保するなど) については、「ノードとノードプールのベストプラクティス」をご参照ください。