GitHub Motion အကြောင်း နဲ့ ဘာလို့ ARC သုံးဖြစ်သွားလဲ?
ကျနော့် အလုပ်မှာ လိုအပ်လို့ လိုက်ရှာရင်း သုံးဖြစ်တဲ့ GitHub Motion Runner Controller (ARC) ဆိုတဲ့ open supply undertaking အကြောင်းလေး ပြန်မျှဝေချင်ပါတယ်။ ဒါက undertaking ရဲ့ hyperlink ပါ။
GitHub Motion ဆိုတာ software program growth course of မှာ ရေးပြီးသား code တွေ take a look at ဖို့ software program launch တွေ automate လုပ်ဖို့တို့ container picture တွေ သုံးတဲ့ group တွေဆိုရင် software program launch လုပ်ပြီးတာနဲ့ တပြိုင်နက် container picture တွေ construct လုပ် ပြီး non-public container registry တွေပို့ဖို့ အစသဖြင့်တို့ကို workflow တွေ တည်ဆောက်ပြီး အလိုအလျှောက် ခိုင်းစေနိုင်တဲ့ GitHub က function တစ်ခုဖြစ်ပါတယ်။ အဲလို workflow တွေ ရေးပြီး ခိုင်းစေနိုင်တာကို CI (steady integration) လို ခေါ်ကြပါတယ်။ GitHub Motion က software program growth automation မှာ တော်တော် အသုံးဝင်တဲ့ function တစ်ခုဖြစ်ပါတယ်။
အဲဒီ motion workflow တင် run နိုင်ဖို့ primarily based os (working system) တွေ လိုလာပါတယ်။ အဲ os တွေကို runner လို့လဲ ခေါ်ကြတယ်။ အများအားဖြင့် GitHub က runners တွေကိုယူသုံးလို့ရပါတယ်။
ကဲပြဿနာကခုမှစပါပြီ။ GitHub က runners တွေယူသုံးတာက တစ်ယောက်တည်း စမ်းရုံ သုံးရုံ လောက်ဆိုအဆင်ပြေပါတယ်။ Group အလိုက် ဆိုရင်တော့ operating time ပေါ်မူတည်ပြီး invoice ဖြတ်တဲ့အတွက် GitHub က customized runner တွေ အသုံးပြုလို့ရအောင် ခွင့်ပြုထားတဲ့ self-hosted runner နည်းကို သုံးမှ ပိုသင့်တော်ပါလိမ့်မယ်။
ကျနော်မျှဝေမဲ့ ARC undertaking ကဘာလုပ်ပေးလဲဆိုတော့ အဲဒီ self-hosted runner တွေကို Kubernetes cluster ပေါ် မှာ တင် run ပေးပြီး တဲ့အပြင် workload အပေါ်မူတည်ပြီး အဲ runner တွေကို auto scale ပါလုပ်ပေးပါတယ်။ auto scaling လုပ်ဆောင် ချက် ပါတဲ့ အတွက် ကိုယ့်ရဲ့ cluster assets တွေ ကို လိုအပ်တဲ့အချိန်မှ လိုအပ်သလို အသုံးပြုတဲ့အပြင် GitHub ဖြတ်မယ့် invoice လည်း သက်သာနိုင်မှာဖြစ်ပါတယ်။
Authentication Choices နဲ့ Ranges တွေ
ကျနော်တို့ Kubernetes Cluster နဲ့ GitHub ကို ချိတ်ဆက်ဆောင်ရွက်နိုင်ဖို့အတွက် authentication လိုလာပါတယ်။ ARC က help လုပ်တဲ့ authentication sorts တွေကတော့အောက်ပါအတိုင်းဖြစ်ပါတယ်။
၁။ GitHub App နဲ့
၂။ Private Entry Token တို့ဖြစ်ပါတယ်။
အဲနှစ်မျိုးထဲက နှစ်သက်ရာသုံးနိုင်ပါတယ်။ ကျနော်တော့ PAT ကို suggest လုပ်ပါတယ်။တခြားတော့မဟုတ်ပါဘူး။ setup လုပ်ရတာ အသုံးပြုရတာ ပိုရိုးရှင်းတဲ့အတွက်ပါ။ Authentication မှာမှ GitHub Account sort အပေါ်မူတည်ပြီးကွဲသွားပါတယ်။ ကျနော်ကတော့ group ထဲက repo တွေမှာ self hosted runner တွေသုံးချင်တဲ့ အတွက် authentic degree entry ရှိတဲ့ PAT token ကိုသုံးရပါတယ်။ တခြား GitHub Enterprise သုံးချင်ရင် သူ့ရဲ့ tokenကိုသုံးရပါမယ် အစသဖြင့်ပေါ့။
Auth token ဘယ်လိုယူရမလဲ?
၁။ GitHub Auth App တည်ဆောက်ပြီး လိုအပ်တဲ့ token ယူနည်း ကို ဒီမှာ ကြည့်နိုင်ပါတယ်။
၂။ Private Entry Token ယူနည်း ကို ဒီမှာ ကြည့်နိုင်ပါတယ်။
မှတ်ချက်။ ။မိမိအသုံးပြုမယ့် entry degree ကို မှန်ကန်အောင် ရွေးပေးဖို့လိုပါမယ်။
Conditions က ဘာလိုလဲ?
အဲတော့ ကျနော်တို့ ARC ကို Kubernetes Cluster မှာ တည်ဆောက်ကြပါမယ်။ အဲမတိုင်ခင် ARC က certificates supervisor သုံးတဲ့အတွက် cluster ပေါ်အရင် သွင်းပေးရပါမယ်။
ပုံမှန် တစ်ခုချင်းစီ set up ရင် အချိန်ပိုကြာနိုင်တဲ့အတွက် official web site က cert-manager file ကိုသုံးပြီး အောက်ပါအတိုင်း set up လုပ်ပါ့မယ်။
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/obtain/v1.8.2/cert-manager.yaml
Set up success ဖြစ်မဖြစ် အောက်ပါအတိုင်း verify နိုင်ပါတယ်။
cert supervisor api ကို prepared ဖြစ်မဖြစ် အောက်ပါအတိုင်း verify နိုင်ပါတယ်။
Cluster ပေါ်မှာ ARC ဘယ်လို set up မလဲ?
ကဲလိုအပ်တာတွေ ရပြီဆိုတော့ ARC ကို set up ကြပါမယ်။ ကျနော်တို့ helm package deal supervisor နဲ့ ARC ကို set up လုပ်ကြပါမယ်။
ပထမဆုံး motion namespace တစ်ခု တည်ဆောက်ပါမယ်။ တစ်ခြား software တွေနဲ့ သီးခြားဖြစ်သွားအောင်လို့ပါ။
kubectl create ns actions
ARC အတွက်လိုအပ်တဲ့ secret တစ်ခုတည်ဆောက်ရပါမယ်။ helm default template က controller-manager ဆို တဲ့ identify နဲ့ secret ကို ယူသုံးတဲ့အတွက်ကြောင့် controller-manager ဆိုတဲ့ identify ကိုသုံးပြီး secret တစ်ခုတည်ဆောက်ပါမယ်။
ဒီနေရာမှာ ကျနော်တို့ secret identify ကို ကြိုက်တာပေးလို့ရပါတယ်။ ပေးတဲ့ identify ကို helm chart ကို obtain လုပ်းပြီးပြင် နေရမှာဆိုတော့ မပြင်ချင်လို့ default ပါတဲ့ secret identify ကို သုံးလိုက်တာပါ။
kubectl create secret generic controller-manager
-n actions-runner-system
--from-literal=github_token=${GITHUB_TOKEN}
secret တည်ဆောက်တာ success ဖြစ်မဖြစ် verify ပါ။
secret ရပြီဆိုတာနဲ့ ARC helm repo သွင်းရပါမယ်။ အောက်ပါအတိုင်းသွင်းနိုင်ပါတယ်။
$ helm repo add actions-runner-controller https://actions-runner-controller.github.io/actions-runner-controller
$ helm repo replace
$ helm search repo actions
helm repo သွင်းပြီးပြီဆိုတော့ ARC သွင်းမယ့် namespace ကို ခုနက တည်ဆောက်ခဲ့တဲ့ actions namespace ကို choice အနေနဲ့ ပေးပြီး အောက်ပါအတိုင်းသွင်းနိုင်ပါတယ်။ ပြီးတော့ model က helm chart model ပါ။ syncPeriod က ကြိုက်သလိုပေးနိုင်ပါတယ်။ ခုတော့ 1 minute ပေးထားပါတယ်။
helm set up runner actions-runner-controller/actions-runner-controller
--namespace actions
--version 0.18.0
--set syncPeriod=1m
ARC set up ပြီးရင် standing verify ပါ။
Pod run မ run verify ပါ။
Runner Controller Pod run နေရင် ARC သွင်းတာ အဆင်ပြေပါပြီ။
Runner Deployment Customized Useful resource Definition ရေးပုံရေးနည်း နဲ့ တည်ဆောက်ပုံ
Runner Deployment ရေးပုံကတော့ ရိုးရှင်းပါတယ်။ ပုံမှန် deployment file လိုပါဘဲ။
တစ်ခုသတိထားစရာတော့ရှိပါတယ်။ repository နေရာမှာ ကိုယ်သုံးမယ့် repo identify ကို မှန်အောင်ရေးပေးရပါမယ်။ group runner ဆိုရင် group, enterprise runner ဆိုရင် enterprise မှန်အောင်သတ်မှတ်ပြီးမှ runner တည်ဆောက်ပါ။ အကျယ်ချဲ့ကတော့ ဒီ မှာကြည့်ပါ။
# runnerdeployment.yaml
apiVersion: actions.summerwind.dev/v1alpha1 form: RunnerDeployment metadata: identify: example-runner-deployment spec: template: spec: repository: ye-hbonemyat/test-check
ရေးထားတဲ့ yaml file ကို kubectl apply လုပ်ပါ။
kubectl apply လုပ်ပြီးရင် အောက်ပါအတိုင်း verify လုပ်နိုင်ပါတယ်။
ဒါကတော့ runner deployment degree verify တာပါ။
ဒါကတော့ pod degree verify တာပါ။
ကဲအခုကျနော်တို့ single runner လေးတစ်လုံးရပါပြီ။
Horizontal Runner Deployment Autoscaler Customized Useful resource Definition ရေးပုံရေးနည်း နဲ့ တည်ဆောက်ပုံ
Kubernetes nature ကိုသုံးပြီး ကျနော်တို့ single runner ကို load အပေါ်မူတည်ပြီး horizontal autoscaling လုပ်နိုင်ပါတယ်။ သူ့အတွက် လိုအပ်တဲ့ CRD တွေကို ARC template က လုပ်ဆောင်ပေးပြီးသား ဖြစ်တဲ့အတွက် အောက်ပါအတိုင်း yaml file လေးရေးပြီး apply လုပ်ရုံပါဘဲ။ Horizontal autoscaling လုပ်ဖို့အတွက် ARC help ပေးတဲ့ နည်းလမ်းတွေက အများကြီးပါဘဲ။ ကိုယ်လိုသလို အဆင်ပြေသလို သုံးနိုင်ပါတယ်။ ကျနော်ကတော့ အရိုးရှင်းဆုံး တစ်ခုကို ဥပမာ ပြထားပါတယ်။ အကျယ်ချဲ့ ကို ဒီ မှာကြည့်ပါ။
# hra.yaml apiVersion: actions.summerwind.dev/v1alpha1 form: HorizontalRunnerAutoscaler metadata: identify: example-runner-deployment-autoscaler spec: scaleTargetRef: identify: example-runner-deployment minReplicas: 2 maxReplicas: 5 metrics: - sort: TotalNumberOfQueuedAndInProgressWorkflowRuns repositoryNames: - ye-hbonemyat/test-check
ရေးထားတဲ့ yaml file ကို kubectl apply လုပ်ပါ။
HRA လို့ဘဲ အတိုကောက်ခေါ်ပါတော့မယ်။
HRA apply လုပ်ပြီးရင် အောက်ပါအတိုင်း verify နိုင်ပါတယ်။
ပြီးတော့ runner deployment ကိုပြန်ကြည့်ပါ။ Desired က နှစ်ခုတိုးသွားပါလိမ့်မယ်။ အကြောင်းက HRA မှာ minimal runners ကို 2 ပေးလိုက်လို့ပါ။
runners verify ကြည့်တဲ့အခါ runner နှစ်ခုဖြစ်သွားတာတွေ့ရပါမယ်။
pod degree verify ပါ။
ကဲအကုန်ပြီးပြီဆိုတော့ repo ထဲသွားပြီး တစ်ချက် ကြည့်ပါ။ runner တွေ idle ဖြစ်နေတာတွေ့ရပါမယ်။
အဲဒါဆိုရင် ARC setup က အဆင်ပြေသွားပါပြီ။
မူရင်း picture ကိုသုံးပြီး လိုအပ် သော package deal တွေ သွင်းခြင်း
ကဲ နောက်ဆုံးအနေနဲ့ runner တွေရဲ့ primarily based picture က အကုန်လုံးအတွက်လိုအပ်တဲ့ package deal တွေ အကုန်ပါဖို့က မဖြစ်နိုင်ပါဘူး။ တော်တော်များများပါပေမဲ့ ကိုယ့် group မှာသုံးနေတဲ့ package deal တွေ မပါခဲ့သည်ရှိသော် အောက်ပါအတိုင်း docker picture ပြန် construct ပြီး သုံးနိုင်ပါတယ်။
FROM summerwind/actions-runner:newest RUN sudo apt replace -y && sudo apt set up YOUR_PACKAGE && sudo rm -rf /var/lib/apt/lists/*
ဒါကတော့ runner deployment file မှာ customized picture သုံးပုံသုံးနည်း ပါ။
apiVersion: actions.summerwind.dev/v1alpha1 form: RunnerDeployment metadata: identify: example-runnerdeployment spec: template: spec: repository: yehbone-myat/test-check picture: YOUR_CUSTOM_DOCKER_IMAGE
ကဲ ARC အကြောင်းကတော့ ကျနော်သိသလောက် ဒါပါဘဲ။ အဆင်ပြေကြပါစေ။ ။