Iifayile zasekuhlaleni xa ufudusela usetyenziso kwi-Kubernetes

Iifayile zasekuhlaleni xa ufudusela usetyenziso kwi-Kubernetes

Xa ukwakhiwa kwenkqubo ye-CI / CD usebenzisa i-Kubernetes, ngamanye amaxesha ingxaki ivela ngokungahambelani phakathi kweemfuno zesiseko esitsha kunye nesicelo esidluliselwa kuyo. Ngokukodwa, kwinqanaba lokwakha isicelo kubalulekile ukufumana ΠΎΠ΄ΠΈΠ½ umfanekiso oza kusetyenziswa kuwo всСх Ubume beprojekthi kunye namaqela. Lo mgaqo usisiseko esichanekileyo ngokukaGoogle ulawulo lwesikhongozeli (ngaphezu kwesinye malunga noku utshilo kunye nesebe lethu lobugcisa).

Nangona kunjalo, awuyi kubona nabani na kwiimeko apho ikhowudi yesayithi isebenzisa isakhelo esenziwe esele silungile, ukusetyenziswa okumisela izithintelo ekusebenziseni ngakumbi. Kwaye ngelixa "kwindawo eqhelekileyo" oku kulula ukujongana nayo, kwi-Kubernetes le ndlela yokuziphatha ingaba yingxaki, ngakumbi xa udibana nayo okokuqala. Ngelixa ingqondo enobuchule inokuza nezisombululo zeziseko ezingundoqo ezibonakala zicacile okanye zilungile xa uthi nqala... kubalulekile ukukhumbula ukuba uninzi lweemeko zinako kwaye kufuneka. zisonjululwe ngokolwakhiwo.

Makhe sijonge izisombululo ezithandwayo zokugcina iifayile ezinokukhokelela kwimiphumo engathandekiyo xa uqhuba iqela, kwaye ubonise indlela echanekileyo.

Ugcino olungatshintshiyo

Ukwenza umzekelo, qwalasela inkqubo yewebhu esebenzisa uhlobo oluthile lwejenereyitha engatshintshiyo ukufumana iseti yemifanekiso, izimbo, kunye nezinye izinto. Umzekelo, isakhelo se-Yii PHP sinomphathi we-asethi eyakhelwe-ngaphakathi ovelisa amagama ahlukeneyo olawulo. Ngokuhambelanayo, imveliso yiseti yeendlela zesiza esimileyo ngokucacileyo esingadibanisiyo (oku kwenziwa ngenxa yezizathu ezininzi - umzekelo, ukuphelisa ukuphinda-phinda xa amacandelo amaninzi esebenzisa uvimba omnye). Ke, ngaphandle kwebhokisi, okokuqala ufikelela kwimodyuli yomthombo wewebhu, iifayile ezingatshintshiyo (enyanisweni, zihlala zi-symlink, kodwa ngaphezulu koko kamva) zenziwe kwaye zibekwe ngolawulo lweengcambu eziqhelekileyo ezikhethekileyo kolu kuthunyelwa:

  • webroot/assets/2072c2df/css/…
  • webroot/assets/2072c2df/images/…
  • webroot/assets/2072c2df/js/…

Kuthetha ukuthini oku malunga neqela?

Owona mzekelo ulula

Masithathe imeko eqhelekileyo, xa i-PHP ilandelwa yi-nginx ukusasaza idatha engatshintshiyo kunye nokwenza izicelo ezilula. Eyona ndlela ilula - Ukuthunyelwa nezitya ezibini:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: site
spec:
  selector:
    matchLabels:
      component: backend
  template:
    metadata:
      labels:
        component: backend
    spec:
      volumes:
        - name: nginx-config
          configMap:
            name: nginx-configmap
      containers:
      - name: php
        image: own-image-with-php-backend:v1.0
        command: ["/usr/local/sbin/php-fpm","-F"]
        workingDir: /var/www
      - name: nginx
        image: nginx:1.16.0
        command: ["/usr/sbin/nginx", "-g", "daemon off;"]
        volumeMounts:
        - name: nginx-config
          mountPath: /etc/nginx/conf.d/default.conf
          subPath: nginx.conf

Kwifom eyenziwe lula, i-nginx config ibilisa koku kulandelayo:

apiVersion: v1
kind: ConfigMap
metadata:
  name: "nginx-configmap"
data:
  nginx.conf: |
    server {
        listen 80;
        server_name _;
        charset utf-8;
        root  /var/www;

        access_log /dev/stdout;
        error_log /dev/stderr;

        location / {
            index index.php;
            try_files $uri $uri/ /index.php?$args;
        }

        location ~ .php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            include fastcgi_params;
        }
    }

Xa uqala ukufikelela kwisiza, ii-asethi zivela kwisikhongozeli se-PHP. Kodwa kwimeko yezikhongozeli ezimbini ngaphakathi kwepod enye, i-nginx ayazi nto malunga nezi fayile ze-static, ezimele zinikwe zona (ngokobumbeko). Ngenxa yoko, umxhasi uya kubona impazamo ye-404 kuzo zonke izicelo kwiifayile ze-CSS kunye ne-JS. Isisombululo esilula apha siya kuba kukulungelelanisa uhlaziyo oluqhelekileyo lwezikhongozeli. Inketho yokuqala - ngokubanzi emptyDir:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: site
spec:
  selector:
    matchLabels:
      component: backend
  template:
    metadata:
      labels:
        component: backend
    spec:
      volumes:
        - name: assets
          emptyDir: {}
        - name: nginx-config
          configMap:
            name: nginx-configmap
      containers:
      - name: php
        image: own-image-with-php-backend:v1.0
        command: ["/usr/local/sbin/php-fpm","-F"]
        workingDir: /var/www
        volumeMounts:
        - name: assets
          mountPath: /var/www/assets
      - name: nginx
        image: nginx:1.16.0
        command: ["/usr/sbin/nginx", "-g", "daemon off;"]
        volumeMounts:
        - name: assets
          mountPath: /var/www/assets
        - name: nginx-config
          mountPath: /etc/nginx/conf.d/default.conf
          subPath: nginx.conf

Ngoku iifayile ezimileyo ezenziwe kwisikhongozeli zibuyiswa ngu nginx ngokuchanekileyo. Kodwa mandikukhumbuze ukuba esi sisisombululo samandulo, oku kuthetha ukuba akude neyona nto ifanelekileyo kwaye inama-nuances kunye neentsilelo, ezixutyushwa ngezantsi.

Ugcino oluphambili

Ngoku khawufane ucinge ngemeko apho umsebenzisi wayetyelele indawo, elayisha iphepha elinesitayile esikhoyo kwisikhongozeli, kwaye ngelixa wayefunda eli phepha, saphinda sathumela isikhongozeli. Ikhathalogu ye-asethi iphelelwe kwaye isicelo kwi-PHP siyafuneka ukuqalisa ukuvelisa ezintsha. Nangona kunjalo, nangemva koku, ukudibanisa kwi-statics endala kuya kuba yinto engafanelekanga, eya kukhokelela kwiimpazamo ekuboniseni i-statics.

Ukongeza, sinokuba neprojekthi elayishiweyo ngaphezulu okanye ngaphantsi, okuthetha ukuba ikopi enye yesicelo ayisayi kwanela:

  • Masiyinyuse Ukuthunyelwa ukuya kutsho kwiikopi ezimbini.
  • Xa isiza safikelelwa okokuqala, ii-asethi zenziwa kwikopi enye.
  • Ngexesha elithile, i-ingress yagqiba (ngeenjongo zokulinganisa umthwalo) ukuthumela isicelo kwi-replica yesibini, kwaye ezi mpahla zazingekho. Okanye mhlawumbi azisekho kuba sisebenzisa RollingUpdate kwaye okwangoku senza ukusasazwa.

Ngokubanzi, isiphumo kwakhona iimpazamo.

Ukuze ugweme ukulahlekelwa yimpahla endala, unokutshintsha emptyDir phezu hostPath, ukongeza i-static ngokomzimba kwi-node ye-cluster. Le ndlela imbi kuba eneneni kufuneka senze njalo bopha kwindawo ethile yeqela isicelo sakho, kuba - kwimeko yokufudukela kwezinye iindawo - ulawulo aluyi kuqulatha iifayile eziyimfuneko. Okanye uhlobo oluthile lwemvelaphi yongqamaniso phakathi kweendawo zokuhlala luyafuneka.

Ziziphi izicombululo?

  1. Ukuba izixhobo kunye nezixhobo zivumela, ungasebenzisa iiphfs ukucwangcisa ulawulo olufikelelekayo ngokulinganayo kwiimfuno ezimileyo. Amaxwebhu asemthethweni icebisa iidrive ze-SSD, ubuncinci ukuphindaphinda kathathu kunye noqhagamshelo oluzinzileyo "olungqingqwa" phakathi kweendawo zeqela.
  2. Inketho engabalulekanga kangako inokuba kukulungiselela iseva ye-NFS. Nangona kunjalo, ngoko kufuneka uthathele ingqalelo ukunyuka okunokwenzeka kwixesha lokuphendula kwizicelo zokucubungula ngumncedisi wewebhu, kwaye ukunyamezela impazamo kuya kushiya okuninzi. Imiphumo yokungaphumeleli yintlekele: ukulahlekelwa kwentaba kutshabalalisa iqela lokufa phantsi kohlaselo lomthwalo we-LA obalekela esibhakabhakeni.

Phakathi kwezinye izinto, zonke iinketho zokwenza ugcino oluqhubekayo luya kufuna ukucoca ngasemva iiseti eziphelelwe lixesha zeefayile eziqokelelwe kwithuba elithile lexesha. Ngaphambi kwezikhongozeli ezine-PHP ungabeka DaemonSet ukusuka kwi-caching nginx, eya kugcina iikopi ze-asethi ixesha elithile. Oku kuziphatha kuqwalaselwe ngokulula usebenzisa proxy_cache ngobunzulu bokugcina ngeentsuku okanye i-gigabytes yendawo yedisk.

Ukudibanisa le ndlela kunye neenkqubo zefayile ezisasazwayo ezikhankanywe ngasentla kunika intsimi enkulu yokucinga, elinganiselwe kuphela ngohlahlo lwabiwo-mali kunye namandla obugcisa abo baya kuphumeza kunye nokuxhasa. Ngokusuka kumava, sinokuthi inkqubo elula, isebenze ngakumbi. Xa ezo zingqimba zongezwa, kuba nzima kakhulu ukugcina iziseko zophuhliso, kwaye ngexesha elifanayo ixesha elichithwe ekuxilongeni nasekubuyiseleni nakuphi na ukungaphumeleli kwanda.

Ingcebiso

Ukuba ukuphunyezwa kweendlela zokugcina ezicetywayo nazo zibonakala zingafanelekanga kuwe (zinzima, zibiza ...), ngoko kuyafaneleka ukujonga imeko ukusuka kwelinye icala. Oko kukuthi, ukugrumba kuyilo lweprojekthi kunye lungisa ingxaki kwikhowudi, ebotshelelwe kwisakhiwo sedatha esingatshintshiyo emfanekisweni, inkcazo engacacanga yesiqulatho okanye inkqubo "yokufudumala" kunye / okanye i-asethi yangaphambili kwinqanaba lokuhlanganisa umfanekiso. Ngale ndlela sifumana ukuziphatha okuqikelelweyo kunye neseti efanayo yeefayile kuzo zonke iimeko-bume kunye neekopi zesicelo esisebenzayo.

Ukuba sibuyela kumzekelo othile kunye nesakhelo se-Yii kwaye asifuni kwisakhiwo sayo (esingeyiyo injongo yenqaku), kwanele ukubonisa iindlela ezimbini ezidumileyo:

  1. Guqula inkqubo yokwakha umfanekiso ukubeka i-asethi kwindawo eqikelelwayo. Oku kucetyisiwe/kuphunyezwe kwizandiso ezifana yii2-static-asethi.
  2. Chaza ii-hashes ezithile zoluhlu lwee-asethi, njengoko kuxoxwe ngazo umz. le ntetho (ukuqala kwisilayidi esinguNombolo 35). Ngendlela, umbhali wengxelo ekugqibeleni (kwaye kungekho ngaphandle kwesizathu!) Ucebisa ukuba emva kokudibanisa i-asethi kwi-server yokwakha, zilayishe kwindawo yokugcina ephakathi (njenge-S3), phambi kweyiphi indawo ye-CDN.

Iifayile ezikhutshelwayo

Elinye ityala eliya kungena ngokuqinisekileyo xa ufuduka isicelo kwiqela leKubernetes kukugcina iifayile zomsebenzisi kwinkqubo yefayile. Umzekelo, siphinde sibe nesicelo se-PHP esamkela iifayile ngefom yokulayisha, yenza into nabo ngexesha lokusebenza, kwaye uzithumele kwakhona.

Kwi-Kubernetes, indawo apho ezi fayile kufuneka zibekwe khona kufuneka ziqheleke kuzo zonke iikopi zesicelo. Ngokuxhomekeke kubunzima besicelo kunye nesidingo sokuququzelela ukuzingisa kwezi fayile, iinketho zesixhobo esabelwana ngazo ezikhankanywe ngasentla zinokuba yindawo enjalo, kodwa, njengoko sibona, zinemiqobo yazo.

Ingcebiso

Esinye isisombululo usebenzisa ugcino oluhambelana ne-S3 (nokuba luhlobo oluthile lokuzibamba njenge-minio). Ukutshintshela kwi-S3 kuya kufuna utshintsho kwinqanaba lekhowudi, kunye nendlela umxholo oya kuhanjiswa ngayo ekuqaleni, sele sinayo wabhala.

Iiseshoni zabasebenzisi

Ngokwahlukileyo, kuyafaneleka ukuba uqaphele umbutho wokugcinwa kweeseshoni zabasebenzisi. Ngokuqhelekileyo ezi zikwayifayile kwidisk, apho kumxholo we-Kubernetes iya kukhokelela kwizicelo zogunyaziso rhoqo kumsebenzisi ukuba isicelo sakhe siphelela kwesinye isikhongozeli.

Ingxaki isonjululwe ngokuyilayita stickySessions ekungeneni (inqaku lixhaswa kubo bonke abalawuli abadumileyo be-ingress-ukufumana iinkcukacha ezingaphezulu, bona uphononongo lwethu)ukubophelela umsebenzisi kwipod ethile ngesicelo:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: nginx-test
  annotations:
    nginx.ingress.kubernetes.io/affinity: "cookie"
    nginx.ingress.kubernetes.io/session-cookie-name: "route"
    nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
    nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"

spec:
  rules:
  - host: stickyingress.example.com
    http:
      paths:
      - backend:
          serviceName: http-svc
          servicePort: 80
        path: /

Kodwa oku akuyi kuphelisa iingxaki ngokuthunyelwa ngokuphindaphindiweyo.

Ingcebiso

Enye indlela echanekileyo inokuba kukugqithisela isicelo ukugcina iiseshini kwi-memcached, iRedis kunye nezisombululo ezifanayo - ngokubanzi, lahla ngokupheleleyo iinketho zefayile.

isiphelo

Izisombululo zeziseko ezingundoqo ezixutyushwayo kwisicatshulwa zifanelekile ukusetyenziswa kuphela kwifomathi "yeentonga" zexeshana (ezivakala zihle kakhulu ngesiNgesi njengendlela yokusebenza). Zinokuba zifanelekileyo kwizigaba zokuqala zokufuduka kwesicelo kwi-Kubernetes, kodwa akufanele zithathe iingcambu.

Indlela eqhelekileyo ecetyiswayo kukuzisusa ngokuthanda uhlengahlengiso loyilo lwesicelo ngokuhambelana noko sele kusaziwa kwabaninzi. I-12-Factor App. Nangona kunjalo, oku - ukuzisa isicelo kwifomu engenammiselo - ngokuqinisekileyo kuthetha ukuba utshintsho kwikhowudi luya kufuneka, kwaye apha kubalulekile ukufumana ibhalansi phakathi kwezakhono / iimfuno zeshishini kunye nethemba lokuphumeza nokugcina indlela ekhethiweyo. .

PS

Funda nakwibhlog yethu:

umthombo: www.habr.com

Yongeza izimvo