Awọn faili agbegbe nigba gbigbe ohun elo kan si Kubernetes

Awọn faili agbegbe nigba gbigbe ohun elo kan si Kubernetes

Nigbati o ba kọ ilana CI / CD nipa lilo Kubernetes, nigbakan iṣoro naa dide ti aiṣedeede laarin awọn ibeere ti amayederun tuntun ati ohun elo ti o gbe si. Ni pato, ni ipele kikọ ohun elo o ṣe pataki lati gba один aworan ti yoo ṣee lo ninu всех ayika ise agbese ati awọn iṣupọ. Ilana yii ni ipilẹ ti o tọ gẹgẹ bi Google iṣakoso eiyan (diẹ ẹ sii ju ẹẹkan lọ nipa eyi ti sọrọ ati ẹka imọ-ẹrọ wa).

Sibẹsibẹ, iwọ kii yoo rii ẹnikẹni ni awọn ipo nibiti koodu aaye naa nlo ilana ti a ti ṣetan, lilo eyiti o fa awọn ihamọ lori lilo rẹ siwaju sii. Ati pe lakoko ti o wa ni “agbegbe deede” eyi rọrun lati koju, ni Kubernetes ihuwasi yii le di iṣoro, paapaa nigbati o ba pade rẹ fun igba akọkọ. Lakoko ti ọkan inventive le wa pẹlu awọn solusan amayederun ti o dabi gbangba tabi paapaa dara ni iwo akọkọ… o ṣe pataki lati ranti pe ọpọlọpọ awọn ipo le ati yẹ. wa ni re architecturally.

Jẹ ki a wo awọn solusan ibi-itọju olokiki fun titoju awọn faili ti o le ja si awọn abajade aibikita nigbati o nṣiṣẹ iṣupọ kan, ati tun tọka si ọna ti o pe diẹ sii.

Ibi ipamọ aimi

Lati ṣapejuwe, ronu ohun elo wẹẹbu kan ti o nlo iru olupilẹṣẹ aimi kan lati gba akojọpọ awọn aworan, awọn aza, ati awọn nkan miiran. Fun apẹẹrẹ, ilana Yii PHP ni oluṣakoso dukia ti a ṣe sinu ti o ṣe agbekalẹ awọn orukọ itọsọna alailẹgbẹ. Nitorinaa, abajade jẹ eto awọn ipa ọna fun aaye aimi ti o han gedegbe ko ni intersect pẹlu ara wọn (eyi ni a ṣe fun awọn idi pupọ - fun apẹẹrẹ, lati yọkuro awọn ẹda-ẹda nigbati ọpọlọpọ awọn paati lo awọn orisun kanna). Nitorinaa, lati inu apoti, ni igba akọkọ ti o wọle si module orisun orisun wẹẹbu, awọn faili aimi (ni otitọ, awọn ami-ami nigbagbogbo, ṣugbọn diẹ sii lori iyẹn nigbamii) ti ṣẹda ati gbekale pẹlu itọsọna gbongbo ti o wọpọ alailẹgbẹ fun imuṣiṣẹ yii:

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

Kini eleyi tumọ si ni awọn ofin ti iṣupọ kan?

Apẹẹrẹ ti o rọrun julọ

Jẹ ki a mu ọran ti o wọpọ, nigbati PHP ti ṣaju nipasẹ nginx lati pin kaakiri data aimi ati ilana awọn ibeere ti o rọrun. Ọna to rọọrun - imuṣiṣẹ pẹlu awọn apoti meji:

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

Ni fọọmu ti o rọrun, atunto nginx ṣan si isalẹ si atẹle naa:

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

Nigbati o kọkọ wọle si aaye naa, awọn ohun-ini han ninu apo eiyan PHP. Ṣugbọn ninu ọran ti awọn apoti meji laarin adarọ ese kan, nginx ko mọ nkankan nipa awọn faili aimi wọnyi, eyiti (ni ibamu si iṣeto ni) yẹ ki o fi fun wọn. Bi abajade, alabara yoo rii aṣiṣe 404 fun gbogbo awọn ibeere si awọn faili CSS ati JS. Ojutu ti o rọrun julọ nibi yoo jẹ lati ṣeto ilana ti o wọpọ fun awọn apoti. Aṣayan akọkọ - gbogbogbo 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

Bayi awọn faili aimi ti ipilẹṣẹ ninu apo eiyan jẹ iranṣẹ nipasẹ nginx ni deede. Ṣugbọn jẹ ki n leti pe eyi jẹ ojutu alakoko, eyiti o tumọ si pe o jinna si apẹrẹ ati pe o ni awọn nuances ati awọn ailagbara tirẹ, eyiti a sọrọ ni isalẹ.

Diẹ to ti ni ilọsiwaju ipamọ

