全部产品
Search
文档中心

Container Service for Kubernetes:Aktifkan memory QoS

更新时间:Jul 02, 2025

Kubernetes memungkinkan Anda menentukan permintaan dan batas sumber daya kontainer. Memori yang tersedia untuk aplikasi bergantung pada berbagai faktor, seperti pengambilan kembali cache halaman dan konsumsi memori berlebih oleh aplikasi lain. Dalam kasus ekstrem, kesalahan out of memory (OOM) terjadi karena memori pada node tidak mencukupi, sehingga menurunkan kinerja aplikasi pada node tersebut. Komponen ack-koordinator menyediakan fitur kualitas layanan memori (QoS) untuk kontainer. Anda dapat menggunakan komponen ini untuk menetapkan kelas QoS yang berbeda ke kontainer berdasarkan kebutuhan bisnis Anda. Ini memungkinkan Anda memprioritaskan permintaan memori aplikasi dengan kelas QoS tinggi sambil memastikan alokasi memori yang adil.

Catatan

Untuk membantu Anda lebih memahami dan menggunakan fitur memory QoS, kami sarankan Anda terlebih dahulu membaca topik-topik berikut dalam dokumentasi resmi Kubernetes: Kelas Kualitas Layanan Pod dan Tetapkan Sumber Daya Memori ke Kontainer dan Pod.

Pengenalan Fitur

Mengapa memory QoS?

Untuk memastikan bahwa pod dapat berjalan secara efisien dan aman di kluster Kubernetes, Kubernetes memungkinkan Anda menentukan permintaan dan batas sumber daya pod. Gambar berikut menunjukkan permintaan memori dan batas memori sebuah pod.

  • Permintaan Memori (requests.memory): Permintaan memori pod berlaku selama proses penjadwalan pod. Sistem menjadwalkan pod ke node yang memenuhi permintaan memori pod.

  • Batas Memori (limits.memory): Batas memori pod membatasi jumlah memori yang dapat digunakan pod pada node. Parameter memory.limit_in_bytes dalam file cgroup menentukan batas atas memori yang dapat digunakan oleh pod.

Penggunaan memori kontainer bergantung pada batas memori kontainer dan kapasitas memori node:

  • Batas Memori Kontainer: Jika jumlah memori yang digunakan oleh kontainer, termasuk cache halaman, hampir mencapai batas memori kontainer, pengambilan kembali memori tingkat memcg langsung dipicu untuk pod. Akibatnya, proses dalam pod diblokir. Dalam kasus ini, jika pod mengajukan permintaan memori dengan laju lebih cepat daripada memori diambil kembali, kesalahan OOM terjadi dan pod dihentikan.

  • Kapasitas Memori Node: Batas memori kontainer bisa lebih besar dari permintaan memori kontainer. Saat beberapa kontainer ditempatkan pada node, jumlah batas memori kontainer mungkin melebihi kapasitas memori node. Jika penggunaan memori keseluruhan pada node terlalu tinggi, kernel OS dapat mengambil kembali memori dari kontainer. Akibatnya, kinerja aplikasi Anda menurun. Dalam kasus ekstrem, kesalahan OOM terjadi karena memori pada node tidak mencukupi, dan aplikasi Anda dihentikan.

Deskripsi Fitur

Untuk meningkatkan kinerja aplikasi dan stabilitas node, ack-koordinator menyediakan fitur memory QoS untuk kontainer yang berjalan pada versi kernel Alibaba Cloud Linux yang berbeda. ack-koordinator secara otomatis mengonfigurasi memcg berdasarkan konfigurasi kontainer untuk mengaktifkan fitur lain seperti Memcg QoS, Pengambilan Kembali Asinkron Memcg Backend, dan Penilaian Watermark Minimum Global Memcg. Ini mengoptimalkan kinerja aplikasi sensitif memori sambil memastikan penjadwalan memori yang adil di antara kontainer.

Kebijakan Pengambilan Kembali Memori dan Kunci Memori

Fitur memory QoS memerlukan Anda mengonfigurasi beberapa parameter cgroup.

  • memory.limit_in_bytes: batas atas memori yang dapat digunakan oleh pod.

  • memory.high: ambang batas throttling memori. Kernel OS mengambil kembali memori untuk mencegah penggunaan memori melebihi nilai ini.

  • memory.wmark_high: ambang batas pengambilan kembali memori (wmarkRatio). Pengambilan kembali asinkron dilakukan pada memori yang dapat diambil kembali untuk memastikan penggunaan memori tetap di bawah ambang batas.

  • memory.min: ambang batas kunci memori. Anda dapat mengonfigurasi ambang batas kunci absolut (minLimitPercent) dan ambang batas kunci relatif (lowLimitPercent).

Untuk informasi lebih lanjut tentang parameter di atas, lihat Parameter Lanjutan.

Fitur memory QoS memberikan manfaat berikut:

  • Saat memori yang digunakan oleh pod hampir mencapai batas memori pod, memcg melakukan pengambilan kembali asinkron untuk jumlah memori tertentu. Ini mencegah pengambilan kembali semua memori yang digunakan oleh pod dan dengan demikian meminimalkan dampak buruk pada kinerja aplikasi yang disebabkan oleh pengambilan kembali memori langsung.

  • Pengambilan kembali memori dilakukan lebih adil di antara pod. Saat memori yang tersedia pada node menjadi tidak cukup, pengambilan kembali memori pertama kali dilakukan pada pod yang menggunakan lebih banyak memori daripada permintaan memori mereka. Ini memastikan memori yang cukup pada node saat pod mengajukan permintaan memori dalam jumlah besar.

  • Saat sistem mengambil kembali memori, sistem memprioritaskan permintaan memori pod sensitif latensi (LS), termasuk pod Guaranteed dan Burstable.

Konfigurasi Fleksibel dan Kompatibilitas Multi-Lingkungan

Fitur memory QoS didukung di Kubernetes 1.22 dan hanya mendukung cgroup v2. Untuk mengaktifkan memory QoS, Anda harus mengonfigurasi kubelet secara manual. Memory QoS berlaku untuk semua pod dan node dalam kluster dan oleh karena itu tidak mendukung konfigurasi granular halus. Dibandingkan dengan fitur memory QoS yang disediakan oleh Kubernetes open source, fitur memory QoS yang disediakan oleh ack-koordinator dioptimalkan dari perspektif berikut:

  • Menyediakan fitur lanjutan seperti pengambilan kembali asinkron backend memcg dan penilaian watermark minimum berdasarkan Alibaba Cloud Linux dan kompatibel dengan antarmuka cgroup v1 dan cgroup v2. Untuk informasi lebih lanjut tentang fitur kernel OS yang diperlukan oleh fitur memory QoS Container Service for Kubernetes (ACK), lihat Ikhtisar Fitur dan Antarmuka Kernel.

  • Memungkinkan Anda menggunakan anotasi atau ConfigMaps untuk dengan mudah dan fleksibel mengonfigurasi memory QoS granular halus untuk kontainer dalam pod, namespace, atau kluster tertentu.

Prasyarat

  • Sebuah kluster ACK yang memenuhi persyaratan berikut telah dibuat:

    • Versi Kubernetes: 1.18 atau lebih baru. Untuk informasi lebih lanjut tentang cara memperbarui kluster ACK, lihat Tingkatkan Kluster ACK Secara Manual.

    • OS: Alibaba Cloud Linux. Beberapa parameter yang diperlukan oleh fitur memory QoS bergantung pada Alibaba Cloud Linux. Untuk informasi lebih lanjut, lihat Parameter Lanjutan.

  • ack-koordinator 0.8.0 atau lebih baru telah diinstal. Untuk informasi lebih lanjut, lihat ack-koordinator (FAK ack-slo-manager).

Tagihan

