Nā faila kūloko i ka neʻe ʻana i kahi noi i Kubernetes

Nā faila kūloko i ka neʻe ʻana i kahi noi i Kubernetes

I ke kūkulu ʻana i kahi kaʻina hana CI/CD me ka hoʻohana ʻana i nā Kubernetes, i kekahi manawa e kū mai ka pilikia o ka like ʻole ma waena o nā koi o ka ʻōnaehana hou a me ka noi e hoʻoili ʻia iā ia. ʻO ka mea nui, ma ke kahua kūkulu noi he mea nui e loaʻa hoʻokahi kiʻi e hoʻohana ʻia ma o nā mea a pau nā kaiapuni papahana a me nā pūʻulu. Hoʻokumu kēia kumumanaʻo i ka pololei e like me Google mālama ipu (ʻoi aku ma mua o hoʻokahi e pili ana i kēia ʻlelo a me kā mākou ʻoihana ʻenehana).

Eia naʻe, ʻaʻole ʻoe e ʻike i kekahi i nā kūlana kahi e hoʻohana ai ke code o ka pūnaewele i kahi hoʻolālā i mākaukau ʻia, ʻo ka hoʻohana ʻana i ka mea e kau ai i nā palena i kona hoʻohana hou ʻana. A ʻoiai i loko o kahi "kaiapuni maʻamau" maʻalahi kēia e hana ai, ma Kubernetes hiki ke lilo kēia ʻano i pilikia, ʻoi aku hoʻi inā ʻoe e hālāwai me ia no ka manawa mua. ʻOiai hiki i ka noʻonoʻo noʻonoʻo ke loaʻa i nā hoʻonā ʻenehana i ʻike ʻia a maikaʻi paha i ka nānā mua ʻana ... he mea nui e hoʻomanaʻo i ka hapa nui o nā kūlana hiki a pono. e hoʻoponopono ʻia ma ke ʻano o ka hale.

E nānā kākou i nā ʻoluʻolu workaround kaulana no ka mālama ʻana i nā faila i hiki ke alakaʻi i nā hopena maikaʻi ʻole i ka wā e hana ai i kahi puʻupuʻu, a kuhikuhi pū i kahi ala pololei.

Waihona kūmau

No ka hōʻike ʻana, e noʻonoʻo i kahi palapala noi pūnaewele e hoʻohana ana i kekahi ʻano mea hoʻoheheʻe static e kiʻi i kahi kiʻi, nā ʻano, a me nā mea ʻē aʻe. No ka laʻana, loaʻa i ka Yii PHP framework kahi mana waiwai i kūkulu ʻia e hana i nā inoa papa kuhikuhi kū hoʻokahi. No laila, ʻo ka hoʻopuka he mau ala no ka pūnaewele paʻa ʻaʻole i hui pū kekahi me kekahi (ua hana ʻia kēia no nā kumu he nui - no ka laʻana, e hoʻopau i nā kope ke hoʻohana ʻia nā mea he nui i ka waiwai like). No laila, ma waho o ka pahu, ʻo ka manawa mua ʻoe e komo ai i kahi module punawelewele, nā faila static (ʻoiaʻiʻo, ʻo nā symlinks pinepine, akā ʻoi aku ka nui ma hope) ua hoʻokumu ʻia a waiho ʻia me kahi papa kuhikuhi kumu maʻamau no kēia kau ʻana:

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

He aha ke ʻano o kēia ma ke ʻano o ka pūʻulu?

ʻO ka laʻana maʻalahi

E lawe kākou i kahi hihia maʻamau, ke hoʻomaka mua ʻia ʻo PHP e nginx e puʻunaue i ka ʻikepili static a hana i nā noi maʻalahi. ʻO ke ala maʻalahi loa - kuhikuhi i ka hana me ʻelua pahu:

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

Ma kahi ʻano maʻalahi, hoʻopili ka nginx config i kēia:

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

Ke komo mua ʻoe i ka pūnaewele, ʻike ʻia nā waiwai i ka pahu PHP. Akā i ka hihia o ʻelua pahu i loko o hoʻokahi pod, ʻaʻole ʻike ʻo nginx i kēia mau faila static, e hāʻawi ʻia iā lākou (e like me ka hoʻonohonoho). ʻO ka hopena, e ʻike ka mea kūʻai aku i kahi hewa 404 no nā noi āpau i nā faila CSS a me JS. ʻO ka hopena maʻalahi ma aneʻi ʻo ka hoʻonohonoho ʻana i kahi papa kuhikuhi maʻamau no nā ipu. Koho mua - maʻamau 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

I kēia manawa, lawelawe ʻia nā faila static i hana ʻia e ka nginx. Akā e hoʻomanaʻo wau iā ʻoe he hopena primitive kēia, ʻo ia ka mea mamao loa mai ka maikaʻi a loaʻa iā ia nā nuances a me nā hemahema, i kūkākūkā ʻia ma lalo nei.

ʻOi aku ka nui o ka mālama ʻana

E noʻonoʻo ʻoe i kahi kūlana kahi i kipa aku ai kahi mea hoʻohana i ka pūnaewele, hoʻouka i kahi ʻaoʻao me nā ʻano i loaʻa i loko o ka ipu, a ʻoiai ʻo ia e heluhelu ana i kēia ʻaoʻao, ua hoʻomoe hou mākou i ka ipu. Ua nele ka waihona waiwai a koi ʻia kahi noi iā PHP e hoʻomaka e hana i nā mea hou. Eia naʻe, ʻoiai ma hope o kēia, ʻaʻole pili nā loulou i nā statics kahiko, e alakaʻi i nā hewa i ka hōʻike ʻana i nā statics.

Eia hou, loaʻa iā mākou kahi papahana i hoʻouka ʻia, ʻo ia hoʻi ʻaʻole lawa hoʻokahi kope o ka noi:

  • E hoʻonui kākou kuhikuhi i ka hana a hiki i ʻelua kope.
  • I ka wā i komo mua ʻia ai ka pūnaewele, ua hana ʻia nā waiwai i hoʻokahi kope.
  • I kekahi manawa, ua hoʻoholo ʻo ingress (no ka hoʻohālikelike ʻana i ka ukana) e hoʻouna i kahi noi i ka kope lua, a ʻaʻole i loaʻa kēia mau waiwai. A i ʻole ʻaʻole lākou ma laila no ka mea hoʻohana mākou RollingUpdate a i kēia manawa ke hana nei mākou i ka hoʻolaha.

Ma keʻano laulā, he hewa hou ka hopena.

I mea e pale ai i ka lilo ʻana o nā waiwai kahiko, hiki iā ʻoe ke hoʻololi emptyDir maluna o hostPath, hoʻohui ʻana i ke kino i kahi puʻupuʻu puʻupuʻu. He hewa kēia ala no ka mea pono mākou hoʻopaʻa i kahi puʻupuʻu puʻupuʻu kikoʻī kāu noi, no ka mea - inā e neʻe i nā nodes ʻē aʻe - ʻaʻole e loaʻa i ka papa kuhikuhi nā faila pono. A i ʻole e koi ʻia kekahi ʻano o ka hoʻonohonoho papa kuhikuhi ma waena o nā nodes.

He aha nā hoʻonā?

  1. Inā ʻae ka lako a me nā kumuwaiwai, hiki iā ʻoe ke hoʻohana nā mea hoʻopaʻapaʻa e hoʻonohonoho i kahi papa kuhikuhi i hiki ke loaʻa like no nā pono static. Palapala kūhelu paipai ʻo SSD, ʻoi aku ka liʻiliʻi o ʻekolu mau paʻi hou ʻana a me kahi pilina paʻa "mānoanoa" ma waena o nā nodes cluster.
  2. ʻO kahi koho liʻiliʻi e hoʻonohonoho i kahi kikowaena NFS. Eia naʻe, pono ʻoe e noʻonoʻo i ka hiki ke hoʻonui i ka manawa pane no ka hoʻoponopono ʻana i nā noi e ka pūnaewele pūnaewele, a ʻo ka hoʻomanawanui hewa e waiho nui i ka makemake. He pōʻino nā hopena o ka hāʻule ʻole: ʻo ka nalo ʻana o ka mauna e hoʻopau i ka hui i ka make ma lalo o ke kaomi o ka ukana LA e holo wikiwiki ana i ka lewa.

Ma waena o nā mea ʻē aʻe, pono nā koho āpau no ka hoʻokumu ʻana i kahi mālama hoʻomau hoʻomaʻemaʻe hope nā pūʻulu o nā faila i hōʻiliʻili ʻia i kekahi manawa. Ma mua o nā ipu me PHP hiki iā ʻoe ke kau DaemonSet mai ka caching nginx, ka mea e mālama i nā kope o nā waiwai no ka manawa palena. Hiki ke hoʻonohonoho maʻalahi kēia ʻano me ka hoʻohana ʻana proxy_cache me ka hohonu o ka mālama ʻana i nā lā a i ʻole gigabytes o kahi diski.

ʻO ka hoʻohui ʻana i kēia ʻano me nā ʻōnaehana faila i ʻōlelo ʻia ma luna nei e hāʻawi i kahi kahua nui no ka noʻonoʻo ʻana, i kaupalena ʻia e ka waihona kālā a me ka ʻenehana o ka poʻe e hoʻokō a kākoʻo. Mai ka ʻike, hiki iā mākou ke ʻōlelo i ka maʻalahi o ka ʻōnaehana, ʻoi aku ka paʻa o ka hana. Ke hoʻohui ʻia ia mau papa, ʻoi aku ka paʻakikī o ka mālama ʻana i ka ʻōnaehana, a ma ka manawa like e hoʻonui ʻia ka manawa i ka ʻike ʻana a me ka hoʻihoʻi ʻana mai nā hemahema.

Manaʻo

Inā ʻaʻole pono ʻoe i ka hoʻokō ʻana i nā koho mālama i manaʻo ʻia (paʻakikī, kumukūʻai ...), a laila pono ke nānā i ke kūlana mai kēlā ʻaoʻao. ʻO ia hoʻi, e ʻeli i ka hoʻolālā papahana a hoʻoponopono i ka pilikia ma ke code, i hoʻopaʻa ʻia i kekahi ʻano ʻikepili paʻa i ke kiʻi, kahi wehewehe maopopo ʻole o ka ʻike a i ʻole ke kaʻina hana no ka "hoʻomaʻamaʻa" a / a i ʻole ka hoʻopili mua ʻana i nā waiwai ma ke kahua o ka hui kiʻi. Ma kēia ala e loaʻa ai iā mākou ke ʻano hiki ke wānana a me ka hoʻonohonoho like o nā faila no nā kaiapuni āpau a me nā kope o ka noi holo.

Inā hoʻi mākou i ka hiʻohiʻona kikoʻī me ka Yii framework a ʻaʻole e komo i loko o kona ʻano (ʻaʻole ia ke kumu o ka ʻatikala), lawa ia e kuhikuhi i ʻelua mau ala kaulana:

  1. E hoʻololi i ke kaʻina hana kūkulu kiʻi e hoʻokomo i nā waiwai ma kahi hiki ke wānana. Manaʻo ʻia kēia / hoʻokō ʻia i nā hoʻonui like yii2-static-waiwai.
  2. E wehewehe i nā hashes kikoʻī no nā papa kuhikuhi waiwai, e like me ka mea i kūkākūkā ʻia ma ka laʻana. keia hoikeike (e hoʻomaka ana mai ka paheʻe Helu 35). Ma ke ala, ʻo ka mea kākau o ka hōʻike hope loa (a ʻaʻole me ke kumu ʻole!) Ke aʻo nei ma hope o ka hui ʻana i nā waiwai ma ke kikowaena kūkulu, e hoʻouka iā lākou i kahi waihona kikowaena (e like me S3), i mua o kahi kahi CDN.

