ဧပြီ ၈ ရက် ဆွေးနွေးပွဲ
အစဉ်အလာအားဖြင့် တင်ဆက်ရတာ ကျေနပ်ပါတယ်။
K8s တွင် Core နှင့် ထပ်တိုးမှုများ
Kubernetes သည် ကာလကြာရှည်တည်မြဲခဲ့သော စီမံခန့်ခွဲရေးဆိုင်ရာ လုပ်ငန်းနှင့် ချဉ်းကပ်မှုများကို ပြောင်းလဲနေသည်-
- သူ့ကိုကျေးဇူးတင်ပါတယ် abstractionsconfig တစ်ခုသတ်မှတ်ခြင်း သို့မဟုတ် command တစ်ခုလုပ်ဆောင်ခြင်း (Chef၊ Ansible...) ကဲ့သို့သော သဘောတရားများဖြင့် ကျွန်ုပ်တို့ လုပ်ဆောင်ခြင်းမပြုတော့ဘဲ ကွန်တိန်နာများ၊ ဝန်ဆောင်မှုများ စသည်ဖြင့် အုပ်စုဖွဲ့ခြင်းကို အသုံးပြုပါ။
- ကျွန်ုပ်တို့သည် အက်ပလီကေးရှင်းများ၏ ကွာခြားချက်များကို မစဉ်းစားဘဲ ပြင်ဆင်နိုင်သည်။ သီးခြားဆိုက်စတင်မည့်ရက်- သတ္တုအလွတ်၊ ပံ့ပိုးပေးသူ တစ်ဦး၏ တိမ်တိုက် စသည်တို့။
- K8s ဖြင့် သင်ဘယ်တော့မှ ပိုသုံးနိုင်တော့မည်မဟုတ်ပါ။ အကောင်းဆုံးအလေ့အကျင့်များ အခြေခံအဆောက်အဦများ စုစည်းခြင်း- အတိုင်းအတာ နည်းစနစ်များ၊ မိမိကိုယ်ကို ကုစားခြင်း၊ အမှားခံနိုင်ရည်ရှိခြင်း စသည်
သို့သော်၊ အရာအားလုံးသည် ဤမျှချောမွေ့သည်မဟုတ်ပေ- Kubernetes သည်လည်း ၎င်း၏ကိုယ်ပိုင်စိန်ခေါ်မှုအသစ်များကို ယူဆောင်လာခဲ့သည်။
Kubernetes မဟုတ် သုံးစွဲသူအားလုံး၏ ပြဿနာအားလုံးကို ဖြေရှင်းပေးသည့် ပေါင်းစပ်တစ်ခုဖြစ်သည်။ အဓိက Kubernetes တွင်ပါရှိသော အနိမ့်ဆုံးလိုအပ်သောလုပ်ဆောင်ချက်အစုံအတွက်သာ တာဝန်ရှိပါသည်။ အသီးအသီး အစုအဖွဲ့-
Kubernetes core သည် ကွန်တိန်နာများကို အုပ်စုဖွဲ့ခြင်း၊ အသွားအလာ စီမံခန့်ခွဲခြင်း အစရှိသည်တို့အတွက် အခြေခံမူလတန်းများကို သတ်မှတ်ပေးပါသည်။ သူတို့အကြောင်း အသေးစိတ်ကို ကျနော်တို့ ဆွေးနွေးခဲ့ပါတယ်။
အခြားတစ်ဖက်တွင်၊ K8s သည် အခြားသူများကို ပိတ်ရန် ကူညီပေးသည့် ရရှိနိုင်သော လုပ်ဆောင်ချက်များကို ချဲ့ထွင်ရန် အခွင့်အလမ်းကောင်းများကို ပေးပါသည်။ အတိအကျ - အသုံးပြုသူလိုအပ်ချက်။ Kubernetes တွင် ထပ်လောင်းမှုများသည် ၎င်းတို့၏အစုအဝေး “မှန်ကန်သောပုံစံ” [၎င်းတို့၏ သီးခြားပြဿနာများကိုဖြေရှင်းရန်] လိုအပ်သည့်အရာအားလုံးကို ထည့်သွင်းပြီး စီစဉ်သတ်မှတ်ပေးရမည့် အစုအဝေးစီမံခန့်ခွဲသူများ၏ တာဝန်ဖြစ်သည်။ ဒါတွေက ဘယ်လိုမျိုး ထပ်ထည့်ထားလဲ။ ဥပမာအချို့ကို ကြည့်ကြပါစို့။
အပိုပရိုဂရမ်များ ဥပမာများ
Kubernetes ကို ထည့်သွင်းပြီးသည်နှင့်၊ node တစ်ခုအတွင်းနှင့် node များကြားတွင် pods များ အပြန်အလှန်ဆက်သွယ်မှုအတွက် အလွန်လိုအပ်သော ကွန်ရက်ချိတ်ဆက်မှုသည် ၎င်း၏ကိုယ်ပိုင်အလုပ်မဟုတ်သည့်အတွက် ကျွန်ုပ်တို့ အံ့အားသင့်သွားနိုင်ပါသည်။ Kubernetes kernel သည် လိုအပ်သောချိတ်ဆက်မှုများကို အာမမခံနိုင်ပါ၊ ၎င်းအစား ၎င်းသည် ကွန်ရက်ကို ဆုံးဖြတ်ပေးပါသည်။ အင်တာဖေ့စ (
အနီးစပ်ဆုံး ဥပမာတစ်ခုသည် ဒေတာသိုလှောင်မှုဖြေရှင်းချက် (ဒေသခံဒစ်၊ ကွန်ရက်ပိတ်ဆို့သည့်ကိရိယာ၊ Ceph...)။ အစကတော့ အူတိုင်မှာရှိခဲ့ပေမယ့် ထွန်းကားခဲ့ပါတယ်။
အခြားဥပမာများပါဝင်သည်-
- Ingress- ထိန်းချုပ်ကိရိယာများ (သူတို့ရဲ့ သုံးသပ်ချက်ကို ကြည့်ပါ။
ကျွန်ုပ်တို့၏မကြာသေးမီကဆောင်းပါး ). -
လက်မှတ်မန်နေဂျာ : -
အော်ပရေတာ သည် အပိုပရိုဂရမ်များ (ဖော်ပြထားသော လက်မှတ်မန်နေဂျာ ပါ၀င်သည်)၊ ၎င်းတို့သည် primitive(များ) နှင့် controller(များ) ကို သတ်မှတ်ပါသည်။ ၎င်းတို့၏အလုပ်၏ ယုတ္တိဗေဒသည် ကျွန်ုပ်တို့၏စိတ်ကူးစိတ်သန်းဖြင့်သာ ကန့်သတ်ထားပြီး အဆင်သင့်လုပ်ထားသော အခြေခံအဆောက်အအုံအစိတ်အပိုင်းများ (ဥပမာ၊ DBMS) ကို ရှေးရိုးပုံစံများအဖြစ်သို့ ပြောင်းလဲနိုင်စေကာ (ကွန်တိန်နာအစုံလိုက်နှင့် ၎င်းတို့၏ဆက်တင်များထက်) နှင့်လုပ်ဆောင်ရန် ပိုမိုလွယ်ကူသော ရှေးရိုးပုံစံများအဖြစ်သို့ ပြောင်းလဲနိုင်စေပါသည်။ အော်ပရေတာ အများအပြားကို ရေးသားထားပြီး - ၎င်းတို့ထဲမှ အများအပြားသည် ထုတ်လုပ်ရန်အတွက် အဆင်သင့်မဖြစ်သေးသော်လည်း၊ အချိန်တစ်ခုသာဖြစ်သည်။ - မက်ထရစ်များ - Kubernetes သည် အင်တာဖေ့စ် (Metrics API) ကို အကောင်အထည်ဖော်မှုမှ (Prometheus adapter၊ Datadog အစုလိုက်အပြုံလိုက် အေးဂျင့်ကဲ့သို့ ပြင်ပမှ အပိုပရိုဂရမ်များ) မှ ပိုင်းခြားပုံဥပမာ။
- အတွက် စောင့်ကြည့်ခြင်းနှင့် စာရင်းအင်းများလက်တွေ့တွင်သာ မလိုအပ်ပါ။
Prometheus နှင့် Grafana ဒါပေမယ့် kube-state-metrics၊ node-exporter စသဖြင့်
နောက်ပြီး ဒါက ထပ်တိုးစာရင်း အပြည့်အစုံတော့ မဟုတ်ပါဘူး... ဥပမာအားဖြင့်၊ ကျွန်ုပ်တို့ လက်ရှိတပ်ဆင်နေတဲ့ Flant ကုမ္ပဏီမှာ 29 အပိုပရိုဂရမ်များ (စုစုပေါင်း 249 Kubernetes အရာဝတ္ထုအားလုံးကို ဖန်တီးသည်)။ ရိုးရိုးရှင်းရှင်းပြောရလျှင် ပေါင်းထည့်ခြင်းမရှိဘဲ အစုအဖွဲ့တစ်ခု၏ဘဝကို ကျွန်ုပ်တို့မမြင်နိုင်ပါ။
အလိုအလျောက်
အော်ပရေတာများသည် ကျွန်ုပ်တို့နေ့စဥ်ကြုံတွေ့နေရသော ပုံမှန်လုပ်ငန်းဆောင်တာများကို အလိုအလျောက်လုပ်ဆောင်ရန် ဒီဇိုင်းထုတ်ထားပါသည်။ ဤတွင် အော်ပရေတာတစ်ခုရေးသားခြင်းသည် အကောင်းဆုံးဖြေရှင်းချက်ဖြစ်မည့် လက်တွေ့ဘဝဥပမာများဖြစ်သည်။
- အပလီကေးရှင်းအတွက် ရုပ်ပုံများပါသည့် သီးသန့် (ဆိုလိုသည်မှာ အကောင့်ဝင်ရန် လိုအပ်သည်) မှတ်ပုံတင်တစ်ခု ရှိသည်။ pod တစ်ခုချင်းစီသည် registry တွင် စစ်မှန်ကြောင်းအထောက်အထားပြနိုင်စေမည့် အထူးလျှို့ဝှက်ချက်တစ်ခု ပေးထားသည်ဟု ယူဆပါသည်။ ကျွန်ုပ်တို့၏တာဝန်မှာ ဤလျှို့ဝှက်ချက်ကို namespace တွင်တွေ့ရှိကြောင်းသေချာစေရန်မှာ pods များသည် ပုံများကိုဒေါင်းလုဒ်လုပ်နိုင်ရန်ဖြစ်သည်။ အပလီကေးရှင်းများစွာရှိနိုင်သည် (တစ်ခုစီသည်လျှို့ဝှက်ချက်တစ်ခုလိုအပ်သည်)၊ ၎င်းသည်လျှို့ဝှက်ချက်များကိုသူတို့ကိုယ်သူတို့ပုံမှန်မွမ်းမံရန်အသုံးဝင်သည်၊ ထို့ကြောင့်လျှို့ဝှက်ချက်များကိုလက်ဖြင့်တင်ရန်ရွေးချယ်မှုကိုဖယ်ရှားပစ်သည်။ ဤနေရာတွင် အော်ပရေတာသည် ကယ်ဆယ်ရန် ရောက်ရှိလာသည်- ကျွန်ုပ်တို့သည် namespace ပေါ်လာရန် စောင့်ဆိုင်းမည့် ထိန်းချုပ်ကိရိယာကို ဖန်တီးပြီး ဤဖြစ်ရပ်အပေါ် အခြေခံ၍ namespace တွင် လျှို့ဝှက်ချက်ကို ပေါင်းထည့်မည်ဖြစ်သည်။
- pods များမှ အင်တာနက်သို့ ပုံမှန်ဝင်ရောက်ခွင့်ကို တားမြစ်ထားသည်။ သို့သော် တစ်ခါတစ်ရံတွင် လိုအပ်နိုင်သည်- ဥပမာ၊ namespace တွင် အညွှန်းတစ်ခုရှိနေခြင်းကြောင့် တိကျသောကျွမ်းကျင်မှုများမလိုအပ်ဘဲ ရိုးရှင်းစွာအလုပ်လုပ်ရန် ခွင့်ပြုချက်ယန္တရားအတွက် ယုတ္တိတန်ပါသည်။ ဤနေရာတွင် အော်ပရေတာက ကျွန်ုပ်တို့ကို မည်သို့ကူညီနိုင်မည်နည်း။ namespace တွင် အညွှန်းပေါ်လာရန် စောင့်ဆိုင်းပြီး အင်တာနက်အသုံးပြုခွင့်အတွက် သင့်လျော်သောမူဝါဒကို ပေါင်းထည့်သည့် ထိန်းချုပ်ကိရိယာကို ဖန်တီးထားသည်။
- အလားတူအခြေအနေတစ်ခု- ကျွန်ုပ်တို့သည် တစ်ခုထည့်ရန် လိုအပ်သည်ဆိုပါစို့
တဏှာ အကယ်၍ ၎င်းတွင် အလားတူအညွှန်းတစ်ခု (ရှေ့ဆက်တစ်မျိုးမျိုးဖြင့်)။ အော်ပရေတာတွေရဲ့ လုပ်ဆောင်ချက်တွေက သိသာထင်ရှားပါတယ်..။
မည်သည့်အစုအဝေးတွင်မဆို လုပ်ရိုးလုပ်စဉ်အလုပ်များကို ဖြေရှင်းရမည်ဖြစ်ပြီး၊ မှန်ကန်စွာ ဒါကို operators တွေသုံးပြီး လုပ်ဆောင်နိုင်ပါတယ်။
ဖော်ပြထားတဲ့ ဇာတ်လမ်းတွေအားလုံးကို အနှစ်ချုပ်ပြီး ကောက်ချက်ချခဲ့ပါတယ်။ Kubernetes တွင် အဆင်ပြေသောအလုပ်အတွက် သင်လိုအပ်သည်။: ) အပိုပရိုဂရမ်များကို ထည့်သွင်းပါ။ခ) အော်ပရေတာများ ဖွံ့ဖြိုးတိုးတက်စေရန် (နေ့စဉ် admin အလုပ်များကိုဖြေရှင်းရန်အတွက်)
Kubernetes အတွက် ကြေငြာချက်ကို ဘယ်လိုရေးရမလဲ။
ယေဘုယျအားဖြင့်၊ အစီအစဉ်သည်ရိုးရှင်းသည်-
... ဒါပေမယ့် ပေါ်လာတာကတော့-
- Kubernetes API သည် အသေးအဖွဲမဟုတ်သော အရာတစ်ခုဖြစ်ပြီး ကျွမ်းကျင်ရန် အချိန်များစွာလိုအပ်ပါသည်။
- ပရိုဂရမ်ရေးသားခြင်းသည် လူတိုင်းအတွက်မဟုတ်ပါ (၎င်းအတွက် အထူးမူဘောင်တစ်ခုရှိသောကြောင့် Go ဘာသာစကားကို နှစ်သက်ရာဘာသာစကားအဖြစ် ရွေးချယ်ခဲ့ခြင်းဖြစ်သည် -
အော်ပရေတာ SDK ); - အခြေအနေက မူဘောင်ကိုယ်တိုင်နဲ့ အတူတူပါပဲ။
အောက်ဆုံးလိုင်း: controller တစ်ခုရေးရန် (အော်ပရေတာ) လုပ်ရမယ်။ သိသာထင်ရှားသောအရင်းအမြစ်များကိုသုံးစွဲပါ။ ပစ္စည်းလေ့လာရန်။ ၎င်းသည် MySQL DBMS အတွက် “ကြီးမားသော” အော်ပရေတာများအတွက် တရားမျှတမည်ဖြစ်သည်။ ဒါပေမယ့် အထက်မှာဖော်ပြထားတဲ့ ဥပမာတွေကို မှတ်သားထားမယ်ဆိုရင် (လျှို့ဝှက်ချက်တွေကို ဖြန့်ကျက်ပြီး အင်တာနက်ကို ဖြန့်ကျက်အသုံးပြုခြင်း...) ကိုလည်း မှန်ကန်စွာ လုပ်ဆောင်လိုတယ်ဆိုရင်၊ ကြိုးပမ်းအားထုတ်မှုက အခုလိုအပ်တဲ့ ရလဒ်ထက် သာလွန်ကြောင်း နားလည်လာပါလိမ့်မယ်။
ယေဘူယျအားဖြင့်၊ အကျပ်အတည်းတစ်ခု ဖြစ်ပေါ်လာသည်- အရင်းအမြစ်များစွာကို သုံးစွဲပြီး ထုတ်ပြန်ချက်များကို ရေးသားရန်အတွက် မှန်ကန်သောကိရိယာကို ရှာဖွေပါ သို့မဟုတ် ၎င်းကို ခေတ်ဟောင်းနည်းလမ်းဖြင့် ပြုလုပ်ပါ (သို့သော် လျင်မြန်စွာ)။ ၎င်းကိုဖြေရှင်းရန် - ဤအစွန်းရောက်များကြား အပေးအယူတစ်ခုရှာဖွေရန် - ကျွန်ုပ်တို့သည် ကျွန်ုပ်တို့၏ကိုယ်ပိုင်ပရောဂျက်ကို ဖန်တီးခဲ့သည်-
ရှဲလ်-အော်
သူဘယ်လိုအလုပ်လုပ်သလဲ။ အစုအဝေးတွင် shell-အော်ပရေတာနှင့်အတူ Go binary ပါ၀င်သည့် pod တစ်ခုရှိသည်။ နောက်တစ်ခုကတော့ အစုံပါပဲ။ ချိတ် (သူတို့အကြောင်းအသေးစိတ် - အောက်တွင်ကြည့်ပါ). shell-operator ကိုယ်တိုင်က သေချာစာရင်းသွင်းပါတယ်။ ဖြစ်ရပ်များ Kubernetes API တွင် သက်ဆိုင်ရာ ချိတ်များကို လွှင့်တင်သည့် ပေါ်ပေါက်လာသောအခါ၊
shell-operator သည် မည်သည့် ချိတ်ကို ခေါ်ဆိုရမည်ကို မည်သို့ သိရှိနိုင်သနည်း။ အချိတ်အဆက်များဖြင့် ဤအချက်အလက်များကို shell-operator ထံ ပေးပို့ပြီး ၎င်းတို့သည် အလွန်ရိုးရှင်းပါသည်။
ချိတ်တစ်ခုသည် Bash script သို့မဟုတ် အငြင်းအခုံတစ်ခုတည်းကို လက်ခံသည့် အခြားလုပ်ဆောင်နိုင်သော ဖိုင်တစ်ခုဖြစ်သည်။ --config
JSON ဖြင့် တုံ့ပြန်သည်။ နောက်ပိုင်းတွင် ၎င်းကို စိတ်ဝင်စားသည့် အရာဝတ္ထုများနှင့် မည်သည့် အဖြစ်အပျက်များ (ဤအရာဝတ္ထုများအတွက်) ကို တုံ့ပြန်သင့်သည်ကို ဆုံးဖြတ်သည်-
ကျွန်ုပ်တို့၏နမူနာများထဲမှ တစ်ခုဖြစ်သော shell-operator တွင် အကောင်အထည်ဖော်ခြင်းအား သီးသန့် registry တစ်ခုသို့ ဝင်ရောက်ခြင်းအတွက် လျှို့ဝှက်ချက်များကို ပြိုကွဲစေမည့် application ပုံများဖြင့် ဖော်ပြပါမည်။ ၎င်းတွင် အဆင့်နှစ်ဆင့် ပါဝင်သည်။
အလေ့အကျင့်: 1. ချိတ်ရေးပါ။
ပထမဦးစွာ၊ ချိတ်တွင်ကျွန်ုပ်တို့လုပ်ဆောင်ပါမည်။ --config
ကျွန်ုပ်တို့သည် namespace များကို စိတ်ဝင်စားကြောင်း ညွှန်ပြပြီး အထူးသဖြင့် ၎င်းတို့၏ ဖန်တီးမှုအခိုက်အတန့်
[[ $1 == "--config" ]] ; then
cat << EOF
{
"onKubernetesEvent": [
{
"kind": "namespace",
"event": ["add"]
}
]
}
EOF
…
ယုတ္တိဗေဒက ဘယ်လိုမျိုးပါလိမ့်။ အတော်လေးရိုးရှင်းသည်:
…
else
createdNamespace=$(jq -r '.[0].resourceName' $BINDING_CONTEXT_PATH)
kubectl create -n ${createdNamespace} -f - << EOF
Kind: Secret
...
EOF
fi
ပထမအဆင့်မှာ မည်သည့် namespace ကို ဖန်တီးထားသည်ကို သိရှိရန်ဖြစ်ပြီး ဒုတိယအဆင့်မှာ ၎င်းကို အသုံးပြု၍ ဖန်တီးရန်ဖြစ်သည်။ kubectl
ဤအမည်နေရာအတွက် လျှို့ဝှက်ချက်။
အလေ့အကျင့်- 2. ရုပ်ပုံကို စုစည်းခြင်း။
ကျန်တာအားလုံးက shell-operator ကို ဖန်တီးထားတဲ့ ချိတ်ကို ဖြတ်ဖို့ပါပဲ၊ ဒါကို ဘယ်လိုလုပ်ရမလဲ။ shell-operator ကိုယ်တိုင်က Docker ပုံတစ်ခုအနေနဲ့ လာပါတယ်၊ ထို့ကြောင့် ကျွန်ုပ်တို့၏တာဝန်မှာ ဤပုံရှိ အထူးလမ်းညွှန်တစ်ခုသို့ ချိတ်ကို ထည့်ရန်ဖြစ်သည်။
FROM flant/shell-operator:v1.0.0-beta.1
ADD my-handler.sh /hooks
ကျန်တာအားလုံးကို စုစည်းပြီး တွန်းထုတ်ရမှာ ဖြစ်ပါတယ်။
$ docker build -t registry.example.com/my-operator:v1 .
$ docker push registry.example.com/my-operator:v1
နောက်ဆုံးထိတွေ့မှုမှာ ပုံကို အစုအဝေးသို့ ဖြန့်ကျက်ရန်ဖြစ်သည်။ ဒီလိုလုပ်ဖို့၊ ရေးကြရအောင် ဖြန့်ကျက်:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: my-operator
spec:
template:
spec:
containers:
- name: my-operator
image: registry.example.com/my-operator:v1 # 1
serviceAccountName: my-operator # 2
သတိထားရမယ့် အချက်နှစ်ချက်ရှိပါတယ်။
- အသစ်ဖန်တီးထားသောပုံ၏ညွှန်ပြချက်;
- ၎င်းသည် Kubernetes ရှိ ဖြစ်ရပ်များအတွက် စာရင်းသွင်းရန်နှင့် လျှို့ဝှက်ချက်များကို ခွဲဝေသတ်မှတ်ရန် (အနည်းဆုံး) လုပ်ပိုင်ခွင့်များ လိုအပ်သည့် စနစ်အစိတ်အပိုင်းတစ်ခုဖြစ်သောကြောင့် ကျွန်ုပ်တို့သည် ချိတ်အတွက် ServiceAccount (နှင့် စည်းမျဉ်းများ) ကို ဖန်တီးပါသည်။
ရလဒ် - ကျွန်ုပ်တို့၏ပြဿနာကိုဖြေရှင်းခဲ့သည်။ ဆွေမျိုးများ Kubernetes အတွက် လျှို့ဝှက်ချက်များကို ပြိုကွဲစေသော အော်ပရေတာတစ်ခုကို ဖန်တီးသည့်နည်းလမ်း။
အခြား shell-operator အင်္ဂါရပ်များ
ချိတ်ဖြင့်အလုပ်လုပ်မည့် သင်ရွေးချယ်ထားသော အရာဝတ္ထုများကို ကန့်သတ်ရန်၊ ၎င်းတို့ကို စစ်ထုတ်နိုင်သည်။အချို့သော တံဆိပ်များအလိုက် ရွေးချယ်ခြင်း (သို့မဟုတ် အသုံးပြုခြင်း။ matchExpressions
):
"onKubernetesEvent": [
{
"selector": {
"matchLabels": {
"foo": "bar",
},
"matchExpressions": [
{
"key": "allow",
"operation": "In",
"values": ["wan", "warehouse"],
},
],
}
…
}
]
ပေးထားသည်။ ထုတ်ယူခြင်း ယန္တရားjq filter ကိုအသုံးပြုခြင်းဖြင့် - ကြီးမားသော JSON အရာဝတ္ထုများကို သေးငယ်သည့်အရာများအဖြစ်သို့ ပြောင်းလဲနိုင်စေကာ၊ ကျွန်ုပ်တို့ပြောင်းလဲမှုများအတွက် စောင့်ကြည့်လိုသော ကန့်သတ်ဘောင်များသာ ကျန်ရှိတော့မည်ဖြစ်သည်။
ချိတ်တစ်ခုခေါ်သောအခါ၊ shell-operator သည် ၎င်းကိုဖြတ်သွားသည်။ အရာဝတ္ထုဒေတာမည်သည့်လိုအပ်ချက်အတွက်မဆိုအသုံးပြုနိုင်ပါသည်။
ချိတ်များကို အစပျိုးပေးသည့် ဖြစ်ရပ်များသည် Kubernetes ပွဲများ တွင် အကန့်အသတ်မရှိပါ- shell-operator သည် ပံ့ပိုးမှုပေးပါသည်။ အချိန်အားဖြင့် ချိတ်များ ခေါ်ဆိုခြင်း။ (ရိုးရာအချိန်ဇယားဆွဲသူရှိ crontab နှင့်ဆင်တူသည်) အပြင် အထူးအစီအစဉ် စတင်ခြင်း. ဤဖြစ်ရပ်များအားလုံးကို ပေါင်းစပ်ပြီး တူညီသောချိတ်တွင် သတ်မှတ်ပေးနိုင်ပါသည်။
shell-operator ၏ နောက်ထပ်အင်္ဂါရပ်နှစ်ခု-
- အဆင်ပြေတယ် တပြိုင်နက်တည်း. Kubernetes ဖြစ်ရပ်တစ်ခု (ဖန်တီးနေသည့်အရာကဲ့သို့) ကိုလက်ခံရရှိထားသောကြောင့်၊ အခြားဖြစ်ရပ်များ (တူညီသောအရာဝတ္တုကို ဖျက်လိုက်ခြင်းကဲ့သို့) သည် အစုအဝေးတွင်ဖြစ်ပေါ်နိုင်ပြီး၊ ချိတ်များသည် ၎င်းအတွက် ထည့်သွင်းရန် လိုအပ်ပါသည်။ ချိတ်ကို အမှားအယွင်းတစ်ခုဖြင့် လုပ်ဆောင်ပါက၊ ပုံမှန်အားဖြင့် ၎င်းသည် ဖြစ်လိမ့်မည်။ ပြန်ခေါ်ပါ။ ပြီးမြောက်အောင်မြင်သည်အထိ (ဤအပြုအမူကို ပြောင်းလဲနိုင်သည်)။
- တင်ပို့သည်။ တိုင်းတာမှုများ Prometheus အတွက်၊ shell-operator အလုပ်လုပ်သည်ရှိမရှိ နားလည်နိုင်သော၊ ချိတ်တစ်ခုစီအတွက် အမှားအယွင်းအရေအတွက်နှင့် လက်ရှိတန်းစီသည့်အရွယ်အစားကို ရှာဖွေပါ။
အစီရင်ခံစာ၏ ဤအပိုင်းကို အကျဉ်းချုပ်ရန်-
add-ons များ install လုပ်ခြင်း
Kubernetes နှင့် အဆင်ပြေစေရန်အတွက် အပိုပရိုဂရမ်များ ထည့်သွင်းရန် လိုအပ်ကြောင်းကိုလည်း ဖော်ပြခဲ့သည်။ ကျွန်တော်တို့ ကုမ္ပဏီရဲ့ လမ်းကြောင်း ဥပမာကို အသုံးပြုပြီး အခု ကျွန်တော်တို့ လုပ်ပုံလုပ်နည်း အကြောင်း ပြောပြမယ်။
တစ်ခုတည်းသောအပြင် Ingress သည် အစုအဖွဲ့များစွာဖြင့် Kubernetes နှင့် စတင်လုပ်ဆောင်ခဲ့သည်။ ၎င်းကို အစုအဝေးတစ်ခုစီတွင် ကွဲပြားစွာထည့်သွင်းရန်လိုအပ်ပြီး မတူညီသောပတ်ဝန်းကျင်အတွက် YAML configurations အများအပြားကို ပြုလုပ်ခဲ့သည်- သတ္တုဗလာ၊ AWS...
အစုအဖွဲ့များ ပိုများလာသည်နှင့်အမျှ၊ ဖွဲ့စည်းမှုပုံစံများ ပိုများလာသည်။ ထို့အပြင်၊ ကျွန်ုပ်တို့သည် ဤဖွဲ့စည်းပုံများကို ၎င်းတို့ကိုယ်တိုင် ပိုမိုကောင်းမွန်အောင် ပြုလုပ်ထားသောကြောင့် ၎င်းတို့သည် အတော်လေး ကွဲပြားသွားသည်-
အရာအားလုံးကို စနစ်တကျဖြစ်အောင် ဇာတ်ညွှန်းတစ်ခုနဲ့ စတင်ခဲ့တယ် (install-ingress.sh
) ကျွန်ုပ်တို့အသုံးပြုမည့် အစုအဝေးအမျိုးအစားကို အငြင်းအခုံအဖြစ်ယူကာ လိုအပ်သော YAML ဖွဲ့စည်းမှုပုံစံကို ထုတ်ပေးပြီး Kubernetes သို့ ဖြန့်ကျက်ပေးသည်။
အတိုချုပ်အားဖြင့်၊ ကျွန်ုပ်တို့၏ နောက်ထပ်လမ်းကြောင်းနှင့် ၎င်းနှင့်ဆက်စပ်နေသော ကျိုးကြောင်းဆင်ခြင်မှုသည် အောက်ပါအတိုင်းဖြစ်သည်။
- YAML configurations များနှင့်အလုပ်လုပ်ရန်၊ template engine လိုအပ်သည် (ပထမအဆင့်တွင်၎င်းသည်ရိုးရှင်းသော sed ဖြစ်သည်)။
- အစုအဝေးအရေအတွက် တိုးလာသည်နှင့်အမျှ အလိုအလျောက် အပ်ဒိတ်လုပ်ရန် လိုအပ်လာသည် (အစောဆုံးဖြေရှင်းချက်မှာ script ကို Git တွင်ထည့်ရန်၊ ၎င်းကို cron သုံးပြီး အပ်ဒိတ်လုပ်ပြီး run ပါ)။
- Prometheus အတွက် အလားတူ ဇာတ်ညွှန်းတစ်ခု လိုအပ်သည် (
install-prometheus.sh
) သို့သော်၊ ၎င်းသည် ထည့်သွင်းမှုဒေတာများစွာ လိုအပ်သည့်အပြင် ၎င်းတို့၏ သိုလှောင်မှု (ကောင်းမွန်သောနည်းလမ်းဖြင့် - ဗဟိုချုပ်ကိုင်ထားပြီး အစုအဝေးတစ်ခုအတွင်း) နှင့် အချို့သောဒေတာ (စကားဝှက်များ) ကို အလိုအလျောက်ထုတ်ပေးနိုင်သည်ဟူသောအချက်အတွက် မှတ်သားဖွယ်ဖြစ်ပါသည်။ - တိုးပွားလာသောအစုအစည်းများသို့ အမှားအယွင်းတစ်ခုခုကို လွှင့်တင်ခြင်း၏အန္တရာယ်သည် အဆက်မပြတ်ကြီးထွားလာနေသည်၊ ထို့ကြောင့် installers များအကြောင်း ကျွန်ုပ်တို့သဘောပေါက်ပါသည်။ (ဆိုလိုသည်မှာ ဇာတ်ညွှန်းနှစ်ခု- Ingress နှင့် Prometheus အတွက်) အဆင့်မြှင့်တင်ရန် လိုအပ်သည် (Git တွင် အကိုင်းအခက်များစွာ၊ သက်ဆိုင်သည့်အရာများတွင် ၎င်းတို့ကို မွမ်းမံရန်- တည်ငြိမ်သော သို့မဟုတ် စမ်းသပ်မှုအစုအဝေးများ);
- с
kubectl apply
၎င်းသည် ကြေငြာချက်မဟုတ်သောကြောင့် အရာဝတ္ထုများကိုသာ ဖန်တီးနိုင်သော်လည်း ၎င်းတို့၏ အဆင့်အတန်းအပေါ် ဆုံးဖြတ်ချက်များ မချနိုင်ခြင်းကြောင့်/ ၎င်းတို့ကို ဖျက်ပစ်ရန် ခက်ခဲလာပါသည်။ - ထိုအချိန်တွင် ကျွန်ုပ်တို့ လုံးဝအကောင်အထည်မဖော်သေးသော အချို့သောလုပ်ဆောင်ချက်များကို ကျွန်ုပ်တို့ ပျောက်ဆုံးနေပါသည်-
- အစုအဖွဲ့မွမ်းမံမှုများ၏ရလဒ်အပေါ် အပြည့်အဝထိန်းချုပ်မှု၊
- အစုအဖွဲ့ (ရှာဖွေတွေ့ရှိမှု) မှ ရရှိနိုင်သော အချက်အလက်များအပေါ် အခြေခံ၍ အချို့သော ကန့်သတ်ချက်များ (တပ်ဆင်မှု Script များအတွက် ထည့်သွင်းခြင်း) ကို အလိုအလျောက် ဆုံးဖြတ်ခြင်း၊
- စဉ်ဆက်မပြတ် ရှာဖွေတွေ့ရှိမှုပုံစံဖြင့် ၎င်း၏ယုတ္တိဗေဒဆိုင်ရာ ဖွံ့ဖြိုးတိုးတက်မှု။
ကျွန်ုပ်တို့သည် ကျွန်ုပ်တို့၏ အခြားပရောဂျက်၏ မူဘောင်အတွင်း ဤစုဆောင်းထားသော အတွေ့အကြုံအားလုံးကို အကောင်အထည်ဖော်ခဲ့သည်-
Addon-အော်ပရေတာ
၎င်းသည် ဖော်ပြပြီးသား shell-operator ကို အခြေခံထားသည်။ စနစ်တစ်ခုလုံး ဤကဲ့သို့ ဖြစ်သည်-
အောက်ပါတို့ကို shell-operator ချိတ်များတွင် ထည့်ထားသည်-
- တန်ဖိုးများသိုလှောင်မှု,
- ပဲ့စင်ဇယား,
- အစိတ်အပိုင်း မော်နီတာတန်ဖိုးများစတိုးဆိုင် နှင့် - အပြောင်းအလဲတစ်စုံတစ်ရာရှိပါက - Helm သည် ဇယားကို ပြန်လည်လိပ်တင်ရန် တောင်းဆိုသည်။
ထို့ကြောင့် ကျွန်ုပ်တို့သည် Kubernetes ရှိ အဖြစ်အပျက်တစ်ခုကို တုံ့ပြန်နိုင်ပြီး ချိတ်တစ်ခုဖွင့်ကာ ဤချိတ်မှ သိုလှောင်ခန်းသို့ အပြောင်းအလဲများ ပြုလုပ်နိုင်သည်၊ ထို့နောက်ဇယားကို ပြန်လည်ဒေါင်းလုဒ်လုပ်ပါမည်။ ရရှိလာသော ပုံကြမ်းတွင်၊ ချိတ်တွဲနှင့်ဇယားကို ကျွန်ုပ်တို့ခေါ်သည့် အစိတ်အပိုင်းတစ်ခုအဖြစ် ခွဲခြားထားသည်။ module:
မော်ဂျူးများစွာရှိနိုင်ပြီး ၎င်းတို့အတွက် ကျွန်ုပ်တို့သည် ကမ္ဘာလုံးဆိုင်ရာချိတ်များ၊ ကမ္ဘာလုံးဆိုင်ရာတန်ဖိုးများစတိုးဆိုင်နှင့် ဤကမ္ဘာလုံးဆိုင်ရာစတိုးကို စောင့်ကြည့်သည့်အစိတ်အပိုင်းတစ်ခုကို ပေါင်းထည့်ပါသည်။
ယခု Kubernetes တွင် တစ်ခုခုဖြစ်သွားသောအခါ၊ ကျွန်ုပ်တို့သည် ၎င်းကို ကမ္ဘာလုံးဆိုင်ရာချိတ်ကို အသုံးပြု၍ ၎င်းကိုတုံ့ပြန်နိုင်ပြီး ကမ္ဘာလုံးဆိုင်ရာစတိုးတွင် တစ်ခုခုကို ပြောင်းလဲနိုင်သည်။ ဤပြောင်းလဲမှုကို သတိပြုမိမည်ဖြစ်ပြီး၊ အစုအဝေးရှိ မော်ဂျူးအားလုံးကို စတင်အသုံးပြုနိုင်စေသည်-
အထက်ဖော်ပြပါ အပိုပရိုဂရမ်များ ထည့်သွင်းခြင်းအတွက် ဤအစီအစဉ်သည် လိုအပ်ချက်အားလုံးကို ဖြည့်ဆည်းပေးသည်-
- ပဲ့စင်သည် ပုံစံထုတ်ခြင်းနှင့် ကြေငြာခြင်းအတွက် တာဝန်ရှိသည်။
- အလိုအလျောက် အပ်ဒိတ်လုပ်ခြင်းဆိုင်ရာ ပြဿနာကို အချိန်ဇယားတစ်ခုပေါ်တွင် မှတ်ပုံတင်ခြင်းသို့ ရောက်သွားသည့် ကမ္ဘာလုံးဆိုင်ရာချိတ်ကို အသုံးပြု၍ ဖြေရှင်းခဲ့ပြီး၊ ၎င်းတွင် စနစ်ပုံအသစ်တစ်ခုကို မြင်ပါက၊ ၎င်းကို ထုတ်လွှတ်လိုက်သည် (ဆိုလိုသည်မှာ "ကိုယ်တိုင်")။
- အစုအဝေးအတွင်း ဆက်တင်များကို သိမ်းဆည်းခြင်းအား အသုံးပြု၍ လုပ်ဆောင်သည်။ ConfigMapသိုလှောင်မှုများအတွက် ပင်မဒေတာပါ၀င်သည် (အစပိုင်းတွင် ၎င်းတို့ကို သိုလှောင်ခန်းများထဲသို့ ထည့်သွင်းထားသည်)။
- စကားဝှက်ဖန်တီးမှု၊ ရှာဖွေမှုနှင့် စဉ်ဆက်မပြတ်ရှာဖွေတွေ့ရှိမှုဆိုင်ရာ ပြဿနာများကို ချိတ်များကို အသုံးပြု၍ ဖြေရှင်းခဲ့သည်။
- Docker သည် ဘောက်စ်ပြင်ပမှ ပံ့ပိုးပေးသည့် tags များကြောင့် Staging ကို အောင်မြင်ခဲ့သည်။
- ရလဒ်ကို ကျွန်ုပ်တို့ နားလည်နိုင်သည့် မက်ထရစ်များကို အသုံးပြု၍ စောင့်ကြည့်ပါသည်။
ဤစနစ်တစ်ခုလုံးကို addon-operator ဟုခေါ်သော Go တွင် binary တစ်ခုတည်းပုံစံဖြင့် အကောင်အထည်ဖော်ထားသည်။ ၎င်းသည် ပုံကြမ်းကို ပိုရိုးရှင်းစေသည်-
ဤပုံကြမ်းတွင် အဓိက အစိတ်အပိုင်းသည် မော်ဂျူးအစုအဝေးများဖြစ်သည်။ (အောက်တွင် မီးခိုးရောင်ဖြင့် မီးမောင်းထိုးပြထားသည်). ယခု ကျွန်ုပ်တို့သည် အားစိုက်ထုတ်မှုအနည်းငယ်ဖြင့် လိုအပ်သော add-on အတွက် module တစ်ခုကို ရေးသားနိုင်ပြီး၊ ၎င်းကို အစုလိုက်တစ်ခုစီတွင် ထည့်သွင်းမည်၊ အပ်ဒိတ်လုပ်ပြီး အစုအဖွဲ့အတွင်းရှိ လိုအပ်သည့်ဖြစ်ရပ်များကို တုံ့ပြန်မည်ဖြစ်ကြောင်း သေချာပါစေ။
"Flant" ကိုသုံးသည်။
addon-operator အတွက် module တွေကို ဘယ်မှာရနိုင်မလဲ။ ကျွန်ုပ်တို့၏စာကြည့်တိုက်ကိုထုတ်ဝေခြင်းသည်ကျွန်ုပ်တို့အတွက်နောက်ထပ်အဆင့်ဖြစ်ပြီး၊ ၎င်းကိုနွေရာသီတွင်ပြုလုပ်ရန်စီစဉ်ထားသည်။
ဗီဒီယိုများနှင့် ဆလိုက်များ
ဖျော်ဖြေပွဲမှ ဗီဒီယို (~50 မိနစ်)
အစီရင်ခံစာတင်ပြချက်-
PS
ကျွန်ုပ်တို့၏ဘလော့ဂ်ရှိ အခြားအစီရင်ခံစာများ-
- «
ဒေတာဘေ့စ်များနှင့် Kubernetes "; (Dmitry Stolyarov; နိုဝင်ဘာ 8၊ 2018 တွင် HighLoad++); - «
စောင့်ကြည့်ခြင်းနှင့် Kubernetes "; (Dmitry Stolyarov; မေလ 28 ရက်၊ 2018 တွင် RootConf); - «
Kubernetes နှင့် GitLab ဖြင့် အကောင်းဆုံး အလေ့အကျင့်များ CI/CD "; (Dmitry Stolyarov; နိုဝင်ဘာ 7၊ 2017 တွင် HighLoad++); - «
ပရောဂျက်ငယ်များတွင် Kubernetes နှင့် ကျွန်ုပ်တို့၏အတွေ့အကြုံ "; (Dmitry Stolyarov; ဇွန်လ 6၊ 2017 တွင် RootConf).
အောက်ဖော်ပြပါ စာစောင်များကို သင်လည်း စိတ်ဝင်စားနိုင်သည်-
source: www.habr.com