すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:ノードプールのスケール

最終更新日:Nov 04, 2024

Container Service for Kubernetes (ACK) では、ノードプール内のノードの予想数を変更することで、ノードプールをスケーリングできます。 ノードプールをスケールアウトしてビジネス開発の要件を満たし、ノードプールをスケールインしてリソースコストを削減できます。 ノードプールのスケーリングを自動化して、O&M効率を向上させることができます。

前提条件

ノードプールのスケーリングの紹介

ノードの予想数は、ノードプールに保持されるノードの数を指す。 ノードプールが最終状態に達したときのノードプール内のノード数を示します。 ノードプール内のノードの予想数を指定すると、ノードプール内のノードは指定された数に自動的にスケーリングされます。

ノードプールのスケールアウト

予想されるノード数を現在の値より大きい値に設定します。 その後、ノードプールは自動的にスケールアウトされます。 ノードプールをスケールアウトする場合は、この方法を使用することを推奨します。 このようにして、ノードプールにノードを追加できなかった場合、システムは自動的に再試行できます。

説明

スケールアウトの設定は、ノードプールの設定によって異なります。 ノードのインスタンスタイプとゾーンは、使用されるスケーリングポリシーによって異なります。 ノードプールのスケーリングポリシーの詳細については、「スケーリングポリシー」をご参照ください。

システムは、ノードプールをスケールアウトするために以下のステップを実行する。

  1. 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設定を自動的にリセットします。 リセットには時間がかかることがある。 この場合、インスタンスのクラスターへの追加に失敗する可能性があります。

  2. 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コンソールにログインし、課金方法を従量課金に変更します。 詳細については、「インスタンスの課金方法をサブスクリプションから従量課金に変更する」をご参照ください。

手順

  1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、[ノード] > [ノードプール] を選択します。

  3. スケールアウトするノードプールを見つけて、[操作] 列で [詳細] > [スケール] を選択します。

  4. (オプション) CloudOps Orchestration Service (OOS) 認証が完了していない場合は、この手順を実行する必要があります。 次の手順を実行して、AliyunOOSLifecycleHook4CSRoleロールを作成し、そのロールをOOSに割り当てることができます。

    1. AliyunOOSLifecycleHook4CSRoleをクリックします。

      説明
      • 現在のアカウントがAlibaba Cloudアカウントの場合、AliyunOOSLifecycleHook4CSRoleをクリックします。

      • 現在のアカウントがRAMユーザーの場合、Alibaba CloudアカウントにAliyunOOSLifecycleHook4CSRoleロールが割り当てられていることを確認します。 次に、AliyunRAMReadOnlyAccessポリシーをRAMユーザーにアタッチします。 詳細については、「RAM ユーザーへの権限の付与」をご参照ください。

    2. On theクラウドリソースへのアクセス許可ページをクリックします。承認に同意する.

  5. [Expected Nodes] パラメーターを設定し、プロンプトに従って他のパラメーターを設定します。

    • ノードプールリストのノードプールのステータスに [展開] が表示されている場合、システムはノードプールをスケールアウトしています。 ノードプールのステータスが [有効化] に変わると、ノードプールはスケールアウトされます。

      重要

      クラスターのセキュリティグループが100.64.0.0/10へのアクセスを拒否した場合、新しいノードをクラスターに追加することはできません。

    • ノードプールリストのノードプールのステータスが [削除] と表示されている場合、システムはノードプールをスケーリングしています。 ノードプールのステータスが [有効化] に変わると、ノードプールはスケールインされます。

推奨されない操作とソリューション

ノードの予想数は、ノードプールに保持されているノードの数を指す。 推奨されない操作は、ノードプールスケーリングの失敗をもたらし、ビジネス損失を引き起こす可能性があります。 次の表に、推奨されない操作と、これらの操作によって発生する問題の修正方法に関する提案を示します。

重要

次の表の推奨されない操作を実行しないでください。

推奨されない操作

ノードプールの動作

提案

kubectl delete nodeコマンドを実行してノードを削除します。

ACKは、予想されるノード数とスケーリンググループ内のECSインスタンス数のみを比較します。 予想されるノード数とクラスター内の実際のノード数とは比較されません。

