Kuchotsa nthambi yachikale mu gulu la Kubernetes

Kuchotsa nthambi yachikale mu gulu la Kubernetes

ΠŸΡ€ΠΈΠ²Π΅Ρ‚! Nthambi ya mawonekedwe (aka deploy preview, review app) - apa ndi pamene osati nthambi yokhayo yomwe imatumizidwa, komanso pempho lililonse lachikoka ku URL yapadera. Mutha kuwona ngati khodiyo imagwira ntchito pamalo opangira; mawonekedwewo atha kuwonetsedwa kwa opanga mapulogalamu ena kapena akatswiri azinthu. Pamene mukugwira ntchito yopempha kukoka, kuyika kwatsopano kulikonse kwa code yakale kumachotsedwa, ndipo kutumizidwa kwatsopano kwa code yatsopano kumatulutsidwa. Mafunso angabwere pamene mudaphatikiza pempho lachikoka ku nthambi ya master. Simufunikanso gawo la nthambi, koma zida za Kubernetes zikadali mgululi.

Zambiri za nthambi za mawonekedwe

Njira imodzi yopangira nthambi za Kubernetes ndikugwiritsa ntchito mayina. Mwachidule, kasinthidwe kapangidwe kakuwoneka motere:

kind: Namespace
apiVersion: v1
metadata:
  name: habr-back-end
...

kind: Deployment
apiVersion: apps/v1
metadata:
  namespace: habr-back-end
spec:
  replicas: 3
...

Panthambi ina, malo amapangidwa ndi chizindikiritso chake (mwachitsanzo, nambala yofunsira) ndi mtundu wina wa prefix/postfix (mwachitsanzo, -pr-):

kind: Namespace
apiVersion: v1
metadata:
  name: habr-back-end-pr-17
...

kind: Deployment
apiVersion: apps/v1
metadata:
  namespace: habr-back-end-pr-17
spec:
  replicas: 1
...

Kawirikawiri, ndinalemba Wothandizira Kubernetes (pulogalamu yomwe ili ndi mwayi wopeza zothandizira magulu), kulumikiza ku polojekiti pa Github. Imachotsa malo omwe ali a nthambi zakale. Ku Kubernetes, ngati muchotsa dzina, zinthu zina zomwe zili patsambalo zimachotsedwanso zokha.

$ kubectl get pods --all-namespaces | grep -e "-pr-"
NAMESPACE            ... AGE
habr-back-end-pr-264 ... 4d8h
habr-back-end-pr-265 ... 5d7h

Mukhoza kuwerenga za momwe mungagwiritsire ntchito nthambi zamagulu mumagulu apa ΠΈ apa.

Chilimbikitso

Tiyeni tiwone zopempha zanthawi zonse zokoka moyo ndi kuphatikiza kosalekeza (continuous integration):

  1. Timakankhira kudzipereka kwatsopano ku nthambi.
  2. Pakumanga, linters ndi / kapena mayeso amayendetsedwa.
  3. Makonda a Kubernetes amakoka pempho amapangidwa pa ntchentche (mwachitsanzo, nambala yake imayikidwa mu template yomalizidwa).
  4. Pogwiritsa ntchito kubectl apply, masinthidwe amawonjezedwa pagulu (deploy).
  5. Kukoka pempho kuphatikizidwa mu master nthambi.

Pamene mukugwira ntchito yopempha kukoka, kuyika kwatsopano kulikonse kwa code yakale kumachotsedwa, ndipo kutumizidwa kwatsopano kwa code yatsopano kumatulutsidwa. Koma pamene pempho lachikoka liphatikizidwa mu nthambi yaikulu, nthambi yokhayo ndiyo idzamangidwa. Zotsatira zake, zikuwoneka kuti tayiwala kale za pempho la kukoka, ndipo zida zake za Kubernetes zikadali mgululi.

Momwe mungagwiritsire ntchito

Ikani pulojekitiyi ndi lamulo ili pansipa:

$ kubectl apply -f https://raw.githubusercontent.com/dmytrostriletskyi/stale-feature-branch-operator/master/configs/production.yml

Pangani fayilo yokhala ndi zotsatirazi ndikuyika kudzera kubectl apply -f:

apiVersion: feature-branch.dmytrostriletskyi.com/v1
kind: StaleFeatureBranch
metadata:
  name: stale-feature-branch
spec:
  namespaceSubstring: -pr-
  afterDaysWithoutDeploy: 3

chizindikiro namespaceSubstring zofunika kusefa mayina a zopempha kukoka kuchokera m'malo ena maina. Mwachitsanzo, ngati gululo lili ndi malo awa: habr-back-end, habr-front-end, habr-back-end-pr-17, habr-back-end-pr-33, ndiye ofuna kufufutidwa adzakhala habr-back-end-pr-17, habr-back-end-pr-33.

chizindikiro afterDaysWithoutDeploy zofunikira kuchotsa malo akale. Mwachitsanzo, ngati namespace apangidwa 3 дня 1 час kumbuyo, ndipo parameter ikuwonetsa 3 дня, malo awa achotsedwa. Zimagwiranso ntchito mosiyana ngati malo a mayina apangidwa 2 дня 23 часа kumbuyo, ndipo parameter ikuwonetsa 3 дня, malo awa sachotsedwa.

Pali gawo limodzi linanso, limayang'anira kuchuluka kwa maina onse ndikuyang'ana masiku osatumizidwa - checkEveryMinutes. Mwachikhazikitso ndizofanana ndi 30 ΠΌΠΈΠ½ΡƒΡ‚Π°ΠΌ.

Kodi ntchito

Muzochita, mudzafunika:

  1. Docker zogwirira ntchito kumalo akutali.
  2. Minikube ikweza gulu la Kubernetes kwanuko.
  3. kubctl - Mawonekedwe a mzere wolamula pakuwongolera magulu.

Timakweza gulu la Kubernetes kwanuko:

$ 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.

Tikuwonetsa kubectl gwiritsani ntchito cluster yakomweko mokhazikika:

$ kubectl config use-context minikube
Switched to context "minikube".

Tsitsani masinthidwe a malo opangira:

$ curl https://raw.githubusercontent.com/dmytrostriletskyi/stale-feature-branch-operator/master/configs/production.yml > stale-feature-branch-production-configs.yml

Popeza masinthidwe opanga amakonzedwa kuti ayang'ane malo akale, ndipo gulu lathu lomwe lakwezedwa kumene lilibe, tisintha kusintha kwa chilengedwe. IS_DEBUG pa true. Ndi mtengo uwu parameter afterDaysWithoutDeploy sichikuganiziridwa ndipo malo amazina samafufuzidwa kwa masiku popanda kutumizidwa, kokha chifukwa cha kupezeka kwa chingwe chochepa (-pr-).

Ngati muli pa Linux:

$ sed -i 's|false|true|g' stale-feature-branch-production-configs.yml

Ngati muli pa macOS:

$ sed -i "" 's|false|true|g' stale-feature-branch-production-configs.yml

Kuyika polojekiti:

$ kubectl apply -f stale-feature-branch-production-configs.yml

Kuwona kuti gwero lawonekera pagulu StaleFeatureBranch:

$ kubectl api-resources | grep stalefeaturebranches
NAME                 ... APIGROUP                             ... KIND
stalefeaturebranches ... feature-branch.dmytrostriletskyi.com ... StaleFeatureBranch

Tikuwona kuti wogwiritsa ntchito wawonekera pagulu:

$ kubectl get pods --namespace stale-feature-branch-operator
NAME                                           ... STATUS  ... AGE
stale-feature-branch-operator-6bfbfd4df8-m7sch ... Running ... 38s

Ngati muyang'ana zipika zake, ndi wokonzeka kukonza zothandizira StaleFeatureBranch:

$ kubectl logs stale-feature-branch-operator-6bfbfd4df8-m7sch -n stale-feature-branch-operator
... "msg":"Operator Version: 0.0.1"}
...
... "msg":"Starting EventSource", ... , "source":"kind source: /, Kind="}
... "msg":"Starting Controller", ...}
... "msg":"Starting workers", ..., "worker count":1}

Timakhazikitsa okonzeka fixtures (masinthidwe okonzeka opangira ma cluster resources) pazachithandizo StaleFeatureBranch:

$ kubectl apply -f https://raw.githubusercontent.com/dmytrostriletskyi/stale-feature-branch-operator/master/fixtures/stale-feature-branch.yml

Zosintha zikuwonetsa kufufuza malo okhala ndi kachingwe kakang'ono -pr- kamodzi mu 1 ΠΌΠΈΠ½ΡƒΡ‚Ρƒ.:

apiVersion: feature-branch.dmytrostriletskyi.com/v1
kind: StaleFeatureBranch
metadata:
  name: stale-feature-branch
spec:
  namespaceSubstring: -pr-
  afterDaysWithoutDeploy: 1 
  checkEveryMinutes: 1

Wothandizira wayankha ndipo ali wokonzeka kuyang'ana malo:

$ 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"}

Sakani fixtures, yokhala ndi malo awiri (project-pr-1, project-pr-2) ndi iwo deployments, services, ingress, ndi zina zotero:

$ 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

Tikuwona kuti zonse zomwe zili pamwambapa zidapangidwa bwino:

$ 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
...

Popeza tinaphatikizapo debug, malo project-pr-1 ΠΈ project-pr-2, chifukwa chake zinthu zina zonse ziyenera kuchotsedwa nthawi yomweyo popanda kuganizira za parameter afterDaysWithoutDeploy. Izi zitha kuwoneka mu zolemba za opareshoni:

$ 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"}

Mukayang'ana kupezeka kwa zothandizira, zidzakhala momwemo Terminating (kuchotsa) kapena kufufutidwa kale (mawu otuluka alibe kanthu).

$ 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
...

Mukhoza kubwereza ndondomeko yolenga fixtures kangapo ndipo onetsetsani kuti achotsedwa mkati mwa mphindi imodzi.

Njira zina

Kodi chingachitike ndi chiyani m'malo mogwiritsa ntchito gulu limodzi? Pali njira zingapo, zonse ndi zopanda ungwiro (ndipo zolakwa zawo ndizokhazikika), ndipo aliyense amasankha yekha chomwe chili chabwino pa ntchito inayake:

  1. Chotsani gawo la nthambi panthawi yolumikizana mosalekeza yomanga nthambi ya master.

    • Kuti muchite izi, muyenera kudziwa kuti ndi pempho lanji lomwe likukhudzana ndi zomwe zikumangidwa. Popeza gawo la dzina la nthambi lili ndi chizindikiritso chofuna kukokera - nambala yake, kapena dzina la nthambi, chizindikiritso chimayenera kufotokozedwa nthawi zonse.
    • Kumanga nthambi zazikulu kukulephera. Mwachitsanzo, muli ndi magawo otsatirawa: tsitsani pulojekiti, yendetsani mayeso, pangani pulojekiti, tulutsani, tumizani zidziwitso, chotsani gawo lomwe mwapempha komaliza. Ngati kumangako sikulephera potumiza zidziwitso, muyenera kuchotsa zonse zomwe zili mgululi pamanja.
    • Popanda tanthauzo loyenera, kuchotsa nthambi zamtundu wa master build sizowonekera.

  2. Kugwiritsa ntchito ma webhooks (chitsanzo).

    • Izi sizingakhale njira yanu. Mwachitsanzo, mu Jenkins, mtundu umodzi wokha wa payipi umathandizira kuthekera kosunga masinthidwe ake mu code source. Mukamagwiritsa ntchito ma webhooks, muyenera kulemba zolemba zanu kuti muzitha kuzikonza. Zolemba izi ziyenera kuyikidwa mu mawonekedwe a Jenkins, omwe ndi ovuta kuwasamalira.

  3. Kulemba Cronjob ndikuwonjezera gulu la Kubernetes.

    • Kuthera nthawi pa kulemba ndi kuthandizira.
    • Wogwiritsa ntchito kale amagwira ntchito mofananamo, amalembedwa ndi kuthandizidwa.

Zikomo chifukwa cha chidwi chanu ku nkhaniyo. Lumikizani ku polojekitiyi pa Github.

Source: www.habr.com

Kuwonjezera ndemanga