Mengonfigurasi Subnet Pod Azure CNI - Alokasi Blok Statis dan dukungan subnet yang ditingkatkan di Azure Kubernetes Service (AKS)

Batasan Subnet Pod Azure CNI - Alokasi IP Dinamis adalah skalabilitas ukuran subnet pod di luar subnet /16. Bahkan dengan subnet besar, kluster besar mungkin masih dibatasi hingga 65k pod karena batas pemetaan alamat Azure. Subnet Pod - Alokasi Blok Statis di Azure CNI memecahkan masalah ini dengan menetapkan blok CIDR ke Node daripada IP individual.

Ini menawarkan manfaat berikut:

  • Skalabilitas IP yang lebih baik: Blok CIDR dialokasikan secara statis ke node kluster dan hadir untuk masa pakai simpul, dibandingkan dengan alokasi dinamis tradisional IP individu dengan CNI tradisional. Ini memungkinkan perutean berdasarkan blok CIDR dan membantu meningkatkan kapasitas kluster hingga 1 juta pod dari batas tradisional 65 ribu pod per kluster. Microsoft Azure Virtual Network Anda harus cukup besar untuk mengakomodasi skala kluster Anda.
  • Fleksibilitas: Subnet simpul dan pod dapat diskalakan secara independen. Satu subnet pod dapat dibagikan antara beberapa kumpulan node dalam kluster atau di antara beberapa kluster AKS yang diterapkan dalam VNet yang sama. Anda juga dapat mengonfigurasi subnet pod terpisah untuk kumpulan simpul.
  • Performa tinggi: Karena pod diberi IP jaringan virtual, pod memiliki konektivitas langsung ke pod dan sumber daya kluster lain di VNet.
  • Kebijakan VNet terpisah untuk pod: Karena pod memiliki subnet terpisah, Anda dapat mengonfigurasi kebijakan VNet terpisah untuk pod yang berbeda dari kebijakan simpul. Ini memungkinkan banyak skenario yang berguna seperti mengizinkan konektivitas internet hanya untuk pod dan bukan untuk simpul, memperbaiki IP sumber untuk pod dalam kumpulan simpul menggunakan Azure NAT Gateway, dan menggunakan NSG untuk memfilter lalu lintas antar kumpulan simpul.
  • Kebijakan jaringan Kubernetes: Cilium, Azure NPM, dan Calico bekerja dengan solusi baru ini.

Artikel ini menunjukkan cara menggunakan Azure CNI Pod Subnet - Alokasi Blok Statis dan dukungan subnet yang diperbarui di AKS.

Prerequisites

Note

Saat menggunakan Pod Subnet - Alokasi Blok Statis, mengekspos aplikasi sebagai Layanan Private Link menggunakan Layanan Load Balancer Kubernetes tidak didukung.

  • Tinjau prasyarat untuk mengonfigurasi jaringan Azure CNI dasar di AKS, karena prasyarat yang sama berlaku untuk artikel ini.

  • Tinjau parameter penyebaran untuk mengonfigurasi jaringan Azure CNI dasar di AKS, karena parameter yang sama berlaku.

  • Kluster AKS Engine dan DIY tidak didukung.

  • Versi Azure CLI 2.75.0 atau lebih baru

  • Jika Anda memiliki kluster yang sudah ada, Anda perlu mengaktifkan Container Insights untuk memantau penggunaan subnet IP. Anda dapat mengaktifkan Container Insights menggunakan perintah az aks enable-addons, seperti yang ditunjukkan dalam contoh berikut:

    az aks enable-addons --addons monitoring --name <cluster-name> --resource-group <resource-group-name>
    

Limitations

Di bawah ini adalah beberapa batasan penggunaan Subnet Pod Azure CNI - Alokasi Blok Statis:

  • Versi Kubernetes minimum yang diperlukan adalah 1.28
  • Ukuran subnet maksimum yang didukung adalah x.x.x.x/12 ~ 1 juta IP
  • Hanya satu mode operasi yang dapat digunakan per subnet. Jika subnet menggunakan mode Alokasi Blok Statis, subnet tidak dapat menggunakan mode alokasi IP Dinamis dalam kluster atau kumpulan simpul yang berbeda dengan subnet yang sama dan sebaliknya.
  • Hanya didukung di kluster baru atau saat menambahkan kumpulan simpul dengan subnet yang berbeda ke kluster yang ada. Memigrasikan atau memperbarui kluster atau kumpulan simpul yang ada tidak didukung.
  • Di semua blok CIDR yang ditetapkan ke node pada kumpulan node, satu IP akan dipilih sebagai IP utama node. Dengan demikian, bagi administrator jaringan yang memilih --max-pods nilai, coba gunakan perhitungan di bawah ini untuk melayani kebutuhan Anda dengan sebaik-baiknya dan memiliki penggunaan IP yang optimal di subnet:
    max_pods = (N * 16) - 1
    di mana N adalah bilangan bulat positif dan N > 0

Merencanakan penetapan alamat IP

Merencanakan alamat IP Anda lebih fleksibel dan terperinci. Karena simpul dan pod berskala secara independen, ruang alamat mereka juga dapat direncanakan secara terpisah. Karena subnet pod dapat dikonfigurasi ke granularitas kumpulan simpul, Anda selalu dapat menambahkan subnet baru saat menambahkan kumpulan simpul. Pod sistem dalam kluster/kolam simpul juga menerima IP dari subnet pod, sehingga perilaku ini perlu diperhitungkan.

Dalam skenario ini, blok CIDR /28 (16 IP) dialokasikan untuk simpul berdasarkan konfigurasi '--max-pods' untuk kumpulan simpul Anda yang menentukan jumlah maksimum pod per simpul. Satu IP dicadangkan pada setiap node dari semua IP yang tersedia di node tersebut untuk tujuan internal.

Dengan demikian, saat menentukan dan merencanakan IP Anda, penting untuk menentukan konfigurasi '--max-pods' Anda, dan cara terbaik untuk menghitungnya adalah sebagai berikut: max_pods_per_node = (16 * N) - 1 di mana N adalah bilangan bulat positif yang lebih besar dari 0

Nilai ideal tanpa pemborongan IP akan memerlukan nilai pod maks agar sesuai dengan ekspresi di atas.

  • Contoh 1: max_pods = 30, Blok CIDR yang dialokasikan per simpul = 2, Total IP yang tersedia untuk Pod = (16 * 2) - 1 = 32 - 1 = 31, pemborongan IP per simpul = 31 - 30 = 1 [Pemborongan rendah - Kasus yang Dapat Diterima]
  • Contoh 2: max_pods = 31, Blok CIDR yang dialokasikan per simpul = 2, Total IP yang tersedia untuk Pod = (16 * 2) - 1 = 32 - 1 = 31, pemborongan IP per simpul = 31 - 31 = 0 [Kasus Ideal]
  • Contoh 3: max_pods = 32, Blok CIDR yang dialokasikan per simpul = 3, Total IP yang tersedia untuk Pod = (16 * 3) - 1 = 48 - 1 = 47, pemborongan IP per simpul = 47 - 32 = 15 [Pemborongan Tinggi - Kasus Tidak Disarankan]

Perencanaan IP untuk layanan Kubernetes tetap tidak berubah.

Note

Pastikan VNet Anda memiliki ruang alamat yang cukup besar dan bersebelahan untuk mendukung skala kluster Anda.

Parameter penyebaran

Parameter penyebaran untuk mengonfigurasi jaringan Azure CNI dasar di AKS semuanya valid, dengan pengecualian:

  • Parameter id subnet vnet sekarang mengacu pada subnet yang terkait dengan node kluster.
  • Parameter subnet pod id digunakan untuk menentukan subnet yang alamat IP-nya akan dialokasikan secara statis atau dinamis ke pod di node pool.
  • Parameter mode alokasi ip pod menentukan apakah akan menggunakan DynamicIndividual (Alokasi IP Dinamis) atau StaticBlock (Alokasi Blok Statis).

Mengonfigurasi jaringan dengan alokasi statis blok CIDR dan dukungan subnet yang ditingkatkan - Azure CLI

Menggunakan Pod Subnet - Alokasi Blok Statis di kluster Anda mirip dengan metode default untuk mengonfigurasi kluster dengan Pod Subnet - Alokasi IP Dinamis. Contoh berikut menjelaskan langkah-langkah pembuatan jaringan virtual baru dengan subnet untuk simpul, subnet untuk pod, dan pembuatan kluster yang menggunakan Azure CNI Pod Subnet - Static Block Allocation. Pastikan untuk mengganti variabel seperti $subscription dengan nilai Anda.

Buat jaringan virtual dengan dua subnet.

resourceGroup="myResourceGroup"
vnet="myVirtualNetwork"
location="myRegion"

# Create the resource group
az group create --name $resourceGroup --location $location

# Create our two subnet network 
az network vnet create --resource-group $resourceGroup --location $location --name $vnet --address-prefixes 10.0.0.0/8 -o none 
az network vnet subnet create --resource-group $resourceGroup --vnet-name $vnet --name nodesubnet --address-prefixes 10.240.0.0/16 -o none 
az network vnet subnet create --resource-group $resourceGroup --vnet-name $vnet --name podsubnet --address-prefixes 10.40.0.0/13 -o none 

Buat kluster dengan merujuk pada subnet simpul menggunakan --vnet-subnet-id, subnet pod menggunakan --pod-subnet-id, --pod-ip-allocation-mode untuk menentukan mode alokasi IP, dan mengaktifkan add-on pemantauan.

clusterName="myAKSCluster"
subscription="aaaaaaa-aaaaa-aaaaaa-aaaa"

