Cire tsohon reshe a cikin gungu na Kubernetes

Cire tsohon reshe a cikin gungu na Kubernetes

Sannu! Reshen fasali (aka tura samfoti, aikace-aikacen bita) - wannan shine lokacin da ba kawai babban reshe aka tura ba, har ma kowane jan buƙatun zuwa URL na musamman. Kuna iya bincika ko lambar tana aiki a cikin yanayin samarwa; ana iya nuna fasalin ga wasu masu shirye-shirye ko ƙwararrun samfur. Yayin da kuke aiki a cikin buƙatun ja, kowane sabon ƙaddamarwa na yanzu don tsohuwar lambar ana share shi, kuma ana fitar da sabon aikin sabon lambar. Tambayoyi na iya tasowa lokacin da kuka haɗa buƙatun ja zuwa babban reshen. Ba kwa buƙatar reshen fasalin, amma albarkatun Kubernetes har yanzu suna cikin gungu.

Ƙari game da rassan fasali

Hanya ɗaya don yin rassan fasali a Kubernetes shine amfani da wuraren suna. A takaice, tsarin samarwa yayi kama da haka:

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

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

Don reshen fasalin, an ƙirƙiri filin suna tare da mai ganowa (misali, lambar buƙatar ja) da wani nau'in prefix/postfix (misali, -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
...

Gabaɗaya, na rubuta Kubernetes Operator ( aikace-aikacen da ke da damar yin amfani da albarkatu cluster ), hanyar haɗi zuwa aikin akan Github. Yana cire wuraren suna waɗanda ke cikin tsoffin rassan fasali. A cikin Kubernetes, idan kun share sarari suna, sauran albarkatun da ke cikin wannan filin suna kuma ana share su ta atomatik.

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

Kuna iya karanta game da yadda ake aiwatar da rassan fasali cikin tari a nan и a nan.

Motsawa

Bari mu kalli tsarin buƙatun rayuwa na yau da kullun tare da ci gaba da haɗawa (continuous integration):

  1. Muna tura sabon alkawari zuwa reshe.
  2. A kan ginin, ana gudanar da linters da/ko gwaje-gwaje.
  3. Ana haifar da saitin buƙatun Kubernetes akan tashi (misali, an saka lambar sa cikin samfurin da aka gama).
  4. Yin amfani da kubectl, ana ƙara jeri zuwa gungu (aikewa).
  5. An haɗa buƙatar ja zuwa cikin babban reshe.

Yayin da kuke aiki a cikin buƙatun ja, kowane sabon ƙaddamarwa na yanzu don tsohuwar lambar ana share shi, kuma ana fitar da sabon aikin sabon lambar. Amma idan aka haɗa buƙatun ja zuwa babban reshe, babban reshe ne kawai za a gina. A sakamakon haka, ya zama cewa mun riga mun manta game da buƙatar ja, kuma albarkatun Kubernetes har yanzu suna cikin gungu.

Yadda ake amfani da shi

Shigar da aikin tare da umarnin da ke ƙasa:

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

Ƙirƙiri fayil tare da abun ciki mai zuwa kuma shigar ta kubectl apply -f:

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

Alamar sunan sarari Substring da ake buƙata don tace wuraren suna don buƙatun ja daga wasu wuraren suna. Misali, idan tarin yana da sunayen sunaye masu zuwa: habr-back-end, habr-front-end, habr-back-end-pr-17, habr-back-end-pr-33, sannan 'yan takarar sharewa za su kasance habr-back-end-pr-17, habr-back-end-pr-33.

Alamar bayan KwanakiBa tare da Aiwatar da su ba da ake buƙata don share tsoffin wuraren suna. Misali, idan an ƙirƙiri sararin suna 3 дня 1 час baya, kuma siga ya nuna 3 дня, za a share wannan filin suna. Hakanan yana aiki a cikin kishiyar shugabanci idan an ƙirƙiri filin suna 2 дня 23 часа baya, kuma siga ya nuna 3 дня, wannan filin suna ba za a share shi ba.

Akwai ƙarin siga guda ɗaya, yana da alhakin sau nawa don bincika duk wuraren suna kuma bincika kwanaki ba tare da turawa ba - duba Kowane Minti. Ta hanyar tsoho daidai yake 30 минутам.

Ta yaya wannan aikin

A aikace, kuna buƙatar:

  1. Docker don yin aiki a cikin keɓe muhalli.
  2. Minikube zai tayar da gungu na Kubernetes a cikin gida.
  3. kubectl - layin umarni don sarrafa gungu.

Muna haɓaka gungu na Kubernetes a gida:

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

Mun nuna kubectl yi amfani da gungu na gida ta tsohuwa:

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

Zazzage saitunan don yanayin samarwa:

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

Tun da an saita saitunan samarwa don bincika tsoffin wuraren suna, kuma sabon rukunin mu da aka ɗaga ba shi da su, za mu maye gurbin canjin yanayi. IS_DEBUG a kan true. Da wannan darajar siga afterDaysWithoutDeploy ba a la'akari da wuraren suna ba a bincika kwanaki ba tare da turawa ba, kawai don abin da ya faru na substring (-pr-).

Idan kun kunna Linux:

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

Idan kun kunna macOS:

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

Shigar da aikin:

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

Dubawa cewa wata hanya ta bayyana a cikin gungu StaleFeatureBranch:

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

Mun duba cewa ma'aikaci ya bayyana a cikin gungu:

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

Idan ka duba rajistan ayyukansa, yana shirye don aiwatar da albarkatun 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}

Mun shigar da shirye-shirye fixtures (shirye-shiryen da aka yi don yin ƙira ga albarkatun tari) don albarkatu StaleFeatureBranch:

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

Saitunan suna nuna don bincika wuraren suna tare da ƙaramin kirtani -pr- sau daya a 1 минуту.:

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

Mai aiki ya amsa kuma a shirye yake ya duba wuraren suna:

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

Shigar fixtures, mai dauke da wuraren suna guda biyu (project-pr-1, project-pr-2) da su deployments, services, ingress, da sauransu:

$ 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

Muna duba cewa duk albarkatun da ke sama an yi nasarar ƙirƙira su cikin nasara:

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

Tunda muka hada debug, wuraren suna project-pr-1 и project-pr-2, don haka duk sauran albarkatun dole ne a share su nan da nan ba tare da la'akari da ma'auni ba afterDaysWithoutDeploy. Ana iya ganin wannan a cikin rajistan ayyukan aiki:

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

Idan ka duba wadatar albarkatun, za su kasance cikin matsayi Terminating (tsarin sharewa) ko an riga an goge (fitarwa umarni fanko ne).

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

Kuna iya maimaita tsarin halitta fixtures sau da yawa kuma a tabbata an cire su a cikin minti daya.

Sauran hanyoyin

Menene za a iya yi maimakon ma'aikacin da ke aiki a cikin gungu? Akwai hanyoyi da yawa, dukansu ajizai ne (kuma gazawar su na al'ada ne), kuma kowa ya yanke shawara da kansa abin da ya fi dacewa ga wani aikin:

  1. Share reshe na fasali yayin ci gaba da haɓaka ginin babban reshe.

    • Don yin wannan, kuna buƙatar sanin wace buƙatun ja ya shafi ƙaddamarwa da ake ginawa. Tun da fasalin sunan reshe ya ƙunshi mai gano buƙatun ja - lambarsa, ko sunan reshe, koyaushe dole ne a ƙayyade mai ganowa a cikin ƙaddamarwa.
    • Babban ginin reshe yana kasawa. Misali, kuna da matakai masu zuwa: zazzage aikin, gudanar da gwaje-gwaje, gina aikin, yin saki, aika sanarwa, share fasalin fasalin buƙatun ja na ƙarshe. Idan ginin ya gaza lokacin aika sanarwa, dole ne ku share duk albarkatun da ke cikin gungu da hannu.
    • Ba tare da mahallin da ya dace ba, share rassan sifofi a cikin babban ginin ba a bayyane yake ba.

  2. Amfani da yanar gizo (misali).

    • Wataƙila wannan ba shine tsarin ku ba. Misali, in Jenkins, nau'in bututun guda ɗaya ne kawai ke goyan bayan ikon adana saitunan sa a cikin lambar tushe. Lokacin amfani da ƙugiya na gidan yanar gizo, kuna buƙatar rubuta rubutun ku don sarrafa su. Dole ne a sanya wannan rubutun a cikin ƙirar Jenkins, wanda ke da wahalar kiyayewa.

  3. Don rubutawa Cronjob kuma ƙara gungun Kubernetes.

    • Bayar da lokaci akan rubuce-rubuce da tallafi.
    • Mai aiki ya riga ya yi aiki a cikin irin wannan salo, an rubuta shi kuma ana goyan bayansa.

Na gode da kulawar ku ga labarin. Hanyar haɗi zuwa aikin akan Github.

source: www.habr.com

Add a comment