Общий объем развертывания kubernetes php nginx

В kubernetes мы пытаемся обеспечить неизменное развертывание нашего PHP-кода, развертывая PHP-код в предварительно упакованном контейнере.

По своей природе том kubernetes заменяет каталог пустым томом, но я хотел бы сохранить данные контейнера php, чтобы мы могли поделиться ими с контейнером nginx, у которого есть vhost, настроенный для подключения к контейнеру php.

---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: serviceability
spec:
  replicas: 1
  template:
    metadata:
     spec:
      containers:
      - name: my-stuff-php
        image: our-php-service-in-fpm-container:latest
        ports:
        - containerPort: 9000
          name: transport
          protocol: TCP
        volumeMounts:
        - name: my-volume
          mountPath: /var/www/html
      - name: my-stuff-nginx
        image: nginx:latest
        ports:
        - containerPort: 80
          name: http
          protocol: TCP
        volumeMounts:
        - name: my-volume
          mountPath: /var/www/html
      volumes:
      - name: my-volume
        emptyDir: {}

Аналогичная настройка для docker-compose работает, поскольку docker-compose ведет себя по-разному в отношении томов.

Как я могу поделиться существующими данными в / var / www / html из моего контейнера php с контейнером nginx?

Хотя это не рекомендуется. Пробовали ли вы создать 2 тома, указывающие на один и тот же каталог.

damitj07 30.07.2018 18:58
stackoverflow.com/questions/46100922/…. В принципе, вы можете создать том на k8 и использовать его в других модулях, заявив kubernetes.io/docs/tasks/configure-pod-container/….
Fahri 31.07.2018 09:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
2
1 518
3

Ответы 3

В Kubernetes нет такого механизма, как docker-compose, чтобы поделиться какой-либо папкой как томом. Но вы можете создать постоянный том (PV) и постоянное требование тома (PVC) и обмениваться данными между контейнерами. Это описано в документация Примеры из Документов:

YAML для создания PV

kind: PersistentVolume
apiVersion: v1
metadata:
  name: task-pv-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  hostPath:
    path: "/mnt/data"

Чем вы сделаете ПВХ из этого объема

YAML:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: task-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi

Ваш YAML для развертывания будет выглядеть так:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: serviceability
spec:
  replicas: 1
  template:
    metadata:
     spec:
      containers:
      - name: my-stuff-php
        image: our-php-service-in-fpm-container:latest
        ports:
        - containerPort: 9000
          name: transport
          protocol: TCP
        volumeMounts:
        - name: name: task-pv-storage
          mountPath: /var/www/html
      - name: my-stuff-nginx
        image: nginx:latest
        ports:
        - containerPort: 80
          name: http
          protocol: TCP
        volumeMounts:
        - name: name: task-pv-storage
          mountPath: /var/www/html
      volumes:
      - name: task-pv-storage
        ersistentVolumeClaim:
        claimName: task-pv-claim

В результате у вас будет том с данными, которые вы разделяете между двумя контейнерами в поде.

Пробежал в такой же ситуации. Это пример, Присоединение обработчиков к событиям жизненного цикла контейнера для вашего образа php-fpm, my-stuff-php, в вашем случае:

lifecycle:
    postStart:
      exec:
        command: ["/bin/sh", "-c", "cp -r /app/. /var/www/html"]
  1. Создайте свой php-fpm с кодом из каталога /app.
  2. Создайте общий том с emptyDir, который также является корнем документа nginx.
  3. Используйте lifecycle.postStart.exec.command в качестве примера выше, чтобы скопировать исходный код на этот общий том.

Но не уверен, что это лучший подход. Другой способ - объединить nginx и php-fpm в одном образе.

похоже, вам нужен initContainer для размещения исходного кода,

затем сделайте postStart, чтобы скопировать код в пустой том общего ресурса каталога,

поэтому и php-fpm, и nginx будут разделять этот объем

в этом случае, если ваше приложение будет записывать файл во время выполнения,

оба nginx и php-fpm тоже могут читать файл

Другие вопросы по теме