ProHoster > Блог > Isakoso > Yiyokuro ẹya ti igba atijọ ẹka ni akojọpọ Kubernetes kan
Yiyokuro ẹya ti igba atijọ ẹka ni akojọpọ Kubernetes kan
Hi! Ẹka ẹya-ara (aka ran awọn awotẹlẹ, ohun elo atunyẹwo) - eyi ni nigbati kii ṣe ẹka titunto si nikan ni a gbe lọ, ṣugbọn tun fa ibeere kọọkan si URL alailẹgbẹ kan. O le ṣayẹwo boya koodu naa n ṣiṣẹ ni agbegbe iṣelọpọ; ẹya naa le ṣe afihan si awọn pirogirama miiran tabi awọn alamọja ọja. Nigba ti o ba ti wa ni ṣiṣẹ ni a fa ìbéèrè, kọọkan titun dá lọwọlọwọ ransogun fun awọn atijọ koodu ti wa ni paarẹ, ati awọn titun ran awọn koodu ti wa ni ti yiyi jade. Awọn ibeere le dide nigbati o ba dapọ ibeere fifa sinu ẹka oluwa. Iwọ ko nilo ẹka ẹya mọ, ṣugbọn awọn orisun Kubernetes tun wa ninu iṣupọ naa.
Diẹ ẹ sii nipa awọn ẹka ẹya-ara
Ọna kan si ṣiṣe awọn ẹka ẹya ni Kubernetes ni lati lo awọn aaye orukọ. Ni kukuru, iṣeto iṣelọpọ dabi eyi:
Ni gbogbogbo, Mo kọ Kubernetes onišẹ (ohun elo ti o ni iwọle si awọn orisun iṣupọ), asopọ si ise agbese lori Github. O yọkuro awọn aaye orukọ ti o jẹ ti awọn ẹka ẹya atijọ. Ni Kubernetes, ti o ba paarẹ aaye orukọ kan, awọn orisun miiran ni aaye orukọ yẹn tun paarẹ laifọwọyi.
$ kubectl get pods --all-namespaces | grep -e "-pr-"
NAMESPACE ... AGE
habr-back-end-pr-264 ... 4d8h
habr-back-end-pr-265 ... 5d7h
O le ka nipa bi o ṣe le ṣe awọn ẹka ẹya sinu iṣupọ kan nibi и nibi.
Iwuri
Jẹ ki a wo igbesi aye gbigbe ibeere fa aṣoju pẹlu iṣọpọ lemọlemọfún (continuous integration):
A Titari adehun tuntun si ẹka naa.
Lori kikọ, awọn linters ati/tabi awọn idanwo ti wa ni ṣiṣe.
Awọn atunto ibeere fa Kubernetes ti wa ni ipilẹṣẹ lori fo (fun apẹẹrẹ, nọmba rẹ ti fi sii sinu awoṣe ti pari).
Lilo kubectl waye, awọn atunto ti wa ni afikun si iṣupọ (fifiranṣẹ).
Fa ìbéèrè ti wa ni dapọ si awọn titunto si eka.
Nigba ti o ba ti wa ni ṣiṣẹ ni a fa ìbéèrè, kọọkan titun dá lọwọlọwọ ransogun fun awọn atijọ koodu ti wa ni paarẹ, ati awọn titun ran awọn koodu ti wa ni ti yiyi jade. Ṣugbọn nigbati ibeere fifa kan ba dapọ si ẹka titunto si, ẹka oluwa nikan ni yoo kọ. Bi abajade, o wa ni pe a ti gbagbe tẹlẹ nipa ibeere fifa, ati awọn orisun Kubernetes rẹ tun wa ninu iṣupọ.
Apaadi namespaceSubstring nilo lati ṣe àlẹmọ awọn aaye orukọ fun fa awọn ibeere lati awọn aaye orukọ miiran. Fun apẹẹrẹ, ti iṣupọ naa ba ni awọn aye orukọ wọnyi: habr-back-end, habr-front-end, habr-back-end-pr-17, habr-back-end-pr-33, lẹhinna awọn oludije fun piparẹ yoo jẹ habr-back-end-pr-17, habr-back-end-pr-33.
Apaadi afterdaysWithoutDeploy nilo lati pa awọn aaye orukọ atijọ rẹ. Fun apẹẹrẹ, ti o ba ṣẹda aaye orukọ 3 дня 1 час pada, ati paramita tọkasi 3 дня, aaye orukọ yii yoo parẹ. O tun ṣiṣẹ ni idakeji ti aaye orukọ ba ṣẹda 2 дня 23 часа pada, ati paramita tọkasi 3 дня, aaye orukọ yii kii yoo parẹ.
paramita kan wa, o jẹ iduro fun iye igba lati ṣe ọlọjẹ gbogbo awọn aaye orukọ ati ṣayẹwo fun awọn ọjọ laisi imuṣiṣẹ - ṣayẹwo Gbogbo Iṣẹju. Nipa aiyipada o jẹ dogba 30 минутам.
$ minikube start --vm-driver=docker
minikube v1.11.0 on Darwin 10.15.5
Using the docker driver based on existing profile.
Starting control plane node minikube in cluster minikube.
Pato kubectl lo iṣupọ agbegbe nipasẹ aiyipada:
$ kubectl config use-context minikube
Switched to context "minikube".
Niwọn bi a ti tunto awọn atunto iṣelọpọ lati ṣayẹwo awọn aye orukọ atijọ, ati iṣupọ tuntun ti a gbe dide ko ni wọn, a yoo rọpo oniyipada ayika. IS_DEBUG on true. Pẹlu yi iye paramita afterDaysWithoutDeploy ko ṣe akiyesi ati pe awọn aaye orukọ ko ni ṣayẹwo fun awọn ọjọ laisi imuṣiṣẹ, nikan fun iṣẹlẹ ti substring (-pr-).
Ti o ba wa lori Linux:
$ sed -i 's|false|true|g' stale-feature-branch-production-configs.yml
Ti o ba wa lori macOS:
$ sed -i "" 's|false|true|g' stale-feature-branch-production-configs.yml
$ kubectl get pods --namespace stale-feature-branch-operator
NAME ... STATUS ... AGE
stale-feature-branch-operator-6bfbfd4df8-m7sch ... Running ... 38s
Ti o ba wo awọn akọọlẹ rẹ, o ti ṣetan lati ṣe ilana awọn orisun StaleFeatureBranch:
Oṣiṣẹ ti dahun o si ṣetan lati ṣayẹwo awọn aaye orukọ:
$ kubectl logs stale-feature-branch-operator-6bfbfd4df8-m7sch -n stale-feature-branch-operator
... "msg":"Stale feature branch is being processing.","namespaceSubstring":"-pr-","afterDaysWithoutDeploy":1,"checkEveryMinutes":1,"isDebug":"true"}
Fi sori ẹrọ fixtures, ti o ni awọn aaye orukọ meji ninu (project-pr-1, project-pr-2) ati wọn deployments, services, ingress, ati bẹbẹ lọ:
$ kubectl apply -f https://raw.githubusercontent.com/dmytrostriletskyi/stale-feature-branch-operator/master/fixtures/first-feature-branch.yml -f https://raw.githubusercontent.com/dmytrostriletskyi/stale-feature-branch-operator/master/fixtures/second-feature-branch.yml
...
namespace/project-pr-1 created
deployment.apps/project-pr-1 created
service/project-pr-1 created
horizontalpodautoscaler.autoscaling/project-pr-1 created
secret/project-pr-1 created
configmap/project-pr-1 created
ingress.extensions/project-pr-1 created
namespace/project-pr-2 created
deployment.apps/project-pr-2 created
service/project-pr-2 created
horizontalpodautoscaler.autoscaling/project-pr-2 created
secret/project-pr-2 created
configmap/project-pr-2 created
ingress.extensions/project-pr-2 created
A ṣayẹwo pe gbogbo awọn orisun ti o wa loke ni a ti ṣẹda ni aṣeyọri:
$ kubectl get namespace,pods,deployment,service,horizontalpodautoscaler,configmap,ingress -n project-pr-1 && kubectl get namespace,pods,deployment,service,horizontalpodautoscaler,configmap,ingress -n project-pr-2
...
NAME ... READY ... STATUS ... AGE
pod/project-pr-1-848d5fdff6-rpmzw ... 1/1 ... Running ... 67s
NAME ... READY ... AVAILABLE ... AGE
deployment.apps/project-pr-1 ... 1/1 ... 1 ... 67s
...
Niwon a pẹlu debug, awọn aaye orukọ project-pr-1 и project-pr-2, nitorina gbogbo awọn orisun miiran yoo ni lati paarẹ lẹsẹkẹsẹ laisi akiyesi paramita naa afterDaysWithoutDeploy. Eyi ni a le rii ninu awọn akọọlẹ oniṣẹ:
$ kubectl logs stale-feature-branch-operator-6bfbfd4df8-m7sch -n stale-feature-branch-operator
... "msg":"Namespace should be deleted due to debug mode is enabled.","namespaceName":"project-pr-1"}
... "msg":"Namespace is being processing.","namespaceName":"project-pr-1","namespaceCreationTimestamp":"2020-06-16 18:43:58 +0300 EEST"}
... "msg":"Namespace has been deleted.","namespaceName":"project-pr-1"}
... "msg":"Namespace should be deleted due to debug mode is enabled.","namespaceName":"project-pr-2"}
... "msg":"Namespace is being processing.","namespaceName":"project-pr-2","namespaceCreationTimestamp":"2020-06-16 18:43:58 +0300 EEST"}
... "msg":"Namespace has been deleted.","namespaceName":"project-pr-2"}
Ti o ba ṣayẹwo wiwa awọn orisun, wọn yoo wa ni ipo naa Terminating (ilana piparẹ) tabi ti paarẹ tẹlẹ (igbejade aṣẹ ti ṣofo).
$ kubectl get namespace,pods,deployment,service,horizontalpodautoscaler,configmap,ingress -n project-pr-1 && kubectl get namespace,pods,deployment,service,horizontalpodautoscaler,configmap,ingress -n project-pr-2
...
O le tun awọn ẹda ilana fixtures ni igba pupọ ati rii daju pe wọn ti yọ kuro laarin iṣẹju kan.
Awọn miiran
Kini o le ṣee ṣe dipo oniṣẹ ẹrọ ti n ṣiṣẹ ni iṣupọ kan? Awọn ọna pupọ lo wa, gbogbo wọn jẹ alaipe (ati awọn ailagbara wọn jẹ ero-ara), ati pe gbogbo eniyan pinnu fun ararẹ kini o dara julọ fun iṣẹ akanṣe kan:
Pa ẹka ẹya rẹ lakoko iṣọpọ ilọsiwaju ti eka titunto si.
Lati ṣe eyi, o nilo lati mọ iru ibeere fa ti o nii ṣe pẹlu ifaramọ ti a kọ. Niwọn bi aaye orukọ ẹka ẹya naa ni idamo ibeere fa - nọmba rẹ, tabi orukọ ẹka naa, idanimọ yoo nigbagbogbo ni lati sọ pato ninu ifaramọ.
Awọn ikole ẹka titunto si kuna. Fun apẹẹrẹ, o ni awọn ipele wọnyi: ṣe igbasilẹ iṣẹ akanṣe, ṣiṣe awọn idanwo, kọ iṣẹ akanṣe, ṣe itusilẹ, firanṣẹ awọn iwifunni, ko ẹka ẹya ti ibeere fifa kẹhin kuro. Ti kikọ ba kuna nigbati o ba nfi ifitonileti ranṣẹ, iwọ yoo ni lati pa gbogbo awọn orisun inu iṣupọ naa rẹ pẹlu ọwọ.
Laisi ipo ti o yẹ, piparẹ awọn ẹka ẹya ni kikọ titunto si ko han gbangba.
Eyi le ma jẹ ọna rẹ. Fun apẹẹrẹ, in Jenkins, Iru opo gigun ti epo kan nikan ṣe atilẹyin agbara lati fipamọ awọn atunto rẹ ni koodu orisun. Nigba lilo webhooks, o nilo lati kọ ara rẹ akosile lati lọwọ wọn. Iwe afọwọkọ yii yoo ni lati gbe sinu wiwo Jenkins, eyiti o nira lati ṣetọju.
Kọ ifiranṣẹ kan Cronjob ki o si fi Kubernetes iṣupọ.
Lilo akoko lori kikọ ati atilẹyin.
Oṣiṣẹ tẹlẹ ṣiṣẹ ni iru ara, ti ni akọsilẹ ati atilẹyin.