APIサーバーを使用してノードを削除する場合、ノードをホストするECSインスタンスはリリースされません。 その結果、ノードプール内の実際のノード数は変化しない。 ただし、クラスターから削除されたノードのステータスは不明に変わります。

  • この操作を実行した場合、ノードプールの名前をクリックし、[ノード] タブでノードを削除して、ノードプールからノードを削除できます。

    説明

    ノードはすでにクラスターから削除されているため、[ノードのドレイン] を選択する必要はありません。 ビジネス要件に基づいて [ECSインスタンスのリリース] を選択できます。

  • 上記の操作を実行した後、次のノードのECSインスタンスはリリースされません。 ECSコンソールにログインし、これらのECSインスタンスを手動でリリースする必要があります。

    • クラスターに手動で追加されたノード。

    • サブスクリプションノード。

ECSコンソールで、またはAPIを呼び出して、ECSインスタンスを手動でリリースします。

ノードプールはECSインスタンスのリリースを認識しており、予想されるノード数に達するように自動的にECSインスタンスを作成できます。

  • ACKは、予想されるノード数をノードプール内の実際のノード数と比較して、ECSインスタンスのリリースを検出し、新しいECSインスタンスを作成します。 これにより、ビジネスの損失を回避できます。 ACKコンソールを使用してノードを削除することを推奨します。 詳細については、「」をご参照ください。ノードを削除する.

  • 上記の操作を実行した後、次のノードの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クラスターに追加できません。

いずれかのノードにログインし、grep cloud-init /var /Log /messagesコマンドを実行して、操作ログを表示し、エラーメッセージを確認します。

InvalidAccountStatus.NotEnoughBalance

アカウントに十分な残高がありません。

最初にアカウントを補充します。

InvalidParameter.NotMatch

Image bootMode BIOS does not match instanceType bootModeエラーメッセージは、指定されたインスタンスタイプが指定されたOSイメージブートモードをサポートしていないことを示します。

インスタンスタイプを選択します。

  • [ノードプール] ページで管理するノードプールの [アクション] 列の [詳細] をクリックし、[概要] タブをクリックすると、OSやイメージIDなどのノードプールに関する基本情報が表示されます。

  • DescribeImageSupportInstanceTypes操作を呼び出して、ACKで使用されるOSイメージでサポートされているインスタンスタイプを照会できます。

  • ACKでサポートされているOSイメージの詳細については、「OSイメージの概要」をご参照ください。

QuotaExceed.ElasticQuota

現在のリージョンで指定されたインスタンスタイプに基づいて作成されたECSインスタンスの数がクォータ制限を超えています。

以下の操作を実行できます。

  • インスタンスタイプを選択します。

  • 既存のECSインスタンスの数を減らします。

  • クォータセンターに移動し、クォータの増加をリクエストします。

InvalidResourceType.NotSupported

指定されたインスタンスタイプは、現在のゾーンまたは在庫切れでサポートされていません。

DescribeAvailableResource操作を呼び出して、現在のゾーンでサポートされているインスタンスタイプを照会し、ノードプールで使用されているインスタンスタイプを変更します。

InvalidImage.NotSupported

指定されたイメージはvSGXインスタンスをサポートしていません。 エラーメッセージは、ノードプールのOSイメージがセキュリティ強化インスタンスをサポートしていないことを示します。

別のインスタンスタイプを選択します。

  • [ノードプール] ページで管理するノードプールの [アクション] 列の [詳細] をクリックし、[概要] タブをクリックすると、OSやイメージIDなどのノードプールに関する基本情報が表示されます。

  • DescribeImageSupportInstanceTypes操作を呼び出して、ACKで使用されるOSイメージでサポートされているインスタンスタイプを照会できます。

  • セキュリティ強化インスタンスでサポートされているOSイメージの詳細については、「ECSコンソールでの信頼できるインスタンスの作成」をご参照ください。

InvalidParameter.NotMatch

指定されたinstanceTypeはvTPMイメージのみをサポートします。 エラーメッセージは、指定されたOSイメージがセキュリティ強化インスタンスをサポートしていないことを示します。

別のインスタンスタイプを選択します。

  • [ノードプール] ページで管理するノードプールの [アクション] 列の [詳細] をクリックし、[概要] タブをクリックすると、OSやイメージIDなどのノードプールに関する基本情報が表示されます。

  • DescribeImageSupportInstanceTypes操作を呼び出して、ACKで使用されるOSイメージでサポートされているインスタンスタイプを照会できます。

  • セキュリティ強化インスタンスでサポートされているOSイメージの詳細については、「ECSコンソールでの信頼できるインスタンスの作成」をご参照ください。

QuotaExceeded.PrivateIpAddress

現在のvSwitchが提供するアイドルプライベートIPアドレスが不十分です。

ノードプールのvSwitchをさらに指定して、もう一度お試しください。

InvalidParameter.KmsNotEnabled

指定されたキー管理サービス (KMS) キーは無効です。

