docker — 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?

1

Решение

В 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

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

1

Другие решения

Бежал в такой же ситуации. Это пример, Присоедините обработчики к событиям жизненного цикла контейнера на ваше изображение 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 в одном изображении.

-1

По вопросам рекламы [email protected]