Π›ΠΎΠΊΠ°Π»Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΏΡ€ΠΈ прСмСстванС Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² Kubernetes

Π›ΠΎΠΊΠ°Π»Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΏΡ€ΠΈ прСмСстванС Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² Kubernetes

ΠŸΡ€ΠΈ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° процСса CI/CD с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Kubernetes понякога възниква ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Π½Π΅ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚Ρ‚Π° Π½Π° изискванията Π½Π° Π½ΠΎΠ²Π°Ρ‚Π° инфраструктура ΠΈ прСнасСното Π² нСя ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’ частност, Π½Π° Π΅Ρ‚Π°ΠΏΠ° Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° сС ΠΏΠΎΠ»ΡƒΡ‡ΠΈ Π΅Π΄ΠΈΠ½ ΠΎΠ±Ρ€Π°Π·, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ бъдС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π² всички срСдитС ΠΈ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈΡ‚Π΅ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π’ΠΎΠ·ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π΅ Π² основата Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎΡ‚ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ спорСд Google (нСвСднъТ Π΅ ставало Π΄ΡƒΠΌΠ° Π·Π° Ρ‚ΠΎΠ²Π° Π² нашия тСхничСски ΠΎΡ‚Π΄Π΅Π»). ΠΊΠ°Π·Π° ΠΈ Π½Π°ΡˆΠΈΡΡ‚ тСхничСски Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€).

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, няма Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ситуации, Π² ΠΊΠΎΠΈΡ‚ΠΎ Π² ΠΊΠΎΠ΄Π° Π½Π° сайта сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π³ΠΎΡ‚ΠΎΠ² Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ, Ρ‡ΠΈΠΉΡ‚ΠΎ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° Π½Π°Π»Π°Π³Π° ограничСния Π½Π° Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½Π°Ρ‚Π° ΠΌΡƒ Сксплоатация. И Π°ΠΊΠΎ Π² Β«ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½Π° срСда» с Ρ‚ΠΎΠ²Π° Π΅ лСсно Π΄Π° сС справитС, Π² Kubernetes Ρ‚Π°ΠΊΠΎΠ²Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΎΠΊΠ°ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, особСно ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС ΡΠ±Π»ΡŠΡΠΊΠ²Π°Ρ‚Π΅ с Π½Π΅Π³ΠΎ Π·Π° ΠΏΡ€ΡŠΠ² ΠΏΡŠΡ‚. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ изобрСтатСлният ΡƒΠΌ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈ инфраструктурни Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°Ρ‚ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΈ ΠΈ Π΄ΠΎΡ€ΠΈ Π΄ΠΎΠ±Ρ€ΠΈ Π½Π° ΠΏΡ€ΡŠΠ² поглСд… Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ситуации ΠΌΠΎΠ³Π°Ρ‚ ΠΈ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Ρ€Π΅ΡˆΠ°Π²Π°Π½ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½ΠΎ.

НСка Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ популярни workaround Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π°Ρ‚ Π΄ΠΎ нСприятни послСдици ΠΏΡ€ΠΈ Сксплоатацията Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°, Π° ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Ρ‰Π΅ посочим ΠΏΠΎ-правилния ΠΏΡŠΡ‚.

Π‘ΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° статика

Π—Π° ΠΈΠ»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ Π½Π΅ΠΊΠ° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΡƒΠ΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° някакъв Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π° статика Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ изобраТСния, стиловС ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ. НапримСр, Π² PHP Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° Yii ΠΈΠΌΠ° Π²Π³Ρ€Π°Π΄Π΅Π½ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ Π½Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ‚Π΅, ΠΊΠΎΠΉΡ‚ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° ΡƒΠ½ΠΈΠΊΠ°Π»Π½ΠΈ наимСнования Π½Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ. Π‘ΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ, Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ΠΏΡŠΡ‚ΠΈΡ‰Π° Π·Π° статика Π½Π° сайта, ΠΊΠΎΠΈΡ‚ΠΎ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ‡Π½ΠΎ Π½Π΅ сС прСсичат (Ρ‚ΠΎΠ²Π° Π΅ Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΎ ΠΏΠΎ няколко ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π° Π΄Π° сС ΠΈΠ·Π±Π΅Π³Π½Π°Ρ‚ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΈ ΠΏΡ€ΠΈ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° Π½Π° Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ рСсурс ΠΎΡ‚ мноТСство ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ). Π’Π°ΠΊΠ°, ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, ΠΏΡ€ΠΈ ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ ΠΎΠ±Ρ€ΡŠΡ‰Π΅Π½ΠΈΠ΅ към ΠΌΠΎΠ΄ΡƒΠ»Π° Π½Π° ΡƒΠ΅Π± рСсурса, сС Ρ„ΠΎΡ€ΠΌΠΈΡ€Π° ΠΈ разпрСдСля статиката (Π² дСйствитСлност β€” чСсто символични Π»ΠΈΠ½ΠΊΠΎΠ²Π΅, Π½ΠΎ Π·Π° Ρ‚ΠΎΠ²Π° ΠΏΠΎ-късно) с ΡƒΠ½ΠΈΠΊΠ°Π»Π΅Π½ Π·Π° Ρ‚ΠΎΠ²Π° Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅ ΠΎΠ±Ρ‰ ΠΊΠΎΡ€Π΅Π½ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³:

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

Π‘ ΠΊΠ°ΠΊΠ²ΠΈ послСдствия ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΡΠ±Π»ΡŠΡΠΊΠ°Ρ‚Π΅ Π² контСкста Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°?

ΠŸΡ€ΠΎΡΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€

НСка Π²Π·Π΅ΠΌΠ΅ΠΌ доста разпространСн случай, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ PHP стои nginx Π·Π° Ρ€Π°Π·Π΄Π°Π²Π°Π½Π΅ Π½Π° статика ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° прости заявки. Най-простият Π½Π°Ρ‡ΠΈΠ½ Π΅ Deployment с Π΄Π²Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°:

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

Π’ простом ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ конфигурация nginx выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

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

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ запросС ΠΊ сайту Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ с PHP ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ ассСты. Но Π² случаС с двумя ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ pod’С β€” nginx Π½Π΅ Π·Π½Π°Π΅Ρ‚ ΠΎ статичСских Ρ„Π°ΠΉΠ»Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ (согласно ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ) Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΠΌ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π½Π° всС запросы ΠΊ CSS- ΠΈ JS-Ρ„Π°ΠΉΠ»Π°ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ 404. ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ β€” ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ для ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². ΠŸΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ β€” ΠΎΠ±Ρ‰ΠΈΠΉ 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

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ статичСскиС Ρ„Π°ΠΉΠ»Ρ‹ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΡ‚Π΄Π°ΡŽΡ‚ΡΡ nginx. Однако это ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΈ Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ свои Π½ΡŽΠ°Π½ΡΡ‹ ΠΈ Π½Π΅Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Π½ΠΈΠΆΠ΅.

Π‘ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅

Π‘Π΅Π³Π° Π΄Π° си прСдставим ситуация, Π² която потрСбитСлят Π΅ влязъл Π½Π° сайта, Π·Π°Ρ€Π΅Π΄ΠΈΠ» страницата със стиловСтС, Π½Π°Π»ΠΈΡ‡Π½ΠΈ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Π° Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Ρ‡Π΅Ρ‚Π΅ страницата, Π½ΠΈΠ΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ прСизтСглямС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π’ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° с Π°ΠΊΡ‚ΠΈΠ²ΠΈ стана пусто ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° заявка към PHP, Π·Π° Π΄Π° стартира Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½ΠΎΠ²ΠΈ. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Π΄ΠΎΡ€ΠΈ ΠΈ слСд Ρ‚ΠΎΠ²Π°, Π²Ρ€ΡŠΠ·ΠΊΠΈΡ‚Π΅ към старата статичност Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Π½Π΅Π°ΠΊΡ‚ΡƒΠ°Π»Π½ΠΈ, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π³Ρ€Π΅ΡˆΠΊΠΈ Π² ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° статиката.

ОсвСн Ρ‚ΠΎΠ²Π°, Π½Π°ΠΉ-вСроятно ΠΈΠΌΠ°ΠΌΠ΅ сравнитСлно Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π΅Π½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π° Ρ‚ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ Π΅Π΄Π½Π° копия Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ няма Π΄Π° Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½Π°:

  • ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€Π°Π½Π΅ Deployment Π΄ΠΎ Π΄Π²Π΅ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ.
  • ΠŸΡ€ΠΈ ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ ΠΎΠ±Ρ€ΡŠΡ‰Π΅Π½ΠΈΠ΅ към сайта Π² Π΅Π΄Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ° бяха създадСни Π°ΠΊΡ‚ΠΈΠ²ΠΈ.
  • Π’ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ingress Ρ€Π΅ΡˆΠΈ (Π² ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° балансиранСто Π½Π° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ) Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈ заявка към Π²Ρ‚ΠΎΡ€Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°, Π° Ρ‚Π°ΠΌ Ρ‚Π΅Π·ΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈ ΠΎΡ‰Π΅ Π³ΠΈ няма. Или ΠΌΠΎΠΆΠ΅ Π±ΠΈ Ρ‚Π°ΠΌ Π²Π΅Ρ‡Π΅ Π³ΠΈ няма, Π·Π°Ρ‰ΠΎΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ RollingUpdate ΠΈ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€Π°Π²ΠΈΠΌ Π΄Π΅ΠΏΠ»ΠΎΠΉ.

ΠžΠ±Ρ‰ΠΎ Π²Π·Π΅Ρ‚ΠΎ, Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ Π΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ Π³Ρ€Π΅ΡˆΠΊΠΈ.

Π—Π° Π΄Π° Π½Π΅ Π·Π°Π³ΡƒΠ±ΠΈΠΌ старитС Π°ΠΊΡ‚ΠΈΠ²ΠΈ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠΌ emptyDir Π½Π° hostPath, ΠΊΠ°Ρ‚ΠΎ физичСски складирамС статиката Π½Π° възСла Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°. Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π΅ лош, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π² дСйствитСлност трябва Π΄Π° сС ΡΠ²ΡŠΡ€ΠΆΠ΅ΠΌ с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ възСл Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ си, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΈ прСнос Π½Π° Π΄Ρ€ΡƒΠ³ΠΈ възли дирСкторията няма Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅. Или Π΅ Π½ΡƒΠΆΠ½Π° някаква Ρ„ΠΎΠ½ΠΎΠ²Π° синхронизация Π½Π° дирСкторията ΠΌΠ΅ΠΆΠ΄Ρƒ Π²ΡŠΠ·Π»ΠΈΡ‚Π΅.

Какви са Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΈΡ‚Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ?

  1. Ако Ρ…Π°Ρ€Π΄ΡƒΠ΅Ρ€ΡŠΡ‚ ΠΈ рСсурситС позволяват, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ cephfs Π·Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ€Π°Π²Π½ΠΎΠ΄ΠΎΡΡ‚ΡŠΠΏΠ½Π° дирСктория Π·Π° Π½ΡƒΠΆΠ΄Π°Ρ‚Π° ΠΎΡ‚ статиката. ΠžΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π° докумСнтация ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π° SSD дисковС, ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Ρ‚Ρ€ΠΈΠΊΡ€Π°Ρ‚Π½Π° рСпликация ΠΈ Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΎ "Π΄Π΅Π±Π΅Π»ΠΎ" ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²ΡŠΠ·Π»ΠΈΡ‚Π΅ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°.
  2. По-ΠΌΠ°Π»ΠΊΠΎ взискатСлСн Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π±ΠΈ Π±ΠΈΠ» ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° NFS ΡΡŠΡ€Π²ΡŠΡ€. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, трябва Π΄Π° сС ΠΈΠΌΠ° ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡ‚ΠΎ повишаванС Π½Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° заявки ΠΎΡ‚ ΡƒΠ΅Π± ΡΡŠΡ€Π²ΡŠΡ€Π°, Π° ΠΈ устойчивостта ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΠ°Π· Ρ‰Π΅ останС ΠΆΠ΅Π»Π°Ρ‚Π΅Π»Π½Π°. ΠŸΠΎΡΠ»Π΅Π΄ΡΡ‚Π²ΠΈΡΡ‚Π° ΠΎΡ‚ ΠΎΡ‚ΠΊΠ°Π·Π° са катастрофални: Π·Π°Π³ΡƒΠ±Π°Ρ‚Π° Π½Π° mount'Π° ΠΎΠ±Ρ€ΠΈΡ‡Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Π½Π° Π³ΠΈΠ±Π΅Π» ΠΏΠΎΠ΄ натиска Π½Π° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ LA, стрСмящо сС към Π½Π΅Π±Π΅Ρ‚ΠΎ.

ОсвСн всичко Π΄Ρ€ΡƒΠ³ΠΎ, Π·Π° всички Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΈ Π·Π° създаванС Π½Π° постоянно Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Ρ‰Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° Ρ„ΠΎΠ½ΠΎΠ²Π° чистка Π½Π° остарСли Π½Π°Π±ΠΎΡ€ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, Π½Π°Ρ‚Ρ€ΡƒΠΏΠ°Π½ΠΈ Π·Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅. ΠŸΡ€Π΅Π΄ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ с PHP ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° поставим DaemonSet ΠΊΠ΅ΡˆΠΈΡ€Π°Ρ‰ΠΈ nginx, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ копията Π½Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ‚Π΅ Π·Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅. Π’ΠΎΠ²Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ лСсно сС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° proxy_cache с с Π΄ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π° Π½Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π² Π΄Π½ΠΈ ΠΈΠ»ΠΈ Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚ΠΈ дисково пространство.

ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ с посочСнитС ΠΏΠΎ-Π³ΠΎΡ€Π΅ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΈ систСми прСдоставя ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎ ΠΏΠΎΠ»Π΅ Π·Π° Π²ΡŠΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠ°Ρ‚ΠΎ СдинствСното ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π΅ Π±ΡŽΠ΄ΠΆΠ΅Ρ‚ΡŠΡ‚ ΠΈ тСхничСскитС Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π½Π° ΠΎΠ½Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚ ΠΈ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚. Накратко, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΏΠΎ-проста Π΅ систСмата, Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎ-стабилно Ρ€Π°Π±ΠΎΡ‚ΠΈ. ДобавянСто Π½Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ слоСвС ΠΏΡ€Π°Π²ΠΈ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° инфраструктурата ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Ρ‚Ρ€ΡƒΠ΄Π½Π°, Π° с Ρ‚ΠΎΠ²Π° ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π° ΠΈ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π° диагностика ΠΈ Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ ΠΏΡ€ΠΈ всякакви нСизправности.

ΠŸΡ€Π΅ΠΏΠΎΡ€ΡŠΠΊΠ°

Ако Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ‚Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΈ Π·Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π²ΠΈ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π½Π΅ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ΠΎ (слоТно, скъпо...), заслуТава Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ ситуацията ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ ъгъл. А ΠΈΠΌΠ΅Π½Π½ΠΎ β€” Π΄Π° сС Π·Π°Π΄ΡŠΠ»Π±ΠΎΡ‡ΠΈΡ‚Π΅ Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ Π΄Π° ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΎΡ‚ ΠΊΠΎΠ΄Π°, ΡΠ²ΡŠΡ€Π·Π²Π°ΠΉΠΊΠΈ сС с някаква статична структура ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ Π² ΠΎΠ±Ρ€Π°Π·Π°, нСдвусмислСно опрСдСлянС Π½Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°Ρ‚Π° Π½Π° "подгряванС" ΠΈ/ΠΈΠ»ΠΈ ΠΏΡ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ‚Π΅ Π½Π° Π΅Ρ‚Π°ΠΏΠ° Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΎΠ±Ρ€Π°Π·Π°. Π’Π°ΠΊΠ° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ прСдсказуСмо ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈ Сднакъв Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π·Π° всички срСди ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ Π½Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Ако сС Π²ΡŠΡ€Π½Π΅ΠΌ към конкрСтния ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с Ρ„Ρ€Π΅ΠΉΠΌΡƒΡŠΡ€ΠΊΠ° Yii ΠΈ Π½Π΅ сС Π·Π°Π΄ΡŠΠ»Π±ΠΎΡ‡Π°Π²Π°ΠΌΠ΅ Π² Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° структура (Ρ‰ΠΎ Π½Π΅ Π΅ Ρ†Π΅Π»Ρ‚Π° Π½Π° статията), Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π΅ Π΄Π° посочим Π΄Π²Π° популярни ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°:

  1. Π”Π° сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΎΠ±Ρ€Π°Π·Π°, Π·Π° Π΄Π° сС поставят Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ‚Π΅ Π½Π° прСдсказуСмо място. Π’Π°ΠΊΠ° ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚/Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚ Π² Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΊΠ°Ρ‚ΠΎ yii2-static-assets.
  2. Π”Π° сС опрСдСлят ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΈ Ρ…Π΅ΡˆΠΎΠ²Π΅ Π·Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈΡ‚Π΅ Π½Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ‚Π΅, ΠΊΠ°ΠΊΡ‚ΠΎ сС описва, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Ρ‚Π°Π·ΠΈ прСзСнтация (Π·Π°ΠΏΠΎΡ‡Π²Π°ΠΉΠΊΠΈ ΠΎΡ‚ слайд β„–35). ΠœΠ΅ΠΆΠ΄Ρƒ Π΄Ρ€ΡƒΠ³ΠΎΡ‚ΠΎ, Π°Π²Ρ‚ΠΎΡ€ΡŠΡ‚ Π½Π° Π΄ΠΎΠΊΠ»Π°Π΄Π° Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка (ΠΈ Π½Π΅ Π±Π΅Π· основаниС!) ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π° слСд ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ‚Π΅ Π½Π° build-ΡΡŠΡ€Π²ΡŠΡ€Π° Π΄Π° Π³ΠΈ Π·Π°Ρ€Π΅Π΄ΠΈ Π² Ρ†Π΅Π½Ρ‚Ρ€Π°Π»Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ (ΠΊΠ°Ρ‚ΠΎ S3), ΠΏΡ€Π΅Π΄ ΠΊΠΎΠ΅Ρ‚ΠΎ Π΄Π° постави CDN.

Π—Π°Ρ€Π΅ΠΆΠ΄Π°Π΅ΠΌΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅

Π”Ρ€ΡƒΠ³ случай, ΠΊΠΎΠΉΡ‚ΠΎ Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ Ρ‰Π΅ изстрСля ΠΏΡ€ΠΈ ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠ½Π΅ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² кластСр Kubernetes, Π΅ ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° потрСбитСлски Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π² Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма. НапримСр, ΠΎΡ‚Π½ΠΎΠ²ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° PHP, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ΅ΠΌΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Ρ‡Ρ€Π΅Π· Ρ„ΠΎΡ€ΠΌΠ° Π·Π° ΠΊΠ°Ρ‡Π²Π°Π½Π΅, ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Π½Π΅Ρ‰ΠΎ с тях ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° ΠΈ Π³ΠΈ Π²Ρ€ΡŠΡ‰Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ.

ΠœΡΡΡ‚ΠΎΡ‚ΠΎ, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Ρ‚Π΅Π·ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ трябва Π΄Π° сС поставят, Π² контСкста Π½Π° Kubernetes трябва Π΄Π° Π΅ ΠΎΠ±Ρ‰ΠΎ Π·Π° всички Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. Π’ зависимост ΠΎΡ‚ слоТността Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ нСобходимостта ΠΎΡ‚ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° пСрсистСнтност Π½Π° Ρ‚Π΅Π·ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, Ρ‚Π°ΠΊΠΎΠ²Π° място ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ спомСнатитС ΠΏΠΎ-Π³ΠΎΡ€Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΈ Π·Π° shared устройства, Π½ΠΎ, ΠΊΠ°ΠΊΡ‚ΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, Ρ‚Π΅ ΠΈΠΌΠ°Ρ‚ своитС Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ†ΠΈ.

ΠŸΡ€Π΅ΠΏΠΎΡ€ΡŠΠΊΠ°

Π•Π΄ΠΈΠ½ ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΈΡ‚Π΅ Π·Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° S3-ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ (Π΄ΠΎΡ€ΠΈ ΠΈ някакъв Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΎΡ‚ катСгория self-hosted ΠΊΠ°Ρ‚ΠΎ minio). ΠŸΡ€Π΅Ρ…ΠΎΠ΄ΡŠΡ‚ към Ρ€Π°Π±ΠΎΡ‚Π° с S3 Ρ‰Π΅ изисква ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π½Π° Π½ΠΈΠ²ΠΎ ΠΊΠΎΠ΄, Π° ΠΊΠ°ΠΊ Ρ‰Π΅ ΠΏΡ€ΠΎΡ‚ΠΈΡ‡Π° доставката Π½Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅ Π½Π° Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π°, Π²Π΅Ρ‡Π΅ писахмС.

ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡΠΊΠΈ сСсии

ΠžΡ‚Π΄Π΅Π»Π½ΠΎ трябва Π΄Π° сС ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈ организацията Π½Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° потрСбитСлски сСсии. ЧСсто Ρ‚ΠΎΠ²Π° ΡΡŠΡ‰ΠΎ са Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° диска, ΠΊΠΎΠ΅Ρ‚ΠΎ Π² контСкста Π½Π° Kubernetes Ρ‰Π΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ постоянни заявки Π·Π° авторизация ΠΎΡ‚ потрСбитСля, Π°ΠΊΠΎ Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° заявка ΠΏΠΎΠΏΠ°Π΄Π½Π΅ Π² Π΄Ρ€ΡƒΠ³ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€.

ΠžΡ‚Ρ‡Π°ΡΡ‚ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ сС Ρ€Π΅ΡˆΠ°Π²Π° с Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° stickySessions Π½Π° ingress (функцията сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° във всички популярни ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ΠΈ ingress β€” ΠΏΠΎ-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π²ΠΈΠΆΡ‚Π΅ Π² нашия ΠΎΠ±Π·ΠΎΡ€), Π·Π° Π΄Π° сС ΡΠ²ΡŠΡ€ΠΆΠ΅ потрСбитСлят с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ pod с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ:

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

Но Ρ‚ΠΎΠ²Π° няма Π΄Π° освободи ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΉΠΌΠ΅Π½Ρ‚ΠΈ.

ΠŸΡ€Π΅ΠΏΠΎΡ€ΡŠΠΊΠ°

По-правилният Π½Π°Ρ‡ΠΈΠ½ Ρ‰Π΅ бъдС ΠΏΡ€Π΅Ρ…ΠΎΠ΄ΡŠΡ‚ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ към ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° сСсии Π² memcached, Redis ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ β€” ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, напълно Π΄Π° сС ΠΎΡ‚ΠΊΠ°ΠΆΠ΅ ΠΎΡ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΈΡ‚Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΈ.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π Π°Π·Π³Π»Π΅ΠΆΠ΄Π°Π½ΠΈΡ‚Π΅ Π² тСкста инфраструктурни Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ заслуТават ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ само Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈ "костил" (ΠΊΠΎΠ΅Ρ‚ΠΎ Π·Π²ΡƒΡ‡ΠΈ ΠΏΠΎ-красиво Π½Π° английски ΠΊΠ°Ρ‚ΠΎ workaround). Π’Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π°ΠΊΡ‚ΡƒΠ°Π»Π½ΠΈ Π² Ρ€Π°Π½Π½ΠΈΡ‚Π΅ Π΅Ρ‚Π°ΠΏΠΈ Π½Π° миграцията Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² Kubernetes, Π½ΠΎ Π½Π΅ трябва Π΄Π° "пуснат ΠΊΠΎΡ€Π΅Π½ΠΈ".

ΠžΠ±Ρ‰ΠΈΡΡ‚ ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡ΠΈΡ‚Π΅Π»Π΅Π½ ΠΏΡŠΡ‚ Π΅ Π΄Π° сС ΠΎΡ‚ΠΊΠ°ΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ тях Π² ΠΏΠΎΠ»Π·Π° Π½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½ΠΎ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ с Π²Π΅Ρ‡Π΅ Π΄ΠΎΠ±Ρ€Π΅ извСстния Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ Ρ…ΠΎΡ€Π° 12-Factor App. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π° β€” Π°Π΄Π°ΠΏΡ‚ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ към stateless Π²ΠΈΠ΄ β€” Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ Ρ‰Π΅ са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ΄Π°, ΠΈ Ρ‚ΡƒΠΊ Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° сС Π½Π°ΠΌΠ΅Ρ€ΠΈ баланс ΠΌΠ΅ΠΆΠ΄Ρƒ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅/изискванията Π½Π° бизнСса ΠΈ пСрспСктивитС Π·Π° рСализация ΠΈ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° избрания ΠΏΡŠΡ‚.

P.S.

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π² нашия Π±Π»ΠΎΠ³:

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster