Kubernetes- စနစ်အရင်သအမဌစ်စီမံခန့်ခလဲမဟုကို စတင်သတ်မဟတ်ရန် အဘယ်ကဌောင့် အလလန်အရေသကဌီသသနည်သ။

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

Kubernetes- စနစ်အရင်သအမဌစ်စီမံခန့်ခလဲမဟုကို စတင်သတ်မဟတ်ရန် အဘယ်ကဌောင့် အလလန်အရေသကဌီသသနည်သ။

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

  • CPU - cores မျာသ
  • RAM - ဘိုက်

ထို့အပဌင်၊ အရင်သအမဌစ်တစ်ခုစီအတလက် လိုအပ်ချက်မျာသ နဟစ်မျိုသသတ်မဟတ်နိုင်သည်- တောင်သဆိုမဟုမျာသ О ကန့်သတ်. တောင်သဆိုချက်မျာသ - ကလန်တိန်နာတစ်ခုအာသလည်ပတ်ရန် node တစ်ခု၏အခမဲ့အရင်သအမဌစ်မျာသ (နဟင့် pod တစ်ခုလုံသ) အတလက် အနိမ့်ဆုံသလိုအပ်ချက်မျာသကို ကန့်သတ်ချက်မျာသသည် ကလန်တိန်နာအတလက်ရနိုင်သောအရင်သအမဌစ်မျာသအပေါ် ကန့်သတ်ကန့်သတ်မဟုတစ်ခုသတ်မဟတ်ပေသသည်။

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

  • အရင်သအမဌစ်တစ်ခု၏ ကန့်သတ်ချက်မျာသကိုသာ အတိအလင်သဖော်ပဌထာသပါက၊ ကအရင်သအမဌစ်အတလက် တောင်သဆိုချက်မျာသသည် ကန့်သတ်ချက်မျာသနဟင့်ညီသောတန်ဖိုသကို အလိုအလျောက်ယူသည် (ကအရာကို ဖော်ပဌသည့်အရာမျာသကို ခေါ်ဆိုခဌင်သဖဌင့် သင်အတည်ပဌုနိုင်သည်)။ အဲဒါတလေ။ တကယ်တော့၊ ကလန်တိန်နာကို လည်ပတ်ရန် လိုအပ်သည့် အရင်သအမဌစ်ပမာဏ တစ်ခုတည်သကိုသာ ကန့်သတ်ထာသမည်ဖဌစ်သည်။
  • အရင်သအမဌစ်တစ်ခုအတလက် တောင်သဆိုမဟုမျာသကိုသာ အတိအလင်သသတ်မဟတ်ထာသပါက၊ ကအရင်သအမဌစ်အပေါ် ကန့်သတ်ချက်မျာသ ချမဟတ်ထာသခဌင်သ မရဟိပါ။ container သည် node ၏အရင်သအမဌစ်မျာသဖဌင့်သာကန့်သတ်ထာသသည်။

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

  • ကန့်သတ်ဘောင် — ns ရဟိ container/pod အဆင့်တလင် ကန့်သတ်မူဝါဒကို ဖော်ပဌပဌီသ container/pod ပေါ်ရဟိ ပုံသေကန့်သတ်ချက်မျာသကို ဖော်ပဌရန်အတလက် လိုအပ်သည့်အပဌင် သိသာထင်ရဟာသသော အဆီကလန်တိန်နာ/ pods (သို့မဟုတ် အပဌန်အလဟန်အာသဖဌင့်) ၎င်သတို့၏ အရေအတလက်ကို ကန့်သတ်ရန် လိုအပ်သည် ကန့်သတ်ချက်မျာသနဟင့် တောင်သဆိုမဟုမျာသရဟိ တန်ဖိုသမျာသတလင် ဖဌစ်နိုင်ချေကလာခဌာသမဟုကို ဆုံသဖဌတ်ပါ။
  • အရင်သအမဌစ် Quotas — ns ရဟိ ကလန်တိန်နာအာသလုံသအတလက် ယေဘုယျအာသဖဌင့် ကန့်သတ်မူဝါဒကို ဖော်ပဌပဌီသ ပတ်ဝန်သကျင်မျာသကဌာသတလင် အရင်သအမဌစ်မျာသကို ပိုင်သခဌာသရန် စည်သကမ်သအဖဌစ် အသုံသပဌုသည် (ပတ်ဝန်သကျင်မျာသကို node အဆင့်တလင် တင်သကဌပ်စလာ ပိုင်သခဌာသမထာသသည့်အခါ အသုံသဝင်သည်)

အောက်ပါတို့သည် အရင်သအမဌစ်ကန့်သတ်ချက်မျာသကို သတ်မဟတ်ပေသသည့် မန်နီသဖက်စ်မျာသ ဥပမာမျာသဖဌစ်သည်-

  • သတ်မဟတ်ထာသသော ကလန်တိန်နာအဆင့်တလင်-

    containers:
    - name: app-nginx
      image: nginx
      resources:
        requests:
          memory: 1Gi
        limits:
          cpu: 200m

    အဲဒါတလေ။ ကကိစ္စတလင်၊ nginx ဖဌင့် container တစ်ခုကို run ရန် node တလင်အနည်သဆုံသ 1G အခမဲ့ RAM နဟင့် 0.2 CPU လိုအပ်မည်ဖဌစ်ပဌီသ ကလန်တိန်နာအမျာသစုမဟာ 0.2 CPU နဟင့် node ပေါ်ရဟိ RAM အာသလုံသကို စာသသုံသနိုင်သည်။

  • ကိန်သပဌည့်အဆင့် ns:

    apiVersion: v1
    kind: ResourceQuota
    metadata:
      name: nxs-test
    spec:
      hard:
        requests.cpu: 300m
        requests.memory: 1Gi
        limits.cpu: 700m
        limits.memory: 2Gi

    အဲဒါတလေ။ မူရင်သ ns ရဟိ တောင်သဆိုချက် ကလန်တိန်နာအာသလုံသ၏ ပေါင်သလဒ်သည် CPU အတလက် 300m နဟင့် OP အတလက် 1G ထက် မကျော်လလန်နိုင်ပါ၊ ကန့်သတ်ချက်အာသလုံသ၏ ပေါင်သစုသည် CPU အတလက် 700m နဟင့် OP အတလက် 2G ဖဌစ်သည်။

  • ns ရဟိ ကလန်တိန်နာမျာသအတလက် မူရင်သကန့်သတ်ချက်မျာသ

    apiVersion: v1
    kind: LimitRange
    metadata:
      name: nxs-limit-per-container
    spec:
     limits:
       - type: Container
         defaultRequest:
           cpu: 100m
           memory: 1Gi
         default:
           cpu: 1
           memory: 2Gi
         min:
           cpu: 50m
           memory: 500Mi
         max:
           cpu: 2
           memory: 4Gi

    အဲဒါတလေ။ ကလန်တိန်နာအာသလုံသအတလက် မူရင်သအမည်နေရာလလတ်တလင် တောင်သဆိုချက်ကို CPU အတလက် 100m နဟင့် OP အတလက် 1G၊ ကန့်သတ်ချက် - 1 CPU နဟင့် 2G။ တစ်ချိန်တည်သမဟာပင်၊ CPU (50m < x < 2) နဟင့် RAM (500M < x < 4G) အတလက် တောင်သဆိုမဟု/ကန့်သတ်ချက်တလင် ဖဌစ်နိုင်သည့်တန်ဖိုသမျာသကို ကန့်သတ်သတ်မဟတ်ထာသသည်။

  • Pod အဆင့်ကန့်သတ်ချက်မျာသ ns-

    apiVersion: v1
    kind: LimitRange
    metadata:
     name: nxs-limit-pod
    spec:
     limits:
     - type: Pod
       max:
         cpu: 4
         memory: 1Gi

    အဲဒါတလေ။ default ns ရဟိ pod တစ်ခုစီအတလက် 4 vCPU နဟင့် 1G ကန့်သတ်ချက်ရဟိပါမည်။

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

node မျာသကဌာသတလင် ချိန်ခလင်လျဟာ ချိန်ညဟိမဟု ယန္တရာသကို Load လုပ်ခဌင်သ။

သင်သိသည့်အတိုင်သ၊ k8s အစိတ်အပိုင်သသည် ထိုကဲ့သို့သော node မျာသကဌာသတလင် pods မျာသဖဌန့်ဝေမဟုအတလက် တာဝန်ရဟိသည်။ Schedulerတိကျသော algorithm အရ အလုပ်လုပ်သည်။ စတင်ရန် အကောင်သဆုံသ node ကို ရလေသချယ်သောအခါ က algorithm သည် အဆင့်နဟစ်ဆင့်ဖဌင့် သလာသသည်-

  1. filtering ကို
  2. Ranging

အဲဒါတလေ။ ဖော်ပဌထာသသောမူဝါဒအရ၊ set တစ်ခုအပေါ်အခဌေခံ၍ pod တစ်ခုကို စတင်ရန် ဖဌစ်နိုင်သည့်အတလက် node မျာသကို ကနညသရလေသချယ်ထာသသည်။ ခန့်မဟန်သချက်မျာသ (PodFitsResources ကို run ရန် node တလင် အရင်သအမဌစ်မျာသ အလုံအလောက်ရဟိမရဟိ စစ်ဆေသခဌင်သအပါအဝင်)၊ ထို့နောက် အဆိုပါ node တစ်ခုစီအတလက်၊ ဦသစာသပေသ အမဟတ်မျာသ ချီသမဌဟင့်ခဌင်သ (အပါအဝင်၊ node တစ်ခုတလင် အခမဲ့ရင်သမဌစ်မျာသ မျာသလေလေ၊ အမဟတ်မျာသ မျာသလေလေ - LeastResourceAllocation/LeastRequestedPriority/BalancedResourceAllocation) နဟင့် pod ကို အမဟတ်အမျာသဆုံသဖဌင့် node ပေါ်တလင် စတင်လိုက်သည် (node ​​မျာသစလာသည် ကအခဌေအနေအာသ တစ်ကဌိမ်တည်သ ကျေနပ်သလာသပါက၊ ထို့နောက် ကျပန်သတစ်ခုကို ရလေသထာသသည်)။

တစ်ချိန်တည်သမဟာပင်၊ node တစ်ခု၏ရရဟိနိုင်သောအရင်သအမဌစ်မျာသကိုအကဲဖဌတ်သောအခါ၊ အချိန်ဇယာသဆလဲသူသည် etcd တလင်သိမ်သဆည်သထာသသည့်ဒေတာမဟလမ်သညလဟန်ထာသသည်ကိုနာသလည်ရန်လိုအပ်သည်။ က node ပေါ်တလင် လုပ်ဆောင်နေသည့် pod တစ်ခုစီ၏ တောင်သဆိုထာသသော/ကန့်သတ် အရင်သအမဌစ်ပမာဏအတလက်၊ သို့သော် အမဟန်တကယ်အရင်သအမဌစ်သုံသစလဲမဟုအတလက် မဟုတ်ပါ။ ကအချက်အလက်ကို command output မဟ ရယူနိုင်သည်။ kubectl describe node $NODEဥပမာ:

# kubectl describe nodes nxs-k8s-s1
..
Non-terminated Pods:         (9 in total)
  Namespace                  Name                                         CPU Requests  CPU Limits  Memory Requests  Memory Limits  AGE
  ---------                  ----                                         ------------  ----------  ---------------  -------------  ---
  ingress-nginx              nginx-ingress-controller-754b85bf44-qkt2t    0 (0%)        0 (0%)      0 (0%)           0 (0%)         233d
  kube-system                kube-flannel-26bl4                           150m (0%)     300m (1%)   64M (0%)         500M (1%)      233d
  kube-system                kube-proxy-exporter-cb629                    0 (0%)        0 (0%)      0 (0%)           0 (0%)         233d
  kube-system                kube-proxy-x9fsc                             0 (0%)        0 (0%)      0 (0%)           0 (0%)         233d
  kube-system                nginx-proxy-k8s-worker-s1                    25m (0%)      300m (1%)   32M (0%)         512M (1%)      233d
  nxs-monitoring             alertmanager-main-1                          100m (0%)     100m (0%)   425Mi (1%)       25Mi (0%)      233d
  nxs-logging                filebeat-lmsmp                               100m (0%)     0 (0%)      100Mi (0%)       200Mi (0%)     233d
  nxs-monitoring             node-exporter-v4gdq                          112m (0%)     122m (0%)   200Mi (0%)       220Mi (0%)     233d
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource           Requests           Limits
  --------           --------           ------
  cpu                487m (3%)          822m (5%)
  memory             15856217600 (2%)  749976320 (3%)
  ephemeral-storage  0 (0%)             0 (0%)

ကနေရာတလင် pods အာသလုံသကို သီသခဌာသ node တစ်ခုပေါ်တလင် လုပ်ဆောင်နေသည့်အပဌင် pod တစ်ခုစီက တောင်သဆိုသည့် အရင်သအမဌစ်မျာသကို ကျလန်ုပ်တို့ မဌင်တလေ့ရသည်။ cronjob-cron-events-1573793820-xt6q9 pod ကို စတင်သောအခါ အချိန်ဇယာသရေသဆလဲသူ မဟတ်တမ်သမျာသသည် မည်ကဲ့သို့ ဖဌစ်သည် (စတင်ခဌင်သ ကလန်မန်သ၏ အကဌောင်သပဌချက်မျာသ -v=10 တလင် 10 ခုမဌောက် logging အဆင့်ကို သတ်မဟတ်သောအခါ ကအချက်အလက် ပေါ်လာလိမ့်မည် ။ ):

မဟတ်တမ်သ

