Paylaşılan düğümlerdeki gecikme duyarlı iş yüklerini korumak amacıyla BestEffort kapsülleri için L3 önbelleği ve bellek bant genişliğini sınırlayın.
Nasıl çalışır?
Intel Resource Director Technology (RDT), donanım kaynaklarını düğüm başına bölümlere ayırır. ack-koordinator, ack-slo-config ConfigMap dosyasını okur ve her kapsülün QoS sınıfına göre resctrl grup ayarlarını uygular. Varsayılan olarak BestEffort (BE) kapsülleri L3 önbelleğin %30'unu, gecikme duyarlı (LS) kapsülleri ise %100'ünü alır. Bellek bant genişliği varsayılan olarak her iki sınıf için de %100'dür.
Ön koşullar
Aşağıdakilere sahip olduğunuzdan emin olun:
CPU'su RDT'yi destekleyen en az bir Elastic Compute Service (ECS) bare metal instance içeren bir ACK kümesi (desteklenen modeller).
ack-koordinator 0.8.0 veya sonraki bir sürümü yüklüdür.
Faturalandırma
ack-koordinator ücretsizdir. Maliyetler iki alanda oluşabilir:
Düğüm kaynağı tüketimi: ack-koordinator yönetilmeyen bir bileşendir ve worker düğümlerinde çalışır. Yükü kontrol etmek için kurulum sırasında modül başına kaynak isteklerini belirtin.
Prometheus ölçümleri: ack-koordinator için Prometheus ölçümlerini etkinleştirir ve Managed Service for Prometheus kullanırsanız bu ölçümler özel ölçümler olarak sayılır ve buna göre faturalandırılır. Ücretler küme boyutuna ve uygulama sayısına bağlıdır. Etkinleştirmeden önce Managed Service for Prometheus faturalandırması nu inceleyin ve kullanımı Gözlemlenebilir verileri ve faturaları sorgulama ile izleyin.
Adım 1: Düğüm çekirdeğinde RDT'yi kontrol edin ve etkinleştirin
-
Çekirdekte RDT'nin etkin olup olmadığını kontrol edin:
cat /proc/cmdlineÇıktıda
l3catvembaifadelerini arayın:# Other fields omitted. This example shows only the RDT portion of the BOOT_IMAGE field. BOOT_IMAGE=... rdt=cmt,l3cat,l3cdp,mbal3catvembagörünüyorsa RDT zaten etkindir; Adım 2 bölümüne geçin. -
Çekirdek önyükleme parametrelerine RDT seçeneklerini ekleyin.
/etc/default/grubdosyasındaGRUB_CMDLINE_LINUXdeğerine aşağıdakileri ekleyin:ÖnemliRDT seçeneklerini mevcut ayarlardan bir boşlukla ayırın. Diğer çekirdek parametrelerinin üzerine yazmayın.
# Other fields omitted. This example shows only the RDT portion of the GRUB_CMDLINE_LINUX field. GRUB_CMDLINE_LINUX="... rdt=cmt,mbmtotal,mbmlocal,l3cat,l3cdp,mba" -
GRUB yapılandırmasını yeniden oluşturun:
# The file path may differ depending on your OS distribution. sudo grub2-mkconfig -o /boot/grub2/grub.cfg -
Düğümü yeniden başlatın:
sudo systemctl rebootDüğüm yeniden başladıktan sonra
cat /proc/cmdlinekomutunu tekrar çalıştırın vel3catilembaifadelerinin göründüğünü doğrulayın.
Adım 2: L3 önbellek ve MBA yalıtımını yapılandırın
L3 önbellek ve MBA yalıtımı kube-system ad alanındaki ack-slo-config ConfigMap tarafından kontrol edilir. ConfigMap'i uygulayın ardından ilkeyi etkinleştirmek için kapsülleri QoS sınıflarıyla etiketleyin.
ConfigMap'i uygulayın
Aşağıdaki içeriğe sahip configmap.yaml dosyasını oluşturun:
apiVersion: v1
kind: ConfigMap
metadata:
name: ack-slo-config
namespace: kube-system
data:
# resource-qos-config: configures QoS-based resource isolation features.
# resctrlQOS: controls Intel RDT (L3 cache and MBA) isolation per QoS class.
# enable: set to true to activate L3 cache and MBA isolation for pods of this class.
resource-qos-config: |
{
"clusterStrategy": {
"beClass": {
"resctrlQOS": {
"enable": true
}
}
}
}
Ardından ConfigMap'i uygulayın:
-
ack-slo-configzatenkube-systemiçinde varsa diğer ayarları korumak için yamalayın:kubectl patch cm -n kube-system ack-slo-config --patch "$(cat configmap.yaml)" -
ConfigMap yoksa oluşturun:
kubectl apply -f configmap.yaml
(İsteğe bağlı) QoS sınıfı başına yalıtım yüzdelerini ayarlayın
QoS sınıfı başına L3 önbelleği ve bellek bant genişliğini ayarlamak için ConfigMap'i açık yüzdelerle güncelleyin:
apiVersion: v1
kind: ConfigMap
metadata:
name: ack-slo-config
namespace: kube-system
data:
resource-qos-config: |
{
"clusterStrategy": {
"lsClass": {
"resctrlQOS": {
"enable": true,
"catRangeEndPercent": 100, # LS pods: 100% of L3 cache (default)
"mbaPercent": 100 # LS pods: 100% memory bandwidth (default)
}
},
"beClass": {
"resctrlQOS": {
"enable": true,
"catRangeEndPercent": 30, # BE pods: 30% of L3 cache (default)
"mbaPercent": 100 # BE pods: 100% memory bandwidth (default)
}
}
}
}
resctrlQOS parametreleri:
| Parametre | Tür | Geçerli değerler | Varsayılan (LS sınıfı) | Varsayılan (BE sınıfı) | Açıklama |
|---|---|---|---|---|---|
enable |
Boolean | true / false |
— | — | L3 önbellek ve MBA yalıtımını etkinleştirir veya devre dışı bırakır. |
catRangeEndPercent |
Int | 0–100 (%) | 100 | 30 | QoS sınıfına ayrılan L3 önbellek yüzdesi. |
mbaPercent |
Int | 0–100 (%), 10'un katı olmalıdır | 100 | 100 | QoS sınıfının kullanabileceği bellek bant genişliği yüzdesi. |
Kapsülleri bir QoS sınıfıyla etiketleyin
Yalıtmak istediğiniz kapsüllere koordinator.sh/qosClass etiketini uygulayın. Bu örnek bellek stres iş yükü çalıştıran bir BE kapsülü oluşturur:
apiVersion: v1
kind: Pod
metadata:
name: pod-demo
labels:
koordinator.sh/qosClass: 'BE' # Assigns this pod to the BE QoS class.
spec:
containers:
- name: pod-demo
image: polinux/stress
resources:
requests:
cpu: 1
memory: "50Mi"
limits:
cpu: 1
memory: "1Gi"
command: ["stress"]
args: ["--vm", "1", "--vm-bytes", "256M", "-c", "2", "--vm-hang", "1"]
Deployments için
koordinator.sh/qosClass
etiketini Deployment düzeyinde değil
template.metadata
alanında ayarlayın.
Kapsülü dağıtın:
kubectl apply -f pod-demo.yaml
Sonraki adımlar
Kullanılmayan Guaranteed veya Burstable kapsül kaynaklarını BE görevlerine tahsis etmek için Dinamik kaynak aşırı taahhüdünü etkinleştirme bölümüne bakın.
BE kapsül kaynak tüketimini sınırlamak için CPU QoS ve bellek QoS özelliğini etkinleştirin.