Mengadaptasi aplikasi untuk digunakan dalam cluster Kubernetes mixed-OS

Berlaku untuk: AKS di Azure Stack HCI 22H2, AKS di Windows Server

AKS yang diaktifkan oleh Azure Arc memungkinkan Anda menjalankan kluster Kubernetes dengan simpul Linux dan Windows, tetapi Anda harus melakukan pengeditan kecil pada aplikasi untuk digunakan dalam kluster mixed-OS ini. Dalam panduan cara ini, Anda mempelajari cara memastikan aplikasi Anda dijadwalkan pada OS host yang tepat menggunakan pemilih node atau taint dan toleransi.

Artikel ini mengasumsikan pemahaman dasar tentang konsep Kube. Untuk informasi selengkapnya, lihat Konsep inti Kubernetes untuk hibrid AKS.

Pemilih simpul

Pemilih Simpul adalah bidang sederhana dalam spesifikasi pod YAML yang membatasi pod agar hanya dijadwalkan ke simpul sehat yang cocok dengan sistem operasi. Dalam YAML spesifikasi pod Anda, tentukan nodeSelector: Windows atau Linux, seperti yang ditunjukkan dalam contoh berikut:

kubernetes.io/os = Windows

atau,

kubernetes.io/os = Linux

Untuk informasi selengkapnya tentang nodeSelectors, lihat pemilih simpul.

Taint dan toleransi

Taints dan toleransi bekerja sama untuk memastikan bahwa pod tidak dijadwalkan pada node secara tidak sengaja. Sebuah node dapat "ternoda" untuk menolak pod yang tidak secara eksplisit mentolerir taint-nya melalui "toleration" dalam spesifikasi pod YAML.

Simpul OS Windows di AKS Arc dapat dinodai saat dibuat dengan New-AksHciNodePool atau perintah New-AksHciCluster . Anda juga dapat menggunakan perintah ini untuk men-taint node OS Linux. Contoh berikut menodai simpul Windows.

Menerapkan taint ke kluster baru

Jika Anda juga membuat kluster baru, jalankan perintah berikut untuk membuat kumpulan simpul Windows dengan taint. Jika Anda memiliki kluster yang sudah ada yang ingin Anda tambahkan kumpulan simpul dengan taint, lihat contoh berikutnya, yang menggunakan New-AksHciNodePool perintah .

New-AksHciCluster -name mycluster -nodePoolName taintnp -nodeCount 1 -osType Windows -osSku Windows2022 -taints sku=Windows:NoSchedule

Menambahkan kumpulan simpul ternoda ke kluster yang ada

Untuk menambahkan kumpulan simpul yang tercemar ke kluster yang ada, jalankan perintah berikut:

New-AksHciNodePool -clusterName <cluster-name> -nodePoolNAme taintnp -count 1 -osType Windows -osSku Windows2022 -taints sku=Windows:NoSchedule

Jalankan perintah berikut ini untuk memeriksa apakah kumpulan simpul berhasil digunakan dengan cemaran:

Get-AksHciNodePool -clusterName <cluster-name> -name taintnp

Contoh output:

Status       : {Phase, Details}
ClusterName  : mycluster
NodePoolName : taintnp
Version      : v1.20.7-kvapkg.1
OsType       : Windows
NodeCount    : 0
VmSize       : Standard_K8S3_v1
Phase        : Deployed
Taints       : {sku=Windows:NoSchedule}

Tentukan toleransi untuk pod

Anda dapat menentukan toleransi untuk pod dalam YAML spesifikasi pod. Toleransi berikut "cocok" dengan taint yang dibuat oleh kubectl baris taint yang ditunjukkan pada contoh sebelumnya. Hasilnya adalah bahwa pod dengan toleransi dapat menjadwalkan ke simpul yang ternoda.

tolerations:
- key: node.kubernetes.io/os
  operator: Equal
  value: Windows
  effect: NoSchedule

Langkah-langkah di bagian ini berfungsi dengan baik jika Anda memegang kendali atas spesifikasi pod yang Anda sebarkan. Namun, dalam beberapa kasus, pengguna memiliki sejumlah besar penyebaran yang sudah ada sebelumnya untuk kontainer Linux, serta ekosistem konfigurasi umum, seperti Bagan helm komunitas. Anda tidak akan memiliki akses ke spesifikasi pod kecuali Anda ingin mengunduh dan mengedit bagan.

Jika Anda menyebarkan bagan Helm ini ke lingkungan kluster campuran dengan simpul pekerja Linux dan Windows, pod aplikasi Anda gagal dengan kesalahan "ImagePullBackOff". Contohnya:

kubectl get pods
NAMESPACE              NAME                                                    READY   STATUS              RESTARTS   AGE
default                nginx-deployment-558fc78868-795dp                       0/1     ImagePullBackOff    0          6m24s
default                nginx-deployment-6b474476c4-gpb77                       0/1     ImagePullBackOff    0          11m

Dalam hal ini, Anda dapat menggunakan taint untuk membantu hal ini. Simpul Windows Server dapat dinodai dengan pasangan node.kubernetes.io/os=windows:NoSchedulekunci-nilai .

Untuk informasi selengkapnya tentang taint dan toleransi, lihat Taint dan Toleransi.

Langkah berikutnya

Dalam panduan cara ini, Anda belajar cara menambahkan pemilih node atau noda dan toleransi ke kluster Kubernetes Anda menggunakan kubectl. Selanjutnya, Anda dapat: