拡張性とパフォーマンス問題

Prev Next

VPC環境で利用できます。

Ncloud Kubernetes Serviceの利用中に次のような問題が発生することがあります。問題ごとの原因と解決方法を確認し、適切に対処してください。

Cluster Autoscalerを設定しても、Scale In/Outが発生しない

Cluster Autoscalerを設定しましたが、Scale In/Outが発生しません。

原因

Cluster Autoscalerクラスタ内に、リソース不足によりスケジューリングされなかった Podが存在する場合にノードを増加させ、一定時間特定ノードの使用率が低い場合にノードを減少させます。Podの負荷がどんなに高くても、リクエストしたリソース量がない場合、ノードは増加しません。

Autoscalerは次の条件を満たしたときに Scale In/Outを実行します。

  • Scale Inの条件

    • Podが Pendingステータスで待機している場合
    • ノードが Podを収容するのに十分なリソースを持っていない場合
  • Scale Outの条件

    • ノードの Podが他のノードにスケジューリングできる場合
    • 一定期間、特定のノードが使用されていない、または低リソース使用率を維持している場合

Cluster Autoscalerは様々な原因で動作しない場合があるので、詳細な原因を確認する必要があります。

解決方法

  • 使用している Podに Resource Request、Limit設定が存在しない場合は動作しません。必ず Resource Request&Limitの設定を完了します。
  • ノード減少の例外が存在する場合、ノードが減少しないことがあります。例外は次の通りです。
    • Controller(例: Deployment StatefulSet ..)によって制御されない場合
    • Local Storageが設定されている場合
    • 他のノードに Podが移動できない場合
    • Annotation 「cluster-autoscaler.kubernetes.io/safe-to-evict」: 「false」が設定されている場合
    • その他の例外事項については、公式ドキュメントをご参照ください。
参考
  • ClusterAutoscalerの Scale Down方式についての詳細な説明は、How does scale-down work?をご参照ください。
  • 実際のノードリソースの使用量と Podのリソースリクエスト量に差がある場合、非効率的な場合があるため、Podのリソースリクエスト量を適切な値に変更して使用することをお勧めします。
  • 実際のノードリソースの使用量が少なくても、Podのリソースリクエスト量により Podが Pendingステータスになると、Cluster Autoscalerがこれを検知して自動的にノードを拡張します。詳細な説明は、リソースリクエストを含む Podのスケジューリング方法をご参照ください。

Cluster Autoscaler使用時のパラメータ変更

  • Cluster Autoscaler使用時にパラメータを変更したり確認したいです。
  • Cluster Autoscaler使用時にパラメータが変更されません。

原因

Cluster Autoscalerの設定時はデフォルトパラメータを使用し、変更機能は提供しません。

解決方法

Cluster Autoscalerで使用されるパラメータとデフォルト値は、What are the parameters to CAをご確認ください。

特定ノードを Scale Down対象から除外

Cluster Autoscaler使用時、特定ノードを Scale Down対象から除外したいです。

原因

基本的に Cluster Autoscalerは、低使用ノードを縮小対象とみなします。特に除外しない場合、すべてのノードが候補になることがあります。

解決方法

縮小対象から除外するノードにアノテーションを追加します。

$ kubectl annotate node <nodename> cluster-autoscaler.kubernetes.io/scale-down-disabled=true

クラスタを自動拡張

Cluster Autoscaler適用後、クラスタを自動拡張しました。

原因

Cilium-operator Podは、安定したネットワークのために基本2つに構成されます。ワーカノードが1台の場合はスケジュール設定に応じて1つは Runningに、残りは Pendingステータスになります。Cluster Autoscalerが Pendingステータスの cilium-operator Podのため、拡張を行います。

解決方法

cilium-operator Podの Pod数を調整します。

$ kubectl scale --replicas=1 deploy/cilium-operator -n kube-system

ただし、ワーカーノードを1台のみ運用する場合、安定性が低下する可能性があるためご注意ください。

総ノード数が最大ノード数より少ないのに、新規ノードを作成できない場合

Cluster Autoscaler使用時、クラスタの総ノード数には余裕がありますが、最小ノード数を調整しても新規ノードが作成されません。

原因

Cluster Autoscalerの設定後、最小ノード数を調整してもこれを自動的に拡張しません。

解決方法

Cluster Autoscaler設定を解除した後、固定ノード数を増やしてください。

ワーカーノードの多いリソース使用量

ワーカーノードで CPU、メモリなどのリソース使用量が異常に多く表示されています。

原因

リソースの多い使用量の原因は、主に次の通りです。

  • 過剰な Podリリース: ワーカーノードに配置された Podの数が多い場合
  • リソース制限の未設定: Podに対する Resource Request、Limitが存在しない場合
  • メモリリーク: 運用 Podでメモリリークが発生する場合

解決方法

Podリリースステータスの確認

  • 以下のコマンドを実行してリソース使用量の多いノードおよび Podを調査し、必要に応じてクラスタ内で調整します。
    $ kubectl top nodes
    $ kubectl top pods
    
  • ワーカーノードにアクセスしてメモリ使用状況を確認します。usedと buff/cache値を確認します。buff/cache使用量が多い場合でも問題が発生するため、確認が必要です。
    $ free -h
    

Resource Requestおよび Limit設定

参考

本ガイドで必要な情報が見つからない場合やさらに必要な情報がある場合は、いつでも以下のフィードバックアイコンをクリックして、ご意見をお寄せください。いただいたご意見を参照して、より有益な情報を提供できるよう努力してまいります。