Mar*_*ina 40 docker google-cloud-platform kubernetes
我正在评估Kubernetes作为我们新应用程序的平台.现在,它看起来非常令人兴奋!但是,我遇到了一个问题:我在GCE上托管我的集群,我需要一些机制来在两个pod之间共享存储 - 连续集成服务器和我的应用服务器.使用kubernetes这样做的最佳方法是什么?没有任何卷类型似乎符合我的需要,因为如果一个pod需要写入磁盘,则无法共享GCE磁盘.NFS是完美的,但似乎需要kubernetes集群的特殊构建选项?
编辑:共享存储似乎是我现在使用Kubernetes多次遇到的问题.有多个用例,我只想拥有一个卷并将其连接到多个pod(具有写访问权限).我只能假设这是一个常见的用例,不是吗?
EDIT2:例如,这个页面描述了如何设置Elasticsearch集群,但是用永久存储连接起来是不可能的(如这里所述),这使得它毫无意义:(
Ian*_*her 27
回答这个问题有点迟,但根据我迄今为止Kubernetes/MSA的经验,这里的问题更多的是你的设计模式.在MSA中经常出现的基本设计模式之一是对服务进行适当的封装,其中还包括其数据.
您的服务应该关注与其关注领域相关的数据,并且与OOP非常相似,应该允许通过接口(API,PUBSUB消息等)访问此数据到其他服务.对数据的多服务访问是一种类似于OOP中的全局变量的反模式.
我认为Google也有同样的观点,这就是Kubernetes以这种方式建立的原因.
例如,如果您想要写日志,您应该拥有一个日志服务,每个服务可以使用它需要记录的相关数据来调用.直接写入共享磁盘意味着,如果更改了日志目录结构等,则需要更新每个容器,或者决定在错误上添加电子邮件等额外功能.
小智 24
NFS是一个内置的卷插件,支持多个pod编写器.没有特殊的构建选项可以让NFS在Kube中运行.
我在Kubernetes的Red Hat工作,主要专注于存储.
Van*_*uan 14
首先。Kubernetes没有集成功能可以在主机之间共享存储。以下是几个选项。但是首先,如果您已经设置了一些卷,则如何共享存储。
要在多个Pod之间共享卷,您需要使用访问模式ReadWriteMany创建PVC。
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteMany
storageClassName: myvolume
resources:
requests:
storage: 1Gi
Run Code Online (Sandbox Code Playgroud)
之后,您可以将其安装到多个Pod:
apiVersion: v1
kind: Pod
metadata:
name: myapp1
spec:
containers:
...
volumeMounts:
- mountPath: /data
name: data
subPath: app1
volumes:
- name: data
persistentVolumeClaim:
claimName: 'my-pvc'
---
apiVersion: v1
kind: Pod
metadata:
name: myapp2
spec:
containers:
...
volumeMounts:
- mountPath: /data
name: data
subPath: app2
volumes:
- name: data
persistentVolumeClaim:
claimName: 'my-pvc'
Run Code Online (Sandbox Code Playgroud)
当然,持久卷必须可以通过网络访问。否则,您需要确保所有吊舱都已调度到具有该卷的节点。
有几种适合于此的卷类型,并且与任何云提供商无关:
当然,要使用一个卷,您首先需要拥有它。也就是说,如果要使用NFS,则需要在K8s群集中的所有节点上设置NFS。如果要使用Ceph,则需要设置Ceph集群等。
开箱即用的唯一支持Kubernetes的卷类型是Portworks。有关如何在GKE中进行设置的说明。
为了在K8s中设置Ceph集群,有一个正在开发中的名为Rook的项目。
但是,如果您只希望一个节点中的文件夹在另一个节点中可用,这一切都是大材小用。在这种情况下,只需设置NFS服务器。这不会比配置其他卷类型难,并且将消耗更少的cpu /内存/磁盘资源。
如果您希望将日志写入磁盘,我建议您查看logspout https://github.com/gliderlabs/logspout。这将收集每个 pod 的日志记录,然后您可以使用 google 云平台相当新的使用 fludd 的日志记录服务。这样,每个 Pod 中的所有日志都会收集到一个位置。
如果数据通常会写入数据库或类似性质的数据,我建议在运行数据库的 kubernetes 集群之外拥有一个单独的服务器。
编辑
为了在 pod 之间共享文件,我建议将 google 云存储驱动器安装到 kubernetes 集群中的每个节点,然后将其设置为每个 pod 中的一个卷,该卷安装到节点上的已安装目录,而不是直接安装到驱动器。将其安装到每个节点是很好的,因为 Pod 不在指定节点上运行,因此在这种情况下最好将其集中化。
| 归档时间: |
|
| 查看次数: |
38633 次 |
| 最近记录: |