Menyesuaikan konfigurasi containerd di node GKE

Halaman ini menunjukkan cara menyesuaikan konfigurasi runtime container containerd di node Google Kubernetes Engine (GKE). Sebelum membaca dokumen ini, pastikan Anda memahami apa yang dimaksud dengan runtime container dan alasan Anda ingin menyesuaikannya.

Tentang konfigurasi containerd di GKE

Anda dapat mengonfigurasi serangkaian opsi secara manual di runtime containerd pada node GKE yang menjalankan sistem operasi seperti Container-Optimized OS. Dengan menyesuaikan runtime, Anda dapat mengonfigurasi persyaratan khusus seperti akses ke registry image pribadi. Untuk menetapkan opsi ini, Anda membuat file YAML yang disebut file konfigurasi runtime dan meneruskan file tersebut ke GKE saat Anda membuat atau memperbarui cluster.

Metode penyesuaian containerd ini memungkinkan Anda menghindari deployment DaemonSet yang memiliki hak istimewa, yang merupakan risiko keamanan. Saat Anda memberikan file konfigurasi runtime ke GKE, GKE akan membuat ulang node Anda dan memperbarui file config.toml containerd di setiap node dengan konfigurasi Anda. Konfigurasi tetap ada selama penghentian, upgrade, dan pembuatan ulang node.

File konfigurasi runtime hanya memungkinkan Anda mengonfigurasi opsi di containerd. GKE juga mendukung konfigurasi opsi kubelet tertentu dan opsi kernel Linux tingkat rendah menggunakan file terpisah yang disebut file konfigurasi sistem node. Untuk mengetahui detail selengkapnya, lihat Menyesuaikan konfigurasi sistem node.

Batasan

Anda tidak dapat menggunakan file konfigurasi runtime untuk mengubah setelan containerd di image node Windows.

Opsi konfigurasi containerd yang tersedia

Bagian berikut menjelaskan opsi yang dapat Anda konfigurasi menggunakan file konfigurasi runtime.

privateRegistryAccessConfig

Akses registry image pribadi dengan kredensial pribadi yang Anda simpan di Secret Manager.

Opsi ini tersedia dengan GKE versi 1.27.3-gke.1700 atau yang lebih baru untuk image node Container-Optimized OS, dan 1.33 atau yang lebih baru untuk image node Ubuntu.

Untuk mengetahui petunjuknya, lihat Mengakses registry pribadi dengan sertifikat CA pribadi.

privateRegistryAccessConfig:
  enabled: true
  certificateAuthorityDomainConfig:
  - gcpSecretManagerCertificateConfig:
    secretURI: "SECRET_LOCATION"
  fqdns:
  - "FQDN1"
  - "FQDN2"

Konfigurasi ini memiliki kolom berikut:

  • enabled: boolean untuk mengaktifkan konfigurasi registry pribadi. Jika Anda menetapkan enabled: false, hapus kolom lain di item privateRegistryAccessConfig.
  • certificateAuthorityDomainConfig: berisi hingga lima definisi sertifikat dan FQDN.
  • gcpSecretManagerCertificateConfig: berisi sertifikat yang disimpan di Secret Manager dan array FQDN.
  • secretURI: lokasi sertifikat di Secret Manager. privateRegistryAccessConfig hanya mendukung secret global di secretURI.
  • fqdns: daftar nama domain yang sepenuhnya memenuhi syarat dari registry pribadi. Anda juga dapat menggunakan alamat IPv4, tetapi kami sebaiknya gunakan FQDN.

registryHosts

Konfigurasi setelan lanjutan untuk registry containerd, seperti kemampuan, header kustom, dan sertifikat. Opsi ini sesuai dengan hosts.toml containerd.

Opsi ini tersedia untuk GKE versi 1.34.1-gke.2980000 atau yang lebih baru.

registryHosts:
- server: "REGISTRY_SERVER_FQDN"
  hosts:
  - host: "MIRROR_FQDN"
    capabilities:
    - "HOST_CAPABILITY_PULL"
    - "HOST_CAPABILITY_RESOLVE"
    - "HOST_CAPABILITY_PUSH"
    overridePath: false
    dialTimeout: "30s"
    header:
    - key: "HEADER_KEY"
      value:
      - "HEADER_VALUE_1"
      - "HEADER_VALUE_2"
    ca:
    - gcpSecretManagerSecretUri: "projects/PROJECT_ID_OR_NUMBER/secrets/CA_SECRET/versions/VERSION"
    client:
    - cert:
        gcpSecretManagerSecretUri: "projects/PROJECT_ID_OR_NUMBER/secrets/CLIENT_CERT_SECRET/versions/VERSION"
      key:
        gcpSecretManagerSecretUri: "projects/PROJECT_ID_OR_NUMBER/secrets/CLIENT_KEY_SECRET/versions/VERSION"

