使大型静态数据文件可用于Kubernetes Pod

7

我有几个相当大的UTF-8数据文件,pod需要在启动时加载到内存中 - 从几百KB到约50MB。

该项目(包括helm图表)是开源的,但其中一些文件不是 - 否则我可能会将它们直接包含在镜像中。我的最初想法是创建configmaps,但我理解的是,50MB超出了configmaps的预期用途,因此在某些情况下可能会出现问题。我认为secrets也有点过度 - 它们不是机密,只是不应该放在公共互联网上。

出于性能原因,我宁愿在每个pod中都有一个内存副本,而不是使用共享缓存,但我可能是错的。至少这可能会增加比它值得的更多的复杂性。

configmaps是正确的选择吗?


1
另一个可以考虑的选择是将它们托管在安全的Web服务器上,并在启动时下载它们。 - Andrew Savinykh
1个回答

8
从我的角度来看,最好的解决方案是使用 init container 从安全存储中下载文件(正如评论中所提到的 Andrew Savinykh 所说),将其存储到pod的卷中,然后在pod的主容器中使用它。
请参见 示例
apiVersion: v1
kind: Pod
metadata:
  name: init-demo
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80
    volumeMounts:
    - name: workdir
      mountPath: /usr/share/nginx/html
  # These containers are run during pod initialization
  initContainers:
  - name: install
    image: busybox
    command:
    - wget
    - "-O"
    - "/work-dir/index.html"
    - http://kubernetes.io
    volumeMounts:
    - name: workdir
      mountPath: "/work-dir"
  dnsPolicy: Default
  volumes:
  - name: workdir
    emptyDir: {}

1
但是当我有一个大文件在本地时,我该如何将其挂载到Pod上? - iamatsundere181
如果您指的是Node文件系统,则可以直接挂载它:https://kubernetes.io/docs/concepts/storage/volumes/#hostpath https://kubernetes.io/docs/concepts/storage/volumes/#local - VAS
不好意思,我的意思是部署k8s的机器上的文件,我想没有什么办法可以直接下载吧?也许我得先在线部署然后再下载到pod里。 - iamatsundere181
是的,使用云对象存储非常方便,比如 S3 或 Google Cloud 存储。 - VAS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接