az aks create \
    --name $clusterName \
    --resource-group $resourceGroup \
    --location $location \
    --max-pods 250 \
    --node-count 2 \
    --network-plugin azure \
    --pod-ip-allocation-mode StaticBlock \
    --vnet-subnet-id /subscriptions/$subscription/resourceGroups/$resourceGroup/providers/Microsoft.Network/virtualNetworks/$vnet/subnets/nodesubnet \
    --pod-subnet-id /subscriptions/$subscription/resourceGroups/$resourceGroup/providers/Microsoft.Network/virtualNetworks/$vnet/subnets/podsubnet \
    --enable-addons monitoring \
    --generate-ssh-keys

Menambahkan kumpulan simpul

Saat menambahkan kumpulan simpul, referensikan subnet simpul menggunakan --vnet-subnet-id, subnet pod menggunakan --pod-subnet-id dan mode alokasi menggunakan '--pod-ip-allocation-mode'. Contoh berikut membuat dua subnet baru yang kemudian direferensikan dalam pembuatan kumpulan simpul baru:

az network vnet subnet create -g $resourceGroup --vnet-name $vnet --name node2subnet --address-prefixes 10.242.0.0/16 -o none 
az network vnet subnet create -g $resourceGroup --vnet-name $vnet --name pod2subnet --address-prefixes 10.243.0.0/16 -o none 

az aks nodepool add --cluster-name $clusterName -g $resourceGroup  -n newnodepool \
    --max-pods 250 \
    --node-count 2 \
    --vnet-subnet-id /subscriptions/$subscription/resourceGroups/$resourceGroup/providers/Microsoft.Network/virtualNetworks/$vnet/subnets/node2subnet \
    --pod-subnet-id /subscriptions/$subscription/resourceGroups/$resourceGroup/providers/Microsoft.Network/virtualNetworks/$vnet/subnets/pod2subnet \
    --pod-ip-allocation-mode StaticBlock \
    --no-wait

Migrasi dari Pod Subnet - Alokasi IP Dinamis ke Subnet Pod - Alokasi Blok Statis

Jika Anda memiliki kluster AKS yang sudah ada menggunakan alokasi IP dinamis untuk subnet pod dan ingin bermigrasi ke Pod Subnet - Alokasi Blok Statis, ikuti langkah-langkah berikut:

Langkah-langkah untuk Migrasi

  1. Rencanakan subnet baru yang akan digunakan untuk kumpulan agen Blok Statis

    • Buat subnet baru di VNet Anda yang sudah ada yang akan didedikasikan untuk mode Blok Statis
    • Pastikan ukuran subnet mengikuti panduan perencanaan yang diuraikan di bagian Perencanaan Alamat IP
  2. Tambahkan kumpulan agen ke kluster yang ada dengan mode Blok Statis dan subnet baru

    • az aks nodepool add Gunakan perintah untuk membuat kumpulan simpul baru dengan Alokasi Blok Statis
    • Mereferensikan subnet baru menggunakan --pod-subnet-id dan mengatur --pod-ip-allocation-mode ke StaticBlock
  3. Pisahkan kumpulan agen saat ini agar semua penyebaran dan lalu lintas Anda beralih ke kumpulan agen baru

    • Gunakan kubectl cordon untuk menandai simpul yang ada sebagai tidak dapat dijadwalkan.
    • Secara bertahap menguras beban kerja dari kumpulan simpul lama ke kumpulan simpul Blok Statis baru
  4. Setelah semua beban kerja dipindahkan ke kumpulan agen baru, hapus kumpulan agen Blok non-Statis yang ada

    • Verifikasi bahwa semua beban kerja berhasil berjalan pada kumpulan simpul baru
    • Menghapus kumpulan simpul lama menggunakan az aks nodepool delete

Important

Migrasi memerlukan perencanaan dan pengujian yang cermat. Pastikan Anda memiliki kapasitas yang memadai di kumpulan simpul baru sebelum melakukan kordoning pada simpul yang ada. Uji proses migrasi di lingkungan non-produksi terlebih dahulu.

Alokasi statis blok CIDR dan FAQ dukungan subnet yang disempurnakan

  • Dapatkah saya menetapkan beberapa subnet pod ke kluster?

    Beberapa subnet dapat ditetapkan ke kluster tetapi hanya satu subnet yang dapat ditetapkan ke setiap kumpulan simpul. Kumpulan simpul yang berbeda di seluruh kluster yang sama/berbeda dapat berbagi subnet yang sama.

  • Dapatkah saya menetapkan subnet pod dari VNet yang berbeda sama sekali?

    Tidak, subnet pod harus dari VNet yang sama dengan kluster.

  • Dapatkah beberapa kumpulan simpul dalam kluster dengan IPAM subnet pod menggunakan Alokasi IP Dinamis sementara yang lain menggunakan alokasi Blok Statis baru?

    Ya, kumpulan simpul yang berbeda dapat menggunakan mode alokasi yang berbeda. Namun, setelah subnet digunakan dalam satu mode alokasi, subnet hanya dapat digunakan dalam mode alokasi yang sama di semua kumpulan simpul yang terkait.

Langkah selanjutnya

Pelajari selengkapnya tentang jaringan di AKS di artikel berikut ini: