Birlikte yerleştirme ortamlarında gecikmeye duyarlı (LS) ve en iyi çaba (BE) uygulamaları aynı düğümü paylaşır. CPU istekleri ve sınırları tek başına BE iş yüklerinin LS iş yüklerini engellemesini önleyemez; bu durum özellikle yüksek yük altında daha belirgindir. CPU QoS, Linux zamanlama önceliklerini grup kimliği özelliği aracılığıyla kullanarak LS Pod'larına BE Pod'larından daha yüksek çekirdek zamanlama önceliği verir ve birlikte yerleştirme senaryolarındaki etkileşimi azaltır.
Temel kavramları anlamak için Kubernetes belgelerindeki Pod hizmet kalitesi sınıfları ve Konteynerlere ve Pod'lara bellek kaynakları atama konularına bakın.
CPU QoS nasıl çalışır?
ack-koordinator, her CPU cgroup'una bir grup kimliği atar. Çekirdek, bu kimlikleri kullanarak görevleri farklılaştırılmış önceliklerle zamanlar:
LS görevleri için daha hızlı zamanlama: İşletim sistemi, LS uygulama görevlerini daha yüksek öncelikle zamanlayarak yanıt hızını ve aktarım hızını artırır.
BE görevleri tarafından önceliğin alınmaması: Bir BE görevi uyandığında çalışan bir LS sürecinin önceliğini alamaz.
SMT yalıtımı: Eş Zamanlı Çoklu İş Parçacığı (SMT) ortamlarında BE görevleri aynı fiziksel çekirdekte LS görevleriyle paralel olarak çalışmaz; bu da donanım düzeyindeki kaynak çekişmesini önler.
Bir QoS sınıfı seçin
| QoS sınıfı | CPU zamanlama önceliği |
|---|---|
| LS (gecikmeye duyarlı) | Yüksek (grup kimliği: 2) |
| BE (en iyi çaba) | Düşük (grup kimliği: -1) |
koordinator.sh/qosClass: LS etiketiyle işaretlenen Pod'lar yüksek öncelikli olarak değerlendirilir. koordinator.sh/qosClass: BE etiketiyle işaretlenen Pod'lar ise düşük öncelikli olarak değerlendirilir. Bu etikete sahip olmayan Pod'lar için ack-koordinator yerel Kubernetes QoS sınıfına geri döner: BestEffort Pod'ları BE'ye, diğer tüm Pod'lar ise LS'ye eşlenir.
Ön koşullar
Başlamadan önce şunlara sahip olduğunuzdan emin olun:
1,18 veya sonraki bir sürümde çalışan bir ACK kümesi. Yükseltme yapmak için bkz. ACK kümelerini manuel olarak güncelleme.
Düğüm işletim sistemi olarak Alibaba Cloud Linux. Grup kimliği özelliği bu işletim sistemine özgü çekirdek parametrelerine dayanır. Çekirdek sürümü gereksinimleri için bkz. Grup kimliği özelliği.
ack-koordinator v0.8.0 veya sonraki bir sürümün yüklü olması. Yükleme talimatları için bkz. ack-koordinator (eski adıyla ack-slo-manager).
Düğümleriniz Alibaba Cloud Linux çalıştırmıyorsa BE Pod CPU kullanımını sınırlamak için bunun yerine CPU Suppress özelliğini kullanın.
Faturalama
ack-koordinator'u yüklemek ve kullanmak ücretsizdir. Aşağıdaki durumlarda ek maliyetler oluşabilir:
Çalışan düğüm kaynakları: ack-koordinator kendi kendine yönetilen bir bileşendir ve yüklemeden sonra çalışan düğümün CPU ve bellek kaynaklarını tüketir. Yükleme sırasında her modül için kaynak isteklerini yapılandırın.
Prometheus izleme: Enable Prometheus Monitoring for ACK-Koordinator seçeneğini etkinleştirir ve Alibaba Cloud Prometheus kullanırsanız sunulan ölçümler özel ölçümler olarak faturalandırılır. Maliyetler küme boyutuna ve uygulama sayısına bağlıdır. Bu seçeneği etkinleştirmeden önce Prometheus örneklerinin faturalandırması belgesini inceleyin ve tüketiminizi izlemek için kullanım verilerini sorgulayın.
CPU QoS'u etkinleştirin
CPU QoS'u bir ConfigMap kullanarak küme düzeyinde etkinleştirin, ardından Pod'larınızı uygun QoS sınıfıyla etiketleyin.
1. Adım: ConfigMap'i uygulayın
-
Aşağıdaki içeriğe sahip
configmap.yamladlı bir dosya oluşturun:CPU QoS'u Deployment gibi bir iş yüküne uygulamak için
template.metadataaltındaki Pod şablonunakoordinator.sh/qosClassetiketini ekleyin.apiVersion: v1 kind: ConfigMap metadata: name: ack-slo-config namespace: kube-system data: # Enable the CPU QoS feature for containers. resource-qos-config: | { "clusterStrategy": { "lsClass": { "cpuQOS": { "enable": true, "groupIdentity": 2 } }, "beClass": { "cpuQOS": { "enable": true, "groupIdentity": -1 } } } }lsClassalanı LS Pod'larını yapılandırır;beClassise BE Pod'larını yapılandırır. Aşağıdaki tablodacpuQOSaltındaki anahtar parametreler açıklanmaktadır.Parametre Tür Geçerli değerler Açıklama enableBoolean true/falsetrue: CPU QoS'u küme genelinde etkinleştirir.false: Devre dışı bırakır.groupIdentityInteger -1ile2arasındaCgroup için çekirdek zamanlama önceliği. Daha yüksek değerler daha yüksek öncelik anlamına gelir. Varsayılan: LS Pod'ları için 2, BE Pod'ları için-1. Bu sınıf için grup kimliğini devre dışı bırakmak üzere0olarak ayarlayın. -
kube-systemad alanındaack-slo-configConfigMap'inin zaten var olup olmadığını kontrol edin:-
Varsa diğer yapılandırma alanlarının üzerine yazmadan güncellemek için aşağıdaki yama komutunu çalıştırın:
kubectl patch cm -n kube-system ack-slo-config --patch "$(cat configmap.yaml)" -
Yoksa oluşturun:
kubectl apply -f configmap.yaml
-
2. Adım: Bir LS Pod'u dağıtın ve doğrulayın
-
Aşağıdaki içeriğe sahip
ls-pod-demo.yamladlı bir dosya oluşturun:apiVersion: v1 kind: Pod metadata: name: ls-pod-demo labels: koordinator.sh/qosClass: 'LS' # Specify the QoS class of the Pod as LS. spec: containers: - command: - httpd - -D - FOREGROUND image: registry.cn-zhangjiakou.aliyuncs.com/acs/apache-2-4-51-for-slo-test:v0.1 imagePullPolicy: Always name: apache resources: limits: cpu: "4" memory: 10Gi requests: cpu: "4" memory: 10Gi restartPolicy: Never schedulerName: default-scheduler -
Pod'u dağıtın:
kubectl apply -f ls-pod-demo.yaml -
Düğümde LS Pod'unun cgroup'una atanan grup kimliğini kontrol edin:
cat /sys/fs/cgroup/cpu/kubepods.slice/kubepods-pod1c20f2ad****.slice/cpu.bvt_warp_nsBeklenen çıktı:
# The group identity of the LS Pod is 2, which indicates high priority. 2
3. Adım: Bir BE Pod'u dağıtın ve doğrulayın
-
Aşağıdaki içeriğe sahip
be-pod-demo.yamladlı bir dosya oluşturun:apiVersion: v1 kind: Pod metadata: name: be-pod-demo labels: koordinator.sh/qosClass: 'BE' # Specify the QoS class of the Pod as BE. spec: containers: - args: - '-c' - '1' - '--vm' - '1' command: - stress image: registry-cn-beijing.ack.aliyuncs.com/acs/stress:v1.0.4 imagePullPolicy: Always name: stress restartPolicy: Always schedulerName: default-scheduler -
Pod'u dağıtın:
kubectl apply -f be-pod-demo.yaml -
Düğümde BE Pod'unun cgroup'una atanan grup kimliğini kontrol edin:
cat /sys/fs/cgroup/cpu/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod4b6e96c8****.slice/cpu.bvt_warp_nsBeklenen çıktı:
# The group identity of the BE Pod is -1, which indicates low priority. -1
LS Pod'unun grup kimliği 2, BE Pod'unun grup kimliği ise -1 değerindedir. Bu fark CPU QoS'un aktif olduğunu doğrular: çekirdek CPU kaynaklarını BE iş yüklerine kıyasla LS iş yüklerine öncelikli olarak tahsis eder.
SSS
ack-koordinator'a yükseltme sırasında protokol uyumluluğu
ack-slo-manager'ın önceki sürümleri (v0.8.0 ve öncesi) CPU QoS'u yapılandırmak için alibabacloud.com/qosClass ek açıklamasını kullanıyordu. ack-koordinator her iki protokolü de destekler; böylece bileşeni yükseltebilir ve Pod'larınızı koordinator.sh protokolüne kademeli olarak geçirebilirsiniz. Eski alibabacloud.com protokolüne desteğin 30 Temmuz 2023'te sona erdiğini unutmayın; kaynaklarınızı mümkün olan en kısa sürede yeni protokole güncelleyin.
| Bileşen sürümü | **alibabacloud.com protokolü** |
**koordinator.sh protokolü** |
|---|---|---|
| >= 0.5.2 ve < 0.8.0 | Desteklenir | Desteklenmez |
| >= 0.8.0 | Desteklenir | Desteklenir |
Sonraki adımlar
Tüm Pod'lar için adil tahsisi korurken LS uygulama belleği erişimine öncelik vermek için bellek QoS'u etkinleştirin. Bkz. Bellek QoS'u etkinleştirme.
LS ve BE iş yükleri arasında L3 önbelleğini ve bellek bant genişliğini yalıtın. Bkz. L3 önbelleğine ve MBA'ya dayalı kaynak yalıtımını etkinleştirme.