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

實(shí)現(xiàn)K8s集群以Serverless方式使用云上CPU/GPU資源

IDC中K8s集群通過(guò)Serverless方式使用阿里云彈性容器實(shí)例ECI運(yùn)行業(yè)務(wù)Pod。您可以在K8s集群直接提交業(yè)務(wù)Pod,使Pod運(yùn)行在ECI上,無(wú)需額外運(yùn)維云上節(jié)點(diǎn)池,更加靈活、高效、彈性地使用云上CPU和GPU資源。本文介紹如何基于注冊(cè)集群實(shí)現(xiàn)IDC中K8s集群以Serverless方式使用云上CPU和GPU資源。

背景信息

為IDC中K8s集群直接添加云上節(jié)點(diǎn)或GPU節(jié)點(diǎn)的方式,適用于需要自定義配置的節(jié)點(diǎn)(runtime、kubelet、NVIDIA等)和特定的ECS實(shí)例規(guī)格等場(chǎng)景,該方式需要自行維護(hù)云上節(jié)點(diǎn)池,增加額外成本。您可以選擇Serverless方式使用阿里云彈性容器實(shí)例ECI運(yùn)行業(yè)務(wù)Pod,無(wú)需額外運(yùn)維云上節(jié)點(diǎn)池,可以更加高效彈性的使用云上CPU和GPU資源。

前提條件

使用場(chǎng)景

通過(guò)Serverless方式使用云上CPU和GPU資源,解決的依然是IDC中K8s集群的彈性能力不足,不能滿足業(yè)務(wù)的快速增長(zhǎng)、周期性業(yè)務(wù)增長(zhǎng)和突發(fā)業(yè)務(wù)流量的問(wèn)題。

通過(guò)Serverless方式,您可以在K8s集群直接提交業(yè)務(wù)Pod,該P(yáng)od將使用阿里云彈性容器實(shí)例ECI運(yùn)行,彈性容器實(shí)例ECI啟動(dòng)速度快,與業(yè)務(wù)Pod的生命周期一致,按Pod運(yùn)行時(shí)間計(jì)費(fèi)。從而不需要為IDC中K8s集群創(chuàng)建云上節(jié)點(diǎn),無(wú)需規(guī)劃云上資源容量,也不需要等待ECS創(chuàng)建完成,實(shí)現(xiàn)了高度彈性,并節(jié)省了節(jié)點(diǎn)的運(yùn)維成本。通過(guò)Serverless方式使用云上CPU和GPU資源的方式如下圖所示。

image

IDC中K8s集群以Serverless方式使用云上CPU和GPU資源適合以下業(yè)務(wù)場(chǎng)景。

  • 在線業(yè)務(wù)的波峰波谷彈性伸縮:例如,在線教育、電商等行業(yè)有著明顯的波峰波谷計(jì)算特征。使用Serverless ECI可以顯著減少固定資源池的維護(hù),降低計(jì)算成本。

  • 數(shù)據(jù)計(jì)算:使用Serverless ECI承載Spark、Presto、ArgoWorkflow等計(jì)算場(chǎng)景,按Pod運(yùn)行時(shí)間計(jì)費(fèi),有效降低計(jì)算成本。

  • CI/CD Pipeline:Jenkins、Gitlab-Runner。

  • Job任務(wù):定時(shí)任務(wù)、AI。

步驟一:安裝相關(guān)組件

通過(guò)注冊(cè)集群實(shí)現(xiàn)IDC中K8s集群以Serverless方式使用云上CPU和GPU資源,您需要安裝以下組件。

  • ack-virtual-node:使用虛擬節(jié)點(diǎn)和ECI的高度彈性能力。

  • ack-co-scheduler:通過(guò)該組件,您可以自定義ResourcePolicy CR對(duì)象,使用多級(jí)彈性調(diào)度功能。

您可以通過(guò)以下兩種方式安裝組件。

通過(guò)onectl安裝

  1. 在本地安裝配置onectl。具體操作,請(qǐng)參見通過(guò)onectl管理注冊(cè)集群。

  2. 執(zhí)行以下命令,安裝ack-virtual-node和ack-co-scheduler組件。

    onectl addon install ack-virtual-node
    onectl addon install ack-co-scheduler

    預(yù)期輸出:

    Addon ack-virtual-node, version **** installed.
    Addon ack-co-scheduler, version **** installed.

通過(guò)控制臺(tái)安裝

  1. 登錄容器服務(wù)管理控制臺(tái),在左側(cè)導(dǎo)航欄選擇集群

  2. 集群列表頁(yè)面,單擊目標(biāo)集群名稱,然后在左側(cè)導(dǎo)航欄,選擇運(yùn)維管理 > 組件管理。

  3. 組件管理頁(yè)面,單擊其他頁(yè)簽,找到ack-virtual-node和ack-co-scheduler組件,在卡片右下方單擊安裝。

  4. 在提示對(duì)話框中單擊確定

步驟二:查看節(jié)點(diǎn)

ack-virtual-node組件安裝完成后,您可以通過(guò)注冊(cè)集群kubeconfig查看集群節(jié)點(diǎn)池。virtual-kubelet為虛擬節(jié)點(diǎn),對(duì)接阿里云Serverless ECI。

執(zhí)行以下命令,查看節(jié)點(diǎn)。

kubectl get node

預(yù)期輸出:

NAME                               STATUS   ROLES    AGE    VERSION
iz8vb1xtnuu0ne6b58hvx0z            Ready    master   4d3h   v1.20.9   # IDC集群節(jié)點(diǎn),示例只有1個(gè)Master節(jié)點(diǎn),同時(shí)也是Worker節(jié)點(diǎn),可以運(yùn)行業(yè)務(wù)容器。
virtual-kubelet-cn-zhangjiakou-a   Ready    agent    99s    v1.20.9。 # 安裝ack-virtual-node組件生產(chǎn)的虛擬節(jié)點(diǎn)。

步驟三:使用Serverless ECI運(yùn)行Pod(CPU和GPU任務(wù))

您可以通過(guò)以下兩種方式進(jìn)行配置,使用Serverless ECI運(yùn)行Pod。

方式一:配置Pod標(biāo)簽

如下示例中,使用GPU ECI實(shí)例運(yùn)行CUDA任務(wù)。您無(wú)需安裝配置NVIDIA driver和runtime,真正做到Serverless化運(yùn)行。

您可以為Pod添加標(biāo)簽alibabacloud.com/eci=true,使Pod以Serverless ECI的方式運(yùn)行。

  1. 使用以下YAML內(nèi)容,提交Pod,使用Serverless ECI運(yùn)行。

    > cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: Pod
    metadata:
      name: gpu-pod
      labels:
        alibabacloud.com/eci: "true"  # 指定Pod使用Serverless ECI運(yùn)行。
      annotations:
        k8s.aliyun.com/eci-use-specs: ecs.gn5-c4g1.xlarge  # 指定支持的GPU規(guī)格,該規(guī)格具備1個(gè)NVIDIA P100 GPU。
    spec:
      restartPolicy: Never
      containers:
        - name: cuda-container
          image: acr-multiple-clusters-registry.cn-hangzhou.cr.aliyuncs.com/ack-multiple-clusters/cuda10.2-vectoradd
          resources:
            limits:
              nvidia.com/gpu: 1 # 申請(qǐng)1個(gè)GPU。
    EOF
    
  2. 執(zhí)行以下命令,查看Pod。

    kubectl get pod -o wide

    預(yù)期輸出:

    NAME       READY   STATUS      RESTARTS   AGE     IP              NODE                               NOMINATED NODE   READINESS GATES
    gpu-pod    0/1     Completed   0          5m30s   172.16.XX.XX   virtual-kubelet-cn-zhangjiakou-a   <none>           <none>
    kubectl logs gpu-pod

    預(yù)期輸出:

    Using CUDA Device [0]: Tesla P100-PCIE-16GB
    GPU Device has SM 6.0 compute capability
    [Vector addition of 50000 elements]
    Copy input data from the host memory to the CUDA device
    CUDA kernel launch with 196 blocks of 256 threads
    Copy output data from the CUDA device to the host memory
    Test PASSED
    Done

    預(yù)期輸出表明,Pod運(yùn)行在虛擬節(jié)點(diǎn)virtual-kubelet上,實(shí)際后臺(tái)使用阿里云Serverless ECI運(yùn)行。

方式二:配置命名空間標(biāo)簽

您可以通過(guò)以下命令,為命名空間添加標(biāo)簽alibabacloud.com/eci=true,該命名空間中所有新建的Pod,將以Serverless ECI方式運(yùn)行。

kubectl label namespace <namespace-name> alibabacloud.com/eci=true

步驟四:使用多級(jí)彈性調(diào)度

