Aracılığıyla paylaş


Azure Kubernetes Service (AKS) düğüm havuzları için düğüm yapılandırmasını özelleştirme

Düğüm yapılandırmanızı özelleştirmek, işletim sistemi (OS) ayarlarını veya kubelet parametrelerini iş yüklerinizin gereksinimlerine uyacak şekilde ayarlamanıza olanak tanır. AKS kümesi oluşturduğunuzda veya kümenize bir düğüm havuzu eklediğinizde, yaygın olarak kullanılan işletim sistemi ve kubelet ayarlarının bir alt kümesini özelleştirebilirsiniz. Bu alt kümenin ötesindeki ayarları yapılandırmak için, düğümleriniz için AKS desteğini kaybetmeden gerekli yapılandırmalarınızı özelleştirmek üzere bir daemon kümesi kullanabilirsiniz.

AKS düğüm havuzları için özel düğüm yapılandırma dosyaları oluşturma

İşletim sistemi ve kubelet yapılandırma değişiklikleri, parametreleri ve istediğiniz ayarları içeren yeni bir yapılandırma dosyası oluşturmanızı gerektirir. Parametre için bir değer belirtilmezse, değer varsayılan olarak ayarlanır.

Not

Aşağıdaki örneklerde yaygın yapılandırma ayarları gösterilmektedir. İş yükü gereksinimlerinizi karşılamak için ayarları değiştirebilirsiniz. Desteklenen özel yapılandırma parametrelerinin tam listesi için Desteklenen özel yapılandırma parametreleri bölümüne bakın.

Kubelet yapılandırması

Aşağıdaki içeriklere sahip bir linuxkubeletconfig.json dosya oluşturun:

{
 "cpuManagerPolicy": "static",
 "cpuCfsQuota": true,
 "cpuCfsQuotaPeriod": "200ms",
 "imageGcHighThreshold": 90,
 "imageGcLowThreshold": 70,
 "topologyManagerPolicy": "best-effort",
 "allowedUnsafeSysctls": [
  "kernel.msg*",
  "net.*"
],
 "failSwapOn": false
}

İşletim sistemi yapılandırması

Aşağıdaki içeriklere sahip bir linuxosconfig.json dosya oluşturun:

{
 "transparentHugePageEnabled": "madvise",
 "transparentHugePageDefrag": "defer+madvise",
 "swapFileSizeMB": 1500,
 "sysctls": {
  "netCoreSomaxconn": 163849,
  "netIpv4TcpTwReuse": true,
  "netIpv4IpLocalPortRange": "32000 60000"
 }
}

Özel yapılandırma dosyalarını kullanarak AKS kümesi oluşturma

Not

Yeni aks kümesi oluştururken özel yapılandırma dosyalarını kullanırken aşağıdaki bilgileri göz önünde bulundurun:

  • Küme oluştururken bir yapılandırma belirtirseniz, yapılandırma yalnızca ilk düğüm havuzundaki düğümlere uygulanır. JSON dosyasında yapılandırılmamış tüm ayarlar varsayılan değerlerini korur.
  • CustomLinuxOsConfig , Windows işletim sistemi türü için desteklenmez.

Komutunu kullanarak az aks create ve --kubelet-config parametreleri için yapılandırma dosyalarınızı belirterek özel yapılandırma dosyalarıyla --linux-os-config yeni bir küme oluşturun. Aşağıdaki örnek komut, özel ./linuxkubeletconfig.json ve ./linuxosconfig.json dosyalarıyla yeni bir küme oluşturur:

az aks create --name <cluster-name> --resource-group <resource-group-name> --kubelet-config ./linuxkubeletconfig.json --linux-os-config ./linuxosconfig.json

Özel yapılandırma dosyalarını kullanarak düğüm havuzu ekleme

Not

