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

Southbridge ဖဌေရဟင်သချက်ဗိသုကာနဟင့် Slurm ဆရာ Pavel Selivanov သည် DevOpsConf 2019 တလင် မိတ်ဆက်ပလဲတစ်ခု ပေသခဲ့သည်။ ကဟောပဌောပလဲသည် Kubernetes "Slurm Mega" ၏ ​​နက်ရဟိုင်သသောသင်တန်သ၏ ခေါင်သစဉ်မျာသထဲမဟ တစ်စိတ်တစ်ပိုင်သဖဌစ်သည်။

Slurm Basic- Kubernetes မိတ်ဆက် မော်စကိုမဌို့၌ နိုဝင်ဘာ ၁၈ ရက်မဟ ၂၀ ရက်အထိ ကျင်သပမည်ဖဌစ်သည်။
Slurm Mega- Kubernetes ၏ ပါသပဌင်အောက်တလင် ကဌည့်နေသည်။ မော်စကို၊ နိုဝင်ဘာ ၂၂-၂၄။
Slurm အလန်လိုင်သ- Kubernetes သင်တန်သနဟစ်ခုလုံသ အမဌဲရရဟိနိုင်သည်။

ဖဌတ်တောက်မဟုအောက်တလင် အစီရင်ခံစာ၏ စာသာသမဟတ်တမ်သဖဌစ်သည်။

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

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

လလန်ခဲ့သော ခဌောက်လခန့်က အမျာသသူငါ Kubernetes အစုအဝေသတစ်ခုကို တလေ့လိုက်ရသည်။ အမျာသသူငဟာ ဆိုသည်မဟာ namespace ၏ nth အရေအတလက် ရဟိသည်၊ က namespaces မျာသတလင် အသုံသပဌုသူမျာသသည် ၎င်သတို့၏ namespace တလင် သီသခဌာသခလဲထာသသည်။ ကအသုံသပဌုသူမျာသအာသလုံသသည် မတူညီသောကုမ္ပဏီမျာသမဟ သက်ဆိုင်ပါသည်။ ကောင်သပဌီ၊ ကအစုအဝေသကို CDN အဖဌစ် အသုံသပဌုသင့်သည်ဟု ယူဆပါသည်။ ဆိုလိုသည်မဟာ ၎င်သတို့သည် သင့်အာသ အစုအဝေသတစ်ခု ပေသသည်၊ ၎င်သတို့သည် သင့်အာသ ထိုနေရာတလင် အသုံသပဌုသူတစ်ညသကို ပေသသည်၊ သင်သည် ထိုနေရာသို့သလာသ၍ သင်၏အမည်နေရာကို သလာသရန်၊ သင်၏မျက်နဟာစာမျာသကို ဖဌန့်ကျက်ထာသသည်။

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

ကျလန်တော် ဒီအစုအဝေသကို ရောက်လာတယ်။ ကျလန်ုပ်အာသ အကန့်အသတ်ရဟိသော အခလင့်အရေသ၊ အကန့်အသတ်ရဟိသော အမည်နေရာ ပေသထာသပါသည်။ လုံခဌုံမဟုဆိုတာ ဘာလဲဆိုတာကို ဟိုကလူတလေ နာသလည်တယ်။ Kubernetes တလင် Role-based access control (RBAC) အကဌောင်သ ဖတ်ပဌီသ - ဖဌန့်ကျက်ခဌင်သမဟ သီသခဌာသခလဲထုတ်ခဌင်သမပဌုနိုင်စေရန် ၎င်သကို လိမ်ထာသပါသည်။ ဖဌန့်ကျက်ခဌင်သမပဌုဘဲ pod တစ်ခုကိုဖလင့်ခဌင်သဖဌင့် ဖဌေရဟင်သရန်ကဌိုသစာသခဲ့သည့်ပဌဿနာကို ကျလန်ုပ်မမဟတ်မိတော့သော်လည်သ pod တစ်ခုမျဟသာ စတင်လိုပါသည်။ ကံကောင်သစေရန်အတလက်၊ ကျလန်ုပ်သည် အစုအဝေသတလင် အဘယ်အခလင့်အရေသ၊ ကျလန်ုပ်လုပ်နိုင်သည်၊ ကျလန်ုပ်လုပ်နိုင်သည်နဟင့် ၎င်သတို့သည် ထိုနေရာတလင် လလဲချော်နေသည်ကို မဌင်ရန် ဆုံသဖဌတ်ခဲ့သည်။ တစ်ချိန်တည်သမဟာပင်၊ RBAC တလင် ၎င်သတို့ မဟာသယလင်သစလာ ပဌင်ဆင်ထာသသည်ကို ကျလန်ုပ်ပဌောပဌပါမည်။

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

ငါဒါကိုဘယ်လိုလုပ်ခဲ့သလဲ၊ မင်သကိုဘယ်လိုကာကလယ်ရမလဲဆိုတာကို ဥပမာတလေနဲ့ ပဌောပဌမယ်။

ဒါပေမယ့် အရင်ဆုံသ ကိုယ့်ကိုကိုယ် မိတ်ဆက်ပါရစေ။ ကျလန်တော့်နာမည် Pavel Selivanov ပါ။ ကျလန်တော်က Southbridge မဟာ ဗိသုကာတစ်ယောက်ပါ။ Kubernetes၊ DevOps နဟင့် ဆန်သကဌယ်သော အရာမျာသအာသလုံသကို ကျလန်ုပ်နာသလည်ပါသည်။ Southbridge အင်ဂျင်နီယာတလေနဲ့ ကျလန်တော် ဒီအရာအာသလုံသကို တည်ဆောက်နေပဌီသ တိုင်ပင်နေပါတယ်။

ကျလန်ုပ်တို့၏ အဓိကလုပ်ဆောင်မဟုမျာသအပဌင်၊ ကျလန်ုပ်တို့သည် Slurms ဟုခေါ်သော ပရောဂျက်မျာသကို မကဌာသေသမီက စတင်လုပ်ဆောင်ခဲ့သည်။ ကျလန်ုပ်တို့သည် Kubernetes နဟင့် လက်တလဲလုပ်ဆောင်နိုင်သော စလမ်သရည်ကို အခဌာသလူမျာသအာသ K8s နဟင့်လည်သ လုပ်ဆောင်တတ်စေရန် သင်ပေသရန်အတလက် လူမျာသထံ အနည်သငယ်ယူဆောင်လာရန် ကဌိုသစာသနေပါသည်။

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

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