Tidak ada biaya yang dikenakan saat Anda menginstal atau menggunakan komponen ack-koordinator. Namun, biaya mungkin dikenakan dalam skenario berikut:

  • ack-koordinator adalah komponen non-managed yang menggunakan sumber daya node pekerja setelah diinstal. Anda dapat menentukan jumlah sumber daya yang diminta oleh setiap modul saat menginstal komponen.

  • Secara default, ack-koordinator mengekspos metrik pemantauan fitur seperti profiling sumber daya dan penjadwalan granular halus sebagai metrik Prometheus. Jika Anda mengaktifkan metrik Prometheus untuk ack-koordinator dan menggunakan Managed Service for Prometheus, metrik ini dianggap metrik kustom dan biaya akan dikenakan untuk metrik ini. Biaya tergantung pada faktor-faktor seperti ukuran kluster Anda dan jumlah aplikasi. Sebelum mengaktifkan metrik Prometheus, kami sarankan Anda membaca topik Tagihan Managed Service for Prometheus untuk mempelajari tentang kuota gratis dan aturan tagihan metrik kustom. Untuk informasi lebih lanjut tentang cara memantau dan mengelola penggunaan sumber daya, lihat Kueri Jumlah Data Observabel dan Tagihan.

Catatan Penggunaan

Saat Anda mengaktifkan fitur memory QoS untuk pod, parameter cgroup dikonfigurasi secara otomatis berdasarkan rasio yang ditentukan dan parameter pod. Bagian ini menjelaskan cara mengaktifkan memory QoS untuk kontainer dalam pod, namespace, atau kluster tertentu.

Gunakan Anotasi untuk Mengaktifkan memory QoS untuk Kontainer dalam Pod Tertentu

Anda dapat menggunakan anotasi pod berikut untuk mengaktifkan memory QoS untuk kontainer dalam pod tertentu.

annotations:
  # Untuk mengaktifkan memory QoS untuk kontainer dalam pod, atur nilainya menjadi auto.
  koordinator.sh/memoryQOS: '{"policy": "auto"}'
  # Untuk menonaktifkan memory QoS untuk kontainer dalam pod, atur nilainya menjadi none.
  koordinator.sh/memoryQOS: '{"policy": "none"}'

Gunakan ConfigMaps untuk Mengaktifkan memory QoS untuk Kontainer dalam Kluster Tertentu

Anda dapat mengonfigurasi ConfigMap untuk mengaktifkan memory QoS untuk semua kontainer dalam kluster tertentu. Anda dapat menggunakan label pod koordinator.sh/qosClass untuk mengelola parameter memory QoS secara terpusat berdasarkan karakteristik aplikasi. Jika Anda menetapkan nilai label koordinator.sh/qosClass menjadi LS atau BE, tidak diperlukan anotasi untuk mengaktifkan memory QoS.

  1. Contoh ConfigMap berikut memberikan contoh cara mengaktifkan memory QoS untuk kontainer dalam kluster tertentu:

    apiVersion: v1
    data:
      resource-qos-config: |-
        {
          "clusterStrategy": {
            "lsClass": {
               "memoryQOS": {
                 "enable": true
               }
             },
            "beClass": {
               "memoryQOS": {
                 "enable": true
               }
             }
          }
        }
    kind: ConfigMap
    metadata:
      name: ack-slo-config
      namespace: kube-system
  2. Gunakan template YAML pod untuk menetapkan kelas QoS menjadi LS atau BE.

    Catatan

    Jika pod tidak memiliki label koordinator.sh/qosClass, ack-koordinator mengonfigurasi parameter memory QoS berdasarkan kelas QoS asli pod. Pod Guaranteed diberi pengaturan memory QoS default. Pod Burstable diberi pengaturan memory QoS default untuk kelas QoS LS. Pod BestEffort diberi pengaturan memory QoS default untuk kelas QoS BE.

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-demo
      labels:
        koordinator.sh/qosClass: 'LS' # Tetapkan kelas QoS pod menjadi LS.

  3. Periksa apakah ConfigMap ack-slo-config ada di namespace kube-system.

    • Jika ConfigMap ack-slo-config ada, kami sarankan Anda menjalankan perintah kubectl patch untuk memperbarui ConfigMap. Ini menghindari perubahan pengaturan lain dalam ConfigMap.

      kubectl patch cm -n kube-system ack-slo-config --patch "$(cat configmap.yaml)"
    • Jika ConfigMap ack-slo-config tidak ada, jalankan perintah berikut untuk membuat ConfigMap:

      kubectl apply -f configmap.yaml
  4. Opsional. Konfigurasikan parameter lanjutan.

Gunakan ConfigMaps untuk Mengaktifkan memory QoS untuk Kontainer dalam Namespace Tertentu

