

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Menjalankan beban kerja Heterogen
<a name="windows-scheduling"></a>

Kubernetes memiliki dukungan untuk cluster heterogen di mana Anda dapat memiliki campuran node Linux dan Windows di cluster yang sama. Di dalam cluster itu, Anda dapat memiliki campuran Pod yang berjalan di Linux dan Pod yang berjalan di Windows. Anda bahkan dapat menjalankan beberapa versi Windows di cluster yang sama. Namun, ada beberapa faktor (seperti yang disebutkan di bawah) yang perlu diperhitungkan saat membuat keputusan ini.

## Menetapkan POD ke Node Praktik terbaik
<a name="_assigning_pods_to_nodes_best_practices"></a>

Untuk menjaga beban kerja Linux dan Windows pada OS-specific node masing-masing, Anda perlu menggunakan beberapa kombinasi pemilih node dan. taints/tolerations Tujuan utama penjadwalan beban kerja di lingkungan yang heterogen adalah untuk menghindari kerusakan kompatibilitas untuk beban kerja Linux yang ada.

## Memastikan OS-specific beban kerja mendarat di host kontainer yang sesuai
<a name="_ensuring_os_specific_workloads_land_on_the_appropriate_container_host"></a>

Pengguna dapat memastikan wadah Windows dapat dijadwalkan pada host yang sesuai menggunakan NodeSelectors. Semua node Kubernetes saat ini memiliki label default berikut:

```
kubernetes.io/os = [windows|linux]
kubernetes.io/arch = [amd64|arm64|...]
```

Jika spesifikasi Pod tidak menyertakan NodeSelector seperti`"kubernetes.io/os": windows`, Pod dapat dijadwalkan pada host mana pun, Windows atau Linux. Ini bisa menjadi masalah karena wadah Windows hanya dapat berjalan di Windows dan wadah Linux hanya dapat berjalan di Linux.

Di lingkungan Enterprise, tidak jarang memiliki sejumlah besar penerapan yang sudah ada sebelumnya untuk wadah Linux, serta ekosistem konfigurasi off-the-shelf, seperti bagan Helm. Dalam situasi ini, Anda mungkin ragu untuk membuat perubahan pada NodeSelectors penerapan. **Alternatifnya adalah dengan menggunakan Taints.**

Misalnya: `--register-with-taints='os=windows:NoSchedule'` 

Jika Anda menggunakan EKS, eksctl menawarkan cara untuk menerapkan taints melalui ClusterConfig:

```
NodeGroups:
  - name: windows-ng
    amiFamily: WindowsServer2022FullContainer
    ...
    labels:
      nodeclass: windows2022
    taints:
      os: "windows:NoSchedule"
```

Menambahkan taint ke semua node Windows, scheduler tidak akan menjadwalkan pod pada node tersebut kecuali mereka mentolerir taint. Contoh manifes Pod:

```
nodeSelector:
    kubernetes.io/os: windows
tolerations:
    - key: "os"
      operator: "Equal"
      value: "windows"
      effect: "NoSchedule"
```

## Menangani beberapa build Windows di cluster yang sama
<a name="_handling_multiple_windows_build_in_the_same_cluster"></a>

Image dasar kontainer Windows yang digunakan oleh setiap pod harus cocok dengan versi build kernel yang sama dengan node. **Jika Anda ingin menggunakan beberapa build Windows Server di cluster yang sama, maka Anda harus menetapkan label node tambahan, NodeSelectors atau memanfaatkan label yang disebut windows-build.**

**Kubernetes 1.17 secara otomatis menambahkan label baru node.kubernetes. io/windows-build** untuk menyederhanakan pengelolaan beberapa Windows build di cluster yang sama. Jika Anda menjalankan versi yang lebih lama, maka disarankan untuk menambahkan label ini secara manual ke node Windows.

Label ini mencerminkan nomor mayor, minor, dan build Windows yang perlu dicocokkan untuk kompatibilitas. Di bawah ini adalah nilai yang digunakan hari ini untuk setiap versi Windows Server.

Penting untuk dicatat bahwa Windows Server pindah ke Long-Term Servicing Channel (LTSC) sebagai saluran rilis utama. Windows Server Semi-Annual Channel (SAC) pensiun pada 9 Agustus 2022. Tidak akan ada rilis SAC masa depan dari Windows Server.


| Nama Produk | Membangun Nomor (s) | 
| --- | --- | 
| Server penuh 2022 LTSC | 10.0.20348 | 
| Inti server 2019 LTSC | 10.0.17763 | 

Dimungkinkan untuk memeriksa versi build OS melalui perintah berikut:

```
kubectl get nodes -o wide
```

 KERNEL-VERSION Outputnya cocok dengan versi build OS Windows.

```
NAME                          STATUS   ROLES    AGE   VERSION                INTERNAL-IP   EXTERNAL-IP     OS-IMAGE                         KERNEL-VERSION                  CONTAINER-RUNTIME
ip-10-10-2-235.ec2.internal   Ready    <none>   23m   v1.24.7-eks-fb459a0    10.10.2.235   3.236.30.157    Windows Server 2022 Datacenter   10.0.20348.1607                 containerd://1.6.6
ip-10-10-31-27.ec2.internal   Ready    <none>   23m   v1.24.7-eks-fb459a0    10.10.31.27   44.204.218.24   Windows Server 2019 Datacenter   10.0.17763.4131                 containerd://1.6.6
ip-10-10-7-54.ec2.internal    Ready    <none>   31m   v1.24.11-eks-a59e1f0   10.10.7.54    3.227.8.172     Amazon Linux 2                   5.10.173-154.642.amzn2.x86_64   containerd://1.6.19
```

Contoh di bawah ini menerapkan nodeSelector tambahan ke manifes pod agar sesuai dengan Windows-build versi yang benar saat menjalankan versi OS grup node Windows yang berbeda.

```
nodeSelector:
    kubernetes.io/os: windows
    node.kubernetes.io/windows-build: '10.0.20348'
tolerations:
    - key: "os"
    operator: "Equal"
    value: "windows"
    effect: "NoSchedule"
```

## Penyederhanaan NodeSelector dan Tolerasi dalam manifes Pod menggunakan RuntimeClass
<a name="_simplifying_nodeselector_and_toleration_in_pod_manifests_using_runtimeclass"></a>

Anda juga dapat memanfaatkan RuntimeClass untuk menyederhanakan proses penggunaan noda dan toleransi. Ini dapat dicapai dengan membuat RuntimeClass objek yang digunakan untuk merangkum noda dan toleransi ini.

Buat RuntimeClass dengan menjalankan manifes berikut:

```
apiVersion: node.k8s.io/v1beta1
kind: RuntimeClass
metadata:
  name: windows-2022
handler: 'docker'
scheduling:
  nodeSelector:
    kubernetes.io/os: 'windows'
    kubernetes.io/arch: 'amd64'
    node.kubernetes.io/windows-build: '10.0.20348'
  tolerations:
  - effect: NoSchedule
    key: os
    operator: Equal
    value: "windows"
```

Setelah Runtimeclass dibuat, tetapkan sebagai Spec pada manifes Pod:

```
apiVersion: apps/v1
kind: Deployment
metadata:
  name: iis-2022
  labels:
    app: iis-2022
spec:
  replicas: 1
  template:
    metadata:
      name: iis-2022
      labels:
        app: iis-2022
    spec:
      runtimeClassName: windows-2022
      containers:
      - name: iis
```

## Dukungan Grup Node Terkelola
<a name="_managed_node_group_support"></a>

Untuk membantu pelanggan menjalankan aplikasi Windows mereka dengan cara yang lebih efisien, AWS meluncurkan dukungan untuk dukungan Amazon [EKS Managed Node Group (MNG) untuk container Windows](https://aws.amazon.com/about-aws/whats-new/2022/12/amazon-eks-automated-provisioning-lifecycle-management-windows-containers/) pada 15 Desember 2022. [Untuk membantu menyelaraskan tim operasi, [MNG Windows](https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html) diaktifkan menggunakan alur kerja dan alat yang sama seperti MNG Linux.](https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html) Versi keluarga AMI (Amazon Machine Image) lengkap dan inti dari Windows Server 2019 dan 2022 didukung.

Keluarga AMI berikut didukung untuk Grup Node Terkelola (MNG).


| Keluarga AMI | 
| --- | 
| Windows\_Core\_2019\_x86\_64 | 
| Windows\_Full\_2019\_x86\_64 | 
| Windows\_Core\_2022\_X86\_64 | 
| Windows\_Full\_2022\_x86\_64 | 

## Dokumentasi tambahan
<a name="_additional_documentations"></a>

Dokumentasi Resmi AWS: https://docs.aws.amazon.com/eks/latest/userguide/windows-support.html

Untuk lebih memahami cara kerja Pod Networking (CNI), periksa tautan berikut: https://docs.aws.amazon.com/eks/latest/userguide/pod-networking.html

Blog AWS tentang Menerapkan Grup Node Terkelola untuk Windows di EKS: https://aws.amazon.com/blogs/containers/deploying-amazon-eks-windows-managed-node-groups/