Dibandingkan dengan penjadwal Kubernetes native, penjadwal Container Service for Kubernetes (ACK) menyediakan fitur tambahan seperti Gang Scheduling, CPU topology-aware scheduling, dan ECI elastic scheduling. Topik ini menjelaskan cara menginstal komponen ack-co-scheduler di kluster terdaftar untuk memanfaatkan kemampuan penjadwalan ACK pada kluster Kubernetes yang dikelola sendiri, sehingga Anda dapat menggunakan fitur penjadwalan tingkat lanjut dari ACK guna meningkatkan kinerja aplikasi data besar, AI, dan lainnya.
Prasyarat
-
Buat kluster terdaftar dan hubungkan kluster Kubernetes yang dikelola sendiri ke dalamnya. Untuk informasi selengkapnya, lihat Buat kluster terdaftar ACK One.
-
Komponen sistem harus memenuhi persyaratan versi yang tercantum dalam tabel berikut.
Component
Version requirement
Kubernetes
1.18.8 atau yang lebih baru
Helm
3.0 atau yang lebih baru
Docker
19.03.5
Operating system
CentOS 7.6, CentOS 7.7, Ubuntu 16.04, Ubuntu 18.04, Alibaba Cloud Linux
Catatan
Saat menerapkan Job, Anda harus menentukan nama penjadwal sebagai ack-co-scheduler dengan mengatur .template.spec.schedulerName ke ack-co-scheduler.
Instal komponen ack-co-scheduler
Instal menggunakan onectl
Instal onectl di mesin lokal Anda. Untuk informasi selengkapnya, lihat Gunakan onectl untuk mengelola kluster terdaftar.
-
Jalankan perintah berikut untuk menginstal komponen ack-co-scheduler.
onectl addon install ack-co-schedulerOutput yang diharapkan:
Addon ack-co-scheduler, version **** installed.
Instal menggunakan Konsol
-
Masuk ke Container Service Management Console . Di panel navigasi sebelah kiri, klik Clusters.
-
Pada halaman Clusters, klik nama kluster tujuan Anda. Di panel navigasi sebelah kiri, klik Add-ons.
-
Pada halaman Add-ons, klik tab Others. Temukan komponen ack-co-scheduler lalu klik Install di pojok kanan bawah kartu.
-
Pada kotak dialog konfirmasi, klik OK.
Gang scheduling
ACK menerapkan Gang scheduling berdasarkan framework Kube-scheduler baru untuk mengatasi masalah penjadwalan job all-or-nothing yang tidak didukung oleh penjadwal native.
Gunakan templat berikut untuk mengirimkan job terdistribusi TensorFlow ke kluster Anda. Untuk informasi selengkapnya tentang menjalankan job TensorFlow terdistribusi, lihat Gunakan Gang scheduling.
apiVersion: "kubeflow.org/v1"
kind: "TFJob"
metadata:
name: "tf-smoke-gpu"
spec:
tfReplicaSpecs:
PS:
replicas: 1
template:
metadata:
creationTimestamp: null
labels:
pod-group.scheduling.sigs.k8s.io/name: tf-smoke-gpu
pod-group.scheduling.sigs.k8s.io/min-available: "2"
spec:
schedulerName: ack-co-scheduler # Set the scheduler name to ack-co-scheduler.
containers:
- args:
- python
- tf_cnn_benchmarks.py
- --batch_size=32
- --model=resnet50
- --variable_update=parameter_server
- --flush_stdout=true
- --num_gpus=1
- --local_parameter_device=cpu
- --device=cpu
- --data_format=NHWC
image: registry.cn-hangzhou.aliyuncs.com/kubeflow-images-public/tf-benchmarks-cpu:v20171202-bdab599-dirty-284af3
name: tensorflow
ports:
- containerPort: 2222
name: tfjob-port
resources:
limits:
cpu: '10'
workingDir: /opt/tf-benchmarks/scripts/tf_cnn_benchmarks
restartPolicy: OnFailure
Worker:
replicas: 4
template:
metadata:
creationTimestamp: null
labels:
pod-group.scheduling.sigs.k8s.io/name: tf-smoke-gpu
pod-group.scheduling.sigs.k8s.io/min-available: "2"
spec:
schedulerName: ack-co-scheduler
containers:
- args:
- python
- tf_cnn_benchmarks.py
- --batch_size=32
- --model=resnet50
- --variable_update=parameter_server
- --flush_stdout=true
- --num_gpus=1
- --local_parameter_device=cpu
- --device=gpu
- --data_format=NHWC
image: registry.cn-hangzhou.aliyuncs.com/kubeflow-images-public/tf-benchmarks-cpu:v20171202-bdab599-dirty-284af3
name: tensorflow
ports:
- containerPort: 2222
name: tfjob-port
resources:
limits:
cpu: 10
workingDir: /opt/tf-benchmarks/scripts/tf_cnn_benchmarks
restartPolicy: OnFailure
CPU topology-aware scheduling
Sebelum menggunakan CPU topology-aware scheduling, terapkan komponen resource-controller. Untuk informasi selengkapnya, lihat Kelola add-on.
Gunakan templat berikut untuk mengaktifkan CPU topology-aware scheduling dalam deployment. Untuk informasi selengkapnya tentang CPU topology-aware scheduling, lihat Aktifkan CPU topology-aware scheduling.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-numa
labels:
app: nginx-numa
spec:
replicas: 2
selector:
matchLabels:
app: nginx-numa
template:
metadata:
annotations:
cpuset-scheduler: "true"
labels:
app: nginx-numa
spec:
schedulerName: ack-co-scheduler # Set the scheduler name to ack-co-scheduler.
containers:
- name: nginx-numa
image: nginx:1.13.3
ports:
- containerPort: 80
resources:
requests:
cpu: 4
limits:
cpu: 4
ECI elastic scheduling
ECI elastic scheduling adalah kebijakan penjadwalan elastis yang disediakan oleh Alibaba Cloud. Saat menerapkan layanan, Anda dapat menambahkan anotasi untuk menentukan penggunaan hanya sumber daya ECS atau ECI, atau secara otomatis meminta sumber daya ECI ketika sumber daya ECS tidak mencukupi. Fitur ini memenuhi kebutuhan sumber daya elastis yang bervariasi sesuai skenario beban kerja tertentu.
Sebelum menggunakan ECI elastic scheduling, terapkan komponen ack-virtual-node di kluster Anda. Untuk informasi selengkapnya, lihat Gunakan ECI di ACK.
Gunakan templat berikut untuk mengaktifkan ECI elastic scheduling dalam deployment. Untuk informasi selengkapnya tentang penggunaan ECI elastic scheduling, lihat Gunakan ElasticResource untuk menerapkan ECI elastic scheduling (tidak digunakan lagi).
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
replicas: 4
selector:
matchLabels:
app: nginx
template:
metadata:
name: nginx
annotations:
alibabacloud.com/burst-resource: eci # Add an annotation to specify the type of elastic resource.
labels:
app: nginx
spec:
schedulerName: ack-co-scheduler # Set the scheduler name to ack-co-scheduler.
containers:
- name: nginx
image: nginx
resources:
limits:
cpu: 2
requests:
cpu: 2
Konfigurasikan anotasi Pod alibabacloud.com/burst-resource di bawah template.metadata untuk menentukan jenis sumber daya elastis. Nilai yang mungkin untuk alibabacloud.com/burst-resource adalah sebagai berikut:
-
Jika Anda tidak menentukan anotasi ini: Gunakan hanya sumber daya ECS yang tersedia di kluster.
-
eci: Gunakan sumber daya ECI ketika sumber daya ECS di kluster tidak mencukupi. -
eci_only: Gunakan hanya sumber daya ECI dan jangan gunakan sumber daya ECS di kluster.
Shared GPU scheduling
Untuk informasi selengkapnya tentang penggunaan shared GPU scheduling, lihat Jalankan komponen shared GPU scheduling, Pantau dan isolasi sumber daya GPU, dan Kelola GPU bersama menggunakan kelompok node.