Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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(Laravel)应用程序,并在提取新图像时更新代码更改_Php_Laravel_Docker_Kubernetes - Fatal编程技术网

Kubernetes:如何从持久卷使用php(Laravel)应用程序,并在提取新图像时更新代码更改

Kubernetes:如何从持久卷使用php(Laravel)应用程序,并在提取新图像时更新代码更改,php,laravel,docker,kubernetes,Php,Laravel,Docker,Kubernetes,我是Kubernetes的新手,我尝试从持久卷运行Laravel应用程序。我让它工作,现在我将有代码从持久卷运行,我可以扩展它 我让nginx在自己的pod中运行,并共享相同的持久卷 apiVersion: apps/v1 kind: Deployment metadata: name: nginx labels: tier: backend app: nginx spec: replicas: 4 selector: matchLabels:

我是Kubernetes的新手,我尝试从持久卷运行Laravel应用程序。我让它工作,现在我将有代码从持久卷运行,我可以扩展它

我让nginx在自己的pod中运行,并共享相同的持久卷

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    tier: backend
    app: nginx
spec:
  replicas: 4
  selector:
    matchLabels:
      app: nginx
      tier: backend
  template:
    metadata:
      labels:
        app: nginx
        tier: backend
    spec:
      volumes:
      - name: laravel-pv-volume
        persistentVolumeClaim:
          claimName: laravel-pv-claim
      - name: config
        configMap:
          name: nginx-config
          items:
          - key: config
            path: site.conf
      containers:
      - name: nginx
        image: nginx
        volumeMounts:
        - name: laravel-pv-volume
          mountPath: /code
        - name: config
          mountPath: /etc/nginx/conf.d
        ports:
        - containerPort: 80
          name: http
          protocol: TCP
我的Laravel部署包括initContainers,它有命令将Laravel源代码从/var/www复制到/code,后者是持久卷路径

apiVersion: apps/v1
kind: Deployment
metadata:
  name: php
  labels:
    tier: backend
spec:
  replicas: 1
  selector:
    matchLabels:
      app: php
      tier: backend
  template:
    metadata:
      labels:
        app: php
        tier: backend
    spec:
      volumes:
      - name: laravel-pv-volume
        persistentVolumeClaim:
          claimName: laravel-pv-claim
      containers:
      - name: php
        image: registry.digitalocean.com/xxx/laravel-test:3.0
        volumeMounts:
        - name: laravel-pv-volume
          mountPath: /code
      initContainers:
      - name: install
        imagePullPolicy: Always
        image: registry.digitalocean.com/xxx/laravel-test:3.0
        command: ["/bin/sh", "-c", "cp -R /var/www/. /code && chown -R www-data:www-data /code"]
        volumeMounts:
        - name: laravel-pv-volume
          mountPath: /code
在Laravel映像更改和代码更新之后,如何使用新代码创建新的POD,不知何故,我认为在此之后,我应该为装载创建新的持久卷路径,该路径将运行新POD的代码,当旧POD终止时,最后一个将从持久卷中删除“旧”代码。但我也不知道现在豆荚会是最后一个吗

我的解决办法可能是,如果我的Laravel映像更新到下一个版本,我将添加命令以清除/code文件夹,但这不是最佳做法,并将导致停机

命令:[“/bin/sh”、“-c”、“rm-rf/code/*”&&“cp-R/var/www//code&&chown-R www-data:www-data/code”]

我了解这些实践来自何方。但你应该在库伯内特斯身上做些不同的事情

Docker图像中的代码 更新PHP代码时,不要将其放在PersistentVolume上,而是使用例如
Docker build-t:.
构建一个新的Docker映像,当您将映像推送到注册表时,您可以更新
部署中的
映像:
字段。避免将代码放在持久卷上,很可能在部署中根本不需要持久卷声明

您很可能希望在
Dockerfile
中使用
COPY
命令将代码放入容器中,例如(不知道路径):

我了解这些做法的来源。但你应该在库伯内特斯身上做些不同的事情

Docker图像中的代码 更新PHP代码时,不要将其放在PersistentVolume上,而是使用例如
Docker build-t:.
构建一个新的Docker映像,当您将映像推送到注册表时,您可以更新
部署中的
映像:
字段。避免将代码放在持久卷上,很可能在部署中根本不需要持久卷声明

您很可能希望在
Dockerfile
中使用
COPY
命令将代码放入容器中,例如(不知道路径):

COPY code/ opt/app/myapp