В 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?
В 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"]
/app
каталог.emptyDir
, который также является корнем документа nginx.lifecycle.postStart.exec.command
как пример выше, чтобы скопировать исходный код на этот общий том.Но не уверен, что это лучший подход. Другой способ — объединить nginx и php-fpm в одном изображении.