Konfigurasi ini memiliki kolom berikut:

  • server: Nama host server registry (misalnya, example.com). Nama ini digunakan untuk memberi nama file konfigurasi di node. Nama ini harus berupa nama domain yang sepenuhnya memenuhi syarat atau alamat IP tanpa skema, port, atau jalur.
  • hosts: Daftar konfigurasi khusus host untuk server.
  • host: Nama host mirror registry (misalnya, https://mirror.example.com:8000/1234, 1.2.3.4:80). Nama ini harus berupa nama domain yang sepenuhnya memenuhi syarat atau alamat IP. Skema, port, dan jalur didukung. Skema hanya dapat berupa http atau https.
  • capabilities: Daftar kemampuan yang menentukan operasi yang dapat dilakukan host. Nilai yang didukung adalah salah satu dari berikut ini:
    • HOST_CAPABILITY_PULL: mewakili kemampuan untuk mengambil manifes dan blob berdasarkan ringkasan.
    • HOST_CAPABILITY_RESOLVE: mewakili kemampuan untuk mengambil manifes berdasarkan nama.
    • HOST_CAPABILITY_PUSH: mewakili kemampuan untuk mengirim blob dan manifes.
    Jika tidak ditentukan, semua kemampuan akan diaktifkan.
  • overridePath: Boolean. Jika true, menunjukkan bahwa endpoint root API host ditentukan dalam jalur URL, bukan oleh spesifikasi API. Opsi ini dapat digunakan dengan registry OCI yang tidak sesuai dan tidak memiliki awalan /v2. Setelan defaultnya adalah false.
  • dialTimeout: String durasi (misalnya, "30s") yang menentukan durasi maksimum yang diizinkan untuk menyelesaikan upaya koneksi. Nilai maksimum yang diizinkan adalah "180s". Jika tidak ditetapkan, containerd akan menetapkan nilai default "30s". Nilai harus berupa angka desimal detik dengan akhiran s.
  • header: Daftar header HTTP kustom yang akan dikirim ke host registry.
    • key: Kunci header.
    • value: Daftar nilai header.
  • ca: Daftar konfigurasi sertifikat untuk Certificate Authority (CA) host registry. Untuk membuat secret untuk sertifikat dan mengonfigurasi izin yang diperlukan, lihat petunjuk di Menyimpan kunci publik CA di Secret Manager.
    • gcpSecretManagerSecretUri: URI secret di Secret Manager yang berisi sertifikat CA. URI ini mendukung secret global dan secret regional. Formatnya adalah sebagai berikut, untuk jenis secret masing-masing:
      • Format secret global: projects/PROJECT_ID_OR_NUMBER/secrets/SECRET_NAME/versions/VERSION.
      • Format secret regional: projects/PROJECT_ID_OR_NUMBER/locations/REGION/secrets/SECRET_NAME/versions/VERSION.
  • client: Daftar pasangan kunci dan sertifikat klien untuk mengautentikasi ke host registry. Untuk membuat secret untuk sertifikat dan mengonfigurasi izin yang diperlukan, lihat petunjuk di Menyimpan kunci publik CA di Secret Manager.
    • cert: Konfigurasi sertifikat klien.
      • gcpSecretManagerSecretUri: URI secret di Secret Manager yang berisi sertifikat klien. URI ini mendukung secret global dan secret regional.
    • key: Konfigurasi kunci pribadi klien.
      • gcpSecretManagerSecretUri: URI secret di Secret Manager yang berisi kunci klien. URI ini mendukung secret global dan secret regional.

writableCgroups

Instal sistem file /sys/fs/cgroup dalam mode baca-tulis sehingga workload dapat mengelola resource proses turunannya.

Opsi ini tersedia untuk GKE versi 1.34.1-gke.2541000 atau yang lebih baru.

Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi cgroup yang dapat ditulis untuk container.

writableCgroups:
  enabled: true

Menerapkan konfigurasi containerd ke cluster baru

Bagian ini menunjukkan cara menerapkan file konfigurasi containerd saat Anda membuat cluster GKE baru.

Jalankan perintah berikut untuk membuat cluster Autopilot:

gcloud container clusters create-auto CLUSTER_NAME \
    --location=LOCATION \
    --scopes="cloud-platform" \
    --containerd-config-from-file="PATH_TO_CONFIG_FILE"

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster baru.
  • LOCATION: lokasi Compute Engine cluster baru Anda.
  • PATH_TO_CONFIG_FILE: jalur ke file konfigurasi yang Anda dibuat, seperti ~/containerd-configuration.yaml.

Anda dapat mengaktifkan konfigurasi containerd di cluster Standar baru dengan menjalankan gcloud container clusters create perintah dengan opsi yang sama.

Menerapkan konfigurasi containerd ke node pool baru

Anda dapat menerapkan konfigurasi containerd ke node pool GKE baru dengan perintah berikut:

gcloud container node-pools create NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=LOCATION \
    --scopes="cloud-platform" \
    --containerd-config-from-file="PATH_TO_CONFIG_FILE"

Ganti kode berikut:

  • NODE_POOL_NAME: nama node pool baru.
  • CLUSTER_NAME: nama cluster yang ada.
  • LOCATION: lokasi Compute Engine node pool baru Anda.
  • PATH_TO_CONFIG_FILE: jalur ke file konfigurasi yang Anda dibuat, seperti ~/containerd-configuration.yaml.

Menerapkan konfigurasi containerd ke cluster yang ada

Bagian ini menunjukkan cara menerapkan konfigurasi containerd ke cluster dan node yang ada.

Memeriksa cakupan akses

Jika file konfigurasi Anda menggunakan secret dari Secret Manager, cluster atau node pool Anda harus memiliki cakupan akses cloud-platform. Bagian ini menunjukkan cara memeriksa cakupan akses dan memperbarui cluster yang ada dengan file konfigurasi runtime baru atau yang diubah.

Untuk mengetahui detail cakupan akses default di cluster baru, lihat Cakupan akses di GKE.

Memeriksa cakupan akses Autopilot

Jalankan perintah berikut:

gcloud container clusters describe CLUSTER_NAME \
    --location=LOCATION \
    --flatten=nodeConfig \
    --format='csv[delimiter="\\n",no-heading](oauthScopes)'

Jika Anda menggunakan secret dari Secret Manager dan cluster Anda tidak memiliki cakupan akses https://www.googleapis.com/auth/cloud-platform, buat cluster baru dengan cakupan akses ini.

Memeriksa cakupan akses Standar

Untuk memeriksa cakupan akses cluster Standar, periksa node pool:

gcloud container node-pools describe NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=LOCATION \
    --format='value[delimiter="\\n"](config.oauthScopes)'

Ganti NODE_POOL_NAME dengan nama node pool.

Jika Anda menggunakan secret dari Secret Manager dan cluster Anda tidak memiliki cakupan akses https://www.googleapis.com/auth/cloud-platform, buat node pool baru dengan cakupan akses cloud-platform dan hapus node pool yang ada.

Memperbarui cluster untuk menggunakan file konfigurasi Anda

Jalankan perintah berikut:

gcloud container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --containerd-config-from-file="PATH_TO_CONFIG_FILE"

Membuat ulang node di cluster Standar

Jika cluster Standar Anda tidak menggunakan upgrade otomatis, Anda harus membuat ulang node pool secara manual untuk menerapkan konfigurasi baru. Untuk memicu pembuatan ulang node manual, upgrade cluster Anda ke versi GKE yang sama dengan yang sudah digunakannya.

gcloud container clusters upgrade CLUSTER_NAME \
    --location=LOCATION \
    --cluster-version=VERSION

Ganti VERSION dengan versi patch GKE yang sama dengan yang sudah digunakan cluster.

Menonaktifkan opsi konfigurasi containerd

Menonaktifkan privateRegistryAccessConfig

  1. Perbarui file konfigurasi Anda untuk menentukan enabled: false di privateRegistryAccessConfig dan hapus kolom lain di item tersebut, seperti pada contoh berikut:

    privateRegistryAccessConfig:
      enabled: false
  2. Terapkan file konfigurasi yang telah diupdate ke cluster Anda. Untuk mengetahui petunjuknya, lihat Menerapkan konfigurasi containerd ke cluster yang ada.

Menonaktifkan registryHosts

  1. Perbarui file konfigurasi Anda untuk menentukan array kosong di registryHosts item, seperti pada contoh berikut:

    registryHosts: []
  2. Terapkan file konfigurasi yang telah diupdate ke cluster Anda. Untuk mengetahui petunjuknya, lihat Menerapkan konfigurasi containerd ke cluster yang ada.