All Products
Search
Document Center

Container Compute Service:Jadwalkan pod ke ACS menggunakan node virtual

Last Updated:Mar 26, 2026

Container Compute Service (ACS) terintegrasi dengan kluster terdaftar ACK One melalui node virtual, memungkinkan Anda menjalankan pod ACS berarsitektur tanpa server bersama beban kerja yang sudah ada—tanpa perlu mengelola infrastruktur dasarnya.

Cara kerja

ACS menggunakan arsitektur berlapis yang memisahkan kontrol Kubernetes dari komputasi. Lapisan kontrol Kubernetes mengelola beban kerja (Deployment, Service, StatefulSet, CronJob), sedangkan lapisan komputasi menjadwalkan dan mengalokasikan sumber daya ke pod.

Pada kluster terdaftar ACK One, komponen ack-virtual-node menyediakan node virtual yang didukung oleh ACS. Pod yang dijadwalkan ke node virtual ini dijalankan sebagai pod ACS—kontainer terisolasi berarsitektur tanpa server yang diskalakan sesuai permintaan tanpa perlu merencanakan kapasitas node. Pod ACS dapat berkomunikasi dengan pod pada node fisik dalam kluster yang sama.

image

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

Pilih metode penjadwalan

ACS mendukung dua metode untuk menjadwalkan pod ke node virtual. Pilih metode yang sesuai dengan kasus penggunaan Anda:

MetodeCara kerjaPaling cocok untuk
Penjadwalan berbasis label (disarankan)Tambahkan alibabacloud.com/acs: "true" ke label podMigrasi beberapa beban kerja; tidak memerlukan nodeSelector atau toleration
NodeSelectorAtur nodeSelector: type: virtual-kubelet dan tambahkan tolerationKontrol eksplisit atas pod mana yang ditempatkan di node virtual
Jika Anda tidak menentukan kelas komputasi, instans kontainer elastis akan diprioritaskan untuk penjadwalan pod secara default.

Gunakan daya komputasi CPU

Penjadwalan berbasis label

Semua pod yang memiliki label alibabacloud.com/acs: "true" akan secara otomatis dijadwalkan ke node virtual—tanpa memerlukan nodeSelector atau toleration.

  1. Buat file bernama nginx.yaml dengan konten berikut:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
            alibabacloud.com/acs: "true"                   # Jadwalkan ke node virtual ACS.
            alibabacloud.com/compute-class: general-purpose # Kelas komputasi. Default: general-purpose.
            alibabacloud.com/compute-qos: default           # Kelas QoS. Default: default.
        spec:
          containers:
          - name: nginx
            image: mirrors-ssl.aliyuncs.com/nginx:stable-alpine
            ports:
              - containerPort: 80
                protocol: TCP
            resources:
              limits:
                cpu: 2
              requests:
                cpu: 2
  2. Deploy aplikasi:

    kubectl apply -f nginx.yaml
  3. Verifikasi bahwa pod berjalan di node virtual:

    kubectl get pods -o wide

    Output yang diharapkan:

    NAME                     READY   STATUS    RESTARTS   AGE     IP               NODE                            NOMINATED NODE   READINESS GATES
    nginx-54bcbc9b66-****   1/1     Running   0          3m29s   192.168.XX.XXX   virtual-kubelet-cn-shanghai-l   <none>           <none>
    nginx-54bcbc9b66-****   1/1     Running   0          3m29s   192.168.XX.XXX   virtual-kubelet-cn-shanghai-l   <none>           <none>
  4. Konfirmasi bahwa pod tersebut merupakan pod ACS dengan memeriksa anotasi:

    kubectl describe pod nginx-54bcbc9b66-****

    Output mencakup anotasi alibabacloud.com/instance-id: acs-uf6008giwgjxlvn*****, yang mengonfirmasi bahwa pod tersebut berjalan sebagai pod ACS.

    Annotations:  ProviderCreate: done
                  alibabacloud.com/instance-id: acs-uf6008giwgjxlvn*****
                  alibabacloud.com/pod-ephemeral-storage: 30Gi
                  alibabacloud.com/pod-use-spec: 2-2Gi
                  kubernetes.io/pod-stream-port: 10250
                  network.alibabacloud.com/enable-dns-cache: false
                  topology.kubernetes.io/region: cn-shanghai

NodeSelector

Dengan metode ini, Anda secara eksplisit menargetkan node virtual menggunakan nodeSelector dan toleration. Pertama, periksa label pada node virtual Anda untuk memastikan label type: virtual-kubelet tersedia.

  1. Periksa label pada node virtual. Ganti virtual-kubelet-cn-shanghai-l dengan nama node virtual Anda yang sebenarnya:

    kubectl get node virtual-kubelet-cn-shanghai-l -oyaml

    Output yang diharapkan:

    apiVersion: v1
    kind: Node
    metadata:
      labels:
       beta.kubernetes.io/arch: amd64
        beta.kubernetes.io/os: linux
        kubernetes.io/arch: amd64
        kubernetes.io/hostname: virtual-kubelet-cn-shanghai-l
        kubernetes.io/os: linux
        kubernetes.io/role: agent
        service.alibabacloud.com/exclude-node: "true"
        topology.diskplugin.csi.alibabacloud.com/zone: cn-shanghai-l
        topology.kubernetes.io/region: cn-shanghai
        topology.kubernetes.io/zone: cn-shanghai-l
        type: virtual-kubelet # Gunakan label ini sebagai nilai nodeSelector untuk menargetkan node virtual.
      name: virtual-kubelet-cn-shanghai-l
    spec:
      taints:
      - effect: NoSchedule
        key: virtual-kubelet.io/provider
        value: alibabacloud
  2. Buat file bernama nginx.yaml dengan konten berikut:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          name: nginx
          labels:
            app: nginx
            alibabacloud.com/compute-class: general-purpose # Kelas komputasi. Default: general-purpose.
            alibabacloud.com/compute-qos: default           # Kelas QoS. Default: default.
        spec:
          nodeSelector:
            type: virtual-kubelet          # Menargetkan node virtual.
          tolerations:
          - key: "virtual-kubelet.io/provider" # Mentoleransi taint node virtual.
            operator: "Exists"
            effect: "NoSchedule"
          containers:
          - name: nginx
            image: mirrors-ssl.aliyuncs.com/nginx:stable-alpine
            ports:
              - containerPort: 80
                protocol: TCP
            resources:
              limits:
                cpu: 2
              requests:
                cpu: 2
  3. Deploy aplikasi:

    kubectl apply -f nginx.yaml
  4. Verifikasi bahwa pod berjalan di node virtual:

    kubectl get pods -o wide

    Output yang diharapkan:

    NAME                     READY   STATUS    RESTARTS   AGE     IP               NODE                            NOMINATED NODE   READINESS GATES
    nginx-54bcbc9b66-****   1/1     Running   0          3m29s   192.168.XX.XXX   virtual-kubelet-cn-shanghai-l   <none>           <none>
    nginx-54bcbc9b66-****   1/1     Running   0          3m29s   192.168.XX.XXX   virtual-kubelet-cn-shanghai-l   <none>           <none>

Untuk opsi penjadwalan lainnya, termasuk affinity, anti-affinity, dan ResourcePolicies, lihat Penjadwalan afinitas node dan Ikhtisar pod ACS.

Gunakan daya komputasi GPU

Daya komputasi GPU pada kluster terdaftar ACK One saat ini dalam pratinjau undangan. Untuk meminta akses, kirim tiket.

Prosedurnya mirip dengan penggunaan daya komputasi CPU, dengan dua perbedaan utama: atur alibabacloud.com/compute-class: gpu dan tambahkan label alibabacloud.com/gpu-model-series untuk menentukan model GPU (misalnya, T4). Pastikan juga komponen penjadwalan memenuhi persyaratan versi.

Untuk daftar lengkap model GPU yang didukung, lihat Model GPU. Untuk pemetaan antara kelas komputasi dan kelas Quality of Service (QoS), lihat Pemetaan antara kelas komputasi dan kelas QoS daya komputasi.

Penjadwalan berbasis label

  1. Buat file bernama gpu-workload.yaml dengan konten berikut:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: dep-node-selector-demo
      labels:
        app: node-selector-demo
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: node-selector-demo
      template:
        metadata:
          labels:
            app: node-selector-demo
            alibabacloud.com/acs: "true"                        # Jadwalkan ke node virtual ACS.
            alibabacloud.com/compute-class: gpu                 # Atur ke gpu untuk daya komputasi GPU.
            alibabacloud.com/compute-qos: default
            alibabacloud.com/gpu-model-series: example-model   # Tentukan model GPU, seperti T4.
        spec:
          containers:
          - name: node-selector-demo
            image: registry-cn-hangzhou.ack.aliyuncs.com/acs/stress:v1.0.4
            command:
            - "sleep"
            - "1000h"
            resources:
              limits:
                cpu: 1
                memory: 1Gi
                nvidia.com/gpu: "1"
              requests:
                cpu: 1
                memory: 1Gi
                nvidia.com/gpu: "1"
  2. Deploy beban kerja:

    kubectl apply -f gpu-workload.yaml
  3. Verifikasi bahwa beban kerja GPU berjalan:

    kubectl get pod node-selector-demo-9cdf7bbf9-s**** -oyaml

    Output yang diharapkan:

        phase: Running
    
        resources:
          limits:
            #other resources
            nvidia.com/gpu: "1"
          requests:
            #other resources
            nvidia.com/gpu: "1"

NodeSelector

  1. Buat file bernama gpu-workload.yaml dengan konten berikut:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: dep-node-selector-demo
      labels:
        app: node-selector-demo
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: node-selector-demo
      template:
        metadata:
          labels:
            app: node-selector-demo
            alibabacloud.com/compute-class: gpu                # Atur ke gpu untuk daya komputasi GPU.
            alibabacloud.com/compute-qos: default
            alibabacloud.com/gpu-model-series: example-model  # Tentukan model GPU, seperti T4.
        spec:
          nodeSelector:
            type: virtual-kubelet                              # Menargetkan node virtual.
          tolerations:
          - key: "virtual-kubelet.io/provider"                # Mentoleransi taint node virtual.
            operator: "Exists"
            effect: "NoSchedule"
          containers:
          - name: node-selector-demo
            image: registry-cn-hangzhou.ack.aliyuncs.com/acs/stress:v1.0.4
            command:
            - "sleep"
            - "1000h"
            resources:
              limits:
                cpu: 1
                memory: 1Gi
                nvidia.com/gpu: "1"
              requests:
                cpu: 1
                memory: 1Gi
                nvidia.com/gpu: "1"
  2. Deploy beban kerja:

    kubectl apply -f gpu-workload.yaml
  3. Verifikasi bahwa beban kerja GPU berjalan:

    kubectl get pod node-selector-demo-9cdf7bbf9-s**** -oyaml

    Output yang diharapkan:

        phase: Running
    
        resources:
          limits:
            #other resources
            nvidia.com/gpu: "1"
          requests:
            #other resources
            nvidia.com/gpu: "1"

Langkah selanjutnya