Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΡ€ΠΈ пСрСносС прилоТСния Π² 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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