Kubernetes はポッドとコンテナを構成します。コンテナに割り当てられた CPU とメモリ リソースを調整します。

このページでは、ポッドまたはそのコンテナを再起動せずに、実行中のポッドのコンテナに割り当てられた CPU およびメモリ リソースを調整する方法について説明します。Kubernetes ノードは、 requests ポッドに基づいてリソースをポッドに割り当て、 limits ポッドのコンテナで指定された仕様に基づいてポッドのリソース使用量を制限します。

Pod リソースを適切に調整するには:

  • CPU リソースとメモリ リソースのコンテナの requests 合計は 変更可能limits です
  • ポッドの状態 containerStatuses の フィールドはallocatedResources 、ポッドのコンテナに割り当てられたリソースを反映します。
  • ポッド状態 containerStatuses の フィールドはresources 、コンテナ requests ランタイム によって報告される、実行中のコンテナに設定された実際のリソースの合計を反映しますlimits
  • ポッドステータスの フィールドにresize は、最後に要求された保留中の調整のステータスが表示されます。このフィールドには次の値を指定できます。
    • Proposed: この値は、要求された調整が承認され、要求が検証されて記録されたことを示します。
    • InProgress: この値は、ノードが調整リクエストを受け入れ、それをポッドのコンテナに適用していることを示します。
    • Deferred: この値は、要求された調整が現時点では承認できず、ノードが再試行を続けることを意味します。調整は、他のポッドが終了してノード リソースを解放するときに実際に実装される場合があります。
    • Infeasible: この値は、ノードが要求された調整値を引き受けることができないことを示します。これは、要求された調整がノードがポッドに割り当てることができる最大リソースを超える場合に発生する可能性があります。

始める準備ができています

Kubernetes クラスターが必要であり、クラスターと通信できるように kubectl コマンドライン ツールを構成する必要があります。このチュートリアルは、コントロール プレーンのホストではない少なくとも 2 つのノードを含むクラスターで実行することをお勧めします。

Kubernetes サーバーのバージョンは少なくともバージョン 1.27 である必要があります。バージョン情報については、「 」と入力してください kubectl version

コンテナのサイジング戦略

チューニング ポリシーを使用すると、Pod 内のコンテナーが CPU およびメモリ リソースに対してどのように調整されるかをより詳細に制御できます。たとえば、コンテナ内のアプリケーションは再起動せずに CPU リソースの調整を処理できますが、メモリの調整にはアプリケーションの再起動が必要な場合があるため、コンテナも再起動する必要があります。

これを実現するために、コンテナ仕様ではユーザー指定が可能です resizePolicyCPU とメモリをチューニングするために次の再起動ポリシーを設定できます。

  • NotRequired: 実行時にコンテナのリソースを調整します。
  • RestartContainer: コンテナを再起動し、再起動後に新しいリソースを適用します。

指定しない場合は resizePolicy[*].restartPolicy、デフォルトの が使用されます NotRequired

例証します:

ポッドが restartPolicy の 場合Never、ポッド内のすべてのコンテナの調整された再起動ポリシーを に設定する必要があります NotRequired

以下の例は、コンテナを再起動せずに CPU を調整できる Pod を示していますが、メモリの調整にはコンテナの再起動が必要です。

apiVersion: v1
kind: Pod
metadata:
  name: qos-demo-5
  namespace: qos-example
spec:
  containers:
    - name: qos-demo-ctr-5
      image: nginx
      resizePolicy:
        - resourceName: cpu
          restartPolicy: NotRequired
        - resourceName: memory
          restartPolicy: RestartContainer
      resources:
        limits:
          memory: "200Mi"
          cpu: "700m"
        requests:
          memory: "200Mi"
          cpu: "700m"

例証します:

上記の例では、必要な CPU およびメモリのリクエストまたは制限が変更された場合、コンテナはメモリを調整するために再起動されます。

リソースのリクエストと制限を含むポッドを作成する

ポッドのコンテナに対するリクエストや制限を指定することで、保証型またはバースタブル QoS クラスを持つポッドを作成できます。

1 つのコンテナを含む Pod の次のマニフェストを考えてみましょう。

pods/qos/qos-pod-5.yaml

apiVersion: v1
kind: Pod
metadata:
  name: qos-demo-5
  namespace: qos-example
spec:
  containers:
  - name: qos-demo-ctr-5
    image: nginx
    resources:
      limits:
        memory: "200Mi"
        cpu: "700m"
      requests:
        memory: "200Mi"
        cpu: "700m"

qos-example 名前空間に ポッドを作成します。

kubectl create namespace qos-example
kubectl create -f https://k8s.io/examples/pods/qos/qos-pod-5.yaml --namespace=qos-example

このポッドは保証型 QoS クラスとして分類され、700M CPU と 200Mi メモリを要求します。

ポッドに関する詳細を表示します。

kubectl get pod qos-demo-5 --output=yaml --namespace=qos-example

また、resizePolicy[*].restartPolicy 値のデフォルトは である ことに注意してくださいNotRequired。これは、コンテナーの実行中に CPU とメモリのサイズを変更できることを意味します。

spec:
  containers:
    ...
    resizePolicy:
    - resourceName: cpu
      restartPolicy: NotRequired
    - resourceName: memory
      restartPolicy: NotRequired
    resources:
      limits:
        cpu: 700m
        memory: 200Mi
      requests:
        cpu: 700m
        memory: 200Mi
...
  containerStatuses:
...
    name: qos-demo-ctr-5
    ready: true
...
    allocatedResources:
      cpu: 700m
      memory: 200Mi
    resources:
      limits:
        cpu: 700m
        memory: 200Mi
      requests:
        cpu: 700m
        memory: 200Mi
    restartCount: 0
    started: true
...
  qosClass: Guaranteed

ポッドのリソースを更新する

必要な CPU 需要が増加し、0.8 CPU が必要になったと仮定します。これは通常、VerticalPodAutoscaler (VPA) などのエンティティによって決定され、プログラム的に適用される場合があります。

例証します:

新しい必要なリソースを表すようにポッドのリクエストと制限を変更することはできますが、ポッドの作成に使用された QoS クラスを変更することはできません。

次に、ポッドのコンテナで patch コマンドを実行し、コンテナの CPU リクエストと制限を次のように設定します 800m

kubectl -n qos-example patch pod qos-demo-5 --patch '{"spec":{"containers":[{"name":"qos-demo-ctr-5", "resources":{"requests":{"cpu":"800m"}, "limits":{"cpu":"800m"}}}]}}'

パッチ適用後にポッドの詳細をクエリします。

kubectl get pod qos-demo-5 --output=yaml --namespace=qos-example

次のポッドの仕様には、更新された CPU リクエストと制限が反映されています。

spec:
  containers:
    ...
    resources:
      limits:
        cpu: 800m
        memory: 200Mi
      requests:
        cpu: 800m
        memory: 200Mi
...
  containerStatuses:
...
    allocatedResources:
      cpu: 800m
      memory: 200Mi
    resources:
      limits:
        cpu: 800m
        memory: 200Mi
      requests:
        cpu: 800m
        memory: 200Mi
    restartCount: 0
    started: true

観測された allocatedResources 値は、新たに予想される CPU リクエストを反映するように更新されました。これは、ノードが CPU リソースの需要の増加に対応できることを示します。

コンテナ状態では、更新された CPU リソース値は、新しい CPU リソースが適用されたことを示します。コンテナー restartCount は変更されず、コンテナーを再起動せずにコンテナーの CPU リソースが調整されたことを示します。

おすすめ

転載: blog.csdn.net/leesinbad/article/details/131561618