Hiki ke hoʻoiho ʻia nā faila

ʻO kekahi hihia ʻē aʻe e hiki mai ana i ka wā e neʻe ana i kahi noi i kahi pūʻulu Kubernetes e mālama ana i nā faila mea hoʻohana ma ka ʻōnaehana faila. No ka laʻana, loaʻa hou iā mākou kahi palapala PHP e ʻae i nā faila ma o kahi palapala hoʻouka, hana i kekahi mea me lākou i ka wā e hana ai, a hoʻihoʻi iā lākou.

Ma Kubernetes, ʻo ka wahi e waiho ʻia ai kēia mau faila he mea maʻamau i nā kope a pau o ka noi. Ma muli o ka paʻakikī o ka noi a me ka pono e hoʻonohonoho i ka hoʻomau ʻana o kēia mau faila, ʻo nā koho i ʻōlelo ʻia ma luna nei he wahi ia, akā, e like me kā mākou e ʻike ai, loaʻa iā lākou nā drawbacks.

Manaʻo

ʻO kahi hoʻonā me ka hoʻohana ʻana i kahi waihona S3-kūpono (ʻoiai inā he ʻano ʻano ʻano hoʻokipa ponoʻī e like me ka minio). Pono e hoʻololi i ka S3 ma ka pae code, a pehea e hāʻawi ʻia ai ka ʻike ma ka ʻaoʻao mua, ua loaʻa iā mākou palapalaʻo ia.

Nā kau mea hoʻohana

Ma kahi kaʻawale, pono e hoʻomaopopo i ka hoʻonohonoho ʻana o ka mālama ʻana i nā kau mea hoʻohana. ʻO ka manawa pinepine, he mau faila kēia ma ka disk, i loko o ka pōʻaiapili o Kubernetes e alakaʻi i nā noi ʻae mau mai ka mea hoʻohana inā pau kāna noi i kahi pahu ʻē aʻe.

Hoʻopau ʻia ka pilikia ma ka hoʻā ʻana stickySessions ma ke komo ana (kākoʻo ʻia ka hiʻohiʻona i nā mea hoʻokele komo kaulana - no nā kikoʻī hou aku, ʻike kā mākou loiloi)e hoʻopaʻa i ka mea hoʻohana i kahi pod kikoʻī me ka noi:

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

Akā ʻaʻole kēia e hoʻopau i nā pilikia me ka hoʻokau pinepine ʻana.

Manaʻo

ʻO ke ala pololei ʻoi aku ka hoʻoili ʻana i ka palapala noi i ka mālama ʻana i nā manawa ma memcached, Redis a me nā hoʻonā like - ma ka laulā, haʻalele loa i nā koho faila.

hopena

ʻO nā haʻina hana i kūkākūkā ʻia i loko o ka kikokikona e pono ke hoʻohana wale ʻia ma ke ʻano o nā "crutches" pōkole (ʻoi aku ka nani ma ka ʻōlelo Pelekania ma ke ʻano he workaround). Pili paha lākou i nā pae mua o ka neʻe ʻana i kahi palapala noi i Kubernetes, akā ʻaʻole pono ke aʻa.

ʻO ke ala maʻamau i ʻōlelo ʻia ʻo ka hoʻopau ʻana iā lākou no ka hoʻololi ʻana i ke kūkulu hale o ka noi e like me ka mea i ʻike mua ʻia e nā mea he nui. 12-Factor App. Eia nō naʻe, ʻo kēia - ka lawe ʻana i ka palapala noi i kahi ʻano stateless - ʻo ia ka mea e koi ʻia nā loli i ke code, a eia ka mea nui e ʻike i kahi kaulike ma waena o nā hiki / koi o ka ʻoihana a me nā manaʻo no ka hoʻokō a mālama ʻana i ke ala i koho ʻia. .

PS

E heluhelu pū ma kā mākou blog:

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka