如何将文件放入pod?

时间:2017-03-02 22:00:55

标签: kubernetes coreos

我有一个功能齐全的Kubernetes集群,其中有一个主服务器和一个工作服,在CoreOS上运行。

一切正常,我的播客和服务运行良好。现在我不知道如何继续进行网络服务器的想法。

在我走得更远之前:我现在没有关于我想要解释的想法。我刚做了很多研究。

使用服务设置pod(nginx)时。您将获得默认的nginx页面。之后,您可以使用hostvolume(从主机到容器的卷映射)设置装载卷。

但是我想说我想要分隔每个站点(多个站点用不同的pod分隔),我怎样才能让我的用户将文件添加到他们的pod / nginx文档根目录?在CoreOS节点中使用FTP会删除Kubernetes方式并增加安全漏洞。

如果有人可以帮助我阐明这个问题,那就太好了。

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

我假设你想要运行多个nginx服务器。每个nginx服务器的内容由不同的管理员管理(您称之为用户)。

<强> TL; DR:

选项1:每次静态文件更改和部署新图像时,每个管理员都需要构建自己的nginx docker镜像。如果您将这些静态文件视为nginx应用程序源代码的一部分

,那就是这样

选项2:对nginx使用持久性卷,nginx映像的init-script应使用类似s3的内容来将所有文件与s3同步,然后启动nginx

在继续使用kubernetes构建应用程序之前。最重要的是将您的服务分成两个概念类别,并放弃直接触摸底层节点的愿望:

1)无状态:这些是由开发人员构建并可以发布的服务。它们可以被停止,启动,从一个节点移动到另一个节点,它们的文件系统可以在重启期间重置,它们将完美地工作。您的大多数网络服务都适合此类别。

2)有状态:这些服务无法像上面那样无法停止和重新启动。首先,它们的底层文件系统必须是持久的,并且在服务运行期间保持不变。数据库,文件服务器和类似服务属于此类别。这些需要特别小心,应该使用k8s persistent-volumes和现在stateful-sets

典型应用:

  • nginx:将nginx.conf构建到docker镜像中,并将其部署为无状态服务
  • rails / nodejs / python service:将源代码构建到docker镜像中,使用env-vars进行配置,部署为无状态服务
  • 数据库:挂载持久卷,使用env-vars配置,部署为有状态服务。

单独的网站:

  • 通常,我认为在k8s部署和k8s服务级别。每个站点可以是一个k8s部署和k8s服务集。然后,您可以使用单独的方式公开它们(不同的外部DNS / IP)

存储文件的应用程序用户:

  • 这绝对属于有状态服务。使用持久卷装入/ media类目录

开发人员更改文件:

  • 假设开发人员或管理员想要使用FTP来更改nginx所服务的文件。正确的模式是使用新文件构建docker镜像,然后使用该docker镜像。如果文件太多,并且您不认为这些文件是“来源”的一部分。然后使用类似s3和持久卷的东西。在你的docker image init脚本中,不要直接启动nginx。联系s3,将所有文件同步到持久卷上,然后启动nginx。

答案 1 :(得分:1)

虽然iamnat列出的选项和推理是正确的,但至少还有一个选项可以添加到列表中。您可以考虑使用.rightNav {float: right} @media only screen and (min-width : 768px) { float: none; } 个对象,在configmap中维护文件并将它们安装到容器中。

官方文档中可以找到一个很好的例子 - 查看Real World Example configuring Redis部分以获得一些可操作的输入。