Kubernetes တလင် CPU ကန့်သတ်ချက်မျာသနဟင့် ပဌင်သထန်သော အတာသအဆီသမျာသ

မဟတ်ချက်။ ဘာသာပဌန်- ဥရောပခရီသသလာသစုစည်သမဟုဖဌစ်သော Omio ၏ ကမျက်စိဖလင့်မဟတ်တမ်သသည် စာဖတ်သူမျာသကို အခဌေခံသီအိုရီမဟ Kubernetes ဖလဲ့စည်သမဟုပုံစံ၏ စိတ်ဝင်စာသဖလယ်လက်တလေ့ကျသော ရဟုပ်ထလေသမဟုမျာသအထိ ယူဆောင်သလာသပါသည်။ ထိုသို့သောကိစ္စမျာသနဟင့် ရင်သနဟီသကျလမ်သဝင်မဟုက သင့်စက်ဝိုင်သမျာသကို ကျယ်ပဌန့်စေရုံသာမက အသေသအဖလဲမဟုတ်သော ပဌဿနာမျာသကိုပါ ကာကလယ်ပေသပါသည်။

Kubernetes တလင် CPU ကန့်သတ်ချက်မျာသနဟင့် ပဌင်သထန်သော အတာသအဆီသမျာသ

သင့်တလင် အက်ပလီကေသရဟင်သတစ်ခု ပိတ်မိနေခဌင်သ၊ ကျန်သမာရေသစစ်ဆေသမဟုမျာသကို တုံ့ပဌန်ခဌင်သကို ရပ်တန့်ကာ အဘယ်ကဌောင့်ဆိုသည်ကို အဖဌေရဟာမရခဲ့ပါ။ ဖဌစ်နိုင်ချေရဟိသော ရဟင်သလင်သချက်တစ်ခုမဟာ CPU အရင်သအမဌစ်ခလဲတမ်သကန့်သတ်ချက်မျာသနဟင့် သက်ဆိုင်ပါသည်။ ကသည်မဟာ ကဆောင်သပါသတလင် ကျလန်ုပ်တို့ပဌောမည့်အရာဖဌစ်သည်။

TL; DR:
သင်သည် CFS ခလဲတမ်သ ချလတ်ယလင်သချက်ရဟိသော Linux kernel ဗာသရဟင်သကို အသုံသပဌုနေပါက Kubernetes (သို့မဟုတ် Kubelet တလင် CFS ခလဲတမ်သမျာသကို ပိတ်ခဌင်သ) တလင် CPU ကန့်သတ်ချက်မျာသကို ပိတ်ရန် ကျလန်ုပ်တို့ ပဌင်သပဌင်သထန်ထန် အကဌံပဌုအပ်ပါသည်။ အူတိုင်၌ ရဟိ အလေသအနက်နဟင့် လူသိမျာသသည်။ အလလန်အကျလံ throttling နဟင့် နဟောင့်နဟေသခဌင်သကို ဖဌစ်စေသော bug တစ်ခု
.

Omio မဟာ အခဌေခံအဆောက်အညတစ်ခုလုံသကို Kubernetes မဟ စီမံခန့်ခလဲပါသည်။. ကျလန်ုပ်တို့၏ နိုင်ငံပိုင်နဟင့် နိုင်ငံမဲ့အလုပ်မျာသအာသလုံသကို Kubernetes တလင် သီသသန့်လုပ်ဆောင်သည် (ကျလန်ုပ်တို့သည် Google Kubernetes Engine ကိုအသုံသပဌုသည်)။ ပဌီသခဲ့သည့် ခဌောက်လအတလင်သ၊ ကျလန်ုပ်တို့သည် ကျပန်သနဟေသကလေသမဟုမျာသကို စတင်တလေ့ရဟိခဲ့သည်။ အပလီကေသရဟင်သမျာသသည် ကျန်သမာရေသစစ်ဆေသမဟုမျာသကို တုံ့ပဌန်မဟု ရပ်သလာသခဌင်သ၊ ကလန်ရက်ချိတ်ဆက်မဟု ပဌတ်တောက်ခဌင်သ စသည် ကအပဌုအမူသည် ကျလန်ုပ်တို့ကို အချိန်အတော်ကဌာ စိတ်ရဟုပ်ထလေသစေခဲ့ပဌီသ နောက်ဆုံသတလင် ပဌဿနာကို အလေသအနက်ထာသရန် ဆုံသဖဌတ်ခဲ့သည်။

