Container Compute Service (ACS) menyediakan daya komputasi kontainer arsitektur tanpa server ke kluster ACK Pro melalui node virtual. Pod yang dijadwalkan ke node virtual berjalan di lingkungan ACS yang aman dan terisolasi tanpa perlu mengelola infrastruktur dasar atau merencanakan kapasitas node.
Cara kerja
ACS menggunakan arsitektur berlapis:
Lapisan sumber daya komputasi — menjadwalkan dan mengalokasikan sumber daya ke pod.
Lapisan kontrol Kubernetes — mengelola beban kerja seperti Deployments, Services, StatefulSets, dan CronJobs.
Node virtual menjembatani daya komputasi ACS ke dalam kluster ACK Anda. Setelah menginstal komponen ACK Virtual Node, pod yang dijadwalkan ke node virtual tersebut menjadi pod ACS. Pod ACS dapat berkomunikasi dengan pod pada node fisik dalam kluster yang sama.
Kapan menggunakan node virtual
Node virtual direkomendasikan untuk aplikasi berumur panjang yang beban kerjanya berfluktuasi secara berkala. Manfaatnya meliputi:
Pemanfaatan sumber daya yang lebih baik dan pengurangan biaya sumber daya.
Percepatan penskalaan tanpa perlu menyediakan kapasitas node terlebih dahulu.
Penghematan biaya dengan menghapus pod dari node virtual saat beban kerja menurun.
Batasan
| Batasan | Deskripsi |
|---|---|
| Pembatasan StorageClass | StorageClass WaitForFirstConsumer tidak didukung saat menggunakan label pod alibabacloud.com/acs: "true". Untuk memasang disk ke pod ACS di kluster ACK, gunakan nodeSelector atau ResourcePolicy sebagai gantinya. Untuk detailnya, lihat Kluster ACK Pro mendukung penjadwalan colocated antara instans ECS dan daya komputasi ACS. |
Pembatasan tipe kluster untuk label acs: "true" | Berlaku untuk kluster ACK managed, ACK dedicated, kluster terdaftar ACK One, dan kluster ACK Edge. Tidak berlaku untuk kluster ACK Serverless. |
| Perilaku penjadwalan default | Jika tidak menentukan kelas komputasi, instans kontainer elastis digunakan untuk penjadwalan pod secara default. |
| Daya komputasi GPU (pratinjau undangan) | Untuk mengaktifkan daya komputasi GPU, kirim tiket. |
| Daya komputasi GPU-HPN (pratinjau undangan) | Hanya tersedia di kluster ACK managed, kluster terdaftar ACK One, dan kluster Kubernetes ACK One untuk alur kerja Argo terdistribusi. Versi komponen masih dalam pratinjau undangan dan memerlukan tiket dukungan. |
Prasyarat
Sebelum memulai, pastikan Anda telah:
Mengaktifkan Container Service for Kubernetes (ACK), menetapkan peran default untuk ACS, dan mengaktifkan layanan cloud lain yang diperlukan. Untuk detailnya, lihat Buat kluster ACK managed.
Mengaktifkan ACS dengan masuk ke Konsol ACS dan mengikuti petunjuk di layar.
Memiliki kluster ACK Pro yang menjalankan Kubernetes 1.26 atau versi lebih baru. Untuk detailnya, lihat Buat kluster ACK managed. Untuk meningkatkan kluster yang sudah ada, lihat Tingkatkan kluster ACK secara manual.
Menginstal ACK Virtual Node versi v2.13.0 atau lebih baru (diperlukan untuk Kubernetes 1.26+).
Instal ACK Virtual Node
Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi sebelah kiri, klik Add-ons.
Pada tab Core Components, temukan ACK Virtual Node lalu klik Install. Jika komponen sudah terinstal, klik Update untuk meningkatkan ke versi yang diperlukan.

Jika diminta untuk mengaktifkan dan memberikan izin kepada ACS, ikuti petunjuk di layar lalu klik OK.
Verifikasi instalasi
Setelah instalasi, verifikasi bahwa node virtual tersedia:
Di panel navigasi sebelah kiri halaman detail kluster, pilih Nodes > Nodes.
Konfirmasi bahwa node dengan awalan
virtual-kubelet-muncul dalam daftar node.
Jadwalkan pod CPU ke node virtual
Tersedia tiga metode penjadwalan. Pilih berdasarkan kebutuhan disk dan penjadwalan Anda. Untuk detail tentang penjadwalan afinitas node, lihat Penjadwalan afinitas node.
| Metode | Paling cocok untuk | Dukungan disk |
|---|---|---|
| nodeSelector | Kontrol langsung atas node virtual mana yang menjalankan pod Anda | Lengkap (termasuk StorageClass WaitForFirstConsumer) |
Label Pod (alibabacloud.com/acs: "true") | Konfigurasi lebih sederhana tanpa toleransi atau selector | Tanpa StorageClass WaitForFirstConsumer |
| ResourcePolicy | Penjadwalan berbasis prioritas lintas sumber daya ECS dan ACS | Lengkap (termasuk StorageClass WaitForFirstConsumer) |
Metode 1: nodeSelector
Metode ini menggunakan label type: virtual-kubelet pada node virtual bersama toleransi terhadap taint node virtual.
Kueri label node virtual untuk mengidentifikasi node yang tersedia: Label kunci dalam output:
kubectl get node virtual-kubelet-cn-hangzhou-k -oyamllabels: type: virtual-kubelet # Gunakan ini sebagai nodeSelector Anda kubernetes.io/hostname: virtual-kubelet-cn-hangzhou-k topology.kubernetes.io/zone: cn-hangzhou-k taints: - effect: NoSchedule key: virtual-kubelet.io/provider value: alibabacloud # Toleransi terhadap taint iniBuat
nginx.yaml: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/compute-class: general-purpose # Kelas komputasi. Default: general-purpose. alibabacloud.com/compute-qos: default # Kelas QoS. Default: default. spec: nodeSelector: type: virtual-kubelet # Targetkan node virtual. tolerations: - key: "virtual-kubelet.io/provider" # Toleransi terhadap taint node virtual. operator: "Exists" effect: "NoSchedule" containers: - name: nginx image: registry.openanolis.cn/openanolis/nginx:1.14.1-8.6 resources: limits: cpu: 2 requests: cpu: 2Terapkan dan verifikasi: Output yang diharapkan: Kedua pod dijadwalkan ke node
virtual-kubelet-*.kubectl apply -f nginx.yaml kubectl get pods -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-9cdf7bbf9-s**** 1/1 Running 0 36s 10.0.6.68 virtual-kubelet-cn-hangzhou-j <none> <none> nginx-9cdf7bbf9-v**** 1/1 Running 0 36s 10.0.6.67 virtual-kubelet-cn-hangzhou-k <none> <none>
Metode 2: Label Pod
Tambahkan label alibabacloud.com/acs: "true" untuk menjadwalkan pod ke node virtual tanpa mengonfigurasi nodeSelector atau toleransi.
Label ini tidak berlaku untuk kluster ACK Serverless. Berlaku untuk kluster ACK managed, ACK dedicated, kluster terdaftar ACK One, dan kluster ACK Edge.
Buat nginx.yaml:
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
alibabacloud.com/compute-qos: default
spec:
containers:
- name: nginx
image: registry.openanolis.cn/openanolis/nginx:1.14.1-8.6
resources:
limits:
cpu: 2
requests:
cpu: 2Terapkan dan verifikasi dengan cara yang sama seperti Metode 1.
Verifikasi bahwa pod adalah pod ACS
Setelah penerapan, konfirmasi bahwa pod Anda berjalan sebagai pod ACS:
kubectl describe pod nginx-9cdf7bbf9-s****Cari anotasi alibabacloud.com/instance-id dalam output:
Annotations:
alibabacloud.com/instance-id: acs-2ze008giupcyaqbxxxxx
alibabacloud.com/pod-use-spec: 2-4GiID instans acs-* mengonfirmasi bahwa pod berjalan di atas daya komputasi ACS.
Jadwalkan pod GPU ke node virtual
Daya komputasi GPU ACS mengikuti metode penjadwalan yang sama seperti pod CPU, dengan persyaratan komponen dan label tambahan.
Daya komputasi GPU ACS sedang dalam pratinjau undangan. Untuk mengaktifkannya, kirim tiket.
Persyaratan komponen
Instal versi kube-scheduler yang sesuai berdasarkan versi Kubernetes kluster Anda:
| Versi Kubernetes | Versi kube-scheduler minimum |
|---|---|
| 1.31 | v1.31.0-aliyun.6.8.4.8f585f26 |
| 1.30 | v1.30.3-aliyun.6.8.4.946f90e8 |
| 1.28 | v1.28.12-aliyun-6.8.4.b27c0009 |
| 1.26 | v1.26.3-aliyun-6.8.4.4b180111 |
Untuk detail tentang komponen kube-scheduler, lihat kube-scheduler.
Label pod GPU
Semua metode penjadwalan GPU memerlukan label berikut pada pod:
labels:
alibabacloud.com/compute-class: gpu # Tetapkan kelas komputasi ke gpu.
alibabacloud.com/compute-qos: default # Kelas QoS.
alibabacloud.com/gpu-model-series: <gpu-model> # Model GPU, seperti T4 atau GN8IS.Untuk pemetaan kelas komputasi dan kelas QoS, lihat Hubungan antara kelas komputasi dan kelas QoS.
Untuk model GPU yang didukung, lihat Tentukan model GPU dan versi driver untuk pod ACS yang dipercepat GPU.
Contoh: Pod GPU dengan nodeSelector
apiVersion: apps/v1
kind: Deployment
metadata:
name: gpu-demo
labels:
app: gpu-demo
spec:
replicas: 1
selector:
matchLabels:
app: gpu-demo
template:
metadata:
labels:
app: gpu-demo
alibabacloud.com/compute-class: gpu
alibabacloud.com/compute-qos: default
alibabacloud.com/gpu-model-series: <gpu-model> # Ganti dengan model GPU Anda, seperti T4.
spec:
nodeSelector:
type: virtual-kubelet
tolerations:
- key: "virtual-kubelet.io/provider"
operator: "Exists"
effect: "NoSchedule"
containers:
- name: gpu-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"Contoh: Pod GPU dengan ResourcePolicy
apiVersion: scheduling.alibabacloud.com/v1alpha1
kind: ResourcePolicy
metadata:
name: gpu-rp-demo
namespace: default
spec:
selector:
app: gpu-rp-demo
units:
- resource: acs
podLabels:
alibabacloud.com/compute-class: gpu
alibabacloud.com/compute-qos: default
alibabacloud.com/gpu-model-series: <gpu-model> # Ganti dengan model GPU Anda, seperti T4.
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: gpu-rp-demo
labels:
app: gpu-rp-demo
annotations:
resourcePolicy: "gpu-rp-demo" # Referensikan ResourcePolicy.
spec:
replicas: 1
selector:
matchLabels:
app: gpu-rp-demo
template:
metadata:
labels:
app: gpu-rp-demo
spec:
containers:
- name: 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"Untuk detail tentang penjadwalan ResourcePolicy, lihat Penjadwalan sumber daya berdasarkan prioritas kustom.
Contoh: Pod GPU dengan label pod
apiVersion: apps/v1
kind: Deployment
metadata:
name: gpu-demo
labels:
app: gpu-demo
spec:
replicas: 1
selector:
matchLabels:
app: gpu-demo
template:
metadata:
labels:
app: gpu-demo
alibabacloud.com/acs: "true" # Jadwalkan ke node virtual ACS.
alibabacloud.com/compute-class: gpu
alibabacloud.com/compute-qos: default
alibabacloud.com/gpu-model-series: <gpu-model> # Ganti dengan model GPU Anda, seperti T4.
spec:
containers:
- name: gpu-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"Verifikasi status pod GPU
kubectl get pod gpu-demo-9cdf7bbf9-s**** -oyamlKonfirmasi bahwa pod sedang berjalan dan sumber daya GPU telah dialokasikan:
phase: Running
resources:
limits:
nvidia.com/gpu: "1"
requests:
nvidia.com/gpu: "1"Jadwalkan pod GPU-HPN ke node virtual
Pod ACS GPU-HPN (High-Performance Networking) memerlukan reservasi kapasitas dan menggunakan node reservasi untuk penjadwalan.
Prasyarat untuk GPU-HPN
Sebelum memulai, pastikan Anda telah:
Memiliki kluster ACK managed, kluster terdaftar ACK One, atau kluster Kubernetes ACK One untuk alur kerja Argo terdistribusi.
Membeli reservasi kapasitas GPU-HPN dan mengaitkannya dengan kluster Anda.
Memperbarui komponen kube-scheduler dan ACK Virtual Node ke versi yang kompatibel dengan GPU-HPN (pratinjau undangan; kirim tiket untuk mendapatkan versi yang diperlukan).
Label pod GPU-HPN
labels:
alibabacloud.com/compute-class: gpu-hpn # Tetapkan kelas komputasi ke gpu-hpn.
alibabacloud.com/compute-qos: default # Kelas QoS.Untuk pemetaan kelas komputasi dan kelas QoS, lihat Pemetaan antara kelas komputasi dan kelas QoS daya komputasi.
Untuk parameter pod ACS lainnya, lihat Pod ACS.
Contoh: Pod GPU-HPN dengan nodeSelector
Saat mengonfigurasi pod ACS GPU-HPN:
Tetapkan
alibabacloud.com/compute-classkegpu-hpn.Tetapkan nodeSelector
alibabacloud.com/node-typekereserved.Konfigurasikan
requestsdanlimitsberdasarkan model GPU Anda.
apiVersion: apps/v1
kind: Deployment
metadata:
name: gpu-hpn-demo
labels:
app: gpu-hpn-demo
spec:
replicas: 1
selector:
matchLabels:
app: gpu-hpn-demo
template:
metadata:
labels:
app: gpu-hpn-demo
alibabacloud.com/compute-class: gpu-hpn
alibabacloud.com/compute-qos: default
spec:
nodeSelector:
alibabacloud.com/node-type: reserved # Targetkan node reservasi GPU-HPN.
containers:
- name: gpu-hpn-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" # Sesuaikan berdasarkan model GPU Anda.
requests:
cpu: 1
memory: 1Gi
nvidia.com/gpu: "1" # Sesuaikan berdasarkan model GPU Anda.Verifikasi status pod GPU-HPN
kubectl get pod gpu-hpn-demo-9cdf7bbf9-s**** -oyamlKonfirmasi bahwa pod sedang berjalan dan sumber daya GPU telah dialokasikan:
phase: Running
resources:
limits:
nvidia.com/gpu: "1"
requests:
nvidia.com/gpu: "1"