Wàyí o, fojú inú wo ipò kan níbi tí oníṣe kan ti ṣèbẹ̀wò sí ìkànnì náà, tí ó kó àwọn ọ̀nà tí ó wà nínú àpótí náà sínú ojú ìwé kan, nígbà tí ó sì ń ka ojú ewé yìí, a tún fi àpótí náà ránṣẹ́. Katalogi awọn ohun-ini ti di ofo ati pe ibeere kan si PHP ni a nilo lati bẹrẹ ṣiṣẹda awọn tuntun. Sibẹsibẹ, paapaa lẹhin eyi, awọn ọna asopọ si awọn iṣiro atijọ yoo jẹ ko ṣe pataki, eyi ti yoo ja si awọn aṣiṣe ni ifihan awọn iṣiro.

Ni afikun, a ṣeese ni iṣẹ akanṣe diẹ sii tabi kere si, eyiti o tumọ si pe ẹda kan ti ohun elo kii yoo to:

  • Jẹ ká asekale o soke imuṣiṣẹ soke si meji replicas.
  • Nigbati aaye naa ti kọkọ wọle, awọn ohun-ini ni a ṣẹda ni ẹda kan.
  • Ni aaye kan, ingress pinnu (fun awọn idi iwọntunwọnsi fifuye) lati firanṣẹ ibeere kan si ẹda keji, ati pe awọn ohun-ini wọnyi ko si sibẹsibẹ. Tabi boya wọn ko wa nibẹ mọ nitori a lo RollingUpdate ati ni akoko ti a nṣe imuṣiṣẹ.

Ni gbogbogbo, abajade jẹ awọn aṣiṣe lẹẹkansi.

Lati yago fun sisọnu awọn ohun-ini atijọ, o le yipada emptyDir on hostPath, fifi aimi kun ni ti ara si ipade iṣupọ kan. Ọna yii buru nitori a ni lati ni otitọ dè si ipade iṣupọ kan pato ohun elo rẹ, nitori - ni ọran ti gbigbe si awọn apa miiran - itọsọna naa kii yoo ni awọn faili pataki. Tabi iru amuṣiṣẹpọ ilana isale laarin awọn apa ti nilo.

Kini awọn ojutu?

  1. Ti ohun elo ati awọn orisun ba gba laaye, o le lo cephfs lati ṣeto ilana iraye si deede fun awọn iwulo aimi. Awọn iwe aṣẹ osise ṣeduro awọn awakọ SSD, o kere ju ẹda-mẹta ati asopọ “nipọn” iduroṣinṣin laarin awọn apa iṣupọ.
  2. Aṣayan ti o kere ju yoo jẹ lati ṣeto olupin NFS kan. Sibẹsibẹ, lẹhinna o nilo lati ṣe akiyesi ilosoke ti o ṣeeṣe ni akoko idahun fun awọn ibeere sisẹ nipasẹ olupin wẹẹbu, ati ifarada aṣiṣe yoo fi pupọ silẹ lati fẹ. Awọn abajade ti ikuna jẹ ajalu: isonu ti oke naa yoo mu iṣupọ si iku labẹ titẹ ti ẹru LA ti n yara lọ si ọrun.

Ninu ohun miiran, gbogbo awọn aṣayan fun ṣiṣẹda jubẹẹlo ipamọ yoo beere isale ninu awọn eto igba atijọ ti awọn faili ti a kojọpọ lori akoko kan. Ni iwaju awọn apoti pẹlu PHP o le fi DaemonSet lati caching nginx, eyiti yoo tọju awọn ẹda ti awọn ohun-ini fun akoko to lopin. Iwa yii jẹ irọrun atunto nipa lilo proxy_cache pẹlu ijinle ipamọ ni awọn ọjọ tabi gigabytes ti aaye disk.

Apapọ ọna yii pẹlu awọn ọna ṣiṣe faili pinpin ti a mẹnuba loke pese aaye nla fun oju inu, ni opin nikan nipasẹ isuna ati agbara imọ-ẹrọ ti awọn ti yoo ṣe ati ṣe atilẹyin rẹ. Lati iriri, a le sọ pe eto ti o rọrun, diẹ sii ni iduroṣinṣin ti o ṣiṣẹ. Nigbati iru awọn fẹlẹfẹlẹ ba wa ni afikun, o di pupọ siwaju sii nira lati ṣetọju awọn amayederun, ati ni akoko kanna akoko ti o lo lori iwadii aisan ati gbigba pada lati awọn ikuna eyikeyi pọ si.

Iṣeduro

Ti imuse ti awọn aṣayan ipamọ ti a dabaa tun dabi aiṣedeede fun ọ (idiju, gbowolori ...), lẹhinna o tọ lati wo ipo naa lati apa keji. Eyun, lati ma wà sinu faaji ise agbese ati ṣatunṣe iṣoro naa ni koodu, ti a so si diẹ ninu awọn ọna data aimi ni aworan, itumọ ti ko ni idaniloju ti awọn akoonu tabi ilana fun "igbona" ​​ati / tabi awọn ohun-ini iṣaju ni ipele apejọ aworan. Ni ọna yii a gba ihuwasi asọtẹlẹ patapata ati ṣeto awọn faili kanna fun gbogbo awọn agbegbe ati awọn ẹda ti ohun elo nṣiṣẹ.

Ti a ba pada si apẹẹrẹ pato pẹlu ilana Yii ati pe a ko lọ sinu eto rẹ (eyiti kii ṣe idi ti nkan naa), o to lati tọka awọn ọna olokiki meji:

  1. Yi ilana kikọ aworan pada lati gbe awọn ohun-ini si ipo asọtẹlẹ kan. Eyi ni imọran / imuse ni awọn amugbooro bii yii2-aimi-ini.
  2. Ṣetumo awọn hashes kan pato fun awọn ilana dukia, bi a ti jiroro ni fun apẹẹrẹ. igbejade yii (bẹrẹ lati ifaworanhan No.. 35). Nipa ọna, onkọwe ti ijabọ naa nikẹhin (ati kii ṣe laisi idi!) Ni imọran pe lẹhin apejọ awọn ohun-ini lori olupin kọ, gbe wọn si ibi ipamọ aarin (bii S3), ni iwaju eyiti o gbe CDN kan.

Gbigba awọn faili

Ọran miiran ti yoo dajudaju wa sinu ere nigba gbigbe ohun elo kan si iṣupọ Kubernetes n tọju awọn faili olumulo sinu eto faili naa. Fun apẹẹrẹ, a tun ni ohun elo PHP kan ti o gba awọn faili nipasẹ fọọmu ikojọpọ, ṣe nkan pẹlu wọn lakoko iṣẹ, ati firanṣẹ wọn pada.

Ni Kubernetes, ipo ti o yẹ ki o gbe awọn faili wọnyi jẹ wọpọ si gbogbo awọn ẹda ti ohun elo naa. Ti o da lori idiju ti ohun elo ati iwulo lati ṣeto itẹramọṣẹ ti awọn faili wọnyi, awọn aṣayan ẹrọ ti a mẹnuba loke le jẹ iru aaye kan, ṣugbọn, bi a ti rii, wọn ni awọn alailanfani wọn.

Iṣeduro

Ọkan ojutu ni lilo S3-ibaramu ipamọ (paapaa ti o ba jẹ diẹ ninu iru ẹka ti o gbalejo bi minio). Yipada si S3 yoo nilo awọn ayipada ni ipele koodu, ati bi akoonu yoo ṣe jiṣẹ ni opin iwaju, a ti ni tẹlẹ kọwe.

Awọn akoko olumulo

Lọtọ, o tọ lati ṣe akiyesi iṣeto ti ibi ipamọ ti awọn akoko olumulo. Nigbagbogbo iwọnyi tun jẹ awọn faili lori disiki, eyiti o wa ni aaye ti Kubernetes yoo yorisi awọn ibeere aṣẹ igbagbogbo lati ọdọ olumulo ti ibeere rẹ ba pari ni apoti miiran.

Iṣoro naa jẹ ipinnu ni apakan nipasẹ titan stickySessions lori ingress (ẹya naa ni atilẹyin ni gbogbo awọn oludari ingress olokiki - fun awọn alaye diẹ sii, wo wa awotẹlẹ)lati so olumulo mọ podu kan pato pẹlu ohun elo naa:

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

Ṣugbọn eyi kii yoo yọkuro awọn iṣoro pẹlu awọn imuṣiṣẹ leralera.

Iṣeduro

Ọna ti o pe diẹ sii yoo jẹ gbigbe ohun elo lọ si titoju awọn akoko ni memcached, Redis ati iru awọn solusan - ni gbogbogbo, fi awọn aṣayan faili silẹ patapata.

ipari

Awọn solusan amayederun ti a jiroro ninu ọrọ jẹ yẹ fun lilo nikan ni ọna kika “awọn crutches” igba diẹ (eyiti o dun diẹ sii lẹwa ni Gẹẹsi bi iṣẹ-ṣiṣe). Wọn le ṣe pataki ni awọn ipele akọkọ ti gbigbe ohun elo kan si Kubernetes, ṣugbọn ko yẹ ki o mu gbongbo.

Ọna ti a ṣe iṣeduro gbogbogbo ni lati yọ wọn kuro ni ojurere ti iyipada ayaworan ti ohun elo ni ibamu pẹlu ohun ti a ti mọ tẹlẹ si ọpọlọpọ 12-ifosiwewe App. Sibẹsibẹ, eyi - kiko ohun elo naa si fọọmu ti ko ni orilẹ-ede - laiṣe tumọ si pe awọn iyipada ninu koodu yoo nilo, ati nibi o ṣe pataki lati wa iwọntunwọnsi laarin awọn agbara / awọn ibeere ti iṣowo ati awọn asesewa fun imuse ati mimu ọna ti o yan. .

PS

Ka tun lori bulọọgi wa:

orisun: www.habr.com

Fi ọrọìwòye kun