Ny rakitra eo an-toerana rehefa mamindra fampiharana mankany Kubernetes

Ny rakitra eo an-toerana rehefa mamindra fampiharana mankany Kubernetes

Rehefa manangana fizotry ny CI/CD amin'ny fampiasana Kubernetes, indraindray dia mipoitra ny olana amin'ny tsy fifanarahana eo amin'ny fepetra takian'ny fotodrafitrasa vaovao sy ny fampiharana afindra any aminy. Indrindra indrindra, amin'ny dingana fananganana fampiharana dia zava-dehibe ny mahazo один sary izay hampiasaina ao всех tontolon'ny tetikasa sy cluster. Io fitsipika io no fototry ny marina araka ny Google fitantanana container (mihoatra ny indray mandeha momba izany niteny ary ny departemanta teknika).

Na izany aza, tsy hahita na iza na iza ianao amin'ny toe-javatra misy ny kaody an'ny tranokala mampiasa rafitra efa vita, ny fampiasana azy dia mametraka fameperana amin'ny fampiasana azy bebe kokoa. Ary raha ao anatin'ny "tontolo mahazatra" dia mora ny miatrika izany, ao amin'ny Kubernetes dia mety ho lasa olana izany fihetsika izany, indrindra rehefa sambany vao sendra azy ianao. Na dia afaka mamorona vahaolana amin'ny fotodrafitrasa toa miharihary na tsara mihitsy aza ny saina mamorona, dia zava-dehibe ny mahatsiaro fa ny ankamaroan'ny toe-javatra dia afaka ary tokony ho voavaha ara-javakanto.

Andeha hojerentsika ny vahaolana mahomby amin'ny fitahirizana rakitra izay mety hiteraka voka-dratsy rehefa miasa cluster, ary manondro lalana marina kokoa.

Fitehirizana static

Mba hanazavana izany dia diniho ny fampiharana tranonkala iray izay mampiasa karazana mpamokatra static mba hahazoana sary, fomba, ary zavatra hafa. Ohatra, ny rafitra Yii PHP dia manana mpitantana fananana naorina izay mamorona anarana lahatahiry tokana. Noho izany, ny vokatra dia andian-dàlana ho an'ny tranokala static izay mazava ho azy fa tsy mifanelanelana (izany dia natao noho ny antony maromaro - ohatra, mba hanafoanana ny dika mitovy rehefa misy singa maromaro mampiasa loharano mitovy). Noho izany, ivelan'ny boaty, ny fotoana voalohany hidiranao amin'ny tranokala loharanon-tserasera, ny rakitra static (raha ny marina, matetika symlinks, fa bebe kokoa amin'izany any aoriana) dia miforona ary apetraka miaraka amin'ny lahatahiry fototra tokana tokana ho an'ity fametrahana ity:

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

Inona no dikan'izany amin'ny resaka cluster?

Ohatra tsotra indrindra

Andeha horaisina ny tranga mahazatra, rehefa ny PHP dia ialohavan'ny nginx mba hizarana angona static sy hikarakarana fangatahana tsotra. Ny fomba tsotra indrindra - fanapariahana miaraka amin'ny kaontenera roa:

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

Amin'ny endrika tsotra, ny config nginx dia midina amin'ireto manaraka ireto:

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

Rehefa miditra voalohany amin'ny tranokala ianao dia miseho ao amin'ny container PHP ny fananana. Fa raha ny kaontenera roa ao anatin'ny pod iray, nginx dia tsy mahalala na inona na inona momba ireo rakitra static ireo, izay (araka ny fanamafisana) dia tokony homena azy ireo. Vokatr'izany dia hahita hadisoana 404 ho an'ny fangatahana rehetra amin'ny rakitra CSS sy JS ny mpanjifa. Ny vahaolana tsotra indrindra eto dia ny fandaminana lahatahiry iraisana ho an'ny container. Primitive safidy - ankapobeny 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

Amin'izao fotoana izao, ny rakitra static novokarina tao anaty container dia atolotry ny nginx araka ny tokony ho izy. Fa avelao aho hampahatsiahy anao fa vahaolana primitive io, izay midika fa lavitra ny idealy ary manana ny nuances sy ny lesoka, izay resahina etsy ambany.

Fitehirizana mandroso kokoa

Alaivo sary an-tsaina ny toe-javatra iray izay nitsidihan'ny mpampiasa ilay tranokala, nametaka pejy iray misy ireo fomba hita ao amin'ny kaontenera, ary raha teo am-pamakiana an'ity pejy ity izy, dia namerina nametraka ilay kaontenera izahay. Lasa foana ny katalaogin'ny fananana ary ilaina ny fangatahana PHP hanombohana mamorona vaovao. Na izany aza, na dia aorian'izany aza, dia tsy hisy dikany ny rohy mankany amin'ny statika taloha, izay hitarika amin'ny fahadisoana amin'ny fampisehoana statika.

