API yang tidak digunakan lagi di Kubernetes 1.22


Halaman ini menjelaskan cara menyiapkan cluster untuk upgrade ke GKE versi 1.22. Anda dapat menemukan klien API yang melakukan panggilan ke API yang tidak digunakan lagi dihapus di 1.22 dan memperbarui klien tersebut untuk menggunakan GA API. Untuk mengetahui informasi lebih mendetail, lihat panduan migrasi API Kubernetes yang tidak digunakan lagi.

API yang dihapus di versi 1.22

Sebagian besar API yang tidak digunakan lagi di Kubernetes versi 1.22 adalah bekas API Beta yang telah ditingkatkan dari Beta (v1beta1) ke GA (v1). API GA memberikan jaminan kompatibilitas jangka panjang dan harus digunakan sebagai pengganti API Beta yang sudah tidak digunakan lagi.

Semua objek yang ada dapat diakses menggunakan API GA.

Resource webhook

API versi Beta dari MutatingWebhookConfiguration dan ValidatingWebhookConfiguration tidak digunakan lagi mulai versi 1.22.

  • Migrasikan manifes dan klien API untuk menggunakan versi API admissionregistration.k8s.io/v1.
  • Lihat tabel berikut yang menjelaskan perubahan penting dalam API versi GA:

    Kolom Perubahan
    webhooks[*].failurePolicy Default diubah dari Ignore menjadi Fail.
    webhooks[*].matchPolicy Default diubah dari Exact menjadi Equivalent.
    webhooks[*].timeoutSeconds Default diubah dari 30s menjadi 10s.
    webhooks[*].sideEffects Nilai default dihapus, dan kolom ini kini wajib ada. Hanya None dan NoneOnDryRun yang diizinkan.
    webhooks[*].admissionReviewVersions Nilai default dihapus dan kolom ini kini wajib ada (versi yang didukung untuk AdmissionReview adalah v1 dan v1beta1).
    webhooks[*].name Harus unik dalam daftar untuk objek yang dibuat melalui admissionregistration.k8s.io/v1.

CustomResourceDefinition

API versi Beta dari CustomResourceDefinition tidak digunakan lagi mulai versi 1.22.

  • Migrasikan manifes dan klien API untuk menggunakan versi API apiextensions.k8s.io/v1.
  • Lihat tabel berikut yang menjelaskan perubahan penting dalam API versi GA:

    Kolom Perubahan
    spec.scope Tidak lagi di-default-kan ke Namespaced. Nilai ini harus ditentukan secara eksplisit.
    spec.version Dihapus. Sebagai gantinya, gunakan spec.versions.
    spec.validation Dihapus. Sebagai gantinya, gunakan spec.versions[*].schema.
    spec.subresources Dihapus. Sebagai gantinya, gunakan spec.versions[*].subresources.
    spec.additionalPrinterColumns Dihapus. Sebagai gantinya, gunakan spec.versions[*].additionalPrinterColumns.
    spec.conversion.webhookClientConfig Dipindahkan to spec.conversion.webhook.clientConfig.
    spec.conversion.conversionReviewVersions Dipindahkan to spec.conversion.webhook.conversionReviewVersions.
    spec.versions[*].schema.openAPIV3Schema Sekarang wajib ada saat membuat objek CustomResourceDefinition v1, dan harus berupa skema struktural.
    spec.preserveUnknownFields Nilai true tidak diizinkan saat membuat objek CustomResourceDefinition v1. Nilai harus ditentukan dalam definisi skema sebagai x-kubernetes-preserve-unknown-fields: true.
    additionalPrinterColumns Dalam item additionalPrinterColumns, nama kolom JSONPath diganti menjadi jsonPath.

APIService

API versi Beta dari APIService tidak digunakan lagi mulai versi 1.22. Migrasikan manifes dan klien API untuk menggunakan versi API apiregistration.k8s.io/v1.

TokenReview

API versi Beta dari TokenReview tidak digunakan lagi mulai versi 1.22. Migrasikan manifes dan klien API untuk menggunakan versi API authentication.k8s.io/v1.

Resource SubjectAccessReview

API versi Beta dari LocalSubjectAccessReview, SelfSubjectAccessReview, dan SubjectAccessReview tidak digunakan lagi mulai versi 1.22.

  • Migrasikan manifes dan klien API untuk menggunakan versi API authorization.k8s.io/v1.
  • Lihat tabel berikut yang menjelaskan perubahan penting dalam API versi GA:

    Kolom Perubahan
    spec.group Diganti namanya menjadi spec.groups.

CertificateSigningRequest

API versi Beta dari CertificateSigningRequest tidak digunakan lagi mulai versi 1.22.

  • Migrasikan manifes dan klien API untuk menggunakan versi API certificates.k8s.io/v1.
  • Lihat tabel berikut yang menjelaskan perubahan penting dalam API versi GA:

    Kolom Perubahan
    spec.signerName Untuk klien API yang meminta sertifikat, kolom ini wajib ada (lihat penanda tangan Kubernetes yang diketahui), dan permintaan untuk kubernetes.io/legacy-unknown tidak diizinkan untuk dibuat melalui certificates.k8s.io/v1 API.
    spec.usages Untuk klien API yang meminta sertifikat, kolom ini wajib ada. Kolom ini tidak boleh berisi nilai duplikat, dan hanya boleh berisi penggunaan yang diketahui.
    status.conditions Untuk klien API yang menyetujui atau menandatangani sertifikat, kolom ini tidak boleh berisi jenis duplikat.
    status.conditions[*].status Untuk klien API yang menyetujui atau menandatangani sertifikat, kolom ini sekarang wajib ada.
    status.certificate Untuk klien API yang menyetujui atau menandatangani sertifikat, kolom ini harus berenkode PEM dan hanya berisi blok CERTIFICATE.

Lease

API versi Beta dari Lease tidak digunakan lagi mulai versi 1.22. Migrasikan manifes dan klien API untuk menggunakan versi API coordination.k8s.io/v1.

Ingress (tersedia hingga 1.23 untuk cluster yang dibuat pada versi 1.21 atau yang lebih lama)

API versi Beta (extensions/v1beta1 dan networking.k8s.io/v1beta1) dari Ingress tidak digunakan lagi untuk cluster GKE yang menjalankan versi 1.22 atau yang lebih baru jika cluster dibuat pada versi 1.22 atau yang lebih baru.

Namun, untuk cluster yang dibuat di GKE versi 1.21 atau yang lebih lama yang kemudian diupgrade ke versi 1.22 pada patch versi 1.22.7-gke.300 atau yang lebih baru, Anda masih dapat menggunakan API versi Beta sampai cluster diupgrade ke versi 1.23. Ini adalah pengecualian satu kali untuk cluster lama yang dimaksudkan untuk memberi Anda kesempatan memigrasikan cluster agar tidak menggunakan versi API ini, yang telah dihapus dari Kubernetes open source pada versi 1.22.

Semua cluster yang menjalankan GKE versi 1.23 dan yang lebih baru tidak akan lagi menggunakan API Ingress versi beta yang telah dihentikan. Manifes yang menggunakan versi API tersebut tidak dapat lagi diterapkan. Objek yang sebelumnya dipertahankan akan tetap berfungsi serta dapat dilihat dan diupdate menggunakan API versi baru, sebelum dan setelah upgrade ke 1.23.

  • Migrasikan manifes dan klien API untuk menggunakan versi API networking.k8s.io/v1.
  • Lihat tabel berikut yang menjelaskan perubahan penting dalam API versi GA:

    Kolom Perubahan
    spec.backend Diganti namanya menjadi spec.defaultBackend.
    backend serviceName Diganti namanya menjadi service.name.
    servicePort Kolom servicePort backend numerik diganti namanya menjadi service.port.number. Kolom servicePort backend string diganti namanya menjadi service.port.name.
    pathType Sekarang wajib ada untuk setiap jalur yang ditentukan. Nilainya dapat: Prefix, Exact, atau ImplementationSpecific. Untuk mencocokkan dengan perilaku v1beta1 yang tidak ditentukan, gunakan ImplementationSpecific.

Manifes berikut menjelaskan Ingress yang sama di v1 dan v1beta1:

Manifes v1beta1

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: example
spec:
  backend:
    serviceName: default-backend
    servicePort: 80
  rules:
  - http:
      paths:
      - path: /testpath
        backend:
          serviceName: test
          servicePort: 80

Manifes v1

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example
spec:
  defaultBackend:
    service:
      name: default-backend
      port:
        number: 80
  rules:
  - http:
      paths:
      - path: /testpath
        pathType: ImplementationSpecific
        backend:
          service:
            name: test
            port:
              number: 80

Anda dapat menggunakan kueri berikut untuk cluster dengan kemampuan observasi Google Cloud yang diaktifkan guna mengidentifikasi klien yang mengakses Ingress v1beta1 API:

resource.type="k8s_cluster"
resource.labels.cluster_name="$CLUSTER_NAME"
protoPayload.authenticationInfo.principalEmail:("system:serviceaccount" OR "@")
protoPayload.request.apiVersion=("extensions/v1beta1" OR "networking.k8s.io/v1beta1")
protoPayload.request.kind="Ingress"
NOT ("kube-system")

IngressClass

API versi Beta dari IngressClass tidak digunakan lagi mulai versi 1.22. Migrasikan manifes dan klien API untuk menggunakan versi API networking.k8s.io/v1.

Resource RBAC

API versi Beta dari ClusterRole, ClusterRoleBinding, Role, dan RoleBinding tidak digunakan lagi mulai versi 1.22. Migrasikan manifes dan klien API untuk menggunakan versi API rbac.authorization.k8s.io/v1.

PriorityClass

API versi Beta dari PriorityClass tidak digunakan lagi mulai versi 1.22. Migrasikan manifes dan klien API untuk menggunakan versi API scheduling.k8s.io/v1.

Resource Storage

API versi Beta dari CSIDriver, CSINode, StorageClass, dan VolumeAttachment tidak digunakan lagi mulai versi 1.22. Migrasikan manifes dan klien API untuk menggunakan versi API storage.k8s.io/v1.

Menemukan cluster yang menggunakan API yang tidak digunakan lagi

Anda dapat menemukan cluster mana yang menggunakan API yang tidak digunakan lagi melalui insight penghentian penggunaan. Insight penghentian penggunaan juga menyediakan informasi seperti klien API mana yang memanggil API yang tidak digunakan lagi di cluster Anda.

Anda juga dapat menggunakan log audit untuk menemukan klien mana yang melakukan panggilan ke API yang tidak digunakan lagi.

Menemukan klien API yang melakukan panggilan tulis ke API yang tidak digunakan lagi

Untuk cluster dengan Google Cloud Observability yang diaktifkan, Anda dapat menggunakan kueri log audit Aktivitas Admin berikut untuk menampilkan penggunaan API yang tidak digunakan lagi oleh agen pengguna yang tidak dikelola oleh Google:

resource.type="k8s_cluster"
labels."k8s.io/removed-release"="DEPRECATED_API_MINOR_VERSION"
protoPayload.authenticationInfo.principalEmail:("system:serviceaccount" OR "@")
protoPayload.authenticationInfo.principalEmail!~("system:serviceaccount:kube-system:")

Ganti DEPRECATED_API_MINOR_VERSION dengan versi minor yang menghapus API yang tidak digunakan lagi, misalnya 1.22.

Log audit Aktivitas Admin diaktifkan secara otomatis untuk cluster GKE. Dengan kueri ini, log menampilkan agen pengguna yang melakukan panggilan tulis ke API yang tidak digunakan lagi.

Menemukan klien API yang melakukan panggilan baca ke API yang tidak digunakan lagi

Secara default, log audit hanya menampilkan panggilan tulis ke API yang tidak digunakan lagi. Untuk juga menampilkan panggilan baca ke API yang tidak digunakan lagi, konfigurasi log audit Akses Data.

Ikuti petunjuk untuk Mengonfigurasi log audit Akses Data dengan Konsol Google Cloud. Di Konsol Google Cloud, pilih Kubernetes Engine API. Di tab Log Types pada panel informasi, pilih Admin Read dan Data Read.

Dengan mengaktifkan log ini, Anda kini dapat menggunakan kueri asli untuk melihat panggilan baca dan panggilan tulis ke API yang tidak digunakan lagi.

Mengupgrade komponen pihak ketiga

Insight penghentian penggunaan dapat menampilkan hasil untuk agen pihak ketiga yang melakukan panggilan ke API yang tidak digunakan lagi di cluster Anda.

Untuk mengatasi insight ini, coba langkah-langkah berikut:

  1. Hubungi penyedia software pihak ketiga Anda untuk mengetahui apakah mereka memiliki versi yang telah diupdate.
  2. Upgrade software pihak ketiga ke versi terbarunya. Jika tidak dapat mengupgrade software, Anda harus menguji apakah mengupgrade GKE ke versi tersebut, dan menghapus API yang tidak digunakan lagi, akan merusak layanan Anda.

Sebaiknya lakukan upgrade ini dan upgrade versi GKE pada cluster staging untuk memantau gangguan sebelum Anda mengupgrade cluster produksi.

Bersiap untuk upgrade ke versi 1.22

Anda tidak perlu menghapus dan membuat ulang objek API apa pun. Semua objek API lama yang dipertahankan sudah dapat dibaca dan diupdate menggunakan API versi baru. Namun, sebaiknya migrasikan klien dan manifes Anda sebelum mengupgrade ke Kubernetes 1.22. Pelajari lebih lanjut di bagian "Yang harus dilakukan" dalam Panduan Migrasi API Kubernetes yang Tidak Digunakan Lagi.

Anda dapat melihat insight dan rekomendasi penghentian penggunaan untuk menentukan apakah cluster Anda menggunakan fitur atau API Kubernetes yang tidak digunakan lagi. Insight penghentian penggunaan didasarkan pada panggilan API teramati ke API yang tidak digunakan lagi oleh agen pengguna, bukan konfigurasi objek Kubernetes Anda.

Mengupdate cluster yang terdampak oleh penghentian penggunaan

Untuk mengupgrade cluster yang terdampak oleh penghentian penggunaan, lakukan langkah-langkah berikut:

  1. Periksa agen pengguna yang menggunakan API yang tidak digunakan lagi di insight penghentian penggunaan atau log.
  2. Update agen pengguna yang menggunakan API yang tidak digunakan lagi agar menggunakan versi API yang didukung.
  3. Update software pihak ketiga yang memanggil API yang tidak digunakan lagi ke versi terbarunya.
  4. Upgrade cluster pengujian dan uji aplikasi Anda di lingkungan pengujian sebelum mengupgrade cluster produksi untuk mengurangi risiko gangguan saat API yang tidak digunakan lagi tidak lagi tersedia.
  5. Setelah Anda mengupdate semua agen pengguna, GKE menunggu hingga tidak ada lagi penggunaan API yang tidak digunakan lagi selama 30 hari, lalu membatalkan pemblokiran upgrade otomatis. Upgrade otomatis akan dilanjutkan sesuai dengan jadwal rilis.
  6. Jika Anda tidak dapat mengupdate agen pengguna yang terdampak, upgrade cluster pengujian terpisah untuk memeriksa apakah upgrade tersebut menyebabkan gangguan. Jika upgrade itu tidak menyebabkan gangguan, Anda dapat mengupgrade cluster secara manual.

Referensi

Informasi selengkapnya tersedia di dokumentasi OSS Kubernetes: