Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, NodeResourcesFit ağaç içi zamanlama eklentisini kullanarak Azure Kubernetes Service (AKS) kümelerinizin düğüm kullanımını geliştirmek için düğümlerinizi bin-packing yöntemiyle nasıl paketleyeceğinizi öğreneceksiniz. Varsayılan AKS zamanlayıcı, zamanlama podlarıyla daha düşük kullanıma sahip düğümlere öncelik veren bir NodeResourcesFit:LeastAllocated modda çalışır. AKS'de Yapılandırılabilir Zamanlayıcı Profilleri, bu varsayılan davranışı değiştirmenize ve daha yüksek kullanıma sahip düğümlere öncelik vermek için yapılandırmada ince ayar yapmanızı sağlar. Bu belge üç farklı özel zamanlayıcı profilini kapsarken, düğüm etkin noktalarını azaltırken kullanımı iyileştirmeye yönelik en iyi yöntem önerisini vurgular.
Düğüm bölme paketleme, podları düğüm havuzuna yaymak veya düğümleri erken ölçeklendirmek yerine düğümlerdeki pod yoğunluğunun artırılmasıyla kaynak kullanımını en üst düzeye çıkaran bir zamanlama stratejisidir. Kap yerleştirme, boşa harcanan kaynakların en aza indirilmesine yardımcı olur ve boşta olan veya az kullanılan düğümleri korumanın operasyonel maliyetini azaltabilir. Veriler CPU ve belleğin genellikle fazla istenen kaynaklar olduğunu gösterdiği için düğüm kullanımını geliştirmek kritik önem taşır. Buna ek olarak, GPU benimsemesi büyüdükçe, hızlandırıcıların verimli kullanımı göreli kıtlık ve maliyet nedeniyle eşit derecede kritik hale gelir.
Sınırlamalar
- AKS şu anda üçüncü taraf zamanlayıcıların veya ağaç dışı zamanlama eklentilerinin dağıtımını yönetmemektedir.
- AKS, zamanlayıcıyı hedefleyen
aks-systemağaç içi zamanlama eklentilerini desteklemez. Bu kısıtlama, kümenizde etkinleştirilmiş AKS eklentilerinde beklenmeyen değişikliklerin önlenmesine yardımcı olmak için uygulanır. Ayrıca, adlıprofilebiraks-systemtanımlayamazsınız.
Önkoşullar
- Azure CLI sürümü
2.76.0veya üstü. Sürümü bulmak için komutunuaz --versionçalıştırın ve sürümü yükseltmek için komutunu çalıştırınaz upgrade. Yüklemeniz veya yükseltmeniz gerekiyorsa bkz. Azure CLI'yı yükleme. - AKS kümenizde çalışan Kubernetes sürümü
1.33veya üzeri. -
aks-previewAzure CLI uzantısı sürümü18.0.0b27veya üstü. - Özellik bayrağını
UserDefinedSchedulerConfigurationPreviewAzure aboneliğinize kaydedin.
AKS kümesinde zamanlayıcı profili yapılandırmasını etkinleştirme
Yeni veya mevcut bir AKS kümesinde zamanlama profili yapılandırmasını etkinleştirebilirsiniz.
az aks createbayrağı ile zamanlayıcı profili yapılandırması etkinleştirilmiş bir AKS kümesi oluşturmak için--enable-upstream-kubescheduler-user-configurationkomutunu kullanın.# Set environment variables export RESOURCE_GROUP=<resource-group-name> export CLUSTER_NAME=<aks-cluster-name> # Create an AKS cluster with schedule profile configuration enabled az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --enable-upstream-kubescheduler-user-configuration \ --generate-ssh-keysOluşturma işlemi tamamlandıktan sonra komutunu kullanarak kümeye bağlanın
az aks get-credentials.az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
Zamanlayıcı denetleyicisinin yüklenmesini doğrulama
AKS kümenizde özelliği etkinleştirdikten sonra zamanlayıcı denetleyicisinin özel kaynak tanımının (CRD) komutu kullanılarak
kubectl getbaşarıyla yüklendiğini doğrulayın.kubectl get crd schedulerconfigurations.aks.azure.comUyarı
Özellik önceki bölümde başarıyla etkinleştirilmediyse bu komut başarılı olmaz.
RequestedtoCapacity Eklentisi ile düğüm paketlemeyi yapılandırma
Üç profilden biri, RequestedToCapacityRatio düğümleri açık bir kullanıma eşlemek için en ayrıntılı kullanıcı denetimini sağlar. Örneğin, bu zamanlama profili 50-85% bir kullanım bandı içindeki düğümleri tercih edecek şekilde yapılandırılmıştır, boş düğümlerden kaçınacak ve 90% veya daha fazla kullanımda neredeyse dolu düğümlerin önceliğini önemli ölçüde düşürerek bir boşluk bırakılmasını sağlar. Bu ayrıntı düzeyi göz önünde bulundurulduğunda, RequestedtoCapacity üretim kümeleri için AKS'de düğüm paketleme işlemi için önerilen puanlama stratejisidir.
Bu yapılandırma, CPU kullanımını düğüm seçiminde baskın faktör haline getirir ve yoğun CPU kullanan uygulamalar için aşırı doygunluğu önler. Son olarak, varsayılan olarak etkin bırakılırsa PodTopologySpread ağırlıklı puanı geçersiz kılabileceğinden NodeResourcesFit eklentisini devre dışı bırakmanız gerekir.
-
NodeResourcesFitbir düğümün pod çalıştırmak için yeterli kaynağı olup olmadığını zamanlayıcının nasıl değerlendirdiğini denetler. -
scoringStrategy: RequestedToCapacityRatiopod varsayımsal olarak yerleştirildikten sonra istenen kaynakların toplam düğüm kapasitesine oranına göre düğümleri puanlar. -
Resources,CPUveMemory'nin puanlama için dikkate alınmakta olan birincil kaynaklar olduğunu belirtir. ağırlığıyla8, CPU kullanımına sahip düğümler pod zamanlama döngüsü sırasında bellekten 8 kat daha yüksek puanlanır. Bu, yüksek kullanımlı düğümlerin seçilme olasılığını artırır. -
shape:düğüm kullanımını zamanlayıcı puanıyla eşler. Her nokta, bir kullanım yüzdesini ve buna karşılık gelen puanı temsil eder; noktalar arasında ise doğrusal bir puanlama vardır.
apiVersion: aks.azure.com/v1alpha1
kind: SchedulerConfiguration
metadata:
name: upstream
spec:
rawConfig: |
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: cpu-binpack-scheduler-RtC
plugins:
multiPoint:
enabled:
- name: NodeResourcesFit
disabled:
- name: PodTopologySpread
pluginConfig:
- name: NodeResourcesFit
args:
apiVersion: kubescheduler.config.k8s.io/v1
kind: NodeResourcesFitArgs
scoringStrategy:
type: RequestedToCapacityRatio
resources:
- name: cpu
weight: 8
- name: memory
weight: 1
requestedToCapacityRatio:
shape:
- utilization: 0
score: 0
- utilization: 30
score: 9
- utilization: 50
score: 10
- utilization: 85
score: 10
- utilization: 90
score: 5
- utilization: 100
score: 0
MostAllocated Eklentisi ile düğüm bölme paketlemeyi yapılandırma
Scheduler'ı MostAllocated kullanarak, yalnızca kaynak kullanımına göre düğümleri önceliklendirir. Kaynak kullanımı ne kadar yüksek olursa, düğüm o kadar yüksek puanlanır ve kullanılmayan düğümlerden kaçınılır veya gerekli olana kadar ölçeklendirme yapılır. Tek başına kullanıldığında, bu yapılandırma düğümlerin istenen sınırların ötesinde aşırı yüklenmesine yol açar ve kısıtlama veya ek darboğazlara neden olabilir.
Bu yapılandırma, CPU kullanımını düğüm seçiminde baskın faktör yapar. Tutarlı bir davranış sağlamak için PodTopologySpread eklentisini devre dışı bırakmanız gerekir, çünkü varsayılan olarak etkin bırakıldığında NodeResourcesFit tarafından belirlenen ağırlıklı puanı geçersiz kılabilir.
-
NodeResourcesFitbir düğümün pod çalıştırmak için yeterli kaynağı olup olmadığını zamanlayıcının nasıl değerlendirdiğini denetler. -
scoringStrategy: MostAllocatedpod isteklerine göre puanlamalar.MostAllocatedzamanlayıcıya yüksek kaynak kullanımına sahip düğümleri tercih etmelerini söyler. Bu strateji yoğun pod yerleşimini teşvik eder ve daha iyi düğüm kullanımına yardımcı olur. -
Resources,CPUveMemory'nin puanlama için dikkate alınmakta olan birincil kaynaklar olduğunu belirtir. ağırlığıyla8, CPU kullanımına sahip düğümler pod zamanlama döngüsü sırasında bellekten 8 kat daha yüksek puanlanır. Bu, yüksek kullanımlı düğümlerin seçilme olasılığını artırır.
apiVersion: aks.azure.com/v1alpha1
kind: SchedulerConfiguration
metadata:
name: upstream
spec:
rawConfig: |
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: cpu-binpack-scheduler-mA
plugins:
multiPoint:
enabled:
- name: NodeResourcesFit
disabled:
- name: PodTopologySpread
pluginConfig:
# NodeResourcesFit configuration
- name: NodeResourcesFit
args:
apiVersion: kubescheduler.config.k8s.io/v1
kind: NodeResourcesFitArgs
scoringStrategy:
type: MostAllocated
resources:
- name: cpu
weight: 8
- name: memory
weight: 1
MostAllocated ve NodeResourcesBalancedAllocation Eklentileri ile düğüm bölme paketlemeyi yapılandırma
Bu yapılandırma, hedef kaynakların dengeli kullanımına göre düğümleri puanlayarak basit ve verimli stratejiye MostAllocated bazı korumalar eklemeyi amaçlamaktadır.
NodeResourcesBalancedAllocation kullanıcı tanımlı oransal kullanıma sahip düğümlere pod yerleştirmeyi teşvik ederek genel verimliliği artırırken, asimetrik kaynak baskısından kaynaklanan darboğazları önler. Örneğin, kullanılmayan bol miktarda belleğe sahip CPU'ya bağlı düğümler, daha iyi CPU ve bellek kullanımı dengesine sahip düğümlere göre daha düşük puanlanır.
-
NodeResourcesBalancedAllocationdüğümleri, birden fazla kaynaktaki kaynak kullanımının ne kadar dengeli olduğuna göre puanlar. Bu eklenti, tek bir kaynağın kullanımını en üst düzeye çıkarmak yerine kaynak tüketiminin orantılı olduğu düğümleri tercih eder. -
Resourcesbakiye değerlendirmesi sırasında hangi kaynakların dikkate alınıyor olduğunu belirtir. CPU ve bellek ağırlığı eşit olduğunda, her iki kaynak da benzer düzeylerde kullanıldığında düğümler daha yüksek puanlanır.
apiVersion: aks.azure.com/v1alpha1
kind: SchedulerConfiguration
metadata:
name: upstream
spec:
rawConfig: |
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: cpu-binpack-scheduler-mA-BalancedAllocation
plugins:
multiPoint:
enabled:
- name: NodeResourcesFit
- name: NodeResourcesBalancedAllocation
disabled:
- name: PodTopologySpread
pluginConfig:
# NodeResourcesFit configuration
- name: NodeResourcesFit
args:
apiVersion: kubescheduler.config.k8s.io/v1
kind: NodeResourcesFitArgs
scoringStrategy:
type: MostAllocated
resources:
- name: cpu
weight: 8
- name: memory
weight: 1
- name: NodeResourcesBalancedAllocation
args:
apiVersion: kubescheduler.config.k8s.io/v1
kind: NodeResourcesBalancedAllocationArgs
resources:
- name: cpu
weight: 1
- name: memory
weight: 1
AKS kümesinin tamamına zamanlayıcı profili atama
cpu-bin-packing-scheduler.yamladlı bir dosya oluşturun veupstreamadlı CRD ile birlikte kullanın.komutunu kullanarak zamanlama yapılandırma bildirimini
kubectl applyuygulayın.kubectl apply -f cpu-bin-packing-scheduler.yamlBelirli iş yükleri için bu zamanlama mekanizmasını hedeflemek için pod dağıtımlarınızı aşağıdakilerle
schedulerNamegüncelleştirin:... ... spec: schedulerName: binpacking-scheduler ... ...
Sonraki Adımlar
AKS zamanlayıcı, diğer yapılandırmalar ve en iyi yöntemler hakkında daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın: