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.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Kluster terdaftar ACK One yang terhubung ke pusat data atau kluster Kubernetes penyedia cloud lainnya. Disarankan menggunakan Kubernetes versi 1.24 atau lebih baru. Lihat Buat kluster terdaftar.
Komponen
ack-virtual-nodeyang telah diinstal versi 2.13.0 atau lebih baru. Lihat Berikan izin RAM kepada ack-virtual-node dan Instal ack-virtual-node.
Pilih metode penjadwalan
ACS mendukung dua metode untuk menjadwalkan pod ke node virtual. Pilih metode yang sesuai dengan kasus penggunaan Anda:
| Metode | Cara kerja | Paling cocok untuk |
|---|---|---|
| Penjadwalan berbasis label (disarankan) | Tambahkan alibabacloud.com/acs: "true" ke label pod | Migrasi beberapa beban kerja; tidak memerlukan nodeSelector atau toleration |
| NodeSelector | Atur nodeSelector: type: virtual-kubelet dan tambahkan toleration | Kontrol 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.
Buat file bernama
nginx.yamldengan 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: 2Deploy aplikasi:
kubectl apply -f nginx.yamlVerifikasi bahwa pod berjalan di node virtual:
kubectl get pods -o wideOutput 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>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.
Periksa label pada node virtual. Ganti
virtual-kubelet-cn-shanghai-ldengan nama node virtual Anda yang sebenarnya:kubectl get node virtual-kubelet-cn-shanghai-l -oyamlOutput 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: alibabacloudBuat file bernama
nginx.yamldengan 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: 2Deploy aplikasi:
kubectl apply -f nginx.yamlVerifikasi bahwa pod berjalan di node virtual:
kubectl get pods -o wideOutput 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
Buat file bernama
gpu-workload.yamldengan 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"Deploy beban kerja:
kubectl apply -f gpu-workload.yamlVerifikasi bahwa beban kerja GPU berjalan:
kubectl get pod node-selector-demo-9cdf7bbf9-s**** -oyamlOutput yang diharapkan:
phase: Running resources: limits: #other resources nvidia.com/gpu: "1" requests: #other resources nvidia.com/gpu: "1"
NodeSelector
Buat file bernama
gpu-workload.yamldengan 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"Deploy beban kerja:
kubectl apply -f gpu-workload.yamlVerifikasi bahwa beban kerja GPU berjalan:
kubectl get pod node-selector-demo-9cdf7bbf9-s**** -oyamlOutput yang diharapkan:
phase: Running resources: limits: #other resources nvidia.com/gpu: "1" requests: #other resources nvidia.com/gpu: "1"