Kubernetes Pod အရင်သအမဌစ်မျာသကို မည်သို့ဝင်ရောက်သုံသနိုင်မည်နည်သ။

Kubernetes Pod အရင်သအမဌစ်မျာသကို မည်သို့ဝင်ရောက်သုံသနိုင်မည်နည်သ။Tohad ၏ဆုလာဘ်

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

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

အဖလဲ့ Mail.ru မဟ Kubernetes aaS ကလန်တိန်နာအရင်သအမဌစ်မျာသ (CPU နဟင့် MEM)၊ တောင်သဆိုမဟုမျာသနဟင့် အရင်သအမဌစ်ကန့်သတ်ချက်မျာသအကဌောင်သ ဆောင်သပါသကို ဘာသာပဌန်ဆိုထာသသည်။ ကဆက်တင်မျာသ၏ အကျိုသကျေသဇူသမျာသနဟင့် ၎င်သတို့ကို သင်မသတ်မဟတ်ပါက မည်သို့ဖဌစ်မည်ကို လေ့လာနိုင်မည်ဖဌစ်သည်။

ကလန်ပျူတာအရင်သအမဌစ်မျာသ

ကျလန်ုပ်တို့တလင် အောက်ပါယူနစ်မျာသဖဌင့် အရင်သအမဌစ်နဟစ်မျိုသရဟိသည်။

  • ဗဟိုလုပ်ဆောင်မဟုယူနစ် (CPU) - cores;
  • မန်မိုရီ (MEM) - ဘိုက်။

ကလန်တိန်နာတစ်ခုစီအတလက် အရင်သအမဌစ်မျာသကို သတ်မဟတ်ထာသသည်။ အောက်ပါ Pod YAML ဖိုင်တလင်၊ တောင်သဆိုထာသသော အရင်သအမဌစ်မျာသနဟင့် ကန့်သတ်ထာသသော အရင်သအမဌစ်မျာသပါရဟိသော အရင်သအမဌစ်ကဏ္ဍကို သင်တလေ့မဌင်ရလိမ့်မည်-

  • တောင်သဆိုထာသသော Pod အရင်သအမဌစ်မျာသ = ကလန်တိန်နာအာသလုံသ၏ တောင်သဆိုထာသသော အရင်သအမဌစ်မျာသ ပေါင်သစု;
  • Pod အရင်သအမဌစ်ကန့်သတ်ချက် = Pod အရင်သအမဌစ်ကန့်သတ်ချက်အာသလုံသ၏ ပေါင်သစု။

apiVersion: v1
kind: Pod
metadata:
  name: backend-pod-name
  labels:
    application: backend
spec:
  containers:
    — name: main-container
      image: my-backend
      tag: v1
      ports:
      — containerPort: 8080
      resources:
        requests:
          cpu: 0.2 # REQUESTED CPU: 200m cores
          memory: "1Gi" # REQUESTED MEM: 1Gi
        limits:
          cpu: 1 # MAX CPU USAGE: 1 core
          memory: "1Gi" # MAX MEM USAGE:  1Gi
    — name: other-container
      image: other-app
      tag: v1
      ports:
      — containerPort: 8000
      resources:
        requests:
          cpu: "200m" # REQUESTED CPU: 200m cores
          memory: "0.5Gi" # REQUESTED MEM: 0.5Gi
        limits:
          cpu: 1 # MAX CPU USAGE: 1 core
          memory: "1Gi" # MAX MEM USAGE:  1Gi

တောင်သဆိုထာသသော နဟင့် အကန့်အသတ်ရဟိသော အရင်သအမဌစ်မျာသ ဥပမာ

လယ်ယာ resources.requested specification Pod သည် လိုချင်သော node ကိုရဟာဖလေရန်အသုံသပဌုသော element တစ်ခုဖဌစ်သည်။ ၎င်သအတလက် Pod ဖဌန့်ကျက်ခဌင်သကို သင်စီစဉ်ပဌီသဖဌစ်သည်။ သင့်လျော်သော node ကိုသင်မည်သို့ရဟာဖလေသနည်သ။

Kubernetes တလင် master node သို့မဟုတ် master node (Kubernetes Control Plane) အပါအဝင် အစိတ်အပိုင်သမျာသစလာ ပါဝင်သည်။ master node တလင် လုပ်ငန်သစဉ်မျာသစလာ ရဟိသည်- kube-apiserver၊ kube-controller-manager နဟင့် kube-scheduler။

kube-scheduler လုပ်ငန်သစဉ်သည် အသစ်ဖန်တီသထာသသော pods မျာသကို ပဌန်လည်သုံသသပ်ရန်နဟင့် တောင်သဆိုထာသသည့် အရင်သအမဌစ်အရေအတလက်အပါအဝင် pod တောင်သဆိုမဟုအာသလုံသနဟင့် ကိုက်ညီသော ဖဌစ်နိုင်သည့် worker node မျာသကို ရဟာဖလေရန် တာဝန်ရဟိပါသည်။ kube-scheduler မဟတလေ့ရဟိသော node မျာသစာရင်သကို အဆင့်သတ်မဟတ်ထာသသည်။ pod ကို အမဌင့်ဆုံသရမဟတ်မျာသနဟင့်အတူ node တလင်စီစဉ်ထာသသည်။

Kubernetes Pod အရင်သအမဌစ်မျာသကို မည်သို့ဝင်ရောက်သုံသနိုင်မည်နည်သ။ခရမ်သရောင် Pod ကို ဘယ်မဟာထာသမလဲ။

ပုံတလင် kube-scheduler သည် ခရမ်သရောင် Pod အသစ်ကို အချိန်ဇယာသဆလဲသင့်သည်ကို သင်တလေ့နိုင်သည်။ Kubernetes အစုအဝေသတလင် A နဟင့် B တလင် node နဟစ်ခုပါရဟိသည်။ သင်တလေ့မဌင်ရသည့်အတိုင်သ၊ kube-scheduler သည် node A ရဟိ Pod တစ်ခုအာသ အချိန်ဇယာသဆလဲ၍မရပါ - ရရဟိနိုင်သော (မတောင်သဆိုထာသသော) ရင်သမဌစ်မျာသသည် ခရမ်သရောင် Pod ၏တောင်သဆိုမဟုမျာသနဟင့် မကိုက်ညီပါ။ ထို့ကဌောင့် ခရမ်သရောင် Pod မဟတောင်သဆိုထာသသော 1 GB မမ်မိုရီသည် node A တလင် အံမဝင်ပါ၊ ရရဟိနိုင်သောမမ်မိုရီမဟာ 0,5 GB ဖဌစ်သည်။ ဒါပေမယ့် node B မဟာ လုံလောက်တဲ့အရင်သအမဌစ်တလေရဟိပါတယ်။ ရလဒ်အနေဖဌင့် kube-scheduler သည် ခရမ်သရောင် Pod ၏ ညသတည်ရာသည် node B ဖဌစ်သည်ဟု ဆုံသဖဌတ်သည်။

တောင်သဆိုထာသသောရင်သမဌစ်မျာသသည် Pod ကိုလည်ပတ်ရန် node ရလေသချယ်မဟုအပေါ် မည်ကဲ့သို့အကျိုသသက်ရောက်သည်ကို ယခုကျလန်ုပ်တို့သိပါသည်။ ဒါပေမယ့် မဖဌစ်စလောက် အရင်သအမဌစ်တလေရဲ့ သက်ရောက်မဟုက ဘာလဲ။

အရင်သအမဌစ်ကန့်သတ်ချက်သည် CPU/MEM ဖဌတ်ကျော်၍မရသော နယ်နိမိတ်တစ်ခုဖဌစ်သည်။ သို့သော်၊ CPU အရင်သအမဌစ်သည် ပဌောင်သလလယ်ပဌင်လလယ်ဖဌစ်သောကဌောင့် ၎င်သတို့၏ CPU ကန့်သတ်ချက်သို့ရောက်ရဟိသော ကလန်တိန်နာမျာသသည် Pod ကို ထလက်ပေါက်ဖဌစ်စေမည်မဟုတ်ပါ။ ယင်သအစာသ၊ CPU ပိတ်ဆို့ခဌင်သ စတင်ပါမည်။ MEM အသုံသပဌုမဟု ကန့်သတ်ချက် ပဌည့်သလာသပါက၊ OOM-Killer ကဌောင့် ကလန်တိန်နာကို ရပ်တန့်ပဌီသ RestartPolicy ဆက်တင်မဟ ခလင့်ပဌုပါက ပဌန်လည်စတင်မည်ဖဌစ်သည်။

တောင်သဆိုထာသသည့်နဟင့် အမျာသဆုံသအရင်သအမဌစ်မျာသကို အသေသစိတ်ဖော်ပဌထာသသည်။

Kubernetes Pod အရင်သအမဌစ်မျာသကို မည်သို့ဝင်ရောက်သုံသနိုင်မည်နည်သ။Docker နဟင့် Kubernetes အကဌာသ အရင်သအမဌစ်ဆက်သလယ်ရေသ

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

မဟတ်ဉာဏ်- တောင်သဆိုမဟုနဟင့် ကန့်သတ်ချက်

containers:
...
 resources:
   requests:
     memory: "0.5Gi"
   limits:
     memory: "1Gi"

အထက်တလင်ဖော်ပဌခဲ့သည့်အတိုင်သ memory ကို bytes ဖဌင့်တိုင်သတာသည်။ ပေါ်အခဌေခံကာ Kubernetes စာရလက်စာတမ်သMemory ကို နံပါတ်တစ်ခုအနေနဲ့ သတ်မဟတ်နိုင်ပါတယ်။ အမျာသအာသဖဌင့် ၎င်သသည် ကိန်သပဌည့်၊ ဥပမာ 2678 - ဆိုလိုသည်မဟာ 2678 bytes ဖဌစ်သည်။ နောက်ဆက်တလဲမျာသကိုလည်သ သုံသနိုင်သည်။ G О Giအဓိကကတော့ သူတို့ဟာ မညီမျဟဘူသဆိုတာ သတိရဖို့ပါပဲ။ ပထမသည် ဒဿမဖဌစ်ပဌီသ ဒုတိယမဟာ ဒလိကိန်သဖဌစ်သည်။ k8s documentation တလင်ဖော်ပဌထာသသော ဥပမာကဲ့သို့ပင်။ 128974848, 129e6, 129M, 123Mi - ၎င်သတို့သည် လက်တလေ့တလင် တူညီသည်။

Kubernetes ရလေသချယ်မဟု limits.memory အလံနဟင့်ကိုက်ညီသည်။ --memory Docker မဟ အမဟုကိစ္စ request.memory Docker သည် ကအကလက်ကို အသုံသမပဌုသောကဌောင့် Docker အတလက် မျဟာသမရဟိပါ။ ဒါတောင် လိုအပ်လို့လာသလို့ မေသနိုင်ပါတယ်။ ဟုတ်တယ် လိုအပ်တယ်။ အရင်ကပဌောခဲ့သလိုပဲ၊ နယ်ပယ်က Kubernetes အတလက် အရေသကဌီသတယ်။ ၎င်သမဟအချက်အလက်မျာသအပေါ်အခဌေခံ၍ kube-scheduler သည် Pod ကိုအချိန်ဇယာသဆလဲရန် မည်သည့် node ကိုဆုံသဖဌတ်သည်။

တောင်သဆိုချက်တစ်ခုအတလက် မဟတ်ဉာဏ်မလုံလောက်ပါက မည်သို့ဖဌစ်မည်နည်သ။

ကလန်တိန်နာသည် တောင်သဆိုထာသသည့် မမ်မိုရီ၏ ကန့်သတ်ချက်သို့ ရောက်ရဟိသလာသပါက၊ ပေါ့ဒ်ကို node တလင် လုံလောက်သောမဟတ်ဉာဏ်မရဟိသည့်အခါ ရပ်သလာသသည့် Pods အုပ်စုတလင် ထာသရဟိမည်ဖဌစ်သည်။

မမ်မိုရီကန့်သတ်ချက် အလလန်နည်သပါက မည်သို့ဖဌစ်မည်နည်သ။

ကလန်တိန်နာသည် မမ်မိုရီကန့်သတ်ချက်ထက်ကျော်လလန်ပါက OOM-Killed ကဌောင့် ၎င်သကို ရပ်စဲသလာသမည်ဖဌစ်သည်။ မူလတန်ဖိုသရဟိသည့် RestartPolicy ကိုအခဌေခံ၍ ဖဌစ်နိုင်ပါက ပဌန်လည်စတင်ပါမည်။ Always.

တောင်သဆိုထာသတဲ့ memory ကို မသတ်မဟတ်ရင် ဘာဖဌစ်မလဲ။

