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

Container Compute Service:キャパシティスケジューリングの操作

最終更新日:Mar 26, 2025

コンテナコンピューティングサービス(ACS)は、オープンソース Kubernetes の ResourceQuota メカニズムを使用して、名前空間のリソース使用量を制限および制御します。ResourceQuota を使用すると、名前空間内のさまざまなリソースの使用量(CPU、メモリ、ストレージリソースの使用量、レプリケートされたポッドの数、サービスの数など)を制限および監視できます。これは、他のアプリケーションが名前空間内の過剰なリソースを占有するのを防ぎ、アプリケーションの安定性と信頼性を確保するのに役立ちます。

ResourceQuota

ACS クラスタでオープンソース Kubernetes の ResourceQuota メカニズムを使用して、各名前空間のリソース使用量の合計を制御できます。ResourceQuota を定義して、名前空間内のリソース(CPU、メモリ、拡張リソースなど)の上限を制限できます。名前空間にポッドやサービスなどの Kubernetes リソースを作成すると、Kubernetes のクォータシステムはクラスタのリソース使用量を追跡し、リソース使用量の合計が名前空間の ResourceQuota で定義されているハードリソース制限を超えないようにします。

ResourceQuota を使用する場合、次の点に注意してください。

  • 各チームまたはアプリケーションには、個別の名前空間が必要です。

  • クラスタ管理者は、名前空間ごとに 1 つ以上の ResourceQuota を作成する必要があります。

  • リソース使用量が ResourceQuota のハードリソース制限を超えると、後続の Kubernetes リソース作成リクエストは拒否されます。

  • ResourceQuota で CPU クォータとメモリクォータを構成する場合は、作成するポッドのリソースリクエストと制限を構成する必要があります。そうしないと、ポッドを作成できません。

説明
  • 拡張リソースなどの他のリソースのリソースリクエストまたは制限を構成する必要はありません。注:LimitRanger アドミッションコントローラーを使用して、リソースリクエストが構成されていないポッドのデフォルトのリソース制限を構成できます。

  • ResourceQuota の名前は、有効な DNS サブドメイン である必要があります。

  • ResourceQuota を変更した後、変更は既に ResourceQuota を使用しているリソースには適用されません。

ResourceQuota 機能を有効にする

デフォルトでは、ACS コンソールで作成された Container Service for Kubernetes(ACK)クラスタでは、ResourceQuota 機能が有効になっています。名前空間で ResourceQuota を作成するだけで済みます。その後、名前空間で ResourceQuota 機能が有効になります。

サポートされているリソースタイプ

ACS は、オープンソース Kubernetes の ResourceQuota メカニズムと完全に互換性があります。したがって、標準リソースと拡張リソースの両方が ResourceQuota をサポートしています。

標準リソース

リソース

説明

limits.cpu

Terminated 状態ではないポッドの CPU 使用量は、この制限を超えてはなりません。

limits.memory

Terminated 状態ではないポッドのメモリ使用量は、この制限を超えてはなりません。

requests.cpu

Terminated 状態ではないポッドの CPU リクエストは、この制限を超えてはなりません。

requests.memory

Terminated 状態ではないポッドのメモリリクエストは、この制限を超えてはなりません。

enormouspages-<size>

Terminated 状態ではないポッドの EnormousPage リクエストのサイズは、この制限を超えてはなりません。

cpu

requests.cpu と同等です。

memory

requests.memory と同等です。

拡張リソース

Kubernetes は、拡張リソースのオーバーコミット(制限 > リクエスト)をサポートしていません。したがって、requests. で始まるリソースクォータのみを構成する必要があります。詳細については、「リソースクォータ」をご参照ください。

この例では、kubectl を使用して ResourceQuota を表示および作成する方法を示します。

  1. 次のコマンドを実行して、test という名前の名前空間を作成します。

  2. kubectl create namespace test
  3. ResourceQuota を作成して、test という名前の Namespace の CPU 制限を 4000 ミリコアに設定します。

  4. cat << EOF | kubectl apply -f -
    apiVersion: v1
    kind: ResourceQuota
    metadata:
      name: test-quota
      namespace: test
    spec:
      hard:
        requests.cpu: "4000m"  // requests.cpu を 4000m に設定
        limits.cpu: "4000m"    // limits.cpu を 4000m に設定
    EOF
  5. 次のコマンドを実行して、ResourceQuota をクエリします。

    kubectl -n test describe resourcequota test-quota

    予期される結果:

    Namespace:    test
    Resource      Used  Hard
    --------      ----  ----
    limits.cpu    0     4  // limits.cpu の使用量と制限
    requests.cpu  0     4  // requests.cpu の使用量と制限
    
  6. 4 つのポッドを作成します。各ポッドは最大 1000 ミリコアを使用できます。

  7. cat << EOF | kubectl apply -f -
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: test-app
      name: test-app
      namespace: test
    spec:
      replicas: 5  // 5つのレプリカを指定
      selector:
        matchLabels:
          app: test-app
      template:
        metadata:
          labels:
            app: test-app
        spec:
          containers:
          - image: registry.cn-hangzhou.aliyuncs.com/acs/busybox:v1.29.2
            imagePullPolicy: IfNotPresent
            name: test
            command:
            - sleep
            - "360000000"
            resources:
              limits:
                cpu: "1"  // 各ポッドのCPU制限を1コアに設定
    EOF
  8. 次のコマンドを実行して、ポッドをクエリします。

    kubectl -n test get pod

    予期される結果:

    NAME                        READY   STATUS    RESTARTS   AGE
    test-app-5ddxxxxx94-jdv4m   1/1     Running   0          35s
    test-app-5ddxxxxx94-jhmtb   1/1     Running   0          35s
    test-app-5ddxxxxx94-mr8vq   1/1     Running   0          35s
    test-app-5ddxxxxx94-pjdfn   1/1     Running   0          35s
    

    出力は、4 つのポッドが Running 状態であることを示しています。

  9. 次のコマンドを実行して、ResourceQuota のステータスをクエリします。

    kubectl -n test describe resourcequota

    予期される結果:

    Name:         test-quota
    Namespace:    test
    Resource      Used  Hard
    --------      ----  ----
    limits.cpu    4     4  // limits.cpu の使用量と制限 - 使用量が制限に達している
    requests.cpu  4     4  // requests.cpu の使用量と制限 - 使用量が制限に達している
    

    Used 列の値は、Hard 列の値と同じです。

  10. 別のポッドを作成します。ポッド作成リクエストは、ResourceQuota アドミッションコントローラーによってインターセプトされます。

    1. ポッドを作成します。

      kubectl -n test scale deploy test-app --replicas 5
    2. ReplicaSet をクエリします。DESIRED 列には 5 が表示されますが、CURRENT 列には 4 が表示されます。これは、ポッドの作成に失敗したことを示しています。

      kubectl -n test get rs

      予期される結果:

      NAME                  DESIRED   CURRENT   READY   AGE
      test-app-5ddxxxxx94   5         4         4       3m10s
      
    3. ReplicaSet のイベントをクエリします。出力は、新しいポッドが ResourceQuota アドミッションコントローラーによってインターセプトされたことを示しています。

      kubectl -n test describe rs test-app-5ddxxxxx94

      予期される結果:

      Name:           test-app-5ddc68c994  // ReplicaSet名
      Namespace:      test
      // ... (省略) ...
      Events:
      // ... (省略) ...
        Warning  FailedCreate      3m18s                  replicaset-controller  Error creating: pods "test-app-5ddc68c994-5s4ph" is forbidden: exceeded quota: test-quota, requested: limits.cpu=1,requests.cpu=1, used: limits.cpu=4,requests.cpu=4, limited: limits.cpu=4,requests.cpu=4  // リソースクォータ超過でポッド作成失敗を示すイベント