Memahami resource kustom ClusterCIDRConfig

Ringkasan

ClusterCIDRConfig adalah resource alokator CIDR kustom yang memungkinkan Anda mengalokasikan lebih banyak rentang alamat IP untuk Pod secara dinamis.

Pengelolaan Alamat IP (IPAM) memungkinkan penggunaan subnet IP secara efisien dan menghindari tumpang-tindih dalam rentang alamat, yang akan mencegah konflik dan pemadaman jaringan. Kubernetes menetapkan CIDR Pod per node, yang digunakan sebagai alamat IP untuk Pod yang berjalan di node tersebut.

Kubernetes NodeIPAM saat ini memiliki batasan berikut:

  • Semua CIDR Pod dialokasikan dari satu CIDR cluster. Anda harus menentukan seluruh rentang alamat IP yang memperhitungkan cluster terbesar pada saat pembuatan cluster. Keterbatasan ini dapat menyia-nyiakan alamat IP.

  • Jika Anda menambah ukuran cluster, akan sulit untuk menambahkan lebih banyak alamat IP.

  • CIDR {i>cluster<i} memiliki satu rentang yang besar. Mungkin akan sulit untuk menemukan blok alamat IP yang berdekatan yang memenuhi kebutuhan cluster.

  • Setiap node mendapatkan rentang IP berukuran tetap di dalam cluster. Jika node memiliki ukuran dan kapasitas yang berbeda, Anda tidak dapat mengalokasikan rentang Pod yang lebih besar ke node tertentu dengan kapasitas lebih besar dan rentang yang lebih kecil ke node dengan kapasitas lebih rendah. Hal ini menyia-nyiakan banyak alamat IP. Untuk cluster besar dengan banyak node, pemborosan ini akan bertambah di semua node dalam cluster.

Dengan fungsi ClusterCIDRConfig, Anda dapat menghindari penetapan blok CIDR besar ke cluster, memetakan ukuran cluster ke skala Pod, sehingga mempertahankan alamat IP. Anda dapat menyimpan alamat IP menggunakan ClusterCIDRConfigs dengan berbagai kombinasi CIDR dan perNodeMaskSize. Resource ClusterCIDRConfig mendukung hal berikut:

  • Beberapa blok CIDR IP yang terpisah untuk CIDR cluster pada tingkat yang lebih terperinci

  • Afinitas node blok CIDR

  • Ukuran blok berbeda yang dialokasikan ke node

GKE di Bare Metal menggunakan fungsi ClusterCIDRConfig dalam fitur berikut:

Cluster.spec.clusterNetwork.pods.cidrBlocks adalah kolom opsional dan tidak ditentukan secara default. Anda harus menentukannya jika salah satu fitur dari daftar sebelumnya belum menentukannya. Misalnya, atribut ini diperlukan saat cluster dibuat dalam mode pulau IPv4 dan harus ditentukan karena digunakan sebagai CIDR perutean native.

Tabel berikut mencantumkan penggunaan perilaku kolom Cluster.spec.clusterNetwork.pods.cidrBlocks ClusterCIDRConfig untuk berbagai mode jaringan.

Mode Jaringan Nilai ClusterCIDRConfig
Pulau IPv4 (default) (Kolom wajib diisi) Tentukan Cluster.spec.clusterNetwork.pods.cidrBlocks.
IPv4 Datar (default) Cluster.spec.clusterNetwork.pods.cidrBlocks sepenuhnya diabaikan, dan dapat dilewati. Pengguna harus secara eksplisit menentukan ClusterCIDRConfig (per node, per nodepool, dan/atau per cluster).
Tumpukan ganda (Pulau IPv4, Datar IPv4)

Tentukan CIDR IPv4.

Jangan tentukan CIDR IPv6 di Cluster.spec.clusterNetwork.pods.cidrBlocks.

Menentukan ClusterCIDRConfig dengan CIDR IPv4 dan IPv6. CIDR IPv4 yang dikonfigurasi di semua ClusterCIDRConfig harus sama dengan CIDR IPv4 dari Cluster.spec.clusterNetwork.pods.cidrBlocks, termasuk nilai PerNodeMask untuk IPv4. Untuk mengetahui informasi selengkapnya tentang ClusterCIDRConfig dan contoh penggunaannya, lihat Contoh: Dualstack (Pulau IPv4, Flat IPv6)

Tumpukan ganda (IPv4 Datar, IPv6 Datar) Anda dapat melewati Cluster.spec.clusterNetwork.pods.cidrBlocks karena pesan ini akan sepenuhnya diabaikan. Anda harus secara eksplisit menentukan ClusterCIDRConfig (per-node, per-nodepool, dan/atau per-cluster) dengan CIDR IPv4 dan IPv6.

Mengonfigurasi resource alokator CIDR kustom ClusterCIDRConfig

ClusterCIDRConfig

Saat mengonfigurasi resource alokator CIDR kustom ClusterCIDRConfig, pertimbangkan hal-hal berikut:

  • Penetapan CIDR pod dari ClusterCIDRConfig tertentu ke node didasarkan pada pemilih label. Hal ini mirip dengan mekanisme nodeSelector yang digunakan untuk menjadwalkan Pod pada sebuah node.

  • Anda harus mengonfigurasi ClusterCIDRConfig selama proses pembuatan cluster di file YAML konfigurasi cluster. Setelah menentukan ClusterCIDRConfigs, Anda tidak dapat mengubah nilainya nanti.

  • Anda dapat menentukan beberapa ClusterCIDRConfig dengan CIDR yang tumpang-tindih.

  • Jika tidak ditemukan ClusterCIDRConfig yang cocok untuk sebuah node, node tersebut akan tetap dalam status Tidak Siap, hingga ClusterCIDRConfig dengan label yang cocok dibuat.

  • Jika pencocokan terbaik ClusterCIDRConfig tidak memiliki lebih banyak CIDR yang tersedia untuk alokasi, CIDR terbaik berikutnya akan dipilih dan CIDR Pod akan dialokasikan dari CIDR yang tersedia.

  • Untuk model dual-stack, jika Anda ingin menetapkan CIDR Pod dual-stack ke node, lakukan hal berikut:

    • Konfigurasikan CIDR IPv4 dan IPv6 di ClusterCIDRConfig.

    • Pastikan semua ClusterCIDRConfig memiliki CIDR DualStack, jika beberapa ClusterCIDRConfig dikonfigurasi.

    • Pastikan CIDR IPv4 dan IPv6 yang dikonfigurasi memiliki jumlah alamat IP yang dapat dialokasikan per node yang sama.

    Contoh, 32 - spec.IPv4.PerNodeMaskSize == 128 - spec.IPv6.PerNodeMaskSize

    spec.IPv4.PerNodeMaskSize = 24

    spec.IPv6.PerNodeMaskSize = 120

    Jadi, 32 - 24 == 128 - 120, karena selisihnya adalah 8.

  • Beberapa ClusterCIDRConfig dapat mencocokkan label dari nodeSelector ke label node.

Aturan penetapan ClusterCIDRConfig

Untuk menentukan ClusterCIDRConfig yang digunakan untuk menetapkan CIDR Pod ke node saat ini, gunakan aturan tie-breaking berikut. Terapkan aturan ini sesuai urutan yang ditentukan. Terapkan aturan berikutnya hanya jika seri tidak dilanggar oleh aturan sebelumnya.

  1. Pilih ClusterCIDRConfig yang NodeSelector-nya cocok dengan label paling banyak di Node. Misalnya, {'node.kubernetes.io/instance-type':'medium', 'rack': 'rack1'} (Match Count: 2) diambil sebelum {'node.kubernetes.io/instance-type': 'medium'}. (Match Count: 1).

  2. Pilih ClusterCIDRConfig dengan CIDR Pod yang dapat dialokasikan paling sedikit. Misalnya, {CIDR: "10.0.0.0/16", PerNodeMaskSize: "16"} (1 possible Pod CIDR) dipilih sebelum {CIDR: "192.168.0.0/20", PerNodeMaskSize: "22"} (4 possible Pod CIDRs).

  3. Pilih ClusterCIDRConfig yang PerNodeMaskSize-nya memiliki alamat IP paling sedikit. Misalnya, 27 (2^(32-27)= 32 alamat IP) yang diambil sebelum 25 (2^(32-25)=128 alamat IP).

  4. Pilih ClusterCIDRConfig yang label NodeSelector-nya yang cocok memiliki nilai alfanumerik yang lebih rendah. Misalnya, {'kubernetes.io/hostname': 'node-1'} dipilih daripada {'node.kubernetes.io/instance-type':'medium'}.

  5. Pilih ClusterCIDRConfig yang IP CIDR-nya memiliki nilai lebih rendah. Terlepas dari apakah konfigurasinya adalah konfigurasi IPv4 atau DualStack, hanya CIDR IPv4 yang akan dibandingkan. Misalnya, {CIDR: "10.0.0.0/16"} is picked over {CIDR: "192.168.0.0/16"}.

Contoh konfigurasi

Bagian ini mencantumkan contoh konfigurasi untuk Cluster dan ClusterCIDRConfig bagi semua mode jaringan.