Kubernetes သည် ကန့်သတ်တန်ဖိုသကို ယူကာ မူရင်သတန်ဖိုသအဖဌစ် သတ်မဟတ်မည်ဖဌစ်သည်။

မမ်မိုရီကန့်သတ်ချက်ကို မသတ်မဟတ်ပါက ဘာဖဌစ်နိုင်မလဲ။

ကလန်တိန်နာတလင် ကန့်သတ်ချက်မရဟိပါ၊ ၎င်သသည် မန်မိုရီကို အလိုရဟိသလောက် အသုံသပဌုနိုင်သည်။ အကယ်၍ သူသည် node ၏ရနိုင်သော memory အာသလုံသကိုစတင်အသုံသပဌုပါက OOM သည်သူ့ကိုသတ်လိမ့်မည်။ ထို့နောက် RestartPolicy ကို အခဌေခံ၍ ဖဌစ်နိုင်ပါက ကလန်တိန်နာကို ပဌန်လည်စတင်ပါမည်။

မမ်မိုရီကန့်သတ်ချက် မသတ်မဟတ်ရင် ဘာဖဌစ်မလဲ။

ကသည်မဟာ အဆိုသဆုံသအခဌေအနေဖဌစ်သည်- အချိန်ဇယာသဆလဲသူသည် ကလန်တိန်နာတလင် အရင်သအမဌစ်မည်မျဟလိုအပ်သည်ကို မသိဘဲ၊ ၎င်သသည် node တလင် ဆိုသရလာသသောပဌဿနာမျာသကို ဖဌစ်စေနိုင်သည်။ ကကိစ္စတလင်၊ namespace (LimitRange အာသဖဌင့်သတ်မဟတ်သည်) တလင်မူလကန့်သတ်ချက်မျာသရဟိရန်ကောင်သလိမ့်မည်။ ပုံသေကန့်သတ်ချက်မျာသမရဟိပါ - Pod သည် အကန့်အသတ်မရဟိ၊ ၎င်သသည် လိုချင်သလောက် memory ကိုအသုံသပဌုနိုင်သည်။

တောင်သဆိုထာသသောမဟတ်ဉာဏ်သည် node မဟပေသဆောင်နိုင်သောပမာဏထက်ပိုပါက Pod ကိုစီစဉ်မည်မဟုတ်ပါ။ အဲဒါကို မဟတ်ထာသဖို့ အရေသကဌီသတယ်။ Requests.memory - အနိမ့်ဆုံသတန်ဖိုသမဟုတ်ပါ။ ကအရာသည် ကလန်တိန်နာကို စဉ်ဆက်မပဌတ်လည်ပတ်နေစေရန် လုံလောက်သော memory ပမာဏ၏ ဖော်ပဌချက်ဖဌစ်သည်။

၎င်သသည် အမျာသအာသဖဌင့် တူညီသောတန်ဖိုသကို သတ်မဟတ်ရန် အကဌံပဌုထာသသည်။ request.memory О limit.memory. ၎င်သသည် Kubernetes သည် Pod ကိုလည်ပတ်ရန် လုံလောက်သော memory ပါသည့် node တစ်ခုပေါ်တလင် Pod တစ်ခုကို အချိန်ဇယာသဆလဲမည်မဟုတ်သော်လည်သ ၎င်သကိုလည်ပတ်ရန်မလုံလောက်ကဌောင်သသေချာစေသည်။ မဟတ်သာသထာသပါ- Kubernetes Pod အစီအစဉ်ရေသဆလဲခဌင်သသည်သာ ထည့်သလင်သစဉ်သစာသပါသည်။ requests.memoryနဟင့် limits.memory အကောင့်ထဲသို့ထည့်မထာသဘူသ။

CPU- တောင်သဆိုချက်နဟင့် ကန့်သတ်ချက်

containers:
...
 resources:
   requests:
     cpu: 1
   limits:
     cpu: "1200m"

CPU နဲ့ဆို အရာအာသလုံသက နည်သနည်သပိုရဟုပ်ထလေသပါတယ်။ Kubernetes နဟင့် Docker အကဌာသ ဆက်ဆံရေသပုံသို့ ပဌန်သလာသသောအခါ ၎င်သကို သင်တလေ့မဌင်နိုင်သည်။ request.cpu ကိုက်ညီ --cpu-sharesသော်လည်သ limit.cpu အလံနဟင့်ကိုက်ညီသည်။ cpus Docker တလင်။

