Comhaid áitiúla nuair a aistrítear feidhmchlár go Kubernetes

Comhaid áitiúla nuair a aistrítear feidhmchlár go Kubernetes

Nuair a bhíonn próiseas CI/CD á thógáil ag baint úsáide as Kubernetes, tagann an fhadhb chun cinn uaireanta maidir le neamh-chomhoiriúnacht idir riachtanais an bhonneagair nua agus an t-iarratas atá á aistriú chuige. Go háirithe, ag an gcéim tógála iarratais tá sé tábhachtach a fháil amháin íomhá a úsáidfear i Gach timpeallachtaí agus cnuasaigh tionscadal. Tacaíonn an prionsabal seo leis an gceart de réir Google bainistíocht coimeádán (níos mó ná uair amháin faoi seo a dúirt agus ár roinn theicniúil).

Mar sin féin, ní fheicfidh tú aon duine i gcásanna ina n-úsáideann cód an tsuímh creat réamhdhéanta, a chuireann srianta ar a úsáid tuilleadh. Agus cé gur furasta déileáil leis seo i “gnáththimpeallacht”, is féidir leis an iompar seo a bheith ina fhadhb i Kubernetes, go háirithe nuair a thagann tú trasna air den chéad uair. Cé gur féidir le meon airgtheach teacht ar réitigh infrastruchtúir atá soiléir nó fiú go maith ar an gcéad amharc... tá sé tábhachtach cuimhneamh gur féidir agus gur chóir go mbeadh formhór na gcásanna. a réiteach go ailtireachta.

Breathnaímid ar réitigh oibre a bhfuil an-tóir orthu chun comhaid a stóráil a d'fhéadfadh iarmhairtí míthaitneamhacha a bheith mar thoradh orthu nuair a bhíonn braisle á oibriú againn, agus cuirfimid cosán níos ceart in iúl freisin.

Stóráil statach

Mar léiriú, smaoinigh ar fheidhmchlár gréasáin a úsáideann gineadóir statach de chineál éigin chun sraith íomhánna, stíleanna agus rudaí eile a fháil. Mar shampla, tá bainisteoir sócmhainne ionsuite ag creat Yii PHP a ghineann ainmneacha eolaire uathúla. Dá réir sin, is sraith cosáin é an t-aschur don suíomh statach nach léir go dtrasnaíonn siad lena chéile (rinneadh é seo ar chúiseanna éagsúla - mar shampla, chun deireadh a chur le dúbailt nuair a úsáideann comhpháirteanna iolracha an acmhainn chéanna). Mar sin, as an mbosca, an chéad uair a fhaigheann tú rochtain ar mhodúl acmhainne gréasáin, cruthaítear comhaid statacha (go minic, simplíinks go minic, ach níos mó air sin níos déanaí) agus leagtar amach iad le comheolaire fréamhacha coiteann atá uathúil don imscaradh seo:

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

Cad a chiallaíonn sé seo i dtéarmaí braisle?

An sampla is simplí

Glacaimis cás measartha coitianta, nuair a bhíonn nginx roimh PHP chun sonraí statacha a dháileadh agus iarratais shimplí a phróiseáil. An bealach is éasca - imscaradh le dhá choimeádán:

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

I bhfoirm shimplithe, baineann cumraíocht nginx síos go dtí an méid seo a leanas:

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;
        }
    }

Nuair a fhaigheann tú rochtain ar an suíomh den chéad uair, feictear sócmhainní sa choimeádán PHP. Ach i gcás dhá choimeádán laistigh de pod amháin, níl a fhios ag nginx faoi na comhaid statacha seo, ar cheart (de réir na cumraíochta) a thabhairt dóibh. Mar thoradh air sin, feicfidh an cliant earráid 404 maidir le gach iarratas ar chomhaid CSS agus JS. Is é an réiteach is simplí anseo ná eolaire coiteann do choimeádáin a eagrú. Rogha primitive - ginearálta 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

Anois déanann nginx comhaid statacha a ghintear sa choimeádán a sheirbheáil i gceart. Ach lig dom i gcuimhne duit gur réiteach primitive é seo, rud a chiallaíonn go bhfuil sé i bhfad ó idéalach agus go bhfuil a nuances agus easnaimh féin, a phléitear thíos.

Stóráil níos airde