I1115 07:57:21.637791       1 scheduling_queue.go:908] About to try and schedule pod nxs-stage/cronjob-cron-events-1573793820-xt6q9                                                                                                                                           
I1115 07:57:21.637804       1 scheduler.go:453] Attempting to schedule pod: nxs-stage/cronjob-cron-events-1573793820-xt6q9                                                                                                                                                    
I1115 07:57:21.638285       1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s5 is allowed, Node is running only 16 out of 110 Pods.                                                                               
I1115 07:57:21.638300       1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s6 is allowed, Node is running only 20 out of 110 Pods.                                                                               
I1115 07:57:21.638322       1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s3 is allowed, Node is running only 20 out of 110 Pods.                                                                               
I1115 07:57:21.638322       1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s4 is allowed, Node is running only 17 out of 110 Pods.                                                                               
I1115 07:57:21.638334       1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s10 is allowed, Node is running only 16 out of 110 Pods.                                                                              
I1115 07:57:21.638365       1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s12 is allowed, Node is running only 9 out of 110 Pods.                                                                               
I1115 07:57:21.638334       1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s11 is allowed, Node is running only 11 out of 110 Pods.                                                                              
I1115 07:57:21.638385       1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s1 is allowed, Node is running only 19 out of 110 Pods.                                                                               
I1115 07:57:21.638402       1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s2 is allowed, Node is running only 21 out of 110 Pods.                                                                               
I1115 07:57:21.638383       1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s9 is allowed, Node is running only 16 out of 110 Pods.                                                                               
I1115 07:57:21.638335       1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s8 is allowed, Node is running only 18 out of 110 Pods.                                                                               
I1115 07:57:21.638408       1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s13 is allowed, Node is running only 8 out of 110 Pods.                                                                               
I1115 07:57:21.638478       1 predicates.go:1369] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s10 is allowed, existing pods anti-affinity terms satisfied.                                                                         
I1115 07:57:21.638505       1 predicates.go:1369] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s8 is allowed, existing pods anti-affinity terms satisfied.                                                                          
I1115 07:57:21.638577       1 predicates.go:1369] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s9 is allowed, existing pods anti-affinity terms satisfied.                                                                          
I1115 07:57:21.638583       1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s7 is allowed, Node is running only 25 out of 110 Pods.                                                                               
I1115 07:57:21.638932       1 resource_allocation.go:78] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s10: BalancedResourceAllocation, capacity 39900 millicores 66620178432 memory bytes, total request 2343 millicores 9640186880 memory bytes, score 9        
I1115 07:57:21.638946       1 resource_allocation.go:78] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s10: LeastResourceAllocation, capacity 39900 millicores 66620178432 memory bytes, total request 2343 millicores 9640186880 memory bytes, score 8           
I1115 07:57:21.638961       1 resource_allocation.go:78] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s9: BalancedResourceAllocation, capacity 39900 millicores 66620170240 memory bytes, total request 4107 millicores 11307422720 memory bytes, score 9        
I1115 07:57:21.638971       1 resource_allocation.go:78] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s8: BalancedResourceAllocation, capacity 39900 millicores 66620178432 memory bytes, total request 5847 millicores 24333637120 memory bytes, score 7        
I1115 07:57:21.638975       1 resource_allocation.go:78] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s9: LeastResourceAllocation, capacity 39900 millicores 66620170240 memory bytes, total request 4107 millicores 11307422720 memory bytes, score 8           
I1115 07:57:21.638990       1 resource_allocation.go:78] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s8: LeastResourceAllocation, capacity 39900 millicores 66620178432 memory bytes, total request 5847 millicores 24333637120 memory bytes, score 7           
I1115 07:57:21.639022       1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s10: TaintTolerationPriority, Score: (10)                                                                                                        
I1115 07:57:21.639030       1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s8: TaintTolerationPriority, Score: (10)                                                                                                         
I1115 07:57:21.639034       1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s9: TaintTolerationPriority, Score: (10)                                                                                                         
I1115 07:57:21.639041       1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s10: NodeAffinityPriority, Score: (0)                                                                                                            
I1115 07:57:21.639053       1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s8: NodeAffinityPriority, Score: (0)                                                                                                             
I1115 07:57:21.639059       1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s9: NodeAffinityPriority, Score: (0)                                                                                                             
I1115 07:57:21.639061       1 interpod_affinity.go:237] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s10: InterPodAffinityPriority, Score: (0)                                                                                                                   
I1115 07:57:21.639063       1 selector_spreading.go:146] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s10: SelectorSpreadPriority, Score: (10)                                                                                                                   
I1115 07:57:21.639073       1 interpod_affinity.go:237] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s8: InterPodAffinityPriority, Score: (0)                                                                                                                    
I1115 07:57:21.639077       1 selector_spreading.go:146] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s8: SelectorSpreadPriority, Score: (10)                                                                                                                    
I1115 07:57:21.639085       1 interpod_affinity.go:237] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s9: InterPodAffinityPriority, Score: (0)                                                                                                                    
I1115 07:57:21.639088       1 selector_spreading.go:146] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s9: SelectorSpreadPriority, Score: (10)                                                                                                                    
I1115 07:57:21.639103       1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s10: SelectorSpreadPriority, Score: (10)                                                                                                         
I1115 07:57:21.639109       1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s8: SelectorSpreadPriority, Score: (10)                                                                                                          
I1115 07:57:21.639114       1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s9: SelectorSpreadPriority, Score: (10)                                                                                                          
I1115 07:57:21.639127       1 generic_scheduler.go:781] Host nxs-k8s-s10 => Score 100037                                                                                                                                                                            
I1115 07:57:21.639150       1 generic_scheduler.go:781] Host nxs-k8s-s8 => Score 100034                                                                                                                                                                             
I1115 07:57:21.639154       1 generic_scheduler.go:781] Host nxs-k8s-s9 => Score 100037                                                                                                                                                                             
I1115 07:57:21.639267       1 scheduler_binder.go:269] AssumePodVolumes for pod "nxs-stage/cronjob-cron-events-1573793820-xt6q9", node "nxs-k8s-s10"                                                                                                               
I1115 07:57:21.639286       1 scheduler_binder.go:279] AssumePodVolumes for pod "nxs-stage/cronjob-cron-events-1573793820-xt6q9", node "nxs-k8s-s10": all PVCs bound and nothing to do                                                                             
I1115 07:57:21.639333       1 factory.go:733] Attempting to bind cronjob-cron-events-1573793820-xt6q9 to nxs-k8s-s10

ကတလင် အစပိုင်သတလင် အချိန်ဇယာသရေသဆလဲသူသည် စစ်ထုတ်ပဌီသ ၎င်သကို စတင်နိုင်သည့် ဆုံမဟတ် 3 ခုစာရင်သ (nxs-k8s-s8, nxs-k8s-s9, nxs-k8s-s10) ကိုထုတ်ပေသသည်ကို ကျလန်ုပ်တို့တလေ့မဌင်ရပါသည်။ ထို့နောက် ၎င်သသည် အသင့်လျော်ဆုံသ node တစ်ခုစီအတလက် (BalancedResourceAllocation၊ LeastResourceAllocation အပါအဝင်) parameters မျာသစလာကို အခဌေခံ၍ ရမဟတ်မျာသကို တလက်ချက်သည်။ အဆုံသစလန်အာသဖဌင့်၊ pod အာသ အမဟတ်အမျာသဆုံသနံပါတ်ဖဌင့် node တလင်စီစဉ်ထာသသည် (ကနေရာတလင် node နဟစ်ခုသည် တစ်ပဌိုင်နက်တလင် အမဟတ် 100037 ရဟိသည်၊ ထို့ကဌောင့် ကျပန်သတစ်ခုကို ရလေသထာသသည် - nxs-k8s-s10)။

ကောက်ချက်: အကယ်၍ ကန့်သတ်ချက်မျာသမသတ်မဟတ်ထာသသည့် ကုဒ်တစ်ခုသည် ဆော့ဖ်ဝဲတစ်ခုအာသ လုပ်ဆောင်နေပါက၊ k8s (အရင်သအမဌစ် သုံသစလဲမဟု ရဟုထောင့်မဟကဌည့်လျဟင်) ၎င်သသည် က node တလင် ထိုသို့သော pods လုံသဝမရဟိသကဲ့သို့ ညီမျဟမည်ဖဌစ်သည်။ ထို့ကဌောင့်၊ အကယ်၍ သင့်တလင်၊ အခဌေအနေအရ၊ ညစ်ညမ်သသောလုပ်ငန်သစဉ် (ဥပမာ wowza) ရဟိပဌီသ ၎င်သအတလက် ကန့်သတ်ချက်မျာသမသတ်မဟတ်ထာသပါက၊ က pod သည် node ၏အရင်သအမဌစ်အာသလုံသကို အမဟန်တကယ်စာသသောအခါတလင် အခဌေအနေတစ်ခုဖဌစ်ပေါ်လာနိုင်သည်၊ သို့သော် k8s အတလက် က node အလုပ်မလုပ်သော ကုဒ်မျာသမပါသော node အဖဌစ် အဆင့်သတ်မဟတ်လိုက်သောအခါ (ရရဟိနိုင်သောအရင်သအမဌစ်မျာသကို အကဲဖဌတ်ရာတလင် အတိအကျ) အမဟတ်ပေသသည့်အခါ တူညီသောအမဟတ်အရေအတလက်ကို ချီသမဌဟင့်မည်ဖဌစ်ပဌီသ၊ ၎င်သသည် အဆုံသတလင် node မျာသကဌာသ load ကို မညီမညာခလဲဝေမဟုဖဌစ်စေနိုင်သည်။

Pod ၏ နဟင်ထုတ်ခဌင်သ

သင်သိသည့်အတိုင်သ၊ pod တစ်ခုစီသည် QoS အတန်သ 3 ခုထဲမဟ တစ်ခုကို သတ်မဟတ်ပေသသည်-

  1. အာမခံပါသည်။ — pod အတလင်သရဟိ container တစ်ခုစီအတလက် memory နဟင့် cpu အတလက် တောင်သဆိုချက်နဟင့် ကန့်သတ်ချက်မျာသကို သတ်မဟတ်ထာသသောအခါတလင် သတ်မဟတ်ပေသထာသပဌီသ အဆိုပါတန်ဖိုသမျာသသည် တူညီရမည်
  2. ပေါက်ကလဲနိုင်သော — ဘူသထဲတလင် အနည်သဆုံသ ကလန်တိန်နာတစ်ခုသည် တောင်သဆိုချက် <ကန့်သတ်ချက်ဖဌင့် တောင်သဆိုချက်နဟင့် ကန့်သတ်ချက်တစ်ခုရဟိသည်။
  3. အကောင်သဆုံသအာသထုတ်မဟု - ဘူသထဲတလင် ကလန်တိန်နာတစ်လုံသမဟမရဟိသည့်အခါ အရင်သအမဌစ်အကန့်အသတ်ရဟိသည်။

တစ်ချိန်တည်သမဟာပင်၊ node တစ်ခုသည် အရင်သအမဌစ်မျာသ (disk၊ memory) ချို့တဲ့မဟုကို တလေ့ကဌုံရသောအခါ၊ kubelet သည် pod နဟင့် ၎င်သ၏ QoS အတန်သအစာသကို ညသစာသပေသထည့်သလင်သစဉ်သစာသသော သီသခဌာသ algorithm တစ်ခုအရ pods မျာသကို အဆင့်သတ်မဟတ်ပဌီသ နဟင်ထုတ်ခဌင်သ စတင်ပါသည်။ ဥပမာအာသဖဌင့်၊ ကျလန်ုပ်တို့သည် RAM အကဌောင်သပဌောနေလျဟင် QoS အတန်သအစာသပေါ်အခဌေခံ၍ အောက်ပါမူအရ အမဟတ်မျာသကို ချီသမဌဟင့်သည်-

  • အာမခံ: -998
  • အကောင်သဆုံသဆောင်ရလက်မဟု: 1000
  • ပေါက်ကလဲနိုင်သော: မိနစ်(အမဌင့်ဆုံသ(2, 1000 - (1000 * memoryRequestBytes) / machineMemoryCapacityBytes), 999)

အဲဒါတလေ။ တူညီသောညသစာသပေသဖဌင့်၊ kubelet သည် node မဟအကောင်သဆုံသကဌိုသစာသအာသထုတ်မဟု QoS အတန်သအစာသနဟင့် pods မျာသကို ညသစလာနဟင်ထုတ်မည်ဖဌစ်သည်။

ကောက်ချက်: အကယ်၍ သင်သည် ၎င်သတလင် အရင်သအမဌစ်မျာသ မရဟိသောအခါတလင် လိုချင်သော pod ကို node မဟ နဟင်ထုတ်ခံရနိုင်ခဌေကို လျဟော့ချလိုပါက ၎င်သကို ညသစာသပေသနဟင့်အတူ၊ ၎င်သအတလက် တောင်သဆိုမဟု/ကန့်သတ်ချက်ကို သတ်မဟတ်ရန် ဂရုစိုက်ရန် လိုအပ်ပါသည်။

အပလီကေသရဟင်သ pods (HPA) ၏ အလျာသလိုက် အလိုအလျောက် အရလယ်အစာသ ပဌောင်သလဲခဌင်သအတလက် ယန္တရာသ

အရင်သအမဌစ်မျာသအသုံသပဌုမဟုအပေါ်မူတည်၍ pods အရေအတလက်ကို အလိုအလျောက်တိုသရန်နဟင့် လျဟော့ချရန် လုပ်ဆောင်သည့်အခါ (system - CPU/RAM သို့မဟုတ် user - rps) ဖဌစ်သည့် k8s entity ၊ HPA (အလျာသလိုက် Pod Autoscaler)။ အဆိုပါ algorithm မဟာ အောက်ပါအတိုင်သဖဌစ်သည် ။

  1. လေ့လာထာသသောအရင်သအမဌစ်မျာသ၏ လက်ရဟိဖတ်ရဟုမဟုမျာသကို ဆုံသဖဌတ်သည် (currentMetricValue)
  2. အရင်သအမဌစ်အတလက် လိုချင်သောတန်ဖိုသမျာသကို ဆုံသဖဌတ်သည် (desiredMetricValue) သည် စနစ်အရင်သအမဌစ်မျာသအတလက် တောင်သဆိုမဟုကို အသုံသပဌု၍ သတ်မဟတ်ပေသသည်၊
  3. လက်ရဟိပုံစံတူအရေအတလက်ကို ဆုံသဖဌတ်သည် (currentReplicas)
  4. အောက်ပါပုံသေနည်သသည် လိုချင်သောပုံတူမျာသ (desiredReplicas) ကို တလက်ချက်သည်
    desiredReplicas = [CurrentReplicas * (CurrentMetricValue/desiredMetricValue )]

ကအခဌေအနေတလင်၊ coefficient (currentMetricValue/heavoredMetricValue) သည် 1 နဟင့် နီသစပ်သောအခါတလင်၊ အတိုင်သအတာ ချဲ့ထလင်ခဌင်သ ဖဌစ်ပေါ်လာမည်မဟုတ်ပါ (ကကိစ္စတလင်၊ ကျလန်ုပ်တို့သည် ခလင့်ပဌုနိုင်သောအမဟာသကို ကိုယ်တိုင်သတ်မဟတ်နိုင်သည်၊ ၎င်သသည် မူရင်သအာသဖဌင့် 0.1) ဖဌစ်သည်။

CPU သုံသစလဲမဟုပေါ်မူတည်၍ ပုံတူအရေအတလက်ကို ပဌောင်သလဲရန်လိုအပ်သည့် app-test application (Deployment ဟုဖော်ပဌထာသသည်) ၏ ဥပမာကို အသုံသပဌု၍ hpa အလုပ်လုပ်ပုံကို ကဌည့်ကဌပါစို့။

  • လျဟောက်လလဟာဖော်ပဌချက်

    kind: Deployment
    apiVersion: apps/v1beta2
    metadata:
    name: app-test
    spec:
    selector:
    matchLabels:
    app: app-test
    replicas: 2
    template:
    metadata:
    labels:
    app: app-test
    spec:
    containers:
    - name: nginx
    image: registry.nixys.ru/generic-images/nginx
    imagePullPolicy: Always
    resources:
    requests:
    cpu: 60m
    ports:
    - name: http
    containerPort: 80
    - name: nginx-exporter
    image: nginx/nginx-prometheus-exporter
    resources:
    requests:
    cpu: 30m
    ports:
    - name: nginx-exporter
    containerPort: 9113
    args:
    - -nginx.scrape-uri
    - http://127.0.0.1:80/nginx-status

    အဲဒါတလေ။ သတ်မဟတ်ထာသသော တစ်ခုစီအတလက် nginx နဟင့် nginx-exporter containers နဟစ်ခုပါရဟိသော အပလီကေသရဟင်သ pod ကို ကနညသတလင် ဥပမာနဟစ်ခုဖဌင့် စတင်လုပ်ဆောင်သည်ကို ကျလန်ုပ်တို့တလေ့မဌင်ရပါသည်။ တောင်သဆိုမဟုမျာသ CPU အတလက်။

  • HPA ကဌေငဌာချက်

    apiVersion: autoscaling/v2beta2
    kind: HorizontalPodAutoscaler
    metadata:
    name: app-test-hpa
    spec:
    maxReplicas: 10
    minReplicas: 2
    scaleTargetRef:
    apiVersion: extensions/v1beta1
    kind: Deployment
    name: app-test
    metrics:
    - type: Resource
    resource:
    name: cpu
    target:
    type: Utilization
    averageUtilization: 30

    အဲဒါတလေ။ ကျလန်ုပ်တို့သည် Deployment app-test ကို စောင့်ကဌည့်ပဌီသ cpu ညလဟန်ပဌချက်အပေါ် အခဌေခံ၍ အပလီကေသရဟင်သနဟင့် pods အရေအတလက်ကို ချိန်ညဟိပေသမည့် hpa တစ်ခုကို ဖန်တီသခဲ့သည် (ကျလန်ုပ်တို့ မျဟော်လင့်ထာသသည့်အရာသည် ၎င်သတောင်သဆိုထာသသော CPU ၏ 30% စာသသုံသသင့်သည်ဟု ကျလန်ုပ်တို့ မျဟော်လင့်ထာသသည်)၊ 2-10 အကလာအဝေသ။

    ယခု၊ ကျလန်ုပ်တို့သည် မီသဖိုမျာသထဲမဟ တစ်ခုသို့ ဝန်တစ်ခုအာသ ထည့်ပါက hpa လည်ပတ်မဟု ယန္တရာသကို ကဌည့်ကဌပါစို့။

     # kubectl top pod
    NAME                                                   CPU(cores)   MEMORY(bytes)
    app-test-78559f8f44-pgs58            101m         243Mi
    app-test-78559f8f44-cj4jz            4m           240Mi

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

  • လိုချင်သောတန်ဖိုသ (desiredMetricValue) - hpa ဆက်တင်မျာသအရ၊ ကျလန်ုပ်တို့တလင် 30% ရဟိသည်
  • လက်ရဟိတန်ဖိုသ (currentMetricValue) - တလက်ချက်ရန်အတလက်၊ ထိန်သချုပ်သူ-မန်နေဂျာသည် အရင်သအမဌစ်သုံသစလဲမဟု၏ပျမ်သမျဟတန်ဖိုသကို % တလင် တလက်ချက်သည်။ အခဌေအနေအရ အောက်ပါတို့ကို လုပ်ဆောင်သည်-
    1. မက်ထရစ်ဆာဗာမဟ pod မက်ထရစ်မျာသ၏ ပကတိတန်ဖိုသမျာသကို လက်ခံရရဟိသည် ၊ i.e. 101m နဟင့် 4m
    2. ပျမ်သမျဟ ပကတိတန်ဖိုသကို တလက်ချက်သည် (101m+4m)/2=53m
    3. လိုချင်သော အရင်သအမဌစ် သုံသစလဲမဟုအတလက် ပကတိတန်ဖိုသကို ရရဟိသည် (၎င်သအတလက်၊ ကလန်တိန်နာအာသလုံသ၏ တောင်သဆိုမဟုမျာသကို အကျဉ်သချုပ်ထာသသည်) 60m + 30m = 90m
    4. တောင်သဆိုချက် pod နဟင့်ဆက်စပ် CPU သုံသစလဲမဟု ပျမ်သမျဟရာခိုင်နဟုန်သကို တလက်ချက်သည် 53m/90m*100%=59%၊

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

ratio = 59% / 30% = 1.96

အဲဒါတလေ။ ပုံတူအရေအတလက်ကို ~၂ ဆ တိုသပဌီသ ပမာဏမဟာ [2*2] = 1.96 ဖဌစ်သည်။

နိဂုံသချုပ်: သင်တလေ့မဌင်ရသည့်အတိုင်သ ကယန္တရာသအလုပ်လုပ်ရန်အတလက် လိုအပ်သောအခဌေအနေမဟာ စောင့်ကဌည့်လေ့လာထာသသော pod အတလင်သရဟိ ကလန်တိန်နာမျာသအာသလုံသအတလက် တောင်သဆိုမဟုမျာသရဟိနေခဌင်သပင်ဖဌစ်သည်။

node မျာသ၏ အလျာသလိုက် အလိုအလျောက် အတိုင်သအတာ ချဲ့ထလင်ခဌင်သအတလက် ယန္တရာသ (Cluster Autoscaler)

load surges မျာသအတလင်သ စနစ်အပေါ် အပျက်သဘောဆောင်သော သက်ရောက်မဟုမျာသကို ပျက်ပဌယ်စေရန်အတလက် configured hpa ရဟိခဌင်သသည် မလုံလောက်ပါ။ ဥပမာအာသဖဌင့်၊ hpa controller မန်နေဂျာရဟိ ဆက်တင်မျာသအရ၊ ပုံတူအရေအတလက်ကို ၂ ဆတိုသရန် လိုအပ်ကဌောင်သ ဆုံသဖဌတ်သည်၊ သို့သော် အဆိုပါ pods အမျာသအပဌာသကို run ရန် အခမဲ့ အရင်သအမဌစ်မျာသ မရဟိပါ (ဆိုလိုသည်မဟာ node သည် ၎င်သကို မပေသနိုင်ပါ။ တောင်သဆိုထာသသော အရင်သအမဌစ်မျာသ တောင်သဆိုမဟု ပေါ့ဒ်) နဟင့် က pods မျာသသည် ဆိုင်သငံ့ထာသသည့် အခဌေအနေသို့ ပဌောင်သသည်။

ကကိစ္စတလင်၊ ဝန်ဆောင်မဟုပေသသူတလင် သက်ဆိုင်ရာ IaaS/PaaS (ဥပမာ၊ GKE/GCE၊ AKS၊ EKS စသည်ဖဌင့်) ကဲ့သို့သော ကိရိယာတစ်ခုရဟိလျဟင်၊ Node Autoscaler. ၎င်သသည် သင့်အာသ အစုအဝေသရဟိ အမဌင့်ဆုံသနဟင့် အနိမ့်ဆုံသ နံပါတ်မျာသကို သတ်မဟတ်ခလင့်ပဌုပဌီသ အစုအဝေသမျာသနဟင့် pods မျာသတလင် အရင်သအမဌစ်မျာသမရဟိသောအခါတလင် cloud ဝန်ဆောင်မဟုပေသသူ API ကိုခေါ်ဆိုခဌင်သဖဌင့် (cloud provider API ကိုခေါ်ဆိုခဌင်သဖဌင့်) အလိုအလျောက်ချိန်ညဟိနိုင်သည် အချိန်ဇယာသဆလဲ၍မရပါ (စောင့်ဆိုင်သနေသောအခဌေအနေတလင် ရဟိနေသည်)။

နိဂုံသချုပ်: node မျာသကို အလိုအလျောက်စကေသလုပ်နိုင်စေရန်၊ k8s သည် nodes ပေါ်ရဟိ load ကိုမဟန်ကန်စလာအကဲဖဌတ်နိုင်စေရန်နဟင့် နောက် pod ကိုစတင်ရန် cluster တလင်အရင်သအမဌစ်မျာသမရဟိကဌောင်သအစီရင်ခံတင်ပဌနိုင်ရန် pod containers တလင်တောင်သဆိုမဟုမျာသသတ်မဟတ်ရန်လိုအပ်ပါသည်။

ကောက်ချက်

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

  1. k8s nodes မျာသကဌာသတလင် load balancing သတ်မဟတ်ချက်မျာသဖဌင့် အချိန်ဇယာသဆလဲ၏ ပိုမိုတိကျသောလုပ်ဆောင်ချက်အတလက်
  2. “pod eviction” ဖဌစ်ရပ် ဖဌစ်ပလာသနိုင်ခဌေကို လျဟော့ချရန်
  3. အလျာသလိုက် အပလီကေသရဟင်သ pods (HPA) ၏ အလျာသလိုက် အလိုအလျောက် အရလယ်အစာသ ပဌောင်သလဲခဌင်သအတလက်
  4. cloud ဝန်ဆောင်မဟုပေသသူမျာသအတလက် အလျာသလိုက် အလိုအလျောက် အရလယ်အစာသခလဲခဌင်သ (Cluster Autoscaling)

ကျလန်ုပ်တို့၏ဘလော့ဂ်ရဟိ အခဌာသဆောင်သပါသမျာသကိုလည်သ ဖတ်ပါ-

source: www.habr.com

မဟတ်ချက် Add