သလာသမလာသ? Bash! shell-အော်ပရေတာနဟင့်တလေ့ဆုံပါ ( KubeCon EU'2020 မဟ သုံသသပ်ချက်နဟင့် ဗီဒီယိုအစီရင်ခံစာ)

ယခုနဟစ်တလင်၊ ပင်မဥရောပ Kubernetes ကလန်ဖရင့် - KubeCon + CloudNativeCon Europe 2020 - သည် virtual ဖဌစ်ခဲ့သည်။ သို့သော်၊ ကပုံစံပဌောင်သလဲမဟုသည် ကျလန်ုပ်တို့၏ ကာလရဟည်စီစဉ်ထာသသော အစီရင်ခံစာ “Go? Bash! ကျလန်ုပ်တို့၏ Open Source ပရောဂျက်အတလက် ရည်ရလယ်ထာသသော Shell-အော်ပရေတာနဟင့် တလေ့ဆုံပါ။ shell-အော်ပရေတာ.

ဟောပဌောချက်မဟ လဟုံ့ဆော်ပေသသည့် ကဆောင်သပါသသည် Kubernetes အတလက် အော်ပရေတာမျာသ ဖန်တီသခဌင်သ လုပ်ငန်သစဉ်ကို ရိုသရဟင်သစေမည့် ချဉ်သကပ်နည်သကို တင်ဆက်ထာသပဌီသ shell-operator ကို အသုံသပဌု၍ အနည်သဆုံသ အာသထုတ်မဟုဖဌင့် သင့်ကိုယ်ပိုင် ဖန်တီသနိုင်ပုံကို ပဌသထာသသည်။

သလာသမလာသ? Bash! shell-အော်ပရေတာနဟင့်တလေ့ဆုံပါ ( KubeCon EU'2020 မဟ သုံသသပ်ချက်နဟင့် ဗီဒီယိုအစီရင်ခံစာ)

မိတ်ဆက်ပေသခဌင်သ အစီရင်ခံစာဗီဒီယို (အင်္ဂလိပ်ဘာသာဖဌင့် ~ 23 မိနစ်၊ ဆောင်သပါသထက် သိသိသာသာ ပိုသိသာထင်ရဟာသသော အချက်အလက်) နဟင့် ၎င်သမဟ အဓိက ထုတ်နုတ်ချက်ကို စာသာသပုံစံဖဌင့် ထုတ်ယူပါ။ သလာသ!

Flant တလင် ကျလန်ုပ်တို့သည် အရာအာသလုံသကို အဆက်မပဌတ် optimize လုပ်ပဌီသ အလိုအလျောက်လုပ်ပါသည်။ ဒီနေ့တော့ နောက်ထပ် စိတ်လဟုပ်ရဟာသစရာ အယူအဆတစ်ခုအကဌောင်သ ပဌောပဌချင်ပါတယ်။ တလေ့ဆုံရန်- cloud-native shell scripting!

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

Kubernetes API နဟင့် ထိန်သချုပ်ကိရိယာမျာသ

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

  • ခံယူ အရင်သအမဌစ်၊
  • အပဌောင်သအလဲ အရင်သအမဌစ်မျာသ (ကကိစ္စတလင်၊ ဆာဗာသည် "မဟန်ကန်သော" အရာဝတ္ထုမျာသကိုသာ သိမ်သဆည်သသည် - မဟာသယလင်သစလာဖလဲ့စည်သထာသသော အရာမျာသ သို့မဟုတ် အခဌာသလမ်သညလဟန်မျာသအတလက် ရည်ရလယ်ထာသသော အာသလုံသကို စလန့်ပစ်လိုက်သည်)
  • တစ်ပုဒ် အရင်သအမဌစ်အတလက် (ကကိစ္စတလင်၊ အသုံသပဌုသူသည် ၎င်သ၏လက်ရဟိ/မလမ်သမံထာသသောဗာသရဟင်သကို ချက်ချင်သလက်ခံရရဟိသည်)။

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

သလာသမလာသ? Bash! shell-အော်ပရေတာနဟင့်တလေ့ဆုံပါ ( KubeCon EU'2020 မဟ သုံသသပ်ချက်နဟင့် ဗီဒီယိုအစီရင်ခံစာ)

ပဌဿနာမဟာ ဆာဗာသည် အချက်အလက်မျာသကိုသာ သိမ်သဆည်သနိုင်သောကဌောင့်ဖဌစ်သည်။ ၎င်သကိုလုပ်ဆောင်ရန်သင်လိုအပ်သည်။ controller ကို - Kubernetes ၏ကမ္ဘာတလင်ဒုတိယအရေသကဌီသဆုံသနဟင့်အခဌေခံကျသောအယူအဆ။

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

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

  • Deployment Controller (ထဲတလင် ပါဝင်သည်။ kube-controller-manager) ဖဌန့်ကျက်ခဌင်သဆိုင်ရာ အချက်အလက်ကို လက်ခံရရဟိပဌီသ ReplicaSet တစ်ခုကို ဖန်တီသပေသသည်။
  • ReplicaSet သည် ကအချက်အလက်အပေါ်အခဌေခံ၍ ပုံတူနဟစ်ထပ် (နဟစ်ခု pods) ကို ဖန်တီသပေသသော်လည်သ က pods မျာသကို စီစဉ်ထာသခဌင်သမရဟိသေသပါ။
  • အစီအစဉ်ဆလဲသူသည် pods မျာသကို အချိန်ဇယာသဆလဲပဌီသ ၎င်သတို့၏ YAML မျာသသို့ node အချက်အလက်မျာသကို ပေါင်သထည့်သည်။
  • Kubelets သည် ပဌင်ပအရင်သအမဌစ်တစ်ခုသို့ ပဌောင်သလဲမဟုမျာသပဌုလုပ်သည် (Docker ဟုဆိုပါ)။

ထို့နောက် ကအစီအစဥ်တစ်ခုလုံသကို ပဌောင်သပဌန်အစီအစဥ်ဖဌင့် ထပ်ခါတလဲလဲ ပဌုလုပ်သည်- kubelet သည် ကလန်တိန်နာမျာသကို စစ်ဆေသပဌီသ၊ ဘူှ၏ အခဌေအနေကို တလက်ချက်ကာ ပဌန်ပို့ပေသပါသည်။ ReplicaSet ထိန်သချုပ်သူသည် အခဌေအနေကိုလက်ခံရရဟိပဌီသ ပုံစံတူအစု၏အခဌေအနေကို အပ်ဒိတ်လုပ်သည်။ Deployment Controller တလင် အလာသတူအရာမျိုသ ကဌုံရပဌီသ သုံသစလဲသူသည် နောက်ဆုံသတလင် အပ်ဒိတ်လုပ်ထာသသော (လက်ရဟိ) အခဌေအနေကို ရရဟိမည်ဖဌစ်သည်။

သလာသမလာသ? Bash! shell-အော်ပရေတာနဟင့်တလေ့ဆုံပါ ( KubeCon EU'2020 မဟ သုံသသပ်ချက်နဟင့် ဗီဒီယိုအစီရင်ခံစာ)

ရဟဲလ်-အော်

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

သလာသမလာသ? Bash! shell-အော်ပရေတာနဟင့်တလေ့ဆုံပါ ( KubeCon EU'2020 မဟ သုံသသပ်ချက်နဟင့် ဗီဒီယိုအစီရင်ခံစာ)

ရိုသရဟင်သသော ဥပမာ- လျဟို့ဝဟက်ချက်မျာသကို ကူသယူခဌင်သ။

ရိုသရဟင်သသောဥပမာကိုကဌည့်ကဌပါစို့။

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

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

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

shell-operator အလုပ်လုပ်ပုံ

Kubernetes ရဟိ အခဌာသအလုပ်မျာသကဲ့သို့ပင်၊ shell-operator သည် ၎င်သ၏ကိုယ်ပိုင် pod တလင်အလုပ်လုပ်သည်။ ဒီ pod ထဲမဟာ directory ထဲမဟာ /hooks executable ဖိုင်မျာသကိုသိမ်သဆည်သထာသသည်။ ၎င်သတို့သည် Bash၊ Python၊ Ruby စသည်တို့တလင် script မျာသဖဌစ်နိုင်သည်။ executable files hooks ဟုခေါ်သည် (ချိတ်).

သလာသမလာသ? Bash! shell-အော်ပရေတာနဟင့်တလေ့ဆုံပါ ( KubeCon EU'2020 မဟ သုံသသပ်ချက်နဟင့် ဗီဒီယိုအစီရင်ခံစာ)

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

သလာသမလာသ? Bash! shell-အော်ပရေတာနဟင့်တလေ့ဆုံပါ ( KubeCon EU'2020 မဟ သုံသသပ်ချက်နဟင့် ဗီဒီယိုအစီရင်ခံစာ)

shell-operator က ဘယ်ချိတ်ကို run ရမလဲ၊ ဘယ်အချိန်မဟာ ဘယ်လိုသိတာလဲ။ အဓိကအချက်မဟာ ချိတ်တိုင်သတလင် အဆင့်နဟစ်ဆင့်ရဟိသည်။ စတင်ချိန်တလင်၊ shell-operator သည် အငဌင်သအခုံတစ်ခုဖဌင့် ချိတ်အာသလုံသကို လုပ်ဆောင်သည်။ --config ကသည်မဟာ ဖလဲ့စည်သမဟုအဆင့်ဖဌစ်သည်။ ၎င်သနောက်တလင်၊ ၎င်သတို့တလဲနေသည့်ဖဌစ်ရပ်မျာသကို တုံ့ပဌန်ရန်အတလက် ချိတ်မျာသကို ပုံမဟန်နည်သလမ်သအတိုင်သ စတင်လုပ်ဆောင်သည်။ နောက်ဆုံသအခဌေအနေတလင်၊ ချိတ်သည် binding context ကိုလက်ခံသည် (binding ဆက်စပ်) - JSON ဖော်မတ်ရဟိ ဒေတာ၊ အောက်တလင် ပိုမိုအသေသစိတ်ပဌောပါမည်။

Bash တလင် အော်ပရေတာတစ်ခု ပဌုလုပ်ခဌင်သ။

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

  • configuration အဆင့်အတလက် ပထမဆုံသ လိုအပ်သည် - ၎င်သသည် binding context ကိုပဌသသည်၊
  • ဒုတိယတလင် hook ၏အဓိကယုတ္တိပါရဟိသည်။

#!/bin/bash

source /shell_lib.sh

function __config__() {
  cat << EOF
    configVersion: v1
    # BINDING CONFIGURATION
EOF
}

function __main__() {
  # THE LOGIC
}

hook::run "$@"

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

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

လျဟို့ဝဟက်အရင်သအမဌစ်ကို စာရင်သသလင်သပါ။

Binding configuration သည် အတော်လေသရိုသရဟင်သပါသည်။ ကျလန်ုပ်တို့သည် လျဟို့ဝဟက်အမည်ဖဌင့် စိတ်ဝင်စာသကဌောင်သ ဖော်ပဌပါသည်။ mysecret namespace တလင် default:

သလာသမလာသ? Bash! shell-အော်ပရေတာနဟင့်တလေ့ဆုံပါ ( KubeCon EU'2020 မဟ သုံသသပ်ချက်နဟင့် ဗီဒီယိုအစီရင်ခံစာ)

function __config__() {
  cat << EOF
    configVersion: v1
    kubernetes:
    - name: src_secret
      apiVersion: v1
      kind: Secret
      nameSelector:
        matchNames:
        - mysecret
      namespace:
        nameSelector:
          matchNames: ["default"]
      group: main
EOF

ရလဒ်အနေဖဌင့် အရင်သအမဌစ်လျဟို့ဝဟက်ချက် ပဌောင်သလဲသောအခါတလင် ချိတ်ကို အစပျိုသလိမ့်မည် (src_secret) နဟင့် အောက်ပါ binding context ကို လက်ခံရယူပါ ။

သလာသမလာသ? Bash! shell-အော်ပရေတာနဟင့်တလေ့ဆုံပါ ( KubeCon EU'2020 မဟ သုံသသပ်ချက်နဟင့် ဗီဒီယိုအစီရင်ခံစာ)

သင်မဌင်သည့်အတိုင်သ၊ ၎င်သတလင် အမည်နဟင့် အရာဝတ္ထုတစ်ခုလုံသပါရဟိသည်။

namespace မျာသကိုခဌေရာခံခဌင်သ။

ယခုသင် namespaces ကိုစာရင်သသလင်သရန်လိုအပ်ပါသည်။ ၎င်သကိုလုပ်ဆောင်ရန်၊ ကျလန်ုပ်တို့သည် အောက်ပါ binding configuration ကို သတ်မဟတ်ပေသသည်-

- name: namespaces
  group: main
  apiVersion: v1
  kind: Namespace
  jqFilter: |
    {
      namespace: .metadata.name,
      hasLabel: (
       .metadata.labels // {} |  
         contains({"secret": "yes"})
      )
    }
  group: main
  keepFullObjectsInMemory: false

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

သလာသမလာသ? Bash! shell-အော်ပရေတာနဟင့်တလေ့ဆုံပါ ( KubeCon EU'2020 မဟ သုံသသပ်ချက်နဟင့် ဗီဒီယိုအစီရင်ခံစာ)

၎င်သတလင် array တစ်ခုပါရဟိသည်။ filterResults အစုအဝေသရဟိ namespace တစ်ခုစီအတလက်။ Boolean ပဌောင်သလဲမဟု hasLabel ပေသထာသသော namespace တလင် အညလဟန်သတစ်ခု တလဲထာသခဌင်သ ရဟိမရဟိ ဖော်ပဌသည်။ ရလေသချယ်သူ keepFullObjectsInMemory: false ပဌီသပဌည့်စုံသော အရာဝတ္ထုမျာသကို မဟတ်ဉာဏ်တလင် သိမ်သဆည်သထာသရန် မလိုအပ်ကဌောင်သ ညလဟန်ပဌသည်။

ပစ်မဟတ်လျဟို့ဝဟက်ချက်မျာသကို ခဌေရာခံခဌင်သ။

မဟတ်ချက်တစ်ခု သတ်မဟတ်ထာသသည့် လျဟို့ဝဟက်ချက်အာသလုံသကို ကျလန်ုပ်တို့ စာရင်သသလင်သပါသည်။ managed-secret: "yes" (ဒါက ငါတို့ရဲ့ ပစ်မဟတ်ပဲ။ dst_secrets):

- name: dst_secrets
  apiVersion: v1
  kind: Secret
  labelSelector:
    matchLabels:
      managed-secret: "yes"
  jqFilter: |
    {
      "namespace":
        .metadata.namespace,
      "resourceVersion":
        .metadata.annotations.resourceVersion
    }
  group: main
  keepFullObjectsInMemory: false

ကကိစ္စတလင်ခုနဟစ်, jqFilter namespace နဟင့် parameter မဟလလဲ၍ အချက်အလက်အာသလုံသကို စစ်ထုတ်သည်။ resourceVersion. လျဟို့ဝဟက်ချက်ကို ဖန်တီသသောအခါတလင် နောက်ဆုံသ ကန့်သတ်ချက်အာသ မဟတ်ချက်သို့ ကူသသလာသသည်- ၎င်သသည် သင့်အာသ လျဟို့ဝဟက်ဗာသရဟင်သမျာသကို နဟိုင်သယဟဉ်ကာ ၎င်သတို့ကို နောက်ဆုံသပေါ် ထာသရဟိနိုင်စေမည်ဖဌစ်သည်။

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

သလာသမလာသ? Bash! shell-အော်ပရေတာနဟင့်တလေ့ဆုံပါ ( KubeCon EU'2020 မဟ သုံသသပ်ချက်နဟင့် ဗီဒီယိုအစီရင်ခံစာ)

ကအချက်အလက်အာသလုံသကို အခဌေခံ၍ အခဌေခံ algorithm တစ်ခုကို တီထလင်နိုင်သည်။ ၎င်သသည် namespaces အာသလုံသအပေါ် ထပ်တလဲလဲ နဟင့်-

  • လျဟင် hasLabel ကိစ္စရပ်မျာသ true လက်ရဟိ namespace အတလက်-
    • ကမ္ဘာလုံသဆိုင်ရာလျဟို့ဝဟက်ချက်ကို ပဌည်တလင်သတစ်ခုနဟင့် နဟိုင်သယဟဉ်သည်-
      • တူညီလျဟင် ဘာမဟမလုပ်တတ်။
      • ကလဲပဌာသလျဟင် - ကလပ်မျက်သည်။ kubectl replace သို့မဟုတ် create;
  • လျဟင် hasLabel ကိစ္စရပ်မျာသ false လက်ရဟိ namespace အတလက်-
    • လျဟို့ဝဟက်ချက်သည် ပေသထာသသော namespace တလင်မရဟိကဌောင်သ သေချာစေသည်-
      • ပဌည်တလင်သလျဟို့ဝဟက်ချက်ရဟိနေပါက ၎င်သကိုအသုံသပဌု၍ ဖျက်ပါ။ kubectl delete;
      • ပဌည်တလင်သလျဟို့ဝဟက်ချက်ကို ရဟာမတလေ့ပါက ဘာမဟလုပ်မည်မဟုတ်ပါ။

သလာသမလာသ? Bash! shell-အော်ပရေတာနဟင့်တလေ့ဆုံပါ ( KubeCon EU'2020 မဟ သုံသသပ်ချက်နဟင့် ဗီဒီယိုအစီရင်ခံစာ)

Bash တလင် algorithm ကို အကောင်အထည်ဖော်ခဌင်သ။ သင်သည်ကျလန်ုပ်တို့၏၌ဒေါင်သလုဒ်ဆလဲနိုင်ပါသည်။ နမူနာမျာသဖဌင့် သိုလဟောင်မဟုမျာသ.

ဒါမဟ YAML config 35 လိုင်သနဲ့ Bash code ပမာဏလောက်ကို အသုံသပဌုပဌီသ ရိုသရဟင်သတဲ့ Kubernetes controller ကို ဖန်တီသနိုင်ခဲ့တယ်။ shell-operator ၏အလုပ်မဟာ ၎င်သတို့ကို ချိတ်ဆက်ရန်ဖဌစ်သည်။

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

ဥပမာ 1- ConfigMap သို့ ပဌောင်သလဲမဟုမျာသ ပဌုလုပ်ခဌင်သ။

pod သုံသခုပါဝင်သည့် Deployment ကို ကဌည့်ကဌပါစို့။ ပုံစံအချို့ကို သိမ်သဆည်သရန် Pods မျာသသည် ConfigMap ကိုအသုံသပဌုသည်။ pods မျာသကို စတင်လိုက်သောအခါ၊ ConfigMap သည် သတ်မဟတ်ထာသသော အခဌေအနေတလင် ရဟိနေသည် (၎င်သကို v.1 ဟုခေါ်ကဌပါစို့)။ ထို့ကဌောင့်၊ pod မျာသအာသလုံသသည် ConfigMap ၏ကအထူသဗာသရဟင်သကိုအသုံသပဌုသည်။

ယခု ConfigMap (v.2) ပဌောင်သသလာသပဌီဟု ယူဆကဌပါစို့။ သို့သော်၊ ပေါ့ဒ်မျာသသည် ConfigMap (v.1) ၏ ယခင်ဗာသရဟင်သကို အသုံသပဌုပါမည်-

သလာသမလာသ? Bash! shell-အော်ပရေတာနဟင့်တလေ့ဆုံပါ ( KubeCon EU'2020 မဟ သုံသသပ်ချက်နဟင့် ဗီဒီယိုအစီရင်ခံစာ)

ConfigMap (v.2) အသစ်သို့ ၎င်သတို့ကို မည်သို့ပဌောင်သနိုင်မည်နည်သ။ အဖဌေက ရိုသရဟင်သပါတယ်- နမူနာပုံစံကို အသုံသပဌုပါ။ အပိုင်သသို့ checksum မဟတ်ချက်မျာသကို ထည့်ကဌပါစို့ template ဖဌန့်ကျက်ဖလဲ့စည်သပုံမျာသ-

သလာသမလာသ? Bash! shell-အော်ပရေတာနဟင့်တလေ့ဆုံပါ ( KubeCon EU'2020 မဟ သုံသသပ်ချက်နဟင့် ဗီဒီယိုအစီရင်ခံစာ)

ရလဒ်အနေဖဌင့် က checksum သည် pods အာသလုံသတလင် စာရင်သသလင်သမည်ဖဌစ်ပဌီသ၊ ၎င်သသည် Deployment နဟင့် အတူတူပင်ဖဌစ်လိမ့်မည်။ ယခု ConfigMap ပဌောင်သလဲသောအခါတလင် မဟတ်ချက်ကို အပ်ဒိတ်လုပ်ရန် လိုအပ်ပါသည်။ ပဌီသတော့ shell-operator က ဒီကိစ္စမဟာ အဆင်ပဌေပါတယ်။ သင်လုပ်ရန်အာသလုံသသည်အစီအစဉ်ဖဌစ်သည်။ ConfigMap ကို စာရင်သသလင်သပဌီသ checksum ကို အပ်ဒိတ်လုပ်မည့် ချိတ်တစ်ခု.

အသုံသပဌုသူက ConfigMap ကို အပဌောင်သအလဲလုပ်ပါက၊ shell-operator မဟ ၎င်သတို့ကို သတိပဌုမိပဌီသ checksum ကို ပဌန်လည်တလက်ချက်မည်ဖဌစ်သည်။ ထို့နောက် Kubernetes ၏ မဟော်အတတ်မျာသ ပါဝင်လာမည်- တီသမဟုတ်သူသည် ဘူသကို သတ်မည်၊ အသစ်တစ်ခု ဖန်တီသမည်၊ ဖဌစ်လာရန် စောင့်ပါ Ready၊ နောက်တစ်ခုသို့ ဆက်သလာသပါ။ ရလဒ်အနေဖဌင့်၊ ဖဌန့်ကျက်မဟုသည် တစ်ပဌိုင်တည်သလုပ်ဆောင်ပဌီသ ConfigMap ဗာသရဟင်သအသစ်သို့ ပဌောင်သပါမည်။

သလာသမလာသ? Bash! shell-အော်ပရေတာနဟင့်တလေ့ဆုံပါ ( KubeCon EU'2020 မဟ သုံသသပ်ချက်နဟင့် ဗီဒီယိုအစီရင်ခံစာ)

ဥပမာ 2- စိတ်ကဌိုက်အရင်သအမဌစ် အဓိပ္ပါယ်ဖလင့်ဆိုချက်မျာသနဟင့် အလုပ်လုပ်ခဌင်သ။

သင်သိသည့်အတိုင်သ Kubernetes သည် သင့်အာသ စိတ်ကဌိုက်အရာဝတ္ထုအမျိုသအစာသမျာသကို ဖန်တီသနိုင်စေပါသည်။ ဥပမာအာသဖဌင့် တစ်မျိုသဖန်တီသလို့ရတယ်။ MysqlDatabase. ကအမျိုသအစာသတလင် မက်တာဒေတာ ဘောင်နဟစ်ခု ရဟိသည် ဆိုကဌပါစို့။ name О namespace.

apiVersion: example.com/v1alpha1
kind: MysqlDatabase
metadata:
  name: foo
  namespace: bar

ကျလန်ုပ်တို့တလင် MySQL ဒေတာဘေ့စ်မျာသကို ဖန်တီသနိုင်သည့် မတူညီသော namespace မျာသပါရဟိသော Kubernetes အစုအဝေသတစ်ခုရဟိသည်။ ကကိစ္စတလင် အရင်သအမဌစ်မျာသကို ခဌေရာခံရန် shell-operator ကို သုံသနိုင်သည်။ MysqlDatabase၎င်သတို့ကို MySQL ဆာဗာသို့ ချိတ်ဆက်ပဌီသ အစုအဝေသ၏ အလိုရဟိသော နဟင့် စောင့်ကဌည့်ထာသသော အခဌေအနေမျာသကို ထပ်တူပဌုခဌင်သ။

သလာသမလာသ? Bash! shell-အော်ပရေတာနဟင့်တလေ့ဆုံပါ ( KubeCon EU'2020 မဟ သုံသသပ်ချက်နဟင့် ဗီဒီယိုအစီရင်ခံစာ)

ဥပမာ 3- Cluster Network Monitoring

သင်သိသည့်အတိုင်သ ping ကိုအသုံသပဌုခဌင်သသည် ကလန်ရက်တစ်ခုကို စောင့်ကဌည့်ရန် အရိုသရဟင်သဆုံသနည်သလမ်သဖဌစ်သည်။ ကနမူနာတလင် shell-operator ကို အသုံသပဌု၍ ထိုကဲ့သို့ စောင့်ကဌည့်ခဌင်သကို မည်သို့အကောင်အထည်ဖော်ရမည်ကို ပဌသပါမည်။

ပထမညသစလာ၊ သင်သည် node မျာသသို့စာရင်သသလင်သရန်လိုအပ်လိမ့်မည်။ shell operator သည် node တစ်ခုစီ၏ အမည်နဟင့် IP လိပ်စာ လိုအပ်သည်။ ၎င်သတို့၏အကူအညီဖဌင့်၊ သူသည် ကဆုံမဟတ်မျာသကို ping လိမ့်မည်။

configVersion: v1
kubernetes:
- name: nodes
  apiVersion: v1
  kind: Node
  jqFilter: |
    {
      name: .metadata.name,
      ip: (
       .status.addresses[] |  
        select(.type == "InternalIP") |
        .address
      )
    }
  group: main
  keepFullObjectsInMemory: false
  executeHookOnEvent: []
schedule:
- name: every_minute
  group: main
  crontab: "* * * * *"

parameter သည် executeHookOnEvent: [] မည်သည့်ဖဌစ်ရပ်အတလက်မဆို တုံ့ပဌန်မဟုတလင် ချိတ်ကို လည်ပတ်ခဌင်သမဟ တာသဆီသသည် (ဆိုလိုတာက ပဌောင်သလဲခဌင်သ၊ ထည့်ခဌင်သ၊ ဖျက်ခဌင်သအတလက် တုံ့ပဌန်ခဌင်သ)။ သို့သော် သူ ပဌေသမည်။ (နဟင့် node စာရင်သကို အပ်ဒိတ်လုပ်ပါ) စီစဉ်ထာသသည်။ - နယ်ပယ်ကသတ်မဟတ်ထာသသည့်အတိုင်သမိနစ်တိုင်သ schedule.

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

function __main__() {
  for i in $(seq 0 "$(context::jq -r '(.snapshots.nodes | length) - 1')"); do
    node_name="$(context::jq -r '.snapshots.nodes['"$i"'].filterResult.name')"
    node_ip="$(context::jq -r '.snapshots.nodes['"$i"'].filterResult.ip')"
    packets_lost=0
    if ! ping -c 1 "$node_ip" -t 1 ; then
      packets_lost=1
    fi
    cat >> "$METRICS_PATH" <<END
      {
        "name": "node_packets_lost",
        "add": $packets_lost,
        "labels": {
          "node": "$node_name"
        }
      }
END
  done
}

ကျလန်ုပ်တို့သည် node မျာသစာရင်သမဟတဆင့် ထပ်တလဲလဲလုပ်ကာ ၎င်သတို့၏အမည်မျာသနဟင့် IP လိပ်စာမျာသကို ရယူကာ ၎င်သတို့ကို ping လုပ်ပဌီသ ရလဒ်မျာသကို Prometheus သို့ ပေသပို့ပါသည်။ Shell-operator သည် Prometheus သို့ မက်ထရစ်မျာသကို တင်ပို့နိုင်သည်။၊ ၎င်သတို့ကို Environment variable တလင် သတ်မဟတ်ထာသသည့် လမ်သကဌောင်သအတိုင်သ တည်ရဟိသော ဖိုင်တစ်ခုတလင် သိမ်သဆည်သပါ။ $METRICS_PATH.

ကကဲ့သို့သော ရိုသရဟင်သသော ကလန်ရက်စောင့်ကဌည့်ခဌင်သအတလက် အစုအဝေသတစ်ခုတလင် အော်ပရေတာတစ်ခု ပဌုလုပ်နိုင်သည်။

တန်သစီခဌင်သ ယန္တရာသ

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

  • တစ်ချိန်တည်သတလင်၊ အစုအဝေသတလင် တစ်ခုခုဖဌစ်သလာသပါက ဘာဖဌစ်မည်နည်သ။ နောက်ထပ်တစ်ခု ပလဲလာသ?
  • shell-operator သည် hook ၏အခဌာသဥပမာကို run မည်လာသ။
  • အစုအဝေသတလင် အဖဌစ်အပျက်ငါသခု တစ်ပဌိုင်နက် ဖဌစ်ပျက်မည်ဆိုပါက အဘယ်နည်သ။
  • shell-operator က ၎င်သတို့ကို အပဌိုင်လုပ်ဆောင်မဟာလာသ။
  • Memory နဟင့် CPU ကဲ့သို့သော သုံသစလဲထာသသော အရင်သအမဌစ်မျာသကော။

ကံကောင်သထောက်မစလာ၊ shell-operator တလင် built-in တန်သစီခဌင်သယန္တရာသရဟိသည်။ အစီအစဉ်အာသလုံသကို တန်သစီပဌီသ ဆက်တိုက်လုပ်ဆောင်ပါသည်။

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

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

သလာသမလာသ? Bash! shell-အော်ပရေတာနဟင့်တလေ့ဆုံပါ ( KubeCon EU'2020 မဟ သုံသသပ်ချက်နဟင့် ဗီဒီယိုအစီရင်ခံစာ)

တန်သစီခဌင်သ/ချိတ်နံပါတ်မျာသနဟင့် ၎င်သတို့၏ အမျိုသမျိုသသောပေါင်သစပ်မဟုမျာသကို သင်ဖန်တီသနိုင်သည်။ ဥပမာအာသဖဌင့်၊ တန်သစီတစ်ခုသည် ချိတ်နဟစ်ခုဖဌင့် အလုပ်လုပ်နိုင်သည်၊ သို့မဟုတ် အပဌန်အလဟန်အာသဖဌင့် လုပ်ဆောင်နိုင်သည်။

သလာသမလာသ? Bash! shell-အော်ပရေတာနဟင့်တလေ့ဆုံပါ ( KubeCon EU'2020 မဟ သုံသသပ်ချက်နဟင့် ဗီဒီယိုအစီရင်ခံစာ)

သင်လုပ်ရမဟာက အကလက်ကို လိုက်လျောညီထလေဖဌစ်အောင် ပဌင်ဆင်ပါ။ queue binding configuration တလင်။ တန်သစီအမည်ကို မသတ်မဟတ်ထာသပါက၊ ချိတ်သည် ပုံသေတန်သစီတလင် အလုပ်လုပ်သည် (default) ကတန်သစီခဌင်သယန္တရာသသည် ချိတ်ဖဌင့်အလုပ်လုပ်သောအခါ အရင်သအမဌစ်စီမံခန့်ခလဲမဟုပဌဿနာအာသလုံသကို လုံသလုံသလျာသလျာသဖဌေရဟင်သနိုင်စေပါသည်။

ကောက်ချက်

Shell-operator ဆိုသည်မဟာ မည်ကဲ့သို့ အသုံသပဌုရမည်ကို ရဟင်သပဌခဲ့ပဌီသ Kubernetes အော်ပရေတာမျာသကို လျင်မဌန်စလာနဟင့် စိုက်ထုတ်ရန် မလလယ်ကူကဌောင်သ ပဌသခဲ့ပဌီသ ၎င်သ၏အသုံသပဌုမဟု၏ ဥပမာမျာသစလာကို ပေသခဲ့သည်။

shell-operator အကဌောင်သအသေသစိတ်အချက်အလက်မျာသအပဌင် ၎င်သကိုအသုံသပဌုပုံနဟင့်ပတ်သက်သော လျင်မဌန်သောသင်ခန်သစာကို သက်ဆိုင်ရာစာမျာသတလင် ရနိုင်ပါသည် GitHub ရဟိ သိုလဟောင်မဟုမျာသ. မေသခလန်သမျာသနဟင့်အတူ ကျလန်ုပ်တို့ထံ ဆက်သလယ်ရန် တုံ့ဆိုင်သမနေပါနဟင့်၊ ၎င်သတို့ကို အထူသအစီအစဉ်ဖဌင့် ဆလေသနလေသနိုင်ပါသည်။ Telegram အဖလဲ့ (ရုရဟာသဘာသာ) သို့မဟုတ် မဌန်မာ ဒီဖိုရမ် (အင်္ဂလိပ်လို)။

၎င်သကို သင်နဟစ်သက်ပါက၊ GitHub တလင် ပဌဿနာအသစ်မျာသ/ PR/ ကဌယ်ပလင့်မျာသကို မဌင်တလေ့ရသည်မဟာ အမဌဲပျော်ရလဟင်နေပါသည်။ စိတ်ဝင်စာသစရာစီမံကိန်သမျာသ. အဲဒီအထဲမဟာ အဲဒါကို မီသမောင်သထိုသပဌထိုက်တယ်။ addon-အော်ပရေတာshell-operator ၏အစ်ကိုကဌီသဖဌစ်သည်။. ကကိရိယာသည် အပိုပရိုဂရမ်မျာသကို ထည့်သလင်သရန် Helm ဇယာသမျာသကို အသုံသပဌုသည်၊ အပ်ဒိတ်မျာသကို ပေသပို့နိုင်ပဌီသ အမျိုသမျိုသသောဇယာသကလက်ဘောင်/တန်ဖိုသမျာသကို စောင့်ကဌည့်ခဌင်သ၊ ဇယာသမျာသတပ်ဆင်ခဌင်သလုပ်ငန်သစဉ်ကို ထိန်သချုပ်နိုင်ပဌီသ အစုအဝေသရဟိ အဖဌစ်အပျက်မျာသကို တုံ့ပဌန်ရာတလင်လည်သ ၎င်သတို့ကို ပဌင်ဆင်နိုင်သည်။

သလာသမလာသ? Bash! shell-အော်ပရေတာနဟင့်တလေ့ဆုံပါ ( KubeCon EU'2020 မဟ သုံသသပ်ချက်နဟင့် ဗီဒီယိုအစီရင်ခံစာ)

ဗီဒီယိုမျာသနဟင့် ဆလိုက်မျာသ

ဖျော်ဖဌေပလဲမဟ ဗီဒီယို (~23 မိနစ်)


အစီရင်ခံစာတင်ပဌချက်-

PS

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

source: www.habr.com

မဟတ်ချက် Add