日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

使用Capacity Scheduling

ACS通過Kubernetes原生的ResourceQuota機制限制和控制命名空間中的資源使用。通過ResourceQuota,您可以限制和監控命名空間中各種資源的使用情況,如CPU、內存、存儲、副本數和服務數。這樣就可以防止某個命名空間中的資源被其他應用程序過度占用,從而保證應用程序的穩定性和可靠性。

資源配額(ResourceQuota)

您可以在ACS集群中使用Kubernetes原生的資源配額機制來控制每個命名空間的資源消耗總量。通過定義ResourceQuota對象,可以先在命名空間中某種資源類型的總量上限,包括CPU、內存和擴展資源等。當在命名空間下創建Pod、Services等K8s資源時,Kubernetes的配額系統會跟蹤集群的資源使用情況,并保證資源總用量不超過命名空間下ResourceQuota定義的硬性(Hard)限額。

在使用資源配額時:

  • 每個團隊或者應用使用獨立的命名空間。

  • 集群管理員針對不同的命名空間創建一個或者多個ResourceQuota對象。

  • 如果用量超過了ResourceQuota的硬性限額時,后續新建的資源會被拒絕。

  • 如果使用ResourceQuota配置了CPU和內存,創建的Pod必須要設置request和limit,否則將會拒絕創建。

說明
  • 對于其他資源(例如擴展資源):無需為該資源設置request和limit。提示:可使用LimitRanger準入控制器來為沒有設置計算資源需求的Pod設置默認值。

  • ResourceQuota對象的名稱必須是合法的DNS子域名

  • 配額的修改不會影響已經創建的資源使用對象。

啟用資源配額

通過ACS控制臺創建的Kubernetes集群已經默認開啟了資源配額機制。您只需要在新增的命名空間下創建ResourceQuota對象,這個命名空間而言就開啟了資源配額。

支持的資源類型

ACS完全兼容Kubernetes原生資源配額機制,因此標準資源類型和擴展資源都可以通過ResourceQuota進行配置。

標準資源類型

資源名稱

描述

limits.cpu

所有非終止狀態的Pod,其CPU限額總量不能超過該值。

limits.memory

所有非終止狀態的Pod,其內存限額總量不能超過該值。

requests.cpu

所有非終止狀態的Pod,其CPU需求總量不能超過該值。

requests.memory

所有非終止狀態的Pod,其內存需求總量不能超過該值。

hugepages-<size>

對于所有非終止狀態的Pod,針對指定大小的HugePage請求總數不能超過此值。

cpu

requests.cpu相同。

memory

requests.memory相同。

擴展資源的資源配額

因為K8s不支持擴展資源超量分配(即limit>request),因此只需要配置前綴為requests.的配額項。

說明

有關更多詳細信息,請參閱資源配額

示例

以下演示如何通過kubectl查看和創建ResourceQuota。

  1. 執行以下命令,創建命名空間test。

  2. kubectl create namespace test
  3. 創建ResourceQuota,限制命名空間test最多只能使用4000m CPU。

  4. cat << EOF | kubectl apply -f -
    apiVersion: v1
    kind: ResourceQuota
    metadata:
      name: test-quota
      namespace: test
    spec:
      hard:
        requests.cpu: "4000m"
        limits.cpu: "4000m"
    EOF
  5. 執行以下命令,查看ResourceQuota。

    kubectl -n test describe resourcequota test-quota

    預期輸出:

    Namespace:    test
    Resource      Used  Hard
    --------      ----  ----
    limits.cpu    0     4
    requests.cpu  0     4
  6. 創建4個Pod,每個Pod使用1000m cpu。

  7. cat << EOF | kubectl apply -f -
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: test-app
      name: test-app
      namespace: test
    spec:
      replicas: 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"
    EOF
  8. 執行以下命令,查看Pod創建結果。

    kubectl -n test get pod

    預期輸出:

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

    可以看出4個Pod都處于Running狀態。

  9. 執行以下命令,查看ResourceQuota狀態。

    kubectl -n test describe resourcequota

    預期輸出:

    Name:         test-quota
    Namespace:    test
    Resource      Used  Hard
    --------      ----  ----
    limits.cpu    4     4
    requests.cpu  4     4

    可以看到test-quota的Used資源量與Hard資源量相等。

  10. 再嘗試擴容一個新的Pod,驗證ResourceQuota的準入控制器攔截功能。

    1. 先嘗試擴容一個新的Pod。

      kubectl -n test scale deploy test-app --replicas 5
    2. 查看對應的ReplicaSet,發現DESIRED是5,但CURRENT是4,證明有個Pod有異常。

      kubectl -n test get rs
      NAME                  DESIRED   CURRENT   READY   AGE
      test-app-5ddc68c994   5         4         4       3m10s
    3. 查看ReplicaSet的Event,可以發現新的Pod被ResourceQuota的準入控制器攔截了

      k -n test describe rs test-app-5ddc68c994
      Name:           test-app-5ddc68c994
      Namespace:      test
      Selector:       app=test-app,pod-template-hash=5ddc68c994
      Labels:         app=test-app
                      pod-template-hash=5ddc68c994
      Annotations:    deployment.kubernetes.io/desired-replicas: 5
                      deployment.kubernetes.io/max-replicas: 7
                      deployment.kubernetes.io/revision: 1
      Controlled By:  Deployment/test-app
      Replicas:       4 current / 5 desired
      Pods Status:    4 Running / 0 Waiting / 0 Succeeded / 0 Failed
      Pod Template:
        Labels:  app=test-app
                 pod-template-hash=5ddc68c994
        Containers:
         test:
          Image:      busybox:latest
          Port:       <none>
          Host Port:  <none>
          Command:
            sleep
            360000000
          Limits:
            cpu:        1
          Environment:  <none>
          Mounts:       <none>
        Volumes:        <none>
      Conditions:
        Type             Status  Reason
        ----             ------  ------
        ReplicaFailure   True    FailedCreate
      Events:
        Type     Reason            Age                    From                   Message
        ----     ------            ----                   ----                   -------
        Normal   SuccessfulCreate  3m18s                  replicaset-controller  Created pod: test-app-5ddc68c994-pjdfn
        Normal   SuccessfulCreate  3m18s                  replicaset-controller  Created pod: test-app-5ddc68c994-jdv4m
        Normal   SuccessfulCreate  3m18s                  replicaset-controller  Created pod: test-app-5ddc68c994-jhmtb
        Normal   SuccessfulCreate  3m18s                  replicaset-controller  Created pod: test-app-5ddc68c994-mr8vq
        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=