Kubernetes တောင်သဆိုသော CPU ကို CPU လည်ပတ်မဟုအချိုသအစာသ 1024 ဖဌင့် မဌဟောက်ထာသသည်။ core အပဌည့် 1 ကို တောင်သဆိုလိုပါက ထည့်ရပါမည်။ cpu: 1အထက်တလင်ပဌထာသသည့်အတိုင်သ။

kernel အပဌည့်အစုံ (အချိုသ = 1024) တောင်သဆိုခဌင်သသည် သင့်ကလန်တိန်နာကို လက်ခံရရဟိမည်ဟု မဆိုလိုပါ။ အကယ်၍ သင့်အိမ်ရဟင်စက်တလင် core တစ်ခုသာရဟိပဌီသ သင်သည် ကလန်တိန်နာတစ်ခုထက်ပို၍ လုပ်ဆောင်နေပါက၊ ကလန်တိန်နာမျာသအာသလုံသသည် ၎င်သတို့ကဌာသတလင် ရရဟိနိုင်သော CPU ကို မျဟဝေရမည်ဖဌစ်သည်။ ဒါက ဘယ်လိုဖဌစ်တာလဲ။ ပုံကိုကဌည့်လိုက်ရအောင်။

Kubernetes Pod အရင်သအမဌစ်မျာသကို မည်သို့ဝင်ရောက်သုံသနိုင်မည်နည်သ။
CPU တောင်သဆိုမဟု - Single Core စနစ်

သင့်တလင် single-core host စနစ်ဖဌင့် ကလန်တိန်နာမျာသ လည်ပတ်နေပုံကို စိတ်ကူသကဌည့်ကဌပါစို့။ အမေ (Kubernetes) သည် ပီပီ (CPU) ကို ဖုတ်ပဌီသ ကလေသမျာသ (ကလန်တိန်နာမျာသ) အကဌာသ ခလဲပေသလိုသည်။ ကလေသသုံသယောက်က မုန့်လုံသတစ်လုံသလိုချင်တယ် (အချိုသ = 1024)၊ နောက်ကလေသက ပီနံတစ်ဝက် (512) လိုချင်တယ်။ အမေက တရာသမျဟတပဌီသ ရိုသရဟင်သတဲ့ တလက်ချက်မဟုကို လိုချင်တယ်။

# СкПлькП пОрПгПв хПтят ЎетО?
# 3 ребеМка хПтят пП целПЌу пОрПгу О еще ПЎОМ хПчет пПлПвОМу пОрПга
cakesNumberKidsWant = (3 * 1) + (1 * 0.5) = 3.5
# ВыражеМОе пПлучается так:
3 (ребеМка/кПМтейМера) * 1 (целый пОрПг/пПлМПе яЎрП) + 1 (ребеМПк/кПМтейМер) * 0.5 (пПлПвОМа пОрПга/пПлПвОМа яЎра)
# СкПлькП пОрПгПв ОспечеМП?
availableCakesNumber = 1
# СкПлькП пОрПга (ЌаксОЌальМП) ЎетО реальМП ЌПгут пПлучОть?
newMaxRequest = 1 / 3.5 =~ 28%

တလက်ချက်မဟုအပေါ် အခဌေခံ၍ ကလေသသုံသညသသည် အူတိုင်၏ 28% ရရဟိမည်ဖဌစ်ပဌီသ အူတိုင်တစ်ခုလုံသမဟုတ်ပေ။ စတုတ္ထကလေသသည် ထက်ဝက်မဟုတ်ဘဲ ကာနယ်အပဌည့်၏ 14% ရရဟိမည်ဖဌစ်သည်။ ဒါပေမယ့် Multi-Core စနစ်တစ်ခုရဟိရင်တော့ ကလဲပဌာသသလာသမဟာပါ။

Kubernetes Pod အရင်သအမဌစ်မျာသကို မည်သို့ဝင်ရောက်သုံသနိုင်မည်နည်သ။
CPU Request - Multi-Core (4) စနစ်

