![](/img/trans.png)
[英]How can I set a kubernetes pod so php-fpm and nginx can manipulate data on a persistent volume?
[英]kubernetes php nginx deployment share volume
在 kubernetes 中,我們嘗試通過將 php 代碼部署在預先打包的容器中來對我們的 PHP 代碼進行不可變的部署。
本質上,kubernetes 卷將目錄替換為空卷,但我想保留 php 容器的數據,以便我們可以與 nginx 容器共享該數據,該容器具有配置為連接到 php 容器的 vhost。
---
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 在卷方面的行為不同。
如何與 nginx 容器共享來自我的 php 容器的 /var/www/html 中的現有數據?
Kubernetes 沒有像 docker-compose 這樣的機制來共享某個文件夾作為卷。 但是您可以創建 Persistent Volume (PV) 和 Persistent Volume Claim (PVC) 並在容器之間共享您的數據。 它在來自 Docs 的文檔示例中進行了描述:
用於創建 PV 的 YAML
kind: PersistentVolume
apiVersion: v1
metadata:
name: task-pv-volume
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
hostPath:
path: "/mnt/data"
比你用這卷做 PVC
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
因此,您將擁有包含在 pod 中的兩個容器之間共享的數據的卷。
跑到同樣的情況。 這是一個示例, 將容器生命周期事件的處理程序附加到您的 php-fpm 圖像 my-stuff-php,在您的情況下:
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", "cp -r /app/. /var/www/html"]
/app
目錄中的代碼構建您的 php-fpm。emptyDir
創建共享卷,它也是 nginx 文檔根目錄。lifecycle.postStart.exec.command
作為上面的示例將源代碼復制到該共享卷。但不確定這是否是最好的方法。 另一種方法是將 nginx 和 php-fpm 組合在一個圖像中。
看起來您需要一個 initContainer 來托管您的源代碼,
然后做一個 postStart 將代碼復制到一個空的目錄共享卷,
因此 php-fpm 和 nginx 都會共享這個卷
在這種情況下,如果您的應用程序將在運行時寫入文件,
nginx 和 php-fpm 也可以讀取文件
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.