Jika Anda ingin mengaktifkan atau menonaktifkan memory QoS untuk pod kelas QoS LS dan BE dalam namespace tertentu, tentukan namespace dalam ConfigMap.

  1. Contoh ConfigMap berikut memberikan contoh cara mengaktifkan memory QoS untuk kontainer dalam kluster tertentu:

    apiVersion: v1
    data:
      resource-qos-config: |-
        {
          "clusterStrategy": {
            "lsClass": {
               "memoryQOS": {
                 "enable": true
               }
             },
            "beClass": {
               "memoryQOS": {
                 "enable": true
               }
             }
          }
        }
    kind: ConfigMap
    metadata:
      name: ack-slo-config
      namespace: kube-system
  2. Buat file bernama ack-slo-pod-config.yaml dan salin konten berikut ke file tersebut.

    Blok kode berikut digunakan untuk mengaktifkan atau menonaktifkan memory QoS untuk kontainer dalam namespace kube-system:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: ack-slo-pod-config
      namespace: kube-system # Anda perlu membuat namespace secara manual pada waktu pertama.
    data:
      # Aktifkan atau nonaktifkan memory QoS untuk kontainer dalam namespace tertentu.
      memory-qos: |
        {
          "enabledNamespaces": ["allow-ns"],
          "disabledNamespaces": ["block-ns"]
        }
  3. Jalankan perintah berikut untuk memperbarui ConfigMap:

    kubectl patch cm -n kube-system ack-slo-pod-config --patch "$(cat ack-slo-pod-config.yaml)"
  4. Opsional. Konfigurasikan parameter lanjutan.

Contoh

Dalam bagian ini, pod Redis digunakan sebagai contoh. Kondisi berikut digunakan untuk membandingkan latensi dan throughput pod sebelum memory QoS diaktifkan dan setelah memory QoS diaktifkan dalam skenario overcommitment memori:

  • Sebuah kluster ACK Pro digunakan.

  • Kluster berisi 2 node, masing-masing memiliki 8 vCPU dan 32 GB memori. Satu node digunakan untuk melakukan uji stres. Node lain menjalankan beban kerja dan berfungsi sebagai mesin yang diuji.

Prosedur

  1. Buat file bernama redis-demo.yaml dan salin konten berikut ke file tersebut:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: redis-demo-config
    data:
      redis-config: |
        appendonly yes
        appendfsync no
    ---
    apiVersion: v1
    kind: Pod
    metadata:
      name: redis-demo
      labels:
        koordinator.sh/qosClass: 'LS' # Tetapkan kelas QoS pod Redis menjadi LS.
      annotations:
        koordinator.sh/memoryQOS: '{"policy": "auto"}' # Tambahkan anotasi ini untuk mengaktifkan memory QoS.
    spec:
      containers:
      - name: redis
        image: redis:5.0.4
        command:
          - redis-server
          - "/redis-master/redis.conf"
        env:
        - name: MASTER
          value: "true"
        ports:
        - containerPort: 6379
        resources:
          limits:
            cpu: "2"
            memory: "6Gi"
          requests:
            cpu: "2"
            memory: "2Gi"
        volumeMounts:
        - mountPath: /redis-master-data
          name: data
        - mountPath: /redis-master
          name: config
      volumes:
        - name: data
          emptyDir: {}
        - name: config
          configMap:
            name: redis-demo-config
            items:
            - key: redis-config
              path: redis.conf
      nodeName: # Tetapkan nodeName ke nama node yang diuji.
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: redis-demo
    spec:
      ports:
      - name: redis-port
        port: 6379
        protocol: TCP
        targetPort: 6379
      selector:
        name: redis-demo
      type: ClusterIP
  2. Jalankan perintah berikut untuk menyebarkan Redis Server sebagai aplikasi uji.

    Anda dapat mengakses layanan redis-demo dari dalam kluster.

    kubectl apply -f redis-demo.yaml
  3. Simulasikan overcommitment memori.

    Gunakan alat Stress untuk meningkatkan beban pada memori dan memicu pengambilan kembali memori. Jumlah batas memori semua pod pada node melebihi memori fisik node.

    1. Buat file bernama stress-demo.yaml dan salin konten berikut ke file tersebut:

      apiVersion: v1
      kind: Pod
      metadata:
        name: stress-demo
        labels:
          koordinator.sh/qosClass: 'BE' # Tetapkan kelas QoS pod Stress menjadi BE.
        annotations:
          koordinator.sh/memoryQOS: '{"policy": "auto"}' # Tambahkan anotasi ini untuk mengaktifkan memory QoS.
      spec:
        containers:
          - args:
              - '--vm'
              - '2'
              - '--vm-bytes'
              - 11G
              - '-c'
              - '2'
              - '--vm-hang'
              - '2'
            command:
              - stress
            image: polinux/stress
            imagePullPolicy: Always
            name: stress
        restartPolicy: Always
        nodeName: # Tetapkan nodeName ke nama node yang diuji, yaitu node tempat pod Redis ditempatkan.

    2. Jalankan perintah berikut untuk menyebarkan stress-demo:

      kubectl apply -f stress-demo.yaml
  4. Jalankan perintah berikut untuk memeriksa watermark minimum global node:

    Catatan

    Dalam skenario overcommitment memori, jika watermark minimum global node diatur ke nilai rendah, OOM killer mungkin dipicu untuk semua pod pada node bahkan sebelum pengambilan kembali memori dilakukan. Oleh karena itu, kami sarankan Anda menetapkan watermark minimum global ke nilai tinggi. Dalam contoh ini, watermark minimum global diatur ke 4.000.000 KB untuk node yang diuji dengan memori 32 GiB.

    cat /proc/sys/vm/min_free_kbytes

    Output yang diharapkan:

    4000000
  5. Gunakan template YAML berikut untuk menyebarkan alat memtier-benchmark untuk mengirim permintaan ke node yang diuji:

    apiVersion: v1
    kind: Pod
    metadata:
      labels:
        name: memtier-demo
      name: memtier-demo
    spec:
      containers:
        - command:
            - memtier_benchmark
            - '-s'
            - 'redis-demo'
            - '--data-size'
            - '200000'
            - "--ratio"
            - "1:4"
          image: 'redislabs/memtier_benchmark:1.3.0'
          name: memtier
      restartPolicy: Never
      nodeName: # Tetapkan nodeName ke nama node yang digunakan untuk mengirim permintaan.

  6. Jalankan perintah berikut untuk memeriksa hasil tes dari memtier-benchmark:

    kubectl logs -f memtier-demo
  7. Gunakan template YAML berikut untuk menonaktifkan memory QoS untuk pod Redis dan pod Stress. Kemudian lakukan uji stres lagi dan bandingkan hasilnya.

    apiVersion: v1
    kind: Pod
    metadata:
      name: redis-demo
      labels:
        koordinator.sh/qosClass: 'LS'
      annotations:
        koordinator.sh/memoryQOS: '{"policy": "none"}' # Nonaktifkan memory QoS.
    spec:
      ...
    
    ---
    apiVersion: v1
    kind: Pod
    metadata:
      name: stress-demo
      labels:
        koordinator.sh/qosClass: 'BE'
      annotations:
        koordinator.sh/memoryQOS: '{"policy": "none"}' # Nonaktifkan memory QoS.
                            

Analisis Hasil

Tabel berikut menjelaskan hasil uji stres saat memory QoS diaktifkan dan dinonaktifkan.

  • Dinonaktifkan: Kebijakan memory QoS pod diatur ke none.

  • Diaktifkan: Kebijakan memory QoS pod diatur ke auto dan pengaturan memory QoS yang direkomendasikan digunakan.

Penting

Data dalam tabel berikut hanya untuk referensi. Data aktual yang dihasilkan dalam lingkungan pengujian Anda yang berlaku.

Metrik

Dinonaktifkan

Diaktifkan

Latency-avg

51,32 ms

47,25 ms

Throughput-avg

149,0 MB/s

161,9 MB/s

Tabel tersebut menunjukkan bahwa dalam skenario overcommitment memori, mengaktifkan fitur memory QoS mengurangi latensi aplikasi Redis sebesar 7,9% dan meningkatkan throughput sebesar 8,7%, dengan semua metrik menunjukkan peningkatan yang signifikan.

Parameter Lanjutan

Anda dapat mengaktifkan memory QoS untuk kontainer dalam pod atau kluster tertentu. Jika anotasi pod dan ConfigMaps digunakan untuk mengonfigurasi parameter memory QoS, anotasi pod akan didahulukan. Jika tidak ada anotasi pod yang ditambahkan untuk mengonfigurasi memory QoS, ack-koordinator mengambil parameter memory QoS dari ConfigMaps di namespace tertentu. Jika tidak ada konfigurasi yang ada di ConfigMaps dalam namespace, ack-koordinator mengambil parameter memory QoS dari ConfigMaps di kluster tertentu.

Catatan

Kolom Anotasi dan ConfigMap menunjukkan apakah Anda dapat mengonfigurasi parameter menggunakan anotasi dan ConfigMap. 对 menunjukkan didukung dan 错 menunjukkan tidak didukung.

Parameter

Tipe

Rentang nilai

Deskripsi

Anotasi Pod

ConfigMap

enable

Boolean

  • true

  • false

  • true: mengaktifkan memory QoS untuk semua kontainer dalam kluster. Pengaturan memcg yang direkomendasikan untuk kelas QoS kontainer digunakan.

  • false: menonaktifkan memory QoS untuk semua kontainer dalam kluster. Pengaturan memcg dikembalikan ke pengaturan asli untuk kelas QoS kontainer.

错

对

policy

String

  • auto

  • default

  • none

  • auto: mengaktifkan memory QoS untuk kontainer dalam pod dan menggunakan pengaturan yang direkomendasikan. Pengaturan yang direkomendasikan lebih diutamakan daripada pengaturan yang ditentukan dalam ConfigMap ack-slo-pod-config.

  • default: menentukan bahwa pod mewarisi pengaturan yang ditentukan dalam ConfigMap ack-slo-pod-config.

  • none: menonaktifkan memory QoS untuk pod. Pengaturan memcg terkait dikembalikan ke pengaturan asli. Pengaturan asli lebih diutamakan daripada pengaturan yang ditentukan dalam ConfigMap ack-slo-pod-config.

对

错

minLimitPercent

Int

0~100

Satuan: %. Nilai default: 0. Nilai default menunjukkan bahwa parameter ini dinonaktifkan.

Parameter ini menentukan proporsi permintaan memori pod yang tidak dapat diambil kembali. Parameter ini cocok untuk skenario di mana aplikasi sensitif terhadap cache halaman. Anda dapat menggunakan parameter ini untuk menyimpan file ke cache untuk mengoptimalkan kinerja baca dan tulis. Untuk informasi lebih lanjut, lihat topik Alibaba Cloud Linux Fitur Memcg QoS antarmuka cgroup v1.

Jumlah memori yang tidak dapat diambil kembali dihitung berdasarkan rumus berikut: Nilai memory.min = Permintaan Memori × Nilai minLimitPercent/100. Sebagai contoh, jika Anda menentukan Permintaan Memori=100MiB dan minLimitPercent=100 untuk sebuah kontainer, nilai memory.min adalah 104857600.

对

对

lowLimitPercent

Int

0~100

Satuan: %. Nilai default: 0. Nilai default menunjukkan bahwa parameter ini dinonaktifkan.

Parameter ini menentukan proporsi permintaan memori pod yang relatif tidak dapat diambil kembali. Untuk informasi lebih lanjut, lihat topik Alibaba Cloud Linux Fitur Memcg QoS antarmuka cgroup v1.

Jumlah memori yang relatif tidak dapat diambil kembali dihitung berdasarkan rumus berikut: Nilai memory.low = Permintaan Memori × Nilai lowLimitPercent/100. Sebagai contoh, jika Anda menentukan Permintaan Memori=100MiB dan lowLimitPercent=100 untuk sebuah kontainer, nilai memory.low adalah 104857600.

对

对

throttlingPercent

Int

0~100

Satuan: %. Nilai default: 0. Nilai default menunjukkan bahwa parameter ini dinonaktifkan.

Parameter ini menentukan ambang batas throttling memori untuk rasio penggunaan memori kontainer terhadap batas memori kontainer. Jika penggunaan memori kontainer melebihi ambang batas throttling memori, memori yang digunakan oleh kontainer akan diambil kembali. Parameter ini cocok untuk skenario overcommitment memori kontainer. Anda dapat menggunakan parameter ini untuk mencegah cgroups memicu OOM. Untuk informasi lebih lanjut, lihat topik Alibaba Cloud Linux Fitur Memcg QoS antarmuka cgroup v1.