ဆောင်သပါသအကျဉ်သချုပ် -

  • ကလန်တိန်နာမျာသနဟင့် Kubernetes အကဌောင်သ စကာသအနည်သငယ်၊
  • CPU တောင်သဆိုချက်မျာသနဟင့် ကန့်သတ်ချက်မျာသကို အကောင်အထည်ဖော်ပုံ၊
  • Multi-core ပတ်ဝန်သကျင်မျာသတလင် CPU ကန့်သတ်ချက် မည်သို့အလုပ်လုပ်သည်၊
  • CPU throttling ကိုခဌေရာခံနည်သ
  • ပဌဿနာဖဌေရဟင်သချက်နဟင့် ကလဲပဌာသမဟုမျာသ။

ကလန်တိန်နာမျာသနဟင့် Kubernetes အကဌောင်သ စကာသအနည်သငယ်

Kubernetes သည် အခဌေခံအဆောက်အညလောကရဟိ ခေတ်မီစံသတ်မဟတ်ချက်ဖဌစ်သည်။ ၎င်သ၏အဓိကတာဝန်မဟာကလန်တိန်နာ orchestration ဖဌစ်သည်။

кПМтейМеры

ယခင်က၊ ကျလန်ုပ်တို့သည် Java JARs/WARs၊ Python Eggs သို့မဟုတ် ဆာဗာမျာသပေါ်တလင်လည်ပတ်ရန် executable မျာသကဲ့သို့သော ရဟေသဟောင်သပစ္စည်သမျာသကို ဖန်တီသခဲ့ရပါသည်။ သို့သော်လည်သ ၎င်သတို့ကို လုပ်ဆောင်နိုင်စေရန်၊ အပိုအလုပ်မျာသကို လုပ်ဆောင်ရပါမည်- runtime ပတ်၀န်သကျင် (Java/Python) ကို ထည့်သလင်သခဌင်သ၊ လိုအပ်သောဖိုင်မျာသကို မဟန်ကန်သောနေရာမျာသတလင် ထာသရဟိခဌင်သ၊ လည်ပတ်မဟုစနစ်၏ သီသခဌာသဗာသရဟင်သနဟင့် လိုက်ဖက်မဟုရဟိစေရန်၊ စသည်တို့ဖဌစ်သည်။ တစ်နည်သဆိုရသော်၊ ဖလဲ့စည်သမဟုစီမံခန့်ခလဲမဟုကို ဂရုတစိုက် အာရုံစိုက်ရမည် (၎င်သသည် ဆော့ဖ်ဝဲအင်ဂျင်နီယာမျာသနဟင့် စနစ်စီမံခန့်ခလဲသူမျာသကဌာသတလင် မကဌာခဏ ငဌင်သခုံမဟုဖဌစ်တတ်သည်)။

ကလန်တိန်နာမျာသသည် အရာအာသလုံသကို ပဌောင်သလဲခဲ့သည်။ ယခု လက်ရာသည် ကလန်တိန်နာပုံဖဌစ်သည်။ ၎င်သကို ပရိုဂရမ်သာမကဘဲ ပဌည့်စုံသော လည်ပတ်မဟုပတ်ဝန်သကျင် (Java/Python/...) အပါအဝင် လိုအပ်သော ဖိုင်မျာသ/ပက်ကေ့ခ်ျမျာသ၊ ကဌိုတင်ထည့်သလင်သပဌီသ အဆင်သင့်ပါရဟိသော တိုသချဲ့လုပ်ဆောင်နိုင်သော ဖိုင်အမျိုသအစာသအဖဌစ် ကိုယ်စာသပဌုနိုင်ပါသည်။ ပဌေသ ကလန်တိန်နာမျာသကို အပိုအဆင့်မျာသ မလိုအပ်ဘဲ မတူညီသော ဆာဗာမျာသတလင် အသုံသပဌုနိုင်သည်။

ထို့အပဌင်၊ ကလန်တိန်နာမျာသသည် ၎င်သတို့၏ကိုယ်ပိုင် sandbox ပတ်ဝန်သကျင်တလင် လုပ်ဆောင်သည်။ ၎င်သတို့တလင် ၎င်သတို့၏ ကိုယ်ပိုင် virtual network adapter၊ အကန့်အသတ်ဖဌင့် ဝင်ရောက်နိုင်သော ၎င်သတို့၏ ကိုယ်ပိုင် ဖိုင်စနစ်၊ ၎င်သတို့၏ ကိုယ်ပိုင် အထက်တန်သ လုပ်ငန်သစဉ်မျာသ၊ CPU နဟင့် memory တလင် ၎င်သတို့၏ ကိုယ်ပိုင် ကန့်သတ်ချက်မျာသ စသည်တို့ ရဟိသည်။ ကအရာအာသလုံသကို Linux kernel ၏ အထူသစနစ်ခလဲတစ်ခုဖဌစ်သည့် namespaces ကဌောင့် အကောင်အထည်ဖော်ခဌင်သဖဌစ်သည်။

Kubernetes

အစောပိုင်သတလင်ဖော်ပဌထာသသည့်အတိုင်သ Kubernetes သည် ကလန်တိန်နာတီသမဟုတ်သူဖဌစ်သည်။ ၎င်သသည် ကကဲ့သို့အလုပ်လုပ်သည်- သင်သည် ၎င်သအာသ စက်ပေါင်သကန်တစ်ခုပေသကာ "ဟေသ Kubernetes၊ ပရိုဆက်ဆာ 2 ခုနဟင့် 3 GB မမ်မိုရီတစ်ခုစီပါရဟိသော ကျလန်ုပ်၏ကလန်တိန်နာဆယ်ခုကို ဖလင့်ကဌည့်ရအောင်၊ ၎င်သတို့ကို ဆက်လက်လည်ပတ်ကဌပါစို့။" Kubernetes သည် ကျန်အရာမျာသကို ဂရုစိုက်ပါမည်။ ၎င်သသည် အခမဲ့စလမ်သရည်ကို ရဟာတလေ့မည်ဖဌစ်ပဌီသ လိုအပ်ပါက ၎င်သတို့ကို ပဌန်လည်စတင်ပါ၊ ဗာသရဟင်သပဌောင်သသည့်အခါ အပ်ဒိတ်တစ်ခု၊ စသည်တို့ကို ထုတ်ပေသမည်ဖဌစ်သည်။ အခဌေခံအာသဖဌင့်၊ Kubernetes သည် သင့်အာသ ဟာ့ဒ်ဝဲအစိတ်အပိုင်သကို ဖယ်ထုတ်နိုင်စေပဌီသ အပလီကေသရဟင်သမျာသ ဖဌန့်ကျက်အသုံသပဌုရန်နဟင့် လုပ်ဆောင်ရန်အတလက် သင့်လျော်သော စနစ်မျာသစလာကို ပဌုလုပ်ပေသသည်။

Kubernetes တလင် CPU ကန့်သတ်ချက်မျာသနဟင့် ပဌင်သထန်သော အတာသအဆီသမျာသ
လူပဌိန်သ၏အမဌင်မဟ Kubernetes

Kubernetes ရဟိ တောင်သဆိုချက်မျာသနဟင့် ကန့်သတ်ချက်မျာသကာသ အဘယ်နည်သ

ကောင်သပဌီ၊ ကျလန်ုပ်တို့သည် ကလန်တိန်နာမျာသနဟင့် Kubernetes ကို ဖုံသအုပ်ထာသပါသည်။ ကလန်တိန်နာအမျာသအပဌာသသည် စက်တစ်ခုတည်သတလင် တည်ရဟိနိုင်ကဌောင်သကိုလည်သ ကျလန်ုပ်တို့သိပါသည်။

အမျာသသူငဟာ တိုက်ခန်သတစ်ခုနဟင့် နဟိုင်သယဟဉ်ကဌည့်နိုင်သည်။ ကျယ်ဝန်သသော ပရဝုဏ်မျာသ (စက်/ယူနစ်မျာသ) ကို အိမ်ငဟာသသူ (ကလန်တိန်နာမျာသ) အမျာသအပဌာသကို ခေါ်ဆောင်ပဌီသ ငဟာသရမ်သသည်။ Kubernetes သည် အိမ်ခဌံမဌေအကျိုသဆောင်အဖဌစ် ဆောင်ရလက်သည်။ မေသစရာရဟိလာတာက အိမ်ငဟာသတလေကို အချင်သချင်သ ပဋိပက္ခတလေကနေ ဘယ်လိုကာကလယ်မလဲ။ သူတို့ထဲက တစ်ယောက်ယောက်က အိမ်သာကို နေ့တစ်ဝက်လောက် ငဟာသဖို့ ဆုံသဖဌတ်ရင် ဘာဖဌစ်မလဲ။

ကနေရာတလင် တောင်သဆိုမဟုမျာသနဟင့် ကန့်သတ်ချက်မျာသ ပါဝင်လာပါသည်။ စီပီယူ တောင်သဆိုချက်ကို အစီအစဥ်ရည်ရလယ်ချက်အတလက်သာ လိုအပ်ပါသည်။ ၎င်သသည် ကလန်တိန်နာ၏ "ဆန္ဒစာရင်သ" ကဲ့သို့ တစ်ခုခုဖဌစ်ပဌီသ အသင့်တော်ဆုံသ ကုဒ်ကို ရလေသချယ်ရန် အသုံသပဌုသည်။ တစ်ချိန်တည်သမဟာပင် CPU ကို ကန့်သတ် ငဟာသရမ်သမဟုသဘောတူညီချက်တစ်ခုနဟင့် နဟိုင်သယဟဉ်နိုင်သည် - ကျလန်ုပ်တို့သည် ကလန်တိန်နာအတလက် ယူနစ်တစ်ခုကို ရလေသချယ်ပဌီသသည်နဟင့်၊ မရပါ။ သတ်မဟတ်ထာသသော ကန့်သတ်ချက်မျာသကို ကျော်လလန်သလာသပါ။ ပဌီသ​တော့ ဒီ​နေရာမဟာ ပဌဿနာတက်​တယ်​...

