为什么有人想在 Kubernetes 中使用 GCE Persistent Disk 或 EBS?
Why would anyone want to use GCE Persistent Disk or EBS with Kubernetes?
这些磁盘只能由一个节点访问。
每个节点会有不同的数据。
此外,任何节点都可以随时终止,因此您必须找到一种方法将卷重新附加到替换旧节点的新节点。你会怎么做?
并且在纵向扩展之后,新节点可能没有这些磁盘中的任何一个可供附加,因此您需要一个新磁盘。
为什么有人想做这一切?只是临时 space?为此,他们可以使用 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 的节点。如果删除节点,其所有 Pods 都可以重新安排到其他地方,EBS 卷也可以转到其他地方。
一个EBS卷一次只能附加到一个实例;在 Kubernetes 卷术语中,它只能有一个 ReadWriteOnce
access mode。如果它可以附加到许多实例(例如,一个基于 NFS 的 EFS 文件系统),它可以是 ReadOnlyMany
或 ReadWriteMany
.
这使得 EBS 成为持久数据存储的相当不错的默认选择,如果您的应用程序确实需要它。它实际上不是特定于主机的,它可以根据需要在集群中移动。如果两个 Pods 需要共享文件,它将无法工作,但这通常是一个复杂而脆弱的设置,最好将您的应用程序设计为不需要它。
最好的设置是您的应用程序根本不需要持久性本地存储。这使得扩展部署变得容易,因为数据在“其他地方”。数据可以在数据库中;数据可以在托管数据库中,例如 RDS;或者它可以在像 S3 这样的对象存储系统中。同样,这需要更改您的应用程序以不使用本地文件进行数据存储。
这些磁盘只能由一个节点访问。
每个节点会有不同的数据。
此外,任何节点都可以随时终止,因此您必须找到一种方法将卷重新附加到替换旧节点的新节点。你会怎么做?
并且在纵向扩展之后,新节点可能没有这些磁盘中的任何一个可供附加,因此您需要一个新磁盘。
为什么有人想做这一切?只是临时 space?为此,他们可以使用 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 的节点。如果删除节点,其所有 Pods 都可以重新安排到其他地方,EBS 卷也可以转到其他地方。
一个EBS卷一次只能附加到一个实例;在 Kubernetes 卷术语中,它只能有一个 ReadWriteOnce
access mode。如果它可以附加到许多实例(例如,一个基于 NFS 的 EFS 文件系统),它可以是 ReadOnlyMany
或 ReadWriteMany
.
这使得 EBS 成为持久数据存储的相当不错的默认选择,如果您的应用程序确实需要它。它实际上不是特定于主机的,它可以根据需要在集群中移动。如果两个 Pods 需要共享文件,它将无法工作,但这通常是一个复杂而脆弱的设置,最好将您的应用程序设计为不需要它。
最好的设置是您的应用程序根本不需要持久性本地存储。这使得扩展部署变得容易,因为数据在“其他地方”。数据可以在数据库中;数据可以在托管数据库中,例如 RDS;或者它可以在像 S3 这样的对象存储系统中。同样,这需要更改您的应用程序以不使用本地文件进行数据存储。