Ho fanampin'izay, azo inoana fa manana tetikasa be na kely kokoa izahay, izay midika fa tsy ho ampy ny dika mitovy amin'ny fampiharana:

  • Andao hampitomboina izany fanapariahana hatramin'ny kopia roa.
  • Tamin'ny nidirana voalohany ny tranokala dia noforonina tao anaty kopia iray ny fananana.
  • Tamin'ny fotoana iray, nanapa-kevitra ny ingress (ho an'ny tanjona fampifandanjana entana) handefa fangatahana amin'ny kopia faharoa, ary mbola tsy tao ireo fananana ireo. Na mety tsy eo intsony izy ireo satria ampiasaintsika RollingUpdate ary amin'izao fotoana izao dia manao deployment izahay.

Amin'ny ankapobeny, ny vokany dia fahadisoana indray.

Mba hisorohana ny fahaverezan'ny fananana taloha dia afaka miova ianao emptyDir amin'ny hostPath, manampy static ara-batana amin'ny node cluster. Ratsy io fomba fiasa io satria tsy maintsy manao izany isika mifamatotra amin'ny node cluster manokana ny fampiharana anao, satria - raha mifindra any amin'ny nodes hafa - ny lahatahiry dia tsy ahitana ny rakitra ilaina. Na karazana fampifanarahana lahatahiry ambadika eo anelanelan'ny nodes dia ilaina.

Inona no vahaolana?

  1. Raha mamela ny fitaovana sy ny loharanon-karena dia azonao ampiasaina cephfs handamina lahatahiry azo idirana mitovy amin'ny filana static. Taratasy ofisialy Manoro hevitra ny SSD drive, farafaharatsiny in-telo farafahakeliny ary fifandraisana "matevina" miorina eo amin'ny node cluster.
  2. Ny safidy tsy dia mitaky loatra dia ny mandamina mpizara NFS. Na izany aza, mila mandinika ny mety ho fitomboan'ny fotoana famaliana amin'ny fanodinana ny fangatahana ataon'ny mpizara tranonkala ianao, ary ny fandeferana amin'ny fahadisoana dia hamela be dia be. Loza ny vokatry ny tsy fahombiazana: ny fahaverezan'ny tendrombohitra dia mamono ny vondron'olona ho faty noho ny fanafihan'ny enta-mavesatry ny LA mirohotra eny amin'ny lanitra.

Ankoatra ny zavatra hafa, ny safidy rehetra amin'ny famoronana fitahirizana maharitra dia mitaky fanadiovana ambadika andian-drakitra lany daty voaangona nandritra ny fe-potoana iray. Eo anoloan'ny kaontenera misy PHP azonao apetraka DaemonSet avy amin'ny caching nginx, izay hitahiry dika mitovy amin'ny fananana mandritra ny fotoana voafetra. Ity fihetsika ity dia mora azo ampiasaina proxy_cache miaraka amin'ny halalin'ny fitahirizana ao anatin'ny andro na gigabytes ny habaka kapila.

Ny fampifangaroana an'io fomba io miaraka amin'ireo rafitra fichier zaraina voalaza etsy ambony dia manome sehatra goavana ho an'ny saina, voafetra amin'ny teti-bola sy ny mety ara-teknika an'ireo izay hampihatra sy hanohana azy. Avy amin'ny traikefa, dia afaka milaza isika fa ny tsotra kokoa ny rafitra, ny marin-toerana kokoa miasa. Rehefa ampiana sosona toy izany dia mihasarotra kokoa ny fikojakojana ny fotodrafitrasa, ary miaraka amin'izay koa dia mitombo ny fotoana lany amin'ny fitiliana sy ny fanarenana ny tsy fahombiazana rehetra.

fangatahana

Raha toa ka toa tsy mitombina aminao ihany koa ny fampiharana ireo safidy fitahirizana natolotra (sarotra, lafo...), dia mendrika ny mijery ny zava-misy amin'ny lafiny hafa. Izany hoe, mba hihady amin'ny tetikasa architecture sy amboary ny olana amin'ny code, mifamatotra amin'ny firafitry ny angon-drakitra static ao amin'ny sary, famaritana mazava tsara ny atiny na ny fomba fiasa amin'ny "fanafanana" sy/na fanangonam-bokatra mialoha eo amin'ny sehatry ny fanangonana sary. Amin'izany fomba izany no ahazoantsika fitondrantena azo vinaniana tanteraka sy ny fitambaran'ny rakitra ho an'ny tontolo rehetra sy ny dika mitovy amin'ny fampiharana mandeha.