Anois samhlaigh cás inar thug úsáideoir cuairt ar an suíomh, lódáil sé leathanach leis na stíleanna a bhí ar fáil sa choimeádán, agus nuair a bhí an leathanach seo á léamh aige, rinneamar an coimeádán a ath-imscaradh. Tá catalóg na sócmhainní folamh anois agus tá gá le hiarratas chuig PHP chun cinn nua a ghiniúint. Mar sin féin, fiú ina dhiaidh seo, beidh naisc le sean-statacha neamhábhartha, rud a fhágann go mbeidh earráidí i dtaispeáint na statacha.

Ina theannta sin, is dócha go mbeidh tionscadal níos mó nó níos lú luchtaithe againn, rud a chiallaíonn nach leor cóip amháin den iarratas:

  • Déanaimis é a scála imscaradh suas le dhá mhacasamhail.
  • Nuair a tháinig rochtain ar an suíomh den chéad uair, cruthaíodh sócmhainní in aon mhacasamhail amháin.
  • Ag pointe éigin, chinn ingress (chun críocha cothromaithe ualaigh) iarratas a chur chuig an dara macasamhail, agus ní raibh na sócmhainní sin ann fós. Nó b'fhéidir nach bhfuil siad ann a thuilleadh toisc go n-úsáideann muid RollingUpdate agus i láthair na huaire táimid ag déanamh imscaradh.

Go ginearálta, is é an toradh arís botúin.

Chun a sheachaint a chailliúint sócmhainní d'aois, is féidir leat a athrú emptyDir ar hostPath, ag cur statach go fisiciúil le nód braisle. Tá an cur chuige seo olc mar ní mór dúinn i ndáiríre ceangal le nód braisle ar leith d'iarratas, mar - i gcás bogadh chuig nóid eile - ní bheidh na comhaid riachtanacha san eolaire. Nó tá gá le sioncrónú eolaire cúlra de chineál éigin idir nóid.

Cad iad na réitigh?

  1. Má cheadaíonn crua-earraí agus acmhainní, is féidir leat é a úsáid cephfs chun eolaire chomh inrochtana a eagrú do riachtanais statacha. Doiciméadúchán oifigiúil molann sé thiomáineann SSD, macasamhlú trí huaire ar a laghad agus nasc cobhsaí “tiubh” idir nóid bhraisle.
  2. Rogha nach bhfuil chomh dian sin ná freastalaí NFS a eagrú. Mar sin féin, ní mór duit a chur san áireamh an méadú féideartha ar an am freagartha ar iarratais a phróiseáil ag an bhfreastalaí, agus beidh lamháltas lochtanna a fhágáil go leor le bheith inmhianaithe. Is iad na hiarmhairtí teip tubaisteach: caillteanas an mount dooms an bhraisle chun báis faoi bhrú an t-ualach LA rushing isteach sa spéir.

I measc rudaí eile, beidh gá le gach rogha chun stóráil leanúnach a chruthú glanadh cúlra tacair as dáta de chomhaid carntha thar thréimhse áirithe ama. I os comhair coimeádáin le PHP is féidir leat a chur DaemonSet ó caching nginx, a stórálfar cóipeanna de shócmhainní ar feadh tréimhse teoranta. Is furasta an iompar seo a chumrú trí úsáid a bhaint as proxy_cache le doimhneacht stórála i laethanta nó ghigibheart de spás diosca.

Tríd an modh seo a chomhcheangal leis na córais chomhaid dáilte a luaitear thuas, tá réimse ollmhór samhlaíochta ar fáil, teoranta ag buiséad agus acmhainneacht theicniúil na ndaoine a chuirfidh i bhfeidhm agus a thacóidh leis. Ó thaithí, is féidir linn a rá go bhfuil an córas níos simplí, an níos cobhsaí a oibríonn sé. Nuair a chuirtear sraitheanna den sórt sin leis, bíonn sé i bhfad níos deacra an bonneagar a chothabháil, agus ag an am céanna méadaítear an t-am a chaitear ar dhiagnóisiú agus ar aisghabháil ó aon teipeanna.

Moladh

Más cosúil nach bhfuil údar maith agat le cur i bhfeidhm na roghanna stórála atá beartaithe (casta, costasach ...), ansin is fiú féachaint ar an scéal ón taobh eile. Eadhon, tochailt isteach san ailtireacht tionscadail agus an fhadhb a réiteach sa chód, ceangailte le roinnt struchtúr sonraí statach san íomhá, sainmhíniú gan athbhrí ar an ábhar nó ar an nós imeachta chun “téamh suas” agus/nó sócmhainní a réamh-thiomsú ag céim thionóil na híomhá. Ar an mbealach seo faigheann muid iompar fíor-intuartha agus an tsraith comhaid céanna do gach timpeallacht agus macasamhail den fheidhmchlár reatha.

