Cov ntaub ntawv hauv zos thaum tsiv ib daim ntawv thov mus rau Kubernetes

Cov ntaub ntawv hauv zos thaum tsiv ib daim ntawv thov mus rau Kubernetes

Thaum tsim cov txheej txheem CI / CD siv Kubernetes, qee zaum qhov teeb meem tshwm sim ntawm kev tsis sib haum xeeb ntawm cov kev xav tau ntawm cov txheej txheem tshiab thiab daim ntawv thov raug xa mus rau nws. Tshwj xeeb, ntawm daim ntawv thov tsim theem nws yog ib qho tseem ceeb kom tau txais ΠΎΠ΄ΠΈΠ½ duab uas yuav siv tau rau hauv ntawm txhua tus qhov project ib puag ncig thiab pawg. Txoj ntsiab cai no underlies qhov tseeb raws li Google tswj lub thawv (ntau tshaj ib zaug txog qhov no hais lus thiab peb lub tuam tsev technical).

Txawm li cas los xij, koj yuav tsis pom leej twg nyob rau hauv qhov xwm txheej uas lub vev xaib code siv cov txheej txheem npaj ua tiav, kev siv uas txwv tsis pub siv nws ntxiv. Thiab thaum nyob hauv "ib puag ncig ib puag ncig" qhov no yooj yim rau kev nrog, hauv Kubernetes tus cwj pwm no tuaj yeem dhau los ua teeb meem, tshwj xeeb tshaj yog thaum koj ntsib nws thawj zaug. Thaum lub siab xav tuaj yeem tuaj nrog cov kev daws teeb meem uas pom tseeb lossis txawm tias zoo thaum xub thawj siab ... nws yog ib qho tseem ceeb kom nco ntsoov tias feem ntau cov xwm txheej tuaj yeem thiab yuav tsum daws architecturally.

Cia peb saib cov kev daws teeb meem nrov rau kev khaws cov ntaub ntawv uas tuaj yeem ua rau muaj qhov tsis zoo thaum ua haujlwm ntawm pawg, thiab tseem taw qhia txoj hauv kev kom raug dua.

Static cia

Txhawm rau ua piv txwv, xav txog daim ntawv thov web uas siv qee yam ntawm cov tshuab hluav taws xob zoo li qub kom tau txais cov duab, qauv, thiab lwm yam. Piv txwv li, Yii PHP lub moj khaum muaj tus thawj tswj hwm khoom vaj khoom tsev uas tsim cov npe tshwj xeeb. Raws li, qhov tso zis yog ib txheej ntawm txoj hauv kev rau qhov chaw zoo li qub uas pom tseeb tsis cuam tshuam nrog ib leeg (qhov no tau ua rau ntau yam - piv txwv li, txhawm rau tshem tawm cov duplicates thaum siv tib cov peev txheej los ntawm ntau yam khoom). Yog li, tawm ntawm lub thawv, thawj zaug koj nkag mus rau lub vev xaib kev pabcuam, cov ntaub ntawv zoo li qub (qhov tseeb, feem ntau symlinks, tab sis ntau ntxiv rau qhov ntawd tom qab) tau tsim thiab nteg tawm nrog cov npe hauv paus tshwj xeeb rau kev xa tawm no:

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

Qhov no txhais li cas ntawm cov pawg?

Qhov piv txwv yooj yim tshaj plaws

Cia peb ua ib qho xwm txheej zoo sib xws, thaum PHP ua ntej los ntawm nginx los faib cov ntaub ntawv zoo li qub thiab ua cov lus thov yooj yim. Txoj kev yooj yim tshaj plaws - txiag nrog ob lub thawv:

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

Hauv daim ntawv yooj yim, nginx config boils mus rau hauv qab no:

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

Thaum koj xub nkag mus rau qhov chaw, cov khoom muaj nqis tshwm hauv PHP thawv. Tab sis nyob rau hauv rooj plaub ntawm ob lub thawv hauv ib lub pod, nginx tsis paub dab tsi txog cov ntaub ntawv zoo li no, uas (raws li kev teeb tsa) yuav tsum muab rau lawv. Yog li ntawd, tus neeg siv yuav pom qhov yuam kev 404 rau txhua qhov kev thov rau CSS thiab JS cov ntaub ntawv. Primitive xaiv - general 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

Tam sim no cov ntaub ntawv zoo li qub tsim hauv lub thawv tau txais kev pabcuam los ntawm nginx kom raug. Tab sis cia kuv nco ntsoov koj tias qhov no yog qhov kev daws teeb meem qub, uas txhais tau tias nws nyob deb ntawm qhov zoo tshaj plaws thiab nws muaj nws tus kheej nuances thiab shortcomings, uas tau tham hauv qab no.

Kev khaws cia ntau dua

Tam sim no xav txog qhov xwm txheej uas tus neeg siv tau mus xyuas lub xaib, thauj ib nplooj ntawv nrog cov qauv muaj nyob hauv lub thawv, thiab thaum nws nyeem nplooj ntawv no, peb rov xa cov thawv. Cov khoom muaj nqis tau dhau los ua qhov khoob thiab qhov kev thov rau PHP yuav tsum tau pib tsim cov tshiab. Txawm li cas los xij, txawm tias tom qab no, kev txuas mus rau cov qub statics yuav tsis cuam tshuam, uas yuav ua rau muaj kev ua yuam kev hauv kev nthuav tawm statics.

Tsis tas li ntawd, peb feem ntau yuav muaj ntau dua lossis tsawg dua qhov project, uas txhais tau hais tias ib daim ntawv thov yuav tsis txaus:

  • Cia peb ntsuas nws txiag mus txog rau ob replicas.
  • Thaum lub xaib tau nkag mus rau thawj zaug, cov cuab yeej cuab tam tau tsim nyob rau hauv ib qho replica.
  • Qee lub sij hawm, ingress txiav txim siab (rau lub hom phiaj thauj khoom sib npaug) xa daim ntawv thov mus rau qhov thib ob replica, thiab cov cuab tam no tseem tsis tau muaj. Los yog tej zaum lawv tsis nyob ntawd lawm vim peb siv RollingUpdate thiab tam sim no peb tab tom ua kev xa tawm.

Feem ntau, qhov tshwm sim yog rov ua yuam kev.

Txhawm rau kom tsis txhob poob cov khoom qub, koj tuaj yeem hloov pauv emptyDir rau hostPath, ntxiv static lub cev rau ib pawg node. Txoj kev no tsis zoo vim peb yeej yuav tsum tau khi rau ib qho kev sib koom ua ke koj daim ntawv thov, vim - nyob rau hauv cov ntaub ntawv ntawm tsiv mus rau lwm cov nodes - cov directory yuav tsis muaj cov ntaub ntawv tsim nyog. Los yog qee hom keeb kwm yav dhau los synchronization ntawm cov nodes yuav tsum tau.

Cov kev daws teeb meem yog dab tsi?

  1. Yog tias kho vajtse thiab cov peev txheej tso cai, koj tuaj yeem siv cephfs ua los npaj ib daim ntawv qhia sib npaug rau cov kev xav tau zoo li qub. Cov ntaub ntawv raug cai pom zoo SSD drives, tsawg kawg peb-fold replication thiab ruaj khov "thick" kev sib txuas ntawm pawg nodes.
  2. Qhov kev xaiv tsawg dua yuav yog los npaj NFS server. Txawm li cas los xij, tom qab ntawd koj yuav tsum tau coj mus rau hauv tus account qhov ua tau nce ntxiv hauv lub sijhawm teb rau kev ua cov lus thov los ntawm lub vev xaib server, thiab kev zam txim txhaum yuav tawm ntau yam uas xav tau. Qhov tshwm sim ntawm kev ua tsis tiav yog qhov kev puas tsuaj loj: qhov poob ntawm lub mount dooms cov pawg kom tuag nyob rau hauv lub siab ntawm LA load rushing rau saum ntuj.

Ntawm lwm yam, tag nrho cov kev xaiv rau kev tsim kom ruaj khov yuav xav tau tom qab ntxuav outdated pawg ntawm cov ntaub ntawv sau nyob rau hauv ib lub sij hawm ntawm lub sij hawm. Hauv pem hauv ntej ntawm cov thawv nrog PHP koj tuaj yeem tso DaemonSet los ntawm caching nginx, uas yuav khaws cov ntawv theej ntawm cov cuab tam rau lub sijhawm txwv. Tus cwj pwm no yooj yim configurable siv proxy_cache nrog cia qhov tob hauv hnub lossis gigabytes ntawm qhov chaw disk.

Kev sib koom ua ke nrog cov qauv no nrog cov ntaub ntawv xa tawm uas tau hais los saum toj no muab qhov chaw loj rau kev xav, tsuas yog txwv los ntawm cov peev nyiaj thiab cov peev txheej ntawm cov neeg uas yuav siv thiab txhawb nqa. Los ntawm kev paub dhau los, peb tuaj yeem hais tias qhov yooj yim ntawm lub kaw lus, qhov ruaj khov dua nws ua haujlwm. Thaum cov khaubncaws sab nraud povtseg ntxiv, nws yuav nyuaj dua los tswj cov txheej txheem, thiab tib lub sijhawm siv rau kev kuaj mob thiab rov qab los ntawm txhua qhov kev ua tsis tiav nce.

Pom zoo

Yog tias qhov kev siv ntawm cov kev xaiv khaws cia kuj zoo li tsis ncaj ncees rau koj (nqus, kim ...), ces nws tsim nyog saib qhov xwm txheej ntawm sab nraud. Namely, mus khawb rau hauv qhov project architecture thiab kho qhov teeb meem hauv cov cai, khi rau qee cov ntaub ntawv zoo li qub hauv daim duab, ib qho kev txhais tsis meej ntawm cov ntsiab lus lossis txheej txheem rau "ua kom sov" thiab / lossis ua ntej cov khoom muaj nqis ntawm cov duab sib dhos theem. Txoj kev no peb tau txais tus cwj pwm zoo tiag tiag thiab tib txheej ntawm cov ntaub ntawv rau txhua qhov chaw thiab rov ua dua ntawm daim ntawv thov khiav.

Yog tias peb rov qab mus rau qhov piv txwv tshwj xeeb nrog Yii lub moj khaum thiab tsis delve rau hauv nws cov qauv (uas tsis yog lub hom phiaj ntawm tsab xov xwm), nws txaus los taw qhia ob txoj hauv kev nrov:

  1. Hloov cov txheej txheem tsim cov duab los tso cov cuab tam hauv qhov chaw uas xav tau. Qhov no yog pom zoo / siv nyob rau hauv extensions nyiam yii2-static-cov khoom muaj nqis.
  2. Txhais cov hashs tshwj xeeb rau cov cuab yeej cuab tam cov npe, raws li tau tham hauv e.g. qhov kev nthuav qhia no (pib los ntawm swb No. 35). Los ntawm txoj kev, tus sau tsab ntawv ceeb toom thaum kawg (thiab tsis yog vim li cas!) qhia tias tom qab sib sau cov cuab tam ntawm cov neeg rau zaub mov tsim, xa lawv mus rau hauv nruab nrab cia (xws li S3), nyob rau hauv pem hauv ntej ntawm qhov chaw tso CDN.

Download tau cov ntaub ntawv

Lwm rooj plaub uas yuav twv yuav raug hu ua si thaum tsiv ib daim ntawv thov mus rau Kubernetes pawg yog khaws cov neeg siv cov ntaub ntawv hauv cov ntaub ntawv kaw lus. Piv txwv li, peb rov muaj ib daim ntawv thov PHP uas lees txais cov ntaub ntawv los ntawm daim ntawv upload, ua ib yam dab tsi nrog lawv thaum ua haujlwm, thiab xa lawv rov qab.

Hauv Kubernetes, qhov chaw uas cov ntaub ntawv no yuav tsum tau muab tso rau yuav tsum muaj rau txhua qhov kev hloov pauv ntawm daim ntawv thov. Nyob ntawm qhov nyuaj ntawm daim ntawv thov thiab qhov xav tau los txhim kho qhov kev pheej hmoo ntawm cov ntaub ntawv no, cov kev xaiv saum toj no sib koom ua ke yuav yog qhov chaw zoo li no, tab sis, raws li peb pom, lawv muaj lawv qhov tsis zoo.

Pom zoo

Ib qho kev daws teeb meem yog siv S3-compatible storage (txawm tias nws yog qee yam ntawm tus kheej-tswj qeb zoo li minio). Hloov mus rau S3 yuav xav tau kev hloov pauv ntawm qib code, thiab yuav ua li cas cov ntsiab lus yuav xa tuaj rau pem hauv ntej kawg, peb twb muaj lawm sau tau.

Cov neeg siv sijhawm

Cais, nws yog tsim nyog sau cia lub koom haum ntawm kev cia ntawm cov neeg siv zaug. Feem ntau cov no kuj yog cov ntaub ntawv ntawm disk, uas nyob rau hauv cov ntsiab lus ntawm Kubernetes yuav ua rau qhov kev thov kev tso cai tas li los ntawm tus neeg siv yog tias nws qhov kev thov xaus rau hauv lwm lub thawv.

Qhov teeb meem yog ib feem daws los ntawm kev tig rau stickySessions ntawm ingress (lub feature yog txaus siab nyob rau hauv tag nrho cov nrov ingress controllers - kom paub meej ntxiv, saib peb tshuaj xyuas)txhawm rau khi tus neeg siv rau ib qho tshwj xeeb pod nrog daim ntawv thov:

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

Tab sis qhov no yuav tsis tshem tawm cov teeb meem nrog kev xa rov qab mus.

Pom zoo

Ib txoj hauv kev zoo dua yuav yog hloov daim ntawv thov mus rau khaws cov ntu hauv memcached, Redis thiab cov kev daws teeb meem zoo sib xws - nyob rau hauv dav dav, tso tseg tag nrho cov ntaub ntawv xaiv.

xaus

Cov kev daws teeb meem uas tau tham hauv cov ntawv nyeem yog tsim nyog siv tsuas yog nyob rau hauv hom "crutches" ib ntus (uas suab zoo nkauj dua hauv lus Askiv raws li kev ua haujlwm). Tej zaum lawv yuav muaj feem cuam tshuam rau thawj theem ntawm kev tsiv teb tsaws daim ntawv thov mus rau Kubernetes, tab sis yuav tsum tsis txhob siv hauv paus.

Txoj kev pom zoo dav dav yog kom tshem tawm ntawm lawv hauv kev pom zoo ntawm kev hloov kho vaj tse ntawm daim ntawv thov raws li qhov uas twb paub zoo rau ntau tus. 12-Factor App. Txawm li cas los xij, qhov no - nqa daim ntawv thov mus rau ib daim ntawv tsis muaj lub xeev - inevitably txhais tau hais tias kev hloov pauv hauv cov cai yuav tsum tau ua, thiab ntawm no nws yog ib qho tseem ceeb kom nrhiav tau qhov sib npaug ntawm cov peev txheej / kev xav tau ntawm kev lag luam thiab kev cia siab rau kev siv thiab tswj txoj kev xaiv. .

PS

Nyeem kuj ntawm peb blog:

Tau qhov twg los: www.hab.com

Ntxiv ib saib