Raha miverina amin'ny ohatra manokana miaraka amin'ny rafitra Yii isika ary tsy miditra amin'ny rafitra (izay tsy tanjon'ny lahatsoratra), dia ampy ny manondro fomba roa malaza:

  1. Ovay ny fizotry ny fananganana sary mba hametrahana fananana amin'ny toerana azo vinavinaina. Ity dia soso-kevitra / ampiharina amin'ny fanitarana toy ny yii2-static-assets.
  2. Farito ny hases manokana ho an'ny lahatahiry fananana, araka ny resahina ao amin'ny oh. ity famelabelarana ity (manomboka amin'ny slide No. 35). Raha ny marina, ny mpanoratra ny tatitra amin'ny farany (ary tsy misy antony!) dia manoro hevitra fa aorian'ny fanangonana ny fananana ao amin'ny server build, dia ampidiro any amin'ny fitehirizana foibe (toy ny S3), eo anoloan'ny toerana misy CDN.

Downloads

Tranga iray hafa azo antoka fa hitranga rehefa mifindra rindranasa mankany amin'ny kluster Kubernetes ny fitehirizana ny rakitra mpampiasa ao amin'ny rafi-drakitra. Ohatra, manana fampiharana PHP indray isika izay manaiky rakitra amin'ny alàlan'ny endrika fampiakarana, manao zavatra miaraka amin'izy ireo mandritra ny fandidiana, ary mamerina azy ireo.

Ao amin'ny Kubernetes, ny toerana tokony hametrahana ireo rakitra ireo dia tokony ho mahazatra amin'ny kopia rehetra amin'ny fampiharana. Miankina amin'ny fahasarotan'ny rindranasa sy ny filàna handaminana ny faharetan'ireo rakitra ireo, ny safidy fitaovana iombonana voalaza etsy ambony dia mety ho toerana toy izany, saingy, araka ny hitantsika, dia manana ny tsy fahampiana.

fangatahana

Vahaolana iray dia mampiasa fitahirizana mifanaraka amin'ny S3 (na dia karazana sokajy mampiantrano tena toy ny minio aza). Mila fanovana ny fifindrana amin'ny S3 amin'ny haavon'ny kaody, ary ny fomba hanaterana votoaty eo amin'ny faran'ny anoloana, efa ananantsika nanoratra.

Fivorian'ny mpampiasa

Misaraka, dia ilaina ny manamarika ny fandaminana ny fitehirizana ny mpampiasa fivoriana. Matetika ireo dia rakitra ao anaty kapila ihany koa, izay ao anatin'ny tontolon'ny Kubernetes dia hitarika amin'ny fangatahana fahazoan-dàlana tsy tapaka avy amin'ny mpampiasa raha toa ka miafara amin'ny fitoeran-javatra hafa ny fangatahany.

Ny olana dia voavaha amin'ny ampahany amin'ny fampandehanana stickySessions amin'ny fidirana (Ny endri-javatra dia tohanana amin'ny fanaraha-maso ingress malaza rehetra - raha mila antsipiriany bebe kokoa, jereo ny fanadihadihana)hamatotra ny mpampiasa amin'ny pod manokana miaraka amin'ny fampiharana:

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

Saingy tsy hanafoana ny olana amin'ny fametrahana miverimberina izany.

fangatahana

Ny fomba marina kokoa dia ny famindrana ny fampiharana amin'ny mitahiry fivoriana amin'ny memcached, Redis ary vahaolana mitovy - amin'ny ankapobeny, avelao tanteraka ny safidy rakitra.

famaranana

Ny vahaolana amin'ny fotodrafitrasa resahina ao amin'ny lahatsoratra dia mendrika ny hampiasaina raha tsy amin'ny endrika “crutches” vonjimaika (izay toa tsara tarehy kokoa amin'ny teny anglisy ho toy ny vahaolana). Mety misy ifandraisany amin'ny dingana voalohany amin'ny fifindrana fampiharana mankany amin'ny Kubernetes izy ireo, saingy tsy tokony hiorim-paka.

Ny lalana aroso amin'ny ankapobeny dia ny manala azy ireo amin'ny fanovana ny maritrano amin'ny fampiharana mifanaraka amin'ny efa fantatry ny maro. 12-Factor App. Na izany aza, ity - mitondra ny fangatahana amin'ny endrika tsy misy fanjakana - tsy azo ihodivirana fa ilaina ny fanovana ny fehezan-dalàna, ary eto dia zava-dehibe ny mahita fifandanjana eo amin'ny fahaiza-manao / takian'ny orinasa sy ny fanantenana amin'ny fampiharana sy fitazonana ny lalana voafidy. .

Sal

Vakio ihany koa ao amin'ny bilaoginay:

Source: www.habr.com

Add a comment