Mevcut AKS kümesine yeni bir düğüm havuzu eklerken özel yapılandırma dosyalarını kullanırken aşağıdaki bilgileri göz önünde bulundurun:

  • Mevcut bir kümeye Linux düğüm havuzu eklediğinizde kubelet yapılandırmasını, işletim sistemi yapılandırmasını veya her ikisini de belirtebilirsiniz. Var olan bir kümeye Windows düğüm havuzu eklediğinizde, yalnızca kubelet yapılandırmasını belirtebilirsiniz. Düğüm havuzu eklerken bir yapılandırma belirtirseniz, yapılandırma yalnızca yeni düğüm havuzundaki düğümlere uygulanır. JSON dosyasında yapılandırılmamış tüm ayarlar varsayılan değerlerini korur.
  • CustomKubeletConfig , Linux ve Windows düğüm havuzları için desteklenir.

az aks nodepool add komutunu kullanarak, --kubelet-config ve --linux-os-config parametreleri için yapılandırma dosyalarınızı belirterek yeni bir Linux düğüm havuzu oluşturun. Aşağıdaki örnek komut, özel ./linuxkubeletconfig.json dosyayla yeni bir Linux düğüm havuzu oluşturur:

az aks nodepool add --name <node-pool-name> --cluster-name <cluster-name> --resource-group <resource-group-name> --kubelet-config ./linuxkubeletconfig.json

Ayarların uygulandığını onaylayın

Özel düğüm yapılandırmasını uyguladıktan sonra, ana bilgisayara bağlanarak ve dosya sisteminde yapılandırma değişiklikleri yapıldığını doğrulayarak sysctl ayarların düğümlere uygulandığını onaylayabilirsiniz.

Desteklenen özel yapılandırma parametreleri

Linux kubelet özel yapılandırması

Parametre İzin verilen değerler/aralık Varsayılan Açıklama
cpuManagerPolicy none, statik yok Statik ilke, tamsayı CPU isteği içeren garantili podlardaki kapsayıcıların düğümdeki özel CPU'lara erişmesini sağlar.
cpuCfsQuota doğru, yanlış true CPU sınırlarını belirten kapsayıcılar için CPU CFS kota uygulamasını etkinleştirin/devre dışı bırakın.
cpuCfsQuotaPeriod Milisaniye cinsinden aralık (ms) 100ms CPU CFS kota dönemi değerini ayarlar.
imageGcHighThreshold 0-100 85 Görüntü çöp toplama işleminin her zaman çalıştırıldığı disk kullanımı yüzdesi. Çöp toplamayı tetikleyen minimum disk kullanımı. Görüntü çöp toplamayı devre dışı bırakmak için 100 olarak ayarlayın.
imageGcLowThreshold 0-100, en yüksek değer imageGcHighThreshold 80 Görüntü atık toplama işleminin hiçbir zaman çalıştırılamadan önce disk kullanımı yüzdesi. Çöp toplamayı tetikleyebilen en düşük disk kullanımı.
topologyManagerPolicy none, en iyi çaba, kısıtlı, tek-numa-düğüm yok NUMA düğümü hizalamasını iyileştirin. Daha fazla bilgi için bkz. Düğümde Kontrol Topolojisi Yönetimi İlkeleri.
allowedUnsafeSysctls kernel.shm*, kernel.msg*, kernel.sem, fs.mqueue.*, , net.* Hiçbiri Güvenli olmayan sysctl veya güvenli olmayan sysctl desenlerinin izin verilen listesi.
containerLogMaxSizeMB Megabayt cinsinden boyut (MB) 50 Bir kapsayıcı günlük dosyasının döndürülmeden önceki en büyük boyutu (örneğin, 10 MB).
containerLogMaxFiles ≥ 2 5 Kapsayıcı için mevcut olabilecek en fazla kapsayıcı günlüğü dosyası sayısı.
podMaxPids -1 - çekirdek PID sınırı -1 (∞) Bir Pod'da çalışabilecek maksimum işlem kimliği sayısı.
seccompDefault Unconfined, RuntimeDefault Unconfined Tüm iş yükleri için varsayılan sekcomp profilini ayarlar. RuntimeDefault , güvenliği artırmak için belirli sistem çağrılarını kısıtlayarak containerd'ın varsayılan seccomp profilini kullanır. Kısıtlı sistem çağrıları başarısız olur. Unconfined sistem çağrıları üzerinde hiçbir kısıtlama koymaz, böylece tüm sistem çağrılarına izin verir ve güvenliği azaltır. Daha fazla bilgi için kapsayıcılı varsayılan seccomp profiline bakın. Bu parametre önizleme aşamasındadır. komutunu kullanarak "KubeletDefaultSeccompProfilePreview" özellik bayrağını az feature register--namespace "Microsoft.ContainerService".

Windows kubelet özel yapılandırması

Parametre İzin verilen değerler/aralık Varsayılan Açıklama
imageGcHighThreshold 0-100 85 Görüntü çöp toplama işleminin her zaman çalıştırıldığı disk kullanımı yüzdesi. Çöp toplamayı tetikleyen minimum disk kullanımı. Görüntü çöp toplamayı devre dışı bırakmak için 100 olarak ayarlayın.
imageGcLowThreshold 0-100, en yüksek değer imageGcHighThreshold 80 Görüntü atık toplama işleminin hiçbir zaman çalıştırılamadan önce disk kullanımı yüzdesi. Çöp toplamayı tetikleyebilen en düşük disk kullanımı.
containerLogMaxSizeMB Megabayt cinsinden boyut (MB) 10 Bir kapsayıcı günlük dosyasının döndürülmeden önceki en büyük boyutu (örneğin, 10 MB).
containerLogMaxFiles ≥ 2 5 Kapsayıcı için mevcut olabilecek en fazla kapsayıcı günlüğü dosyası sayısı.

Linux özel işletim sistemi yapılandırma ayarları

Önemli

Arama ve okunabilirliği basitleştirmek için, işletim sistemi ayarları bu makalede adıyla görüntülenir, ancak bunlar camelCase büyük harfe çevirme kuralı kullanılarak yapılandırma JSON dosyasına veya AKS API'sine eklenmelidir.

Örneğin, vm.max_map_count setting öğesini değiştirirseniz, yapılandırma JSON dosyasında vmMaxMapCount şeklinde yeniden biçimlendirmelisiniz.

Linux dosya tanıtıcısı sınırları

Yüksek miktarda trafiğe hizmet ederken, bu trafik genellikle çok sayıda yerel dosyadan gelir. Aşağıdaki çekirdek ayarlarını ve yerleşik sınırları, biraz sistem belleği pahasına daha fazlasını işleyebilmenizi sağlayacak şekilde ayarlayabilirsiniz.

Aşağıdaki tabloda, düğüm havuzu başına özelleştirebileceğiniz dosya tanıtıcısı sınırları listelenir:

Ayar İzin verilen değerler/aralık Ubuntu 22.04 varsayılan Ubuntu 24.04 varsayılan Azure Linux 3.0 varsayılanı Açıklama
fs.file-max 8192 - 9223372036854775807 9223372036854775807 9223372036854775807 9223372036854775807 Linux çekirdeğinin ayırmış olduğu en fazla dosya işleyicisi sayısı. Bu değer, dosya tanımlayıcısının tükenmesini önlemek ve kapsayıcılı iş yükleri için sistem genelinde sınırsız dosya tutamaçları sağlamak için mümkün olan en yüksek değere (2^63-1) ayarlanır.
fs.inotify.max_user_watches 781250 - 2097152 1048576 1048576 1048576 Sistem tarafından izin verilen en fazla dosya izleme sayısı. Her saat , 32 bit çekirdekte kabaca 90 bayt, 64 bit çekirdekte ise kabaca 160 bayttır.
fs.aio-max-nr 65536 - 6553500 65536 65536 65536 aio-nr, geçerli sistem genelinde zaman uyumsuz io isteklerinin sayısını gösterir. aio-max-nr, aio-nr değerinin büyüyebileceği maksimum değeri değiştirmenize olanak tanır.
fs.nr_open 8192 - 20000500 1048576 1048576 1073741816 Bir işlemin ayırabileceği en fazla dosya işleyicisi sayısı.

Not

Parametresi Ubuntu fs.file-max ve Azure Linux'ta yukarı akış varsayılanlarına göre 9223372036854775807 (imzalı 64 bit tamsayı için en yüksek değer) olarak ayarlanır. Bu yapılandırma:

  • Sistem genelinde dosya tanımlayıcısı tükenmesine bağlı olarak hizmet reddi saldırılarını önler.
  • Kapsayıcı iş yüklerinin sistem genelindeki dosya tanıtıcı sınırları tarafından kısıtlanmamasını sağlar.
  • Tek tek işlemler için geçerli olan işlem başına sınırlar ( ve fs.nr_open) aracılığıyla ulimit.
  • Birçok kapsayıcının aynı anda çalışabileceği ve her birinin birden çok dosya ve ağ bağlantısı açabileceği kapsayıcı platformları için iyileştirir.

Linux yuvası ve ağ ayarlama

Çok sayıda eşzamanlı oturumu işlemesi beklenen aracı düğümleri için aşağıdaki TCP ve ağ seçeneklerini kullanabilir ve düğüm havuzu başına bunları ayarlayabilirsiniz:

Ayar İzin verilen değerler/aralık Ubuntu 22.04 varsayılan Ubuntu 24.04 varsayılan Azure Linux 3.0 varsayılanı Açıklama
net.core.somaxconn 4096 - 3240000 16384 16384 16384 Herhangi bir dinleme yuvası için kuyruğa alınabilecek en fazla bağlantı isteği sayısı. listen(2) işlevine geçirilen kapsam parametresinin değeri için üst sınır. Kapsam bağımsız değişkeni değerinden somaxconnbüyükse, bu sınıra kadar sessizce kesilir.
net.core.netdev_max_backlog 1000 - 3240000 1000 1000 1000 Arabirim paketleri çekirdekten daha hızlı aldığında INPUT tarafında kuyruğa alınan en fazla paket sayısı.
net.core.rmem_max 212992 - 134217728 1048576 1048576 212992 Bayt cinsinden en büyük alma yuvası arabellek boyutu.
net.core.wmem_max 212992 - 134217728 212992 212992 212992 Bayt cinsinden en büyük gönderme yuvası arabellek boyutu.
net.core.optmem_max 20480 - 4194304 20480 131072 20480 Yuva başına izin verilen en fazla yardımcı arabellek boyutu (seçenek bellek arabelleği). Yuva seçeneği belleği, yuva kullanımıyla ilgili ek yapıları depolamak için birkaç durumda kullanılır.
net.ipv4.tcp_max_syn_backlog 128 - 3240000 16384 16384 16384 Kuyrukta bekleyen ve bağlantı istemcisinden onay almamış en fazla bağlantı isteği sayısı. Bu sayı aşılırsa çekirdek istekleri reddetmeye başlar.
net.ipv4.tcp_max_tw_buckets 8000 - 1440000 262144 262144 131072 Sistem tarafından aynı anda tutulan en fazla yuva sayısı timewait . Bu sayı aşılırsa, bekleme süresi yuvası hemen yok edilir ve uyarı yazdırılır.
net.ipv4.tcp_fin_timeout 5 - 120 60 60 60 Yalnız bırakılmış bir bağlantının (artık herhangi bir uygulama tarafından başvurulmamaktadır) yerel uçta durdurulmadan önce FIN_WAIT_2 durumunda kalma süresi.
net.ipv4.tcp_keepalive_time 30 - 432000 7200 7200 7200 ETKINLEŞTIRildiğinde keepalive TCP'nin iletileri gönderme keepalive sıklığı.
net.ipv4.tcp_keepalive_probes 1 - 15 9 9 9 Bağlantının kesildiğini belirleyene kadar TCP'nin gönderdiği yoklama.keepalive
net.ipv4.tcp_keepalive_intvl 10 - 90 75 75 75 Yoklamaların ne sıklıkta gönderildiği. Bununla çarpılması tcp_keepalive_probes , yoklamalar başlatıldıktan sonra yanıt vermeyen bir bağlantıyı sonlandırma zamanını verir.
net.ipv4.tcp_tw_reuse 2 2 2 Protokol bakış açısından güvenli olduğunda yeni bağlantılar için yuvaların yeniden kullanılmasına TIME-WAIT izin verin.
net.ipv4.ip_local_port_range İlk: 1024 - 60999 ve Son: 32768 - 65535] İlk: 32768 ve Son: 60999 İlk: 32768 ve Son: 60999 İlk: 32768 ve Son: 60999 Tcp ve UDP trafiği tarafından yerel bağlantı noktasını seçmek için kullanılan yerel bağlantı noktası aralığı. İki sayıdan oluşur: İlk sayı aracı düğümünde TCP ve UDP trafiği için izin verilen ilk yerel bağlantı noktasıdır, ikincisi ise son yerel bağlantı noktası numarasıdır.
net.ipv4.neigh.default.gc_thresh1 128 - 80000 4096 4096 4096 ARP önbelleğinde olabilecek en az girdi sayısı. Girdi sayısı bu ayarın altındaysa çöp toplama tetiklenmemiştir.
net.ipv4.neigh.default.gc_thresh2 512 - 90000 8192 8192 8192 ARP önbelleğinde bulunabilecek yumuşak maksimum girdi sayısı. ARP atık toplama işlemi bu yumuşak maksimuma ulaştıktan yaklaşık 5 saniye sonra tetiklendiğinden bu ayar muhtemelen en önemli ayardır.
net.ipv4.neigh.default.gc_thresh3 1024 - 100000 16384 16384 16384 ARP önbelleğindeki sabit en fazla girdi sayısı.
net.netfilter.nf_conntrack_max 131072 - 2097152 Dinamik olarak hesaplanır Dinamik olarak hesaplanır Dinamik olarak hesaplanır nf_conntrack , Linux içindeki NAT için bağlantı girdilerini izleyen bir modüldür. Modül, nf_conntrack TCP protokolünün kurulan bağlantı kaydını kaydetmek için bir karma tablo kullanır. nf_conntrack_max karma tablosundaki düğüm sayısı üst sınırıdır; yani modül tarafından nf_conntrack desteklenen bağlantı sayısı üst sınırı veya bağlantı izleme tablosunun boyutudur. Varsayılan değer , şu formül kullanılarak sistem belleğine göre dinamik olarak hesaplanır: RAM_in_bytes / 16384 (veya RAM_in_MB * 64). Örneğin, 8 GB RAM'e sahip bir VM'nin varsayılan değeri yaklaşık 524.288 bağlantıdır. Gerçek değerler VM boyutuna ve kullanılabilir belleğe göre değişir.
net.netfilter.nf_conntrack_buckets 65536 - 524288 Dinamik olarak hesaplanır Dinamik olarak hesaplanır Dinamik olarak hesaplanır nf_conntrack , Linux içindeki NAT için bağlantı girdilerini izleyen bir modüldür. Modül, nf_conntrack TCP protokolünün kurulan bağlantı kaydını kaydetmek için bir karma tablo kullanır. nf_conntrack_buckets karma tablosunun boyutudur. Varsayılan değer , en az 1.024 demet ve en fazla 262.144 demet içeren şu formül RAM_in_bytes / 16384kullanılarak sistem belleğine göre dinamik olarak hesaplanır. Varsayılan nf_conntrack_max genellikle olarak nf_conntrack_buckets * 4ayarlanır. Gerçek değerler VM boyutuna ve kullanılabilir belleğe göre değişir.

Linux çalışan sınırları

Dosya tanımlayıcı sınırları gibi, bir işlemin oluşturabileceği çalışan veya iş parçacığı sayısı da hem çekirdek ayarı hem de kullanıcı sınırlarıyla sınırlıdır. AKS'de kullanıcı sınırı sınırsızdır. Aşağıdaki tabloda düğüm havuzu başına özelleştirebileceğiniz çekirdek ayarı listelenir:

Ayar Ubuntu 22.04 varsayılan Ubuntu 24.04 varsayılan Azure Linux 3.0 varsayılanı Açıklama
kernel.threads-max Dinamik olarak hesaplanır Dinamik olarak hesaplanır Dinamik olarak hesaplanır İşlemler çalışan iş parçacıklarını oluşturabilir. Oluşturulabilecek tüm iş parçacıklarının en fazla sayısı çekirdek ayarıyla kernel.threads-maxayarlanır. Varsayılan değer, şu formül kullanılarak sistem belleğine göre dinamik olarak hesaplanır: total_ram_pages / 4 (her sayfa genellikle 4 KB'tır). Gerçek değerler VM boyutuna ve kullanılabilir belleğe göre değişir.

Linux sanal belleği

Aşağıdaki tabloda, Linux çekirdeğinin sanal bellek (VM) alt sisteminin ve kirli verilerin diske çalışmasını ayarlamak için düğüm havuzu başına özelleştirebileceğiniz çekirdek writeout ayarları listelenir:

Ayar İzin verilen değerler/aralık Ubuntu 22.04 varsayılan Ubuntu 24.04 varsayılan Azure Linux 3.0 varsayılanı Açıklama
vm.max_map_count 65530 1048576 1048576 Bu dosya, bir işlemin sahip olabileceği en fazla bellek eşleme alanı sayısını içerir. Bellek eşleme alanları, doğrudan , mallocve mmaptarafından ve paylaşılan kitaplıkları yüklerken çağrısının mprotectmadviseyan etkisi olarak kullanılır.
vm.vfs_cache_pressure 1 - 100 100 100 100 Bu yüzde değeri, çekirdeğin dizini ve inode nesnelerini önbelleğe almak için kullanılan belleği geri kazanma eğilimini denetler.
vm.swappiness 0 - 100 60 60 60 Bu denetim, çekirdeğin bellek sayfalarını ne kadar agresif bir şekilde değiştireceklerini tanımlamak için kullanılır. Daha yüksek değerler agresifliği artırır, daha düşük değerler takas miktarını azaltır. 0 değeri, boş ve dosya destekli sayfa miktarı bir bölgedeki yüksek su işaretinden az olana kadar çekirdeğin değiştirme işlemini başlatmamasını bildirir.
swapFileSizeMB 1 MB - Geçici diskin boyutu (/dev/sdb) Hiçbiri Hiçbiri Hiçbiri SwapFileSizeMB, bu düğüm havuzundan aracı düğümlerinde oluşturulacak takas dosyasının MB cinsinden boyutunu belirtir.
transparentHugePageEnabled always, madvise, never always always madvise Transparent Hugepages , işlemcinizin bellek eşleme donanımını daha verimli bir şekilde kullanarak performansı geliştirmeye yönelik bir Linux çekirdek özelliğidir. Etkinleştirildiğinde, çekirdek mümkün olduğunda hugepages ayırmaya çalışır ve eğer mmap bölgesi doğal olarak 2 MB hizalanmışsa, herhangi bir Linux işlemi 2 MB sayfa alır. Sistem genelinde etkinleştirildiğinde hugepages bazı durumlarda uygulamalar daha fazla bellek kaynağı ayırabilir. Bir uygulama büyük bir bölge olabilir mmap , ancak bunun yalnızca 1 bayt'ını dokunabilir, bu durumda iyi bir neden olmadan 4k sayfa yerine 2 MB'lık bir sayfa tahsis edilebilir. Bu senaryo, sistem genelinde devre dışı bırakmanın hugepages veya yalnızca bölgelerin içinde MADV_HUGEPAGE madvise bulunmanın mümkün olmasının nedenidir.
transparentHugePageDefrag always, defer, defer+madvise, madvise, , never madvise madvise madvise Bu değer, çekirdeğin daha fazla hugepages kullanılabilir hale getirmek için bellek sıkıştırmasını agresif bir şekilde kullanıp kullanmayacağını denetler.