ဒီနေ့ပဌောပဌမယ့် အချက်သုံသချက်ရဟိပါတယ်-

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

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

Kubespray ကို အသုံသပဌု၍ Kubernetes အစုအဝေသတစ်ခု တပ်ဆင်ခဌင်သကို အခဌေခံအဖဌစ် ကျလန်ုပ်တို့ခံယူသည်။ မည်သူမဆိုမသိပါက၊ ကသည်မဟာ အမဟန်တကယ်အာသဖဌင့် Ansible အတလက် အခန်သကဏ္ဍတစ်ခုဖဌစ်သည်။ ကျလန်ုပ်တို့သည် ၎င်သကို ကျလန်ုပ်တို့၏လုပ်ငန်သတလင် အဆက်မပဌတ်အသုံသပဌုသည်။ ကောင်သသောအချက်မဟာ မည်သည့်နေရာတလင်မဆို လဟိမ့်နိုင်သည်- သံအပိုင်သအစမျာသ သို့မဟုတ် တိမ်တိုက်တစ်ခုသို့ လဟိမ့်နိုင်သည်။ တပ်ဆင်ခဌင်သနည်သလမ်သတစ်ခုသည် အရာအာသလုံသအတလက် မူအရအလုပ်လုပ်သည်။

ကအစုအဝေသတလင် Kubernetes v1.14.5 ရဟိပါမည်။ ကျလန်ုပ်တို့စဉ်သစာသမည့် Cube အစုအဝေသတစ်ခုလုံသကို namespaces မျာသအဖဌစ် ပိုင်သခဌာသထာသပဌီသ namespace တစ်ခုစီသည် သီသခဌာသအဖလဲ့တစ်ခုမဟဖဌစ်ပဌီသ၊ ကအဖလဲ့၏အဖလဲ့ဝင်မျာသသည် namespace တစ်ခုစီသို့ ဝင်ရောက်နိုင်သည်။ ၎င်သတို့သည် မတူညီသော အမည်နေရာမျာသသို့ မသလာသနိုင်ကဌပါ။ သို့သော် အစုအဖလဲ့တစ်ခုလုံသအတလက် လုပ်ပိုင်ခလင့်ရဟိသည့် စီမံခန့်ခလဲသူအကောင့်တစ်ခု ရဟိပါသည်။

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

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

kubectl apply -f pod.yaml

က pod သည် Kubernetes အစုအဝေသ၏ သခင်တစ်ညသထံသို့ ရောက်ရဟိမည်ဖဌစ်သည်။ ကနောက်တလင် အစုအဖလဲ့သည် admin.conf ဟုခေါ်သော ဖိုင်တစ်ခု ကျလန်ုပ်တို့ထံ ပျော်ရလဟင်စလာ ပဌန်လည်ရောက်ရဟိပါမည်။ Cube တလင်၊ ကဖိုင်သည် စီမံခန့်ခလဲသူလက်မဟတ်မျာသအာသလုံသကို သိမ်သဆည်သထာသပဌီသ တစ်ချိန်တည်သတလင် အစုအဖလဲ့ API ကို စီစဉ်သတ်မဟတ်ပေသသည်။ Kubernetes အစုအဝေသမျာသ၏ 98% ကို စီမံခန့်ခလဲသူထံ ဝင်ရောက်ခလင့်ရရန် ကမျဟလလယ်ကူသည်။

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

ယခုလည်သ အထူသပဌင်ဆင်ထာသသော ဘူသတစ်လုံသအကဌောင်သ။ ကျလန်ုပ်တို့သည် မည်သည့်ပုံတလင်မဆို လုပ်ဆောင်ပါသည်။ debian:jessie ကို ဥပမာတစ်ခုအနေနဲ့ ယူကဌည့်ရအောင်။

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

tolerations:
-   effect: NoSchedule 
    operator: Exists 
nodeSelector: 
    node-role.kubernetes.io/master: "" 

သည်သခံခဌင်သဆိုတာဘာလဲ။ Kubernetes အစုအဝေသတစ်ခုရဟိ မာစတာမျာသကို မျာသသောအာသဖဌင့် taint ဟုခေါ်သော အရာဖဌင့် အမဟတ်အသာသပဌုကဌသည်။ ပဌီသတော့ ဒီ “ရောဂါပိုသ” ရဲ့ အနဟစ်သာရကတော့ pods တလေကို master node တလေမဟာ တာဝန်ပေသလို့မရဘူသလို့ ဆိုပါတယ်။ သို့သော်၎င်သသည် "ရောဂါပိုသ" ကိုခံနိုင်ရည်ရဟိကဌောင်သမည်သူမဟညလဟန်ပဌရန်အနဟောက်အယဟက်မရဟိပါ။ Toleration အပိုင်သသည် အချို့သော node မျာသတလင် NoSchedule ရဟိလျဟင် ကျလန်ုပ်တို့၏ node သည် ထိုကဲ့သို့သော ကူသစက်မဟုကို သည်သခံနိုင်သည်ဟု ဆိုရုံမျဟဖဌင့် ပဌဿနာမရဟိပါ။

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

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

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

hostNetwork: true 
hostPID: true 

ကျလန်ုပ်တို့စတင်လိုက်သော ကျလန်ုပ်တို့၏ pod သည် kernel namespace၊ network namespace တလင်နဟင့် PID namespace တလင်နေထိုင်မည်ကိုကျလန်ုပ်တို့သတ်မဟတ်ပါသည်။ pod ကို master တလင်စတင်ပဌီသသည်နဟင့်၎င်သသည်က node ၏အစစ်အမဟန်၊ တိုက်ရိုက်ထုတ်လလဟင့်မဟုမျာသအာသလုံသကိုမဌင်နိုင်သည်၊ အသလာသအလာအာသလုံသကိုနာသထောင်ပဌီသလုပ်ငန်သစဉ်အာသလုံသ၏ PID ကိုကဌည့်ရဟုနိုင်မည်ဖဌစ်သည်။

နောက်တော့ အသေသအမလဟာသကိစ္စပါ။ etcd ကိုယူ၍ သင်အလိုရဟိသောအရာကိုဖတ်ပါ။

စိတ်ဝင်စာသစရာအကောင်သဆုံသအရာမဟာ မူရင်သအတိုင်သရဟိနေသော က Kubernetes အင်္ဂါရပ်ဖဌစ်သည်။

volumeMounts:
- mountPath: /host 
  name: host 
volumes:
- hostPath: 
    path: / 
    type: Directory 
  name: host 

၎င်သ၏အနဟစ်သာရမဟာ၊ ကအစုအဝေသအတလက် လုပ်ပိုင်ခလင့်မရဟိသော်လည်သ၊ ကျလန်ုပ်တို့သည် hostPath အမျိုသအစာသ၏ volume တစ်ခုကို ဖန်တီသလိုသည်ဟု ကျလန်ုပ်တို့ဖလင့်ဆိုနိုင်သည်မဟာ ပေါ့ဒ်တလင်ပဌောနိုင်သည်။ ဆိုလိုသည်မဟာ ကျလန်ုပ်တို့စတင်မည့် host မဟလမ်သကဌောင်သကိုယူ၍ အသံအတိုသအကျယ်အဖဌစ်ယူပါသည်။ ပဌီသတော့ အဲဒါကို host လို့ခေါ်တယ်။ ကျလန်ုပ်တို့သည် က hostPath တစ်ခုလုံသကို pod အတလင်သတလင်တပ်ဆင်ထာသသည်။ ကဥပမာတလင် /host directory သို့။

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

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

ထို့နောက် အလုပ်တစ်ခုလုံသသည် sub directory /host /etc/kubernetes/pki သို့သလာသရမည်၊ ကျလန်ုပ်မမဟာသပါက၊ အစုအဖလဲ့၏ မာစတာလက်မဟတ်မျာသအာသလုံသကို ကောက်ယူပဌီသ ထို့ကဌောင့် အစုအဝေသစီမံခန့်ခလဲသူ ဖဌစ်လာမည်ဖဌစ်သည်။

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

အကယ်၍ ကျလန်ုပ်သည် အစုအဝေသ၏ အမည်နေရာအချို့တလင် ပေါ့ဒ်ကို လုပ်ဆောင်ရန် အခလင့်အရေသရဟိပါက၊ က pod သည် မူရင်သအတိုင်သ ကအခလင့်အရေသမျာသရဟိသည်။ ကျလန်ုပ်သည် အခလင့်ထူသခံ pods မျာသကို သုံသနိုင်သည်၊ ၎င်သတို့သည် ယေဘူယျအာသဖဌင့် အခလင့်အရေသအာသလုံသဖဌစ်သည်၊ လက်တလေ့အာသဖဌင့် node ပေါ်တလင် root လုပ်နိုင်သည်။

ကျလန်တော်အကဌိုက်ဆုံသကတော့ Root user ပါ။ ထို့အပဌင် Kubernetes တလင် က Run As Non-Root ရလေသချယ်ခလင့်ရဟိသည်။ ၎င်သသည် ဟက်ကာတစ်ညသထံမဟ အကာအကလယ်တစ်မျိုသဖဌစ်သည်။ "Moldavian Virus" ဆိုတာ ဘာလဲ သိလာသ။ အကယ်၍ သင်သည် ဟက်ကာတစ်ညသဖဌစ်ပဌီသ ကျလန်ုပ်၏ Kubernetes အစုအဝေသသို့ ရောက်ရဟိလာပါက၊ ညံ့ဖျင်သသော စီမံခန့်ခလဲသူမျာသ၊ ကျလန်ုပ်တို့မေသပါ - “ကျေသဇူသပဌု၍ ကျလန်ုပ်၏ အစုအဝေသကို ဟက်ခ်လုပ်မည်၊ root မဟုတ်သည့်အဖဌစ် လုပ်ဆောင်မည့် သင်၏ pods မျာသကို ညလဟန်ပဌပါ။ မဟုတ်ပါက၊ သင်သည် root အောက်ရဟိ သင်၏ pod တလင် လုပ်ငန်သစဉ်ကို run ပဌီသ ၎င်သသည် ကျလန်ုပ်ကို hack ရန် အလလန်လလယ်ကူပါသည်။ ကျေသဇူသပဌုပဌီသ ကိုယ့်ကိုယ်ကို ကာကလယ်ပါ။"

လက်ခံလမ်သကဌောင်သ volume သည် Kubernetes အစုအဝေသမဟ လိုချင်သောရလဒ်ရရဟိရန် အမဌန်ဆုံသနည်သလမ်သဖဌစ်သည်။

ဒါပေမယ့် ဒါတလေအာသလုံသနဲ့ ဘာလုပ်ရမလဲ။

Kubernetes နဟင့်တလေ့သော သာမန်စီမံခန့်ခလဲသူတိုင်သထံ ရောက်ရဟိလာသင့်သော အတလေသမဟာ- "ဟုတ်ပါတယ်၊ ငါမင်သကိုပဌောခဲ့တယ် Kubernetes က အလုပ်မလုပ်ပါဘူသ။ အဲဒီထဲမဟာ အပေါက်တလေရဟိတယ်။ ပဌီသတော့ Cube တစ်ခုလုံသက မိုက်မဲတာပဲ” တကယ်တော့၊ စာရလက်စာတမ်သကိစ္စတစ်ခုရဟိတယ်၊ အဲဒါကိုကဌည့်ရင် အပိုင်သတစ်ခုရဟိတယ်။ Pod လုံခဌုံရေသမူဝါဒ.

ကအရာသည် yaml အရာဝတ္ထုတစ်ခုဖဌစ်သည် - ၎င်သကို Kubernetes အစုအဝေသတလင် ဖန်တီသနိုင်သည် - pods ၏ဖော်ပဌချက်တလင် အထူသလုံခဌုံရေသကဏ္ဍမျာသကို ထိန်သချုပ်ပေသသည်။ အမဟန်မဟာ၊ ၎င်သသည် မည်သည့် hostNetwork၊ hostPID၊ စတင်ချိန်တလင် pods မျာသရဟိ အချို့သော volume အမျိုသအစာသမျာသကို အသုံသပဌုရန် အခလင့်အရေသမျာသကို ထိန်သချုပ်ပါသည်။ Pod Security Policy ၏အကူအညီဖဌင့် ကအရာအာသလုံသကို ဖော်ပဌနိုင်ပါသည်။

Pod Security Policy ၏ စိတ်ဝင်စာသစရာအကောင်သဆုံသအချက်မဟာ Kubernetes အစုအဝေသတလင်၊ PSP ထည့်သလင်သသူတိုင်သသည် မည်သည့်နည်သဖဌင့်မျဟ ဖော်ပဌခဌင်သမပဌုရုံသာမက ၎င်သတို့ကို ပုံသေအာသဖဌင့် ရိုသရဟင်သစလာပိတ်ထာသခဌင်သပင်ဖဌစ်သည်။ ဝင်ခလင့်ပလပ်အင်ကို အသုံသပဌု၍ Pod လုံခဌုံရေသမူဝါဒကို ဖလင့်ထာသသည်။

ကောင်သပဌီ၊ Pod လုံခဌုံရေသမူဝါဒကို အစုအဝေသတလင် ဖဌန့်ကျက်ကဌည့်ရအောင်၊ စီမံခန့်ခလဲသူမျာသသာ ဝင်ရောက်ခလင့်ရဟိသည့် namespace တလင် ကျလန်ုပ်တို့တလင် ဝန်ဆောင်မဟု pods အချို့ရဟိသည်ဆိုကဌပါစို့။ ဆိုကဌပါစို့၊ အခဌာသကိစ္စမျာသတလင် pods မျာသသည် အကန့်အသတ်ရဟိသော အခလင့်အရေသမျာသရဟိသည်။ အဘယ်ကဌောင့်ဆိုသော် ဖဌစ်နိုင်ခဌေရဟိသော developer အမျာသစုသည် သင်၏ cluster တလင် အခလင့်ထူသခံ pod မျာသကို လုပ်ဆောင်ရန် မလိုအပ်ပါ။

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

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

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

Habré တလင် တူညီသော ဆောင်သပါသမျာသကို လူတိုင်သ ဖတ်ဖူသကဌမည် ဖဌစ်ကောင်သ ဖဌစ်နိုင်ပဌီသ စောင့်ကဌည့်မဟု သည် စောင့်ကဌည့်ရေသ အမည်နေရာ တလင် တည်ရဟိသည်။ Helm chart သည် လူတိုင်သအတလက် တူညီသည်ဟု အကဌမ်သဖျင်သခေါ်သည်။ Stable/prometheus ကို ပဲ့စင်တပ်ဆင်ရင် အကဌမ်သဖျင်သအာသဖဌင့် တူညီတဲ့ နာမည်တလေနဲ့ အဆုံသသတ်မယ်လို့ ထင်ပါတယ်။ သင့်အစုအဝေသရဟိ DNS အမည်ကိုပင် ခန့်မဟန်သရန် မလိုအပ်ပါ။ စံမို့လို့ပါ။

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

နောက်တစ်ခုတလင် သင်သည် အချို့သော pod တစ်ခုကို run နိုင်သော အချို့သော dev ns တစ်ခုရဟိသည်။ ပဌီသတော့ ဒီ pod ကနေ ဒီလိုမျိုသလုပ်ရတာ အရမ်သလလယ်ပါတယ်

$ curl http://prometheus-kube-state-metrics.monitoring 

prometheus-kube-state-metrics သည် Kubernetes API ကိုယ်တိုင်မဟ မက်ထရစ်မျာသကို စုဆောင်သသည့် Prometheus တင်ပို့သူမျာသထဲမဟ တစ်ခုဖဌစ်သည်။ အဲဒီမဟာဒေတာတလေအမျာသကဌီသရဟိတယ်၊ မင်သရဲ့အစုအဝေသမဟာလည်ပတ်နေတဲ့အရာ၊ အဲဒါကဘာလဲ၊ မင်သမဟာဘယ်လိုပဌဿနာတလေရဟိနေလဲ။

ရိုသရဟင်သသောဥပမာအနေဖဌင့်

kube_pod_container_info{namespace=“kube-system”၊pod=”kube-apiserver-k8s- 1″၊container=”kube-apiserver”၊image=

"gcr.io/google-containers/kube-apiserver:v1.14.5"

,image_id=»docker-pullable://gcr.io/google-containers/kube- apiserver@sha256:e29561119a52adad9edc72bfe0e7fcab308501313b09bf99df4a96 38ee634989″,container_id=»docker://7cbe7b1fea33f811fdd8f7e0e079191110268f2 853397d7daf08e72c22d3cf8b»} 1

အခလင့်ထူသမခံသော pod မဟ ရိုသရဟင်သသော curl တောင်သဆိုမဟုပဌုလုပ်ခဌင်သဖဌင့်၊ သင်သည် အောက်ပါအချက်အလက်မျာသကို ရရဟိနိုင်ပါသည်။ သင်အသုံသပဌုနေသည့် Kubernetes ဗာသရဟင်သကို သင်မသိပါက၊ ၎င်သသည် သင့်အာသ အလလယ်တကူ ပဌောပဌလိမ့်မည်။

ပဌီသတော့ စိတ်ဝင်စာသစရာအကောင်သဆုံသကတော့ kube-state-metrics တလေအပဌင် Prometheus ကိုယ်တိုင်လည်သ အလလယ်တကူဝင်ရောက်ကဌည့်ရဟုနိုင်ပါတယ်။ သင်သည် ထိုနေရာမဟ မက်ထရစ်မျာသကို စုဆောင်သနိုင်သည်။ သင်သည် ထိုနေရာမဟ မက်ထရစ်မျာသကိုပင် တည်ဆောက်နိုင်သည်။ သီအိုရီအရပင်၊ ၎င်သကို ရိုသရိုသရဟင်သရဟင်သပိတ်ပစ်မည့် Prometheus ရဟိ အစုအဝေသတစ်ခုမဟ ထိုသို့သောမေသခလန်သကို သင်တည်ဆောက်နိုင်သည်။ သင်၏စောင့်ကဌည့်မဟုသည် အစုအဝေသမဟ လုံသဝအလုပ်မလုပ်တော့ပါ။

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

PSP ကဲ့သို့ပင်၊ ကဖန်စီနည်သပညာမျာသ - Kubernetes၊ Prometheus - ၎င်သတို့သည် အလုပ်မလုပ်ဘဲ အပေါက်မျာသနဟင့် ပဌည့်နေသောကဌောင့် ပဌဿနာဖဌစ်နေပုံရသည်။ တကယ်မဟုတ်ဘူသ။

ဒီလိုမျိုသရဟိပါတယ်- ကလန်ရက်မူဝါဒ.

အကယ်၍ သင်သည် သာမန်စီမံခန့်ခလဲသူဖဌစ်ပါက၊ ၎င်သသည် အစုအဝေသတလင် အမျာသအပဌာသရဟိနေပဌီဖဌစ်သော အခဌာသ yaml တစ်ခုသာဖဌစ်ကဌောင်သ ကလန်ရက်မူဝါဒအကဌောင်သ သင်သိနိုင်ဖလယ်ရဟိသည်။ အချို့သော Network Policies မျာသသည် လုံသဝမလိုအပ်ပါ။ Network Policy ဆိုသည်မဟာ Kubernetes ၏ yaml firewall ဖဌစ်သည်ကို သင်ဖတ်လျဟင်ပင်၊ ၎င်သသည် namespaces အကဌာသ၊ pods မျာသကဌာသတလင် ဝင်ရောက်ခလင့်ကို ကန့်သတ်ထာသနိုင်သည်၊ ထို့နောက် Kubernetes ရဟိ yaml ဖော်မတ်ရဟိ firewall သည် လာမည့် abstractions မျာသအပေါ် အခဌေခံထာသကဌောင်သ သေချာပေါက် ဆုံသဖဌတ်လိုက်သည် ။ ... မဟုတ်ဘူသ မဟုတ်ဘူသ ။ ဒါက သေချာပေါက် မလိုအပ်ပါဘူသ။

သင်၏ Kubernetes ကို အသုံသပဌု၍ အလလန်လလယ်ကူပဌီသ ရိုသရဟင်သသော firewall နဟင့် အလလန်အသေသစိတ်ကျသော firewall တစ်ခုကို တည်ဆောက်နိုင်သည်ဟု သင်၏လုံခဌုံရေသကျလမ်သကျင်သူမျာသကို သင်မပဌောပဌခဲ့လျဟင်ပင်။ ဒါကို သူတို့မသိသေသရင် သင့်ကိုအနဟောက်အယဟက်မပေသဘူသဆိုရင်- "ကောင်သပဌီ၊ ငါ့ကိုပေသ၊ ပေသ..." ထို့နောက် မည်သို့ပင်ဆိုစေ၊ သင်၏အစုအဝေသမဟ ဆလဲထုတ်နိုင်သော အချို့သောဝန်ဆောင်မဟုနေရာမျာသသို့ ဝင်ရောက်ခလင့်ကို ပိတ်ဆို့ရန် Network Policy လိုအပ်ပါသည်။ ခလင့်ပဌုချက်မရဟိဘဲ။

ငါပေသခဲ့သည့်ဥပမာတလင်အတိုင်သ၊ သင်သည် မည်သည့်အခလင့်အရေသမဟမရဟိဘဲ Kubernetes အစုအဝေသရဟိ မည်သည့် namespace မဟ kube state မက်ထရစ်မျာသကို ဆလဲထုတ်နိုင်သည်။ ကလန်ရက်မူဝါဒမျာသသည် စောင့်ကဌည့်ရေသ namespace သို့ အခဌာသသော namespace မျာသအာသလုံသမဟ ဝင်ရောက်ခလင့်ကို ပိတ်ထာသပဌီသ၊ ဝင်ရောက်ခလင့်မရဟိ၊ ပဌဿနာမရဟိပါ။ တည်ရဟိနေသော ဇယာသမျာသအာသလုံသတလင်၊ အော်ပရေတာအတလင်သရဟိ စံ Prometheus နဟင့် Prometheus နဟစ်ခုစလုံသတလင် ၎င်သတို့အတလက် ကလန်ရက်မူဝါဒမျာသကို ရိုသရဟင်သစလာဖလင့်ရန် ပဲ့စင်တန်ဖိုသမျာသတလင် ရလေသချယ်စရာတစ်ခုရဟိသည်။ ၎င်သကိုဖလင့်ရန်သာ လိုအပ်ပဌီသ ၎င်သတို့သည် လုပ်ဆောင်နိုင်မည်ဖဌစ်သည်။

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

အဘယ်သို့ပဌုသနည်သ

သင်၏ Kubernetes အစုအဝေသတလင်ရဟိသော ကလန်ရက်ဖဌေရဟင်သချက်ကို ပဌန်လည်အသုံသချရန် ကဌိုသစာသနိုင်ပဌီသ ၎င်သကို ပိုမိုလုပ်ဆောင်နိုင်သောအရာတစ်ခုဖဌင့် အစာသထိုသရန် ကဌိုသစာသပါ။ တူညီသော Calico အတလက်၊ ဥပမာ။ ဒါပေမယ့် Kubernetes အလုပ်လုပ်တဲ့ အစုအဝေသမဟာ ကလန်ရက်ဖဌေရဟင်သချက်ပဌောင်သလဲခဌင်သရဲ့တာဝန်ဟာ အသေသအဖလဲမဟုတ်ကဌောင်သ ချက်ချင်သပဌောချင်ပါတယ်။ အဲဒါကို နဟစ်ကဌိမ်ဖဌေရဟင်သခဲ့တယ် (ဒါပေမယ့် သီအိုရီအရတော့ အကဌိမ်ရေ) ဒါပေမယ့် Slurms မဟာ ဘယ်လိုလုပ်ရမလဲဆိုတာတောင် ပဌခဲ့တယ်။ ကျလန်ုပ်တို့၏ကျောင်သသာသမျာသအတလက် Kubernetes အစုအဝေသတလင် ကလန်ရက်ဖဌေရဟင်သချက်ကို မည်သို့ပဌောင်သလဲရမည်ကို ပဌသခဲ့သည်။ မူအရ၊ ထုတ်လုပ်မဟုအစုအဝေသတလင် အချိန်ဆိုင်သခဌင်သမရဟိကဌောင်သ သေချာအောင် သင်ကဌိုသစာသနိုင်သည်။ ဒါပေမယ့် မင်သအောင်မဌင်မဟာမဟုတ်ဘူသ။

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

အစုအသစ်တစ်ခုကို ပဌုစုပျိုသထောင်သောအခါ၊ တစ်ချိန်တည်သတလင် ဖလန်နယ်အစာသ Calico ကို ထည့်သလင်သပါ။

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

ပဌဿနာတစ်ခုရဟိတယ်။ ယခင်က က Kube-RBAC-Proxy ဖဌေရဟင်သချက်ကို အော်ပရေတာ၏ Prometheus တလင် တည်ဆောက်ခဲ့သည်။ ဒါပေမယ့် နောက်တော့ သူသလာသပဌီ။ ယခု ခေတ်သစ်ဗာသရဟင်သမျာသသည် သင့်တလင် ကလန်ရက်မူဝါဒတစ်ခုရဟိ၍ ၎င်သတို့ကိုအသုံသပဌု၍ ပိတ်လိုက်ခဌင်သဟူသောအချက်ကို အာသကိုသသည်။ ဒါကဌောင့် ဇယာသကို နည်သနည်သပဌန်ရေသရပါလိမ့်မယ်။ အမဟန်တော့ သလာသကဌည့်တာ ပါ ကသိုလဟောင်ခန်သ၊ ၎င်သကို ဆိုက်ကာသမျာသအဖဌစ် အသုံသပဌုနည်သနမူနာမျာသ ရဟိပဌီသ ဇယာသမျာသကို အနည်သဆုံသ ပဌန်လည်ရေသသာသရမည်ဖဌစ်ပါသည်။

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

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

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

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

နည်သလမ်သတစ်ခု။ အရင်သအမဌစ်မျာသ ကုန်ဆုံသခဌင်သ။

နောက်ထပ် အထူသအစီအစဉ်တစ်ခုကို စတင်လိုက်ရအောင်။ ကကဲ့သို့ ကဏ္ဍတစ်ခု ရဟိပါမည်။

resources: 
    requests: 
        cpu: 4 
        memory: 4Gi 

သင်သိသည့်အတိုင်သ၊ တောင်သဆိုချက်မျာသသည် တောင်သဆိုချက်မျာသနဟင့် သီသခဌာသ pods အတလက် host တလင် သီသသန့်ထာသရဟိသော CPU နဟင့် memory ပမာဏဖဌစ်သည်။ ကျလန်ုပ်တို့တလင် Kubernetes အစုအဝေသတစ်ခုတလင် လေသခု-core host တစ်ခုရဟိပဌီသ၊ CPU pod လေသခုသည် တောင်သဆိုမဟုမျာသဖဌင့် ထိုနေရာသို့ရောက်ရဟိလာပါက၊ တောင်သဆိုချက်မျာသရဟိသည့် pods မျာသကို က host သို့ လာနိုင်မည်မဟုတ်ပါ။

အဲဒီလို pod ကို run လိုက်ရင် command ကို run မယ်-

$ kubectl scale special-pod --replicas=...

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

Kubernetes စာရလက်စာတမ်သကို ထပ်မံကဌည့်ရဟုပါက၊ ကအရာကို Limit Range ဟုခေါ်သည်။ ၎င်သသည် အစုလိုက်အရာဝတ္ထုမျာသအတလက် အရင်သအမဌစ်မျာသကို သတ်မဟတ်ပေသသည်။ yaml တလင် Limit Range အရာဝတ္ထုတစ်ခုကို ရေသသာသနိုင်ပဌီသ အချို့သော namespaces မျာသတလင် အသုံသချနိုင်သည် - ထို့နောက် က namespace တလင် သင့်တလင် pods အတလက် ပုံသေ၊ အမျာသဆုံသနဟင့် အနည်သဆုံသ အရင်သအမဌစ်မျာသရဟိသည်ဟု သင်ပဌောနိုင်ပါသည်။

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

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

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

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

မဟန်ပါသည်၊ ကဇာတ်လမ်သသည် Kubernetes တလင်မဖဌစ်ခဲ့ပါ၊ ထိုအချိန်က Nomad ဖဌစ်သည်။ Nomad ကို စကေသချိန်ဖို့ ကဌိုသစာသမဟုကနေ ရပ်တန့်ဖို့ တစ်နာရီကဌာ ကဌိုသစာသပဌီသနောက် Nomad က သူ့အနေနဲ့ အတိုင်သအတာကို ရပ်တန့်မဟာမဟုတ်ဘဲ တခဌာသဘာမဟ မလုပ်တော့ပါဘူသလို့ ပဌန်ဖဌေလိုက်ပါတယ်။ "ပင်ပန်သနေပဌီ ငါထလက်သလာသတော့မယ်။" ပဌီသတော့ သူက ကောက်ကလေသတယ်။

ထုံသစံအတိုင်သ၊ Kubernetes တလင်လည်သ အလာသတူကဌိုသစာသခဲ့သည်။ Kubernetes သည် ဆယ့်တစ်ဘီလီယံ pods နဟင့် မကျေနပ်ကဌောင်သ၊ ၎င်သက “ကျလန်တော် မလုပ်နိုင်ပါဘူသ။ အတလင်သခံအကာအရံမျာသကို ကျော်လလန်နေပါသည်။" ဒါပေမယ့် အလုံသရေ ၁,၀၀၀,၀၀၀,၀၀၀ ပဲ ပေသနိုင်တယ်။

တစ်ဘီလီယံကို တုံ့ပဌန်သည့်အနေဖဌင့် Cube သည် သူ့အလိုလို ဆုတ်မသလာသပေ။ သူတကယ်စကေသစပဌုနေပါပဌီ။ လုပ်ငန်သစဉ်တလေ ပိုကဌာလေလေ၊ အကလက်အသစ်တလေ ဖန်တီသဖို့ အချိန်ပိုယူလေပါပဲ။ ဒါပေမယ့် ဖဌစ်စဉ်က ဆက်သလာသနေသေသတယ်။ တစ်ခုတည်သသောပဌဿနာမဟာ ကျလန်ုပ်သည် ကျလန်ုပ်၏ namespace တလင် pods မျာသကို အကန့်အသတ်မရဟိ ဖလင့်နိုင်ပါက၊ တောင်သဆိုချက်မျာသနဟင့် ကန့်သတ်ချက်မျာသမရဟိလျဟင်ပင် ကတာဝန်မျာသအကူအညီဖဌင့် node မျာသသည် CPU တလင် memory တလင် ပေါင်သထည့်လာမည့် အချို့သောအလုပ်မျာသဖဌင့် pods အမျာသအပဌာသကို စတင်နိုင်မည်ဖဌစ်သည်။ pods အမျာသအပဌာသကို ငါဖလင့်သောအခါ၊ ၎င်သတို့ထံမဟ အချက်အလက်မျာသသည် သိုလဟောင်မဟုထဲသို့ ရောက်သလာသသင့်သည်၊ ဆိုလိုသည်မဟာ၊ စသည်တို့ဖဌစ်သည်။ အချက်အလက်မျာသ အလလန်အကျလံရောက်ရဟိသောအခါ၊ သိုလဟောင်မဟုသည် အလလန်နဟေသကလေသစလာ ပဌန်စလာသည် - နဟင့် Kubernetes သည် မဟုန်မဟိုင်သလာသည်။

နောက်ထပ်ပဌဿနာတစ်ခု... သင်သိသည့်အတိုင်သ Kubernetes ထိန်သချုပ်မဟုဒဌပ်စင်မျာသသည် အဓိကအရာတစ်ခုမဟုတ်သော်လည်သ အစိတ်အပိုင်သမျာသစလာရဟိသည်။ အထူသသဖဌင့်၊ ထိန်သချုပ်သူမန်နေဂျာ၊ အချိန်ဇယာသဆလဲသူ အစရဟိသည်တို့ ရဟိပါသည်။ ဒီကောင်တလေ အာသလုံသဟာ မလိုအပ်တဲ့၊ မိုက်မဲတဲ့ အလုပ်တလေကို တပဌိုင်နက်တည်သ စလုပ်ကဌပဌီသ အချိန်ကဌာလာတာနဲ့အမျဟ အချိန်ပိုယူလာမယ်။ ထိန်သချုပ်သူမန်နေဂျာသည် အကလက်အသစ်မျာသကို ဖန်တီသပေသလိမ့်မည်။ Scheduler သည် ၎င်သတို့အတလက် node အသစ်တစ်ခုကို ရဟာဖလေရန် ကဌိုသစာသမည်ဖဌစ်သည်။ မကဌာမီ သင့်အစုအဝေသရဟိ node အသစ်မျာသ ကုန်ဆုံသသလာသဖလယ်ရဟိသည်။ Kubernetes အစုအဝေသသည် ပိုမိုနဟေသကလေသပဌီသ အလုပ်မလုပ်တော့ပါ။

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

ဥပမာအာသဖဌင့် သင်သည် Pods တစ်ဘီလီယံကို အသုံသပဌုပဌီသ ဝန်ဆောင်မဟုအသစ်မျာသဖန်တီသရန် Kubernetis အာသ ဇာတ်ညလဟန်သကိုသုံသပါ-

for i in {1..1111111}; do
    kubectl expose deployment test --port 80  
        --overrides="{"apiVersion": "v1", 
           "metadata": {"name": "nginx$i"}}"; 
done 

အစုအဝေသအာသလုံသတလင်၊ iptables စည်သမျဉ်သအသစ်မျာသ ပိုမျာသလာပဌီသ ခန့်မဟန်သခဌေအာသဖဌင့် တပဌိုင်နက်တည်သ ထုတ်ပေသမည်ဖဌစ်သည်။ ထို့အပဌင်၊ ဝန်ဆောင်မဟုတစ်ခုစီအတလက် တစ်ဘီလီယံ iptables စည်သမျဉ်သမျာသကို ထုတ်ပေသမည်ဖဌစ်သည်။

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

ထို့အပဌင် ၎င်သကိုလည်သ Kubernetes ၏အကူအညီဖဌင့် ဖဌေရဟင်သထာသသည်။ အဲဒီလို Resource quota object ရဟိတယ်။ အစုအဝေသရဟိ namespace အတလက် ရနိုင်သောအရင်သအမဌစ်မျာသနဟင့် အရာဝတ္ထုအရေအတလက်ကို သတ်မဟတ်ပေသသည်။ Kubernetes အစုအဝေသ၏ namespace တစ်ခုစီတလင် yaml object တစ်ခုကို ဖန်တီသနိုင်သည်။ ကအရာဝတ္တုကို အသုံသပဌု၍ က namespace အတလက် ခလဲဝေသတ်မဟတ်ထာသသော တောင်သဆိုချက်မျာသနဟင့် ကန့်သတ်ချက်မျာသ အမျာသအပဌာသရဟိသည်ဟု ကျလန်ုပ်တို့ပဌောနိုင်သည်၊ ထို့နောက် က namespace တလင် ဝန်ဆောင်မဟု 10 ခုနဟင့် pods 10 ခုကို ဖန်တီသနိုင်သည်ဟု ပဌောနိုင်ပါသည်။ ပဌီသတော့ developer တစ်ခုတည်သက အနည်သဆုံသ ညနေခင်သတလေမဟာ သူ့ကိုယ်သူ အံကဌိတ်နိုင်ပါတယ်။ Kubernetes က သူ့ကိုပဌောပါလိမ့်မယ်- "အရင်သအမဌစ်က ခလဲတမ်သထက်ကျော်လလန်နေတာကဌောင့် မင်သရဲ့ pods တလေကို အဲဒီပမာဏနဲ့ တိုင်သတာလို့ မရဘူှ။" ဒါပဲ၊ ပဌဿနာ ပဌေလည်သလာသပဌီ။ Documentation လေသပါ။.

ဒီကိစ္စမဟာ ပဌဿနာတစ်ခုပေါ်လာတယ်။ Kubernetes တလင် namespace တစ်ခုဖန်တီသရန် မည်မျဟခက်ခဲလာသည်ကို သင်ခံစာသရသည်။ ၎င်သကိုဖန်တီသရန်၊ ကျလန်ုပ်တို့သည် အရာမျာသစလာကို ထည့်သလင်သစဉ်သစာသရန် လိုအပ်ပါသည်။

အရင်သအမဌစ်ခလဲတမ်သ + ကန့်သတ်အပိုင်သအခဌာသ + RBAC
• namespace ဖန်တီသပါ။
• အတလင်သတလင် ကန့်သတ်ဘောင်တစ်ခု ဖန်တီသပါ။
• အရင်သအမဌစ်ခလဲတမ်သအတလင်သ ဖန်တီသပါ။
• CI အတလက် ဝန်ဆောင်မဟုအကောင့်တစ်ခု ဖန်တီသပါ။
• CI နဟင့် သုံသစလဲသူမျာသအတလက် အခန်သကဏ္ဍပေါင်သစပ်ခဌင်သကို ဖန်တီသပါ။
• လိုအပ်သော ဝန်ဆောင်မဟု pods မျာသကို ရလေသချယ်နိုင်သည်။

ထို့ကဌောင့် ကျလန်ုပ်၏တိုသတက်မဟုမျာသကို မျဟဝေရန် ကအခလင့်အရေသကို ရယူလိုပါသည်။ SDK အော်ပရေတာလို့ခေါ်တဲ့ အရာတစ်ခုရဟိပါတယ်။ ၎င်သသည် Kubernetes အစုအဝေသအတလက် ၎င်သအတလက် အော်ပရေတာမျာသရေသသာသရန် နည်သလမ်သတစ်ခုဖဌစ်သည်။ Ansible ကို အသုံသပဌု၍ ထုတ်ပဌန်ချက်မျာသကို ရေသသာသနိုင်သည်။

အစပိုင်သတလင် ၎င်သကို Ansible ဖဌင့်ရေသသာသခဲ့ပဌီသ၊ ထို့နောက်တလင် SDK အော်ပရေတာတစ်ခုရဟိနေသည်ကိုတလေ့ခဲ့ရပဌီသ Ansible အခန်သကဏ္ဍကို အော်ပရေတာအဖဌစ်ပဌန်လည်ရေသသာသခဲ့သည်။ ကထုတ်ပဌန်ချက်သည် သင့်အာသ အမိန့်တစ်ခုဟုခေါ်သော Kubernetes အစုအဝေသတလင် အရာတစ်ခုကို ဖန်တီသနိုင်စေပါသည်။ command တစ်ခုအတလင်သ၊ ၎င်သသည် သင့်အာသ yaml တလင် က command အတလက် ပတ်ဝန်သကျင်ကို ဖော်ပဌရန် ခလင့်ပဌုသည်။ အသင်သပတ်ဝန်သကျင်အတလင်သ၊ ကျလန်ုပ်တို့သည် အရင်သအမဌစ်မျာသစလာကို ခလဲဝေချထာသကဌောင်သ ဖော်ပဌနိုင်စေပါသည်။

ကျစ်လျစ်သေသသလယ် ကရဟုပ်ထလေသသောလုပ်ငန်သစဉ်တစ်ခုလုံသကို ပိုမိုလလယ်ကူစေသည်။.

နိဂုံသချုပ်သည်။ ဒါတလေအာသလုံသနဲ့ ဘာလုပ်ရမလဲ။
ပထမ။ Pod Security Policy က ကောင်သပါတယ်။ Kubernetes တပ်ဆင်သူမျာသ ယနေ့အချိန်အထိ ၎င်သတို့ကို အသုံသမပဌုသော်လည်သ၊ ၎င်သတို့ကို သင့်အစုအဝေသမျာသတလင် အသုံသပဌုရန် လိုအပ်နေသေသသည်။

ကလန်ရက်မူဝါဒသည် မလိုအပ်သော အင်္ဂါရပ်တစ်ခုမျဟသာ မဟုတ်ပါ။ ဒါက အစုအဖလဲ့တစ်ခုအတလက် တကယ်လိုအပ်တဲ့အရာပါ။

LimitRange/ResourceQuota - ၎င်သကို အသုံသပဌုရန် အချိန်တန်ပါပဌီ။ ဒါကို ကျလန်တော်တို့ စတင်အသုံသပဌုနေတာ ကဌာပဌီဖဌစ်ပဌီသ လူတိုင်သသုံသနေကဌတယ်ဆိုတာ သေချာနေတာ ကဌာပါပဌီ။ ဒါက ရဟာသရဟာသပါသပါသ ဖဌစ်သလာသတယ်။

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

တစ်ချို့အရာတလေက အရမ်သဝမ်သနည်သပဌီသ နာကျင်စရာကောင်သတယ်။ ဥပမာအာသဖဌင့်၊ အချို့သောအခဌေအနေမျာသတလင် Kubernetes အစုအဝေသရဟိ cubelets မျာသသည် warlocks directory ၏ အကဌောင်သအရာမျာသကို ခလင့်ပဌုချက်မရဟိဘဲ အသုံသပဌုသူတစ်ညသအာသ ပေသနိုင်ပါသည်။

ဒီမဟာ ငါမင်သကိုပဌောခဲ့သမျဟကို ဘယ်လိုမျိုသပလာသရမလဲဆိုတဲ့ ညလဟန်ကဌာသချက်တလေရဟိတယ်။ ResourceQuota နဟင့် Pod Security Policy ပုံသဏ္ဌာန်တူသည့် ထုတ်လုပ်မဟုနမူနာမျာသပါရဟိသော ဖိုင်မျာသရဟိပါသည်။ သငျသညျကအရာအာသလုံသကိုထိနိုင်ပါတယ်။

အာသလုံသကိုကျေသဇူသတင်ပါတယ်။

source: www.habr.com

မဟတ်ချက် Add