KMSコンソールにログインし、キーを有効にします。

InvalidInstanceType.NotSupported

指定されたinstanceTypeは、イメージアーキテクチャではサポートされていません。 エラーメッセージは、現在のインスタンスタイプが指定されたOSイメージをサポートしていないことを示します。

インスタンスタイプを選択します。

  • [ノードプール] ページで管理するノードプールの [アクション] 列の [詳細] をクリックし、[概要] タブをクリックすると、OSやイメージIDなどのノードプールに関する基本情報が表示されます。

  • DescribeImageSupportInstanceTypes操作を呼び出して、ACKで使用されるOSイメージでサポートされているインスタンスタイプを照会できます。

  • ACKでサポートされているOSイメージの詳細については、「OSイメージの概要」をご参照ください。

不十分なバランス。CreditPay

アカウントに十分な残高がありません。

最初にアカウントを補充します。

ApiServer.InternalError

サーバー上のエラー (\"Get \\\" https:// 192.168.xxx.xxx:xxx/api/v1/nodes \\\ ": dial tcp 192.168.xxx.xxx:xxx: connect: connection refected \") により、リクエストの成功が妨げられました。エラーメッセージは、ACKクラスターのAPIサーバーへのアクセスが失敗したことを示します。

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

指定されたディスクカテゴリ (xxxx) は、指定されたインスタンスタイプをサポートしていません。 エラーメッセージは、現在のインスタンスタイプが指定されたディスクタイプをサポートしていないことを示します。

別のインスタンスタイプまたはディスクタイプを選択します。

NotSupportSnapshotEncrypted.DiskCategory

システムディスク暗号化は、拡張SSD (ESSD) のみをサポートします。

別のディスクタイプを選択します。 ディスクタイプとディスク暗号化の詳細については、ノードプールの作成.

ScalingActivityInProgress

ノードプールはスケーリング中なので、後でもう一度お試しください。

スケーリングの競合を回避するには、Auto scalingコンソールでノードプールをスケーリングしないでください。

Instance.StartInstanceFailed

ECSインスタンスの起動に失敗しました。

しばらくしてからもう一度お試しください。 この問題を解決するには、ECSチームにチケットを送信します。

OperationDenied.NoStock

指定されたゾーンで現在のECSインスタンスタイプが在庫切れです。

別のインスタンスタイプを選択します。

ノードプールのスケーラビリティは、ECSインスタンスのストックに基づいて動的に変化し、ノードプールスケーリングの成功率に影響します。 詳細については、「ノードプールのスケーラビリティの確認」をご参照ください。

RecommendEmpty.InstanceTypeNoStock

指定されたゾーンで現在のECSインスタンスタイプが在庫切れです。

別のインスタンスタイプを選択します。

ノードプールのスケーラビリティは、ECSインスタンスのストックに基づいて動的に変化し、ノードプールスケーリングの成功率に影響します。 詳細については、「ノードプールのスケーラビリティの確認」をご参照ください。

NodepoolScaleFailed.WaitForDesiredSizeTimeout

スケールアウトタスクがタイムアウトします。

タスクの詳細を表示するには、次の手順を実行します。

  1. ACK コンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[ノード] > [ノードプール] を選択します。

  3. 管理するノードプールの名前をクリックし、[スケーリングアクティビティ] タブをクリックして、スケールアウトタスクの詳細を表示します。

ApiServer.TooManyRequests

タスクは、クラスターのKubernetes APIサーバーによって調整されます。

リクエストの頻度を減らすか、後でもう一度お試しください。

NodepoolScaleFailed.PartialSuccess

インベントリ不足のため、一部のノードの作成に失敗しました。

ノードプールで使用されるインスタンスタイプを変更してから、再試行してください。

ノードプールのスケーラビリティは、ECSインスタンスのストックに基づいて動的に変化し、ノードプールスケーリングの成功率に影響します。 詳細については、「ノードプールのスケーラビリティの確認」をご参照ください。

関連ドキュメント

  • ノードプールからノードを削除する際の操作と注意事項の詳細については、「ノードの削除」をご参照ください。

  • ノードプールのアップグレード、自動修復、ノードプールのOS CVE脆弱性のパッチ適用など、ノードプールのO&Mタスクの詳細については、「ノードプールのO&M」をご参照ください。

  • ノードプールのベストプラクティス (デプロイメントセットを使用してECSインスタンスを異なる物理サーバーに分散し、高可用性とプリエンプティブルインスタンスベースのノードプールを確保するなど) については、「ノードとノードプールのベストプラクティス」をご参照ください。