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 yang efisien dan menghindari memiliki tumpang tindih dalam rentang alamat, yang mencegah konflik dan pemadaman jaringan. Kubernetes menetapkan CIDR Pod per node, yang digunakan sebagai alamat IP untuk Pod yang berjalan pada {i>node<i} tersebut.

NodeIPAM Kubernetes saat ini memiliki batasan berikut:

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

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

  • CIDR cluster adalah satu rentang yang besar. Mungkin sulit untuk menemukan blok alamat IP yang berdekatan yang memenuhi kebutuhan cluster.

  • Setiap node mendapatkan rentang IP berukuran tetap dalam sebuah cluster. Jika node berupa ukuran dan kapasitas berbeda, Anda tidak bisa mengalokasikan rentang Pod yang lebih besar ke node yang lebih kecil dengan kapasitas lebih besar dan rentang lebih kecil ke node dengan kapasitas. Ini membuang-buang banyak alamat IP. Untuk cluster besar dengan banyak node, limbah ini akan bertambah di semua node dalam cluster.

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

  • Beberapa blok CIDR IP yang terputus untuk CIDR cluster tingkat

  • Afinitas node blok CIDR

  • Ukuran blok yang berbeda-beda dialokasikan ke node

Google Distributed Cloud menggunakan fungsi ClusterCIDRConfig dalam fitur berikut:

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

Tabel berikut mencantumkan penggunaan clusterCIDRConfig Perilaku kolom Cluster.spec.clusterNetwork.pods.cidrBlocks untuk berbagai mode jaringan.

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

Tentukan CIDR IPv4.

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

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

Dual-stack (IPv4 Datar, IPv6 Flat) Anda dapat melewati Cluster.spec.clusterNetwork.pods.cidrBlocks karena elemen 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 Anda mengonfigurasi resource alokator CIDR kustom ClusterCIDRConfig, pertimbangkan poin-poin berikut:

  • Penetapan CIDR pod dari ClusterCIDRConfig tertentu ke node didasarkan pada pemilih label. Ini mirip dengan mekanisme {i>nodeSelector<i} yang digunakan untuk untuk menjadwalkan Pod pada node.

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

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

  • Jika tidak ada ClusterCIDRConfig yang cocok yang ditemukan untuk sebuah node, node akan tetap berada Status NotReady, hingga ClusterCIDRConfig dengan label yang cocok dibuat.

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

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

    • Mengonfigurasi CIDR IPv4 dan IPv6 di ClusterCIDRConfig.

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

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

    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 bisa mencocokkan label dari nodeSelector dengan label node.

Aturan penetapan ClusterCIDRConfig

Guna menentukan ClusterCIDRConfig yang digunakan untuk menetapkan CIDR Pod ke {i>node<i}, gunakan aturan pemecahan masalah berikut. Terapkan aturan-aturan ini dalam pesanan. Terapkan aturan berikutnya hanya jika nilai yang sama tidak terputus dengan aturan sebelumnya aturan.

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

  2. Pilih ClusterCIDRConfig dengan CIDR Pod yang dapat dialokasikan paling sedikit. Sebagai 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 memiliki alamat IP paling sedikit. Misalnya, 27 (2^(32-27)= 32 alamat IP) diambil sebelumnya 25 (2^(32-25)=128 alamat IP).

  4. Pilih ClusterCIDRConfig yang label NodeSelector yang cocok memiliki nilai lebih rendah nilai alfanumerik. Misalnya, {'kubernetes.io/hostname': 'node-1'} adalah dipilih lebih dari {'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 konfigurasi DualStack, hanya CIDR 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 untuk semua mode jaringan.