如何解决工作节点之间的 Kubernetes 卷复制
我有一个简单的网络应用,它使用 volume
/persistent volume claim
从那里提供静态数据。 Pod 仅在卷所在的第一个工作节点上进行调度。
如果我想扩展 Pod 并将它们分配到所有可用节点,如何处理节点之间的 shared
卷?
- name: app-nginx
image: nginx:1.20.0
command: ["/usr/sbin/nginx","-g","daemon off;"]
volumeMounts:
- name: static-volume
mountPath: "/opt/static"
volumes:
- name: static-volume
persistentVolumeClaim:
claimName: pvc-static
一种选择是使用 NFS
而不是在 EC2 实例上物理分配卷。
另一种方法是为每个 pod 复制静态文件(使用 init 容器将它们填充到适当的目录中),但这需要额外的时间并且对于大量静态数据不可行。
在 Kubernetes 中处理这种情况的正确方法是什么?有没有办法声明将使用逻辑上相同的卷但物理上位于不同节点上的不同实例的部署?
解决方法
您正在寻找的是支持 ReadOnlyMany
或 ReadWriteMany
Access Mode。
按照文档链接获取官方支持的列表。
如果您使用的是 AWS
,那么通过 EFS
插件使用 NFS
可能是最简单的解决方案,但请考虑到它是基于 NFS 的解决方案这一事实,并且您可能会受到性能损失。
顺便说一句,您尝试做的事情对我来说就像是一种反模式。 应用程序的 Docker 映像应该是自包含的。在您的情况下,为静态网站提供服务的容器应该包含它需要的所有静态文件,以便完全可移植。这将完全不需要外部卷来存储数据。
,是的,您说得对,一种选择是使用 NFS。您必须实现 ReadWriteMany 或 ReadOnlyMany :https://stackoverflow.com/a/57798369/5525824
如果您有 ReadOnlyMany 的方案,您可以使用 GKE 在 GCP 中创建 PVC。 https://cloud.google.com/kubernetes-engine/docs/how-to/persistent-volumes/readonlymany-disks
但是,如果您希望进行写入操作,也可以选择使用文件系统或NFS。
如果不想使用任何托管服务并遵循 cloud-agnostic :Minio
,您还可以签出实施 https://min.io/NAS:https://github.com/minio/charts#nas-gateway
仅供仅供参考:https://github.com/ctrox/csi-s3 性能可能不佳。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。