Kubernetes:如何从持久卷使用php(Laravel)应用程序,并在提取新图像时更新代码更改
我是Kubernetes的新手,我尝试从持久卷运行Laravel应用程序。我让它工作,现在我将有代码从持久卷运行,我可以扩展它 我让nginx在自己的pod中运行,并共享相同的持久卷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:
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