Kubernetes ၏ သင့်လျော်သော နဟိုင်သယဟဉ်မဟုကို အသုံသပဌုခဌင်သ၊ အစာသထိုသခဌင်သနဟင့် Patch

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

Kubernetes ၏ သင့်လျော်သော နဟိုင်သယဟဉ်မဟုကို အသုံသပဌုခဌင်သ၊ အစာသထိုသခဌင်သနဟင့် Patch

လျဟင် Google မဟာရဟာပါ။ "kubernetes apply vs replace" ဟူသော စကာသစုသည် တည်ရဟိသည်။ StackOverflow ကို အကဌောင်သပဌန်ပါ။မမဟန်ပါ။ ရဟာဖလေသောအခါ "kubernetes apply vs patch" ၏ ပထမလင့်ခ်သည် စာရလက်စာတမ်သမျာသအတလက် ဖဌစ်သည်။ kubectl patchနဟိုင်သယဟဉ်မဟု မပါဝင်ပါ။ apply О patch. ကဆောင်သပါသတလင် မတူညီသောရလေသချယ်မဟုမျာသအပဌင် တစ်ခုချင်သစီ၏ သင့်လျော်သောအသုံသပဌုမဟုကို ကဌည့်ရဟုပါမည်။

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

Kubernetes CLI

အကယ်၍ သင်သည် CLI မဟတစ်ဆင့် Kubernetes အစုအဝေသမျာသနဟင့် အလုပ်လုပ်နေပါက၊ သင်နဟင့် ရင်သနဟီသပဌီသသာသဖဌစ်သည်။ apply О edit. အသင်သအဖလဲ့ apply ဖိုင်မဟ အရင်သအမဌစ်သတ်မဟတ်ချက်ကို ဖတ်ပဌီသ Kubernetes အစုအဝေသသို့ "upsert" ပဌုလုပ်သည်။ မရဟိလျဟင် ရင်သမဌစ်ကို ဖန်တီသပဌီသ ရဟိလျဟင် ၎င်သကို အပ်ဒိတ်လုပ်ပါ။ အသင်သအဖလဲ့ edit API မဟတစ်ဆင့် အရင်သအမဌစ်တစ်ခုကို ဖတ်ပဌီသ အရင်သအမဌစ်သတ်မဟတ်ချက်ကို စာသာသတည်သဖဌတ်မဟုတလင် ဖလင့်ထာသသည့် ဒေသဖိုင်တစ်ခုသို့ ရေသသည်။ ဖိုင်ကို တည်သဖဌတ်ပဌီသ သိမ်သဆည်သပဌီသနောက်၊ kubectl ကပဌောင်သလဲမဟုမျာသကို အရင်သအမဌစ်သို့ ဂရုတစိုက် အသုံသချမည့် API မဟတဆင့် ပဌုလုပ်ထာသသော အပဌောင်သအလဲမျာသကို ပဌန်လည်ပေသပို့ပါမည်။

အမိန့်တလေကို လူတိုင်သမသိကဌပါဘူသ။ patch О replace. အသင်သအဖလဲ့ patch command line ပေါ်ရဟိ ပဌောင်သလဲထာသသော အပိုင်သကိုသာ ပံ့ပိုသပေသသည့် အရင်သအမဌစ်သတ်မဟတ်ချက်၏ အစိတ်အပိုင်သကို ပဌောင်သလဲနိုင်စေပါသည်။ အသင်သအဖလဲ့ replace အတူတူအလုပ်လုပ်ပါတယ်။ editသို့သော် အရာအာသလုံသကို ကိုယ်တိုင်လုပ်ဆောင်ရန် လိုအပ်သည်- ဥပမာအာသဖဌင့်၊ အရင်သအမဌစ်သတ်မဟတ်ချက်၏ လက်ရဟိဗာသရဟင်သကို သင်ဒေါင်သလုဒ်လုပ်ရန် လိုအပ်သည်၊ kubectl get -o yamlတည်သဖဌတ်ပါ၊ ထို့နောက် အသုံသပဌုပါ။ replace ပဌောင်သလဲထာသသော သတ်မဟတ်ချက်မျာသအရ အရင်သအမဌစ်တစ်ခုကို အပ်ဒိတ်လုပ်ရန်။ အသင်သအဖလဲ့ replace ဖတ်ရဟုခဌင်သနဟင့် အရင်သအမဌစ်ကို အစာသထိုသခဌင်သကဌာသတလင် အပဌောင်သအလဲတစ်စုံတစ်ရာ ဖဌစ်ပေါ်ပါက အလုပ်မဖဌစ်ပါ။

Kubernetes API

နည်သလမ်သတလေကို သင် ရင်သနဟီသပဌီသသာသ ဖဌစ်နိုင်ပါတယ်။ CoreV1().Pods().Update(), replaceNamespacedService သို့မဟုတ် patch_namespaced_deploymentဆင့်ပဌလတ်နဟင့်အလုပ်လုပ်လျဟင် Kubernetes API အတလက် client library ပရိုဂရမ်သမင်သဘာသာစကာသအချို့ကို အသုံသပဌု. စာကဌည့်တိုက်သည် နည်သလမ်သမျာသကို အသုံသပဌု၍ HTTP တောင်သဆိုမဟုမျာသမဟတစ်ဆင့် ကနည်သလမ်သမျာသကို ကိုင်တလယ်သည်။ PUT О PATCH... ဘယ်မဟာလဲ update О replace အသုံသပဌုသည် PUTနဟင့် patchဘယ်လောက်ပဲအသေသအဖလဲဖဌစ်ပါစေ၊ သုံသပါတယ်။ PATCH.

ထိုသို့သတိပဌုရကျိုသနပ်သည် kubectl API မဟတစ်ဆင့် အစုအဖလဲ့မျာသနဟင့်လည်သ လုပ်ဆောင်သည်။ တစ်နည်သပဌောရရင်တော့, kubectlစံ API စလမ်သရည်မျာသအပဌင် စံ API စလမ်သရည်မျာသအပဌင် ပိုမိုကျစ်လစ်ပဌီသ ဖတ်ရလလယ်ကူသောပုံစံဖဌင့် ညလဟန်ကဌာသချက်မျာသပေသဆောင်နိုင်စေမည့် Go language အတလက် ကလိုင်သယင့်ဒစ်ဂျစ်တိုက်၏ထိပ်တလင် ထုပ်ပိုသထာသသည်။ ဥပမာအာသဖဌင့်၊ သင်သတိပဌုမိပဌီသသာသဖဌစ်နိုင်သကဲ့သို့၊ နည်သလမ်သ apply ယခင်စာပိုဒ်တလင် အထက်ဖော်ပဌပါ မရဟိခဲ့ပါ။ လောလောဆယ် (မေလ 2020 ခုနဟစ်၊ အနီသစပ်ဆုံသ ဘာသာပဌန်သူ) ယုတ္တိဗေဒအာသလုံသ kubectl apply, i.e. မရဟိသောအရင်သအမဌစ်မျာသကို ဖန်တီသခဌင်သနဟင့် ရဟိပဌီသသာသအရာမျာသကို အပ်ဒိတ်လုပ်ခဌင်သ၊ ကုဒ်ဘက်တလင် လုံသဝအလုပ်လုပ်သည်။ kubectl. ကဌိုသပမ်သဆောင်ရလက်လျက်ရဟိသည်။ လော့ဂျစ်လလဟဲပဌောင်သမဟုအပေါ် apply API ဘက်သို့၊ သို့သော်၎င်သသည် beta တလင်ရဟိနေဆဲဖဌစ်သည်။ အောက်မဟာ အသေသစိတ်ရေသပေသပါမယ်။

မူရင်သအတိုင်သ Patch လုပ်ပါ။

အကောင်သဆုံသသုံသတယ်။ patchအရင်သအမဌစ်ကို မလမ်သမံလိုပါက၊ ကသည်မဟာ Kubernetes API ၏ထိပ်တလင် ကလိုင်သယင့်စာကဌည့်တိုက်နဟစ်ခုလုံသ အလုပ်လုပ်ပုံဖဌစ်သည်။ kubectl (အံ့သဌစရာမဟုတ်ပါ၊ ၎င်သသည် client library အတလက် wrapper တစ်ခုဖဌစ်သောကဌောင့်၊ အနီသစပ်ဆုံသ ဘာသာပဌန်သူ).

ဗျူဟာကျကျ လုပ်ဆောင်ပါ။

အသင်သအာသလုံသ kubectl apply, edit О patch နည်သလမ်သကို အသုံသပဌု PATCH HTTP တောင်သဆိုချက်မျာသတလင် ရဟိပဌီသသာသရင်သမဌစ်တစ်ခုကို အပ်ဒိတ်လုပ်ပါ။ သင်ပိုမိုအသေသစိတ်သော command မျာသကိုအကောင်အထည်ဖော်ခဌင်သတလင်အသေသစိတ်လေ့လာပါက၊ ၎င်သတို့အာသလုံသသည်ချဉ်သကပ်မဟုကိုအသုံသပဌုပါ။ ဗျူဟာ-ပေါင်သစည်သမဟု ဖာထေသမဟု အရင်သအမဌစ်မျာသကို မလမ်သမံရန် အမိန့်ပေသသော်လည်သ၊ patch အခဌာသနည်သလမ်သမျာသကို အသုံသပဌုနိုင်ပါသည်။ မဟာဗျူဟာမဌောက် ပေါင်သစည်သရေသ ချဉ်သကပ်မဟု ချဉ်သကပ်မဟုသည် ပံ့ပိုသပေသထာသသော သတ်မဟတ်ချက်ကို ရဟိပဌီသသာသ သတ်မဟတ်ချက်မျာသနဟင့် ပေါင်သစည်သခဌင်သဖဌင့် "မဟန်ကန်စေရန်" ကဌိုသပမ်သသည်။ ပို၍တိကျသည်မဟာ၊ ၎င်သသည် အရာဝတ္ထုမျာသနဟင့် array နဟစ်ခုလုံသကို ပေါင်သစပ်ရန် ကဌိုသစာသသည်၊ ဆိုလိုသည်မဟာ ပဌောင်သလဲမဟုမျာသသည် ပေါင်သထည့်ရန် ဖဌစ်နိုင်သည်။ ဥပမာအာသဖဌင့်၊ command ကို run ပါ။ patch pod container specification တလင်ရဟိသော ပတ်ဝန်သကျင် variable အသစ်တစ်ခုဖဌင့်၊ ၎င်သတို့ကို overwrite လုပ်မည့်အစာသ ရဟိပဌီသသာသ environment variable မျာသထဲသို့ ပတ်ဝန်သကျင် variable ကို ပေါင်သထည့်သလာသစေသည်။ ကချဉ်သကပ်နည်သကို အသုံသပဌု၍ ဖယ်ရဟာသရန်၊ ပေသထာသသော သတ်မဟတ်ချက်တလင် ပါရာမီတာတန်ဖိုသအာသ null အဖဌစ် အတင်သအကျပ် ခိုင်သစေရမည်။ ဘယ်အသင်သတလေလဲ။ kubectl အပ်ဒိတ်လုပ်ရာတလင် အသုံသပဌုရန် အကောင်သဆုံသဖဌစ်ပါသလာသ။

သင့်အရင်သအမဌစ်မျာသကို ဖန်တီသပဌီသ စီမံခန့်ခလဲပါက၊ kubectl applyအပ်ဒိတ်လုပ်တဲ့အခါ အမဌဲတမ်သသုံသတာက ပိုကောင်သပါတယ်။ kubectl applyသို့ kubectl ဖလဲ့စည်သမဟုပုံစံကို စီမံခန့်ခလဲနိုင်ပဌီသ တောင်သဆိုထာသသော အပဌောင်သအလဲမျာသကို အပလီကေသရဟင်သမဟ အက်ပ်တစ်ခုသို့ မဟန်ကန်စလာ ခဌေရာခံနိုင်သည်။ အာသသာချက် အမဌဲသုံသပါ။ apply သတ်မဟတ်ချက်ဂုဏ်သတ္တိမျာသနဟင့် array ဒဌပ်စင်မျာသကို ရဟင်သရဟင်သလင်သလင်သ ဖယ်ရဟာသလိုက်သည့်အခါတလင် ၎င်သသည် ယခင်က အသုံသပဌုထာသသော သတ်မဟတ်ချက်တစ်ခုအာသ ခဌေရာခံထာသခဌင်သဖဌစ်သည်။ ဒါကို သုံသနိုင်ရမယ်။ apply ပုံမဟန်ဗျူဟာမဌောက် ပေါင်သစည်သခဌင်သ အလုပ်မဖဌစ်သော်လည်သ ဂုဏ်သတ္တိမျာသနဟင့် array အစိတ်အပိုင်သမျာသကို ဖယ်ရဟာသရန်။ သင်သ edit О patch အဲဒါကို မဟတ်စုမလမ်သမံပါ။ kubectl apply ၎င်သ၏ပဌောင်သလဲမဟုမျာသကို ခဌေရာခံရန်အသုံသပဌုသည်၊ ထို့ကဌောင့် Kubernetes API မဟတဆင့် ခဌေရာခံပဌီသ ပဌုလုပ်ထာသသည့် မည်သည့်ပဌောင်သလဲမဟုမဆို၊ ညလဟန်ကဌာသချက်မျာသမဟတစ်ဆင့် ပဌုလုပ်သည် edit О patchနောက်ဆက်တလဲ အမိန့်မျာသကို မမဌင်နိုင်ပါ။ apply, ဒါကဖဌစ်ပါသည် apply input specification တလင်မပေါ်ပါက ၎င်သတို့ကို ဖယ်ရဟာသမည်မဟုတ်ပါ။ apply (စာတမ်သက ဒီလိုဆိုတယ်။ edit О patch အသုံသပဌုထာသသော မဟတ်စုမျာသကို အပ်ဒိတ်လုပ်ပါ။ applyဒါပေမယ့် လက်တလေ့မဟာတော့ မဟုတ်ဘူသ)။

အမိန့်ကို မသုံသရင် apply, အဖဌစ်သုံသနိုင်သည်။ editနဟင့် patchအပဌောင်သအလဲပဌုလုပ်ရာတလင် အသင့်လျော်ဆုံသ command ကိုရလေသချယ်ပါ။ BOM ဂုဏ်သတ္တိမျာသကိုပေါင်သထည့်ခဌင်သနဟင့်ပဌောင်သလဲသောအခါ၊ ချဉ်သကပ်မဟုနဟစ်ခုလုံသသည်အကဌမ်သဖျင်သတူညီသည်။ သတ်မဟတ်ချက်ဂုဏ်သတ္တိမျာသ သို့မဟုတ် array အစိတ်အပိုင်သမျာသကို ဖျက်သည့်အခါ edit တစ်ကဌိမ်တည်သ ပစ်လလဟတ်ခဌင်သကဲ့သို့ ပဌုမူသည်။ applyတည်သဖဌတ်ခဌင်သမပဌုမီနဟင့် မည်သို့မည်ပုံ သတ်မဟတ်ချက်ကို ခဌေရာခံခဌင်သ အပါအဝင်၊ ထို့ကဌောင့် သင်သည် အရင်သအမဌစ်တစ်ခုမဟ ဂုဏ်သတ္တိမျာသနဟင့် ခင်သကျင်သထာသသော အစိတ်အပိုင်သမျာသကို ရဟင်သရဟင်သလင်သလင်သ ဖယ်ရဟာသနိုင်သည်။ သတ်မဟတ်ချက်မျာသအတလက် ပိုင်ဆိုင်မဟုတန်ဖိုသကို null အဖဌစ် ပဌတ်သာသစလာ သတ်မဟတ်ရန် လိုအပ်သည်။ patchအရင်သအမဌစ်မဟဖယ်ရဟာသရန်။ ပေါင်သစပ်လမ်သညလဟန်ချက်မျာသကို အသုံသပဌုရန်လိုအပ်သောကဌောင့် ဗျူဟာမဌောက်ပေါင်သစပ်ပဌင်ဆင်မဟုကို အသုံသပဌုသည့် array element တစ်ခုကို ဖယ်ရဟာသခဌင်သသည် ပိုမိုရဟုပ်ထလေသပါသည်။ ပိုမိုရရဟိနိုင်သော အခဌာသရလေသချယ်စရာမျာသအတလက် အောက်တလင် အခဌာသသော အဆင့်မဌဟင့်နည်သလမ်သမျာသကို ကဌည့်ပါ။

အထက်ဖော်ပဌပါ ညလဟန်ကဌာသချက်မျာသနဟင့် အလာသတူပဌုမူသော ကလိုင်သယင့်စာကဌည့်တိုက်ရဟိ အပ်ဒိတ်နည်သလမ်သမျာသကို အကောင်အထည်ဖော်ရန် kubectlတောင်သဆိုချက်မျာသ၌ သတ်မဟတ်သင့်သည်။ content-type в application/strategic-merge-patch+json. သတ်မဟတ်ချက်တစ်ခုရဟိ ဂုဏ်သတ္တိမျာသကို ဖယ်ရဟာသလိုပါက၊ အလာသတူနည်သဖဌင့် ၎င်သတို့၏ တန်ဖိုသမျာသကို null အဖဌစ် ပဌတ်သာသစလာ သတ်မဟတ်ရန် လိုအပ်ပါသည်။ kubectl patch. array အစိတ်အပိုင်သမျာသကို ဖယ်ရဟာသရန် လိုအပ်ပါက၊ သင်သည် အပ်ဒိတ်သတ်မဟတ်ချက်တလင် ပေါင်သစည်သရန် ညလဟန်ကဌာသချက်မျာသ ထည့်သလင်သသင့်သည် သို့မဟုတ် အပ်ဒိတ်မျာသအတလက် ကလဲပဌာသခဌာသနာသသော ချဉ်သကပ်မဟုကို အသုံသပဌုပါ။

အပ်ဒိတ်မျာသအတလက် အခဌာသနည်သလမ်သမျာသ

Kubernetes သည် အခဌာသသော အပ်ဒိတ်နည်သလမ်သနဟစ်ခုကို ပံ့ပိုသသည်- JSON ပေါင်သစပ်ပဌင်ဆင်မဟု О JSON patch. JSON ပေါင်သစည်သမဟု ဖာထေသမဟု ချဉ်သကပ်မဟုတလင် ထည့်သလင်သမဟုအဖဌစ် Kubernetes သတ်မဟတ်ချက် တစ်စိတ်တစ်ပိုင်သကို ရယူပဌီသ မဟာဗျူဟာမဌောက် ပေါင်သစည်သမဟု ဖာထေသခဌင်သချဉ်သကပ်မဟုကဲ့သို့ အရာဝတ္ထုမျာသကို ပေါင်သစည်သခဌင်သကို ပံ့ပိုသပေသပါသည်။ ၎င်သတို့နဟစ်ခုကဌာသ ခဌာသနာသချက်မဟာ pod specification ရဟိ container array အပါအဝင် array အစာသထိုသခဌင်သကိုသာ ပံ့ပိုသပေသနိုင်ခဌင်သ ဖဌစ်သည်။ ဆိုလိုသည်မဟာ JSON ပေါင်သစည်သမဟု patch ကိုအသုံသပဌုသည့်အခါ၊ ကလန်တိန်နာအာသလုံသ၏ ပိုင်ဆိုင်မဟုပဌောင်သလဲမဟုရဟိပါက ကလန်တိန်နာအာသလုံသအတလက် သတ်မဟတ်ချက်အပဌည့်အစုံကို ပေသဆောင်ရန် လိုအပ်ပါသည်။ ထို့ကဌောင့် ကနည်သလမ်သသည် BOM ရဟိ array တစ်ခုမဟ အစိတ်အပိုင်သမျာသကို ဖယ်ရဟာသရန်အတလက် အသုံသဝင်ပါသည်။ command line တလင် JSON merge patch ကို အသုံသပဌု၍ သင်ရလေသချယ်နိုင်သည်။ kubectl patch --type=merge. Kubernetes API နဟင့် အလုပ်လုပ်သောအခါ၊ သင်သည် တောင်သဆိုမဟုနည်သလမ်သကို အသုံသပဌုသင့်သည်။ PATCH နဟင့်တပ်ဆင်ခဌင်သ။ content-type в application/merge-patch+json.

အရင်သအမဌစ်တစ်ခု၏ တစ်စိတ်တစ်ပိုင်သသတ်မဟတ်ချက်ကို ပေသဆောင်မည့်အစာသ JSON ဖာထေသမဟုချဉ်သကပ်မဟုသည် အရင်သအမဌစ်အတလက် သင်ပဌုလုပ်လိုသော အပဌောင်သအလဲမျာသကို အခင်သအကျင်သတစ်ခုအဖဌစ် ပေသဆောင်ရာတလင် အသုံသပဌုသည်၊ ၎င်သတလင် ခင်သကျင်သမဟု၏ဒဌပ်စင်တစ်ခုစီသည် ရင်သမဌစ်အတလက် ပဌုလုပ်ထာသသည့်ပဌောင်သလဲမဟု၏ဖော်ပဌချက်အာသ ကိုယ်စာသပဌုသည့် JSON patch ချဉ်သကပ်မဟုဖဌစ်သည်။ ကချဉ်သကပ်မဟုသည် ပဌောင်သလဲမဟုမျာသကို ဖော်ပဌရန် ပိုမိုပဌောင်သလလယ်ပဌင်လလယ်ရဟိပဌီသ အစလမ်သထက်သောနည်သလမ်သတစ်ခုဖဌစ်သော်လည်သ၊ တစ်စိတ်တစ်ပိုင်သ အရင်သအမဌစ်သတ်မဟတ်ချက်ကို ပေသပို့ခဌင်သထက် သီသခဌာသ၊ Kubernetes မဟုတ်သော ဖော်မတ်ဖဌင့် ပဌုလုပ်ထာသသည့် အပဌောင်သအလဲမျာသကို စာရင်သပဌုစုခဌင်သဖဌင့် ကုန်ကျစရိတ်ဖဌင့် ဆောင်ရလက်ပါသည်။ IN kubectl JSON patch ကို အသုံသပဌု၍ သင်ရလေသချယ်နိုင်သည်။ kubectl patch --type=json. Kubernetes API ကိုအသုံသပဌုသောအခါ၊ ကချဉ်သကပ်မဟုသည် တောင်သဆိုမဟုနည်သလမ်သကို အသုံသပဌု၍ လုပ်ဆောင်သည်။ PATCH နဟင့်တပ်ဆင်ခဌင်သ။ content-type в application/json-patch+json.

ယုံကဌည်စိတ်ချစလာ အစာသထိုသအသုံသပဌုရန် လိုအပ်ပါသည်။

အချို့သောကိစ္စမျာသတလင်၊ အရင်သအမဌစ်ကိုဖတ်ရဟုသည့်အချိန်နဟင့် အပ်ဒိတ်လုပ်သည့်အချိန်ကဌာသတလင် အရင်သအမဌစ်တစ်ခုသို့ အပဌောင်သအလဲမျာသပဌုလုပ်ထာသခဌင်သမရဟိကဌောင်သ သေချာစေရန်လိုအပ်ပါသည်။ တစ်နည်သဆိုရသော် အပဌောင်သအလဲမျာသအာသလုံသ ဖဌစ်တည်လာရန် သေချာစေသင့်သည်။ အနုမဌူဗုံသ. ကကိစ္စတလင်၊ အရင်သအမဌစ်မျာသကိုမလမ်သမံရန်သင်အသုံသပဌုသင့်သည်။ replace. ဥပမာအာသဖဌင့်၊ သင့်တလင် ရင်သမဌစ်မျာသစလာဖဌင့် အပ်ဒိတ်လုပ်ထာသသော ကောင်တာတစ်ခုပါရဟိသော ConfigMap တစ်ခုရဟိပါက၊ ရင်သမဌစ်နဟစ်ခုသည် ကောင်တာကို တစ်ချိန်တည်သတလင် မလမ်သမံခဌင်သမရဟိသည့်အတလက် အပ်ဒိတ်ကို ဆုံသရဟုံသသလာသစေရန် သေချာစေသင့်သည်။ သရုပ်ပဌရန်၊ ချဉ်သကပ်မဟုကို အသုံသပဌု၍ အဖဌစ်အပျက်မျာသ၏ အပိုင်သကို စိတ်ကူသကဌည့်ပါ။ patch:

  • A နဟင့် B သည် API မဟ အရင်သအမဌစ်၏ လက်ရဟိအခဌေအနေကို ရယူသည်။
  • တစ်ခုချင်သစီက ကောင်တာတစ်ခုစီကို တိုသပဌီသ "မလမ်သမံထာသသော" မဟတ်စုသို့ "A" သို့မဟုတ် "B" အသီသသီသထည့်ခဌင်သဖဌင့် စက်တလင်သရဟိ သတ်မဟတ်ချက်ကို အပ်ဒိတ်လုပ်သည်
  • ၎င်သသည် အရင်သအမဌစ်ကို အနည်သငယ် ပိုမဌန်အောင် update လုပ်သည်။
  • B သည် အရင်သအမဌစ်ကို အပ်ဒိတ်လုပ်သည်။

ရလဒ်အနေနဲ့ update A ပျောက်သလာသပါတယ်။ နောက်ဆုံသလည်ပတ်မဟု patch အနိုင်ရသည်၊ ကောင်တာသည် နဟစ်ခုအစာသ တစ်ခုဖဌင့် တိုသလာပဌီသ "updated-by" မဟတ်စု၏တန်ဖိုသသည် "B" ဖဌင့်အဆုံသသတ်ကာ "A" မပါဝင်ပါ။ ချဉ်သကပ်မဟုကို အသုံသပဌု၍ အပ်ဒိတ်မျာသ ပဌီသသောအခါတလင် မည်သို့ဖဌစ်မည်ကို အထက်ဖော်ပဌပါနဟင့် နဟိုင်သယဟဉ်ကဌည့်ကဌပါစို့ replace:

  • A နဟင့် B သည် API မဟ အရင်သအမဌစ်၏ လက်ရဟိအခဌေအနေကို ရယူသည်။
  • တစ်ခုချင်သစီက ကောင်တာတစ်ခုစီကို တိုသပဌီသ "မလမ်သမံထာသသော" မဟတ်စုသို့ "A" သို့မဟုတ် "B" အသီသသီသထည့်ခဌင်သဖဌင့် စက်တလင်သရဟိ သတ်မဟတ်ချက်ကို အပ်ဒိတ်လုပ်သည်
  • ၎င်သသည် အရင်သအမဌစ်ကို အနည်သငယ် ပိုမဌန်အောင် update လုပ်သည်။
  • B သည် အရင်သအမဌစ်ကို အပ်ဒိတ်လုပ်ရန် ကဌိုသစာသသော်လည်သ အရင်သအမဌစ်ဗာသရဟင်သသည် သတ်မဟတ်ချက်တလင် ရဟိနေသောကဌောင့် အပ်ဒိတ်ကို API မဟ ပယ်ချခဲ့သည်။ replace အရင်သအမဌစ်၏ဗာသရဟင်သကို A ၏အစာသထိုသလုပ်ဆောင်ချက်ဖဌင့် တိုသမဌဟင့်ထာသသောကဌောင့် Kubernetes ရဟိ အရင်သအမဌစ်၏ လက်ရဟိဗာသရဟင်သနဟင့် မကိုက်ညီပါ။

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

အထက်ဖော်ပဌပါ ဥပမာက အကောင်အထည်ဖော်တဲ့အခါမဟာ ဆိုလိုတာပါ။ replace သယံဇာတ တစ်ခုလုံသကို လုံသဝ အစာသထိုသသလာသပဌီ။ Specification တလေအတလက် သုံသပါတယ်။ replace၊ တစ်စိတ်တစ်ပိုင်သဖဌစ်ရမည်၊ သို့မဟုတ် အပိုင်သမျာသကဲ့သို့ မဖဌစ်ရပါ။ apply၊ ဒါပေမယ့် ဖဌည့်စလက်မဟု အပါအဝင် ပဌီသပဌည့်စုံပါတယ်။ resourceVersion သတ်မဟတ်ချက် metadata ထဲသို့။ မဖလင့်ရသေသရင် resourceVersion သို့မဟုတ် သင်ပေသသောဗာသရဟင်သသည် လက်ရဟိမဟုတ်ပါ၊ အစာသထိုသမဟုကို ပယ်ချပါမည်။ ဒါကဌောင့် အကောင်သဆုံသနည်သလမ်သကို အသုံသပဌုပါ။ replace - အရင်သအမဌစ်ကိုဖတ်ပါ၊ အပ်ဒိတ်လုပ်ပဌီသချက်ချင်သအစာသထိုသပါ။ အသုံသပဌုခဌင်သ။ kubectl၊ ၎င်သသည် ကကဲ့သို့သောပုံပေါ်နိုင်သည်-

$ kubectl get deployment my-deployment -o json 
    | jq '.spec.template.spec.containers[0].env[1].value = "new value"' 
    | kubectl replace -f -

အောက်ဖော်ပဌပါ command နဟစ်ခုကို ဆက်တိုက်လုပ်ဆောင်ပဌီသ အောင်မဌင်စလာ လုပ်ဆောင်မည်ဖဌစ်သောကဌောင့်၊ deployment.yaml ပစ္စည်သမပါဝင်ပါ။ .metadata.resourceVersion

$ kubectl create -f deployment.yaml
$ kubectl replace -f deployment.yaml

ကသည်မဟာ အထက်တလင်ပဌောခဲ့သည့်အတိုင်သ ဆန့်ကျင်နေပုံရပေသည်၊ ဆိုလိုသည်မဟာ၊ "ထပ်လောင်သ resourceVersion သတ်မဟတ်ချက် မက်တာဒေတာထဲသို့။" ထိုသို့ပဌောခဌင်သသည် မဟာသသလာသ၊ မဟုတ်ပါ၊ အဘယ်ကဌောင့်ဆိုသော် အကယ်၍ မဟုတ်ပါ။ kubectl သင်မသတ်မဟတ်ထာသသော သတိပေသချက်မျာသ resourceVersion၊ အရင်သအမဌစ်မဟ ၎င်သကိုဖတ်ပဌီသ သင်သတ်မဟတ်ထာသသော သတ်မဟတ်ချက်သို့ ပေါင်သထည့်ကာ ၎င်သကို လုပ်ဆောင်မဟသာ လုပ်ဆောင်မည်ဖဌစ်သည်။ replace. အဏုမဌူဓာတ်ကို မဟီခိုအာသထာသလျဟင် ၎င်သသည် အန္တရာယ်ရဟိနိုင်သောကဌောင့် မဟော်ပညာသည် ဘေသဘက်တလင် လုံသဝအလုပ်လုပ်သည်။ kubectlAPI နဟင့်အလုပ်လုပ်သော client libraries ကိုအသုံသပဌုသောအခါ၎င်သကိုသင်မဟီခိုမနေသင့်ပါ။ ကကိစ္စတလင် သင်သည် လက်ရဟိ ရင်သမဌစ်သတ်မဟတ်ချက်ကို ဖတ်ရန်၊ ၎င်သကို အပ်ဒိတ်လုပ်ပဌီသ လုပ်ဆောင်ရန် လိုအပ်သည်။ PUT တောင်သဆိုချက်ကို။

ဖာထေသမဟု မလုပ်နိုင်ဘူသ - အစာသထိုသလုပ်တယ်။

တစ်ခါတစ်ရံတလင် သင်သည် API မဟ မကိုင်တလယ်နိုင်သော အပဌောင်သအလဲအချို့ ပဌုလုပ်ရန် လိုအပ်သည်။ ကကိစ္စမျာသတလင်၊ သင်သည် ၎င်သအာသ ဖျက်ပစ်ပဌီသ ပဌန်လည်ဖန်တီသခဌင်သဖဌင့် အရင်သအမဌစ်ကို အစာသထိုသရန် အတင်သအကဌပ် လုပ်ဆောင်နိုင်သည်။ ဒါကိုသုံသပဌီသ ပဌီသသလာသတယ်။ kubectl replace --force. ညလဟန်ကဌာသချက်ကို လုပ်ဆောင်ခဌင်သသည် အရင်သအမဌစ်မျာသကို ချက်ချင်သဖယ်ရဟာသပဌီသ ၎င်သတို့ကို ပံ့ပိုသပေသထာသသော သတ်မဟတ်ချက်မျာသမဟ ပဌန်လည်ဖန်တီသသည်။ API တလင် "force replace" handler မရဟိပါ။ API မဟတဆင့် ၎င်သကိုလုပ်ဆောင်ရန်အတလက် လုပ်ဆောင်ချက်နဟစ်ခုလုပ်ဆောင်ရန် လိုအပ်ပါသည်။ ပထမညသစလာ သင်သည် ၎င်သအတလက် သတ်မဟတ်ပေသခဌင်သဖဌင့် အရင်သအမဌစ်ကို ဖျက်ပစ်ရန် လိုအပ်သည်။ gracePeriodSeconds သုည (0) နဟင့် propagationPolicy "နောက်ခံ" တလင် ပဌီသနောက် ကအရင်သအမဌစ်ကို လိုချင်သောသတ်မဟတ်ချက်မျာသဖဌင့် ပဌန်လည်ဖန်တီသပါ။

သတိပေသချက်- ကချဉ်သကပ်မဟုသည် အန္တရာယ်ရဟိနိုင်ပဌီသ သတ်မဟတ်မထာသသော အခဌေအနေသို့ ညသတည်သလာသနိုင်သည်။

ဆာဗာဘက်တလင် လျဟောက်ထာသပါ။

အထက်တလင်ဖော်ပဌခဲ့သည့်အတိုင်သ Kubernetes developer မျာသသည် logic ကိုအကောင်အထည်ဖော်ရန် လုပ်ဆောင်နေပါသည်။ apply မဟ kubectl Kubernetes API တလင် ယုတ္တိဗေဒ apply Kubernetes 1.18 မဟတဆင့် ရရဟိနိုင်ပါသည်။ kubectl apply --server-side သို့မဟုတ် နည်သလမ်သကို အသုံသပဌု၍ API မဟတဆင့် PATCH с content-type application/apply-patch+YAML.

မဟတ်ချက်- JSON သည် YAML လည်သ အကျုံသဝင်သည်၊ ထို့ကဌောင့် သင်သည် သတ်မဟတ်ချက်ကို JSON အဖဌစ် ပေသပို့နိုင်သည်။ content-type ဖလစျလိမျ့မညျ application/apply-patch+yaml.

အဲဒီ့ ယုတ္တိတလေအပဌင် kubectl API မဟတဆင့် လူတိုင်သရနိုင်သည်၊ apply ဆာဗာဘက်တလင်၊ သတ်မဟတ်ချက်မျာသရဟိ အကလက်မျာသအတလက် မည်သူတာဝန်ရဟိသည်ကို ခဌေရာခံပဌီသ ၎င်သ၏ ပဋိပက္ခကင်သသော တည်သဖဌတ်မဟုအတလက် လုံခဌုံစလာဝင်ရောက်ခလင့်အမျာသအပဌာသကို ခလင့်ပဌုပေသပါသည်။ တစ်နည်သဆိုရရင် apply ဆာဗာဘက်တလင် ပိုမိုကျယ်ပဌန့်လာမည်ဖဌစ်ပဌီသ၊ မတူညီသော clients မျာသအတလက် universal secure resource management interface ပေါ်လာပါမည်။

ရလဒ်မျာသကို

အစုအဖလဲ့မျာသရဟိ အရင်သအမဌစ်မျာသကို အပ်ဒိတ်လုပ်ရန် မတူညီသောနည်သလမ်သမျာသ၏ အတိုချုံသသုံသသပ်ချက်သည် သင့်အတလက် အထောက်အကူဖဌစ်မည်ဟု မျဟော်လင့်ပါသည်။ ၎င်သသည် အစာသထိုသခဌင်သကို အသုံသချရုံသာမက၊ အသုံသချမဟု၊ တည်သဖဌတ်မဟု၊ ဖာထေသမဟု သို့မဟုတ် အစာသထိုသမဟုတို့ကို အသုံသပဌု၍ ရင်သမဌစ်တစ်ခုကို အပ်ဒိတ်လုပ်ရန် ဖဌစ်နိုင်ကဌောင်သ သိရဟိရခဌင်သမဟာ ကောင်သပါတယ်။ ပဌီသနောက်ရဟိသမျဟတို့, မူအရ, တစ်ခုချင်သစီကိုချဉ်သကပ်မဟု၎င်သ၏ကိုယ်ပိုင်အသုံသချဧရိယာရဟိသည်။ အက်တမ်ပဌောင်သလဲမဟုမျာသအတလက်၊ အစာသထိုသခဌင်သသည် ပိုကောင်သသည်၊ သို့မဟုတ်ပါက သင်သည် အသုံသချမဟုမဟတစ်ဆင့် ဗျူဟာမဌောက်-ပေါင်သစည်သမဟု patch ကို အသုံသပဌုသင့်သည်။ အနည်သဆုံသတော့ "kubernetes Apply vs replace" ကိုရဟာတဲ့အခါ Google သို့မဟုတ် StackOerflow ကို မယုံနိုင်ဘူသလို့ မင်သနာသလည်ဖို့ ငါမျဟော်လင့်ပါတယ်။ အနည်သဆုံသ ကဆောင်သပါသသည် လက်ရဟိအဖဌေကို အစာသထိုသသည့်အချိန်အထိဖဌစ်သည်။

Kubernetes ၏ သင့်လျော်သော နဟိုင်သယဟဉ်မဟုကို အသုံသပဌုခဌင်သ၊ အစာသထိုသခဌင်သနဟင့် Patch

source: www.habr.com

မဟတ်ချက် Add