Amafayela endawo lapho uthuthela uhlelo lokusebenza ku-Kubernetes

Amafayela endawo lapho uthuthela uhlelo lokusebenza ku-Kubernetes

Lapho wakha inqubo ye-CI/CD usebenzisa i-Kubernetes, ngezinye izikhathi inkinga iphakama yokungahambisani phakathi kwezidingo zengqalasizinda entsha kanye nesicelo esidluliselwa kuyo. Ikakhulukazi, esiteji sokwakha isicelo kubalulekile ukuthola один isithombe esizosetshenziswa ku всех izindawo zamaphrojekthi namaqoqo. Lesi simiso sisekela okulungile ngokusho kwe-Google ukuphathwa kweziqukathi (ngaphezu kwesisodwa mayelana nalokhu wakhuluma kanye nomnyango wethu wezobuchwepheshe).

Kodwa-ke, ngeke ubone noma ubani ezimeni lapho ikhodi yesayithi isebenzisa uhlaka olwenziwe ngomumo, ukusetshenziswa okubeka imingcele ekusetshenzisweni kwayo okuqhubekayo. Futhi nakuba “kusendaweni evamile” lokhu kulula ukubhekana nakho, ku-Kubernetes lokhu kuziphatha kungase kube inkinga, ikakhulukazi uma uhlangabezana nakho okokuqala. Nakuba umqondo wokusungula ungaqhamuka nezixazululo zengqalasizinda ezibonakala zisobala noma zizinhle uma uqala nje... kubalulekile ukukhumbula ukuthi izimo eziningi zingakwazi futhi kufanele zixazululwe ngokwezakhiwo.

Ake sibheke izixazululo ezithandwayo zokulungisa amafayela ezingaholela emiphumeleni engathandeki lapho usebenzisa iqoqo, futhi siveze nendlela elungile kakhudlwana.

Isitoreji esimile

Ukufanekisa, cabanga ngohlelo lwewebhu olusebenzisa uhlobo oluthile lwejeneretha emile ukuze uthole isethi yezithombe, izitayela, nezinye izinto. Isibonelo, uhlaka lwe-Yii PHP lunomphathi wefa owakhelwe ngaphakathi okhiqiza amagama ahlukile wemibhalo. Ngokufanelekile, okukhiphayo kuyisethi yezindlela zesayithi elimile ngokusobala ezingaphambanisani (lokhu kwenziwa ngenxa yezizathu ezimbalwa - isibonelo, ukuqeda izimpinda lapho izingxenye eziningi zisebenzisa insiza efanayo). Ngakho-ke, ngaphandle kwebhokisi, okokuqala lapho ufinyelela imojula yensiza yewebhu, amafayela amile (empeleni, ngokuvamile ama-symlink, kodwa ngaphezulu kwalokho kamuva) ayakhiwa futhi abekwe ngohlu lwemibhalo oluvamile lwempande oluhlukile kulokhu kuthunyelwa:

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

Kusho ukuthini lokhu mayelana neqoqo?

Isibonelo esilula

Ake sithathe icala elivamile, lapho i-PHP yandulelwa yi-nginx ukusabalalisa idatha emile nokucubungula izicelo ezilula. Indlela elula - Ukuthunyelwa ngeziqukathi ezimbili:

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

Ngefomu elenziwe lula, ukucushwa kwe-nginx kubilisa kokulandelayo:

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

Lapho uqala ukufinyelela isayithi, amafa avela esitsheni se-PHP. Kodwa esimweni seziqukathi ezimbili ngaphakathi kwe-pod eyodwa, i-nginx ayazi lutho mayelana nalawa mafayela amile, okumele (ngokokucushwa) anikezwe wona. Ngenxa yalokho, iklayenti lizobona iphutha elingu-404 lazo zonke izicelo kumafayela e-CSS kanye ne-JS. Isixazululo esilula lapha kungaba ukuhlela inkomba evamile yeziqukathi. Inketho yokuqala - jikelele 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

Manje amafayela amile akhiqizwe esitsheni anikezwa i-nginx ngendlela efanele. Kodwa ake ngikukhumbuze ukuthi lesi yisixazululo sakudala, okusho ukuthi asikude neze futhi sinama-nuances kanye nokushiyeka kwayo, okuxoxwa ngakho ngezansi.

Isitoreji esithuthuke kakhulu

Manje cabanga ngesimo lapho umsebenzisi avakashele isayithi, alayishe ikhasi elinezitayela ezitholakala esitsheni, futhi ngenkathi efunda leli khasi, saphinde safaka isiqukathi. Ikhathalogi yezimpahla ayinalutho futhi isicelo ku-PHP siyadingeka ukuze kuqalwe ukukhiqiza ezintsha. Kodwa-ke, ngisho nangemva kwalokhu, izixhumanisi eziya ku-statics ezindala ngeke zingasebenzi, okuzoholela emaphutheni ekuboniseni ama-statics.

Ngaphezu kwalokho, cishe sinephrojekthi elayishiwe kakhulu noma encane, okusho ukuthi ikhophi eyodwa yohlelo lokusebenza ngeke yanele:

  • Masiyikhulise Ukuthunyelwa kufika kuma-replicas amabili.
  • Lapho isayithi liqala ukufinyelelwa, amafa adalwa ngomfanekiso owodwa.
  • Ngesinye isikhathi, i-ingress inqume (ngezinjongo zokulinganisa umthwalo) ukuthumela isicelo kumfanekiso wesibili, futhi lezi zimpahla bezingakafiki. Noma mhlawumbe azisekho ngoba sisebenzisa RollingUpdate futhi okwamanje senza ukuthunyelwa.

Ngokuvamile, umphumela uphinde ube namaphutha.

Ukuze ugweme ukulahlekelwa amafa amadala, ungashintsha emptyDir on hostPath, ingeza i-static ngokomzimba ku-cluster node. Le ndlela yokwenza yimbi ngoba empeleni kufanele bophezela ku-cluster node ethile isicelo sakho, ngoba - uma kwenzeka uthuthela kwamanye ama-node - uhla lwemibhalo ngeke luqukathe amafayela adingekayo. Noma uhlobo oluthile lokuvumelanisa lwemibhalo yangemuva phakathi kwamanodi luyadingeka.

Yiziphi izixazululo?

  1. Uma ihadiwe nezinsiza kuvumela, ungasebenzisa cephs ukuhlela uhla lwemibhalo olufinyeleleka ngokulinganayo lwezidingo ezimile. Amadokhumenti asemthethweni incoma amadrayivu e-SSD, okungenani ukuphindaphinda okuphindwe kathathu kanye noxhumano oluzinzile “olugqinsi” phakathi kwama-cluster node.
  2. Inketho engadingi kakhulu kungaba ukuhlela iseva ye-NFS. Kodwa-ke, lapho-ke udinga ukunaka ukwanda okungenzeka kwesikhathi sokuphendula sokucubungula izicelo yiseva yewebhu, futhi ukubekezelelana kwamaphutha kuzoshiya okuningi okufanele ukwenze. Imiphumela yokwehluleka iyinhlekelele: ukulahlekelwa kwentaba kubhubhisa iqoqo lishone ngaphansi kwengcindezi yomthwalo we-LA ogijimela esibhakabhakeni.

Phakathi kwezinye izinto, zonke izinketho zokudala isitoreji esiqhubekayo zizodinga ukuhlanza ingemuva amasethi aphelelwe yisikhathi amafayela aqoqwe phakathi nenkathi ethile yesikhathi. Ngaphambi kweziqukathi ezine-PHP ungabeka I-DaemonSet kusuka kunqolobane ye-nginx, ezogcina amakhophi ezimpahla isikhathi esilinganiselwe. Lokhu kuziphatha kulungiseka kalula kusetshenziswa proxy_cache ngokujula kwesitoreji ngezinsuku noma amagigabhayithi esikhala sediski.

Ukuhlanganisa le ndlela nezinhlelo zefayela ezisabalalisiwe ezishiwo ngenhla kunikeza insimu enkulu yokucabanga, elinganiselwe kuphela isabelomali namandla obuchwepheshe alabo abazoyisebenzisa futhi bayisekele. Ngokuhlangenwe nakho, singasho ukuthi uma uhlelo lulula, lusebenza ngokuzinza. Lapho izendlalelo ezinjalo zengezwa, kuba nzima kakhulu ukugcina ingqalasizinda, futhi ngesikhathi esifanayo isikhathi esichithwa ekuxilongeni nasekululameni kunoma yikuphi ukwehluleka siyakhula.

Isincomo

Uma ukuqaliswa kwezinketho zesitoreji ezihlongozwayo kubonakala kungenasisekelo kuwe (kuyinkimbinkimbi, kuyabiza ...), ngakho-ke kufanelekile ukubheka isimo ngakolunye uhlangothi. Okungukuthi, ukumba ku-architecture yephrojekthi kanye lungisa inkinga kukhodi, ehlanganiswe nesakhiwo sedatha ethile esimile esithombeni, incazelo engacacile yokuqukethwe noma inqubo "yokufudumala" kanye/noma izimpahla ezihlanganiswe ngaphambilini esigabeni sokuhlanganisa isithombe. Ngale ndlela sithola ukuziphatha okungabikezelwa ngokuphelele kanye nesethi efanayo yamafayela azo zonke izindawo nezifaniso zohlelo lokusebenza olusebenzayo.

