Alibaba Cloud Container Compute Service (ACS) mendukung deklarasi kelas komputasi (compute-class) dan Kualitas Layanan Komputasi (compute QoS) dalam label pod. Persediaan tipe instans berubah secara dinamis, dan pembuatan instans dengan tipe tertentu dapat gagal karena faktor seperti ketersediaan sumber daya yang tidak mencukupi. Dengan penjadwalan prioritas kustom, Anda dapat menentukan beberapa kelas komputasi atau kelas compute QoS untuk sebuah pod. Penjadwal kemudian mencoba membuat instans pod sesuai dengan urutan yang ditentukan. Fitur ini juga mengontrol skala-masuk aplikasi dalam urutan terbalik menggunakan mekanisme biaya penghapusan pod. Topik ini menjelaskan cara menggunakan penjadwalan prioritas kustom di kluster ACS.
Prasyarat
kube-scheduler telah diinstal dan versinya memenuhi persyaratan berikut.
Versi kluster ACS
Versi komponen penjadwal
1.31
v1.31.0-aliyun-1.2.0 dan yang lebih baru
1.30
v1.30.3-aliyun-1.1.1 dan yang lebih baru
1.28
v1.28.9-aliyun-1.1.0 dan yang lebih baru
acs-virtual-node telah diinstal dan versinya adalah v2.12.0-acs.4 atau yang lebih baru.
Catatan
Untuk informasi lebih lanjut tentang kelas komputasi yang mendukung penjadwalan sumber daya berdasarkan prioritas kustom, lihat Kelas komputasi.
Penjadwalan sumber daya ACS berdasarkan prioritas kustom menggunakan fitur Biaya penghapusan Pod dari Kubernetes untuk mengontrol urutan skala-masuk pod. Secara teori, pod dengan biaya penghapusan pod terendah akan diskalakan masuk pertama kali. Namun, algoritma skala-masuk mempertimbangkan berbagai faktor yang bergantung pada implementasi pengontrol pod. Perhatikan bahwa jika pod yang Anda buat memiliki anotasi
controller.kubernetes.io/pod-deletion-cost, nilainya akan ditimpa oleh kebijakan penjadwalan prioritas kustom ACS.
Jangan gunakan label sistem-reserved, seperti alibabacloud.com/compute-class dan alibabacloud.com/compute-qos, dalam pemilih label beban kerja, seperti spec.selector.matchLabels dari penerapan. Sistem dapat memodifikasi label-label ini selama penjadwalan prioritas kustom. Hal ini dapat menyebabkan pengontrol sering membuat ulang pod dan memengaruhi stabilitas aplikasi.
Penggunaan
Kluster ACS menyediakan sumber daya dalam bentuk node virtual. Properti sumber daya utama dari sebuah pod meliputi zona, kelas komputasi, dan compute QoS. Untuk tujuan ini, ACS mendefinisikan kebijakan penjadwalan ResourcePolicy. Kebijakan ini memungkinkan Anda menandai sekelompok pod menggunakan spec.selector dan mengonfigurasi beberapa properti sumber daya secara bersamaan. Jika persediaan sumber daya tidak mencukupi, penjadwal membuat jenis instans lain berdasarkan urutan yang dikonfigurasi. Anda dapat menggunakan kebijakan penjadwalan ResourcePolicy sebagai berikut.
Buat kebijakan penjadwalan ResourcePolicy.
apiVersion: scheduling.alibabacloud.com/v1alpha1 kind: ResourcePolicy metadata: name: rp-demo namespace: default spec: selector: # Tandai pod dalam pemilih. Pod dengan label app=stress akan mengikuti kebijakan penjadwalan ini. app: stress units: # Tentukan urutan penjadwalan dalam unit. - resource: acs # Pertama, minta sumber daya tipe best-effort. podLabels: alibabacloud.com/compute-class: general-purpose alibabacloud.com/compute-qos: best-effort - resource: acs # Jika yang sebelumnya habis stoknya, minta sumber daya tipe default. podLabels: alibabacloud.com/compute-class: general-purpose alibabacloud.com/compute-qos: defaultBuat beban kerja dari jenis apa pun, seperti Job. Pastikan konfigurasi
labelscocok dengan pemilih dalam ResourcePolicy.apiVersion: batch/v1 kind: Job metadata: name: demo-job namespace: default spec: parallelism: 3 template: metadata: labels: app: stress # Hubungkan dengan konfigurasi yang didefinisikan dalam spec.selector dari ResourcePolicy. spec: containers: - name: demo-job image: registry.cn-hangzhou.aliyuncs.com/acs/stress:v1.0.4 args: - 'infinity' command: - sleep resources: requests: cpu: "1" memory: "1Gi" limits: cpu: "1" memory: "1Gi" restartPolicy: Never backoffLimit: 4
Parameter konfigurasi lanjutan
Contoh YAML rinci berikut dari ResourcePolicy menunjukkan format parameter konfigurasi lanjutan untuk penjadwalan prioritas kustom.
Topik ini hanya menjelaskan konfigurasi umum untuk menggunakan ResourcePolicy di kluster ACS. Untuk informasi lebih lanjut tentang semua konfigurasi fitur ResourcePolicy, lihat Penjadwalan Prioritas Sumber Daya Elastis Kustom.
apiVersion: scheduling.alibabacloud.com/v1alpha1
kind: ResourcePolicy
metadata:
name: rp-demo
namespace: default
spec:
# Berikut adalah konfigurasi aplikasi. Ini digunakan untuk menandai sekelompok pod. Pod yang memenuhi kondisi akan mengikuti kebijakan penjadwalan ini.
selector:
app: stress
# Akhir dari konfigurasi aplikasi.
# Berikut adalah konfigurasi sumber daya. Ini digunakan untuk menggambarkan urutan penjadwalan.
units:
- resource: acs # Jenis sumber daya harus disetel ke acs.
podLabels: # Pertama, minta sumber daya tipe "general-purpose" + "best-effort".
alibabacloud.com/compute-class: general-purpose
alibabacloud.com/compute-qos: best-effort
nodeSelector: # Anda dapat menggunakan nodeSelector untuk menentukan zona node virtual.
topology.kubernetes.io/zone: cn-hangzhou-i
- resource: acs # Jika yang sebelumnya habis stoknya, minta sumber daya tipe "general-purpose" + "default".
podLabels:
alibabacloud.com/compute-class: general-purpose
alibabacloud.com/compute-qos: default
# Akhir dari konfigurasi sumber daya.
# Bidang lainnya berlaku untuk kluster non-ACS. ResourcePolicy memiliki nilai default untuk bidang tersebut setelah pembuatan. Anda dapat mengabaikannya.Konfigurasi aplikasi
Konfigurasi aplikasi terdiri dari satu set label. Hanya pod dengan label-label ini yang mengikuti kebijakan ini. Anda dapat mengonfigurasi urutan sumber daya yang berbeda berdasarkan jenis aplikasi.
Item konfigurasi | Tipe | Deskripsi | Contoh |
selector | map[string]string | Pod yang memiliki semua label ini dijadwalkan sesuai dengan aturan ResourcePolicy ini. | |
Konfigurasi sumber daya
Konfigurasi sumber daya adalah daftar. Setiap elemen dalam daftar menggambarkan properti sumber daya secara rinci. Penjadwal mencoba membuat pod yang memenuhi kondisi dalam Konfigurasi aplikasi secara berurutan, berdasarkan properti setiap elemen. Jika persediaan tidak mencukupi, penjadwal secara otomatis mencoba menggunakan elemen berikutnya. Jika semua tipe sumber daya yang ditentukan habis stoknya, pod tetap dalam status Pending. Penjadwal terus mencoba semua tipe sumber daya hingga pod dibuat. Tabel berikut menjelaskan parameter yang dimiliki setiap elemen.
Item konfigurasi | Tipe | Deskripsi | Nilai | Contoh |
resource | string | Jenis sumber daya. Parameter ini wajib. Hanya `acs` yang didukung. | acs |
|
nodeSelector | map[string]string | Filter node virtual berdasarkan label, misalnya, berdasarkan zona. | Untuk informasi lebih lanjut tentang label yang didukung, lihat penjadwalan afinitas node. | |
podLabels[alibabacloud.com/compute-class] | string | Menggambarkan kelas komputasi yang diminta oleh pod. |
|
|
podLabels[alibabacloud.com/compute-qos] | string | Menggambarkan compute QoS yang diminta oleh pod. |
|
|
Contoh
Contoh ini menunjukkan cara menggunakan ResourcePolicy untuk meminta sumber daya secara berurutan dengan compute QoS default dan best-effort untuk aplikasi.
Buat file bernama resource-policy.yaml dengan konten berikut. Ini mendeklarasikan bahwa untuk pod dengan label
app=stress, sumber daya dengan kelas komputasi `performance` dan compute QoS `default` diminta.apiVersion: scheduling.alibabacloud.com/v1alpha1 kind: ResourcePolicy metadata: name: stress-demo namespace: default spec: selector: app: stress units: - resource: acs podLabels: alibabacloud.com/compute-class: performance alibabacloud.com/compute-qos: defaultJalankan perintah berikut untuk menerapkan ResourcePolicy ke kluster.
kubectl apply -f resource-policy.yamlBuat file bernama stress-dep.yaml dengan konten berikut.
apiVersion: apps/v1 kind: Deployment metadata: name: stress spec: replicas: 1 selector: matchLabels: app: stress template: metadata: labels: # Pertahankan ini agar konsisten dengan konfigurasi dalam ResourcePolicy. app: stress spec: containers: - name: stress image: registry-cn-hangzhou.ack.aliyuncs.com/acs/stress:v1.0.4 command: - "sleep" - "infinity" resources: limits: cpu: '1' memory: 1Gi requests: cpu: '1' memory: 1GiJalankan perintah berikut untuk menerapkan aplikasi stress ke kluster.
kubectl apply -f stress-dep.yamlJalankan perintah berikut untuk melihat status pod.
kubectl get pod -L alibabacloud.com/compute-class,alibabacloud.com/compute-qosOutput yang diharapkan:
# Output dipengaruhi oleh faktor-faktor seperti stok sumber daya. Output aktual mungkin berbeda. NAME READY STATUS RESTARTS AGE COMPUTE-CLASS COMPUTE-QOS stress-xxxxxxxx1 1/1 Running 0 53s performance defaultPerbarui file resource-policy.yaml dengan konten berikut. Ini menambahkan deskripsi properti sumber daya untuk meminta sumber daya dalam urutan berikut:
Pertama, minta sumber daya dengan kelas komputasi `general-purpose` dan compute QoS `best-effort`.
Jika persediaan sumber daya sebelumnya tidak mencukupi, minta sumber daya dengan kelas komputasi `performance` dan compute QoS `default`.
apiVersion: scheduling.alibabacloud.com/v1alpha1 kind: ResourcePolicy metadata: name: stress-demo namespace: default spec: selector: app: stress units: - resource: acs podLabels: alibabacloud.com/compute-class: general-purpose alibabacloud.com/compute-qos: best-effort - resource: acs podLabels: alibabacloud.com/compute-class: performance alibabacloud.com/compute-qos: defaultJalankan perintah berikut untuk memperbarui ResourcePolicy di kluster. Kebijakan yang diperbarui berlaku untuk pod yang dibuat setelahnya.
kubectl apply -f resource-policy.yamlJalankan perintah berikut untuk menambah replika aplikasi stress yang dibuat pada Langkah 3 menjadi dua replika.
kubectl scale deployment stress --replicas=2Jalankan perintah berikut untuk melihat status pod.
kubectl get pod -L alibabacloud.com/compute-class,alibabacloud.com/compute-qosOutput yang diharapkan:
# Output dipengaruhi oleh faktor-faktor seperti stok sumber daya. Output aktual mungkin berbeda. NAME READY STATUS RESTARTS AGE COMPUTE-CLASS COMPUTE-QOS stress-xxxxxxxx1 1/1 Running 0 2m14s performance default stress-xxxxxxxx2 1/1 Running 0 33s general-purpose best-effortAnda dapat melihat bahwa replika baru memiliki kelas komputasi `general-purpose` dan compute QoS `best-effort`.