Má théimid ar ais chuig an sampla sonrach le creat Yii agus nach ndéanann muid iniúchadh ar a struchtúr (nach é cuspóir an ailt é), is leor dhá chur chuige coitianta a chur in iúl:

  1. Athraigh an próiseas tógála íomhá chun sócmhainní a chur in áit intuartha. Moltar/cuirtear é seo i bhfeidhm i síntí mar yii2-sócmhainní statacha.
  2. Sainmhínigh hashes sonracha le haghaidh eolairí sócmhainní, mar a pléadh i e.g. an cur i láthair seo (ag tosú ó sleamhnán Uimh. 35). Dála an scéil, tugann údar na tuarascála comhairle ar deireadh (agus ní gan chúis!) Tar éis sócmhainní a chur le chéile ar an bhfreastalaí tógála, iad a uaslódáil chuig stór lárnach (cosúil le S3), agus CDN a chur os a chomhair.

Íoslódálacha

Cás eile a thiocfaidh i bhfeidhm go cinnte nuair a aistrítear feidhmchlár chuig braisle Kubernetes ná comhaid úsáideora a stóráil sa chóras comhaid. Mar shampla, tá feidhmchlár PHP againn arís a ghlacann le comhaid trí fhoirm uaslódála, a dhéanann rud éigin leo le linn oibriú, agus a sheolann ar ais iad.

In Kubernetes, ba cheart go mbeadh an áit inar cheart na comhaid seo a chur i bpáirt ag gach macasamhail den fheidhmchlár. Ag brath ar chastacht an fheidhmchláir agus ar an ngá atá le marthanacht na gcomhad seo a eagrú, d'fhéadfadh go mbeadh na roghanna gléas roinnte thuasluaite ina áit den sórt sin, ach, mar a fheicimid, tá a gcuid míbhuntáistí acu.

Moladh

Is é réiteach amháin ag baint úsáide as stóráil S3-comhoiriúnach (fiú más catagóir féin-óstáilte de chineál éigin é cosúil le minio). Teastóidh athruithe chun aistriú go S3 ag leibhéal an chóid, agus conas a sheachadfar ábhar ar an taobh tosaigh, atá againn cheana féin scríobh.

Seisiúin úsáideora

Ar leithligh, is fiú a thabhairt faoi deara eagrú stórála seisiúin úsáideoirí. Go minic is comhaid ar dhiosca iad seo freisin, agus i gcomhthéacs Kubernetes beidh iarratais ar údarú leanúnach ón úsáideoir má chríochnaíonn a iarratas i gcoimeádán eile.

Réitítear an fhadhb go páirteach trí chumasú stickySessions ar dul isteach (tacaítear leis an ngné i ngach rialtóir ingress tóir - le haghaidh tuilleadh sonraí, féach ár n-athbhreithniú)chun an t-úsáideoir a cheangal le pod ar leith leis an bhfeidhmchlár:

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: /

Ach ní chuirfidh sé seo deireadh le fadhbanna le himscaradh arís agus arís eile.

Moladh

Bealach níos ceart ná an t-iarratas a aistriú go dtí seisiúin a stóráil i memcached, Redis agus réitigh dá samhail - go ginearálta, roghanna comhad a thréigean go hiomlán.

Conclúid

Ní fiú úsáid a bhaint as na réitigh bhonneagair a phléitear sa téacs ach amháin i bhformáid “crutches” sealadach (a fuaimeanna níos áille i mBéarla mar workaround). Féadfaidh siad a bheith ábhartha sna chéad chéimeanna d'iarratas a aistriú go Kubernetes, ach níor cheart go nglacfadh siad fréamhacha.

Is é an cosán molta ginearálta fáil réidh leo i bhfabhar modhnú ailtireachta an iarratais i gcomhréir leis an méid atá ar eolas go maith cheana féin ag go leor. App 12-Fachtóir. Mar sin féin, ciallaíonn sé seo - an t-iarratas a thabhairt go foirm gan stát - go mbeidh gá le hathruithe ar an gcód, agus anseo tá sé tábhachtach cothromaíocht a aimsiú idir cumais/riachtanais an ghnó agus na hionchais maidir le cur i bhfeidhm agus cothabháil an chosáin roghnaithe. .

PS

Léigh freisin ar ár mblag:

Foinse: will.com

Add a comment