Saat menyebarluaskan layanan dalam kluster Container Service for Kubernetes (ACK), Anda dapat menggunakan toleransi dan afinitas node untuk menentukan apakah hanya menggunakan instans Elastic Compute Service (ECS) atau instans kontainer elastis, atau secara otomatis meminta instans kontainer elastis ketika sumber daya ECS tidak mencukupi. Anda juga dapat mengonfigurasi kebijakan penjadwalan yang berbeda untuk menskalakan sumber daya sesuai berbagai skenario.
Istilah
Taints: Aturan yang diterapkan pada node untuk mencegah Pod tertentu dijadwalkan ke node tersebut.
Tolerations: Konfigurasi yang diterapkan pada Pod agar dapat dijadwalkan ke node dengan taint tertentu.
Afinitas node: Properti Pod yang menariknya ke node dengan label tertentu. Jenis afinitas node meliputi:
requiredDuringSchedulingIgnoredDuringExecution: Persyaratan wajib yang harus dipenuhi agar penjadwalan dapat dilakukan. Penjadwal hanya akan menjadwalkan Pod jika aturan ini terpenuhi.preferredDuringSchedulingIgnoredDuringExecution: Preferensi yang dipertimbangkan selama penjadwalan. Penjadwal berusaha menemukan node yang memenuhi aturan tersebut. Jika tidak ada node yang cocok, Pod tetap akan dijadwalkan.
Untuk informasi lebih lanjut, lihat Taints and Tolerations dan Afinitas node.
Prasyarat
Sebuah kluster ACK managed Pro yang menjalankan Kubernetes v1.22 atau versi lebih baru telah dibuat.
Komponen ack-virtual-node telah diterapkan di kluster, dan versinya v2.10.0 atau lebih baru. Untuk informasi tentang cara menginstal dan meningkatkan komponen ack-virtual-node, lihat Node virtual.
Versi komponen kube-scheduler di kluster adalah 5.9 atau lebih baru, dan kebijakan penjadwalan node virtual telah diaktifkan.
Pada halaman Add-ons, temukan Kube Scheduler, klik Configuration, lalu pastikan bahwa Enable Virtual Node-based Pod Scheduling telah dipilih.
Contoh konfigurasi
Node virtual yang diterapkan di kluster ACK memiliki taint default: virtual-kubelet.io/provider=alibabacloud:NoSchedule untuk mencegah penggunaan instans kontainer elastis tanpa sepengetahuan Anda. Oleh karena itu, Anda harus mengonfigurasi toleransi terhadap taint ini agar Pod dapat dijadwalkan ke node virtual dan menggunakan instans kontainer elastis.
tolerations:
- key: virtual-kubelet.io/provider
operator: Equal
value: alibabacloud
effect: NoScheduleDengan menggabungkan toleransi dan afinitas node, Anda dapat menerapkan kebijakan penjadwalan campuran berdasarkan prioritas dan persyaratan untuk memenuhi kebutuhan sumber daya yang berbeda bagi layanan yang berbeda.
Lebih memilih menggunakan instans ECS: Utamakan sumber daya ECS. Jika sumber daya ECS di kluster tidak mencukupi, gunakan instans kontainer elastis.
Hanya menggunakan instans kontainer elastis: Gunakan hanya instans kontainer elastis di kluster.
Hanya menggunakan instans ECS: Gunakan hanya sumber daya ECS yang tersedia di kluster.
Lebih memilih menggunakan instans ECS
Karena node virtual memiliki taint default, Anda harus mengonfigurasi toleransi terhadap taint tersebut agar Pod dapat dijadwalkan ke node virtual. Secara bersamaan, konfigurasikan afinitas node. Dengan menggunakan preferredDuringSchedulingIgnoredDuringExecution, Anda dapat menentukan preferensi penjadwalan Pod: lebih memilih menjadwalkan Pod ke node tanpa label type: virtual-kubelet (node ECS).
apiVersion: apps/v1
kind: Deployment
metadata:
name: ecs-prefer
spec:
replicas: 2
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
tolerations:
- key: virtual-kubelet.io/provider
operator: Equal
value: alibabacloud
effect: NoSchedule
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: type
operator: NotIn
values:
- virtual-kubelet
containers:
- name: my-container
image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6Saat mengonfigurasi afinitas node, perhatikan hal berikut:
Jika Anda mengonfigurasi beberapa kondisi dalam
nodeSelectorTerms(beberapamatchExpressions), Pod dapat dijadwalkan ke node yang sesuai selama salah satu kondisi terpenuhi (kondisi digabungkan dengan operasi logika OR). Jika Anda mengonfigurasi beberapa ekspresi dalam satumatchExpressions, Pod hanya dapat dijadwalkan ke node yang sesuai jika semua ekspresi terpenuhi (ekspresi digabungkan dengan operasi logika AND).Saat menggunakan
preferredDuringSchedulingIgnoredDuringExecutionuntuk menerapkan penjadwalan ECS yang diutamakan, hal ini tidak menjamin bahwa Pod hanya dijadwalkan ke instans kontainer elastis ketika sumber daya ECS tidak mencukupi. Pod mungkin tetap dijadwalkan ke instans kontainer elastis meskipun sumber daya ECS tersedia. Jika Anda memiliki persyaratan yang lebih ketat, kami menyarankan menggabungkanrequiredDuringSchedulingIgnoredDuringExecutionuntuk mengonfigurasi aturan wajib yang lebih rinci.
Jika Anda ingin lebih memilih menyebarluaskan Pod pada node ECS dengan label tertentu (misalnya label_1=key_1) dan menggunakan node virtual untuk skalabilitas elastis ketika sumber daya pada node tersebut tidak mencukupi, Anda dapat menggunakan konfigurasi YAML berikut.
Hanya menggunakan instans kontainer elastis
Karena node virtual memiliki taint default, Anda perlu mengonfigurasi toleransi terhadap taint tersebut agar Pod dapat dijadwalkan ke node virtual. Secara bersamaan, konfigurasikan afinitas node. Dengan menggunakan requiredDuringSchedulingIgnoredDuringExecution, Anda dapat menentukan bahwa Pod harus dijadwalkan ke node dengan label type: virtual-kubelet (node virtual).
apiVersion: apps/v1
kind: Deployment
metadata:
name: eci-only
spec:
replicas: 2
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
tolerations:
- key: virtual-kubelet.io/provider
operator: Equal
value: alibabacloud
effect: NoSchedule
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: type
operator: In
values:
- virtual-kubelet
containers:
- name: my-container
image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
Hanya menggunakan instans ECS
Karena node virtual memiliki taint default, selama Anda tidak mengonfigurasi toleransi terhadap taint tersebut, Pod hanya akan dijadwalkan ke node ECS.
apiVersion: apps/v1
kind: Deployment
metadata:
name: ecs-only
spec:
replicas: 2
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6