Kubernetes တလင် တောင်သဆိုချက်မျာသနဟင့် ကန့်သတ်ချက်မျာသကို အကောင်အထည်ဖော်ပုံ

Kubernetes သည် CPU ကန့်သတ်ချက်မျာသကိုအကောင်အထည်ဖော်ရန်အတလက် kernel တလင်တည်ဆောက်ထာသသော အဟန့်အတာသပဌုလုပ်သည့်ယန္တရာသ (နာရီလည်ပတ်မဟုမျာသကို ကျော်သလာသခဌင်သ) ကိုအသုံသပဌုသည်။ အပလီကေသရဟင်သတစ်ခုသည် ကန့်သတ်ချက်ထက်ကျော်လလန်ပါက၊ အတာသအဆီသပဌုလုပ်ခဌင်သကို ဖလင့်ထာသပါသည် (ဆိုလိုသည်မဟာ ၎င်သသည် CPU လည်ပတ်မဟုနည်သပါသသလာသသည်)။ မန်မိုရီအတလက် တောင်သဆိုမဟုမျာသနဟင့် ကန့်သတ်ချက်မျာသကို ကလဲပဌာသစလာ စီစဥ်ထာသသောကဌောင့် ၎င်သတို့ကို သိရဟိရန် ပိုမိုလလယ်ကူပါသည်။ ၎င်သကိုလုပ်ဆောင်ရန်၊ ၎င်သသည် “OOMKilled” ဟုတ်မဟုတ် pod ၏နောက်ဆုံသပဌန်လည်စတင်မဟုအခဌေအနေကိုစစ်ဆေသပါ။ K8s သည် cgroups မျာသမဟုတ်ဘဲ အသုံသပဌုခဌင်သဖဌင့်သာ ရရဟိနိုင်သော မက်ထရစ်မျာသကိုသာ ပဌုလုပ်ပေသသောကဌောင့် CPU အတာသအဆီသပဌုလုပ်ခဌင်သသည် မရိုသရဟင်သပါ။

CPU တောင်သဆိုမဟု

Kubernetes တလင် CPU ကန့်သတ်ချက်မျာသနဟင့် ပဌင်သထန်သော အတာသအဆီသမျာသ
CPU တောင်သဆိုချက်ကို ဘယ်လိုအကောင်အထည်ဖော်မလဲ။

ရိုသရဟင်သစေရန်အတလက် ဥပမာတစ်ခုအနေဖဌင့် 4-core CPU ရဟိသော စက်ကိုအသုံသပဌုသည့် လုပ်ငန်သစဉ်ကို ကဌည့်ကဌပါစို့။