Uma sibuyela esibonelweni esiqondile ngohlaka lwe-Yii futhi singahloli ukwakheka kwayo (okungeyona inhloso ye-athikili), kwanele ukuveza izindlela ezimbili ezithandwayo:

  1. Shintsha inqubo yokwakha isithombe ukuze ubeke amafa endaweni ebikezelwayo. Lokhu kuyaphakanyiswa/kwenziwa ezandisweni ezifana yii2-static-assets.
  2. Chaza ama-hashes athile ezinkomba zempahla, njengoba kuxoxwe ngakho ku-isb. lesi sethulo (kusukela kusilayidi No. 35). Ngendlela, umbhali wombiko ekugcineni (futhi hhayi ngaphandle kwesizathu!) Weluleka ukuthi ngemva kokuhlanganisa izimpahla kuseva yokwakha, zilayishe endaweni yokugcina emaphakathi (njenge-S3), phambi kwalapho i-CDN ibeka khona.

Amafayela atholakalayo

Elinye icala elizosebenza lapho uthutha uhlelo lokusebenza kuqoqo le-Kubernetes ligcina amafayela omsebenzisi ohlelweni lwefayela. Isibonelo, siphinde sibe nohlelo lokusebenza lwe-PHP olwamukela amafayela ngefomu lokulayisha, lenze okuthile ngawo ngesikhathi sokusebenza, futhi liwabuyisele emuva.

Ku-Kubernetes, indawo lapho lawa mafayela kufanele abekwe khona kufanele ifane kuzo zonke izifaniso zohlelo lokusebenza. Ngokuya ngobunkimbinkimbi bohlelo lokusebenza kanye nesidingo sokuhlela ukuphikelela kwalawa mafayela, izinketho zedivayisi ezabiwe ezibalwe ngenhla zingase zibe indawo enjalo, kodwa, njengoba sibona, zinezinkinga zazo.

Isincomo

Isixazululo esisodwa usebenzisa isitoreji esihambelana ne-S3 (ngisho noma kuwuhlobo oluthile lwesigaba esizibambele wena njenge-minio). Ukushintshela ku-S3 kuzodinga izinguquko ezingeni lekhodi, nokuthi okuqukethwe kuzolethwa kanjani ekugcineni, sesivele senzile wabhala.

Izikhathi zomsebenzisi

Ngokwehlukana, kufanelekile ukuqaphela inhlangano yokugcina izikhathi zabasebenzisi. Ngokuvamile lawa futhi amafayela kudiski, okuyinto kumongo we-Kubernetes azoholela ezicelweni zokugunyazwa njalo kumsebenzisi uma isicelo sakhe siphelela kwesinye isitsha.

Inkinga ixazululwa ngokwengxenye ngokuvula stickySessions ekungeneni (isici sisekelwa kuzo zonke izilawuli zokungena ezidumile - ukuze uthole imininingwane eyengeziwe, bona isibuyekezo sethu)ukubophezela umsebenzisi ku-pod ethile ngohlelo lokusebenza:

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 lokhu ngeke kuqede izinkinga ngokuthunyelwa okuphindaphindiwe.

Isincomo

Indlela elungile kungaba ukudlulisela isicelo ku ukugcina amaseshini ku-memcached, Redis kanye nezixazululo ezifanayo - ngokuvamile, shiya ngokuphelele izinketho zefayela.

isiphetho

Izixazululo zengqalasizinda okuxoxwe ngazo embhalweni zifanele ukusetshenziswa kuphela ngefomethi “yezinduku” zesikhashana (okuzwakala kukuhle kakhulu ngesiNgisi njengokusebenza). Angase afaneleke ezigabeni zokuqala zokuthutha uhlelo lokusebenza ku-Kubernetes, kodwa akufanele agxile.

Indlela ejwayelekile enconyiwe iwukuba uzisuse ukuze uvune ukuguqulwa kwesakhiwo sohlelo lokusebenza ngokuhambisana nalokho osekwaziwa abaningi. 12-Factor App. Kodwa-ke, lokhu - ukuletha isicelo efomini elingasho lutho - kusho ukuthi izinguquko kwikhodi zizodingeka, futhi lapha kubalulekile ukuthola ibhalansi phakathi kwamakhono/izidingo zebhizinisi kanye namathemba okusebenzisa nokugcina indlela ekhethiwe. .

PS

Funda futhi kubhulogi yethu:

Source: www.habr.com

Engeza amazwana