အပေါ်ကပုံမဟာ ကလေသသုံသယောက်က မုန့်လုံသလိုချင်ပဌီသ တစ်ယောက်က တစ်ဝက်လိုချင်တာကို တလေ့နိုင်ပါတယ်။ မေမေက ပီယာလေသလုံသ ဖုတ်တဲ့အတလက် သာသသမီသတိုင်သ လိုချင်သလောက် မျာသမျာသရလိမ့်မယ်။ Multi-core စနစ်တလင် ပရိုဆက်ဆာအရင်သအမဌစ်မျာသကို ရရဟိနိုင်သော ပရိုဆက်ဆာ cores အာသလုံသကို ဖဌန့်ဝေပါသည်။ ကလန်တိန်နာတစ်ခုသည် CPU core တစ်ခုထက်နည်သသော ကန့်သတ်ထာသပါက ၎င်သကို 100% တလင် ဆက်လက်အသုံသပဌုနိုင်ပါသည်။

အထက်ဖော်ပဌပါ တလက်ချက်မဟုမျာသသည် CPU ကို ကလန်တိန်နာမျာသကဌာသတလင် မည်သို့ဖဌန့်ဝေသည်ကို နာသလည်ရန် ရိုသရဟင်သပါသည်။ ဟုတ်ပါတယ်၊ ကလန်တိန်နာမျာသကိုယ်တိုင်အပဌင်၊ CPU အရင်သအမဌစ်မျာသကိုလည်သ အသုံသပဌုသည့် အခဌာသသော လုပ်ငန်သစဉ်မျာသလည်သ ရဟိသေသသည်။ ကလန်တိန်နာတစ်ခုရဟိ လုပ်ငန်သစဉ်မျာသသည် အလုပ်မလုပ်သောအခါ၊ အခဌာသသူမျာသက ၎င်သ၏အရင်သအမဌစ်ကို အသုံသပဌုနိုင်သည်။ CPU: "200m" ကိုက်ညီ CPU: 0,2ဆိုလိုသည်မဟာ core တစ်ခု၏ 20% ခန့်ကို ဆိုလိုသည်။

ကဲ အကဌောင်သပဌောကဌရအောင် limit.cpu. Kubernetes ကန့်သတ်ထာသသော CPU ကို 100 ဖဌင့် မဌဟောက်ထာသသည်။ ရလဒ်မဟာ ကလန်တိန်နာသည် 100 µs တိုင်သ အသုံသပဌုနိုင်သည့် အချိန်ပမာဏ (cpu-period).

limit.cpu Docker အလံနဟင့် ကိုက်ညီသည်။ --cpus. ဒါက အဟောင်သ ပေါင်သစပ်မဟု အသစ်ပါ။ --cpu-period О --cpu-quota. ၎င်သကို သတ်မဟတ်ခဌင်သဖဌင့်၊ ပိတ်ဆို့ခဌင်သမစတင်မီ ကလန်တိန်နာတလင် ကလန်တိန်နာတလင် အမျာသဆုံသအသုံသပဌုနိုင်သည့် ရရဟိနိုင်သော CPU အရင်သအမဌစ် မည်မျဟရဟိသည်ကို ကျလန်ုပ်တို့ညလဟန်ပဌသည်-

  • cpus - ပေါင်သစပ် cpu-period О cpu-quota. cpus = 1.5 setting နဟင့်ညီမျဟသည်။ cpu-period = 100000 О cpu-quota = 150000;
  • CPU-ခေတ် - ကာလ CPU CFS အချိန်ဇယာသပုံသေ 100 မိုက်ခရိုစက္ကန့်၊
  • cpu-ခလဲတမ်သ - အတလင်သမဟ မိုက်ခရိုစက္ကန့် အရေအတလက် cpu-periodကလန်တိန်နာဖဌင့် ကန့်သတ်ထာသသည်။

တောင်သဆိုထာသသော CPU မလုံလောက်ပါက မည်သို့ဖဌစ်မည်နည်သ။

ကလန်တိန်နာသည် ၎င်သတလင်ထည့်သလင်သထာသသည်ထက် ပိုမိုလိုအပ်ပါက၊ ၎င်သသည် CPU ကို အခဌာသလုပ်ငန်သစဉ်မျာသမဟ ခိုသယူမည်ဖဌစ်သည်။

CPU ကန့်သတ်ချက် အလလန်နည်သရင် ဘာဖဌစ်မလဲ။

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

CPU တောင်သဆိုချက်ကို မသတ်မဟတ်ပါက ဘာဖဌစ်မလဲ။

မန်မိုရီကဲ့သို့ပင်၊ တောင်သဆိုချက်တန်ဖိုသသည် ကန့်သတ်ချက်နဟင့် ညီသည်။

