Files locales cum transmigrandi applicatione ad Kubernetes

Files locales cum transmigrandi applicatione ad Kubernetes

Cum processu CI/CD aedificando utens Kubernetes, interdum quaestio oritur de repugnantia inter exigentias novae infrastructurae et applicatio ad eam transferenda. Praesertim in applicatione scaenam aedificare magni momenti est ΠΎΠ΄ΠΈΠ½ imago quae in " всСх ambitus exstent et racemi. Hoc principium recte subest iuxta Google continens procuratio (de hoc plus semel et dixit: et nostra technica Dicasterii).

Tamen, aliquem in adiunctis in quibus situs codice utitur praeparato compage utitur, quarum usus restrictiones in ulteriore usu imponit. Et dum in ambitu "normali" hoc facile tractatur, in Kubernetes haec agendi ratio quaestio fieri potest, praesertim cum primum illud occurris. Dum mens inventiva ascendere potest cum solutionibus infrastructuris, quae prima specie manifestae vel etiam bonae videntur... Interest meminisse plures condiciones posse et debere. architecturae solvitur.

Inspiciamus solutiones populares quas habemus pro thesaurariis imaginum quae ad consequentias molestas ducere possunt cum botrum operantem et etiam viam rectiorem monstrare.

Static storage

Ad illustrandum, considera applicationis interreti, quo utitur generator static aliquo genere ad obtinendum statutum imaginum, stilorum et aliarum rerum. Exempli gratia, compage Yii PHP constructum-in dignissim procurator, qui nomina singularia presul gignit. Itaque, output est viarum statis pro situ, quod manifesto inter se non secant (hoc pluribus de causis factum est - exempli gratia, ut duplicata eliminanda, cum multiplex pars eadem subsidio utatur). Itaque e cista primum accesseris instrumenti interretialem moduli, imaginum staticarum (re vera saepe symlinka, sed plura postea) formata et posita sunt cum directorio radicis communis singularis huius instituti:

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

Quid est hoc in botro?

Simplicissimum exemplum

Causam satis communem sumamus, cum PHP antecedit ab nginx ut notitias statas et processus simplices petitiones distribuat. Facillima via est - instruere cum duobus vasis;

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

In simplici forma, nginx config ulcera usque ad sequentem;

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

Cum primum locum accesseris, bona in PHP continente apparent. In duobus autem vasis intra unum vasculum, nginx nihil scit de his staticis, quae (secundum configurationem) eis dari debent. Quam ob rem cliens errorem omnium petitionum CSS et JS imagini videbit 404. Solutio simplicissima hic esset commune directorium pro vasis ordinare. Optio primitiva - generalis 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

Nunc imagini statice generatae in vase recte ab nginx ministrantur. Sed admoneo te hanc esse solutionem primitivam, quae significat longe abesse a idealibus, et habet proprias nugas et defectus, de quibus infra agetur.

Provectioris storage

Nunc condicionem finge ubi locum user visitavit, paginam stylis praesto in continente onustam, et dum hanc paginam legebat, vas re- plicamus. Bonorum catalogus inanis factus est et petitio ad PHP requiritur ut novos generare incipiant. Sed etiam post haec, nexus statorum veterum nihil attinet, quae errores in staticis exhibendis inducent.

Praeterea verisimile plus minusve onustum consilium habemus, quod significat unum exemplar applicationis non satis esse;

  • Sit scandere eum instruere ad duas replicas.
  • Cum locus primus accessisset, res in una effigie creata sunt.
  • In aliquo puncto, ingressus decrevit (pro onere conpensationis proposita) petitionem mittendi ad secundam imaginem, quae bona nondum erant. Vel fortasse non sunt ibi quia utimur RollingUpdate et in ipso tempore nos instruere agimus.

Fere fit iterum errata.

Ad vitare bona vetera amissa, mutare potes emptyDir on hostPathaddito corpore statice botri nodi. Aditus malus est, quia in actu habemus ligabis ad specifica botrum portassent nodi tuum applicatione, quia - in casu movendi ad alias nodos - directorium paginas necessarias non continebit. Vel requiritur aliqua synchronisatio directorii curriculi inter nodi.

Quae sunt solutiones?

  1. Si hardware et opes sinunt, uti potes cephfs aeque accessibilis directorium pro stabilis necessitatibus ordinare. Documenta officialis Commendat SSD impellit, triplicem saltem replicationem et connexionem inter nodos botri stabilis "densam".
  2. Optio minus postulans esset NFS ministratorem ordinare. Sed tunc debes considerare incrementum possibilium responsionis temporis ad processus petitiones per telam server, et culpa tolerantia multum desiderandum relinquet. Consequentiae defectio sunt calamitosas: amissio montis ruinae botrus ad mortem pressus LA onere ruens in caelum.

Inter alia, omnia optiones repositionis faciendi assiduam requiret background purgatio outdated sets of files accumulated over a certain period time. Ante vasa cum PHP pones DaemonSet a caching nginx, quod exemplaria bonorum ad tempus reponunt. Hoc mores facile configurable utens proxy_cache cum profunditate repono in diebus vel gigabytes orbis tractus.

Coniungendo hanc methodum cum systematis fasciculi distributis supra memoratis ingens imaginandi campum praebet, solum a rationibus technicis et technicis limitibus eorum qui efficiunt et sustinent. Ab experientia dicere possumus quod ratio simplicior, eo stabilior operatur. Quibus stratis additis, multo difficilius fit infrastructuram conservare, simulque tempus in diagnostione et ex defectibus recipiendis augeri.

commendaticiis

Si exsecutio optionum repositionis propositae tibi etiam iniusta videtur (complicata, pretiosa...), tum res ex altera parte spectare digna est. Nempe ut in architecturae projecturae fodere et figere quaestionem in codiceligatum ad aliquod statice notitiae structuram in imagine, indubitata definitio contentorum seu procedendi "calfaciendi" et/vel componendi res ad imaginem conventus scaenam. Hoc modo omnino praevidere mores consequimur eundemque documentorum ordinem ad omnes ambitus ac replicationes applicationis currentis.

Si ad peculiare exemplum cum Yii compage revertamur, nec in eius structuram (quod non est propositum articulum) redeamus, satis est duos aditus populares notare;

  1. Mutare imaginem processus constructum ad bona ponere in praedictio loco. Hoc est suggesserant / implemented in extensionibus sicut yii2-static-bona.
  2. Definire hashes specificas pro directoriis dignissim, de quibus in v.g. haec propositio (incipiens a dicto No. 35). Obiter auctor relationis ultimo (nec sine causa!) monet ut postquam bona collecta in servo aedificanda sint, eas in tabularium centrale (sicut S3), ante quem locum CDN constituant.

Downloadable files

Alius casus erit certus exoriri cum applicatione ad Kubernetes botrum migrans, tabulas usoris in scriptione electronicarum recondens. Exempli gratia, denuo habemus applicationem PHP quae per formam fasciculi acceptat, cum eis aliquid operatur in operatione, et remittit eas.

In Kubernetes, locus ubi hae tabulae ponendae sunt omnibus replicationibus applicationis commune esse debet. Secundum multiplicitatem applicationis et necessitatem ordinandi pertinaciam horum imaginum, memoratae optiones communes fabricae possunt esse tali loco, sed, ut videmus, habent sua incommoda.

commendaticiis

Una solutio est per S3-compatible repono (etsi genus quoddam sui exercitus est sicut minio). Switching ad S 3 requiret mutationes in codice gradu "et quam contentus in prima parte tradetur, iam habemus? scripsit.

User sessiones

Separatim memorabile est ordinem repositionis sessionum usoris. Saepe hae quoque tabulae in disco sunt, quae in contextu Kubernetes constantes petitiones usoris habebunt, si petitio eius in alio vase desinat.

Quaestio partim solvitur convertendo stickySessions in introitu (Pluma sustentatur in omnibus moderatoribus popularibus ingressu - pro magis details, see" nostra recensionem)user ligare ad certum vasculum cum applicatione:

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

Sed hoc problemata crebris institutis non tolletur.

commendaticiis

Rectior via esset ad applicationem transferendi Sessiones actarum in memcached, Redis et similibus solutionibus - generatim, file optiones omnino deserit.

conclusio,

Solutiones infrastructurae in textu tractatae usu dignae sunt tantum forma temporalis "fusculi" (quae pulchrius sonat Anglice quam habemus opus). Possunt interesse in primis ad applicationem ad Kubernetes migrandi, sed radicari non debent.

Semita generalis commendata est ad favorem architecturae applicationis removendi secundum ea quae iam multis nota sunt. 12-Factor App. Attamen haec - applicatio ad formam statem deducendam - necessario significat mutationes quae in codice requiruntur, et hic interest invenire stateram inter facultates/requisita- tiones negotii et exspectationes ad iter electum exsequendum et tuendum. .

PS

Lege etiam in nostro diario:

Source: www.habr.com