Ambang batas throttling untuk penggunaan memori dihitung berdasarkan rumus berikut: Nilai memory.high = Batas Memori × Nilai throttlingPercent/100. Sebagai contoh, jika Anda menentukan Batas Memori=100MiB dan throttlingPercent=80 untuk sebuah kontainer, nilai memory.high adalah 83886080 (80 MiB).

对

对

wmarkRatio

Int

0~100

Satuan: %. Nilai default: 95. Nilai 0 menunjukkan bahwa parameter ini dinonaktifkan. Jika penggunaan memori melebihi ambang batas pengambilan kembali, fitur pengambilan kembali asinkron backend memcg dipicu.

Parameter ini menentukan ambang batas pengambilan kembali asinkron penggunaan memori terhadap batas memori atau penggunaan memori terhadap nilai memory.high. Untuk informasi lebih lanjut, lihat topik Alibaba Cloud Linux Pengambilan Kembali Asinkron Backend Memcg.

Jika throttlingPercent dinonaktifkan, ambang batas pengambilan kembali untuk penggunaan memori dihitung berdasarkan rumus berikut: Nilai memory.wmark_high = Batas Memori × wmarkRatio/100. Jika throttlingPercent diaktifkan, ambang batas pengambilan kembali untuk penggunaan memori dihitung berdasarkan rumus berikut: Nilai memory.wmark_high = Nilai memory.high × wmarkRatio/100. Sebagai contoh, jika Anda menentukan Batas Memori=100MiB dan wmarkRatio=95,throttlingPercent=80 untuk sebuah kontainer, ambang batas throttling memori yang ditentukan oleh memory.high adalah 83886080 (80 MiB), rasio pengambilan kembali memori memory.wmark_ratio adalah 95, dan ambang batas pengambilan kembali memori yang ditentukan oleh memory.wmark_high adalah 79691776 (76 MiB).

对

对

wmarkMinAdj

Int

-25~50

Satuan: %. Nilai default adalah -25 untuk kelas QoS LS dan 50 untuk kelas QoS BE. Nilai 0 menunjukkan bahwa parameter ini dinonaktifkan.

Parameter ini menentukan penyesuaian terhadap watermark minimum global untuk sebuah kontainer. Nilai negatif menurunkan watermark minimum global dan dengan demikian menunda pengambilan kembali memori untuk kontainer. Nilai positif meningkatkan watermark minimum global dan dengan demikian mempercepat pengambilan kembali memori untuk kontainer. Untuk informasi lebih lanjut, lihat topik Alibaba Cloud Linux Penilaian Watermark Minimum Global Memcg.

Sebagai contoh, jika Anda membuat pod dengan kelas QoS LS, pengaturan default parameter ini adalah memory.wmark_min_adj=-25, yang menunjukkan bahwa watermark minimum dikurangi sebesar 25% untuk kontainer dalam pod.

对

对

FAQ

Apakah fitur memory QoS yang diaktifkan berdasarkan versi lama protokol ack-slo-manager masih didukung setelah saya memutakhirkan dari ack-slo-manager ke ack-koordinator?

Dalam versi ack-slo-manager 0.8.0 dan sebelumnya, konfigurasi pod berikut digunakan:

  • Tetapkan kelas QoS melalui anotasi pod alibabacloud.com/qosClass

  • Konfigurasikan memory QoS melalui anotasi pod alibabacloud.com/memoryQOS

ack-koordinator mempertahankan kompatibilitas mundur dengan protokol berbasis anotasi yang digunakan dalam ack-slo-manager. Anda dapat memutakhirkan dari ack-slo-manager ke ack-koordinator secara mulus. Namun, dukungan kompatibilitas berakhir pada 30 Juli 2023. Kami sarankan Anda memigrasikan parameter sumber daya ke yang baru.

Tabel berikut menjelaskan kompatibilitas antara versi komponen yang berbeda dan fitur memory QoS.

Versi Komponen

Protokol alibabacloud.com

Protokol koordinator.sh

≥ 0.3.0 dan < 0.8.0

×

≥ 0.8.0