我正在寻找一种模式,该模式允许在Kubernetes中在同一容器上运行的两个容器之间共享卷。
我的用例是:我有一个在Docker容器中运行的Ruby on Rails应用程序。docker映像在/app/<app- name>/public
目录中包含静态资产,我需要从在同一容器中并排运行的nginx容器访问这些资产。
在“ vanilla”泊坞窗中,我将使用--volumes-from
flag共享此目录:
docker run --name app -v /app/<app-dir>/public <app-image>
docker run --volumes-from app nginx
阅读此文档后:https
:
//github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/volumes.md
我尝试了此操作(仅显示了相关条目):
spec:
containers:
- image: <app-image>
name: <app-name>
volumeMounts:
- mountPath: /app/<app-name>/public
name: assets
- image: nginx
name: nginx
volumeMounts:
- mountPath: /var/www/html
name: assets
readOnly: true
volumes:
- name: assets
hostPath:
path: /tmp/assets
但:
/tmp/assets
该节点存在,它还是空的/app/<app-name>/public
应用程序容器内部也为空作为一种解决方法,我将尝试在应用程序容器启动时填充共享目录(仅cp /app/<app- name>/public/*
是共享目录),但是我真的不喜欢这个想法。
问题: 如何--volumes- from
在Kubernetes中模仿,或者如果没有直接对应的对象,如何将文件从一个容器共享到在同一容器中运行的其他容器?
apiVersion: v1beta3
Client Version: version.Info{Major:"0", Minor:"17", GitVersion:"v0.17.0", GitCommit:"82f8bdac06ddfacf493a9ed0fedc85f5ea62ebd5", GitTreeState:"clean"}
Server Version: version.Info{Major:"0", Minor:"17", GitVersion:"v0.17.0", GitCommit:"82f8bdac06ddfacf493a9ed0fedc85f5ea62ebd5", GitTreeState:"clean"}
[update-2016-8] 在最新的Kubernetes版本中,您可以使用一个非常好的功能命名init- container
为替换postStart
下面我的答案中的部分,这将确保容器顺序。
apiVersion: v1
kind: Pod
metadata:
name: javaweb-2
spec:
initContainers:
- name: war
image: resouer/sample:v2
command: ["cp", "/sample.war", "/app"]
volumeMounts:
- mountPath: /app
name: app-volume
containers:
- name: tomcat
image: resouer/mytomcat:7.0
command: ["sh","-c","/root/apache-tomcat-7.0.42-v2/bin/start.sh"]
volumeMounts:
- mountPath: /root/apache-tomcat-7.0.42-v2/webapps
name: app-volume
ports:
- containerPort: 8080
hostPort: 8001
volumes:
- name: app-volume
emptyDir: {}
注意 :initContainer仍然是一个 beta功能,
因此该Yaml的工作版本实际上类似于:http : //kubernetes.io/docs/user-guide/production-
pods/#handling-initialization,请注意该pod.beta.kubernetes.io/init-containers
部分。
-原始答案开始-
其实可以。您需要使用容器生命周期处理程序来控制要与其他容器共享的文件/目录。喜欢:
---
apiVersion: v1
kind: Pod
metadata:
name: server
spec:
restartPolicy: OnFailure
containers:
- image: resouer/sample:v2
name: war
lifecycle:
postStart:
exec:
command:
- "cp"
- "/sample.war"
- "/app"
volumeMounts:
- mountPath: /app
name: hostv1
- name: peer
image: busybox
command: ["tail", "-f", "/dev/null"]
volumeMounts:
- name: hostv2
mountPath: /app/sample.war
volumes:
- name: hostv1
hostPath:
path: /tmp
- name: hostv2
hostPath:
path: /tmp/sample.war
请检查我的要点以获取更多详细信息:
https://gist.github.com/resouer/378bcdaef1d9601ed6aa
当然,您可以使用emptyDir。因此,war容器可以将其/sample.war共享给对等容器,而不会陷入对等方的/ app目录。
如果我们可以容忍/ app被覆盖,它将更加简单:
---
apiVersion: v1
kind: Pod
metadata:
name: javaweb-2
spec:
restartPolicy: OnFailure
containers:
- image: resouer/sample:v2
name: war
lifecycle:
postStart:
exec:
command:
- "cp"
- "/sample.war"
- "/app"
volumeMounts:
- mountPath: /app
name: app-volume
- image: resouer/mytomcat:7.0
name: tomcat
command: ["sh","-c","/root/apache-tomcat-7.0.42-v2/bin/start.sh"]
volumeMounts:
- mountPath: /root/apache-tomcat-7.0.42-v2/webapps
name: app-volume
ports:
- containerPort: 8080
hostPort: 8001
volumes:
- name: app-volume
emptyDir: {}
我正在寻找一种模式,允许在Kubernetes的同一个pod上运行的两个容器之间共享卷。 我的用例是:我有一个在docker容器中运行的Ruby on Rails应用程序。docker映像包含应用程序中的静态资产/ 在“vanilla”docker中,我会使用“volumes from”标志共享此目录: 阅读此文档后:https://github.com/GoogleCloudPlatform/k
问题内容: 我正在使用JavaScript。我想存储具有以下属性的 唯一 ,无序字符串值的列表: 快速询问“列表中是否有A”的方法? 一种快速的方法(如果列表中存在A,则从列表中删除A) 一种快速的方法“将A添加到列表(如果尚不存在)”。 我真正想要的是一套。有什么建议以最佳方式模仿JavaScript中的集合吗? 这个问题建议使用Object,其键存储属性,并且所有值都设置为true:这是明智的
问题内容: 如何将结果集限制为给定列的 n个 不同值,其中实际行数可能更高? 输入表: 所需的输出,其中limit different = 5个client_id的不同值: 该平台旨在用于MySQL。 问题答案: 您可以使用子选择
问题内容: 我正在编写一个应用程序,用于将第三方数据源中的实体同步到我们自己的模式中,并在两者之间进行转换/映射。我正在使用Hibernate在我们自己的模式中表示和持久化实体。我遇到的一个问题是,我的一张桌子上有一个唯一的多列键。我想看到的行为类似于upsert:当Hibernate去持久化一个实体并检测到唯一的约束冲突时,它会执行更新。我们正在使用MySQL,它提供了INSERT … ON D
我有一个关于嘲笑的问题。在kotlin中,当您使用Mockito时,您可以: 或 有没有办法在dart/flutter中做这样的事情?我真的只需要将mock传递给某个函数并忘记,为什么我必须创建对象并使用Mock类扩展它? 有没有其他的图书馆可以帮助解决这个问题?
问题内容: 我是Docker的新手,对使用该功能感到兴奋,但是有些事情我不了解。 如果我想使用两个仅数据容器,每个容器都导出名为的卷,如何防止卷路径冲突?使用创建绑定装载时,我可以映射卷名称。我该怎么做? 所以我想要的看起来像这样: 问题答案: 可以完成,但目前在Docker命令行界面中尚不支持。 如何 查找卷目录: 因此,您可以自动执行此操作,并将这些目录挂载到您选择的挂载点: 现在,通过真实目