为什么有人想将GCE持久磁盘或EBS与Kubernetes一起使用?

为什么有人想将GCE持久磁盘或EBS与Kubernetes一起使用?,kubernetes,google-kubernetes-engine,persistent-volumes,Kubernetes,Google Kubernetes Engine,Persistent Volumes,这些磁盘只能由单个节点访问 每个节点都有不同的数据 此外,任何节点都可以随时终止,因此您必须找到一种方法将卷重新附加到替换旧节点的新节点。你会怎么做 在scaleup之后,新节点可能没有这些磁盘中的一个可以连接,因此您需要一个新磁盘 为什么会有人想这么做?只是暂时的空间?为此,他们可以使用EC2实例存储或GCE启动盘(尽管我想这可能足够了)。我特别熟悉EBS;我假设GCE持久磁盘的工作方式相同。重要的细节是EBS卷不绑定到特定节点;虽然它一次只能连接到一个节点,但它可以移动到另一个节点,Kube

这些磁盘只能由单个节点访问

每个节点都有不同的数据

此外,任何节点都可以随时终止,因此您必须找到一种方法将卷重新附加到替换旧节点的新节点。你会怎么做

在scaleup之后,新节点可能没有这些磁盘中的一个可以连接,因此您需要一个新磁盘


为什么会有人想这么做?只是暂时的空间?为此,他们可以使用EC2实例存储或GCE启动盘(尽管我想这可能足够了)。

我特别熟悉EBS;我假设GCE持久磁盘的工作方式相同。重要的细节是EBS卷不绑定到特定节点;虽然它一次只能连接到一个节点,但它可以移动到另一个节点,Kubernetes知道如何做到这一点

EBS卷可以动态连接到EC2实例。在Kubernetes中,通常有一个动态卷供应器,它能够创建由EBS卷支持的PersistentVolume对象,以响应PersistentVolumeClaim对象。关键是,如果Pod使用引用EBS卷PV的PVC,则存储驱动程序知道,无论Pod安排在哪里,它都可以将EBS卷动态连接到该EC2实例

这意味着EBS卷PersistentVolume实际上没有“锁定”到单个节点。如果Pod被删除,并且新Pod使用PersistentVolumeClaim,则卷可以“移动”到运行新Pod的节点。如果节点被移除,其所有吊舱都可以在其他地方重新调度,EBS卷也可以在其他地方

EBS卷一次只能连接到一个实例;在Kubernetes卷术语中,它只能有一个
ReadWriteOnce
。如果它可以连接到多个实例(例如,基于EFS NFS的文件系统),那么它可以是
ReadOnlyMany
ReadWriteMany

这使得EBS成为持久数据存储的一个相当好的默认选择,如果您的应用程序确实需要它的话。它实际上不是特定于主机的,可以根据需要在集群中移动。如果两个pod需要共享文件,那么它将不起作用,但这通常是一个复杂而脆弱的设置,最好将应用程序设计为不需要它


如果应用程序根本不需要持久本地存储,那么最好的设置就是。这使得扩展部署变得很容易,因为数据位于“其他地方”。数据可以存储在数据库中;数据可以在托管数据库中,如RDS;或者它可以在对象存储系统中,比如S3。同样,这需要更改应用程序,使其不使用本地文件存储数据。

我特别熟悉EBS;我假设GCE持久磁盘的工作方式相同。重要的细节是EBS卷不绑定到特定节点;虽然它一次只能连接到一个节点,但它可以移动到另一个节点,Kubernetes知道如何做到这一点

EBS卷可以动态连接到EC2实例。在Kubernetes中,通常有一个动态卷供应器,它能够创建由EBS卷支持的PersistentVolume对象,以响应PersistentVolumeClaim对象。关键是,如果Pod使用引用EBS卷PV的PVC,则存储驱动程序知道,无论Pod安排在哪里,它都可以将EBS卷动态连接到该EC2实例

这意味着EBS卷PersistentVolume实际上没有“锁定”到单个节点。如果Pod被删除,并且新Pod使用PersistentVolumeClaim,则卷可以“移动”到运行新Pod的节点。如果节点被移除,其所有吊舱都可以在其他地方重新调度,EBS卷也可以在其他地方

EBS卷一次只能连接到一个实例;在Kubernetes卷术语中,它只能有一个
ReadWriteOnce
。如果它可以连接到多个实例(例如,基于EFS NFS的文件系统),那么它可以是
ReadOnlyMany
ReadWriteMany

这使得EBS成为持久数据存储的一个相当好的默认选择,如果您的应用程序确实需要它的话。它实际上不是特定于主机的,可以根据需要在集群中移动。如果两个pod需要共享文件,那么它将不起作用,但这通常是一个复杂而脆弱的设置,最好将应用程序设计为不需要它


如果应用程序根本不需要持久本地存储,那么最好的设置就是。这使得扩展部署变得很容易,因为数据位于“其他地方”。数据可以存储在数据库中;数据可以在托管数据库中,如RDS;或者它可以在对象存储系统中,比如S3。同样,这需要对应用程序进行更改,以避免使用本地文件存储数据。

谢谢。我知道这些磁盘及其数据可以重新连接到新节点。但是,当不同节点的磁盘彼此不同步,并且一个新节点(在升级中)可能得到一个没有数据的新磁盘时,这种持久性的价值是什么;它是一个单独的磁盘,您可以一次连接到单个实例。如果pod移动到其他节点,EBS卷将从现有节点分离并重新连接到新节点;它将是完全相同的底层存储。谢谢。我知道磁盘一次可以连接到一个实例,假设我们在一个有3个节点的集群中有3个这样的磁盘。这些磁盘将不会有相同的数据(除非它们是只读的),但是Kubernetes集群应该设计有冗余,因此我们希望磁盘具有相同的数据。如果添加了第四个节点,那么这些节点肯定会连接到具有非常不同数据的磁盘上。那怎么行呢?那就更重要了