參見步驟三使用Pod或命名空間的標(biāo)簽讓Pod以Serverless ECI的方式運(yùn)行后,您可以使用ACK One注冊(cè)集群的多級(jí)彈性調(diào)度功能實(shí)現(xiàn)此效果:應(yīng)用運(yùn)行過(guò)程中優(yōu)先使用IDC中的節(jié)點(diǎn)資源運(yùn)行Pod,當(dāng)IDC資源不足時(shí),再使用阿里云Serverless ECI運(yùn)行Pod。

通過(guò)ack-co-scheduler組件,可以自定義ResourcePolicy CR對(duì)象,從而使用多級(jí)彈性調(diào)度功能。ResourcePolicy CR為命名空間資源,主要參數(shù)說(shuō)明如下。

參數(shù)

說(shuō)明

selector

聲明ResourcePolicy作用于同一命名空間下label上打了key1=value1的Pod。

strategy

調(diào)度策略選擇,目前僅支持prefer。

units

用戶自定義的調(diào)度單元。應(yīng)用擴(kuò)容時(shí),將按照units下資源的順序選擇資源運(yùn)行;應(yīng)用縮容時(shí),將按照逆序進(jìn)行縮容。

  • resource:彈性資源的類型,目前支持idc、ecseci三種類型。

  • nodeSelector:用nodelabel標(biāo)識(shí)該調(diào)度單元下的節(jié)點(diǎn),只對(duì)ecs彈性資源生效。

  • max:在該組資源最多部署多少個(gè)實(shí)例。

  1. 使用以下內(nèi)容,定義ResourcePolicy CR,優(yōu)先使用IDC中集群資源,再使用云上Serverless ECI資源。

    > cat << EOF | kubectl apply -f -
    apiVersion: scheduling.alibabacloud.com/v1alpha1
    kind: ResourcePolicy
    metadata:
      name: cost-balance-policy
    spec:
      selector:
        app: nginx           # 選擇應(yīng)用Pod。
        key1: value1
      strategy: prefer
      units:
      - resource: idc        # 優(yōu)先使用IDC指定使用IDC中節(jié)點(diǎn)資源。
        max:3
      - resource: eci        # 當(dāng)IDC節(jié)點(diǎn)資源不足時(shí),使用Serverless ECI。
        nodeSelector:
          key2: value2
    EOF
  2. 使用以下內(nèi)容,創(chuàng)建應(yīng)用Deployment,啟動(dòng)2個(gè)副本,每個(gè)副本需要2個(gè)CPU。

    > cat << EOF | kubectl apply -f -
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          name: nginx
          annotations:
            addannotion: "true"
          labels:
            app: nginx      # 此處要與上一步創(chuàng)建的ResourcePolicy的selector相關(guān)聯(lián)。
        spec:
          schedulerName: ack-co-scheduler
          containers:
          - name: nginx
            image: acr-multiple-clusters-registry.cn-hangzhou.cr.aliyuncs.com/ack-multiple-clusters/nginx
            resources:
              requests:
                cpu: 2
              limits:
                cpu: 2
    EOF
  3. 執(zhí)行以下命令,對(duì)應(yīng)用擴(kuò)容4個(gè)副本。

    IDC中K8s集群只有一個(gè)6 CPU節(jié)點(diǎn),最多啟動(dòng)2個(gè)Nginx Pod(系統(tǒng)資源預(yù)留,無(wú)法啟動(dòng)3個(gè)Pod),剩余的2個(gè)副本在IDC節(jié)點(diǎn)資源不足時(shí),將自動(dòng)使用阿里云Serverless ECI運(yùn)行Pod。

    kubectl scale deployment nginx --replicas 4
  4. 執(zhí)行以下命令,查看Pod運(yùn)行情況。

    > kubectl get pod -o wide

    預(yù)期輸出:

    NAME                     READY   STATUS    RESTARTS   AGE     IP              NODE                      
    nginx-79cd98b4b5-97s47   1/1     Running   0          84s     10.100.XX.XX    iz8vb1xtnuu0ne6b58h****   
    nginx-79cd98b4b5-gxd8z   1/1     Running   0          84s     10.100.XX.XX    iz8vb1xtnuu0ne6b58h****   
    nginx-79cd98b4b5-k55rb   1/1     Running   0          58s     10.100.XX.XX    virtual-kubelet-cn-zhangjiakou-a
    nginx-79cd98b4b5-m9jxm   1/1     Running   0          58s     10.100.XX.XX    virtual-kubelet-cn-zhangjiakou-a

    預(yù)期輸出表明,2個(gè)Pod運(yùn)行在IDC中的節(jié)點(diǎn),2個(gè)Pod使用虛擬節(jié)點(diǎn)在阿里云Serverless ECI上運(yùn)行。