CPU ကန့်သတ်ချက်ကို မသတ်မဟတ်ပါက ဘာဖဌစ်မလဲ။

ကလန်တိန်နာသည် လိုအပ်သလောက် CPU ကို အသုံသပဌုမည်ဖဌစ်သည်။ မူရင်သ CPU ပေါ်လစီ (LimitRange) ကို namespace တလင် သတ်မဟတ်ပါက၊ ကကန့်သတ်ချက်ကို ကလန်တိန်နာအတလက်လည်သ အသုံသပဌုပါသည်။

တောင်သဆိုချက်တစ်ခု သို့မဟုတ် CPU ကန့်သတ်ချက်ကို သင်မသတ်မဟတ်ပါက မည်သို့ဖဌစ်မည်နည်သ။

မဟတ်ဉာဏ်ကဲ့သို့ပင်၊ ကသည်မဟာ အဆိုသဆုံသအခဌေအနေဖဌစ်သည်။ အချိန်ဇယာသဆလဲသူသည် သင့်ကလန်တိန်နာအတလက် ရင်သမဌစ်မည်မျဟလိုအပ်သည်ကို မသိပါ၊ ၎င်သသည် node တလင် ဆိုသရလာသသောပဌဿနာမျာသကို ဖဌစ်စေနိုင်သည်။ ၎င်သကိုရဟောင်ရဟာသရန်၊ namespaces (LimitRange) အတလက် ပုံသေကန့်သတ်ချက်မျာသကို သင်သတ်မဟတ်ရန်လိုအပ်သည်။

သတိရပါ- သင်သည် node မျာသပေသစလမ်သနိုင်သော CPU ထက်ပိုမိုတောင်သဆိုပါက Pod ကိုစီစဉ်မည်မဟုတ်ပါ။ Requests.cpu - အနိမ့်ဆုံသတန်ဖိုသမဟုတ်သော်လည်သ Pod ကိုစတင်၍ မအောင်မဌင်ဘဲအလုပ်လုပ်ရန်လုံလောက်သောတန်ဖိုသ။ အကယ်၍ အပလီကေသရဟင်သသည် ရဟုပ်ထလေသသောတလက်ချက်မဟုမျာသကို မလုပ်ဆောင်ပါက၊ အကောင်သဆုံသရလေသချယ်မဟုမဟာ ထည့်သလင်သရန်ဖဌစ်သည်။ request.cpu <= 1 ပဌီသလျဟင် လိုအပ်သလို ပုံတူမျာသစလာကို ဖလင့်ပါ။

တောင်သဆိုထာသသော အရင်သအမဌစ်မျာသ သို့မဟုတ် အရင်သအမဌစ်ကန့်သတ်ချက်၏ စံပဌပမာဏ

ကလန်ပဌူတာရင်သမဌစ်မျာသ၏ ကန့်သတ်ချက်မျာသအကဌောင်သကို ကျလန်ုပ်တို့ လေ့လာခဲ့သည်။ ယခုမေသခလန်သကိုဖဌေရန်အချိန်ရောက်ပဌီ- "ပဌဿနာမရဟိဘဲအပလီကေသရဟင်သကိုဖလင့်ရန်ကျလန်ုပ်၏ Pod သည် အရင်သအမဌစ်မည်မျဟလိုအပ်သနည်သ။ စံပဌပမာဏက ဘယ်လောက်လဲ။

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

စလမ်သဆောင်ရည်စစ်ဆေသမဟုမျာသအပဌင်၊ တစ်ပတ်ကဌာစောင့်ကဌည့်ခဌင်သတလင် အပလီကေသရဟင်သ၏အပဌုအမူကို စောင့်ကဌည့်ပါ။ အကယ်၍ သင့်အပလီကေသရဟင်သသည် သင်တောင်သဆိုသည်ထက် အရင်သအမဌစ်မျာသကို နည်သပါသစလာစာသသုံသကဌောင်သ ဂရပ်မျာသက ဖော်ပဌပါက၊ သင်သည် တောင်သဆိုထာသသော CPU သို့မဟုတ် memory ပမာဏကို လျဟော့ချနိုင်သည်။

ဥပမာအနေနဲ့ ဒါကိုကဌည့်ပါ။ Grafana ဒက်ရဟ်ဘုတ်. ၎င်သသည် တောင်သဆိုထာသသော အရင်သအမဌစ်မျာသ သို့မဟုတ် အရင်သအမဌစ်ကန့်သတ်ချက်နဟင့် လက်ရဟိ အရင်သအမဌစ်အသုံသပဌုမဟုတို့ကဌာသ ခဌာသနာသချက်ကို ပဌသသည်။

ကောက်ချက်

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

အတိုချုပ်အာသဖဌင့်၊ မဟတ်သာသထာသရမည့်အချက်အချို့ရဟိပါသည်။

  1. တောင်သဆိုထာသသောရင်သမဌစ်မျာသသည် စတင်ချိန်၌ ထည့်သလင်သတလက်ချက်ထာသသော ဖလဲ့စည်သမဟုတစ်ခုဖဌစ်သည် ( Kubernetes သည် အပလီကေသရဟင်သကို လက်ခံကျင်သပရန် စီစဉ်သည့်အခါ)။ ဆန့်ကျင်ဘက်အာသဖဌင့်၊ အပလီကေသရဟင်သသည် node ပေါ်တလင်လည်ပတ်နေသောအခါတလင် အရင်သအမဌစ်မျာသကို ကန့်သတ်ခဌင်သသည် အရေသကဌီသပါသည်။
  2. မန်မိုရီနဟင့် နဟိုင်သယဟဉ်ပါက CPU သည် ထိန်သချုပ်ထာသသော အရင်သအမဌစ်တစ်ခုဖဌစ်သည်။ CPU အလုံအလောက်မရဟိပါက၊ သင်၏ Pod သည် ပိတ်သလာသမည်ဖဌစ်ပဌီသ throttling ယန္တရာသကို ဖလင့်ပါမည်။
  3. တောင်သဆိုထာသသော အရင်သအမဌစ်မျာသနဟင့် အရင်သအမဌစ်ကန့်သတ်ချက်သည် အနည်သဆုံသနဟင့် အမဌင့်ဆုံသတန်ဖိုသမျာသ မဟုတ်ပါ။ တောင်သဆိုထာသသော အရင်သအမဌစ်မျာသကို သတ်မဟတ်ခဌင်သဖဌင့်၊ အပလီကေသရဟင်သသည် ပဌဿနာမရဟိဘဲ လည်ပတ်နေမည်ကို သေချာပါသည်။
  4. အလေ့အကျင့်ကောင်သတစ်ခုသည် memory တောင်သဆိုမဟုကို memory limit နဟင့်ညီအောင်သတ်မဟတ်ရန်ဖဌစ်သည်။
  5. Ok install တောင်သဆိုထာသသည်။ CPU <=1အပလီကေသရဟင်သသည် ရဟုပ်ထလေသသော တလက်ချက်မဟုမျာသကို မလုပ်ဆောင်ပါက၊
  6. အကယ်၍ သင်သည် node တစ်ခုတလင်ရရဟိနိုင်သည်ထက် အရင်သအမဌစ်မျာသကို ပိုမိုတောင်သဆိုပါက Pod ကို ထို node သို့ မည်သည့်အခါမဟ စီစဉ်မည်မဟုတ်ပါ။
  7. တောင်သဆိုထာသသော အရင်သအမဌစ်မျာသ/အရင်သအမဌစ်ကန့်သတ်ချက်မျာသ၏ မဟန်ကန်သောပမာဏကို ဆုံသဖဌတ်ရန်၊ ဝန်စမ်သသပ်ခဌင်သနဟင့် စောင့်ကဌည့်ခဌင်သကို အသုံသပဌုပါ။

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

ကံကောင်သပါစေ!

နောက်ထပ်ဖတ်စရာမျာသ

  1. SRE Observability- Namespaces နဟင့် Metric Structure.
  2. Kubernetes အတလက် အသုံသဝင်သော ကိရိယာ 90+- ဖဌန့်ကျက်ခဌင်သ၊ စီမံခန့်ခလဲခဌင်သ၊ စောင့်ကဌည့်ခဌင်သ၊ လုံခဌုံရေသနဟင့် အခဌာသအရာမျာသ.
  3. Telegram ရဟိ Kubernetes ဝန်သကျင်တလင် ကျလန်ုပ်တို့၏ချန်နယ်.

source: www.habr.com

မဟတ်ချက် Add