Memperpanjang runtime Pod Autopilot


Halaman ini menunjukkan cara meminta runtime yang diperpanjang untuk Pod sebelum dikeluarkan oleh Google Kubernetes Engine (GKE).

Tentang penghapusan Pod yang dimulai oleh GKE

Penghapusan pod adalah bagian yang normal saat menjalankan workload di Kubernetes. GKE menghapus workload selama peristiwa terjadwal, seperti upgrade node otomatis dan penurunan skala penskalaan otomatis, untuk memastikan bahwa node Anda sudah yang terbaru dan dioptimalkan untuk penggunaan resource yang efisien. Secara default, GKE mengirimkan sinyal penghentian ke container segera setelah peristiwa terjadi, setelah itu container memiliki masa tenggang untuk berhenti sebelum Kubernetes mengeluarkan Pod. Untuk upgrade node otomatis, masa tenggang dapat mencapai satu jam. Untuk peristiwa penurunan skala, masa tenggang dapat mencapai 10 menit.

Kubernetes memiliki fitur bawaan yang dapat digunakan container untuk menangani penghapusan dengan baik, seperti PodDisruptionBudgets dan periode penghentian secara tuntas. Namun, beberapa workload, seperti antrean batch atau server game multiplayer, harus berjalan untuk jangka waktu yang lebih lama sebelum dikeluarkan. Masa tenggang default yang diberikan GKE selama penghapusan yang dimulai oleh GKE mungkin tidak cukup untuk workload ini. Dalam situasi ini, Anda dapat memberi tahu Autopilot untuk menghindari penghapusan workload tertentu hingga 7 hari.

Kasus penggunaan

Beberapa situasi yang dapat membuat Anda perlu memberi tahu GKE untuk menghindari penghapusan workload meliputi:

  • Anda menjalankan server game multiplayer yang akan mengeluarkan pemain dari sesi mereka jika server dihentikan lebih awal.
  • Anda menjalankan software konferensi audio atau video yang akan mengganggu rapat yang sedang berlangsung jika server dihentikan.
  • Anda menjalankan tugas yang memerlukan waktu untuk diselesaikan, dan penghentian lebih awal akan menyebabkan hilangnya pekerjaan yang sedang berlangsung.
  • Anda menjalankan layanan stateful yang tidak terlalu toleran terhadap gangguan dan Anda ingin meminimalkan frekuensi terjadinya gangguan.

Harga

Anda dapat meminta runtime yang diperpanjang untuk Pod Anda tanpa biaya tambahan. Namun, pertimbangkan perubahan perilaku berikut yang dapat memengaruhi harga Anda:

  • Cluster autopilot menerapkan nilai minimum yang lebih tinggi untuk permintaan resource untuk Pod dengan durasi yang lebih lama. Cluster Autopilot menagih Anda untuk permintaan resource dari Pod yang sedang berjalan. Anda tidak dikenai biaya untuk overhead sistem atau kapasitas node yang tidak digunakan.
  • Menggunakan Pod dengan durasi yang diperpanjang dapat meningkatkan jumlah node dalam cluster Anda, yang dapat memengaruhi penggunaan dan skalabilitas alamat IP. Jika Anda memiliki DaemonSets yang berjalan pada setiap node, ini akan menghasilkan lebih banyak DaemonSets dalam cluster,

Untuk mengetahui detail harga, lihat Harga Autopilot.

Sebelum memulai

Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Jika ingin menggunakan Google Cloud CLI untuk tugas ini, instal lalu initialize gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan gcloud components update.
  • Pastikan Anda memiliki cluster Autopilot yang menjalankan versi 1.27 atau yang lebih baru.

Batasan

  • Anda tidak dapat meminta waktu percobaan yang diperpanjang untuk Pod Spot Anda.
  • Waktu ambil image dihitung saat menghitung runtime yang diperpanjang.
  • Anda dapat memiliki maksimal 50 workload dengan durasi yang lebih lama (dengan permintaan CPU yang berbeda) di setiap cluster. Artinya, hingga 50 kumpulan nilai permintaan CPU yang berbeda, setelah lulus pemeriksaan ukuran minimum, rasio, dan penambahan ukuran resource Autopilot, dapat memperpanjang durasi di setiap cluster.
  • Anda tidak dapat menggunakan afinitas antar-Pod Kubernetes dalam Pod dengan durasi yang diperpanjang.
  • Jika memungkinkan, GKE menempatkan setiap Pod waktu proses yang diperpanjang di node-nya sendiri. Perilaku ini memastikan bahwa node dapat memperkecil skala jika kurang digunakan.

Meminta perpanjangan runtime

Untuk meminta perpanjangan runtime untuk Pod, setel anotasi cluster-autoscaler.kubernetes.io/safe-to-evict Kubernetes ke false di spesifikasi Pod.

  1. Simpan manifes berikut sebagai extended-deployment.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: extended-pods
      labels:
        duration: extended
    spec:
      selector:
        matchLabels:
          duration: extended
      template:
        metadata:
          annotations:
            cluster-autoscaler.kubernetes.io/safe-to-evict: "false"
          labels:
            duration: extended
        spec:
          containers:
          - name: example-container
            image: registry.k8s.io/pause
            resources:
              requests:
                cpu: 200m
    
  2. Membuat Deployment:

    kubectl create -f extended-deployment.yaml
    

Pod akan terus berjalan minimal selama 7 hari sebelum penurunan skala atau upgrade otomatis node dapat terjadi.

Pertimbangan dan rekomendasi

Saat Anda menggunakan fungsi ini, pertimbangkan hal-hal berikut:

  • Pod dengan durasi yang lebih lama tidak dilindungi dari penghapusan berbasis prioritas. Jika Anda menggunakan Kubernetes PriorityClasses, pertimbangkan metode berikut untuk meminimalkan kemungkinan penghapusan berbasis prioritas:
    • Pastikan Pod dengan durasi yang diperpanjang menggunakan prioritas tertinggi PriorityClass, sehingga Pod pengguna lain tidak mengeluarkan Pod dengan durasi yang diperpanjang.
    • Gunakan pemisahan workload untuk menjalankan Pod dengan durasi yang diperpanjang secara terpisah dari Pod lainnya.
  • Pod Sistem berjalan dengan prioritas tertinggi dan akan selalu dapat menghapus Pod dengan durasi yang diperpanjang. Untuk meminimalkan kemungkinan hal ini, GKE menjadwalkan Pod sistem pada node sebelum menjadwalkan Pod dengan durasi yang diperpanjang.
  • Pod dengan durasi yang lebih lama masih dapat dikeluarkan lebih awal dalam situasi berikut:
    • Penghapusan untuk memberi ruang bagi Pod pengguna dengan prioritas lebih tinggi (menggunakan PriorityClass yang lebih tinggi)
    • Penghapusan untuk menyediakan ruang bagi komponen sistem Kubernetes
    • Penghapusan kehabisan memori kubelet jika Pod menggunakan lebih banyak memori dari yang diminta (OOMKill)
    • Peristiwa pemeliharaan VM Compute Engine. Jenis mesin yang dioptimalkan akselerator lebih cenderung terpengaruh oleh peristiwa ini karena mesin tersebut tidak mendukung migrasi langsung.
    • Perbaikan otomatis node
    • Peristiwa yang dimulai pengguna seperti menghabiskan node
  • Anda dapat menggunakan anotasi cluster-autoscaler.kubernetes.io/safe-to-evict di cluster Standard, tetapi hasilnya tidak sama. Pod berjalan tanpa batas waktu meskipun terjadi peristiwa penurunan skala, sehingga mencegah penghapusan node yang kurang dimanfaatkan dan menyebabkan Anda terus membayar node tersebut. Pod juga tidak terlindungi dari penghapusan yang disebabkan oleh upgrade otomatis node.

Langkah selanjutnya