Container Compute Service (ACS) Alibaba Cloud terintegrasi dengan Container Service for Kubernetes. Anda dapat menggunakan kluster ACK Pro untuk mengakses daya komputasi kontainer yang disediakan oleh ACS secara cepat. Topik ini menjelaskan cara menggunakan daya komputasi ACS dalam kluster ACK Anda.
Cara kerja
Container Compute Service (ACS) adalah layanan kontainer yang menggunakan Kubernetes sebagai antarmukanya dan menyediakan sumber daya komputasi sesuai spesifikasi kontainer. ACS menerapkan arsitektur berlapis yang memisahkan lapisan kontrol Kubernetes dari daya komputasi kontainer yang mendasarinya. Lapisan sumber daya komputasi ACS bertanggung jawab atas penjadwalan dan alokasi sumber daya untuk Pod, sedangkan Kubernetes mengelola beban kerja aplikasi seperti Deployment, Service, StatefulSet, dan CronJob di atas lapisan tersebut.
Anda dapat menghubungkan daya komputasi kontainer ACS ke kluster Kubernetes sebagai node virtual. Pendekatan ini memberikan elastisitas tinggi pada kluster Anda tanpa dibatasi oleh kapasitas komputasi nodenya. Ketika ACS mengambil alih pengelolaan infrastruktur dasar untuk Pod, Kubernetes tidak perlu lagi menangani langsung penempatan dan startup Pod individual atau memantau status sumber daya mesin virtual yang mendasarinya. ACS memastikan ketersediaan sumber daya Pod yang diperlukan.
Container Service for Kubernetes (ACK) merupakan salah satu platform Kubernetes bersertifikasi pertama di dunia dan menyediakan layanan manajemen berkinerja tinggi untuk aplikasi berbasis kontainer. Layanan ini terintegrasi dengan kemampuan virtualisasi, penyimpanan, jaringan, dan keamanan Alibaba Cloud untuk menyederhanakan pembuatan dan penskalaan kluster, sehingga Anda dapat fokus mengembangkan dan mengelola aplikasi berbasis kontainer Anda.
Dalam kluster ACK Pro, Anda harus men-deploy node virtual secara manual sebelum membuat Pod ACS. Saat kluster Anda perlu melakukan scale-out, Anda dapat membuat Pod ACS pada node virtual sesuai permintaan tanpa perlu merencanakan kapasitas node terlebih dahulu. Pod ACS dapat berkomunikasi dengan Pod pada node kluster biasa. Untuk beban kerja jangka panjang dengan trafik fluktuatif, kami merekomendasikan menjadwalkannya ke node virtual. Pendekatan ini memaksimalkan pemanfaatan sumber daya, memperpendek waktu scale-out, dan mengurangi biaya. Saat trafik menurun, Anda dapat segera melepaskan Pod tersebut untuk menekan biaya. Setiap Pod pada node virtual berjalan sebagai instans ACS dalam lingkungan kontainer yang aman dan terisolasi. Untuk informasi lebih lanjut, lihat Ikhtisar ACK.
Prasyarat
-
Jika ini pertama kalinya Anda menggunakan layanan ini, aktifkan layanan yang diperlukan dan berikan izin yang sesuai:
-
Aktifkan Container Service for Kubernetes, berikan izin kepada peran default, dan aktifkan layanan cloud yang diperlukan. Untuk informasi lebih lanjut, lihat Buat kluster ACK Pro.
-
Masuk ke Konsol Container Compute Service dan ikuti petunjuk di layar untuk mengaktifkan ACS.
-
-
Diperlukan kluster ACK Pro yang menjalankan Kubernetes versi 1.26 atau lebih baru. Untuk informasi lebih lanjut, lihat Buat kluster ACK Pro. Untuk informasi tentang cara meningkatkan kluster, lihat Tingkatkan kluster ACK.
-
Untuk kluster ACK Pro, komponen node virtual (ACK Virtual Node) harus memenuhi persyaratan versi yang sesuai dengan versi Kubernetes.
Versi Kubernetes
Versi komponen ACK Virtual Node
1.26 atau lebih baru
v2.13.0 atau lebih baru
Instal komponen ACK Virtual Node
Lakukan langkah-langkah berikut:
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
-
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Components and Add-ons.
-
Pada tab Core Components, temukan komponen ACK Virtual Node dan klik Install atau Upgrade ke versi yang diperlukan.
Anda juga dapat membuka halaman Manajemen Komponen dengan memilih Operations > Component Management di panel navigasi kiri halaman detail kluster.
-
Jika diminta untuk Activate and Authorize ACS sebelum menginstal ACK Virtual Node, ikuti petunjuk di layar. Setelah mengaktifkan ACS dan memberikan izin yang diperlukan, klik OK untuk melanjutkan instalasi.
-
Setelah instalasi selesai, pilih di panel navigasi kiri. Nama node virtual baru secara default diawali dengan
virtual-kubelet-.
Contoh: Gunakan daya komputasi CPU ACS
Setelah komponen ACK Virtual Node diinstal atau ditingkatkan ke versi yang ditentukan dalam bagian Prasyarat, komponen tersebut akan mendukung daya komputasi ACS maupun ECI.
Saat Anda menjadwalkan Pod ke node virtual, daya komputasi Elastic Container Instance (ECI) digunakan secara default kecuali Anda menentukan ACS.
Untuk menggunakan daya komputasi CPU ACS dalam ACK, lakukan langkah-langkah berikut:
-
Jadwalkan Pod ke node virtual menggunakan metode seperti nodeSelector, affinity, ResourcePolicy, atau dengan menambahkan label
alibabacloud.com/acs: "true". Untuk informasi lebih lanjut, lihat Node affinity.CatatanPenjadwalan menggunakan label
alibabacloud.com/acs: "true"tidak didukung dalam kluster ACK Serverless. Fitur ini saat ini didukung dalam kluster ACK Pro, kluster khusus ACK, kluster terdaftar ACK One, dan kluster ACK Edge. -
Tentukan tipe instans untuk Pod ACS menggunakan label
alibabacloud.com/compute-class:<compute-type>. Untuk informasi lebih lanjut tentang tipe instans ACS, lihat Instans Pod ACS.
Langkah-langkah berikut memberikan contoh terperinci:
-
Deploy Deployment.
PentingJika Anda menjadwalkan Pod dengan menambahkan label
alibabacloud.com/acs: "true", StorageClass bertipeWaitForFirstConsumertidak didukung. Oleh karena itu, saat menggunakan daya komputasi ACS dalam kluster ACK dan Pod ACS perlu memasang disk cloud, jadwalkan Pod tersebut ke node virtual menggunakan nodeSelector atau ResourcePolicy. Untuk informasi lebih lanjut tentang cara mengonfigurasi ResourcePolicy, lihat Kluster ACK Pro mendukung penjadwalan hibrid daya komputasi ECS dan ACS.NodeSelector
-
Jalankan perintah berikut untuk melihat label node virtual. Ganti
virtual-kubelet-cn-hangzhou-kdengan nama node virtual Anda.kubectl get node virtual-kubelet-cn-hangzhou-k -oyamlBerikut ini cuplikan bagian
labels:apiVersion: v1 kind: Node metadata: labels: kubernetes.io/arch: amd64 kubernetes.io/hostname: virtual-kubelet-cn-hangzhou-k kubernetes.io/os: linux kubernetes.io/role: agent service.alibabacloud.com/exclude-node: "true" topology.diskplugin.csi.alibabacloud.com/zone: cn-hangzhou-k topology.kubernetes.io/region: cn-hangzhou topology.kubernetes.io/zone: cn-hangzhou-k type: virtual-kubelet # Gunakan label ini untuk menjadwalkan Pod ke node virtual. name: virtual-kubelet-cn-hangzhou-k spec: taints: - effect: NoSchedule key: virtual-kubelet.io/provider value: alibabacloud -
Buat file bernama nginx.yaml dengan konten berikut untuk men-deploy dua Pod.
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 # Tentukan kelas komputasi untuk Pod ACS. Default: general-purpose. alibabacloud.com/compute-qos: default # Tentukan kelas QoS untuk Pod ACS. Default: default. spec: nodeSelector: type: virtual-kubelet # Jadwalkan Pod ke node virtual. tolerations: - key: "virtual-kubelet.io/provider" # Toleransi taint pada 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: 2 -
Buat aplikasi NGINX dan periksa hasil deployment.
-
Jalankan perintah berikut untuk membuat aplikasi NGINX.
kubectl apply -f nginx.yaml -
Jalankan perintah berikut untuk memeriksa hasil deployment.
kubectl get pods -o wideOutput yang diharapkan:
NAME 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>Output menunjukkan bahwa
nodeSelectortelah menjadwalkan kedua Pod ke node denganlabeltype=virtual-kubelet.
-
Penjadwalan berdasarkan label Pod
-
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" # Konfigurasikan Pod untuk menggunakan daya komputasi ACS. alibabacloud.com/compute-class: general-purpose # Tentukan kelas komputasi untuk Pod ACS. Default: general-purpose. alibabacloud.com/compute-qos: default # Tentukan kelas QoS untuk Pod ACS. Default: default. spec: containers: - name: nginx image: registry.openanolis.cn/openanolis/nginx:1.14.1-8.6 resources: limits: cpu: 2 requests: cpu: 2 -
Buat aplikasi NGINX dan periksa hasil deployment.
-
Jalankan perintah berikut untuk membuat aplikasi NGINX.
kubectl apply -f nginx.yaml -
Jalankan perintah berikut untuk memeriksa hasil deployment.
kubectl get pods -o wideOutput yang diharapkan:
NAME 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>Output menunjukkan bahwa Pod dijadwalkan ke node virtual, sebagaimana ditentukan oleh
alibabacloud.com/acs: "true"label.
-
-
-
Periksa detail Pod NGINX untuk memastikan bahwa Pod tersebut merupakan instans Pod ACS.
-
Jalankan perintah berikut untuk melihat detail Pod NGINX.
kubectl describe pod nginx-9cdf7bbf9-s****Output yang diharapkan (informasi penting):
Annotations: ProviderCreate: done alibabacloud.com/client-token: edf29202-54ac-438e-9626-a1ca007xxxxx alibabacloud.com/instance-id: acs-2ze008giupcyaqbxxxxx alibabacloud.com/pod-ephemeral-storage: 30Gi alibabacloud.com/pod-use-spec: 2-4Gi alibabacloud.com/request-id: A0EF3BF3-37E7-5A07-AC2D-68A0CFCxxxxx alibabacloud.com/schedule-result: finished alibabacloud.com/user-id: 14889995898xxxxx kubernetes.io/pod-stream-port: 10250 kubernetes.io/preferred-scheduling-node: virtual-kubelet-cn-hangzhou-j/1 kubernetes.io/resource-type: serverlessAnotasi
alibabacloud.com/instance-id: acs-2ze008giupcyaqbxxxxxmengonfirmasi bahwa Pod tersebut merupakan instans Pod ACS.
-
Contoh: Gunakan daya komputasi GPU ACS
Proses penggunaan daya komputasi GPU ACS mirip dengan daya komputasi CPU ACS, tetapi memerlukan versi komponen tertentu dan beberapa konfigurasi tambahan.
Konfigurasi komponen
Untuk kluster ACK Pro dengan versi Kubernetes berbeda, komponen kube-scheduler harus memenuhi persyaratan versi berikut.
|
Versi Kubernetes |
Versi kube-scheduler |
|
1.26 atau lebih baru |
|
Penggunaan
...
labels:
# Nyatakan kebutuhan sumber daya GPU ACS dalam label.
alibabacloud.com/compute-class: gpu # Untuk tipe GPU, gunakan nilai tetap 'gpu'.
alibabacloud.com/compute-qos: default # Kelas QoS. Artinya sama seperti untuk daya komputasi ACS biasa.
alibabacloud.com/gpu-model-series: example-model # Seri model GPU. Ganti dengan model aktual Anda, seperti T4.
...
-
Untuk informasi lebih lanjut tentang kelas komputasi dan kelas quality of service (QoS) ACS, lihat Hubungan antara kelas komputasi dan kelas QoS.
-
Untuk model GPU yang tersedia untuk
gpu-model-series, lihat Tentukan model GPU dan versi driver untuk Pod berakselerasi GPU ACS. -
Penjadwalan menggunakan label
alibabacloud.com/acs: "true"tidak didukung dalam kluster ACK Serverless. Fitur ini saat ini didukung dalam kluster ACK Pro, kluster khusus ACK, kluster terdaftar ACK One, dan kluster ACK Edge.
-
Contoh berikut menunjukkan tiga cara berbeda untuk mengonfigurasi daya komputasi GPU.
NodeSelector
Gunakan YAML berikut untuk membuat beban kerja GPU.
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 # Atribut ACS alibabacloud.com/compute-class: gpu alibabacloud.com/compute-qos: default alibabacloud.com/gpu-model-series: example-model # Seri model GPU. Ganti dengan model aktual Anda, seperti T4. spec: # Tentukan label untuk node virtual. nodeSelector: type: virtual-kubelet # Toleransi taint node virtual. tolerations: - key: "virtual-kubelet.io/provider" # Toleransi taint pada 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"ResourcePolicy
Gunakan YAML berikut untuk membuat beban kerja GPU.
apiVersion: scheduling.alibabacloud.com/v1alpha1 kind: ResourcePolicy metadata: name: dep-rp-demo namespace: default spec: selector: app: dep-rp-demo units: - resource: acs podLabels: alibabacloud.com/compute-class: gpu alibabacloud.com/compute-qos: default alibabacloud.com/gpu-model-series: example-model # Seri model GPU. Ganti dengan model aktual Anda, seperti T4. --- apiVersion: apps/v1 kind: Deployment metadata: name: dep-rp-demo labels: app: dep-rp-demo annotations: resourcePolicy: "dep-rp-demo" # Referensikan nama ResourcePolicy. spec: replicas: 1 selector: matchLabels: app: dep-rp-demo template: metadata: labels: app: dep-rp-demo alibabacloud.com/compute-class: gpu alibabacloud.com/compute-qos: default alibabacloud.com/gpu-model-series: example-model # Seri model GPU. Ganti dengan model aktual Anda, seperti T4. 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 informasi lebih lanjut tentang penggunaan ResourcePolicy untuk penjadwalan sumber daya, lihat Penjadwalan prioritas sumber daya kustom.
Penjadwalan berdasarkan label Pod
Gunakan YAML berikut untuk membuat beban kerja GPU.
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 # Atribut ACS alibabacloud.com/acs: "true" # Konfigurasikan Pod untuk menggunakan daya komputasi ACS. alibabacloud.com/compute-class: gpu alibabacloud.com/compute-qos: default alibabacloud.com/gpu-model-series: example-model # Seri model GPU. Ganti dengan model aktual Anda, 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" -
Jalankan perintah berikut untuk memeriksa status beban kerja GPU.
kubectl get pod node-selector-demo-9cdf7bbf9-s**** -oyamlOutput yang diharapkan (informasi penting):
phase: Running resources: limits: #other resources nvidia.com/gpu: "1" requests: #other resources nvidia.com/gpu: "1"
Contoh: Gunakan daya komputasi GPU HPN ACS
Proses penggunaan daya komputasi GPU HPN ACS mirip dengan daya komputasi CPU ACS, tetapi dengan persyaratan berikut:
-
Fitur ini hanya didukung dalam kluster ACK Pro, kluster terdaftar ACK One, dan kluster Argo alur kerja terdistribusi ACK One.
-
Anda harus membeli reservasi kapasitas GPU-HPN terlebih dahulu dan mengaitkannya dengan kluster Anda.
-
Versi kube-scheduler harus memenuhi persyaratan berikut:
Versi Kubernetes
Versi kube-scheduler
1.28
v1.28.12-aliyun-6.9.3.cd73f3fe atau lebih baru.
1.30
v1.30.3-aliyun.6.9.3.ce7e2faf atau lebih baru.
1.31
v1.31.0-aliyun.6.9.3.051bb0e8 atau lebih baru.
1.32
v1.32.0-aliyun.6.9.3.515ac311 atau lebih baru.
1.33
v1.33.0-aliyun.6.9.4.8b58e6b4 atau lebih baru.
-
Komponen ACK Virtual Node harus v2.15.0 atau lebih baru.
Penggunaan
...
labels:
# Nyatakan kebutuhan sumber daya GPU ACS dalam label.
alibabacloud.com/compute-class: gpu-hpn # Harus diatur ke gpu-hpn.
alibabacloud.com/compute-qos: default # Kelas QoS. Artinya sama seperti untuk daya komputasi ACS biasa.
...
-
Untuk informasi lebih lanjut tentang kelas komputasi dan kelas QoS ACS, lihat Hubungan antara kelas komputasi dan kelas QoS.
-
Untuk informasi tentang parameter lain untuk Pod ACS, lihat Konfigurasikan Pod ACS.
-
Node GPU HPN ACS hanya dapat menjadwalkan Pod dengan kelas komputasi
gpu-hpn. Anda tidak perlu menentukan kebutuhan sumber daya GPU dalam deklarasi sumber daya Pod untuk Pod tersebut. Node tersebut tidak dapat menjadwalkan Pod dengan kelas komputasi lain atau Pod yang tidak mendeklarasikan kelas komputasi.
-
Anda dapat menggunakan nodeSelector Kubernetes untuk menjadwalkan Pod ke node GPU HPN.
PentingSaat mengonfigurasi Pod GPU HPN ACS, perhatikan bidang-bidang berikut:
-
Tentukan kelas komputasi:
alibabacloud.com/compute-class: gpu-hpn. -
Tentukan label node reservasi:
alibabacloud.com/node-type: reserved. -
Untuk nama sumber daya perangkat dalam bidang
requestsdanlimitsspesifikasi sumber daya, tentukan nama berdasarkan tipe kartu perangkat aktual, seperti NVIDIA atau lainnya.
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 # Atribut ACS alibabacloud.com/compute-class: gpu-hpn alibabacloud.com/compute-qos: default spec: # Tentukan label untuk node reservasi GPU HPN. nodeSelector: alibabacloud.com/node-type: reserved 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" # Gunakan nama sumber daya yang sesuai dengan model GPU aktual Anda. requests: cpu: 1 memory: 1Gi nvidia.com/gpu: "1" # Gunakan nama sumber daya yang sesuai dengan model GPU aktual Anda. -
-
Periksa status beban kerja GPU.
kubectl get pod node-selector-demo-9cdf7bbf9-s**** -oyamlOutput yang diharapkan (informasi penting):
phase: Running resources: limits: #other resources nvidia.com/gpu: "1" requests: #other resources nvidia.com/gpu: "1"