首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >kubernetes php nginx部署共享卷

kubernetes php nginx部署共享卷
EN

Stack Overflow用户
提问于 2018-07-30 21:57:22
回答 3查看 1.7K关注 0票数 2

在kubernetes中,我们试图通过将PHP代码部署在预打包的容器中来实现php代码的不可变部署。

在本质上kubernetes卷用空卷替换目录,但我想保留php容器的数据,这样我们就可以与nginx容器共享它,nginx容器有一个vhost被配置为连接到php容器。

代码语言:javascript
复制
---
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对卷的行为不同。

如何将我的php容器中的/var/www/html中的现有数据与nginx容器共享?

EN

回答 3

Stack Overflow用户

发布于 2018-07-31 23:32:10

Kubernetes没有像docker-compose这样的机制来共享一些文件夹作为卷。但您可以创建永久卷(PV)和永久卷声明(PVC),并在容器之间共享数据。文档中的documentation示例中对其进行了描述:

用于创建PV的YAML

代码语言:javascript
复制
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:

代码语言:javascript
复制
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: task-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi

用于部署的YAML将如下所示:

代码语言:javascript
复制
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中的两个容器之间共享的数据卷。

票数 1
EN

Stack Overflow用户

发布于 2018-12-04 19:47:51

也遇到了同样的情况。这是一个php-fpm镜像的example,在本例中是my- Attach Handlers to Container Lifecycle Events -php:

代码语言:javascript
复制
lifecycle:
    postStart:
      exec:
        command: ["/bin/sh", "-c", "cp -r /app/. /var/www/html"]

  1. /app中使用代码构建您的php-fpm与emptyDir共享卷,这也是nginx文档的根目录。
  2. 使用上面的示例lifecycle.postStart.exec.command将源代码复制到该共享卷。

但不确定这是否是最好的方法。另一种方法是将nginx和php-fpm组合在一个图像中。

票数 0
EN

Stack Overflow用户

发布于 2020-09-09 18:21:08

看起来您需要一个initContainer来托管源代码,

然后进行postStart以将代码复制到空的目录共享卷,

因此,php-fpm和nginx都将共享此卷。

在这种情况下,如果应用程序将在运行时写入文件,

nginx和php-fpm也可以读取该文件

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51595649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档