Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
kubernetes php nginx部署共享卷_Php_Docker_Nginx_Kubernetes_Docker Compose - Fatal编程技术网

kubernetes php nginx部署共享卷

kubernetes php nginx部署共享卷,php,docker,nginx,kubernetes,docker-compose,Php,Docker,Nginx,Kubernetes,Docker Compose,在kubernetes中,我们试图通过将PHP代码部署在预先打包的容器中来实现PHP代码的不变部署 --- apiVersion: extensions/v1beta1 kind: Deployment metadata: name: serviceability spec: replicas: 1 template: metadata: spec: containers: - name: my-stuff-php image

在kubernetes中,我们试图通过将PHP代码部署在预先打包的容器中来实现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: {}
从本质上讲,kubernetes卷将目录替换为一个空卷,但我想保留php容器的数据,以便我们可以与nginx容器共享该数据,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在卷方面的行为不同


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

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

用于创建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将如下所示:

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图像,这是一个我的东西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也可以读取文件

    ,但不建议这样做。您是否尝试过创建指向同一目录的两个卷。基本上你可以在k8上创建卷,并通过claimin将其用于其他豆荚