View a markdown version of this page

Menghindari kesalahan OOM - Amazon EKS

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

Menghindari kesalahan OOM

Windows tidak memiliki pembunuh proses di luar memori seperti Linux. Windows selalu memperlakukan semua alokasi memori mode pengguna sebagai virtual, dan file halaman wajib. Efek akhirnya adalah bahwa Windows tidak akan menjangkau kondisi memori dengan cara yang sama seperti yang dilakukan Linux. Proses akan halaman ke disk alih-alih tunduk pada penghentian kehabisan memori (OOM). Jika memori terlalu disediakan dan semua memori fisik habis, maka paging dapat memperlambat kinerja.

Sistem reservasi dan memori kubelet

Berbeda dengan Linux di mana --kubelet-reserve menangkap reservasi sumber daya untuk daemon sistem kubernetes seperti kubelet, runtime container, dll; dan --system-reserve menangkap reservasi sumber daya untuk daemon sistem OS seperti sshd, udev dan lain-lain. Pada Windows, bendera ini tidak menangkap dan menetapkan batas memori pada kubelet atau proses yang berjalan pada node.

Namun, Anda dapat menggabungkan flag ini NodeAllocatable untuk mengelola mengurangi Kapasitas pada node dengan batas sumber daya memori manifes Pod untuk mengontrol alokasi memori per pod. Dengan menggunakan strategi ini, Anda memiliki kontrol alokasi memori yang lebih baik serta mekanisme untuk meminimalkan kehabisan memori (OOM) pada node Windows.

Pada node Windows, praktik terbaik adalah mencadangkan setidaknya 2GB memori untuk OS dan proses. Gunakan --kubelet-reserve and/or --system-reserve untuk mengurangi NodeAllocatable.

Mengikuti dokumentasi node Self-managed Windows Amazon EKS, gunakan CloudFormation template untuk meluncurkan grup node Windows baru dengan penyesuaian ke konfigurasi kubelet. Ini CloudFormation memiliki elemen BootstrapArguments yang disebut yang sama denganKubeletExtraArgs. Gunakan dengan bendera dan nilai berikut:

--kube-reserved memory=0.5Gi,ephemeral-storage=1Gi --system-reserved memory=1.5Gi,ephemeral-storage=1Gi --eviction-hard memory.available<200Mi,nodefs.available<10%"

Jika eksctl adalah alat penerapan, periksa dokumentasi berikut untuk menyesuaikan konfigurasi kubelet https://eksctl.io/usage/customizing-the-kubelet/

Persyaratan memori wadah Windows

Sesu ai dokumentasi Microsoft, gambar dasar Windows Server untuk NANO membutuhkan setidaknya 30MB, sedangkan Server Core membutuhkan 45MB. Angka-angka ini bertambah saat Anda menambahkan komponen Windows seperti.NET Framework, Layanan Web sebagai IIS dan aplikasi.

Sangat penting bagi Anda untuk mengetahui jumlah minimum memori yang diperlukan oleh image wadah Windows Anda, yaitu gambar dasar ditambah lapisan aplikasinya, dan mengaturnya sebagai wadah resources/requests dalam spesifikasi pod. Anda juga harus menetapkan batas untuk menghindari pod menggunakan semua memori node yang tersedia jika terjadi masalah aplikasi.

Dalam contoh di bawah ini, ketika penjadwal Kubernetes mencoba menempatkan pod pada node, permintaan pod digunakan untuk menentukan node mana yang memiliki sumber daya yang cukup tersedia untuk penjadwalan.

spec: - name: iis image: mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019 resources: limits: cpu: 1 memory: 800Mi requests: cpu: .1 memory: 128Mi

Kesimpulan

Menggunakan pendekatan ini meminimalkan risiko kelelahan memori tetapi tidak mencegahnya terjadi. Menggunakan Amazon CloudWatch Metrics, Anda dapat mengatur peringatan dan remediasi jika terjadi kehabisan memori.