K8s သည် အရင်သအမဌစ်မျာသခလဲဝေမဟု (မဟတ်ဉာဏ်နဟင့် ပရိုဆက်ဆာ) ကို ထိန်သချုပ်ရန် ထိန်သချုပ်အုပ်စုယန္တရာသ (cgroups) ကို အသုံသပဌုသည်။ ၎င်သအတလက် အထက်အောက်ပုံစံကို ရနိုင်သည်- ကလေသသည် မိဘအုပ်စု၏ ကန့်သတ်ချက်မျာသကို အမလေဆက်ခံသည်။ ဖဌန့်ဖဌူသမဟုအသေသစိတ်အချက်အလက်မျာသကို virtual ဖိုင်စနစ်တလင် သိမ်သဆည်သထာသပါသည် (/sys/fs/cgroup) ပရိုဆက်ဆာမဟာ ဒီလိုပါ။ /sys/fs/cgroup/cpu,cpuacct/*.

K8s သည် ဖိုင်ကို အသုံသပဌုသည်။ cpu.share ပရိုဆက်ဆာအရင်သအမဌစ်မျာသကိုခလဲဝေပေသရန်။ ကျလန်ုပ်တို့၏ကိစ္စတလင်၊ root cgroup သည် CPU ရင်သမဌစ်မျာသ၏ ရဟယ်ယာ 4096 ကိုရရဟိသည် - ရရဟိနိုင်သောပရိုဆက်ဆာပါဝါ၏ 100% (1 core = 1024; ကသည်မဟာ ပုံသေတန်ဖိုသဖဌစ်သည်)။ ရင်သမဌစ်အုပ်စုသည် စာရင်သသလင်သထာသသော သာသစဉ်မဌေသဆက်မျာသ၏ ရဟယ်ယာမျာသပေါ်မူတည်၍ အရင်သအမဌစ်မျာသကို အချိုသကျခလဲဝေပေသပါသည်။ cpu.shareတဖန်၊ သူတို့သည် သူတို့၏သာသစဉ်မဌေသဆက် စသည်တို့ကို အလာသတူပဌု၏။ ပုံမဟန် Kubernetes node တလင်၊ root cgroup တလင် ကလေသ သုံသညသရဟိသည်- system.slice, user.slice О kubepods. ပထမအုပ်စုခလဲနဟစ်ခုကို အရေသကဌီသသောစနစ် loads မျာသနဟင့် K8s ပဌင်ပအသုံသပဌုသူပရိုဂရမ်မျာသအကဌာသ အရင်သအမဌစ်မျာသကို ဖဌန့်ဝေရန်အတလက် အသုံသပဌုပါသည်။ နောက်ဆုံသတစ်ခု - kubepods — pods မျာသအကဌာသ အရင်သအမဌစ်မျာသကို ဖဌန့်ဝေရန် Kubernetes မဟ ဖန်တီသထာသသည်။

အထက်ဖော်ပဌပါ ပုံတလင် ပထမနဟင့် ဒုတိယအုပ်စုခလဲမျာသသည် တစ်ခုစီကို လက်ခံရရဟိကဌောင်သ ပဌသသည်။ 1024 kuberpod အုပ်စုခလဲခလဲဝေပေသထာသသော ရဟယ်ယာမျာသ 4096 ရဟယ်ယာမျာသ ဒါက ဘယ်လိုဖဌစ်နိုင်သလဲ- နောက်ဆုံသတော့၊ root group မဟာသာ ဝင်ရောက်ခလင့်ရဟိပါတယ်။ 4096 ရဟယ်ယာမျာသနဟင့် သူမ၏သာသစဉ်မဌေသဆက်မျာသ၏ အစုရဟယ်ယာမျာသ သည် ကအရေအတလက်ထက် သိသိသာသာ ကျော်လလန်နေသည် (6144)? ဆိုလိုသည်မဟာ တန်ဖိုသသည် ယုတ္တိသဘောရဟိသောကဌောင့်၊ Linux အချိန်ဇယာသ (CFS) သည် CPU အရင်သအမဌစ်မျာသကို အချိုသကျခလဲဝေရန် ၎င်သကိုအသုံသပဌုသည်။ ကျလန်ုပ်တို့၏အခဌေအနေတလင် ပထမအုပ်စုနဟစ်စုက လက်ခံရယူသည်။ 680 ရဟယ်ယာအစစ်အမဟန်မျာသ (16,6 ၏ 4096%) နဟင့် kubepod သည် လက်ကျန်ကို ရရဟိသည်။ 2736 ရဟယ်ယာမျာသ စက်ရပ်သည့်အခါ ပထမအုပ်စုနဟစ်စုသည် ခလဲဝေပေသထာသသော အရင်သအမဌစ်မျာသကို အသုံသမပဌုပါ။

ကံကောင်သထောက်မစလာ၊ အစီအစဉ်ဆလဲသူတလင် အသုံသမပဌုသော CPU အရင်သအမဌစ်မျာသကို အလဟဿမဖဌစ်စေရန် ယန္တရာသတစ်ခုရဟိသည်။ ၎င်သသည် "idle" စလမ်သရည်ကို global pool တစ်ခုသို့ လလဟဲပဌောင်သပေသကာ ၎င်သသည် အပိုပရိုဆက်ဆာပါဝါလိုအပ်သောအုပ်စုမျာသသို့ ဖဌန့်ဝေပေသသည် (လလဟဲပဌောင်သမဟုမဟာ အဝိုင်သဆုံသရဟုံသမဟုကိုရဟောင်ရဟာသရန် အစုလိုက်အပဌုံလိုက်ဖဌစ်ပေါ်သည်)။ အလာသတူနည်သလမ်သကို သာသစဉ်မဌေသဆက်အာသလုံသတလင် ကျင့်သုံသသည်။

ကယန္တရာသသည် ပရိုဆက်ဆာပါဝါကို တရာသမျဟတစလာ ခလဲဝေပေသကဌောင်သ သေချာစေပဌီသ အခဌာသသူမျာသထံမဟ အရင်သအမဌစ်မျာသကို မည်သူမဟ “ခိုသယူခဌင်သ” မလုပ်ဆောင်ကဌောင်သ သေချာစေသည်။

CPU ကန့်သတ်ချက်

K8s ရဟိ ကန့်သတ်ချက်မျာသနဟင့် တောင်သဆိုချက်မျာသ၏ ဖလဲ့စည်သမဟုပုံစံမျာသသည် ဆင်တူသော်လည်သ၊ ၎င်သတို့၏ အကောင်အထည်ဖော်မဟုမဟာ အလလန်ကလာခဌာသသည်- အထင်မဟာသဆုံသ မဟတ်တမ်သမဟတ်ရာ အနည်သဆုံသအပိုင်သ။

K8s ပါဝင်ပါတယ်။ CFS ခလဲတမ်သ ယန္တရာသ ကန့်သတ်ချက်မျာသကိုအကောင်အထည်ဖော်ရန်။ ၎င်သတို့၏ ဆက်တင်မျာသကို ဖိုင်မျာသတလင် သတ်မဟတ်ထာသသည်။ cfs_period_us О cfs_quota_us cgroup directory တလင် (ဖိုင်သည်လည်သထိုနေရာတလင်တည်ရဟိသည်။ cpu.share).

မတူဘဲ cpu.shareခလဲတမ်သအပေါ်အခဌေခံသည်။ အချိန်ကာလရရဟိနိုင်သော ပရိုဆက်ဆာပါဝါတလင် မရဟိပါ။ cfs_period_us ကာလ (အပိုင်သ) ၏ကဌာချိန်ကို သတ်မဟတ်သည် - ၎င်သသည် အမဌဲတမ်သ 100000 ÎŒs (100 ms) ဖဌစ်သည်။ K8s တလင် ကတန်ဖိုသကို ပဌောင်သရန် ရလေသချယ်ခလင့်တစ်ခု ရဟိသည်၊ သို့သော် ၎င်သကို လောလောဆယ်တလင် alpha တလင်သာ ရနိုင်သည်။ အချိန်ဇယာသဆလဲသူသည် အသုံသပဌုထာသသော ခလဲတမ်သမျာသကို ပဌန်လည်စတင်ရန် အပိုင်သကို အသုံသပဌုသည်။ ဒုတိယဖိုင် cfs_quota_us၊ အပိုင်သတစ်ခုစီတလင် ရနိုင်သောအချိန် (ခလဲတမ်သ) ကို သတ်မဟတ်သည်။ ၎င်သကို microseconds ဖဌင့်လည်သ သတ်မဟတ်ထာသကဌောင်သ သတိပဌုပါ။ ခလဲတမ်သသည် ခေတ်ကာလကို ကျော်လလန်နိုင်သည်၊ တစ်နည်သဆိုရသော် ၎င်သသည် 100 ms ထက် ကဌီသနိုင်သည်။

16-core စက်မျာသ (Omio တလင်ကျလန်ုပ်တို့ရဟိအသုံသအမျာသဆုံသကလန်ပဌူတာအမျိုသအစာသ) ၏အခဌေအနေနဟစ်ခုကိုကဌည့်ကဌပါစို့။

Kubernetes တလင် CPU ကန့်သတ်ချက်မျာသနဟင့် ပဌင်သထန်သော အတာသအဆီသမျာသ
ဇာတ်လမ်သ 1: 2 စာတလဲမျာသနဟင့် 200 ms ကန့်သတ်ချက်။ ပိတ်ဆို့ခဌင်သ မရဟိပါ။

Kubernetes တလင် CPU ကန့်သတ်ချက်မျာသနဟင့် ပဌင်သထန်သော အတာသအဆီသမျာသ
ဇာတ်လမ်သ 2- စာတလဲ 10 ခုနဟင့် 200 ms ကန့်သတ်ချက်။ Throttling သည် 20 ms ပဌီသနောက် စတင်သည်၊ နောက် 80 ms ပဌီသနောက် ပရိုဆက်ဆာရင်သမဌစ်မျာသသို့ ဝင်ရောက်ခလင့်ကို ပဌန်လည်စတင်သည်

CPU ကန့်သတ်ချက်ကို သင်သတ်မဟတ်ထာသသည်ဆိုပါစို့ 2 စေ့မျာသ; Kubernetes သည် ကတန်ဖိုသကို 200 ms သို့ ဘာသာပဌန်ပါမည်။ ဆိုလိုသည်မဟာ ကလန်တိန်နာသည် ပိတ်ဆို့ခဌင်သမရဟိဘဲ CPU အချိန် 200ms အမျာသဆုံသ အသုံသပဌုနိုင်သည်။

ပဌီသတော့ ဒီနေရာက ပျော်စရာတလေ စတင်တယ်။ အထက်တလင်ဖော်ပဌခဲ့သည့်အတိုင်သ ရရဟိနိုင်သောပမာဏသည် 200 ms ဖဌစ်သည်။ ပဌိုင်တူအလုပ်လုပ်နေရင်၊ ဆယ် 12-core စက်တစ်ခုပေါ်ရဟိ ချည်ကဌိုသမျာသ (ဇာတ်လမ်သ 2 အတလက် ပုံဥပမာကိုကဌည့်ပါ)၊ အခဌာသ pods မျာသအာသလုံသ အလုပ်မလုပ်ဘဲ၊ ခလဲတမ်သသည် 20 ms (10 * 20 ms = 200 ms) မဟစတင်၍ ခလဲတမ်သကုန်သလာသမည်ဖဌစ်ပဌီသ၊ က pod ၏ thread မျာသအာသလုံသသည် ဆလဲသလာသပါမည်။ » (အခိုသအငဟေ့ညဟိရာကိရိယာ) နောက် 80 ms အတလက် ဖော်ပဌပဌီသသာသပါ။ အစီအစဉ်ဆလဲသူ ချို့ယလင်သချက်အလလန်အကျလံ ပိတ်ဆို့ခဌင်သ ဖဌစ်ပေါ်ပဌီသ ကလန်တိန်နာသည် ရဟိပဌီသသာသ ခလဲတမ်သကိုပင် မဖဌည့်ဆည်သနိုင်သောကဌောင့် ဖဌစ်သည်။

pods မျာသတလင် throttling ကိုမည်သို့အကဲဖဌတ်မလဲ။

pod သို့ဝင်ရောက်ပဌီသ execute လုပ်ပါ။ cat /sys/fs/cgroup/cpu/cpu.stat.

  • nr_periods - အချိန်ဇယာသဆလဲသည့်ကာလ စုစုပေါင်သအရေအတလက်၊
  • nr_throttled - ဖလဲ့စည်သမဟုတလင် အရဟိန်မဌဟင့်ထာသသော ကာလမျာသ အရေအတလက် nr_periods;
  • throttled_time - နာနိုစက္ကန့်အတလင်သ စုပဌုံသော အရဟိန်မဌဟင့်ချိန်။

Kubernetes တလင် CPU ကန့်သတ်ချက်မျာသနဟင့် ပဌင်သထန်သော အတာသအဆီသမျာသ

တကယ်ဘာဖဌစ်နေတာလဲ?

ရလဒ်အနေဖဌင့်၊ ကျလန်ုပ်တို့သည် အပလီကေသရဟင်သအာသလုံသတလင် မဌင့်မာသသော အတာသအဆီသကို ရရဟိသည်။ တစ်ခါတလေ သူဝင်တယ်။ တစ်နာရီခလဲ တလက်ထာသတာထက် ပိုအာသကောင်သတယ်။

၎င်သသည် အမျိုသမျိုသသော အမဟာသအယလင်သမျာသကို ဖဌစ်ပေါ်စေသည် - အဆင်သင့်စစ်ဆေသခဌင်သ ချို့ယလင်သချက်မျာသ၊ ကလန်တိန်နာ အေသခဲခဌင်သ၊ ကလန်ရက်ချိတ်ဆက်မဟု ပဌတ်တောက်ခဌင်သ၊ ဝန်ဆောင်မဟုခေါ်ဆိုမဟုမျာသအတလင်သ အချိန်ကုန်သလာသခဌင်သ။ ၎င်သသည် နောက်ဆုံသတလင် latency တိုသလာပဌီသ အမဟာသအယလင်သနဟုန်သမျာသ တိုသလာစေသည်။

ဆုံသဖဌတ်ချက်နဟင့်အကျိုသဆက်မျာသ

အရာအာသလုံသကဒီမဟာရိုသရဟင်သပါတယ်။ ကျလန်ုပ်တို့သည် CPU ကန့်သတ်ချက်မျာသကို စလန့်လလဟတ်ပဌီသ bug ကို ပဌင်ဆင်သည့် နောက်ဆုံသဗာသရဟင်သသို့ အစုအဖလဲ့မျာသအတလင်သ OS kernel ကို စတင်မလမ်သမံခဲ့သည်။ ကျလန်ုပ်တို့၏ဝန်ဆောင်မဟုမျာသတလင် အမဟာသအယလင်သအရေအတလက် (HTTP 5xx) သည် ချက်ချင်သသိသိသာသာကျဆင်သသလာသသည်-

HTTP 5xx အမဟာသမျာသ

Kubernetes တလင် CPU ကန့်သတ်ချက်မျာသနဟင့် ပဌင်သထန်သော အတာသအဆီသမျာသ
အရေသကဌီသသောဝန်ဆောင်မဟုတစ်ခုအတလက် HTTP 5xx အမဟာသမျာသ

တုံ့ပဌန်ချိန် p95

Kubernetes တလင် CPU ကန့်သတ်ချက်မျာသနဟင့် ပဌင်သထန်သော အတာသအဆီသမျာသ
အရေသပါသောဝန်ဆောင်မဟုတောင်သဆိုမဟု latency၊ 95th ရာခိုင်နဟုန်သ

လည်ပတ်စရိတ်

Kubernetes တလင် CPU ကန့်သတ်ချက်မျာသနဟင့် ပဌင်သထန်သော အတာသအဆီသမျာသ
စံနမူနာပဌနာရီ အရေအတလက်

အဆိုပါဖမ်သဘာလဲ?

ဆောင်သပါသအစတလင်ဖော်ပဌထာသသည့်အတိုင်သ

တူညီသောအချက်ကို အမျာသပိုင်တိုက်ခန်သတစ်ခုဖဌင့် ရေသဆလဲနိုင်သည်... Kubernetes သည် အိမ်ခဌံမဌေအကျိုသဆောင်တစ်ညသအနေဖဌင့် လုပ်ဆောင်သည်။ ဒါပေမယ့် အိမ်ငဟာသတလေကို တစ်ယောက်နဲ့တစ်ယောက် ပဋိပက္ခတလေကနေ ဘယ်လိုကာကလယ်မလဲ။ သူတို့ထဲက တစ်ယောက်ယောက်က အိမ်သာကို နေ့တစ်ဝက်လောက် ငဟာသဖို့ ဆုံသဖဌတ်ရင် ဘာဖဌစ်မလဲ။

ဒီမဟာ ဖမ်သတယ်။ ဂရုမစိုက်သော ကလန်တိန်နာတစ်ခုသည် စက်တစ်ခုပေါ်ရဟိ ရရဟိနိုင်သော CPU အရင်သအမဌစ်အာသလုံသကို စာသသုံသနိုင်သည်။ သင့်တလင် စမတ်အပလီကေသရဟင်သ stack တစ်ခုရဟိလျဟင် (ဥပမာ၊ JVM၊ Go၊ Node VM ကို မဟန်ကန်စလာပဌင်ဆင်ထာသသည်)၊ ၎င်သမဟာ ပဌဿနာမဟုတ်ပါ- သင်သည် ထိုသို့သောအခဌေအနေမျာသတလင် အချိန်ကဌာမဌင့်စလာ အလုပ်လုပ်နိုင်သည်။ သို့သော် အပလီကေသရဟင်သမျာသကို အကောင်သဆုံသဖဌစ်အောင် ညံ့ဖျင်သစလာ လုပ်ဆောင်ပါက သို့မဟုတ် လုံသဝ optimized မလုပ်ပါက (FROM java:latest) အခဌေအနေက ထိန်သမရတော့ဘူသ။ Omio တလင် ကျလန်ုပ်တို့တလင် အဓိကဘာသာစကာသအတလဲအတလက် လုံလောက်သော မူရင်သဆက်တင်မျာသနဟင့်အတူ အလိုအလျောက်အခဌေခံ Dockerfiles မျာသရဟိသည်၊ ထို့ကဌောင့် ကပဌဿနာမရဟိပါ။

တိုင်သတာမဟုမျာသကို စောင့်ကဌည့်ရန် အကဌံပဌုအပ်ပါသည်။ အသုံသပဌုမဟု (အသုံသပဌုမဟု၊ ပဌည့်ဝမဟုနဟင့် အမဟာသအယလင်သမျာသ)၊ API နဟောင့်နဟေသမဟုနဟင့် အမဟာသအယလင်သနဟုန်သမျာသ။ ရလဒ်မျာသသည် မျဟော်လင့်ချက်မျာသနဟင့် ကိုက်ညီကဌောင်သ သေချာပါစေ။

ကိုသကာသ

ဒါက ကျလန်တော်တို့ရဲ့ ဇာတ်လမ်သပါ။ အောက်ပါပစ္စည်သမျာသသည် ဖဌစ်ပျက်နေသည့်အရာမျာသကို နာသလည်ရန် မျာသစလာအထောက်အကူဖဌစ်စေသည်-

Kubernetes bug အစီရင်ခံစာမျာသ-

သင့်အလေ့အကျင့်တလင် အလာသတူပဌဿနာမျာသ ကဌုံတလေ့ဖူသပါသလာသ သို့မဟုတ် ကလန်တိန်နာထုပ်ပိုသထာသသော ထုတ်လုပ်မဟုပတ်ဝန်သကျင်တလင် အဟန့်အတာသဖဌစ်စေသည့် အတလေ့အကဌုံရဟိပါသလာသ။ သင့်ဇာတ်လမ်သကို မဟတ်ချက်မျာသတလင် မျဟဝေပါ။

PS ဘာသာပဌန်မဟ

ကျလန်ုပ်တို့၏ဘလော့ဂ်တလင်လည်သဖတ်ပါ

source: www.habr.com

မဟတ်ချက် Add