我试图将两个nodejs应用程序放在同一个吊舱中,因为它们通常应该位于同一台机器上,不幸的是,它们以这样的方式严重耦合在一起,以至于它们都在寻找另一个的文件夹(pos/app.js需要/pos-service,pos-service/app.js需要/pos)。
最后,文件夹应该包含:
/pos
/pos-service它们的卷不需要持久化,所以我尝试与emptyDir共享它们的卷,如下所示:
apiVersion: apps/v1
kind: Deployment
metadata:
name: pos-deployment
labels:
app: pos
spec:
replicas: 1
selector:
matchLabels:
app: pos
template:
metadata:
labels:
app: pos
spec:
volumes:
- name: shared-data
emptyDir: {}
containers:
- name: pos-service
image: pos-service:0.0.1
volumeMounts:
- name: shared-data
mountPath: /pos-service
- name: pos
image: pos:0.0.3
volumeMounts:
- name: shared-data
mountPath: /pos然而,当吊舱发射时,我把它们放入每个容器中,它们似乎仍然是孤立的,彼此的文件夹也看不见。
我会提供任何帮助的,谢谢
发布于 2021-01-30 19:14:39
这是一个Community的答案,所以请随意编辑它,并添加任何您认为重要的附加细节。
既然这个问题已经解决了,或者说已经被澄清了,因为实际上这里没有什么要解决的,所以让我们发布一个Community 答案,因为它部分基于几个不同用户的评论。
正如哑光和戴维·麦子已经提到的,它可以正常工作,在您的示例中,没有任何内容可以复制到emptyDir卷中:
使用您所展示的YAML,任何东西都不会复制到emptyDir卷中,除非映像的启动知道这样做。- David Maze 12月28日‘20日12时45分
正如它的名字所暗示的那样,emptyDir完全是空的,所以您的任务是用所需的数据预填充它。可以通过将init容器临时挂载到不同的挂载点(例如/mnt/my-epmty-dir ),并复制容器(例如,/pos和/pos-service )中已经存在的特定目录的内容(如示例中的/pos和/pos-service),然后再将其挂载到所需的位置来完成。看一看这个例子,它是我以前的一个答案,因为它可以用同样的方式完成。您的Deployment可能如下所示:
apiVersion: apps/v1
kind: Deployment
metadata:
name: pos-deployment
labels:
app: pos
spec:
replicas: 1
selector:
matchLabels:
app: pos
template:
metadata:
labels:
app: pos
spec:
volumes:
- name: shared-data
emptyDir: {}
initContainers:
- name: pre-populate-empty-dir-1
image: pos-service:0.0.1
command: ['sh', '-c', 'cp -a /pos-service/* /mnt/empty-dir-content/']
volumeMounts:
- name: shared-data
mountPath: "/mnt/empty-dir-content/"
- name: pre-populate-empty-dir-2
image: pos:0.0.3
command: ['sh', '-c', 'cp -a /pos/* /mnt/empty-dir-content/']
volumeMounts:
- name: shared-data
mountPath: "/mnt/empty-dir-content/"
containers:
- name: pos-service
image: pos-service:0.0.1
volumeMounts:
- name: shared-data
mountPath: /pos-service
- name: pos
image: pos:0.0.3
volumeMounts:
- name: shared-data
mountPath: /pos值得一提的是,这里没有什么奇怪的,因为mount在、Linux、或其他基于nix的操作系统上的工作方式非常精确。
如果您的主磁盘上有/var/log/your-app,并填充了日志,然后挂载一个定义为挂载点/var/log/your-app的新的、空的磁盘,那么您将不会看到任何内容。它不会从主磁盘上的原始位置被删除,它将变得不可用,因为在这个位置现在你已经挂载了完全不同的卷(碰巧是空的或者可能有完全不同的内容)。当您再次卸载并访问您的/var/log/your-app时,您将看到它的原始内容。我希望一切都清楚。
https://stackoverflow.com/questions/65471145
复制相似问题